diff --git a/.gitignore b/.gitignore
index 55f3edb0..0189cb63 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+/modules
+/templates
+
# published files from modules
/public/modules
/public/assets
@@ -9,9 +12,6 @@
**/views/**/custom/*
!**/views/**/custom/.gitkeep
-# module config - generated in ModuleManager service provider
-**/module.json
-
# uploaded files
/public/uploads/*
!/public/uploads/.gitkeep
@@ -32,4 +32,5 @@
/public/js
/public/fonts
/bower_components
-.sass-cache
\ No newline at end of file
+.sass-cache
+!/resources/views/vendor/
diff --git a/app/CMS/Contracts/Repositories/Module.php b/app/CMS/Contracts/Repositories/Module.php
index bc94ff5b..e00e372a 100644
--- a/app/CMS/Contracts/Repositories/Module.php
+++ b/app/CMS/Contracts/Repositories/Module.php
@@ -10,7 +10,7 @@ interface Module extends BaseRepository
public function getUpdateContentTitle(ModuleModel $module, ContentModel $content = null);
- public function getOverviewTitle(ModuleModel $module);
+ public function getOverviewTitle(ModuleModel $module = null);
public function getByHandler($handler);
diff --git a/app/CMS/Enumerations/UserRoles.php b/app/CMS/Enumerations/UserRoles.php
index 735592f3..6aabee15 100644
--- a/app/CMS/Enumerations/UserRoles.php
+++ b/app/CMS/Enumerations/UserRoles.php
@@ -9,7 +9,7 @@ class UserRoles extends BaseEnumeration
{
$roles = [
User::ROLE_ADMIN => 'admin/userManagement.role_' . User::ROLE_ADMIN,
- User::ROLE_EDITOR => 'admin/userManagement.role_' . User::ROLE_EDITOR,
+// User::ROLE_EDITOR => 'admin/userManagement.role_' . User::ROLE_EDITOR,
User::ROLE_VISITOR => 'admin/userManagement.role_' . User::ROLE_VISITOR
];
diff --git a/app/CMS/Handlers/Handler.php b/app/CMS/Handlers/AdminHandler.php
similarity index 75%
rename from app/CMS/Handlers/Handler.php
rename to app/CMS/Handlers/AdminHandler.php
index 420fae52..4b3533a1 100644
--- a/app/CMS/Handlers/Handler.php
+++ b/app/CMS/Handlers/AdminHandler.php
@@ -1,19 +1,17 @@
trans('admin/contents.basicInfo'),
'meta' => trans('admin/contents.metaOptions'),
'publication' => trans('admin/contents.publicationOptions'),
'appearance' => trans('admin/contents.appearance'),
'files' => trans('admin/contents.files')
];
+
+ if (\Auth::user()->cannot('upload', File::class)) {
+ unset($formParts['files']);
+ }
+
+ return $formParts;
}
public static function getExtendedFormInputsCreate()
{
- return [
+ $formParts = [
'basicInfo' => 'admin.content.formParts.basicInformation',
'meta' => 'admin.content.formParts.metaInformation',
'publication' => 'admin.content.formParts.publicationSetup',
'appearance' => 'admin.content.formParts.appearance',
'files' => 'admin.content.formParts.files'
];
+
+ if (\Auth::user()->cannot('upload', File::class)) {
+ unset($formParts['files']);
+ }
+
+ return $formParts;
}
-
+
public static function getExtendedFormInputsEdit()
{
return self::getExtendedFormInputsCreate();
diff --git a/app/CMS/Handlers/BaseHandler.php b/app/CMS/Handlers/BaseHandler.php
index c7ae9574..2dbff17e 100644
--- a/app/CMS/Handlers/BaseHandler.php
+++ b/app/CMS/Handlers/BaseHandler.php
@@ -1,16 +1,24 @@
route('admin.dashboard', trans('admin/mainMenu.dashboard'), [], 10, ['icon' => 'fa fa-fw fa-dashboard']);
/**
* Content pages
- *
* Submenus can be registered later
*/
- $menu->dropdown(trans('admin/mainMenu.contentPages'), function ($sub) {
- $sub->route('content.overview', trans('admin/mainMenu.contentPageOverview'), [], 10000, ['icon' => 'fa fa-fw fa-list']);
- }, 20, ['icon' => 'fa fa-fw fa-database']);
+ $contentModules = app(Module::class)->getContentModules();
+
+ if ($user->can('manage', Content::class) && !$contentModules->isEmpty()) {
+ $menu->dropdown(trans('admin/mainMenu.contentPages'), function ($sub) {
+ $sub->route('content.order', trans('admin/mainMenu.contentOrder'), [], 999, ['icon' => 'fa fa-fw fa-reorder']);
+ $sub->route('content.overview', trans('admin/mainMenu.contentPageOverview'), [], 10000, ['icon' => 'fa fa-fw fa-list']);
+ }, 20, ['icon' => 'fa fa-fw fa-database']);
+ }
/**
* File manager
*/
- $menu->route('upload.overview', trans('admin/mainMenu.fileManager'), [], 40, ['icon' => 'fa fa-fw fa-folder']);
+ if ($user->can('manage', File::class)) {
+ $menu->route('upload.overview', trans('admin/mainMenu.fileManager'), [], 40, ['icon' => 'fa fa-fw fa-folder']);
+ }
/**
* Widgets and widget areas
*/
- $menu->dropdown(trans('admin/mainMenu.widgets'), function ($sub) {
- // create list of all widget types
- $widgets = WidgetTypes::getWithTranslations();
+ if ($user->can('manage', Widget::class) || $user->can('manage', WidgetArea::class)) {
+ $menu->dropdown(trans('admin/mainMenu.widgets'), function ($sub) use ($user) {
+ // create list of all widget types
+ $widgets = WidgetTypes::getWithTranslations();
- if (!empty($widgets)) {
- $sub->dropdown(trans('admin/mainMenu.newWidget'), function ($sub) use ($widgets) {
- $i = 1;
- foreach ($widgets as $type => $name) {
- $sub->route('widgets.new', $name, ['type' => $type], $i++);
- }
- }, 10, ['icon' => 'fa fa-fw fa-plus']);
- }
+ if (!empty($widgets) && $user->can('create', Widget::class)) {
+ $sub->dropdown(trans('admin/mainMenu.newWidget'), function ($sub) use ($widgets) {
+ $i = 1;
+ foreach ($widgets as $type => $name) {
+ $sub->route('widgets.new', $name, ['type' => $type], $i++);
+ }
+ }, 10, ['icon' => 'fa fa-fw fa-plus']);
+ }
+ if ($user->can('manage', Widget::class)) {
+ $sub->route('widgets.overview', trans('admin/mainMenu.widgetsOverview'), [], 20, ['icon' => 'fa fa-fw fa-list']);
+ }
- $sub->route('widgets.overview', trans('admin/mainMenu.widgetsOverview'), [], 20, ['icon' => 'fa fa-fw fa-list']);
-
- // menu for widget areas
- $sub->dropdown(trans('admin/mainMenu.widgetAreas'), function ($sub) {
- $sub->route('widgetareas.new', trans('admin/mainMenu.newWidgetArea'), [], 1, ['icon' => 'fa fa-fw fa-plus']);
- $sub->route('widgetareas.overview', trans('admin/mainMenu.widgetAreaOverview'), [], 2, ['icon' => 'fa fa-fw fa-list']);
- }, 50, ['icon' => 'fa fa-fw fa-object-group']);
- }, 50, ['icon' => 'fa fa-fw fa-puzzle-piece']);
+ // menu for widget areas
+ if ($user->can('manage', WidgetArea::class)) {
+ $sub->dropdown(trans('admin/mainMenu.widgetAreas'), function ($sub) use ($user) {
+ if ($user->can('create', WidgetArea::class)) {
+ $sub->route('widgetareas.new', trans('admin/mainMenu.newWidgetArea'), [], 1, ['icon' => 'fa fa-fw fa-plus']);
+ }
+ $sub->route('widgetareas.overview', trans('admin/mainMenu.widgetAreaOverview'), [], 2, ['icon' => 'fa fa-fw fa-list']);
+ }, 50, ['icon' => 'fa fa-fw fa-object-group']);
+ }
+ }, 50, ['icon' => 'fa fa-fw fa-puzzle-piece']);
+ }
/**
* Divide system entries and other links in menu
*/
$menu->addDivider(9999);
- $menu->dropdown(trans('admin/mainMenu.system'), function ($sub) {
+ $menu->dropdown(trans('admin/mainMenu.system'), function ($sub) use ($user) {
/**
* User management
*/
- $sub->dropdown(trans('admin/mainMenu.userManagement'), function ($sub) {
- $sub->route('users.new', trans('admin/mainMenu.newUser'), [], 10, ['icon' => 'fa fa-fw fa-user-plus']);
- $sub->route('users.overview', trans('admin/mainMenu.usersOverview'), [], 30, ['icon' => 'fa fa-fw fa-users']);
- }, 20, ['icon' => 'fa fa-fw fa-users']);
+ if ($user->can('manage', User::class)) {
+ $sub->dropdown(trans('admin/mainMenu.userManagement'), function ($sub) use ($user) {
+ if ($user->can('create', User::class)) {
+ $sub->route('users.new', trans('admin/mainMenu.newUser'), [], 10, ['icon' => 'fa fa-fw fa-user-plus']);
+ }
+ $sub->route('users.overview', trans('admin/mainMenu.usersOverview'), [], 30, ['icon' => 'fa fa-fw fa-users']);
+ }, 20, ['icon' => 'fa fa-fw fa-users']);
+ }
/**
* Templates
*/
- $templatePaths = TemplatePathsHumanReadableRootOnly::getWithTranslations();
- if (!empty($templatePaths)) {
- $sub->dropdown(trans('admin/mainMenu.templates'), function ($sub) use ($templatePaths) {
- $i = 1;
- foreach ($templatePaths as $id => $name) {
- $sub->route('templates.overview', $name, ['id' => $id], $i++);
- }
- }, 60, ['icon' => 'fa fa-fw fa-file-code-o']);
+ if ($user->can('manage', Template::class)) {
+ $sub->route('templates.index', trans('admin/mainMenu.templates'), [], 70, ['icon' => 'fa fa-fw fa-file-code-o']);
}
- $sub->route('log.overview', trans('admin/mainMenu.actionLog'), [], 70, ['icon' => 'fa fa-fw fa-history']);
- $sub->route('settings.overview', trans('admin/mainMenu.settings'), [], 80, ['icon' => 'fa fa-fw fa-gear']);
+ if ($user->can('manage', ActionLog::class)) {
+ $sub->route('log.overview', trans('admin/mainMenu.actionLog'), [], 70, ['icon' => 'fa fa-fw fa-history']);
+ }
+
+ if ($user->can('manage', Settings::class)) {
+ $sub->route('settings.overview', trans('admin/mainMenu.settings'), [], 80, ['icon' => 'fa fa-fw fa-gear']);
+ $sub->route('permissions.index', trans('admin/mainMenu.permissions'), [], 90, ['icon' => 'fa fa-fw fa-key']);
+ }
}, 10000, ['icon' => 'fa fa-fw fa-gears']);
});
// create menu with user profile
- \Menu::create('profileMenu', function ($menu) {
- $menu->route('users.detail', trans('admin/userManagement.profile'), [], 10, ['icon' => 'fa fa-fw fa-user icon']);
+ \Menu::create('profileMenu', function ($menu) use ($user) {
+ $menu->route('users.detail', trans('admin/userManagement.profile'), ['user' => $user], 10, ['icon' => 'fa fa-fw fa-user icon']);
$menu->addDivider(999);
$menu->route('logout', trans('admin/common.logout'), [], 1000, ['icon' => 'fa fa-fw fa-power-off icon']);
});
diff --git a/app/CMS/Handlers/History.php b/app/CMS/Handlers/History.php
index c7d8973e..5f787e43 100644
--- a/app/CMS/Handlers/History.php
+++ b/app/CMS/Handlers/History.php
@@ -17,8 +17,7 @@ class History implements HistoryHandler
switch ($changeset->column) {
case 'pageContent':
$route = route('history.diff', [
- 'revision' => $changeset->edit_batch,
- 'id' => $changeset->id
+ 'revision' => $changeset->id
]);
return "(" . trans('admin/history.diff') . " )";
@@ -48,8 +47,8 @@ class History implements HistoryHandler
break;
default:
return trans('admin/history.changedFromTo', [
- 'from' => is_null($changeset->old_value) ? trans('admin/history.emptyValue') : $changeset->old_value,
- 'to' => is_null($changeset->new_value) ? trans('admin/history.emptyValue') : $changeset->new_value,
+ 'from' => empty($changeset->old_value) ? trans('admin/history.emptyValue') : $changeset->old_value,
+ 'to' => empty($changeset->new_value) ? trans('admin/history.emptyValue') : $changeset->new_value,
]);
break;
}
diff --git a/app/CMS/Handlers/Registrators/Items/SettingExtension.php b/app/CMS/Handlers/Registrators/Items/SettingExtension.php
index f4d29bf1..c9d73335 100644
--- a/app/CMS/Handlers/Registrators/Items/SettingExtension.php
+++ b/app/CMS/Handlers/Registrators/Items/SettingExtension.php
@@ -15,6 +15,7 @@ class SettingExtension
* @var string view used for rendering given settings part
*/
protected $view;
+ protected $order;
/**
* SettingExtension constructor.
@@ -23,11 +24,12 @@ class SettingExtension
* @param string $name
* @param string $view
*/
- public function __construct($id, $name, $view)
+ public function __construct($id, $name, $view, $order)
{
$this->id = $id;
$this->name = $name;
$this->view = $view;
+ $this->order = $order;
}
/**
@@ -53,4 +55,14 @@ class SettingExtension
{
return $this->view;
}
+
+ /**
+ * @return mixed
+ */
+ public function getOrder()
+ {
+ return $this->order;
+ }
+
+
}
\ No newline at end of file
diff --git a/app/CMS/Handlers/Registrators/SearchEngineRegistrator.php b/app/CMS/Handlers/Registrators/SearchEngineRegistrator.php
index 09f35c54..a11edc15 100644
--- a/app/CMS/Handlers/Registrators/SearchEngineRegistrator.php
+++ b/app/CMS/Handlers/Registrators/SearchEngineRegistrator.php
@@ -1,7 +1,7 @@
checkIfRegistered($sectionId);
+ if (is_null($order)) {
+ $order = count($this->settingsExtensions);
+ }
+
// register new extension
- $this->settingsExtensions[$sectionId] = new SettingExtension($sectionId, $sectionName, $sectionView);
+ $this->settingsExtensions[$sectionId] = new SettingExtension($sectionId, $sectionName, $sectionView, $order);
}
/**
@@ -44,14 +49,15 @@ class SettingsExtensionRegistrator
/**
* Getter for all registered extensions
- *
* @return array
*/
public function get()
{
- // sort registered extensions by key
- ksort($this->settingsExtensions);
-
+ // sort registered extensions
+ uasort($this->settingsExtensions, function (SettingExtension $a, SettingExtension $b) {
+ return $a->getOrder() - $b->getOrder();
+ });
+
return $this->settingsExtensions;
}
diff --git a/app/CMS/Handlers/Registrators/TemplateRegistrator.php b/app/CMS/Handlers/Registrators/TemplateRegistrator.php
index a9adfd73..e058137b 100644
--- a/app/CMS/Handlers/Registrators/TemplateRegistrator.php
+++ b/app/CMS/Handlers/Registrators/TemplateRegistrator.php
@@ -207,6 +207,7 @@ class TemplateRegistrator
protected function registerTemplates($path, $templatePathId)
{
$templates = File::files($path);
+ $registeredTemplates = Templates::getWithTranslations();
foreach ($templates as $template) {
@@ -217,7 +218,6 @@ class TemplateRegistrator
// get all templates and template name (path/to/template.blade.php -> path.to.template)
$templateName = $this->getTemplateName($template);
- $registeredTemplates = Templates::getWithTranslations();
if (!in_array($templateName, $registeredTemplates)) {
$params = [
@@ -316,4 +316,14 @@ class TemplateRegistrator
return $this->namespace . trim($templateName, '.');
}
+
+ public function deleteNonExistingPaths()
+ {
+ $paths = TemplatePath::all();
+
+ foreach ($paths as $path) {
+ if (!is_dir(base_path($path->path)))
+ \File::deleteDirectory($path->path);
+ }
+ }
}
diff --git a/app/CMS/Handlers/Search/Content.php b/app/CMS/Handlers/Search/Content.php
index a4fbf4ed..66902633 100644
--- a/app/CMS/Handlers/Search/Content.php
+++ b/app/CMS/Handlers/Search/Content.php
@@ -1,7 +1,10 @@
cannot('manage', ContentModel::class)) {
+ return new Collection();
+ }
+
$token = $this->tokenize($term);
return ContentModel::where('pageContent', 'LIKE', $token)
diff --git a/app/CMS/Handlers/Search/Files.php b/app/CMS/Handlers/Search/Files.php
index 2833a7f2..5568b2be 100644
--- a/app/CMS/Handlers/Search/Files.php
+++ b/app/CMS/Handlers/Search/Files.php
@@ -1,7 +1,9 @@
cannot('manage', File::class)) {
+ return new Collection();
+ }
+
$token = $this->tokenize($term);
return File::where('original_filename', 'LIKE', $token)
diff --git a/app/CMS/Handlers/Search/Presenters/AdminContent.php b/app/CMS/Handlers/Search/Presenters/AdminContent.php
index 80768dc3..502c882f 100644
--- a/app/CMS/Handlers/Search/Presenters/AdminContent.php
+++ b/app/CMS/Handlers/Search/Presenters/AdminContent.php
@@ -3,11 +3,17 @@ namespace App\CMS\Handlers\Search\Presenters;
use App\CMS\Enumerations\ContentStatuses;
use App\CMS\Handlers\Contracts\SearchPresenterHandler;
+use App\Models\Content\Content;
class AdminContent implements SearchPresenterHandler
{
public function render($foundItems)
{
+ if (\Auth::user()
+ ->cannot('manage', Content::class)) {
+ return null;
+ }
+
return view('admin.search.results.content', [
'pages' => $foundItems,
'statuses' => ContentStatuses::getWithTranslations(),
diff --git a/app/CMS/Handlers/Search/Presenters/AdminFiles.php b/app/CMS/Handlers/Search/Presenters/AdminFiles.php
index 5869f731..00eebc3a 100644
--- a/app/CMS/Handlers/Search/Presenters/AdminFiles.php
+++ b/app/CMS/Handlers/Search/Presenters/AdminFiles.php
@@ -2,6 +2,7 @@
namespace App\CMS\Handlers\Search\Presenters;
use App\CMS\Handlers\Contracts\SearchPresenterHandler;
+use App\Models\FileManager\File;
class AdminFiles implements SearchPresenterHandler
{
@@ -14,6 +15,11 @@ class AdminFiles implements SearchPresenterHandler
*/
public function render($foundItems)
{
+ if (\Auth::user()
+ ->cannot('manage', File::class)) {
+ return null;
+ }
+
return view('admin.fileManager.filesTiles', ['files' => $foundItems, 'hideDelete' => true]);
}
}
\ No newline at end of file
diff --git a/app/CMS/Helpers/CurrentTemplate.php b/app/CMS/Helpers/CurrentTemplate.php
index 070ce033..bc1f21ab 100644
--- a/app/CMS/Helpers/CurrentTemplate.php
+++ b/app/CMS/Helpers/CurrentTemplate.php
@@ -22,16 +22,9 @@ class CurrentTemplate implements TemplateHandler
{
if (!self::$initialized) {
self::$template = Cache::rememberForever('current-template', function () {
- $template = Module::where('is_template', true)
+ return Module::where('is_template', true)
->where('enabled', true)
->first();
-
- // todo remove after adding $casts into Module model
- if ($template) {
- $template->module_settings = json_decode($template->module_settings);
- }
-
- return $template;
});
diff --git a/app/CMS/Helpers/PageRenderer.php b/app/CMS/Helpers/PageRenderer.php
deleted file mode 100644
index bab9d042..00000000
--- a/app/CMS/Helpers/PageRenderer.php
+++ /dev/null
@@ -1,37 +0,0 @@
-moduleHandler;
-
- // render page
- return $handler->render($page, $parameters);
- }
-}
diff --git a/app/CMS/Helpers/Settings.php b/app/CMS/Helpers/Settings.php
index dac28723..58f39a02 100644
--- a/app/CMS/Helpers/Settings.php
+++ b/app/CMS/Helpers/Settings.php
@@ -2,6 +2,7 @@
namespace App\CMS\Helpers;
+use App\CMS\Repositories\Settings\Settings as SettingsRepository;
use App\Models\Settings as SettingsModel;
use Illuminate\Support\Facades\Cache;
@@ -78,8 +79,7 @@ class Settings
{
if (!self::$initialized) {
self::$settings = Cache::remember('settings', config('cache.settingCacheLifetime'), function () {
- $model = new SettingsModel();
- return $model->getAll();
+ return app(SettingsRepository::class)->getAll();
});
}
}
diff --git a/app/CMS/Helpers/WidgetAreas.php b/app/CMS/Helpers/WidgetAreas.php
index 9b277701..907b721f 100644
--- a/app/CMS/Helpers/WidgetAreas.php
+++ b/app/CMS/Helpers/WidgetAreas.php
@@ -1,7 +1,8 @@
getWidgets($uniqueCode)
->get();
});
- WidgetArea::where('code', $uniqueCode)
- ->increment('viewed');
-
self::saveRenderedWidgetArea($widgets);
}
@@ -44,7 +43,7 @@ class WidgetAreas
}
$widgets = Cache::remember('widgets', setting('widgetCacheLifetime', 5), function () {
- $widgetArea = new WidgetArea();
+ $widgetArea = app(WidgetAreaRepository::class);
return $widgetArea->getWidgets()
->get();
});
@@ -58,7 +57,7 @@ class WidgetAreas
*
* @param $uniqueCode
*
- * @return mixed
+ * @return void
*/
public static function render($uniqueCode)
{
@@ -72,4 +71,14 @@ class WidgetAreas
echo isset(self::$widgetAreas[$uniqueCode]) ? self::$widgetAreas[$uniqueCode] : null;
}
+
+ /**
+ * Get list of loaded widgets and areas
+ *
+ * @return array
+ */
+ public static function getLoadedWidgets()
+ {
+ return ['areas' => array_keys(self::$widgetAreas)];
+ }
}
\ No newline at end of file
diff --git a/app/CMS/Interactions/Admin/FileManager/CreateDirectory.php b/app/CMS/Interactions/Admin/FileManager/CreateDirectory.php
index db6069cc..c7789759 100644
--- a/app/CMS/Interactions/Admin/FileManager/CreateDirectory.php
+++ b/app/CMS/Interactions/Admin/FileManager/CreateDirectory.php
@@ -31,22 +31,13 @@ class CreateDirectory implements Interaction
{
$data['parentDirectory'] = isset($data['parentDirectory']) ? $data['parentDirectory'] : null;
- // todo this should probably go into validation, but we are not able to get $data in getValidationRules
// check if created folder does not exist in current directory
if ($this->repository->checkIfNameExists($data['name'], $data['parentDirectory'])) {
throw new SubdirectoryExistsInDirectory();
}
- // todo use Directory::create() and rename columns/fields in request
// create new database entry
- $directory = new Directory();
- $directory->name = $data['name'];
- $directory->parent_id = $data['parentDirectory'];
- $directory->user_id = \Auth::user()->id;
- $directory->description = $data['description'];
- $directory->save();
-
- return $directory;
+ return $this->repository->create($data);
}
/**
diff --git a/app/CMS/Interactions/Admin/FileManager/DeleteFile.php b/app/CMS/Interactions/Admin/FileManager/DeleteFile.php
deleted file mode 100644
index e69de29b..00000000
diff --git a/app/CMS/Interactions/Admin/FileManager/EditDirectory.php b/app/CMS/Interactions/Admin/FileManager/EditDirectory.php
deleted file mode 100644
index e69de29b..00000000
diff --git a/app/CMS/Interactions/Admin/FileManager/EditFileMetaInformation.php b/app/CMS/Interactions/Admin/FileManager/EditFileMetaInformation.php
deleted file mode 100644
index e69de29b..00000000
diff --git a/app/CMS/Interactions/Admin/FileManager/UploadFile.php b/app/CMS/Interactions/Admin/FileManager/UploadFile.php
deleted file mode 100644
index e69de29b..00000000
diff --git a/app/CMS/Interactions/Admin/FileManager/UploadFileRevision.php b/app/CMS/Interactions/Admin/FileManager/UploadFileRevision.php
deleted file mode 100644
index e69de29b..00000000
diff --git a/app/CMS/MenuPresenters/FoundationDrilldownMenuPresenter.php b/app/CMS/MenuPresenters/FoundationDrilldownMenuPresenter.php
index c20a59d6..7d24c744 100644
--- a/app/CMS/MenuPresenters/FoundationDrilldownMenuPresenter.php
+++ b/app/CMS/MenuPresenters/FoundationDrilldownMenuPresenter.php
@@ -1,8 +1,9 @@
getUrl() . '">' . $item->getIcon() . ' ' . $item->title . '';
- return '
getActiveState($item) . '>' . $link . ' '.PHP_EOL;
+ return 'getActiveState($item) . '>' . $link . ' ' . PHP_EOL;
}
/**
@@ -43,7 +44,7 @@ class FoundationDropdownMenuPresenter extends Presenter
*/
public function getDividerWrapper()
{
- return ' '.PHP_EOL;
+ return ' ' . PHP_EOL;
}
/**
diff --git a/app/CMS/MenuPresenters/MetismenuPresenter.php b/app/CMS/MenuPresenters/MetismenuPresenter.php
index 8bca5a84..a2f290e4 100644
--- a/app/CMS/MenuPresenters/MetismenuPresenter.php
+++ b/app/CMS/MenuPresenters/MetismenuPresenter.php
@@ -1,8 +1,9 @@
getUrl())) {
+ return null;
+ }
+
return 'getActiveState($item) . '>' . $item->getIcon() . ' ' . $item->title . ' ' . PHP_EOL;
}
diff --git a/app/CMS/MenuPresenters/ProfileMenuPresenter.php b/app/CMS/MenuPresenters/ProfileMenuPresenter.php
index 255f0476..b0ce96b8 100644
--- a/app/CMS/MenuPresenters/ProfileMenuPresenter.php
+++ b/app/CMS/MenuPresenters/ProfileMenuPresenter.php
@@ -1,8 +1,9 @@
has_submodules = true;
+ $parentModule->save();
+ }
+
+ // insert module into database
+ $module = Module::create([
+ 'name' => $name,
+ 'description' => $description,
+ 'handler' => $handler,
+ 'static_name' => $staticName,
+ 'manages_content' => $managesContent,
+ 'support_categories' => $supportCategories,
+ 'alias' => $alias,
+ 'module_settings' => $settings,
+ 'parent_id' => $parentModuleId ? $parentModuleId : null,
+ 'enabled' => 1,
+ 'is_template' => $isTemplate
+ ]);
+
+ // install something module-specific
+ if ($handler && is_callable([$handler, 'install'])) {
+ call_user_func([$handler, 'install']);
+ }
+
+ return $module;
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/ModuleManager/Providers/ModuleManager.php b/app/CMS/ModuleManager/Providers/ModuleManager.php
new file mode 100644
index 00000000..73080e85
--- /dev/null
+++ b/app/CMS/ModuleManager/Providers/ModuleManager.php
@@ -0,0 +1,54 @@
+all();
+ } catch (QueryException $e) {
+ return;
+ }
+
+ // iterate over all modules and enable or disable them
+ foreach ($modules as $module) {
+ if (isset($module->module_settings['providers']) && !empty($module->module_settings['providers'])) {
+ foreach ($module->module_settings['providers'] as $provider) {
+ $this->app->register($provider);
+ }
+ }
+
+ // include files (if any)
+ if (isset($module->module_settings['files']) && !empty($module->module_settings['files'])) {
+ foreach ($module->module_settings['files'] as $file) {
+ $path = config('modules.paths.modules') . '/' . $module->static_name . '/' . $file;
+
+ if (!file_exists($path)) {
+ $path = base_path($file);
+ }
+
+ @include_once $path;
+ }
+ }
+ }
+ }
+
+ /**
+ * Register the application services.
+ * @return void
+ */
+ public function register()
+ {
+ }
+}
diff --git a/app/CMS/ModuleManager/Uninstaller.php b/app/CMS/ModuleManager/Uninstaller.php
new file mode 100644
index 00000000..1406cbe5
--- /dev/null
+++ b/app/CMS/ModuleManager/Uninstaller.php
@@ -0,0 +1,60 @@
+is_template) {
+ self::deleteDirectory(resource_path('views/visitor'));
+ self::deleteDirectory(resource_path('views/modules'));
+ self::deleteDirectory(public_path('assets'));
+
+ // delete all template paths
+ TemplatePath::getQuery()
+ ->delete();
+ }
+
+ if ($module->handler && is_callable([$module->handler, 'uninstall'])) {
+ call_user_func([$module->handler, 'uninstall'], $module);
+ }
+
+ $module->delete();
+ }
+
+ /**
+ * Delete directory when uninstalling module.
+ *
+ * @param $directory
+ *
+ * @throws \ErrorException
+ */
+ private static function deleteDirectory($directory)
+ {
+ if (!is_dir($directory)) {
+ return;
+ }
+
+ $success = \File::deleteDirectory($directory, true);
+
+ if (!$success) {
+ throw new \ErrorException('Cannot delete ' . $directory);
+ }
+ }
+}
diff --git a/app/Providers/ModuleServiceProvider.php b/app/CMS/Modules/ServiceProviders/ServiceProvider.php
similarity index 86%
rename from app/Providers/ModuleServiceProvider.php
rename to app/CMS/Modules/ServiceProviders/ServiceProvider.php
index a121b014..f73a9f3a 100644
--- a/app/Providers/ModuleServiceProvider.php
+++ b/app/CMS/Modules/ServiceProviders/ServiceProvider.php
@@ -1,18 +1,19 @@
alias;
}, \Config::get('view.paths')), [$sourcePath]), $this->alias);
- if (is_dir($sourcePath)) {
+ if (is_dir($sourcePath) && $this->publishViews) {
$this->publishes([$sourcePath => $viewPath], 'module-views');
}
}
/**
* Register translations.
- *
* @return void
*/
protected function registerTranslations()
diff --git a/app/CMS/Modules/Stubs/Migrations/create.stub b/app/CMS/Modules/Stubs/Migrations/create.stub
new file mode 100644
index 00000000..4eba77e2
--- /dev/null
+++ b/app/CMS/Modules/Stubs/Migrations/create.stub
@@ -0,0 +1,27 @@
+increments('id');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Rollback migration
+ */
+ public function down()
+ {
+ Schema::dropIfExists('$TableName$');
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/Migrations/new.stub b/app/CMS/Modules/Stubs/Migrations/new.stub
new file mode 100644
index 00000000..9d5b2fb1
--- /dev/null
+++ b/app/CMS/Modules/Stubs/Migrations/new.stub
@@ -0,0 +1,28 @@
+ '$Module$',
+ 'translatedName' => '$module$::$module$.name',
+ 'translatedDescription' => '$module$::$module$.description',
+ 'alias' => strtolower('$Module$'),
+ 'handler' => \Modules\$Module$\Handlers\$Module$Handler::class,
+ 'providers' => [\Modules\$Module$\Providers\$Module$ServiceProvider::class],
+ 'files' => ['Http/routes.php'],
+ 'order' => 0,
+];
\ No newline at end of file
diff --git a/app/Policies/.gitkeep b/app/CMS/Modules/Stubs/NewModule/Database/Migrations/.gitkeep
similarity index 100%
rename from app/Policies/.gitkeep
rename to app/CMS/Modules/Stubs/NewModule/Database/Migrations/.gitkeep
diff --git a/app/CMS/Modules/Stubs/NewModule/Entities/$Entity$.stub b/app/CMS/Modules/Stubs/NewModule/Entities/$Entity$.stub
new file mode 100644
index 00000000..9676203a
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Entities/$Entity$.stub
@@ -0,0 +1,10 @@
+dropdown(trans('$module$::$module$.name'), function ($submenu) use ($user) {
+ $submenu->route('$module$.overview', trans('$module$::$module$.overview'), [], 20, ['icon' => 'fa fa-fw fa-list']);
+ $submenu->route('$module$.new', trans('$module$::$module$.new'), [], 21, ['icon' => 'fa fa-fw fa-plus']);
+ }, 15, ['icon' => 'fa fa-fw']);
+
+
+
+ // TODO: add admin menu entries
+ }
+
+ /**
+ * Does this module support categories?
+ * @return boolean
+ */
+ public static function supportCategories()
+ {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Http/Controllers/Admin/$Module$.stub b/app/CMS/Modules/Stubs/NewModule/Http/Controllers/Admin/$Module$.stub
new file mode 100644
index 00000000..bada410e
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Http/Controllers/Admin/$Module$.stub
@@ -0,0 +1,103 @@
+$module$Repository = $$module$Repository;
+ }
+
+ /**
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public function index()
+ {
+ $items = $Entity$Entity::all();
+
+ return view('$module$::admin/index', compact('items'));
+ }
+
+ /**
+ * Display form for updating entity
+ *
+ * @param $Entity$Entity $entity
+ *
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public function edit($Entity$Entity $entity)
+ {
+ return view('$module$::admin/update', compact('entity'));
+ }
+
+ /**
+ * Update existing entity
+ *
+ * @param Update$Entity$ $request
+ * @param $Entity$Entity $item
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function update(Update$Entity$ $request, $Entity$Entity $entity)
+ {
+
+ // ...
+
+ $this->$module$Repository->update($entity, $request->all());
+
+ return redirect()
+ ->back()
+ ->with('success', trans('$module$.$module.successfullyUpdated'));
+ }
+
+ /**
+ * Display form for creating new entity
+ *
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public function create() {
+ $entity = new $Entity$Entity();
+
+ return view('$module$::admin/create', compact('entity'));
+ }
+
+ /**
+ * Create new instance of entity
+ */
+ public function store(Create$Entity$ $request) {
+ // ...
+
+ $this->$module$Repository->create($request->all());
+
+ return redirect()
+ ->back()
+ ->with('success', trans('$module$.$module.successfullyUpdated'));
+ }
+
+ /**
+ * Delete entity
+ *
+ * @param $Entity$ $entity
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function destroy($Entity$ $entity) {
+ $entity->delete();
+
+ return redirect()
+ ->back()
+ ->with('success', trans('$module$.$module.successfullyDeleted'));
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Http/Requests/Create$Entity$.stub b/app/CMS/Modules/Stubs/NewModule/Http/Requests/Create$Entity$.stub
new file mode 100644
index 00000000..f79dcc59
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Http/Requests/Create$Entity$.stub
@@ -0,0 +1,11 @@
+ \LaravelLocalization::setLocale() . '/admin/$module$',
+ 'middleware' => ['admin'],
+ 'namespace' => 'Modules\$Module$\Http\Controllers\Admin'
+ ], function () {
+ Route::get('/', '$Module$@index')
+ ->name('$module$.overview');
+
+ Route::get('/new', '$Module$@create')
+ ->name('$module$.new');
+
+ Route::post('/new', '$Module$@store')
+ ->name('$module$.postNew');
+
+ Route::get('/edit/{id}', '$Module$@edit')
+ ->name('$module$.edit');
+
+ Route::post('/edit/{id}', '$Module$@update')
+ ->name('$module$.postEdit');
+
+ Route::get('/delete/{id}', '$Module$@delete')
+ ->name('$module$.delete');
+});
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Providers/$Module$ServiceProvider.stub b/app/CMS/Modules/Stubs/NewModule/Providers/$Module$ServiceProvider.stub
new file mode 100644
index 00000000..60fb3266
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Providers/$Module$ServiceProvider.stub
@@ -0,0 +1,31 @@
+alias = strtolower('$module$');
+ }
+
+ /**
+ * Set path to module
+ */
+ protected function setModulePath()
+ {
+ $this->path = __DIR__;
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Repositories/$Module$Repository.stub b/app/CMS/Modules/Stubs/NewModule/Repositories/$Module$Repository.stub
new file mode 100644
index 00000000..a835994f
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Repositories/$Module$Repository.stub
@@ -0,0 +1,24 @@
+update($data);
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Resources/lang/cs/$module$.stub b/app/CMS/Modules/Stubs/NewModule/Resources/lang/cs/$module$.stub
new file mode 100644
index 00000000..18238f41
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Resources/lang/cs/$module$.stub
@@ -0,0 +1,13 @@
+ '$Module$',
+ 'new' => 'Vytvořit nový',
+ 'description' => '',
+ 'successfullyUpdated' => 'Úspěšně upraveno.',
+ 'successfullyCreated' => 'Úspěšně vytvořeno.',
+ 'successfullyDeleted' => 'Úspěšně smazáno.',
+ 'overview' => 'Přehled',
+ 'noItems' => 'Žádná data.',
+ 'save' => 'Uložit'
+];
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/create.blade.stub b/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/create.blade.stub
new file mode 100644
index 00000000..e7d1aa6f
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/create.blade.stub
@@ -0,0 +1,7 @@
+@extends('admin.layoutWithNavigation')
+
+@section('pageHeading', @trans('$module$::$module$.name'))
+
+@section('content')
+ @include('$module$::admin/form', ['action' => route('$module$.new')])
+@endsection
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/edit.blade.stub b/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/edit.blade.stub
new file mode 100644
index 00000000..6b8bd1ff
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/edit.blade.stub
@@ -0,0 +1,7 @@
+@extends('admin.layoutWithNavigation')
+
+@section('pageHeading', @trans('$module$::$module$.name'))
+
+@section('content')
+ @include('$module$::admin/form', ['action' => route('$module$.update')])
+@endsection
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/form.blade.stub b/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/form.blade.stub
new file mode 100644
index 00000000..f422b7d9
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/form.blade.stub
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/index.blade.stub b/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/index.blade.stub
new file mode 100644
index 00000000..817e62e0
--- /dev/null
+++ b/app/CMS/Modules/Stubs/NewModule/Resources/views/admin/index.blade.stub
@@ -0,0 +1,17 @@
+@extends('admin.layoutWithNavigation')
+
+@section('pageHeading', @trans('$module$::$module$.overview'))
+
+@section('content')
+ @if (!empty($items))
+
+ @foreach($items as $item)
+
+ @endforeach
+
+ @else
+
+ @trans('$module$::$module$.noItems')
+
+ @endif
+@endsection
\ No newline at end of file
diff --git a/app/CMS/Pipeline/SavePipeline/Process/UploadRelatedFiles.php b/app/CMS/Pipeline/SavePipeline/Process/UploadRelatedFiles.php
index 447897f0..2fb245f2 100644
--- a/app/CMS/Pipeline/SavePipeline/Process/UploadRelatedFiles.php
+++ b/app/CMS/Pipeline/SavePipeline/Process/UploadRelatedFiles.php
@@ -1,4 +1,5 @@
join('modules', 'modules.handler', '=', 'contents.moduleHandler')
->join('users', 'users.id', '=', 'contents.userId')
- ->addSelect(DB::raw('COALESCE(users.name, users.email) AS author_name'))
- ->addSelect('users.email AS author_email')
->whereNull('contents.deleted_at')
+ ->whereNull('contents.parentId')
->where('contents.language', LaravelLocalization::getCurrentLocale())
->where('modules.enabled', 1)
+ ->with('module', 'subpages', 'subpages.module', 'subpages.templateModel', 'templateModel')
+ ->orderBy('contents.order')
->orderBy('contents.created_at', 'DESC');
// filter results using handler
diff --git a/app/CMS/Repositories/FileManager/Directory.php b/app/CMS/Repositories/FileManager/Directory.php
index 0e6250ec..1d697270 100644
--- a/app/CMS/Repositories/FileManager/Directory.php
+++ b/app/CMS/Repositories/FileManager/Directory.php
@@ -1,4 +1,5 @@
exists();
}
- public function update(DirectoryModel $directory, $data) {
+ /**
+ * Create new directory
+ *
+ * @param $data
+ *
+ * @return DirectoryModel
+ */
+ public function create($data)
+ {
+ $directory = new DirectoryModel();
+ $directory->name = $data['name'];
+ $directory->parent_id = $data['parentDirectory'];
+ $directory->user_id = \Auth::user()->id;
+ $directory->description = $data['description'];
+ $directory->save();
+
+ return $directory;
+ }
+
+ /**
+ * Update given directory
+ *
+ * @param DirectoryModel $directory
+ * @param $data
+ */
+ public function update(DirectoryModel $directory, $data)
+ {
$directory->name = $data['name'];
$directory->description = $data['description'];
$directory->save();
diff --git a/app/CMS/Repositories/FileManager/File.php b/app/CMS/Repositories/FileManager/File.php
new file mode 100644
index 00000000..23ffaaef
--- /dev/null
+++ b/app/CMS/Repositories/FileManager/File.php
@@ -0,0 +1,16 @@
+update($data);
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/Repositories/Module.php b/app/CMS/Repositories/Module.php
index b8320d39..93d9fcb9 100644
--- a/app/CMS/Repositories/Module.php
+++ b/app/CMS/Repositories/Module.php
@@ -1,9 +1,11 @@
where('manages_content', true)
+ ->get();
+ });
+ }
+
public function getCreateContentTitle(ModuleModel $module)
{
$pageHeading = trans('admin/contents.new', ['name' => trans($module->name)]);
@@ -42,9 +53,14 @@ class Module extends Repository implements IModule
return is_null($moduleHeading) ? $pageHeading : $moduleHeading;
}
- public function getOverviewTitle(ModuleModel $module)
+ public function getOverviewTitle(ModuleModel $module = null)
{
$pageHeading = 'admin/contents.overview';
+
+ if (is_null($module)) {
+ return $pageHeading;
+ }
+
$moduleHeading = $this->call($module, 'getOverviewTitle');
return is_null($moduleHeading) ? $pageHeading : $moduleHeading;
@@ -52,8 +68,19 @@ class Module extends Repository implements IModule
public function all()
{
- return ModuleModel::where('enabled', true)
- ->get();
+ return Cache::remember('enabled-modules-and-template', setting('cacheModules', 3600), function () {
+ return ModuleModel::where('enabled', true)
+ ->get();
+ });
+ }
+
+ public function getOnlyModules()
+ {
+ return Cache::remember('enabled-modules', setting('cacheModules', 3600), function () {
+ return ModuleModel::where('enabled', true)
+ ->where('is_template', false)
+ ->get();
+ });
}
public function getByHandler($handler)
diff --git a/app/CMS/Repositories/Permissions/Permission.php b/app/CMS/Repositories/Permissions/Permission.php
new file mode 100644
index 00000000..f77952c6
--- /dev/null
+++ b/app/CMS/Repositories/Permissions/Permission.php
@@ -0,0 +1,15 @@
+with('subpermissions')
+ ->get();
+ }
+}
\ No newline at end of file
diff --git a/app/Models/ModelTraits/Settings.php b/app/CMS/Repositories/Settings/Settings.php
similarity index 59%
rename from app/Models/ModelTraits/Settings.php
rename to app/CMS/Repositories/Settings/Settings.php
index 841c6125..fe680c5d 100644
--- a/app/Models/ModelTraits/Settings.php
+++ b/app/CMS/Repositories/Settings/Settings.php
@@ -1,27 +1,27 @@
where('language', LaravelLocalization::getCurrentLocale())
- ->orWhere('language', null)
- ->orderBy('language', 'ASC');
+ ->where('language', LaravelLocalization::getCurrentLocale())
+ ->orWhere('language', null)
+ ->orderBy('language', 'ASC');
}
/**
* Load all settings
- *
* @return \stdClass
*/
public function getAll()
@@ -34,7 +34,6 @@ trait Settings
/**
* Get all settings with language info
- *
* @return \stdClass
*/
public function getAllWithLanguage()
@@ -55,7 +54,6 @@ trait Settings
/**
* Load only config for views
- *
* @return \stdClass
*/
public function getForView()
@@ -83,4 +81,31 @@ trait Settings
return $data;
}
+
+ /**
+ * Save settings
+ *
+ * @param array $data
+ */
+ public function save(array $data)
+ {
+ $commonSettings = isset($data['commonSettings']) ? $data['commonSettings'] : [];
+ unset($data['commonSettings']);
+
+ foreach ($data as $key => $value) {
+ // select language for this setting key
+ $language = isset($commonSettings[$key]) ? null : LaravelLocalization::getCurrentLocale();
+ $setting = SettingsModel::firstOrNew(['language' => $language, 'key' => $key]);
+
+ if ($setting->value == $value) {
+ continue;
+ }
+
+ // set value and save or delete
+ $setting->value = $value;
+ empty($value) ? $setting->delete() : $setting->save();
+ }
+
+ Cache::forget('settings');
+ }
}
\ No newline at end of file
diff --git a/app/CMS/Repositories/Templates/Template.php b/app/CMS/Repositories/Templates/Template.php
index dff25732..fdb0bcfd 100644
--- a/app/CMS/Repositories/Templates/Template.php
+++ b/app/CMS/Repositories/Templates/Template.php
@@ -1,10 +1,12 @@
id)
- ->select(['template_name', 'name', 'description'])
- ->get();
+ return Cache::remember('templates-for-module-'.$module->id, setting('cacheModules', 3600), function () use ($module) {
+ return TemplateModel::where('module_id', $module->id)
+ ->select(['template_name', 'name', 'description'])
+ ->get();
+ });
}
}
\ No newline at end of file
diff --git a/app/CMS/Repositories/Users/User.php b/app/CMS/Repositories/Users/User.php
new file mode 100644
index 00000000..f4c6d7df
--- /dev/null
+++ b/app/CMS/Repositories/Users/User.php
@@ -0,0 +1,65 @@
+username = $data['username'];
+ }
+
+ // change name (if set)
+ if (isset($data['name'])) {
+ $user->name = $data['name'];
+ }
+
+ if (isset($data['role'])) {
+ $user->role = $data['role'];
+ }
+
+ if (isset($data['status'])) {
+ $user->status = $data['status'];
+ }
+
+ if (isset($data['password'])) {
+ $user->password = Hash::make($data['password']);
+ }
+
+ $user->email = $data['email'];
+
+ $user->save();
+ }
+
+ /**
+ * Create new user
+ *
+ * @param $data
+ *
+ * @return UserModel
+ */
+ public function create($data)
+ {
+ // create new user
+ $user = new UserModel();
+ $user->name = $data['name'];
+ $user->email = $data['email'];
+ $user->username = $data['username'];
+ $user->role = $data['role'];
+ $user->password = Hash::make($data['password']);
+
+ // store user into database
+ $user->save();
+
+ return $user;
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/Repositories/Widgets/Widget.php b/app/CMS/Repositories/Widgets/Widget.php
index bb924ce4..84299373 100644
--- a/app/CMS/Repositories/Widgets/Widget.php
+++ b/app/CMS/Repositories/Widgets/Widget.php
@@ -1,4 +1,5 @@
description = $data['description'];
$widget->container_class = $data['containerClass'];
$widget->container_id = empty($data['containerId']) ? null : $data['containerId'];
- $widget->settings = json_encode(call_user_func([$widgetType->handler, 'save'], $request));
+ $widget->settings = call_user_func([$widgetType->handler, 'save'], $request);
// save into database
$widget->save();
@@ -30,4 +31,22 @@ class Widget
return $widget;
}
+
+ public function edit(WidgetModel $widget, Request $request)
+ {
+ // update name
+ $widget->name = $request->name;
+ $widget->container_class = $request->containerClass;
+ $widget->container_id = empty($request->containerId) ? null : $request->containerId;
+ $widget->description = $request->description;
+
+ // try to save this widget
+ $widget->settings = call_user_func([$widget->widget_type_handler, 'save'], $request);
+
+ // save into database
+ $widget->save();
+
+ // fire event with editing widget
+ Event::fire(new \App\Events\EditWidget($widget));
+ }
}
\ No newline at end of file
diff --git a/app/CMS/Repositories/Widgets/WidgetArea.php b/app/CMS/Repositories/Widgets/WidgetArea.php
new file mode 100644
index 00000000..a278549f
--- /dev/null
+++ b/app/CMS/Repositories/Widgets/WidgetArea.php
@@ -0,0 +1,55 @@
+join('widget_in_widget_area', 'widget_in_widget_area.widget_id', '=', 'widgets.id')
+ ->join('widget_areas', 'widget_in_widget_area.widget_area_id', '=', 'widget_areas.id')
+ ->where('language', LaravelLocalization::getCurrentLocale())
+ ->orderBy('widget_in_widget_area.position');
+ if (!$uniqueCode) {
+ $widgets = $widgets->where('widget_areas.viewed', '>=', setting('preloadFrequentedWidgetAreasTreshold', 10));
+ } else {
+ $widgets = $widgets->where('code', $uniqueCode);
+ }
+
+ return $widgets;
+ }
+
+ public function update(\App\Models\Widgets\WidgetArea $area, Request $request) {
+ $area->name = $request->name;
+ $area->description = $request->description;
+ $area->save();
+
+ // fire event with new widget area
+ Event::fire(new \App\Events\EditWidgetArea($area));
+ }
+
+ /**
+ * Create new instance of widget area
+ *
+ * @param Request $request
+ */
+ public function create(Request $request)
+ {
+ $area = WidgetAreaModel::create([
+ 'code' => $request->code,
+ 'name' => $request->name,
+ 'description' => $request->description
+ ]);
+
+ // fire event with new widget area
+ Event::fire(new CreateNewWidgetArea($area));
+ }
+}
\ No newline at end of file
diff --git a/app/CMS/Widgets/Menu/Menu.php b/app/CMS/Widgets/Menu/Menu.php
index 21cf66e9..4d4bb697 100644
--- a/app/CMS/Widgets/Menu/Menu.php
+++ b/app/CMS/Widgets/Menu/Menu.php
@@ -1,19 +1,21 @@
whereIn('id', $ids)
- ->whereIn('status', $allowedStatuses)
- ->get();
- $used = [];
- foreach ($pages as $page) {
- $used[$page->id] = $page;
- }
+ return Cache::remember('widget-menu-content-pages', 5, function () use ($ids, $allowedStatuses) {
+ $pages = Content::where('language', LaravelLocalization::getCurrentLocale())
+ ->whereIn('id', $ids)
+ ->whereIn('status', $allowedStatuses)
+ ->where('moduleHandler', '!=', Article::class)
+ ->get();
- return $used;
+ $used = [];
+ foreach ($pages as $page) {
+ $used[$page->id] = $page;
+ }
+
+ return $used;
+ });
}
}
\ No newline at end of file
diff --git a/app/CMS/Widgets/Menu/Presenters/Menu.php b/app/CMS/Widgets/Menu/Presenters/Menu.php
index 7a1ccb02..aa6b9cb3 100644
--- a/app/CMS/Widgets/Menu/Presenters/Menu.php
+++ b/app/CMS/Widgets/Menu/Presenters/Menu.php
@@ -1,4 +1,5 @@
getOverview();
- $widget->settings = new \stdClass();
- $widget->settings->links = [];
+ $pages = $content->getOverview()
+ ->get();
return view('admin.widgets.menu.new', [
'type' => $type,
'widget' => $widget,
'pages' => $pages,
+ 'links' => []
]);
}
@@ -122,8 +123,6 @@ class Menu implements WidgetRenderer
return $a->order - $b->order;
});
- $widget->settings->links = (object)$links;
-
- return view('admin.widgets.menu.edit', ['widget' => $widget, 'pages' => $pages]);
+ return view('admin.widgets.menu.edit', ['widget' => $widget, 'pages' => $pages, 'links' => (object)$links]);
}
}
\ No newline at end of file
diff --git a/app/Console/Commands/ChangePassword.php b/app/Console/Commands/ChangePassword.php
index d8ab70a9..bb0789a8 100644
--- a/app/Console/Commands/ChangePassword.php
+++ b/app/Console/Commands/ChangePassword.php
@@ -30,7 +30,7 @@ class ChangePassword extends Command
$email = $this->argument('email');
try {
$user = User::where(['email' => $email])
- ->first();
+ ->firstOrFail();
} catch (ModelNotFoundException $e) {
$this->error('Invalid user ' . $email . '.');
return;
diff --git a/app/Console/Commands/InitDatabaseSchema.php b/app/Console/Commands/InitDatabaseSchema.php
index af8c11c0..ebeb91d6 100644
--- a/app/Console/Commands/InitDatabaseSchema.php
+++ b/app/Console/Commands/InitDatabaseSchema.php
@@ -13,14 +13,14 @@ class InitDatabaseSchema extends Command
*
* @var string
*/
- protected $signature = 'db:init {schema.sql}';
+ protected $signature = 'db:init';
/**
* The console command description.
*
* @var string
*/
- protected $description = 'Command description';
+ protected $description = 'Init database structure';
/**
* Create a new command instance.
@@ -39,13 +39,16 @@ class InitDatabaseSchema extends Command
*/
public function handle()
{
+ do {
+ $schema = $this->ask('Path to database schema file', 'database/schema.sql');
+ } while (!file_exists($schema));
- $schema = $this->argument('schema.sql');
-
- if (!file_exists($schema)) throw new NotFoundHttpException('File '.$schema.' does not exist.');
DB::unprepared(file_get_contents($schema));
- $this->line('Successfully imported');
+ $this->call('migrate');
+ $this->call('db:seed');
+
+ $this->line('Database successfully initialized.');
}
}
diff --git a/app/Console/Commands/InstallCMS.php b/app/Console/Commands/InstallCMS.php
new file mode 100644
index 00000000..f7819089
--- /dev/null
+++ b/app/Console/Commands/InstallCMS.php
@@ -0,0 +1,153 @@
+createEnv();
+
+ $this->line('Rerun this script again, we need to load changes.');
+ return;
+ }
+
+ // install php dependencies
+ $parameters = env('APP_DEBUG') ? '' : '--no-dev';
+ exec('composer install ' . $parameters);
+
+ // init database
+ try {
+ // does exist something in laguages table? (Or event table itself?)
+ Language::all();
+ } catch (QueryException $e) {
+ // database is not initialized
+ $this->call('db:init');
+ }
+
+ // install npm dependencies
+ exec('npm install');
+ exec('bower install');
+ exec('gulp');
+
+ // change chmod of needed directories
+ $directories = ['bootstrap/cache', 'storage', 'public'];
+ foreach ($directories as $directory) {
+ $this->changeChmod($directory);
+ }
+ $this->line('Chmod changed');
+
+ // generate APP_KEY in .env
+ $this->call('key:generate');
+
+ // create user
+ $this->line('Creating admin user...');
+ do {
+ $email = $this->ask('E-mail for admin user');
+ } while (empty($email));
+
+ $this->call('user:new', compact('email'));
+
+ $this->line('All done. CMS should be prepared.');
+ }
+
+ /**
+ * Insert value into .env config file
+ *
+ * @param $envConstant
+ * @param $value
+ */
+ private function setEnvConstant($envConstant, $value)
+ {
+ $content = file_get_contents(base_path('.env'));
+ $content = preg_replace('/' . $envConstant . '=(.*)/i', $envConstant . '=' . $value, $content);
+ file_put_contents(base_path('.env'), $content);
+ }
+
+ /**
+ * Create .env file with all needed constants
+ */
+ private function createEnv()
+ {
+ \File::copy(base_path('.env.example'), base_path('.env'));
+
+ // set environment
+ do {
+ $env = $this->ask('Install environment: ', 'local');
+ } while (empty($env));
+ $this->setEnvConstant('APP_ENV', $env);
+
+ // set debugging
+ if ($env == 'local') {
+ $debug = 'true';
+ } else {
+ $debug = $this->confirm('Enable debugging?', true) ? 'true' : 'false';
+ }
+ $this->setEnvConstant('APP_DEBUG', $debug);
+
+ // setup database
+ $databaseFields = [
+ 'DB_HOST' => 'Database server',
+ 'DB_DATABASE' => 'Database name',
+ 'DB_USERNAME' => 'Database user',
+ 'DB_PASSWORD' => 'Password'
+ ];
+ foreach ($databaseFields as $constant => $text) {
+ do {
+ $value = $this->ask($text);
+ } while (empty ($value));
+
+ $this->setEnvConstant($constant, $value);
+ }
+
+ // set app url
+ do {
+ $url = $this->ask('Application URL');
+ $url = trim($url, ' /');
+ } while (empty($url));
+ $this->setEnvConstant('SITE_URL', $url);
+ $this->setEnvConstant('UPLOAD_URL', $url . '/public/uploads');
+ $this->setEnvConstant('THUMBNAIL_URL', $url . '/public/uploads/thumbnails');
+ }
+
+ /**
+ * Recursively change chmod to 777 in given directory
+ *
+ * @param $directory
+ */
+ private function changeChmod($directory)
+ {
+ @chmod($directory, 0777);
+
+ if (!is_dir($directory)) {
+ return;
+ }
+
+ $subdirectories = \File::allFiles($directory);
+
+ foreach ($subdirectories as $subdirectory) {
+ $this->changeChmod($subdirectory);
+ }
+ }
+}
diff --git a/app/Console/Commands/Modules/CreateMigration.php b/app/Console/Commands/Modules/CreateMigration.php
new file mode 100644
index 00000000..1f42ce11
--- /dev/null
+++ b/app/Console/Commands/Modules/CreateMigration.php
@@ -0,0 +1,106 @@
+moduleName = $module = $this->argument('module');
+ $this->migrationName = $name = $this->argument('name');
+ $this->tableName = trim($this->option('table'), ' =');
+
+ $modules = Module::where('enabled', true)
+ ->get()
+ ->pluck('static_name', 'id')
+ ->toArray();
+
+ while (is_null($module) || !in_array($module, $modules)) {
+ $module = $this->anticipate('Input valid module name', $modules);
+ }
+
+ $selectedModule = Module::where('static_name', $module)
+ ->first();
+
+ $basePath = $selectedModule->is_template ? config('modules.path.template') : config('modules.paths.modules');
+ $path = $basePath . '/' . $module . '/Database/Migrations/';
+ if (!is_dir($path)) {
+ mkdir($path, 0777, true);
+ }
+
+ while (is_null($name)) {
+ $this->migrationName = $name = $this->ask('Input migration name');
+ }
+
+ $stubName = $this->option('create') ? 'create' : 'new';
+ $content = file_get_contents(config('modules.paths.stubs') . '/Migrations/' . $stubName . '.stub');
+ $content = $this->replacePlaceholders($content);
+
+ $migrationName = $path . $this->getMigrationName($name);
+
+ file_put_contents($migrationName, $content);
+
+ $this->line('Migration successfully created.', 'info');
+ }
+
+ /**
+ * Find and replace all placeholders in given content
+ *
+ * @param $content
+ *
+ * @return mixed
+ */
+ private function replacePlaceholders($content)
+ {
+ $replace = [
+ '$MigrationName$' => studly_case($this->migrationName),
+ '$ModuleName$' => $this->moduleName,
+ '$TableName$' => $this->tableName
+ ];
+
+ foreach ($replace as $what => $for) {
+ $content = str_replace($what, $for, $content);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Get prefix for created migration
+ * @return false|string
+ */
+ protected function getDatePrefix()
+ {
+ return date('Y_m_d_His');
+ }
+
+ /**
+ * @param $name
+ *
+ * @return string
+ */
+ private function getMigrationName($name)
+ {
+ return $this->getDatePrefix() . '_' . snake_case($name) . '.php';
+ }
+}
diff --git a/app/Console/Commands/Modules/CreateNew.php b/app/Console/Commands/Modules/CreateNew.php
new file mode 100644
index 00000000..7a86e653
--- /dev/null
+++ b/app/Console/Commands/Modules/CreateNew.php
@@ -0,0 +1,122 @@
+loadArguments();
+ $path = preg_replace('|/{2,}|i', '/', config('modules.paths.modules') . '/' . $this->moduleNamespace);
+
+ if (is_dir($path)) {
+ $this->error('Module already exists in ' . $path);
+ return;
+ }
+
+ if (!is_dir($path))
+ mkdir($path);
+
+ // copy stub files
+ \File::copyDirectory(config('modules.paths.stubs').'/NewModule', $path);
+
+ $files = \File::allFiles($path);
+ foreach ($files as $file) {
+ $newName = str_replace('stub', 'php', $this->replacePlaceholders($file->getPathname()));
+
+ // ignore new entity when using existing entity
+ if ($this->entityNamespace != $defaultEntityNamespace && Str::contains('Entities', $file)) {
+ \File::delete($file);
+ continue;
+ }
+
+ // rename file
+ \File::move($file, $newName);
+
+ // change its content
+ $content = file_get_contents($newName);
+ $content = $this->replacePlaceholders($content);
+ file_put_contents($newName, $content);
+ }
+
+ $this->info('Module successfully created.');
+
+ $this->call('module:install', ['name' => $this->moduleName]);
+
+ }
+
+ /**
+ * Find and replace all placeholders in given content
+ *
+ * @param $content
+ *
+ * @return mixed
+ */
+ private function replacePlaceholders($content)
+ {
+ $replace = [
+ '$Module$' => $this->moduleName,
+ '$ModuleNamespace$' => str_replace('/', '\\', $this->moduleNamespace),
+ '$module$' => strtolower($this->moduleName),
+ '$EntityNamespace$' => $this->entityNamespace,
+ '$Entity$' => $this->entity
+ ];
+
+ foreach ($replace as $what => $for) {
+ $content = str_replace($what, $for, $content);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Load command arguments
+ * @return string
+ */
+ private function loadArguments()
+ {
+ $parent = $this->argument('parentModule');
+ $this->moduleName = $moduleName = $this->argument('name');
+ $this->moduleNamespace = trim($parent . '/' . $moduleName, '/');
+
+ $entity = $this->option('entity');
+
+ $defaultEntityNamespace = '\\Modules\\' . str_replace('/', '\\', $this->moduleNamespace) . '\Entities\\';
+
+ if (!empty($entity)) {
+ $parts = explode('\\', $entity);
+ $this->entity = $parts[count($parts) - 1];
+ unset($parts[count($parts) - 1]);
+ $this->entityNamespace = implode('\\', $parts);
+ } else {
+ $this->entityNamespace = $defaultEntityNamespace;
+ $this->entity = $this->moduleName;
+ }
+
+ return $defaultEntityNamespace;
+ }
+}
\ No newline at end of file
diff --git a/app/Console/Commands/Modules/DisableModule.php b/app/Console/Commands/Modules/DisableModule.php
new file mode 100644
index 00000000..2e5b1aa7
--- /dev/null
+++ b/app/Console/Commands/Modules/DisableModule.php
@@ -0,0 +1,48 @@
+argument('module');
+ $module = Module::where('static_name', $moduleName)
+ ->firstOrFail();
+
+ if ($module->has_submodules) {
+ $submodules = $module->submodules;
+
+ foreach ($submodules as $submodule) {
+ $this->call('module:disable', ['module' => $submodule->static_name]);
+ }
+ }
+
+ $module->enabled = false;
+ $module->save();
+
+ \Cache::forget('enabled-modules');
+ \Cache::forget('enabled-content-modules');
+ \Cache::forget('enabled-modules-and-template');
+
+ $this->line('Module ' . $module->static_name . ' disabled.');
+ }
+}
diff --git a/app/Console/Commands/Modules/EnableModule.php b/app/Console/Commands/Modules/EnableModule.php
new file mode 100644
index 00000000..c1ddba27
--- /dev/null
+++ b/app/Console/Commands/Modules/EnableModule.php
@@ -0,0 +1,52 @@
+argument('module');
+ $module = Module::where('static_name', $moduleName)
+ ->firstOrFail();
+
+ if ($module->has_submodules) {
+ $submodules = $module->submodules;
+
+ foreach ($submodules as $submodule) {
+ $this->call('module:enable', ['module' => $submodule->static_name]);
+ }
+ }
+
+ if ($module->parent_id) {
+ $module->parent->update(['enabled' => true]);
+ }
+
+ $module->enabled = true;
+ $module->save();
+
+ \Cache::forget('enabled-modules');
+ \Cache::forget('enabled-content-modules');
+ \Cache::forget('enabled-modules-and-template');
+
+ $this->line('Module ' . $module->static_name . ' enabled.');
+ }
+}
diff --git a/app/Console/Commands/InstallAllModules.php b/app/Console/Commands/Modules/InstallAllModules.php
similarity index 75%
rename from app/Console/Commands/InstallAllModules.php
rename to app/Console/Commands/Modules/InstallAllModules.php
index 50f53ac7..36e0f7e2 100644
--- a/app/Console/Commands/InstallAllModules.php
+++ b/app/Console/Commands/Modules/InstallAllModules.php
@@ -1,6 +1,6 @@
call('install-module', ['name' => $moduleName]);
+ $this->call('module:install', ['name' => $moduleName]);
} catch (\Exception $e) {
$this->line('Module ' . $moduleName . ' already installed.');
}
diff --git a/app/Console/Commands/InstallModule.php b/app/Console/Commands/Modules/InstallModule.php
similarity index 87%
rename from app/Console/Commands/InstallModule.php
rename to app/Console/Commands/Modules/InstallModule.php
index 5bf435e5..3f2836c3 100644
--- a/app/Console/Commands/InstallModule.php
+++ b/app/Console/Commands/Modules/InstallModule.php
@@ -1,7 +1,8 @@
loadConfig();
- if (empty($config))
+ if (empty($config)) {
return;
+ }
// check if it is valid
$this->checkMandatoryFields($config);
@@ -68,14 +67,15 @@ class InstallModule extends Command
Cache::forget('enabled-modules');
Cache::forget('module-handler-to-id-enumeration');
+ exec('composer dump-autoload');
+
// inform user
- $this->line('Module ' . $name . ' successfuly installed');
+ $this->line('Module ' . $name . ' successfuly installed.');
}
/**
* Load config from Config/config.php in module files. We cannot use config() because the file have not published
* yet.
- *
* @return array
* @throws FileNotFoundException
*/
@@ -84,8 +84,9 @@ class InstallModule extends Command
$basePath = $this->modulesPath . DIRECTORY_SEPARATOR . $this->moduleName . DIRECTORY_SEPARATOR;
$path = $basePath . 'Config' . DIRECTORY_SEPARATOR . 'config.php';
- if (basename($basePath) == 'Database')
+ if (basename($basePath) == 'Database') {
return [];
+ }
// check if module has Config/config.php file
if (!file_exists($path)) {
@@ -120,7 +121,6 @@ class InstallModule extends Command
/**
* Installs module into database.
- *
* This method calls Module::install, which handles specific installation of module. In this way we should be able
* to install any module even with some other database structures.
*
@@ -154,14 +154,12 @@ class InstallModule extends Command
if (is_null($module)) {
// insert module into database
$settings = [
- 'staticName' => $this->moduleName,
- 'providers' => $providers,
- 'aliases' => isset($config['aliases']) ? $config['aliases'] : [],
- 'order' => isset($config['order']) ? $config['order'] : 0,
- 'files' => isset($config['files']) ? $config['files'] : []
+ 'providers' => $providers,
+ 'order' => isset($config['order']) ? $config['order'] : 0,
+ 'files' => isset($config['files']) ? $config['files'] : []
];
- $module = Module::install($name, $alias, $description, $handler, $this->parentModuleId, $settings);
+ $module = Installer::install($name, $alias, $this->moduleName, $description, $handler, $this->parentModuleId, $settings);
}
// try to install submodules
@@ -184,7 +182,7 @@ class InstallModule extends Command
$submodule = str_replace($this->modulesPath . DIRECTORY_SEPARATOR, '', $submodulePath);
try {
- $this->call('install-module', ['name' => $submodule, 'parentModuleId' => $parentModule->id]);
+ $this->call('module:install', ['name' => $submodule, 'parentModuleId' => $parentModule->id]);
} catch (\Exception $e) {
$this->error($e->getMessage());
}
diff --git a/app/Console/Commands/Modules/ModuleMigrate.php b/app/Console/Commands/Modules/ModuleMigrate.php
new file mode 100644
index 00000000..8af774f9
--- /dev/null
+++ b/app/Console/Commands/Modules/ModuleMigrate.php
@@ -0,0 +1,42 @@
+argument('module');
+ $module = Module::where('static_name', $moduleName)
+ ->firstOrFail();
+
+ if ($module->has_submodules) {
+ $submodules = $module->submodules;
+
+ foreach ($submodules as $submodule) {
+ $this->call('module:migrate', ['module' => $submodule->static_name]);
+ }
+ }
+
+ $this->line('Migrating ' . $module->static_name);
+ $this->call('migrate', ['--path' => config('modules.paths.modules').'/'.$moduleName.'/Database']);
+ }
+}
diff --git a/app/Console/Commands/Modules/RunMigrations.php b/app/Console/Commands/Modules/RunMigrations.php
new file mode 100644
index 00000000..0e6bd313
--- /dev/null
+++ b/app/Console/Commands/Modules/RunMigrations.php
@@ -0,0 +1,49 @@
+argument('module'))) {
+ $modules = $modules->where('static_name', $module);
+ }
+ $modules = $modules->get();
+
+ if ($modules->isEmpty()) {
+ $this->error('No valid modules.');
+ return;
+ }
+
+ $command = $this->option('rollback') ? 'migrate:rollback' : 'migrate';
+ foreach ($modules as $module) {
+ $this->info('Migrating '.$module->static_name);
+
+ $basePath = $module->is_template ? config('modules.path.templates') : config('modules.paths.modules');
+ $path = $basePath . '/' . $module->static_name . '/Database/Migrations/';
+ $path = str_replace(base_path(), '', $path);
+
+ $this->call($command, ['--path' => $path]);
+ }
+ }
+}
diff --git a/app/Console/Commands/Modules/UninstallModule.php b/app/Console/Commands/Modules/UninstallModule.php
new file mode 100644
index 00000000..6c79c84f
--- /dev/null
+++ b/app/Console/Commands/Modules/UninstallModule.php
@@ -0,0 +1,42 @@
+argument('email');
-
- // check if username is really email
- if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
- $this->error($email . ' is not a valid e-mail!');
- return;
- }
+ do {
+ $email = $this->argument('email');
+ } while (!filter_var($email, FILTER_VALIDATE_EMAIL));
// ask for password
do {
@@ -63,6 +58,8 @@ class NewUser extends Command
$user->role = $role;
$user->save();
+ event(new CreateNewUser($user));
+
$this->info('User ' . $email . ' successfully created.');
}
}
diff --git a/app/Console/Commands/SetTemplate.php b/app/Console/Commands/SetTemplate.php
index f24c2a7b..a196257c 100644
--- a/app/Console/Commands/SetTemplate.php
+++ b/app/Console/Commands/SetTemplate.php
@@ -2,6 +2,8 @@
namespace App\Console\Commands;
+use App\CMS\ModuleManager\Installer;
+use App\CMS\ModuleManager\Uninstaller;
use App\Models\Module;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
@@ -43,14 +45,13 @@ class SetTemplate extends Command
$config['staticName'] = $template;
if ($current) {
- $info = json_decode($current->module_settings);
-
- $this->line('Template is already installed. Currently using template ' . trans($current->name) . ' located in /templates/' . $info->staticName . '.');
+ $this->line('Template is already installed. Currently using template ' . trans($current->name) . ' located in /templates/' . $current->static_name . '.');
$confirm = $this->confirm('Uninstall it and install *' . trans($config['name']) . '*? All data associated with installed template will be lost!');
if ($confirm) {
$this->line('Uninstalling ' . $current->name . '.');
- $current->uninstall();
+
+ Uninstaller::uninstall($current);
} else {
$this->line('Aborting installation.');
return;
@@ -58,7 +59,7 @@ class SetTemplate extends Command
}
try {
- Module::install($config['name'], $config['alias'], $config['description'], $config['handler'], false, $config);
+ Installer::install($config['name'], $config['alias'], $config['staticName'], $config['description'], $config['handler'], false, $config);
} catch (\Exception $e) {
$this->error('Cannot install template ' . $template . '. Message: ' . $e->getMessage());
return;
@@ -72,6 +73,8 @@ class SetTemplate extends Command
// run again artisan for publishing resources
// it cannot be done using $this->call, because we need to load different template into service providers
- exec('php artisan vendor:publish');
+ if ($publish) {
+ exec('php artisan vendor:publish');
+ }
}
}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 00cf4923..a39e7fc0 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -2,6 +2,13 @@
namespace App\Console;
+use App\Console\Commands\InstallCMS;
+use App\Console\Commands\Modules\CreateMigration;
+use App\Console\Commands\Modules\RunMigrations;
+use App\Console\Commands\Modules\CreateNew;
+use App\Console\Commands\Modules\DisableModule;
+use App\Console\Commands\Modules\EnableModule;
+use App\Console\Commands\Modules\ModuleMigrate;
use App\Console\Commands\PublishTemplateResources;
use App\Console\Commands\TemplateInfo;
use Illuminate\Console\Scheduling\Schedule;
@@ -11,21 +18,27 @@ class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
- *
* @var array
*/
protected $commands = [
Commands\NewUser::class,
Commands\ChangePassword::class,
- Commands\InstallModule::class,
- Commands\InstallAllModules::class,
+ CreateNew::class,
+ ModuleMigrate::class,
+ EnableModule::class,
+ DisableModule::class,
+ Commands\Modules\InstallModule::class,
+ Commands\Modules\InstallAllModules::class,
Commands\TranslateDirectory::class,
Commands\TranslateAll::class,
Commands\InitDatabaseSchema::class,
Commands\SetTemplate::class,
Commands\AddLanguage::class,
PublishTemplateResources::class,
- TemplateInfo::class
+ TemplateInfo::class,
+ InstallCMS::class,
+ CreateMigration::class,
+ RunMigrations::class
];
/**
@@ -37,7 +50,5 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
- // $schedule->command('inspire')
- // ->hourly();
}
}
diff --git a/app/Events/EditWidgetArea.php b/app/Events/EditWidgetArea.php
index 8aa5642d..c069772c 100644
--- a/app/Events/EditWidgetArea.php
+++ b/app/Events/EditWidgetArea.php
@@ -2,10 +2,8 @@
namespace App\Events;
-use App\Events\Event;
-use App\Models\WidgetArea;
+use App\Models\Widgets\WidgetArea;
use Illuminate\Queue\SerializesModels;
-use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class EditWidgetArea extends Event
{
diff --git a/app/Events/UploadFile.php b/app/Events/UploadFile.php
index 05def8d0..2c67de2f 100644
--- a/app/Events/UploadFile.php
+++ b/app/Events/UploadFile.php
@@ -2,37 +2,33 @@
namespace App\Events;
+use App\Models\FileManager\File as FileModel;
use Illuminate\Queue\SerializesModels;
-use Symfony\Component\HttpFoundation\File\File;
-use Symfony\Component\HttpFoundation\File\UploadedFile;
class UploadFile extends Event
{
use SerializesModels;
- /**
- * @var UploadedFile
- */
public $uploadedFile;
/**
- * @var
+ * @var FileModel
*/
- public $id;
+ public $file;
/**
* Create a new event instance.
*
- * @param File $uploadedFile
- * @param $id
+ * @param FileModel $file
+ * @param $id
+ *
+ * @internal param File $uploadedFile
*/
- public function __construct(File $uploadedFile, $id)
+ public function __construct(FileModel $file)
{
- $this->uploadedFile = $uploadedFile;
- $this->id = $id;
+ $this->file = $file;
}
/**
* Get the channels the event should be broadcast on.
- *
* @return array
*/
public function broadcastOn()
diff --git a/app/Http/Controllers/Admin/Contents/ContentActions.php b/app/Http/Controllers/Admin/Contents/ContentActions.php
index c73c4085..7ee63b40 100644
--- a/app/Http/Controllers/Admin/Contents/ContentActions.php
+++ b/app/Http/Controllers/Admin/Contents/ContentActions.php
@@ -7,6 +7,8 @@ use App\CMS\Interactions\Admin\Content\ChangeStatus;
use App\CMS\Interactions\Admin\Content\DeletePage;
use App\CMS\Interactions\Admin\Content\SetHomepage;
use App\Http\Controllers\Admin\Controller;
+use App\Models\Content\Content;
+use App\Models\Content\ContentHistory;
class ContentActions extends Controller
{
@@ -25,15 +27,13 @@ class ContentActions extends Controller
* This method is called in static page overview from quick actions. It checks if status is valid, if page exists
* and updates status.
*
- * @param $id
- * @param $status
+ * @param Content $page
+ * @param $status
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function changeStatus($id, $status)
+ public function changeStatus(Content $page, $status)
{
- $page = $this->content->getOne($id);
-
Interaction::handle(ChangeStatus::class, ['status' => $status], $page);
// redirect back to overview with info for user
@@ -45,14 +45,12 @@ class ContentActions extends Controller
/**
* Delete page
*
- * @param $id
+ * @param Content $page
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function delete($id)
+ public function delete(Content $page)
{
- $page = $this->content->getOne($id);
-
Interaction::handle(DeletePage::class, [], $page);
// redirect back to overview with info for user
@@ -66,14 +64,12 @@ class ContentActions extends Controller
/**
* Sets page as homepage
*
- * @param $id
+ * @param Content $page
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function setHomepage($id)
+ public function setHomepage(Content $page)
{
- $page = $this->content->getOne($id);
-
Interaction::handle(SetHomepage::class, [], $page);
// redirect back to overview with info for user
diff --git a/app/Http/Controllers/Admin/Contents/ContentOverview.php b/app/Http/Controllers/Admin/Contents/ContentOverview.php
index b4f09afa..7e5c55d9 100644
--- a/app/Http/Controllers/Admin/Contents/ContentOverview.php
+++ b/app/Http/Controllers/Admin/Contents/ContentOverview.php
@@ -5,6 +5,7 @@ use App\CMS\Contracts\Repositories\Content as IContent;
use App\CMS\Contracts\Repositories\Module as IModule;
use App\CMS\Enumerations\ContentStatuses;
use App\Http\Controllers\Admin\Controller;
+use App\Models\Module;
class ContentOverview extends Controller
{
@@ -26,29 +27,32 @@ class ContentOverview extends Controller
/**
* Overview for all content pages.
*
- * @param null|int $moduleId
- * @param null $status
+ * @param Module|null $module
+ * @param null $status
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ * @internal param int|null $moduleId
*/
- public function index($moduleId = null, $status = null)
+ public function index(Module $module, $status = null)
{
// get module settings
- $module = $this->module->getOne($moduleId);
$pageHeading = $this->module->getOverviewTitle($module);
// get pages for overview
- $handler = $module !== null ? $module->handler : null;
+ $handler = $module->exists ? $module->handler : null;
$pages = $this->content->getOverview($handler, [$status])
->paginate(setting('paginatedResults', 20));
// get homepage - for checking if homepage is set and available
$homepage = $this->content->getHomepage();
+ $contentModules = app(\App\CMS\Repositories\Module::class)->getContentModules();
+
return view('admin.content.overview', [
'pages' => $pages,
'homepage' => $homepage,
'pageHeading' => $pageHeading,
+ 'contentModules' => $contentModules,
'statuses' => ContentStatuses::getWithTranslations(),
'module' => isset($module) ? $module : null
]);
diff --git a/app/Http/Controllers/Admin/Contents/CreateNewContent.php b/app/Http/Controllers/Admin/Contents/CreateNewContent.php
index 18081270..24e047cc 100644
--- a/app/Http/Controllers/Admin/Contents/CreateNewContent.php
+++ b/app/Http/Controllers/Admin/Contents/CreateNewContent.php
@@ -1,4 +1,5 @@
content = $content;
$this->module = $module;
- $this->category = $category;
$this->template = $template;
}
@@ -67,13 +61,16 @@ class CreateNewContent extends Controller
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
- public function create($module)
+ public function create(Module $module)
{
- $module = $this->module->getOne($module);
$statuses = ContentStatuses::getWithTranslations();
$pageHeading = $this->module->getCreateContentTitle($module);
$templates = $this->template->getForModule($module);
- $categories = $this->category->getForModule($module);
+
+ $categories = new Collection();
+ if (class_exists(ICategory::class)) {
+ $categories = app(ICategory::class)->getForModule($module);
+ }
$page = $this->content->getOne();
@@ -95,15 +92,14 @@ class CreateNewContent extends Controller
/**
* Save new content page
*
- * @param CreateNewContentRequest $request
- * @param $moduleId
+ * @param CreateNewContentRequest|Request $request
+ * @param Module $module
*
* @return \Illuminate\Http\RedirectResponse
+ * @internal param $moduleId
*/
- public function store(Request $request, $moduleId)
+ public function store(Request $request, Module $module)
{
- $module = $this->module->getOne($moduleId);
-
// create new page
Interaction::handle(NewContent::class, $request->all(), $module->handler);
diff --git a/app/Http/Controllers/Admin/Contents/EditContent.php b/app/Http/Controllers/Admin/Contents/EditContent.php
index 4d0104cb..9fe2da1d 100644
--- a/app/Http/Controllers/Admin/Contents/EditContent.php
+++ b/app/Http/Controllers/Admin/Contents/EditContent.php
@@ -1,4 +1,5 @@
history = $history;
$this->file = $file;
$this->content = $content;
$this->module = $module;
- $this->category = $category;
$this->template = $template;
}
/**
* Display form for editing static page
*
- * @param $id
+ * @param Content $page
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
- public function edit($id)
+ public function edit(Content $page)
{
$statuses = ContentStatuses::getWithTranslations();
- $page = $this->content->getOne($id);
// get module ID
$module = $this->module->getByHandler($page->moduleHandler);
$pageHeading = $this->module->getUpdateContentTitle($module, $page);
$templates = $this->template->getForModule($module);
- $categories = $this->category->getForModule($module);
$history = $this->history->getStructuredHistoryOf($page);
+ $categories = new Collection();
+ if (class_exists(ICategory::class)) {
+ $categories = app(ICategory::class)->getForModule($module);
+ }
+
// render view
return view('admin.content.edit', [
'pageHeading' => $pageHeading,
@@ -94,7 +89,8 @@ class EditContent extends Controller
'page' => $page,
'module' => $module,
'categories' => $categories,
- 'rootPages' => $this->content->getOverview()->get(),
+ 'rootPages' => $this->content->getOverview()
+ ->get(),
'templates' => $templates,
'formSectionNames' => $this->module->call($module, 'getExtendedFormSections'),
'formSections' => $this->module->call($module, 'getExtendedFormInputsEdit'),
@@ -105,29 +101,14 @@ class EditContent extends Controller
/**
* Edit static page and save changes into history.
*
- * @param EditContentRequest $request
- * @param $id
+ * @param EditContentRequest|Request $request
+ * @param Content $page
*
* @return \Illuminate\Http\RedirectResponse
+ * @internal param $id
*/
- public function update(Request $request, $id)
+ public function update(Request $request, Content $page)
{
- try {
- /**
- * @var $page Content
- */
- $page = $this->content->getOne($id);
- } catch (NotFoundHttpException $e) {
-
- // log attempt of invalid edit
- Event::fire(new AttemptToEditInvalidContent($id));
-
- // page for editing not found
- return redirect()
- ->route('content.overview')
- ->with('error', trans('admin/contents.invalidPage'));
- }
-
// edit page
Interaction::handle(EditContentInteraction::class, $request->all(), $page);
@@ -136,4 +117,24 @@ class EditContent extends Controller
->route('content.overview')
->with('success', trans('admin/contents.successfullyEdited'));
}
+
+ public function order() {
+ $pages = $this->content->getOverview()->get();
+
+ return view('admin.content.order', compact('pages'));
+ }
+
+ public function setOrder(Request $request) {
+
+ $data = $request->get('page');
+
+ foreach ($data as $id => $order) {
+ Content::where('id', $id)->update(['order' => $order]);
+ }
+
+ // something was changed, inform user
+ return redirect()
+ ->route('content.overview')
+ ->with('success', trans('admin/contents.orderSuccessfullySet'));
+ }
}
\ No newline at end of file
diff --git a/app/Http/Controllers/Admin/Contents/History.php b/app/Http/Controllers/Admin/Contents/History.php
index 28b74412..7811b507 100644
--- a/app/Http/Controllers/Admin/Contents/History.php
+++ b/app/Http/Controllers/Admin/Contents/History.php
@@ -19,30 +19,31 @@ class History extends Controller
}
/**
- * @param $id
+ * @param Content $page
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
- public function getOverview($id)
+ public function getOverview(Content $page)
{
- // test if given content id is static page and if exists
- $content = Content::findOrFail($id);
-
- $history = $this->history->getStructuredHistoryOf($content);
+ $history = $this->history->getStructuredHistoryOf($page);
return view('admin/history.overview', [
'history' => $history,
- 'page' => $content
+ 'page' => $page
]);
}
- public function getDiff($revision, $id)
+ /**
+ * @param ContentHistory $revision
+ *
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public function getDiff(ContentHistory $revision)
{
- $change = $this->history->findOrFail($id);
- $diff = $this->history->getDiff($change);
+ $diff = $this->history->getDiff($revision);
return view('admin/history.diff', [
- 'change' => $change,
+ 'change' => $revision,
'diff' => $diff
]);
}
diff --git a/app/Http/Controllers/Admin/Dashboard/Dashboard.php b/app/Http/Controllers/Admin/Dashboard/Dashboard.php
index bad941c3..cfacc789 100644
--- a/app/Http/Controllers/Admin/Dashboard/Dashboard.php
+++ b/app/Http/Controllers/Admin/Dashboard/Dashboard.php
@@ -2,13 +2,22 @@
namespace App\Http\Controllers\Admin\Dashboard;
+use App\CMS\Contracts\Repositories\Module;
use App\Http\Controllers\Admin\Controller;
-use Illuminate\Http\Request;
+use App\Models\Content\Content;
+use Illuminate\Support\Facades\Auth;
class Dashboard extends Controller
{
- public function index(Request $request)
+ public function index()
{
- return redirect()->route('content.overview');
+ $contentModules = app(Module::class)->getContentModules();
+
+ if (\Auth::user()
+ ->can('manage', Content::class) && !$contentModules->isEmpty()) {
+ return redirect()->route('content.overview');
+ } else {
+ return redirect()->route('users.detail', ['user' => Auth::user()]);
+ }
}
}
diff --git a/app/Http/Controllers/Admin/FileManager/CreateNewDirectory.php b/app/Http/Controllers/Admin/FileManager/CreateNewDirectory.php
index f6b4732c..8a9a3396 100644
--- a/app/Http/Controllers/Admin/FileManager/CreateNewDirectory.php
+++ b/app/Http/Controllers/Admin/FileManager/CreateNewDirectory.php
@@ -8,6 +8,7 @@ use App\CMS\Interactions\Admin\FileManager\CreateDirectory;
use App\CMS\Repositories\FileManager\Directory as DirectoryRepository;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests;
+use App\Models\FileManager\Directory;
use Illuminate\Http\Request;
class CreateNewDirectory extends Controller
@@ -30,9 +31,10 @@ class CreateNewDirectory extends Controller
/**
* Create new directory
*
- * @param Requests\CreateNewDirectoryRequest $request
+ * @param Requests\CreateNewDirectoryRequest|Request $request
*
* @return $this|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
+ * @internal param Directory $parentDirectory
*/
public function store(Request $request)
{
diff --git a/app/Http/Controllers/Admin/FileManager/EditDirectory.php b/app/Http/Controllers/Admin/FileManager/EditDirectory.php
index f9e5b12e..9da13545 100644
--- a/app/Http/Controllers/Admin/FileManager/EditDirectory.php
+++ b/app/Http/Controllers/Admin/FileManager/EditDirectory.php
@@ -5,19 +5,20 @@ namespace App\Http\Controllers\Admin\FileManager;
use App\CMS\Repositories\FileManager\Directory as DirectoryRepository;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests;
+use App\Http\Requests\EditDirectoryRequest;
use App\Models\FileManager\Directory;
class EditDirectory extends Controller
{
/**
- * @param Requests\EditDirectoryRequest $request
+ * @param EditDirectoryRequest $request
* @param Directory $directory
*
* @return $this|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
* @internal param $directoryId
*
*/
- public function update(Requests\EditDirectoryRequest $request, Directory $directory)
+ public function update(EditDirectoryRequest $request, Directory $directory)
{
$repository = app(DirectoryRepository::class);
if ($repository->checkIfNameExists($request->name, $directory->parent_id, $directory->id)) {
diff --git a/app/Http/Controllers/Admin/FileManager/EditUploadedFile.php b/app/Http/Controllers/Admin/FileManager/EditUploadedFile.php
index 374f4dcf..de494d21 100644
--- a/app/Http/Controllers/Admin/FileManager/EditUploadedFile.php
+++ b/app/Http/Controllers/Admin/FileManager/EditUploadedFile.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin\FileManager;
use App\CMS\Helpers\FileManager;
use App\CMS\Helpers\RootDirectory;
+use App\CMS\Repositories\FileManager\File as FileRepository;
use App\Events\EditFile;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\EditUploadedFileRequest;
@@ -14,14 +15,12 @@ class EditUploadedFile extends Controller
{
/**
* Edit form
- *
* Render edit form for displaying details and updating given file
*
* @param File $file
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\View\View
* @internal param int $id file id
- *
*/
public function show(File $file)
{
@@ -35,7 +34,6 @@ class EditUploadedFile extends Controller
/**
* Updates file
- *
* User can change only keywords, original filename and description. Mime type, hash and other fields remain
* unchanged
*
@@ -44,16 +42,11 @@ class EditUploadedFile extends Controller
*
* @return \Illuminate\Http\RedirectResponse
* @internal param $id
- *
*/
public function update(EditUploadedFileRequest $request, File $file)
{
- // set values from form
- $file->name = $request->name;
- $file->keywords = $request->keywords;
- $file->description = $request->description;
- $file->directory_id = $request->directory_id;
- $file->save();
+ $repository = app(FileRepository::class);
+ $repository->update($file, $request->all());
// fire action
Event::fire(new EditFile($file));
diff --git a/app/Http/Controllers/Admin/FileManager/UploadFile.php b/app/Http/Controllers/Admin/FileManager/UploadFile.php
index 3c4a7933..03b5f91f 100644
--- a/app/Http/Controllers/Admin/FileManager/UploadFile.php
+++ b/app/Http/Controllers/Admin/FileManager/UploadFile.php
@@ -1,8 +1,8 @@
directoryRepository->getAllSubdirectories($directory);
- if (!$includeHidden) {
+ if (!Input::get('hidden', true)) {
$subdirectories = $subdirectories->where('hidden', false);
}
diff --git a/app/Http/Controllers/Admin/Login.php b/app/Http/Controllers/Admin/Login.php
deleted file mode 100644
index 524cd8f9..00000000
--- a/app/Http/Controllers/Admin/Login.php
+++ /dev/null
@@ -1,87 +0,0 @@
-email;
-
- // try to find user
- $user = User::where('email', $email)
- ->where('role', '!=', User::ROLE_VISITOR)
- ->where('status', User::STATE_ACTIVE)
- ->first();
-
- if (!$user) {
- return $this->loginFailed();
- }
-
- // try to log in user
- if (Hash::check($request->password, $user->password)) {
- Auth::login($user);
-
- $redirect = $request->redirectTo ? $request->redirectTo : route('admin.dashboard');
-
- return redirect()->intended($redirect);
- }
-
- // login invalid, redirect and inform the user
- return $this->loginFailed();
- }
-
- /**
- * Logs out user
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function logout()
- {
-
- // remove user information
- \Auth::logout();
-
- // redirect to login form with info about successfull logout
- return redirect()
- ->route('login')
- ->with('success', trans('admin/common.logoutSuccessfull'));
- }
-
- private function loginFailed()
- {
- return redirect()
- ->route('login')
- ->with('error', trans('auth.failed'))
- ->withInput();
- }
-}
diff --git a/app/Http/Controllers/Admin/Permissions.php b/app/Http/Controllers/Admin/Permissions.php
new file mode 100644
index 00000000..0f9636a7
--- /dev/null
+++ b/app/Http/Controllers/Admin/Permissions.php
@@ -0,0 +1,43 @@
+get();
+
+ return view('admin/permissions.index', compact('permissions'));
+ }
+
+ /**
+ * Setup default permissions
+ *
+ * @param Request $request
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function setDefault(Request $request)
+ {
+ Permission::where('default', true)
+ ->update(['default' => false]);
+
+ $permissions = $request->permissions;
+
+ Permission::whereIn('string_id', array_keys($permissions))
+ ->update(['default' => true]);
+
+ return redirect()
+ ->back()
+ ->with('success', trans('admin/permissions.defaultSuccessfullySet'));
+ }
+}
diff --git a/app/Http/Controllers/Admin/Search.php b/app/Http/Controllers/Admin/Search.php
index 1d93c14f..ffabde36 100644
--- a/app/Http/Controllers/Admin/Search.php
+++ b/app/Http/Controllers/Admin/Search.php
@@ -13,7 +13,6 @@ class Search extends Controller
{
/**
* Create form for searching
- *
* @return $this|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function getSearch()
@@ -37,7 +36,6 @@ class Search extends Controller
/**
* Method used for performing search.
- *
* This method iterates over all registered search engines and returns results for each engine apart.
*
* @param string $term search text
@@ -60,10 +58,16 @@ class Search extends Controller
// try to find given term
$results = $search->search($term);
+ $content = $presenter->render($results);
+
+ if (is_null($content)) {
+ continue;
+ }
+
// create result object
$resultsParts[$search->getId()] = [
'name' => $search->getName(),
- 'content' => $presenter->render($results),
+ 'content' => $content,
'count' => count($results)
];
}
diff --git a/app/Http/Controllers/Admin/Settings.php b/app/Http/Controllers/Admin/Settings.php
index db782248..31e4a285 100644
--- a/app/Http/Controllers/Admin/Settings.php
+++ b/app/Http/Controllers/Admin/Settings.php
@@ -2,15 +2,15 @@
namespace App\Http\Controllers\Admin;
+use App\CMS\Repositories\Settings\Settings as SettingsRepository;
use App\Http\Requests;
use App\Models\Settings as SettingsModel;
use Illuminate\Support\Facades\App;
-use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class Settings extends Controller
{
/**
- * @var SettingsModel
+ * @var SettingsRepository
*/
protected $settings;
@@ -19,14 +19,13 @@ class Settings extends Controller
*
* @param SettingsModel $settings
*/
- public function __construct(SettingsModel $settings)
+ public function __construct(SettingsRepository $settings)
{
$this->settings = $settings;
}
/**
* Get overview (with form) for editing settings
- *
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function getOverview()
@@ -45,7 +44,6 @@ class Settings extends Controller
/**
* Save all settings (ignore empty ones)
- *
* When settings used to be non-empty string and user deletes it, key is also deleted from database
*
* @param Requests\SaveSettingsRequest $request
@@ -54,25 +52,8 @@ class Settings extends Controller
*/
public function saveSettings(Requests\SaveSettingsRequest $request)
{
- $data = $request->all();
- $commonSettings = isset($data['commonSettings']) ? $data['commonSettings'] : [];
- // remove CSRF token field
- unset($data['_token'], $data['commonSettings']);
-
- foreach ($data as $key => $value) {
- // select language for this setting key
- $language = isset($commonSettings[$key]) ? null : LaravelLocalization::getCurrentLocale();
- $setting = SettingsModel::firstOrNew(['language' => $language, 'key' => $key]);
-
- if ($setting->value == $value) {
- continue;
- }
-
- // set value and save or delete
- $setting->value = $value;
- $setting->save();
- }
+ $this->settings->save($request->except(['_token']));
return redirect()
->route('settings.overview')
diff --git a/app/Http/Controllers/Admin/Templates/CopyTemplate.php b/app/Http/Controllers/Admin/Templates/CopyTemplate.php
index 41701e16..b0ea9bfe 100644
--- a/app/Http/Controllers/Admin/Templates/CopyTemplate.php
+++ b/app/Http/Controllers/Admin/Templates/CopyTemplate.php
@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Admin\Templates;
+use App\Cms\Repositories\Templates\Template as TemplateRepository;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\CopyTemplateRequest;
use App\Models\Templates\Template;
@@ -10,7 +11,6 @@ class CopyTemplate extends Controller
{
/**
* Method for copying given template.
- *
* This method is supposed to be called by POST method.
*
* @param CopyTemplateRequest $request
@@ -32,15 +32,22 @@ class CopyTemplate extends Controller
$namespace .= '::';
}
+ $repository = app(TemplateRepository::class);
+ $repository->setModel($template);
+
// get template absolute paths
- $realTemplatePath = $template->getPathToTemplate();
- $customTemplatePath = $template->getPathToTemplate(Template::CUSTOM_EDIT_DIRECTORY);
+ $realTemplatePath = $repository->getPathToTemplate();
+ $customTemplatePath = $repository->getPathToTemplate(TemplateRepository::CUSTOM_EDIT_DIRECTORY);
$path = dirname($customTemplatePath);
// create file copy
$data = file_get_contents($realTemplatePath);
- $written = file_put_contents($path . DIRECTORY_SEPARATOR . $newName . Template::TEMPLATE_SUFFIX, $data);
+ if (!is_dir($path)) {
+ mkdir($path, 0777, true);
+ }
+
+ $written = file_put_contents($path . DIRECTORY_SEPARATOR . $newName . TemplateRepository::TEMPLATE_SUFFIX, $data);
// were data written?
if ($written === false) {
return $this->copyFailed($request, $template);
@@ -67,7 +74,6 @@ class CopyTemplate extends Controller
* @param Template $template
*
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
- *
*/
private function copyFailed(CopyTemplateRequest $request, Template $template)
{
diff --git a/app/Http/Controllers/Admin/Templates/EditTemplate.php b/app/Http/Controllers/Admin/Templates/EditTemplate.php
index 2938c129..65998dc2 100644
--- a/app/Http/Controllers/Admin/Templates/EditTemplate.php
+++ b/app/Http/Controllers/Admin/Templates/EditTemplate.php
@@ -34,13 +34,8 @@ class EditTemplate extends Controller
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
- public function getEdit($template)
+ public function getEdit(Template $template)
{
- /**
- * @var $template Template
- */
- $template = Template::findOrFail($template);
-
$this->templateRepository->setModel($template);
// load template content
@@ -59,15 +54,13 @@ class EditTemplate extends Controller
* Save meta information about template and edited content
*
* @param EditTemplateRequest $request
- * @param $templateId
+ * @param Template $template
*
* @return \Illuminate\Http\RedirectResponse
+ * @internal param $templateId
*/
- public function postEdit(EditTemplateRequest $request, $templateId)
+ public function postEdit(EditTemplateRequest $request, Template $template)
{
- // find template
- $template = Template::findOrFail($templateId);
-
// setup meta information
$template->name = $request->name;
@@ -105,7 +98,7 @@ class EditTemplate extends Controller
// try to save content
if (!is_writable($customDir) && !is_writable($originalDir)) {
return redirect()
- ->route('templates.edit', ['id' => $request->id])
+ ->route('templates.edit', ['id' => $template->id])
->withInput()
->with('warning', trans('admin/templates.cannotWriteContent'));
}
diff --git a/app/Http/Controllers/Admin/Templates/TemplateOverview.php b/app/Http/Controllers/Admin/Templates/TemplateOverview.php
index 6576b76a..98609767 100644
--- a/app/Http/Controllers/Admin/Templates/TemplateOverview.php
+++ b/app/Http/Controllers/Admin/Templates/TemplateOverview.php
@@ -7,17 +7,28 @@ use App\Models\Templates\TemplatePath;
class TemplateOverview extends Controller
{
- public function getPath($path)
+ public function index()
{
- $path = TemplatePath::findOrFail($path);
+ $templatePaths = TemplatePath::with('subdirectories')
+ ->whereNull('parent_id')
+ ->get();
+
+ return view('admin.templates.index', compact('templatePaths'));
+ }
+
+ /**
+ * Display overview of all templates in given path
+ *
+ * @param TemplatePath $templatePath
+ *
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public function getPath(TemplatePath $templatePath)
+ {
return view('admin.templates.list', [
- 'directory' => $path,
- 'isWritable' => is_writable(base_path($path->path)),
- 'templates' => $path->templates()
- ->get(),
- 'subdirectories' => $path->subdirectories()
- ->get()
+ 'directory' => $templatePath,
+ 'isWritable' => is_writable(base_path($templatePath->path))
]);
}
}
diff --git a/app/Http/Controllers/Admin/Users/CreateNewUser.php b/app/Http/Controllers/Admin/Users/CreateNewUser.php
index 863e5fe0..dac56a3b 100644
--- a/app/Http/Controllers/Admin/Users/CreateNewUser.php
+++ b/app/Http/Controllers/Admin/Users/CreateNewUser.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Admin\Users;
use App\CMS\Enumerations\UserRoles;
+use App\CMS\Repositories\Users\User as UserRepository;
use App\Events\CreateNewUser as CreateNewUserEvent;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\CreateNewUserRequest;
@@ -28,28 +29,21 @@ class CreateNewUser extends Controller
/**
* Create new user
- *
* This method saves new user into database
*
* @param CreateNewUserRequest $request
+ * @param UserRepository $userRepository
*
* @return \Illuminate\Http\RedirectResponse
*/
- protected function postRegistration(CreateNewUserRequest $request)
+ protected function postRegistration(CreateNewUserRequest $request, UserRepository $userRepository)
{
// when user did not provide any username, use his email
$username = isset($request->username) && !empty($request->username) ? $request->username : $request->email;
- // create new user
- $user = new User();
- $user->name = $request->name;
- $user->email = $request->email;
- $user->username = $username;
- $user->role = $request->role;
- $user->password = Hash::make($request->password);
-
- // store user into database
- $user->save();
+ $data = $request->all();
+ $data['username'] = $username;
+ $user = $userRepository->create($data);
// fire event
Event::fire(new CreateNewUserEvent($user));
diff --git a/app/Http/Controllers/Admin/Users/EditUser.php b/app/Http/Controllers/Admin/Users/EditUser.php
index 1b77f3a8..b111d1f8 100644
--- a/app/Http/Controllers/Admin/Users/EditUser.php
+++ b/app/Http/Controllers/Admin/Users/EditUser.php
@@ -4,26 +4,48 @@ namespace App\Http\Controllers\Admin\Users;
use App\CMS\Enumerations\UserRoles;
use App\CMS\Enumerations\UserStates;
+use App\CMS\Repositories\Users\User as UserRepository;
use App\Events\EditUser as EditUserEvent;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\EditUserRequest;
+use App\Http\Requests\Request;
+use App\Models\Permissions\Permission;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Event;
-use Illuminate\Support\Facades\Hash;
class EditUser extends Controller
{
- public function getEditUser($id = null)
+ /**
+ * @var UserRepository
+ */
+ private $userRepository;
+
+ /**
+ * EditUser constructor.
+ *
+ * @param UserRepository $userRepository
+ */
+ public function __construct(UserRepository $userRepository)
+ {
+ $this->userRepository = $userRepository;
+ }
+
+ /**
+ * Display form for editing user
+ *
+ * @param User|null $user
+ *
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public function getEditUser(User $user = null)
{
// when no user specified, lets assume we want to edit "me"
- if (!$id) {
- $id = Auth::user()->id;
+ if (!$user->exists) {
+ $user = Auth::user();
}
- // try to find given user
- $user = User::findOrFail($id);
-
$states = UserStates::getWithTranslations();
$roles = UserRoles::getWithTranslations();
@@ -35,49 +57,26 @@ class EditUser extends Controller
}
/**
+ * Edit user - store information
+ *
* @param EditUserRequest $request
- * @param $id
+ * @param User $user
*
* @return \Illuminate\Http\RedirectResponse
+ * @internal param $id
*/
- public function postEdit(EditUserRequest $request, $id)
+ public function postEdit(EditUserRequest $request, User $user)
{
$loggedUser = Auth::user();
- $user = User::findOrFail($id);
-
// non-admin user is trying to edit someone else
- if ($loggedUser->role != User::ROLE_ADMIN && $id != $loggedUser->id) {
+ if ($loggedUser->role != User::ROLE_ADMIN && $user->id != $loggedUser->id) {
return redirect()
->back()
->with('error', trans('auth.accessDenied'));
}
- // update username if set
- if (isset($request->username)) {
- $user->username = $request->username;
- }
-
- // change name (if set)
- if (isset($request->name)) {
- $user->name = $request->name;
- }
-
- if (isset($request->role)) {
- $user->role = $request->role;
- }
-
- if (isset($request->status)) {
- $user->status = $request->status;
- }
-
- if (isset($request->password)) {
- $user->password = Hash::make($request->password);
- }
-
- $user->email = $request->email;
-
- $user->save();
+ $this->userRepository->update($user, $request->all());
// fire event about editing user
Event::fire(new EditUserEvent($user));
@@ -86,4 +85,34 @@ class EditUser extends Controller
->back()
->with('success', trans('admin/userManagement.userSuccessfullyEdited'));
}
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param int $id
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function setPermissions(Request $request, User $user)
+ {
+ $permissionIds = $request->get('permissions', []);
+ $permissions = Permission::whereIn('string_id', array_keys($permissionIds))
+ ->get();
+
+ DB::transaction(function () use ($user, $permissions) {
+ // remove all permissions
+ $user->permissions()
+ ->detach();
+
+ foreach ($permissions as $permission) {
+ $user->permissions()
+ ->attach($permission->id);
+ }
+ });
+
+ return redirect()
+ ->back()
+ ->with('success', trans('admin/permissions.successfullySet'));
+ }
}
\ No newline at end of file
diff --git a/app/Http/Controllers/Admin/Users/UserDetail.php b/app/Http/Controllers/Admin/Users/UserDetail.php
index ae6c1d3e..47b71498 100644
--- a/app/Http/Controllers/Admin/Users/UserDetail.php
+++ b/app/Http/Controllers/Admin/Users/UserDetail.php
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin\Users;
use App\CMS\Enumerations\UserRoles;
use App\CMS\Enumerations\UserStates;
use App\Cms\Repositories\ActionLog\Actions;
+use App\CMS\Repositories\Permissions\Permission;
use App\Http\Controllers\Admin\Controller;
use App\Models\ActionLog\ActionLog;
use App\Models\User;
@@ -22,26 +23,24 @@ class UserDetail extends Controller
$this->log = $log;
}
- public function getDetail($id = null)
+ public function getDetail(User $user = null)
{
// when no user specified, lets assume we want to edit "me"
- if (!$id) {
- $id = Auth::user()->id;
+ if (!$user->exists) {
+ $user = Auth::user();
}
- // try to find given user
- $user = User::findOrFail($id);
-
- $actions = $this->log->getUserActions($id, 10);
-
+ $actions = $this->log->getUserActions($user->id, 10);
$roles = UserRoles::getWithTranslations();
$states = UserStates::getWithTranslations();
+ $permissions = app(Permission::class)->getRootPermissions();
return view('admin.userManagement.detail', [
- 'user' => $user,
- 'statuses' => $states,
- 'roles' => $roles,
- 'actions' => $actions
+ 'user' => $user,
+ 'statuses' => $states,
+ 'roles' => $roles,
+ 'actions' => $actions,
+ 'permissions' => $permissions
]);
}
}
\ No newline at end of file
diff --git a/app/Http/Controllers/Admin/Widgets/Areas/CreateNewWidgetArea.php b/app/Http/Controllers/Admin/Widgets/Areas/CreateNewWidgetArea.php
index a9ec44e3..636b469e 100644
--- a/app/Http/Controllers/Admin/Widgets/Areas/CreateNewWidgetArea.php
+++ b/app/Http/Controllers/Admin/Widgets/Areas/CreateNewWidgetArea.php
@@ -2,19 +2,34 @@
namespace App\Http\Controllers\Admin\Widgets\Areas;
+use App\CMS\Repositories\Widgets\WidgetArea as WidgetAreaRepository;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\NewWidgetAreaRequest;
use App\Models\Widgets\WidgetArea;
-use Illuminate\Support\Facades\Event;
class CreateNewWidgetArea extends Controller
{
+ /**
+ * @var WidgetAreaRepository
+ */
+ private $widgetAreaRepository;
+
+ /**
+ * CreateNewWidgetArea constructor.
+ *
+ * @param WidgetAreaRepository $widgetAreaRepository
+ */
+ public function __construct(WidgetAreaRepository $widgetAreaRepository)
+ {
+ $this->widgetAreaRepository = $widgetAreaRepository;
+ }
+
/**
* Form for new widget area
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
- public function getNew()
+ public function create()
{
return view('admin.widgets.area.new', ['area' => new WidgetArea()]);
}
@@ -24,18 +39,9 @@ class CreateNewWidgetArea extends Controller
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function postNew(NewWidgetAreaRequest $request)
+ public function store(NewWidgetAreaRequest $request)
{
- $parameters = [
- 'code' => $request->code,
- 'name' => $request->name,
- 'description' => $request->description
- ];
-
- $area = WidgetArea::create($parameters);
-
- // fire event with new widget area
- Event::fire(new \App\Events\CreateNewWidgetArea($area));
+ $this->widgetAreaRepository->create($request);
// redirect with success notification
return redirect()
diff --git a/app/Http/Controllers/Admin/Widgets/Areas/EditWidgetArea.php b/app/Http/Controllers/Admin/Widgets/Areas/EditWidgetArea.php
index a512334c..393745b8 100644
--- a/app/Http/Controllers/Admin/Widgets/Areas/EditWidgetArea.php
+++ b/app/Http/Controllers/Admin/Widgets/Areas/EditWidgetArea.php
@@ -2,6 +2,8 @@
namespace App\Http\Controllers\Admin\Widgets\Areas;
+use App\CMS\Repositories\Widgets\WidgetArea as WidgetAreaRepository;
+use App\Events\DeleteWidgetArea;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\EditWidgetAreaRequest;
use App\Models\Widgets\Widget;
@@ -13,22 +15,37 @@ use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class EditWidgetArea extends Controller
{
+ /**
+ * @var WidgetAreaRepository
+ */
+ private $widgetAreaRepository;
+
+ /**
+ * EditWidgetArea constructor.
+ *
+ * @param WidgetAreaRepository $widgetAreaRepository
+ */
+ public function __construct(WidgetAreaRepository $widgetAreaRepository)
+ {
+ $this->widgetAreaRepository = $widgetAreaRepository;
+ }
+
/**
* Display form for editing given widget area
*
- * @param $id
+ * @param WidgetArea $widgetArea
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ *
*/
- public function getEdit($id)
+ public function edit(WidgetArea $widgetArea)
{
- $area = WidgetArea::findOrFail($id);
- $associatedWidgetIds = WidgetInWidgetArea::getWidgetIdsFromArea($area->id);
+ $associatedWidgetIds = WidgetInWidgetArea::getWidgetIdsFromArea($widgetArea->id);
$widgets = Widget::where('language', LaravelLocalization::getCurrentLocale())
->paginate(25);
return view('admin.widgets.area.edit', [
- 'area' => $area,
+ 'area' => $widgetArea,
'widgets' => $widgets,
'associatedWidgetIds' => $associatedWidgetIds
]);
@@ -36,26 +53,14 @@ class EditWidgetArea extends Controller
/**
* @param EditWidgetAreaRequest $request
- * @param $id
+ * @param WidgetArea $widgetArea
*
* @return \Illuminate\Http\RedirectResponse
+ *
*/
- public function postEdit(EditWidgetAreaRequest $request, $id)
+ public function update(EditWidgetAreaRequest $request, WidgetArea $widgetArea)
{
- try {
- $area = WidgetArea::findOrFail($id);
- } catch (ModelNotFoundException $e) {
- return $this->invalidArea();
- }
-
- $area->name = $request->name;
- $area->description = $request->description;
-
- $area->timestamps = true;
- $area->save();
-
- // fire event with new widget area
- Event::fire(new \App\Events\EditWidgetArea($area));
+ $this->widgetAreaRepository->update($widgetArea, $request);
return redirect()
->route('widgetareas.overview')
@@ -65,47 +70,28 @@ class EditWidgetArea extends Controller
/**
* Hard deletes widget area
*
- * @param $id
+ * @param WidgetArea $widgetArea
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function deleteArea($id)
+ public function delete(WidgetArea $widgetArea)
{
- // try to find area
- try {
- $area = WidgetArea::findOrFail($id);
- } catch (ModelNotFoundException $e) {
- return $this->invalidArea();
- }
-
// check if widget area is deletable
- if (!$area->deletable) {
+ if (!$widgetArea->deletable) {
return redirect()
->back()
->with('error', trans('admin/widgetAreas.notDeletableArea'));
}
// delete area
- $area->delete();
+ $widgetArea->delete();
// fire event with new widget area
- Event::fire(new \App\Events\DeleteWidgetArea($area));
+ Event::fire(new DeleteWidgetArea($widgetArea));
// redirect and inform user
return redirect()
->route('widgetareas.overview')
->with('success', trans('admin/widgetAreas.successfullyDeleted'));
}
-
- /**
- * Redirect user to overview with message about invalid widget area
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- private function invalidArea()
- {
- return redirect()
- ->route('widgetareas.overview')
- ->with('error', trans('admin/widgetAreas.invalidArea'));
- }
}
diff --git a/app/Http/Controllers/Admin/Widgets/CreateNewWidget.php b/app/Http/Controllers/Admin/Widgets/CreateNewWidget.php
index f50f749b..1195deac 100644
--- a/app/Http/Controllers/Admin/Widgets/CreateNewWidget.php
+++ b/app/Http/Controllers/Admin/Widgets/CreateNewWidget.php
@@ -23,14 +23,13 @@ class CreateNewWidget extends Controller
/**
* Form for new widget area
*
- * @param $type
+ * @param WidgetType $widgetType
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ *
*/
- public function getNew($type)
+ public function getNew(WidgetType $widgetType)
{
- $widgetType = WidgetType::findOrFail($type);
-
$presenter = call_user_func([$widgetType->handler, 'getPresenter']);
return call_user_func([$presenter, 'renderAddForm'], $widgetType);
@@ -40,23 +39,22 @@ class CreateNewWidget extends Controller
* Create new instance of given widget type
*
* @param NewWidgetRequest $request
- * @param $type
+ *
+ * @param WidgetType $widgetType
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function postNew(NewWidgetRequest $request, $type)
+ public function postNew(NewWidgetRequest $request, WidgetType $widgetType)
{
- $widgetType = WidgetType::findOrFail($type);
-
// try to save this widget
try {
$this->widget->createNew($widgetType, $request);
} catch (MissingParameterException $e) {
// user omitted some value
- return $this->invalidWidget($type, $e->getMessage());
- // } catch (\Exception $e) {
- // // something went wrong
- // return $this->invalidWidget($type, trans('admin/widgets.cannotSave', ['exception' => $e->getMessage()]));
+ return redirect()
+ ->back()
+ ->withInput()
+ ->with('error', $e->getMessage());
}
// redirect with success notification
@@ -64,12 +62,4 @@ class CreateNewWidget extends Controller
->route('widgets.overview')
->with('success', trans('admin/widgets.successfullyCreated'));
}
-
- private function invalidWidget($widgetType, $error)
- {
- return redirect()
- ->route('widgets.new', ['type' => $widgetType])
- ->withInput()
- ->with('error', $error);
- }
}
diff --git a/app/Http/Controllers/Admin/Widgets/EditWidget.php b/app/Http/Controllers/Admin/Widgets/EditWidget.php
index 81ca9ad2..0548b895 100644
--- a/app/Http/Controllers/Admin/Widgets/EditWidget.php
+++ b/app/Http/Controllers/Admin/Widgets/EditWidget.php
@@ -1,26 +1,39 @@
widgetRepository = $widgetRepository;
+ }
+
/**
* Render edit form
*
- * @param $id
+ * @param Widget $widget
*
* @return mixed
*/
- public function getEdit($id)
+ public function getEdit(Widget $widget)
{
- $widget = Widget::findOrFail($id);
- $widget->settings = json_decode($widget->settings);
-
$presenter = call_user_func([$widget->widget_type_handler, 'getPresenter']);
return call_user_func([$presenter, 'renderEditForm'], $widget);
@@ -30,24 +43,14 @@ class EditWidget extends Controller
* Save changes into database
*
* @param EditWidgetRequest $request
- * @param $widget
+ * @param Widget $widget
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function postEdit(EditWidgetRequest $request, $widget)
+ public function postEdit(EditWidgetRequest $request, Widget $widget)
{
- // create new widget
- $widget = Widget::findOrFail($widget);
-
- // update name
- $widget->name = $request->name;
- $widget->container_class = $request->containerClass;
- $widget->container_id = empty($request->containerId) ? null : $request->containerId;
- $widget->description = $request->description;
-
- // try to save this widget
try {
- $widget->settings = json_encode(call_user_func([$widget->widget_type_handler, 'save'], $request));
+ $this->widgetRepository->edit($widget, $request);
} catch (MissingParameterException $e) {
// user omitted some value
return $this->invalidWidget($e->getMessage());
@@ -56,12 +59,6 @@ class EditWidget extends Controller
return $this->invalidWidget(trans('admin/widgets.cannotSave', ['exception' => $e->getMessage()]));
}
- // save into database
- $widget->save();
-
- // fire event with editing widget
- Event::fire(new \App\Events\EditWidget($widget));
-
// redirect with success notification
return redirect()
->back()
@@ -71,15 +68,12 @@ class EditWidget extends Controller
/**
* Deletes widget
*
- * @param $id
+ * @param Widget $widget
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function deleteWidget($id)
+ public function deleteWidget(Widget $widget)
{
- // create new widget
- $widget = Widget::findOrFail($id);
-
// check if widget area is deletable
if (!$widget->deletable) {
return redirect()
diff --git a/app/Http/Controllers/Admin/Widgets/WidgetsOverview.php b/app/Http/Controllers/Admin/Widgets/WidgetsOverview.php
index 4f95be2c..e5cd5529 100644
--- a/app/Http/Controllers/Admin/Widgets/WidgetsOverview.php
+++ b/app/Http/Controllers/Admin/Widgets/WidgetsOverview.php
@@ -1,17 +1,25 @@
paginate(25);
- return view('admin.widgets.overview', ['widgets' => $widgets]);
+ $widgetTypes = WidgetType::all();
+
+ return view('admin.widgets.overview', compact('widgetTypes', 'widgets'));
}
}
\ No newline at end of file
diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php
new file mode 100644
index 00000000..6a247fef
--- /dev/null
+++ b/app/Http/Controllers/Auth/ForgotPasswordController.php
@@ -0,0 +1,32 @@
+middleware('guest');
+ }
+}
diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php
new file mode 100644
index 00000000..a4c37755
--- /dev/null
+++ b/app/Http/Controllers/Auth/LoginController.php
@@ -0,0 +1,46 @@
+middleware('guest')->except('logout');
+ }
+
+ public function logout() {
+ Auth::logout();
+ return redirect()->route('login');
+ }
+}
diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php
new file mode 100644
index 00000000..de74489d
--- /dev/null
+++ b/app/Http/Controllers/Auth/RegisterController.php
@@ -0,0 +1,73 @@
+middleware('guest');
+ }
+
+ /**
+ * Get a validator for an incoming registration request.
+ *
+ * @param array $data
+ *
+ * @return \Illuminate\Contracts\Validation\Validator
+ */
+ protected function validator(array $data)
+ {
+ return Validator::make($data, [
+ 'name' => 'required|string|max:255',
+ 'email' => 'required|string|email|max:255|unique:users',
+ 'password' => 'required|string|min:6|confirmed',
+ 'g-recaptcha-response' => 'required|recaptcha',
+ ]);
+ }
+
+ /**
+ * Create a new user instance after a valid registration.
+ *
+ * @param array $data
+ *
+ * @return \App\User
+ */
+ protected function create(array $data)
+ {
+ return User::create([
+ 'name' => $data['name'],
+ 'role' => User::ROLE_VISITOR,
+ 'state' => User::STATE_ACTIVE,
+ 'email' => $data['email'],
+ 'password' => bcrypt($data['password']),
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php
new file mode 100644
index 00000000..44672583
--- /dev/null
+++ b/app/Http/Controllers/Auth/ResetPasswordController.php
@@ -0,0 +1,39 @@
+middleware('guest');
+ }
+}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 4c01a2dd..a8b5a9c1 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -14,7 +14,6 @@ class Controller extends BaseController
/**
* Custom wrapper for generating view.
- *
* This method will be used for switching among templates.
*
* @param $template
@@ -23,10 +22,25 @@ class Controller extends BaseController
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
- public static function VisitorsView($template, $data = [], $mergeData = [])
+ public static function visitorsView($template, $data = [], $mergeData = [])
+ {
+ $view = self::getView($template, $data, $mergeData);
+
+ return response($view)->header('X-Powered-By', strrev('zc.ytiranib.www//:sptth | .o.r.s ytiranib | SMCiniM'));
+ }
+
+ /**
+ * Get instance of view for passing into response
+ *
+ * @param $template
+ * @param $data
+ * @param $mergeData
+ *
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public static function getView($template, $data = [], $mergeData = [])
{
$view = Template::name($template);
-
- return response(view($view, $data, $mergeData))->header('X-Powered-By', strrev('zc.ytiranib.www//:sptth | .o.r.s ytiranib | SMCiniM'));
+ return view($view, $data, $mergeData);
}
}
diff --git a/app/Http/Controllers/Visitor/ContentPage.php b/app/Http/Controllers/Visitor/ContentPage.php
index 6610bb50..81635ee0 100644
--- a/app/Http/Controllers/Visitor/ContentPage.php
+++ b/app/Http/Controllers/Visitor/ContentPage.php
@@ -65,7 +65,7 @@ class ContentPage extends Controller
$displayPipeline = app('displayPipeline');
$page = $displayPipeline->run($page);
- return Controller::VisitorsView($page->template, ['page' => $page]);
+ return Controller::visitorsView($page->template, ['page' => $page]);
}
}
diff --git a/app/Http/Controllers/Visitor/Homepage.php b/app/Http/Controllers/Visitor/Homepage.php
index 38b77969..06e2b6a1 100644
--- a/app/Http/Controllers/Visitor/Homepage.php
+++ b/app/Http/Controllers/Visitor/Homepage.php
@@ -10,7 +10,7 @@ class Homepage extends ContentPage
{
// try to find some homepage
$contentModel = $this->content;
- $page = Cache::remember('hp', setting('homepageCacheLifetime', 5), function () use ($contentModel) {
+ $page = Cache::remember('homepage', setting('homepageCacheLifetime', 5), function () use ($contentModel) {
return $contentModel->getHomepage();
});
diff --git a/app/Http/Controllers/Sitemap.php b/app/Http/Controllers/Visitor/Sitemap.php
similarity index 96%
rename from app/Http/Controllers/Sitemap.php
rename to app/Http/Controllers/Visitor/Sitemap.php
index fe5c4360..bcd4b3fe 100644
--- a/app/Http/Controllers/Sitemap.php
+++ b/app/Http/Controllers/Visitor/Sitemap.php
@@ -1,9 +1,9 @@
[
CheckForMaintenanceMode::class,
+ TemplateChecker::class,
AddQueuedCookiesToResponse::class,
+ IncrementWidgetsViews::class,
],
'admin' => [
- Middleware\Authenticate::class,
- Middleware\AdminMenuRegistrator::class,
- TemplatePathInstaller::class,
- WidgetInstaller::class,
+ Middleware\Admin\Authenticate::class,
+ Middleware\Admin\AdminMenuRegistrator::class,
+ Middleware\Admin\TemplatePathInstaller::class,
+ Middleware\Admin\WidgetInstaller::class,
],
'api' => [
'throttle:60,1',
@@ -53,19 +53,18 @@ class Kernel extends HttpKernel
];
/**
* The application's route middleware.
- *
* These middleware may be assigned to groups or used individually.
- *
* @var array
*/
protected $routeMiddleware = [
- 'auth' => Middleware\Authenticate::class,
- 'onlyAdmin' => Middleware\RequireAdminRole::class,
- 'adminMenu' => Middleware\AdminMenuRegistrator::class,
+ 'can' => Authorize::class,
+ 'auth' => Middleware\Admin\Authenticate::class,
+ 'adminMenu' => Middleware\Admin\AdminMenuRegistrator::class,
'guest' => Middleware\RedirectIfAuthenticated::class,
'throttle' => ThrottleRequests::class,
'localize' => LaravelLocalizationRoutes::class,
'localizationRedirect' => LaravelLocalizationRedirectFilter::class,
- 'localeSessionRedirect' => LocaleSessionRedirect::class
+ 'localeSessionRedirect' => LocaleSessionRedirect::class,
+ 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
];
}
diff --git a/app/Http/Middleware/AdminMenuRegistrator.php b/app/Http/Middleware/Admin/AdminMenuRegistrator.php
similarity index 80%
rename from app/Http/Middleware/AdminMenuRegistrator.php
rename to app/Http/Middleware/Admin/AdminMenuRegistrator.php
index ca591767..873b5bb2 100644
--- a/app/Http/Middleware/AdminMenuRegistrator.php
+++ b/app/Http/Middleware/Admin/AdminMenuRegistrator.php
@@ -1,9 +1,9 @@
get();
+ $modules = app(ModuleRepository::class)->all();
// iterate over all enabled modules
foreach ($modules as $key => $module) {
- if (!is_callable([$module->handler, 'registerAdminMenu']))
+ if (!is_callable([$module->handler, 'registerAdminMenu'])) {
continue;
+ }
// try to register menus
try {
diff --git a/app/Http/Middleware/Admin/Authenticate.php b/app/Http/Middleware/Admin/Authenticate.php
new file mode 100644
index 00000000..a6daacf7
--- /dev/null
+++ b/app/Http/Middleware/Admin/Authenticate.php
@@ -0,0 +1,46 @@
+check() || Auth::user()->status != User::STATE_ACTIVE || Auth::user()->role == User::ROLE_VISITOR || 0) {
+ Auth::logout();
+
+ if ($request->ajax()) {
+ return response('Unauthorized.', 401);
+ }
+
+ // select right message
+ if (Auth::user() && Auth::user()->status != User::STATE_ACTIVE) {
+ $message = 'auth.userNotActive';
+ } elseif (Auth::user() && Auth::user()->role == User::ROLE_VISITOR) {
+ $message = 'auth.visitorInAdmin';
+ } else {
+ $message = 'auth.loginExpired';
+ }
+
+ return redirect()
+ ->route('login')
+ ->with('warning', trans($message));
+ }
+
+ return $next($request);
+ }
+}
diff --git a/app/Http/Middleware/TemplatePathInstaller.php b/app/Http/Middleware/Admin/TemplatePathInstaller.php
similarity index 88%
rename from app/Http/Middleware/TemplatePathInstaller.php
rename to app/Http/Middleware/Admin/TemplatePathInstaller.php
index d1c23267..1c2c741d 100644
--- a/app/Http/Middleware/TemplatePathInstaller.php
+++ b/app/Http/Middleware/Admin/TemplatePathInstaller.php
@@ -1,6 +1,6 @@
saveTemplates();
+ $registator->deleteNonExistingPaths();
+
return $next($request);
}
}
diff --git a/app/Http/Middleware/WidgetInstaller.php b/app/Http/Middleware/Admin/WidgetInstaller.php
similarity index 94%
rename from app/Http/Middleware/WidgetInstaller.php
rename to app/Http/Middleware/Admin/WidgetInstaller.php
index 06eae5c3..0b495848 100644
--- a/app/Http/Middleware/WidgetInstaller.php
+++ b/app/Http/Middleware/Admin/WidgetInstaller.php
@@ -1,6 +1,6 @@
check()) {
- if ($request->ajax()) {
- return response('Unauthorized.', 401);
- }
-
- return redirect()
- ->route('login')
- ->with('redirectTo', $request->fullUrl());
- }
-
- return $next($request);
- }
-}
diff --git a/app/Http/Middleware/RequireAdminRole.php b/app/Http/Middleware/TemplateChecker.php
similarity index 61%
rename from app/Http/Middleware/RequireAdminRole.php
rename to app/Http/Middleware/TemplateChecker.php
index f0ea40b1..42c39dfc 100644
--- a/app/Http/Middleware/RequireAdminRole.php
+++ b/app/Http/Middleware/TemplateChecker.php
@@ -2,10 +2,10 @@
namespace App\Http\Middleware;
-use App\Models\User;
+use App\CMS\Helpers\CurrentTemplate;
use Closure;
-class RequireAdminRole
+class TemplateChecker
{
/**
* Handle an incoming request.
@@ -17,10 +17,10 @@ class RequireAdminRole
*/
public function handle($request, Closure $next)
{
- if (\Auth::user()->role != User::ROLE_ADMIN) {
- return redirect()
- ->back()
- ->with('error', trans('auth.accessDenied'));
+ $template = CurrentTemplate::get();
+
+ if (!$template) {
+ throw new \ErrorException('Template is not set, cannot continue');
}
return $next($request);
diff --git a/app/Http/Middleware/Web/IncrementWidgetsViews.php b/app/Http/Middleware/Web/IncrementWidgetsViews.php
new file mode 100644
index 00000000..84b4e8d3
--- /dev/null
+++ b/app/Http/Middleware/Web/IncrementWidgetsViews.php
@@ -0,0 +1,36 @@
+increment('viewed');
+ }
+ }
+}
diff --git a/app/Http/routes.php b/app/Http/routes.php
deleted file mode 100644
index c648aaf7..00000000
--- a/app/Http/routes.php
+++ /dev/null
@@ -1,75 +0,0 @@
- LaravelLocalization::setLocale()], function () {
- /**
- * This route group serves to handle request in admin
- */
- Route::group([
- 'middleware' => ['admin'],
- 'namespace' => 'Admin',
- 'prefix' => 'admin'
- ], function () {
-
- // include all routes in routes/admin subfolder
- $files = ['contents', 'fileManager', 'settings', 'templates', 'users', 'widgets'];
- foreach ($files as $file) {
- require_once __DIR__ . DIRECTORY_SEPARATOR . 'routes' . DIRECTORY_SEPARATOR . 'admin' . DIRECTORY_SEPARATOR . $file . '.php';
- }
-
- // display dashboard with some usefull information
- Route::get('/', 'Dashboard\Dashboard@index')
- ->name('admin.dashboard');
-
- // list of all actions
- Route::get('actions', 'ActionLog\Overview@index')
- ->name('log.overview');
-
- // search form with results
- Route::get('search', 'Search@getSearch')
- ->name('search');
-
- // logout method
- Route::get('logout', 'Login@logout')
- ->name('logout');
- });
-
- /**************************************************************************************/
-
- /**
- * This section must be specified as last one
- */
-
- Route::group(['middleware' => ['web']], function () {
-
- // Homepage
- Route::get('/', 'Visitor\Homepage@getIndex')
- ->name('page.index');
-
- // display login form
- Route::get('admin/login', 'Admin\Login@getLogin')
- ->name('loginForm');
-
- // handle login
- Route::post('admin/login', 'Admin\Login@postLogin')
- ->name('login');
-
- // route for sitemap
- Route::get('sitemap.xml', 'Sitemap@getMap')
- ->name('sitemap');
-
- // route for all content pages. This rule must be specified last (because it matches every route)
- Route::get('{url}', 'Visitor\ContentPage@getPage')
- ->name('page.content');
- });
-});
\ No newline at end of file
diff --git a/app/Http/routes/admin/contents.php b/app/Http/routes/admin/contents.php
deleted file mode 100644
index 54b70c6b..00000000
--- a/app/Http/routes/admin/contents.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'Contents'], function () {
- // list of all static pages
- Route::get('content/overview/{module?}', 'ContentOverview@index')
- ->name('content.overview');
-
- // form for creating new static page
- Route::get('content/new/{module}', 'CreateNewContent@create')
- ->name('content.new');
-
- // form for editing existing static page
- Route::get('content/edit/{id}', 'EditContent@edit')
- ->name('content.edit');
-
- // post method for creating new static page
- Route::post('content/new/{moduleId}', 'CreateNewContent@store')
- ->name('content.newPost');
-
- // post method for creating new static page
- Route::post('content/edit/{id}', 'EditContent@update')
- ->name('content.editPost');
-
- // change status of page (protected, public or draft)
- Route::get('content/status/{id}/{status}', 'ContentActions@changeStatus')
- ->name('content.changeStatus');
-
- // set homepage
- Route::get('content/homepage/{id}', 'ContentActions@setHomepage')
- ->name('content.setHomepage');
-
- // delete page
- Route::get('content/delete/{id}', 'ContentActions@delete')
- ->name('content.delete');
-
- // history of changes for specified page
- Route::get('history/{id}', 'History@getOverview')
- ->name('content.history');
-
- // history of changes for specified page
- Route::get('history/{revision}/{id}', 'History@getDiff')
- ->name('history.diff');
-});
\ No newline at end of file
diff --git a/app/Http/routes/admin/fileManager.php b/app/Http/routes/admin/fileManager.php
deleted file mode 100644
index ec85fc37..00000000
--- a/app/Http/routes/admin/fileManager.php
+++ /dev/null
@@ -1,32 +0,0 @@
- 'FileManager'], function () {
-
- Route::get('files/overview/{directory?}', 'UploadedFilesOverview@index')
- ->name('upload.overview');
-
- // uploader methods
- Route::get('directories/new/{parentDirectory?}', 'CreateNewDirectory@create')
- ->name('upload.newDirectory');
-
- Route::get('directories/edit/{directory}', 'EditDirectory@edit')
- ->name('upload.editDirectory');
-
- Route::post('directories/edit/{directory}', 'EditDirectory@update')
- ->name('upload.postEditDirectory');
-
- route::post('directories/new', 'CreateNewDirectory@store')
- ->name('upload.postNewDirectory');
-
- Route::get('upload/detail/{file}', 'EditUploadedFile@show')
- ->name('upload.detail');
-
- Route::post('upload/detail/{file}', 'EditUploadedFile@update')
- ->name('upload.postEdit');
-
- Route::get('upload/delete/{file}', 'EditUploadedFile@delete')
- ->name('upload.delete');
-
- // uploader methods
- Route::post('upload', 'UploadFile@store')
- ->name('upload.postFile');
-});
diff --git a/app/Http/routes/admin/settings.php b/app/Http/routes/admin/settings.php
deleted file mode 100644
index 70b2b996..00000000
--- a/app/Http/routes/admin/settings.php
+++ /dev/null
@@ -1,7 +0,0 @@
-name('settings.overview');
-
-Route::post('settings', 'Settings@saveSettings')
- ->name('settings.save');
\ No newline at end of file
diff --git a/app/Http/routes/admin/templates.php b/app/Http/routes/admin/templates.php
deleted file mode 100644
index bb265533..00000000
--- a/app/Http/routes/admin/templates.php
+++ /dev/null
@@ -1,15 +0,0 @@
- 'onlyAdmin', 'namespace' => 'Templates'], function () {
- Route::get('templates/overview/path/{id}', 'TemplateOverview@getPath')
- ->name('templates.overview');
-
- Route::post('templates/copy', 'CopyTemplate@createCopy')
- ->name('templates.postCopy');
-
- Route::get('templates/edit/{id}', 'EditTemplate@getEdit')
- ->name('templates.edit');
-
- Route::post('templates/edit/{id}', 'EditTemplate@postEdit')
- ->name('templates.postEdit');
-});
\ No newline at end of file
diff --git a/app/Http/routes/admin/users.php b/app/Http/routes/admin/users.php
deleted file mode 100644
index 69d643f7..00000000
--- a/app/Http/routes/admin/users.php
+++ /dev/null
@@ -1,27 +0,0 @@
- 'Users'], 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@getEditUser')
- ->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');
-});
diff --git a/app/Http/routes/admin/widgets.php b/app/Http/routes/admin/widgets.php
deleted file mode 100644
index d10df3fd..00000000
--- a/app/Http/routes/admin/widgets.php
+++ /dev/null
@@ -1,60 +0,0 @@
- 'Widgets'], function () {
-
- // list of all installed widget types
- Route::get('widgets/overview', 'WidgetsOverview@getOverview')
- ->name('widgets.overview');
-
- // create new instance of widget of given type
- Route::get('widgets/new/{type}', 'CreateNewWidget@getNew')
- ->name('widgets.new');
-
- Route::post('widgets/new/{type}', 'CreateNewWidget@postNew')
- ->name('widgets.postNew');
-
- // edit widget settings
- Route::get('widgets/edit/{id}', 'EditWidget@getEdit')
- ->name('widgets.edit');
-
- // delete widget settings
- Route::get('widgets/delete/{id}', 'EditWidget@deleteWidget')
- ->name('widgets.delete');
-
- Route::post('widgets/edit/{id}', 'EditWidget@postEdit')
- ->name('widgets.postEdit');
-
- // display form for association of widget and widget area
- Route::get('widgets/associate/{widgetArea}', 'AssociateWidget@getList')
- ->name('widgets.associate');
-
- Route::get('widgets/deassociate/{widgetId}/{widgetArea}', 'AssociateWidget@deleteAssociation')
- ->name('widgets.deleteAssociation');
-
- Route::get('widgets/associate/{widgetId}/{widgetArea}', 'AssociateWidget@makeAssociation')
- ->name('widgets.makeAssociation');
-
- Route::group(['namespace' => 'Areas'], function () {
- Route::get('widgets/areas/overview', 'WidgetAreaOverview@getOverview')
- ->name('widgetareas.overview');
-
- // form for new widget area
- Route::get('widgets/areas/new', 'CreateNewWidgetArea@getNew')
- ->name('widgetareas.new');
-
- // form for new widget area
- Route::post('widgets/areas/new', 'CreateNewWidgetArea@postNew')
- ->name('widgetareas.postNew');
-
- // edit form for widget area
- Route::get('widgets/areas/edit/{id}', 'EditWidgetArea@getEdit')
- ->name('widgetareas.edit');
-
- Route::post('widgets/areas/edit/{id}', 'EditWidgetArea@postEdit')
- ->name('widgetareas.postEdit');
-
- // edit form for widget area
- Route::get('widgets/areas/delete/{id}', 'EditWidgetArea@deleteArea')
- ->name('widgetareas.delete');
- });
-});
diff --git a/app/Listeners/CreateImageThumbnail.php b/app/Listeners/CreateImageThumbnail.php
index 07ff6145..c569645c 100644
--- a/app/Listeners/CreateImageThumbnail.php
+++ b/app/Listeners/CreateImageThumbnail.php
@@ -3,23 +3,16 @@
namespace App\Listeners;
use App\Events\UploadFile;
+use App\Models\FileManager\File;
+use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\File as FileFacade;
use Illuminate\Support\Str;
use Intervention\Image\Constraint;
use Intervention\Image\Facades\Image;
use Symfony\Component\HttpFoundation\File\File as SymphonyFile;
-class CreateImageThumbnail
+class CreateImageThumbnail implements ShouldQueue
{
- /**
- * Create the event listener.
- *
- * @return void
- */
- public function __construct()
- {
- }
-
/**
* Handle the event.
*
@@ -29,10 +22,10 @@ class CreateImageThumbnail
*/
public function handle(UploadFile $event)
{
- $uploadedFile = $event->uploadedFile;
+ $uploadedFile = $event->file;
// is uploaded file an image?
- if (!Str::startsWith($uploadedFile->getMimeType(), 'image')) {
+ if (!Str::startsWith($uploadedFile->mime_type, 'image')) {
return;
}
// yes, create thumbnail
@@ -42,10 +35,12 @@ class CreateImageThumbnail
/**
* Create thumbnail of given image
*
- * @param SymphonyFile $file
+ * @param File $uploadedFile
*/
- private function createThumbnail(SymphonyFile $file)
+ private function createThumbnail(File $uploadedFile)
{
+ $file = new SymphonyFile(config('app.upload_path') . '/' . $uploadedFile->filename);
+
// does thumbnail directory exist?
if (!is_dir(config('app.thumbnail_path'))) {
FileFacade::makeDirectory(config('app.thumbnail_path'));
@@ -61,6 +56,6 @@ class CreateImageThumbnail
});
// save thumbnail with lower quality
- $image->save(config('app.thumbnail_path') . DIRECTORY_SEPARATOR . $file->getFilename(), 75);
+ $image->save(config('app.thumbnail_path') . DIRECTORY_SEPARATOR . $file->getFilename(), setting('previewQuality', 75));
}
}
diff --git a/app/Listeners/Loggers/LogLogout.php b/app/Listeners/Loggers/LogLogout.php
index 6ca608bf..abda7140 100644
--- a/app/Listeners/Loggers/LogLogout.php
+++ b/app/Listeners/Loggers/LogLogout.php
@@ -3,19 +3,22 @@
namespace App\Listeners\Loggers;
use Illuminate\Auth\Events\Logout;
-use Illuminate\Queue\InteractsWithQueue;
-use Illuminate\Contracts\Queue\ShouldQueue;
class LogLogout extends Logger
{
/**
* Handle the event.
*
- * @param Logout $event
+ * @param Logout $event
+ *
* @return void
*/
public function handle(Logout $event)
{
+ if (is_null($event->user)) {
+ return;
+ }
+
$parameters = [
'id' => $event->user->id,
'name' => $event->user->name,
@@ -27,7 +30,6 @@ class LogLogout extends Logger
/**
* Getter for action name. Used only internally
- *
* @return mixed
*/
protected function getName()
diff --git a/app/Listeners/Loggers/LogUploadFile.php b/app/Listeners/Loggers/LogUploadFile.php
index 38dac179..14a4f627 100644
--- a/app/Listeners/Loggers/LogUploadFile.php
+++ b/app/Listeners/Loggers/LogUploadFile.php
@@ -2,30 +2,33 @@
namespace App\Listeners\Loggers;
-use App\Events\Uploadfile;
-use Illuminate\Queue\InteractsWithQueue;
-use Illuminate\Contracts\Queue\ShouldQueue;
+use App\Events\UploadFile;
-class LogUploadFile
+class LogUploadFile extends Logger
{
- /**
- * Create the event listener.
- *
- * @return void
- */
- public function __construct()
- {
- //
- }
-
/**
* Handle the event.
*
- * @param Uploadfile $event
+ * @param CreateNewWidget $event
+ *
* @return void
*/
- public function handle(Uploadfile $event)
+ public function handle(UploadFile $event)
{
- //
+ $parameters = [
+ 'name' => $event->file->filename,
+ 'mime' => $event->file->mime_type,
+ ];
+
+ $this->saveLog($parameters);
+ }
+
+ /**
+ * Getter for action name. Used only internally
+ * @return mixed
+ */
+ protected function getName()
+ {
+ return 'newFile';
}
}
diff --git a/app/Listeners/SetDefaultPermissions.php b/app/Listeners/SetDefaultPermissions.php
new file mode 100644
index 00000000..66f3e5c1
--- /dev/null
+++ b/app/Listeners/SetDefaultPermissions.php
@@ -0,0 +1,27 @@
+get();
+
+ foreach ($permissions as $permission) {
+ $event->user->permissions()
+ ->attach($permission);
+ }
+ }
+}
diff --git a/app/Models/Content/Content.php b/app/Models/Content/Content.php
index e016392b..052ff9d3 100644
--- a/app/Models/Content/Content.php
+++ b/app/Models/Content/Content.php
@@ -6,6 +6,8 @@ use App\CMS\Contracts\Repositories\Content as ContentContract;
use App\CMS\Helpers\Traits\Nullable;
use App\CMS\Observers\Content as ContentObserver;
use App\Models\FileManager\File;
+use App\Models\Module;
+use App\Models\Templates\Template;
use App\Models\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
@@ -32,6 +34,7 @@ class Content extends Model
'isHomepage',
'title',
'url',
+ 'order',
'metaKeywords',
'metaDescription',
'pageContent',
@@ -55,7 +58,6 @@ class Content extends Model
/**
* Mark relationship with its historical records
- *
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function history()
@@ -63,9 +65,12 @@ class Content extends Model
return $this->hasMany(ContentHistory::class);
}
+ public function templateModel() {
+ return $this->belongsTo(Template::class, 'template', 'template_name');
+ }
+
/**
* Mark relationship with users table
- *
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function author()
@@ -75,7 +80,6 @@ class Content extends Model
/**
* Related files to content page
- *
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function files()
@@ -85,27 +89,54 @@ class Content extends Model
/**
* Category of content page
- *
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function category()
{
+ if (!class_exists(Category::class)) {
+ throw new \ErrorException('Categories are not installed');
+ }
+
return $this->belongsTo(Category::class);
}
/**
* Subpages assigned to page
- *
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function subpages()
{
- return $this->hasMany(Content::class, 'parentId');
+ return $this->hasMany(Content::class, 'parentId')->orderBy('order')->orderBy('created_at', 'DESC');
+ }
+
+ /**
+ * Subpages assigned to page
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
+ */
+ public function publishedSubpages()
+ {
+ $query = $this->subpages();
+
+ if (\Auth::check()) {
+ $query = $query->where('status', '!=', ContentContract::STATUS_DRAFT);
+ } else {
+ $query = $query->where('status', ContentContract::STATUS_PUBLIC);
+ }
+
+ return $query;
+ }
+
+ /**
+ * Module relationship
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
+ */
+ public function module()
+ {
+ return $this->belongsTo(Module::class, 'moduleHandler', 'handler');
}
/**
* Parent page
- *
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function parentPage()
@@ -115,7 +146,6 @@ class Content extends Model
/**
* Is current content draft?
- *
* @return bool
*/
public function isDraft()
@@ -125,7 +155,6 @@ class Content extends Model
/**
* Is current content visible for all visitors?
- *
* @return bool
*/
public function isPublic()
@@ -135,7 +164,6 @@ class Content extends Model
/**
* Is current content visible only for logged users?
- *
* @return bool
*/
public function isProtected()
@@ -145,7 +173,6 @@ class Content extends Model
/**
* Is current content visible for logged user OR for everyone?
- *
* @return bool
*/
public function isVisible()
@@ -164,6 +191,9 @@ class Content extends Model
return parent::save($options);
}
+ /**
+ * Increment number of viewed content
+ */
public function view()
{
$this->timestamps = false;
diff --git a/app/Models/Content/ContentHistory.php b/app/Models/Content/ContentHistory.php
index dca25307..b81d4c59 100644
--- a/app/Models/Content/ContentHistory.php
+++ b/app/Models/Content/ContentHistory.php
@@ -2,6 +2,7 @@
namespace App\Models\Content;
+use App\Models\User;
use Illuminate\Database\Eloquent\Model;
/**
@@ -21,5 +22,14 @@ class ContentHistory extends Model
'new_value',
'old_value'
];
- protected $guarded = [];
+
+ /**
+ * Author of the change
+ *
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
+ */
+ public function author()
+ {
+ return $this->belongsTo(User::class, 'user_id');
+ }
}
\ No newline at end of file
diff --git a/app/Models/FileManager/ModelTraits/File.php b/app/Models/FileManager/ModelTraits/File.php
index 759c6bf6..3da83ec9 100644
--- a/app/Models/FileManager/ModelTraits/File.php
+++ b/app/Models/FileManager/ModelTraits/File.php
@@ -6,6 +6,7 @@ use App\Events\UploadFile;
use App\Models\FileManager\File as FileModel;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Event;
+use Illuminate\Support\Facades\Gate;
use Symfony\Component\HttpFoundation\File\File as SymphonyFile;
use Symfony\Component\HttpFoundation\File\UploadedFile;
@@ -36,6 +37,8 @@ trait File
*/
public function upload(UploadedFile $file, $data = [])
{
+ abort_unless(Auth::user()->can('upload', FileModel::class), 403);
+
$data = (object)$data;
$destination = config('app.upload_path');
@@ -45,15 +48,15 @@ trait File
$uploadedFile = $file->move($destination, $filename);
// insert record into database
- $id = $this->saveIntoDatabase($uploadedFile, $data, $file->getClientOriginalName());
+ $fileInDB = $this->saveIntoDatabase($uploadedFile, $data, $file->getClientOriginalName());
// fire event about new file
- Event::fire(new UploadFile($uploadedFile, $id));
+ Event::fire(new UploadFile($fileInDB));
return [
'filename' => $filename,
'file' => $file,
- 'id' => $id
+ 'id' => $fileInDB->id
];
}
@@ -89,6 +92,6 @@ trait File
'keywords' => isset($request->keyword) ? $request->keyword : ''
]);
- return $newFile->id;
+ return $newFile;
}
}
\ No newline at end of file
diff --git a/app/Models/ModelTraits/Module.php b/app/Models/ModelTraits/Module.php
deleted file mode 100644
index a60cfd61..00000000
--- a/app/Models/ModelTraits/Module.php
+++ /dev/null
@@ -1,113 +0,0 @@
-has_submodules = true;
- $parentModule->save();
- }
-
- // insert module into database
- $module = ModuleModel::create([
- 'name' => $name,
- 'description' => $description,
- 'handler' => $handler,
- 'manages_content' => $managesContent,
- 'support_categories' => $supportCategories,
- 'alias' => $alias,
- 'module_settings' => json_encode($settings),
- 'parent_id' => $parentModuleId ? $parentModuleId : null,
- 'enabled' => 1,
- 'is_template' => $isTemplate
- ]);
-
- // install something module-specific
- if ($handler && is_callable([$handler, 'install'])) {
- call_user_func([$handler, 'install']);
- }
-
- return $module;
- }
-
- /**
- * Delete module from database and uninstall its dependencies
- *
- * @throws \ErrorException
- */
- public function uninstall()
- {
- // check if user does not want to install module in runtime
- if (!App::runningInConsole()) {
- throw new \ErrorException('Modules can be uninstalled only via Artisan!');
- }
-
- // delete everything in /resources/views/visitor
- if ($this->is_template) {
- $this->deleteDirectory(resource_path('views/visitor'));
- $this->deleteDirectory(resource_path('views/modules'));
- $this->deleteDirectory(public_path('assets'));
-
- // delete all template paths
- TemplatePath::getQuery()
- ->delete();
- }
-
- if ($this->handler && is_callable([$this->handler, 'uninstall'])) {
- call_user_func([$this->handler, 'uninstall'], $this);
- }
-
- $this->delete();
- }
-
- /**
- * Delete directory when uninstalling module.
- *
- * @param $directory
- *
- * @throws \ErrorException
- */
- private function deleteDirectory($directory)
- {
- if (!is_dir($directory)) {
- return;
- }
-
- $success = \File::deleteDirectory($directory, true);
-
- if (!$success) {
- throw new \ErrorException('Cannot delete ' . $directory);
- }
- }
-}
\ No newline at end of file
diff --git a/app/Models/Module.php b/app/Models/Module.php
index f6940aad..8b56b74d 100644
--- a/app/Models/Module.php
+++ b/app/Models/Module.php
@@ -9,13 +9,13 @@ use Illuminate\Database\Eloquent\Model;
*/
class Module extends Model
{
- use ModelTraits\Module;
public $timestamps = false;
protected $fillable = [
'handler',
'parent_id',
'name',
'description',
+ 'static_name',
'alias',
'module_settings',
'enabled',
@@ -23,4 +23,23 @@ class Module extends Model
'manages_content',
'is_template'
];
+ protected $casts = [
+ 'module_settings' => 'array',
+ 'is_template' => 'boolean',
+ 'has_submodules' => 'boolean'
+ ];
+
+ public function getRouteKeyName()
+ {
+ return 'alias';
+ }
+
+ public function submodules()
+ {
+ return $this->hasMany(Module::class, 'parent_id');
+ }
+
+ public function parent() {
+ return $this->belongsTo(Module::class, 'parent_id');
+ }
}
\ No newline at end of file
diff --git a/app/Models/Permissions/Permission.php b/app/Models/Permissions/Permission.php
new file mode 100644
index 00000000..fd4d1ed0
--- /dev/null
+++ b/app/Models/Permissions/Permission.php
@@ -0,0 +1,40 @@
+ 'boolean'
+ ];
+
+ /**
+ * Assign observer for this model for logging
+ */
+ protected static function boot()
+ {
+ parent::boot();
+
+ self::observe(PermissionObserver::class);
+ }
+
+ public function parent()
+ {
+ return $this->hasOne(Permission::class, 'parent_id');
+ }
+
+ public function subpermissions()
+ {
+ return $this->hasMany(Permission::class, 'parent_id');
+ }
+}
diff --git a/app/Models/Permissions/PermissionObserver.php b/app/Models/Permissions/PermissionObserver.php
new file mode 100644
index 00000000..f52fb18e
--- /dev/null
+++ b/app/Models/Permissions/PermissionObserver.php
@@ -0,0 +1,26 @@
+default) {
+ $users = User::where('role', '!=', User::ROLE_VISITOR)
+ ->get();
+
+ foreach ($users as $user) {
+ $user->permissions()
+ ->attach($permission->id);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/Models/Settings.php b/app/Models/Settings.php
index 5ab99456..ecf7c313 100644
--- a/app/Models/Settings.php
+++ b/app/Models/Settings.php
@@ -3,12 +3,9 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
-use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class Settings extends Model
{
- use ModelTraits\Settings;
-
protected $table = 'settings';
public $timestamps = false;
protected $fillable = ['key', 'value', 'language'];
diff --git a/app/Models/User.php b/app/Models/User.php
index 35d4911f..b0db4a04 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -2,18 +2,29 @@
namespace App\Models;
+use App\Models\Permissions\Permission;
+use App\Notifications\ResetPasswordNotification;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticableInterface;
+use Illuminate\Contracts\Auth\CanResetPassword;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\Access\Authorizable;
+use Illuminate\Notifications\Notifiable;
/**
* Class User
*/
-class User extends Model implements AuthenticableInterface
+class User extends Model implements AuthenticableInterface, CanResetPassword
{
- use SoftDeletes, Authenticatable, Authorizable;
+ use SoftDeletes, Authenticatable, Authorizable, Notifiable;
+ const STATE_DELETED = 'deleted';
+ const STATE_BLOCKED = 'blocked';
+ const STATE_ACTIVE = 'active';
+ const ROLE_VISITOR = 'visitor';
+ const ROLE_EDITOR = 'editor';
+ const ROLE_ADMIN = 'admin';
+ protected static $abilities;
public $timestamps = true;
protected $fillable = [
'email',
@@ -24,17 +35,52 @@ class User extends Model implements AuthenticableInterface
];
/**
* The attributes excluded from the model's JSON form.
- *
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
- const STATE_DELETED = 'deleted';
- const STATE_BLOCKED = 'blocked';
- const STATE_ACTIVE = 'active';
- const ROLE_VISITOR = 'visitor';
- const ROLE_EDITOR = 'editor';
- const ROLE_ADMIN = 'admin';
+
+ /**
+ * Get the e-mail address where password reset links are sent.
+ * @return string
+ */
+ public function getEmailForPasswordReset()
+ {
+ return $this->email;
+ }
+
+ /**
+ * Send the password reset notification.
+ *
+ * @param string $token
+ *
+ * @return void
+ */
+ public function sendPasswordResetNotification($token)
+ {
+ $this->notify(new ResetPasswordNotification($token));
+ }
+
+ public function permissions()
+ {
+ return $this->belongsToMany(Permission::class, 'user_has_permissions');
+ }
+
+ /**
+ * Check if current user has given ability
+ *
+ * @param $ability
+ *
+ * @return bool
+ */
+ public function hasAbility($ability)
+ {
+ if (!isset(self::$abilities[$this->id])) {
+ self::$abilities[$this->id] = $this->permissions->pluck('string_id')->toArray();
+ }
+
+ return in_array($ability, self::$abilities[$this->id]);
+ }
}
diff --git a/app/Models/Widgets/ModelTraits/Widget.php b/app/Models/Widgets/ModelTraits/Widget.php
deleted file mode 100644
index 82f1c263..00000000
--- a/app/Models/Widgets/ModelTraits/Widget.php
+++ /dev/null
@@ -1,41 +0,0 @@
-handler, 'save'], $request);
-
- // create new widget
- $widget = WidgetModel::create([
- 'widget_type_handler' => $widgetType->handler,
- 'language' => LaravelLocalization::getCurrentLocale(),
- 'user_id' => \Auth::user()->id,
- 'name' => $request->name,
- 'container_class' => $request->containerClass,
- 'container_id' => empty($request->containerId) ? null : $request->containerId,
- 'description' => $request->description,
- 'settings' => json_encode($settings),
- ]);
-
- // fire event with newly created widget
- \Event::fire(new CreateNewWidget($widget));
-
- return $widget;
- }
-}
\ No newline at end of file
diff --git a/app/Models/Widgets/ModelTraits/WidgetArea.php b/app/Models/Widgets/ModelTraits/WidgetArea.php
deleted file mode 100644
index f457fb35..00000000
--- a/app/Models/Widgets/ModelTraits/WidgetArea.php
+++ /dev/null
@@ -1,24 +0,0 @@
-join('widget_in_widget_area', 'widget_in_widget_area.widget_id', '=', 'widgets.id')
- ->join('widget_areas', 'widget_in_widget_area.widget_area_id', '=', 'widget_areas.id')
- ->where('language', LaravelLocalization::getCurrentLocale())
- ->orderBy('widget_in_widget_area.position');
- if (!$uniqueCode) {
- $widgets = $widgets->where('widget_areas.viewed', '>=', setting('preloadFrequentedWidgetAreasTreshold', 10));
- } else {
- $widgets = $widgets->where('code', $uniqueCode);
- }
-
- return $widgets;
- }
-}
\ No newline at end of file
diff --git a/app/Models/Widgets/Widget.php b/app/Models/Widgets/Widget.php
index fdb27d56..b4f25fff 100644
--- a/app/Models/Widgets/Widget.php
+++ b/app/Models/Widgets/Widget.php
@@ -22,4 +22,9 @@ class Widget extends Model
'viewed',
'deletable'
];
+
+ protected $casts = [
+ 'settings' => 'object',
+ 'deletable' => 'boolean',
+ ];
}
\ No newline at end of file
diff --git a/app/Models/Widgets/WidgetArea.php b/app/Models/Widgets/WidgetArea.php
index 2e32cb5b..d326783a 100644
--- a/app/Models/Widgets/WidgetArea.php
+++ b/app/Models/Widgets/WidgetArea.php
@@ -3,19 +3,24 @@
namespace App\Models\Widgets;
use Illuminate\Database\Eloquent\Model;
+use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
/**
* Class WidgetArea
*/
class WidgetArea extends Model
{
- use ModelTraits\WidgetArea;
-
- public $timestamps = false;
+ public $timestamps = true;
protected $fillable = [
'name',
'code',
'description',
'deletable'
];
+
+ public function widgets()
+ {
+ return $this->hasMany(Widget::class)
+ ->where('language', LaravelLocalization::getCurrentLocale());
+ }
}
\ No newline at end of file
diff --git a/app/Notifications/ResetPasswordNotification.php b/app/Notifications/ResetPasswordNotification.php
new file mode 100644
index 00000000..03418cda
--- /dev/null
+++ b/app/Notifications/ResetPasswordNotification.php
@@ -0,0 +1,52 @@
+token = $token;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ *
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ['mail'];
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ *
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ $url = route('password.reset', ['token' => $this->token, 'email' => $notifiable->email]);
+
+ return (new MailMessage())->subject(trans('notification.forgottenPassword.subject'))
+ ->line(trans('notification.forgottenPassword.firstLine'))
+ ->action(trans('notification.forgottenPassword.button'), $url)
+ ->line(trans('notification.forgottenPassword.lastLine'));
+ }
+}
diff --git a/app/Policies/ActionLogPolicy.php b/app/Policies/ActionLogPolicy.php
new file mode 100644
index 00000000..7522281d
--- /dev/null
+++ b/app/Policies/ActionLogPolicy.php
@@ -0,0 +1,11 @@
+manage($user)) {
+ return false;
+ }
+ }
+
+ /**
+ * Can user manage given entity?
+ *
+ * @param User $user
+ *
+ * @return bool
+ */
+ public function manage(User $user)
+ {
+ return $user->hasAbility($this->entity . '-management');
+ }
+
+ /**
+ * Determine whether the user can delete the content.
+ *
+ * @param \App\Models\User $user
+ * @param Model $model
+ *
+ * @return mixed
+ */
+ public function delete(User $user, Model $model)
+ {
+ return $user->hasAbility('delete-' . $this->entity);
+ }
+}
diff --git a/app/Policies/ContentPolicy.php b/app/Policies/ContentPolicy.php
new file mode 100644
index 00000000..1ee72ca6
--- /dev/null
+++ b/app/Policies/ContentPolicy.php
@@ -0,0 +1,118 @@
+id != $content->user_id) {
+ return $user->hasAbility('update-contents') && $user->hasAbility('update-all-contents');
+ };
+
+ return $user->hasAbility('update-contents');
+ }
+
+ /**
+ * Does given user has permissions to create new content page?
+ *
+ * @param User $user
+ *
+ * @return bool
+ */
+ public function create(User $user)
+ {
+ return $user->hasAbility('create-contents');
+ }
+
+ /**
+ * Change page status
+ *
+ * @param User $user
+ * @param Content $page
+ * @param $status
+ *
+ * @return bool
+ */
+ public function changeStatus(User $user, Content $page, $status)
+ {
+ switch ($status) {
+ case ContentContract::STATUS_PUBLIC:
+ return $this->publish($user, $page);
+ break;
+ case ContentContract::STATUS_DRAFT:
+ return $this->draft($user, $page);
+ break;
+ case ContentContract::STATUS_PROTECTED:
+ return $this->protect($user, $page);
+ break;
+ }
+
+ return false;
+ }
+
+ /**
+ * Can user publish given page?
+ *
+ * @param User $user
+ * @param Content $page
+ *
+ * @return bool
+ */
+ public function publish(User $user, Content $page)
+ {
+ return $user->hasAbility('publish-contents');
+ }
+
+ /**
+ * Can user make draft from given page?
+ *
+ * @param User $user
+ * @param Content $page
+ *
+ * @return bool
+ */
+ public function draft(User $user, Content $page)
+ {
+ return $user->hasAbility('draft-contents');
+ }
+
+ /**
+ * Can user publish page only for protected users?
+ *
+ * @param User $user
+ * @param Content $page
+ *
+ * @return bool
+ */
+ public function protect(User $user, Content $page)
+ {
+ return $user->hasAbility('protect-contents');
+ }
+
+ public function setHomepage(User $user)
+ {
+ return $user->hasAbility('set-homepage-contents');
+ }
+
+ public function viewHistory(User $user)
+ {
+ return $user->hasAbility('view-history-contents');
+ }
+}
diff --git a/app/Policies/DirectoriesPolicy.php b/app/Policies/DirectoriesPolicy.php
new file mode 100644
index 00000000..97cb6da4
--- /dev/null
+++ b/app/Policies/DirectoriesPolicy.php
@@ -0,0 +1,36 @@
+hasAbility('create-directories');
+ }
+
+ /**
+ * Determine whether the user can update the directory.
+ *
+ * @param \App\Models\User $user
+ * @param \App\Directory $directory
+ * @return mixed
+ */
+ public function update(User $user, Directory $directory)
+ {
+ return $user->hasAbility('update-directories');
+ }
+}
diff --git a/app/Policies/FilesPolicy.php b/app/Policies/FilesPolicy.php
new file mode 100644
index 00000000..7c8e5545
--- /dev/null
+++ b/app/Policies/FilesPolicy.php
@@ -0,0 +1,39 @@
+hasAbility('upload-files');
+ }
+
+ /**
+ * Determine whether the user can update the appModelsFileManagerFile.
+ *
+ * @param User $user
+ * @param File $file
+ *
+ * @return mixed
+ */
+ public function update(User $user, File $file)
+ {
+ return $user->hasAbility('update-files');
+ }
+}
diff --git a/app/Policies/ModulePolicy.php b/app/Policies/ModulePolicy.php
new file mode 100644
index 00000000..7c4d387d
--- /dev/null
+++ b/app/Policies/ModulePolicy.php
@@ -0,0 +1,27 @@
+hasAbility('create-contents-' . $module->alias);
+ }
+}
diff --git a/app/Policies/SettingsPolicy.php b/app/Policies/SettingsPolicy.php
new file mode 100644
index 00000000..6b0ff0e5
--- /dev/null
+++ b/app/Policies/SettingsPolicy.php
@@ -0,0 +1,11 @@
+hasAbility('copy-templates');
+ }
+
+ /**
+ * Determine whether the user can update the template.
+ *
+ * @param \App\Models\User $user
+ * @param \App\Template $template
+ *
+ * @return mixed
+ */
+ public function update(User $user, Template $template)
+ {
+ return $user->hasAbility('edit-templates');
+ }
+}
diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php
new file mode 100644
index 00000000..eb6dd2b7
--- /dev/null
+++ b/app/Policies/UserPolicy.php
@@ -0,0 +1,111 @@
+id == $user->id)
+ return true;
+
+ return $this->manage($currentUser);
+ }
+
+ /**
+ * Can current user updates other users (or himself?)
+ *
+ * @param User $currentUser
+ * @param User $user
+ *
+ * @return bool
+ */
+ public function update(User $currentUser, User $user)
+ {
+ return $currentUser->id == $user->id || $currentUser->hasAbility('update-users');
+ }
+
+ /**
+ * Can user create other users?
+ *
+ * @param User $user
+ *
+ * @return bool
+ */
+ public function create(User $user) {
+ return $user->hasAbility('create-users');
+ }
+
+ /**
+ * Does current user has permissions for setting permissions to other users?
+ *
+ * @param User $currentUser
+ * @param User $user
+ *
+ * @return bool
+ */
+ public function setPermissions(User $currentUser, User $user)
+ {
+ if ($currentUser->id == $user->id || $user->role == User::ROLE_VISITOR) {
+ return false;
+ }
+
+ return $currentUser->hasAbility('set-permissions-users');
+ }
+
+ /**
+ * Can logged user change status of other users?
+ *
+ * @param User $currentUser
+ * @param User $user
+ *
+ * @return bool
+ */
+ public function changeStatus(User $currentUser, User $user)
+ {
+ if ($currentUser->id == $user->id) {
+ return false;
+ }
+
+ return $currentUser->hasAbility('change-status-users');
+ }
+
+ /**
+ * Can current user change role of other users?
+ *
+ * @param User $currentUser
+ * @param User $user
+ *
+ * @return bool
+ */
+ public function changeRole(User $currentUser, User $user)
+ {
+ if ($currentUser->id == $user->id) {
+ return false;
+ }
+
+ return $currentUser->hasAbility('change-role-users');
+ }
+}
diff --git a/app/Policies/WidgetAreaPolicy.php b/app/Policies/WidgetAreaPolicy.php
new file mode 100644
index 00000000..cb16bd8f
--- /dev/null
+++ b/app/Policies/WidgetAreaPolicy.php
@@ -0,0 +1,36 @@
+hasAbility('create-widgetareas');
+ }
+
+ /**
+ * Determine whether the user can update the widgetArea.
+ *
+ * @param \App\Models\User $user
+ * @param \App\WidgetArea $widgetArea
+ * @return mixed
+ */
+ public function update(User $user, WidgetArea $widgetArea)
+ {
+ return $user->id == $widgetArea->user_id || $user->hasAbility('edit-widgetareas');
+ }
+}
diff --git a/app/Policies/WidgetsPolicy.php b/app/Policies/WidgetsPolicy.php
new file mode 100644
index 00000000..9d73f927
--- /dev/null
+++ b/app/Policies/WidgetsPolicy.php
@@ -0,0 +1,48 @@
+hasAbility('create-widgets');
+ }
+
+ /**
+ * Determine whether the user can update the widget.
+ *
+ * @param \App\Models\User $user
+ * @param \App\Widget $widget
+ *
+ * @return mixed
+ */
+ public function update(User $user, Widget $widget)
+ {
+ return $user->id == $widget->user_id || $user->hasAbility('edit-widgets');
+ }
+
+ public function assign(User $user)
+ {
+ return $user->hasAbility('assign-widgets');
+ }
+
+ public function unassign(User $user)
+ {
+ return $user->hasAbility('unassign-widgets');
+ }
+}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index e25b2de4..39c11cbb 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -25,11 +25,10 @@ use App\CMS\Repositories\Module as ModuleRepository;
use App\CMS\Repositories\Templates\Template as TemplateRepository;
use App\CMS\Widgets\HtmlCode\HtmlCode;
use App\CMS\Widgets\Menu\Menu;
+use App\CMS\Widgets\SocialButtons\SocialButtons;
use Barryvdh\Debugbar\ServiceProvider as DebugBarServiceProvider;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;
-use Pingpong\Menus\MenusServiceProvider;
-use Pingpong\Modules\ModulesServiceProvider;
class AppServiceProvider extends ServiceProvider
{
@@ -63,14 +62,11 @@ class AppServiceProvider extends ServiceProvider
$this->app->register(DebugBarServiceProvider::class);
}
- // register PingPong module extension
- $this->app->register(ModulesServiceProvider::class);
- $this->app->register(MenusServiceProvider::class);
$this->app->register(LaravelLocalizationServiceProvider::class);
// create singletons for registering widgets
$this->app->singleton('registerWidget', function ($app) {
- return new WidgetRegistrator($app);
+ return new WidgetRegistrator();
});
// create singleton for display pipeline - pipeline used for displaying visitor pages
@@ -85,7 +81,7 @@ class AppServiceProvider extends ServiceProvider
// create registrator for template directories
$this->app->singleton('registerTemplateDir', function ($app) {
- return new TemplateRegistrator($app);
+ return new TemplateRegistrator();
});
$this->app->singleton('registerSettingsExtension', function ($app) {
@@ -110,6 +106,7 @@ class AppServiceProvider extends ServiceProvider
// register all available widgets
$registrator->register(HtmlCode::class);
$registrator->register(Menu::class);
+ $registrator->register(SocialButtons::class);
}
/**
@@ -122,6 +119,7 @@ class AppServiceProvider extends ServiceProvider
$registrator->register('basic', 'admin/settings.basic', 'admin.settings.parts.basic');
$registrator->register('meta', 'admin/settings.meta', 'admin.settings.parts.meta');
$registrator->register('social', 'admin/settings.socialSites', 'admin.settings.parts.social');
+ $registrator->register('advanced', 'admin/settings.advanced.title', 'admin.settings.parts.advanced', 999);
}
/**
@@ -140,7 +138,7 @@ class AppServiceProvider extends ServiceProvider
$registrator = $this->app->make('displayPipeline');
$registrator->add(AddViewedToPage::class);
- $registrator->add(CompileShortcodes::class);
+// $registrator->add(CompileShortcodes::class);
}
private function registerSavePipeline()
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index 57d88ea3..08e6ed49 100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -2,30 +2,58 @@
namespace App\Providers;
-use Illuminate\Contracts\Auth\Access\Gate as GateContract;
-use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
+use App\Models\ActionLog\ActionLog;
+use App\Models\Content\Content;
+use App\Models\FileManager\Directory;
+use App\Models\FileManager\File;
+use App\Models\Module;
+use App\Models\Settings;
+use App\Models\Templates\Template;
+use App\Models\User;
+use App\Models\Widgets\Widget;
+use App\Models\Widgets\WidgetArea;
+use App\Policies\ActionLogPolicy;
+use App\Policies\ContentPolicy;
+use App\Policies\DirectoriesPolicy;
+use App\Policies\FilesPolicy;
+use App\Policies\ModulePolicy;
+use App\Policies\SettingsPolicy;
+use App\Policies\TemplatePolicy;
+use App\Policies\UserPolicy;
+use App\Policies\WidgetAreaPolicy;
+use App\Policies\WidgetsPolicy;
+use Illuminate\Foundation\Support\Providers\AuthServiceProvider as IlluminateAuthServiceProvider;
-class AuthServiceProvider extends ServiceProvider
+class AuthServiceProvider extends IlluminateAuthServiceProvider
{
/**
* The policy mappings for the application.
- *
* @var array
*/
protected $policies = [
- 'App\Model' => 'App\Policies\ModelPolicy',
+ Content::class => ContentPolicy::class,
+ User::class => UserPolicy::class,
+ Module::class => ModulePolicy::class,
+ File::class => FilesPolicy::class,
+ ActionLog::class => ActionLogPolicy::class,
+ Template::class => TemplatePolicy::class,
+ Directory::class => DirectoriesPolicy::class,
+ Settings::class => SettingsPolicy::class,
+ Widget::class => WidgetsPolicy::class,
+ WidgetArea::class => WidgetAreaPolicy::class,
+ ActionLog::class => ActionLogPolicy::class,
];
/**
* Register any application authentication / authorization services.
*
- * @param \Illuminate\Contracts\Auth\Access\Gate $gate
+ * @param \Illuminate\Contracts\Auth\Access\Gate $gate
+ *
* @return void
*/
- public function boot(GateContract $gate)
+ public function boot()
{
- $this->registerPolicies($gate);
-
+ $this->registerPolicies();
//
}
}
diff --git a/app/Providers/BladeExtender.php b/app/Providers/BladeExtender.php
index 3475ea2d..fea57a1f 100644
--- a/app/Providers/BladeExtender.php
+++ b/app/Providers/BladeExtender.php
@@ -26,7 +26,7 @@ class BladeExtender extends ServiceProvider
$this->extendBlade();
- Shortcode::register('widget', Widget::class);
+// Shortcode::register('widget', Widget::class);
}
/**
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index 47403ba2..da038506 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -43,21 +43,21 @@ use App\Listeners\Loggers\LogPublishContent;
use App\Listeners\Loggers\LogRemoveWidgetFromArea;
use App\Listeners\Loggers\LogSetHomepage;
use App\Listeners\Loggers\LogUploadFile;
+use App\Listeners\SetDefaultPermissions;
use Illuminate\Auth\Events\Login;
use Illuminate\Auth\Events\Logout;
-use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
- *
* @var array
*/
protected $listen = [
CreateNewUser::class => [
LogCreatedUser::class,
+ SetDefaultPermissions::class,
],
EditUser::class => [
LogEditUser::class,
diff --git a/app/Providers/LaravelLocalizationServiceProvider.php b/app/Providers/LaravelLocalizationServiceProvider.php
index 00b3db64..491d5861 100644
--- a/app/Providers/LaravelLocalizationServiceProvider.php
+++ b/app/Providers/LaravelLocalizationServiceProvider.php
@@ -1,5 +1,6 @@
get();
+ try {
+ $languages = DB::table('languages')
+ ->get();
+ } catch (QueryException $e) {
+ $supportedLocales[config('app.locale')] = [
+ 'native' => env('LOCALE_NATIVE_NAME', config('app.locale')),
+ 'script' => env('LOCALE_SCRIPT', 'Latn'),
+ 'name' => env('LOCALE_TRANSLATED_NAME', config('app.locale')),
+ 'code' => config('app.locale'),
+ ];
+ $this->setSupportedLocales($supportedLocales);
+ return;
+ }
$supportedLocales = [];
if (empty($languages)) {
@@ -32,15 +44,20 @@ class LaravelLocalizationServiceProvider extends ServiceProvider
];
}
- config([
- 'laravellocalization.supportedLocales' => $supportedLocales,
- 'laravellocalization.useAcceptLanguageHeader' => true,
- 'laravellocalization.hideDefaultLocaleInURL' => true
- ]);
+ $this->setSupportedLocales($supportedLocales);
}
public function boot()
{
\App::setLocale(LaravelLocalization::getCurrentLocale());
}
+
+ private function setSupportedLocales($supportedLocales)
+ {
+ config([
+ 'laravellocalization.supportedLocales' => $supportedLocales,
+ 'laravellocalization.useAcceptLanguageHeader' => true,
+ 'laravellocalization.hideDefaultLocaleInURL' => true
+ ]);
+ }
}
\ No newline at end of file
diff --git a/app/Providers/ModuleManager.php b/app/Providers/ModuleManager.php
deleted file mode 100644
index 5594544f..00000000
--- a/app/Providers/ModuleManager.php
+++ /dev/null
@@ -1,93 +0,0 @@
-get();
-
- foreach ($modules as $module) {
- $module->module_settings = json_decode($module->module_settings);
- }
-
- return $modules;
- });
-
- // iterate over all modules and enable or disable them
- foreach ($modules as $module) {
- if ($module->is_template) {
- if (isset($module->module_settings->providers) && !empty($module->module_settings->providers)) {
- foreach ($module->module_settings->providers as $provider) {
- $this->app->register($provider);
- }
- }
-
- continue;
- }
-
- $this->createModulesJson($module);
- }
- }
-
- /**
- * Register the application services.
- * @return void
- */
- public function register()
- {
- }
-
- /**
- * Read config file and merge it with module config in database.
- * This method REQUIRES published config of given module (otherwise config(modulename) is not available)!
- *
- * @param Module $module
- *
- * @throws \ErrorException when module.json is not writable
- */
- private function createModulesJson(Module $module)
- {
- $config = $module->module_settings;
-
- if (is_null($config)) {
- return;
- }
-
- // path to module.json
- $path = config('modules.paths.modules') . DIRECTORY_SEPARATOR . $config->staticName . DIRECTORY_SEPARATOR . 'module.json';
-
- // check if module config is writable
- if (!is_writable(dirname($path))) {
- Log::warning('Cannot write to ' . $path);
- return;
- }
-
- // set enabled/disabled status for this module
- $data = new \stdClass();
- $data->name = $config->staticName;
- $data->description = $module->description;
- $data->alias = $module->alias;
- $data->providers = $config->providers;
- $data->aliases = $config->aliases;
- $data->order = $config->order;
- $data->files = $config->files;
- $data->active = $module->enabled;
-
- // create file
- file_put_contents($path, json_encode($data));
- }
-}
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
index d50b1c0f..c18b2785 100644
--- a/app/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -2,43 +2,52 @@
namespace App\Providers;
-use Illuminate\Routing\Router;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
+use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
/**
- * This namespace is applied to the controller routes in your routes file.
- *
+ * This namespace is applied to your controller routes.
* In addition, it is set as the URL generator's root namespace.
- *
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
- * Define your route model bindings, pattern filters, etc.
- *
- * @param \Illuminate\Routing\Router $router
+ * Define the routes for the application.
* @return void
*/
- public function boot(Router $router)
+ public function map()
{
- //
-
- parent::boot($router);
+ $this->mapAdminRoutes();
+ $this->mapWebRoutes();
}
/**
- * Define the routes for the application.
- *
- * @param \Illuminate\Routing\Router $router
+ * Define the "admin" routes for the application.
+ * These routes all receive session state, CSRF protection, etc.
* @return void
*/
- public function map(Router $router)
+ protected function mapAdminRoutes()
{
- $router->group(['namespace' => $this->namespace], function ($router) {
- require app_path('Http/routes.php');
- });
+ // separate route file for Auth::routes()
+ Route::namespace($this->namespace)
+ ->group(base_path('routes/auth.php'));
+
+ // routes for administration
+ Route::namespace($this->namespace . '\\Admin')
+ ->group(base_path('routes/admin.php'));
}
-}
+
+ /**
+ * Define the "web" routes for the application.
+ * These routes all receive session state, CSRF protection, etc.
+ * @return void
+ */
+ protected function mapWebRoutes()
+ {
+ Route::namespace($this->namespace)
+ ->group(base_path('routes/web.php'));
+ }
+}
\ No newline at end of file
diff --git a/app/Providers/SubmodulesManager.php b/app/Providers/SubmodulesManager.php
deleted file mode 100644
index ee8bbe77..00000000
--- a/app/Providers/SubmodulesManager.php
+++ /dev/null
@@ -1,64 +0,0 @@
-getPath();
- $config = new Json($modulePath . DIRECTORY_SEPARATOR . 'module.json');
-
- // Does this module specify any providers? If not, consider this module with submodules and register them
- if ($config->get('providers')) {
- continue;
- }
-
- $submodules = \File::directories($modulePath);
-
- foreach ($submodules as $submodulePath) {
- try {
- $config = new Json($submodulePath . DIRECTORY_SEPARATOR . 'module.json');
-
- if (!$config->get('active')) {
- continue;
- }
-
- $serviceProviders = $config->get('providers', []);
- foreach ($serviceProviders as $serviceProvider) {
- $this->app->register($serviceProvider);
- }
-
- $initFiles = $config->get('files', []);
-
- foreach ($initFiles as $file) {
- require $submodulePath . DIRECTORY_SEPARATOR . $file;
- }
- } catch (FileNotFoundException $e) {
- // ignore missing module and do not register this submodule
- }
- }
- }
- }
-
- /**
- * Register the service provider.
- *
- * @return void
- */
- public function register()
- {
- }
-}
\ No newline at end of file
diff --git a/app/Providers/TemplateServiceProvider.php b/app/Providers/TemplateServiceProvider.php
index 6c30bf40..606ec283 100644
--- a/app/Providers/TemplateServiceProvider.php
+++ b/app/Providers/TemplateServiceProvider.php
@@ -5,7 +5,8 @@ namespace App\Providers;
use App\CMS\Contracts\Repositories\Template as TemplateContract;
use App\CMS\Handlers\Registrators\TemplateRegistrator;
use App\CMS\Helpers\CurrentTemplate;
-use App\Models\Module;
+use App\CMS\Repositories\Module;
+use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;
@@ -13,25 +14,20 @@ class TemplateServiceProvider extends ServiceProvider
{
public function boot()
{
+ try {
+ $template = CurrentTemplate::get();
+ } catch (QueryException $e) {
+ return;
+ }
+
// ignore running from artisan
- if (App::runningInConsole() || App::environment('testing')) {
+ if (App::runningInConsole() || App::environment('testing') || !$template) {
$this->publishViewResources();
return;
}
- $template = CurrentTemplate::get();
-
- if (!$template) {
- throw new \ErrorException('Template is not set, cannot continue');
- }
-
- // include files
- $files = isset($template->moduleSettings->files) ? $template->moduleSettings->files : [];
-
- foreach ($files as $file) {
- include_once $file;
- }
+ // service providers and files already registered in ModuleManager
// register templates
$publicTemplates = CurrentTemplate::getPublicTemplatePaths();
@@ -43,12 +39,17 @@ class TemplateServiceProvider extends ServiceProvider
$this->registerTemplatePaths($publicTemplates);
}
+ /**
+ * Register template paths from public templates
+ *
+ * @param $publicTemplates
+ */
public function registerTemplatePaths($publicTemplates)
{
- $modules = Module::where('enabled', true)
- ->get()
- ->pluck('id', 'alias')
- ->toArray();
+ $modules = app(Module::class)
+ ->all()
+ ->pluck('id', 'alias')
+ ->toArray();
/**
* @var $registrator TemplateRegistrator
@@ -77,7 +78,6 @@ class TemplateServiceProvider extends ServiceProvider
/**
* Register the service provider.
- *
* @return void
*/
public function register()
@@ -94,7 +94,7 @@ class TemplateServiceProvider extends ServiceProvider
return;
}
- $templateDir = base_path('templates/' . $template->module_settings->staticName . '/Resources');
+ $templateDir = base_path('templates/' . $template->static_name . '/Resources');
$assetsDir = $templateDir . '/' . TemplateContract::ASSETS_DIRECTORY;
$viewsDir = $templateDir . '/views';
diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php
index 38301379..a30639dc 100644
--- a/bootstrap/autoload.php
+++ b/bootstrap/autoload.php
@@ -14,21 +14,5 @@ define('LARAVEL_START', microtime(true));
|
*/
+require_once __DIR__ . '/../app/CMS/Helpers/functions.php';
require __DIR__.'/../vendor/autoload.php';
-
-/*
-|--------------------------------------------------------------------------
-| Include The Compiled Class File
-|--------------------------------------------------------------------------
-|
-| To dramatically increase your application's performance, you may use a
-| compiled class file which contains all of the classes commonly used
-| by a request. The Artisan "optimize" is used to create this file.
-|
-*/
-
-$compiledPath = __DIR__.'/cache/compiled.php';
-
-if (file_exists($compiledPath)) {
- require $compiledPath;
-}
diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore
old mode 100755
new mode 100644
diff --git a/bower.json b/bower.json
index 313afb2b..da75cfaf 100644
--- a/bower.json
+++ b/bower.json
@@ -4,14 +4,14 @@
"devDependencies": {},
"dependencies": {
"animate.css": "~3.4.0",
- "bootstrap": "v4.0.0-alpha.3",
+ "bootstrap": "v4.0.0-alpha.5",
"font-awesome": "~4.5.0",
- "jquery": "~2.1.4",
+ "jquery": "~3.2.1",
"metisMenu": "~2.0.3",
"nprogress": "~0.2.0",
"responsive-bootstrap-toolkit": "~2.5.0",
"Sortable": "~1.4.2",
- "tether": "~1.1.1",
+ "tether": "~1.3.7",
"tinycolor": "~1.2.1",
"dropzone": "~4.2.0",
"jquery.are-you-sure": "~1.9",
diff --git a/composer.json b/composer.json
index 67731974..ab91ed62 100644
--- a/composer.json
+++ b/composer.json
@@ -7,15 +7,16 @@
"license": "MIT",
"type": "project",
"require": {
- "php": ">=5.5.9",
- "laravel/framework": "5.2.*",
- "pingpong/modules": "~2.0",
- "pingpong/menus": "^2.2",
+ "php": ">=7.0.0",
+ "laravel/framework": "5.5.*",
"watson/sitemap": "^2.0",
"mcamara/laravel-localization": "^1.1",
- "franzose/closure-table": "^4.1",
+ "franzose/closure-table": "5.*",
"intervention/image": "^2.3",
- "webwizo/laravel-shortcodes": "1.0.4"
+ "webwizo/laravel-shortcodes": "1.*",
+ "greggilbert/recaptcha": "^2.2@dev",
+ "doctrine/dbal": "^2.7@dev",
+ "nwidart/laravel-menus": "dev-master"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
@@ -23,7 +24,6 @@
"phpunit/phpunit": "~4.0",
"symfony/css-selector": "2.8.*|3.0.*",
"symfony/dom-crawler": "2.8.*|3.0.*",
- "ignasbernotas/laravel-model-generator": "^1.0",
"barryvdh/laravel-debugbar": "^2.1"
},
"autoload": {
@@ -38,16 +38,9 @@
}
},
"scripts": {
- "post-install-cmd": [
- "php artisan clear-compiled",
- "php artisan optimize"
- ],
- "pre-update-cmd": [
- "php artisan clear-compiled"
- ],
- "post-update-cmd": [
- "php artisan optimize"
- ]
+ "post-install-cmd": [],
+ "pre-update-cmd": [],
+ "post-update-cmd": []
},
"config": {
"preferred-install": "dist",
diff --git a/composer.lock b/composer.lock
index 72379f2f..5df7945e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,127 +4,39 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "1d486fb23e76c7af1daf00bee207919c",
- "content-hash": "957b49e5a2e691ad8dbc0e665a87d6c7",
+ "content-hash": "1d30e667fae6843a172f62a333c2b60c",
"packages": [
- {
- "name": "classpreloader/classpreloader",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/ClassPreloader/ClassPreloader.git",
- "reference": "de1d55df4f492374f0b77eb06da990b7393a433f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/de1d55df4f492374f0b77eb06da990b7393a433f",
- "reference": "de1d55df4f492374f0b77eb06da990b7393a433f",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^1.0|^2.0",
- "php": ">=5.5.9"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8|^5.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "ClassPreloader\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- }
- ],
- "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
- "keywords": [
- "autoload",
- "class",
- "preload"
- ],
- "time": "2016-01-24 12:28:38"
- },
- {
- "name": "dnoegel/php-xdg-base-dir",
- "version": "0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
- "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "@stable"
- },
- "type": "project",
- "autoload": {
- "psr-4": {
- "XdgBaseDir\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "implementation of xdg base directory specification for php",
- "time": "2014-10-24 07:27:01"
- },
{
"name": "doctrine/annotations",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
- "reference": "f9cf50745a45cae4a55f35e7691d124c4d887e45"
+ "reference": "2497b1f9db56278d3ad2248f9e4bdbbbaa271c3e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/annotations/zipball/f9cf50745a45cae4a55f35e7691d124c4d887e45",
- "reference": "f9cf50745a45cae4a55f35e7691d124c4d887e45",
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/2497b1f9db56278d3ad2248f9e4bdbbbaa271c3e",
+ "reference": "2497b1f9db56278d3ad2248f9e4bdbbbaa271c3e",
"shasum": ""
},
"require": {
"doctrine/lexer": "1.*",
- "php": ">=5.3.2"
+ "php": "^7.1"
},
"require-dev": {
"doctrine/cache": "1.*",
- "phpunit/phpunit": "4.*"
+ "phpunit/phpunit": "^5.7"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "1.6.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Doctrine\\Common\\Annotations\\": "lib/"
+ "psr-4": {
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -160,7 +72,7 @@
"docblock",
"parser"
],
- "time": "2016-08-31 09:31:57"
+ "time": "2017-07-22T11:08:38+00:00"
},
{
"name": "doctrine/cache",
@@ -168,28 +80,35 @@
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
- "reference": "fe68e4f78804684e31cce17590b0bd9f088db1b0"
+ "reference": "beb0fa35b61e9073f8612d9ffd34920bdaec406a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/cache/zipball/fe68e4f78804684e31cce17590b0bd9f088db1b0",
- "reference": "fe68e4f78804684e31cce17590b0bd9f088db1b0",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/beb0fa35b61e9073f8612d9ffd34920bdaec406a",
+ "reference": "beb0fa35b61e9073f8612d9ffd34920bdaec406a",
"shasum": ""
},
"require": {
- "php": "~5.5|~7.0"
+ "php": "~7.1"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
},
"require-dev": {
- "phpunit/phpunit": "~4.8|~5.0",
- "predis/predis": "~1.0"
+ "alcaeus/mongo-php-adapter": "^1.1",
+ "doctrine/coding-standard": "^1.0",
+ "mongodb/mongodb": "^1.1",
+ "phpunit/phpunit": "^6.3",
+ "predis/predis": "~1.0",
+ "squizlabs/php_codesniffer": "^3.0"
+ },
+ "suggest": {
+ "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.7.x-dev"
+ "dev-master": "1.8.x-dev"
}
},
"autoload": {
@@ -229,7 +148,7 @@
"cache",
"caching"
],
- "time": "2016-07-15 15:57:08"
+ "time": "2017-08-25T06:51:37+00:00"
},
{
"name": "doctrine/collections",
@@ -237,29 +156,31 @@
"source": {
"type": "git",
"url": "https://github.com/doctrine/collections.git",
- "reference": "2dfc898f2a66c192d6a195bdc9c5040f65adfaab"
+ "reference": "42c4039eca9535e4f201f50d2695648658e9e5a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/collections/zipball/2dfc898f2a66c192d6a195bdc9c5040f65adfaab",
- "reference": "2dfc898f2a66c192d6a195bdc9c5040f65adfaab",
+ "url": "https://api.github.com/repos/doctrine/collections/zipball/42c4039eca9535e4f201f50d2695648658e9e5a8",
+ "reference": "42c4039eca9535e4f201f50d2695648658e9e5a8",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0"
+ "php": "^7.1"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "doctrine/coding-standard": "^1.0",
+ "phpunit/phpunit": "^6.3",
+ "squizlabs/php_codesniffer": "^3.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "1.6.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Doctrine\\Common\\Collections\\": "lib/"
+ "psr-4": {
+ "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -295,7 +216,7 @@
"collections",
"iterator"
],
- "time": "2016-09-01 10:39:08"
+ "time": "2017-08-30T09:16:50+00:00"
},
{
"name": "doctrine/common",
@@ -303,12 +224,12 @@
"source": {
"type": "git",
"url": "https://github.com/doctrine/common.git",
- "reference": "670d814b6c8b5e8f39a2764d090463d39b3502c9"
+ "reference": "a3e240fa07ec9748387c13534949d543c0e177fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/common/zipball/670d814b6c8b5e8f39a2764d090463d39b3502c9",
- "reference": "670d814b6c8b5e8f39a2764d090463d39b3502c9",
+ "url": "https://api.github.com/repos/doctrine/common/zipball/a3e240fa07ec9748387c13534949d543c0e177fa",
+ "reference": "a3e240fa07ec9748387c13534949d543c0e177fa",
"shasum": ""
},
"require": {
@@ -317,15 +238,17 @@
"doctrine/collections": "1.*",
"doctrine/inflector": "1.*",
"doctrine/lexer": "1.*",
- "php": "~5.6|~7.0"
+ "php": "~7.1"
},
"require-dev": {
- "phpunit/phpunit": "^5.4.6"
+ "doctrine/coding-standard": "^1.0",
+ "phpunit/phpunit": "^6.3",
+ "squizlabs/php_codesniffer": "^3.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.7.x-dev"
+ "dev-master": "2.9.x-dev"
}
},
"autoload": {
@@ -357,6 +280,10 @@
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
+ },
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
}
],
"description": "Common Library for Doctrine projects",
@@ -368,7 +295,7 @@
"persistence",
"spl"
],
- "time": "2016-07-20 15:39:51"
+ "time": "2017-09-02T17:51:46+00:00"
},
{
"name": "doctrine/dbal",
@@ -376,21 +303,24 @@
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "c446c31130e6db7178e4188f8c12033b2ca3ee4a"
+ "reference": "373ae9ed860960cf4e3a061ff27db254de955fb9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/c446c31130e6db7178e4188f8c12033b2ca3ee4a",
- "reference": "c446c31130e6db7178e4188f8c12033b2ca3ee4a",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/373ae9ed860960cf4e3a061ff27db254de955fb9",
+ "reference": "373ae9ed860960cf4e3a061ff27db254de955fb9",
"shasum": ""
},
"require": {
- "doctrine/common": "~2.4",
- "php": "^5.6 || ^7.0"
+ "doctrine/common": "^2.7.1",
+ "ext-pdo": "*",
+ "php": "^7.1"
},
"require-dev": {
- "phpunit/phpunit": "^5.4.6",
+ "doctrine/coding-standard": "^1.0",
+ "phpunit/phpunit": "^6.3",
"phpunit/phpunit-mock-objects": "!=3.2.4,!=3.2.5",
+ "squizlabs/php_codesniffer": "^3.0",
"symfony/console": "2.*||^3.0"
},
"suggest": {
@@ -402,7 +332,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.6.x-dev"
+ "dev-master": "2.7.x-dev"
}
},
"autoload": {
@@ -440,7 +370,7 @@
"persistence",
"queryobject"
],
- "time": "2016-08-25 23:11:10"
+ "time": "2017-09-12T09:50:27+00:00"
},
{
"name": "doctrine/inflector",
@@ -448,29 +378,29 @@
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "803a2ed9fea02f9ca47cd45395089fe78769a392"
+ "reference": "03d4145619c2762948e4a8c53a899af24a1e4f73"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/803a2ed9fea02f9ca47cd45395089fe78769a392",
- "reference": "803a2ed9fea02f9ca47cd45395089fe78769a392",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/03d4145619c2762948e4a8c53a899af24a1e4f73",
+ "reference": "03d4145619c2762948e4a8c53a899af24a1e4f73",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": "^7.1"
},
"require-dev": {
- "phpunit/phpunit": "4.*"
+ "phpunit/phpunit": "^6.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1.x-dev"
+ "dev-master": "1.3.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Doctrine\\Common\\Inflector\\": "lib/"
+ "psr-4": {
+ "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -507,7 +437,7 @@
"singularize",
"string"
],
- "time": "2016-05-12 17:23:41"
+ "time": "2017-08-25T04:43:19+00:00"
},
{
"name": "doctrine/lexer",
@@ -515,12 +445,12 @@
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
- "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+ "reference": "cc709ba91eee09540091ad5a5f2616727662e41b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
- "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/cc709ba91eee09540091ad5a5f2616727662e41b",
+ "reference": "cc709ba91eee09540091ad5a5f2616727662e41b",
"shasum": ""
},
"require": {
@@ -533,8 +463,8 @@
}
},
"autoload": {
- "psr-0": {
- "Doctrine\\Common\\Lexer\\": "lib/"
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -561,22 +491,82 @@
"lexer",
"parser"
],
- "time": "2014-09-09 13:34:57"
+ "time": "2017-07-24T09:37:08+00:00"
},
{
- "name": "erusev/parsedown",
- "version": "1.6.0",
+ "name": "egulias/email-validator",
+ "version": "2.1.2",
"source": {
"type": "git",
- "url": "https://github.com/erusev/parsedown.git",
- "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7"
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "bc31baa11ea2883e017f0a10d9722ef9d50eac1c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/erusev/parsedown/zipball/3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7",
- "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/bc31baa11ea2883e017f0a10d9722ef9d50eac1c",
+ "reference": "bc31baa11ea2883e017f0a10d9722ef9d50eac1c",
"shasum": ""
},
+ "require": {
+ "doctrine/lexer": "^1.0.1",
+ "php": ">= 5.5"
+ },
+ "require-dev": {
+ "dominicsayers/isemail": "dev-master",
+ "phpunit/phpunit": "^4.8.0",
+ "satooshi/php-coveralls": "dev-master"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "EmailValidator"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "time": "2017-01-30T22:07:36+00:00"
+ },
+ {
+ "name": "erusev/parsedown",
+ "version": "1.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/erusev/parsedown.git",
+ "reference": "728952b90a333b5c6f77f06ea9422b94b585878d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/erusev/parsedown/zipball/728952b90a333b5c6f77f06ea9422b94b585878d",
+ "reference": "728952b90a333b5c6f77f06ea9422b94b585878d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
"type": "library",
"autoload": {
"psr-0": {
@@ -600,64 +590,20 @@
"markdown",
"parser"
],
- "time": "2015-10-04 16:44:32"
- },
- {
- "name": "erusev/parsedown-extra",
- "version": "0.7.1",
- "source": {
- "type": "git",
- "url": "https://github.com/erusev/parsedown-extra.git",
- "reference": "0db5cce7354e4b76f155d092ab5eb3981c21258c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/erusev/parsedown-extra/zipball/0db5cce7354e4b76f155d092ab5eb3981c21258c",
- "reference": "0db5cce7354e4b76f155d092ab5eb3981c21258c",
- "shasum": ""
- },
- "require": {
- "erusev/parsedown": "~1.4"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "ParsedownExtra": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Emanuil Rusev",
- "email": "hello@erusev.com",
- "homepage": "http://erusev.com"
- }
- ],
- "description": "An extension of Parsedown that adds support for Markdown Extra.",
- "homepage": "https://github.com/erusev/parsedown-extra",
- "keywords": [
- "markdown",
- "markdown extra",
- "parsedown",
- "parser"
- ],
- "time": "2015-11-01 10:19:22"
+ "time": "2017-05-14T14:47:48+00:00"
},
{
"name": "franzose/closure-table",
- "version": "4.1.4",
+ "version": "v5.1",
"source": {
"type": "git",
"url": "https://github.com/franzose/ClosureTable.git",
- "reference": "8198a43f2237da35a2b9298d286a073650e95568"
+ "reference": "0056fdb54256bf23b10ac10139b4a892ad478385"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/franzose/ClosureTable/zipball/8198a43f2237da35a2b9298d286a073650e95568",
- "reference": "8198a43f2237da35a2b9298d286a073650e95568",
+ "url": "https://api.github.com/repos/franzose/ClosureTable/zipball/0056fdb54256bf23b10ac10139b4a892ad478385",
+ "reference": "0056fdb54256bf23b10ac10139b4a892ad478385",
"shasum": ""
},
"require": {
@@ -702,7 +648,59 @@
"laravel",
"pages"
],
- "time": "2016-07-08 08:19:46"
+ "time": "2017-09-10T23:00:47+00:00"
+ },
+ {
+ "name": "greggilbert/recaptcha",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/greggilbert/recaptcha.git",
+ "reference": "c2ed383785a4fe20467ce470c97c303e5c5b85de"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/greggilbert/recaptcha/zipball/c2ed383785a4fe20467ce470c97c303e5c5b85de",
+ "reference": "c2ed383785a4fe20467ce470c97c303e5c5b85de",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/support": "~5.1",
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/migrations"
+ ],
+ "psr-4": {
+ "Greggilbert\\Recaptcha\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Greg Gilbert",
+ "email": "greg@greg-gilbert.com"
+ }
+ ],
+ "description": "reCAPTCHA Validator for Laravel 5",
+ "homepage": "http://github.com/greggilbert/recaptcha",
+ "keywords": [
+ "captcha",
+ "laravel",
+ "laravel5",
+ "recaptcha"
+ ],
+ "time": "2017-08-31T03:39:47+00:00"
},
{
"name": "guzzlehttp/psr7",
@@ -710,12 +708,12 @@
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "64862e854f876bc5aee2996cab2f552db8586065"
+ "reference": "811b676fbab9c99e359885032e5ebc70e442f5b8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/64862e854f876bc5aee2996cab2f552db8586065",
- "reference": "64862e854f876bc5aee2996cab2f552db8586065",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/811b676fbab9c99e359885032e5ebc70e442f5b8",
+ "reference": "811b676fbab9c99e359885032e5ebc70e442f5b8",
"shasum": ""
},
"require": {
@@ -767,20 +765,20 @@
"uri",
"url"
],
- "time": "2016-08-03 09:33:34"
+ "time": "2017-07-17T09:11:21+00:00"
},
{
"name": "intervention/image",
- "version": "dev-master",
+ "version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/Intervention/image.git",
- "reference": "4064a980324f6c3bfa2bd981dfb247afa705ec3c"
+ "reference": "322a4ade249467179c50a3e50eda8760ff3af2a3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Intervention/image/zipball/4064a980324f6c3bfa2bd981dfb247afa705ec3c",
- "reference": "4064a980324f6c3bfa2bd981dfb247afa705ec3c",
+ "url": "https://api.github.com/repos/Intervention/image/zipball/322a4ade249467179c50a3e50eda8760ff3af2a3",
+ "reference": "322a4ade249467179c50a3e50eda8760ff3af2a3",
"shasum": ""
},
"require": {
@@ -790,7 +788,7 @@
},
"require-dev": {
"mockery/mockery": "~0.9.2",
- "phpunit/phpunit": "3.*"
+ "phpunit/phpunit": "^4.8 || ^5.7"
},
"suggest": {
"ext-gd": "to use GD library based image processing.",
@@ -801,6 +799,14 @@
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Intervention\\Image\\ImageServiceProvider"
+ ],
+ "aliases": {
+ "Image": "Intervention\\Image\\Facades\\Image"
+ }
}
},
"autoload": {
@@ -815,8 +821,8 @@
"authors": [
{
"name": "Oliver Vogel",
- "email": "oliver@olivervogel.net",
- "homepage": "http://olivervogel.net/"
+ "email": "oliver@olivervogel.com",
+ "homepage": "http://olivervogel.com/"
}
],
"description": "Image handling and manipulation library with support for Laravel integration",
@@ -829,191 +835,45 @@
"thumbnail",
"watermark"
],
- "time": "2016-09-01 17:04:03"
- },
- {
- "name": "jakub-onderka/php-console-color",
- "version": "0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
- "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1",
- "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "jakub-onderka/php-code-style": "1.0",
- "jakub-onderka/php-parallel-lint": "0.*",
- "jakub-onderka/php-var-dump-check": "0.*",
- "phpunit/phpunit": "3.7.*",
- "squizlabs/php_codesniffer": "1.*"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "JakubOnderka\\PhpConsoleColor": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-2-Clause"
- ],
- "authors": [
- {
- "name": "Jakub Onderka",
- "email": "jakub.onderka@gmail.com",
- "homepage": "http://www.acci.cz"
- }
- ],
- "time": "2014-04-08 15:00:19"
- },
- {
- "name": "jakub-onderka/php-console-highlighter",
- "version": "v0.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
- "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5",
- "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5",
- "shasum": ""
- },
- "require": {
- "jakub-onderka/php-console-color": "~0.1",
- "php": ">=5.3.0"
- },
- "require-dev": {
- "jakub-onderka/php-code-style": "~1.0",
- "jakub-onderka/php-parallel-lint": "~0.5",
- "jakub-onderka/php-var-dump-check": "~0.1",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~1.5"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "JakubOnderka\\PhpConsoleHighlighter": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jakub Onderka",
- "email": "acci@acci.cz",
- "homepage": "http://www.acci.cz/"
- }
- ],
- "time": "2015-04-20 18:58:01"
- },
- {
- "name": "jeremeamia/SuperClosure",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/jeremeamia/super_closure.git",
- "reference": "6fe8ad066d3b2b01ad71d2130ebd38ccaabd549f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/6fe8ad066d3b2b01ad71d2130ebd38ccaabd549f",
- "reference": "6fe8ad066d3b2b01ad71d2130ebd38ccaabd549f",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^1.2|^2.0",
- "php": ">=5.4",
- "symfony/polyfill-php56": "^1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0|^5.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "SuperClosure\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jeremy Lindblom",
- "email": "jeremeamia@gmail.com",
- "homepage": "https://github.com/jeremeamia",
- "role": "Developer"
- }
- ],
- "description": "Serialize Closure objects, including their context and binding",
- "homepage": "https://github.com/jeremeamia/super_closure",
- "keywords": [
- "closure",
- "function",
- "lambda",
- "parser",
- "serializable",
- "serialize",
- "tokenizer"
- ],
- "time": "2016-02-29 04:36:50"
+ "time": "2017-07-03T15:50:40+00:00"
},
{
"name": "laravel/framework",
- "version": "5.2.x-dev",
+ "version": "5.5.x-dev",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "557b9f62005639cfe6a20c26c3e7c9dc8a7a637a"
+ "reference": "d12f1edfd30aa4279a32b64fc67598d927ca97f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/557b9f62005639cfe6a20c26c3e7c9dc8a7a637a",
- "reference": "557b9f62005639cfe6a20c26c3e7c9dc8a7a637a",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/d12f1edfd30aa4279a32b64fc67598d927ca97f3",
+ "reference": "d12f1edfd30aa4279a32b64fc67598d927ca97f3",
"shasum": ""
},
"require": {
- "classpreloader/classpreloader": "~3.0",
- "doctrine/inflector": "~1.0",
+ "doctrine/inflector": "~1.1",
+ "erusev/parsedown": "~1.6",
"ext-mbstring": "*",
"ext-openssl": "*",
- "jeremeamia/superclosure": "~2.2",
"league/flysystem": "~1.0",
- "monolog/monolog": "~1.11",
+ "monolog/monolog": "~1.12",
"mtdowling/cron-expression": "~1.0",
"nesbot/carbon": "~1.20",
- "paragonie/random_compat": "~1.4",
- "php": ">=5.5.9",
- "psy/psysh": "0.7.*",
- "swiftmailer/swiftmailer": "~5.1",
- "symfony/console": "2.8.*|3.0.*",
- "symfony/debug": "2.8.*|3.0.*",
- "symfony/finder": "2.8.*|3.0.*",
- "symfony/http-foundation": "2.8.*|3.0.*",
- "symfony/http-kernel": "2.8.*|3.0.*",
- "symfony/polyfill-php56": "~1.0",
- "symfony/process": "2.8.*|3.0.*",
- "symfony/routing": "2.8.*|3.0.*",
- "symfony/translation": "2.8.*|3.0.*",
- "symfony/var-dumper": "2.8.*|3.0.*",
+ "php": ">=7.0",
+ "psr/container": "~1.0",
+ "psr/simple-cache": "^1.0",
+ "ramsey/uuid": "~3.0",
+ "swiftmailer/swiftmailer": "~6.0",
+ "symfony/console": "~3.3",
+ "symfony/debug": "~3.3",
+ "symfony/finder": "~3.3",
+ "symfony/http-foundation": "~3.3",
+ "symfony/http-kernel": "~3.3",
+ "symfony/process": "~3.3",
+ "symfony/routing": "~3.3",
+ "symfony/var-dumper": "~3.3",
+ "tijsverkoyen/css-to-inline-styles": "~2.2",
"vlucas/phpdotenv": "~2.2"
},
"replace": {
@@ -1035,6 +895,7 @@
"illuminate/http": "self.version",
"illuminate/log": "self.version",
"illuminate/mail": "self.version",
+ "illuminate/notifications": "self.version",
"illuminate/pagination": "self.version",
"illuminate/pipeline": "self.version",
"illuminate/queue": "self.version",
@@ -1049,37 +910,39 @@
},
"require-dev": {
"aws/aws-sdk-php": "~3.0",
- "mockery/mockery": "~0.9.4",
+ "doctrine/dbal": "~2.5",
+ "filp/whoops": "^2.1.4",
+ "mockery/mockery": "~1.0",
+ "orchestra/testbench-core": "3.5.*",
"pda/pheanstalk": "~3.0",
- "phpunit/phpunit": "~4.1",
- "predis/predis": "~1.0",
- "symfony/css-selector": "2.8.*|3.0.*",
- "symfony/dom-crawler": "2.8.*|3.0.*"
+ "phpunit/phpunit": "~6.0",
+ "predis/predis": "^1.1.1",
+ "symfony/css-selector": "~3.3",
+ "symfony/dom-crawler": "~3.3"
},
"suggest": {
"aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).",
- "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).",
+ "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).",
"fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).",
- "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).",
+ "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).",
+ "laravel/tinker": "Required to use the tinker console command (~1.0).",
"league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).",
"league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).",
+ "nexmo/client": "Required to use the Nexmo transport (~1.0).",
"pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).",
"predis/predis": "Required to use the redis cache and queue drivers (~1.0).",
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).",
- "symfony/css-selector": "Required to use some of the crawler integration testing tools (2.8.*|3.0.*).",
- "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (2.8.*|3.0.*).",
- "symfony/psr-http-message-bridge": "Required to use psr7 bridging features (0.2.*)."
+ "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).",
+ "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).",
+ "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.2-dev"
+ "dev-master": "5.5-dev"
}
},
"autoload": {
- "classmap": [
- "src/Illuminate/Queue/IlluminateQueueClosure.php"
- ],
"files": [
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Support/helpers.php"
@@ -1095,45 +958,56 @@
"authors": [
{
"name": "Taylor Otwell",
- "email": "taylorotwell@gmail.com"
+ "email": "taylor@laravel.com"
}
],
"description": "The Laravel Framework.",
- "homepage": "http://laravel.com",
+ "homepage": "https://laravel.com",
"keywords": [
"framework",
"laravel"
],
- "time": "2016-08-26 16:26:18"
+ "time": "2017-09-12T18:46:04+00:00"
},
{
"name": "laravelcollective/html",
- "version": "5.2.x-dev",
+ "version": "5.5.x-dev",
"source": {
"type": "git",
"url": "https://github.com/LaravelCollective/html.git",
- "reference": "abec449ed8208b0b335cfc5b0f1237134477e27f"
+ "reference": "2f6dc39ab3655724a615fe8a652d8b7f04fc9ac6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/LaravelCollective/html/zipball/abec449ed8208b0b335cfc5b0f1237134477e27f",
- "reference": "abec449ed8208b0b335cfc5b0f1237134477e27f",
+ "url": "https://api.github.com/repos/LaravelCollective/html/zipball/2f6dc39ab3655724a615fe8a652d8b7f04fc9ac6",
+ "reference": "2f6dc39ab3655724a615fe8a652d8b7f04fc9ac6",
"shasum": ""
},
"require": {
- "illuminate/http": "5.2.*",
- "illuminate/routing": "5.2.*",
- "illuminate/session": "5.2.*",
- "illuminate/support": "5.2.*",
- "illuminate/view": "5.2.*",
- "php": ">=5.5.9"
+ "illuminate/http": "5.5.*",
+ "illuminate/routing": "5.5.*",
+ "illuminate/session": "5.5.*",
+ "illuminate/support": "5.5.*",
+ "illuminate/view": "5.5.*",
+ "php": ">=7.0.0"
},
"require-dev": {
- "illuminate/database": "5.2.*",
- "mockery/mockery": "~0.9",
- "phpunit/phpunit": "~4.0"
+ "illuminate/database": "5.5.*",
+ "mockery/mockery": "~0.9.4",
+ "phpunit/phpunit": "~5.4"
},
"type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Collective\\Html\\HtmlServiceProvider"
+ ],
+ "aliases": {
+ "Form": "Collective\\Html\\FormFacade",
+ "Html": "Collective\\Html\\HtmlFacade"
+ }
+ }
+ },
"autoload": {
"psr-4": {
"Collective\\Html\\": "src/"
@@ -1158,7 +1032,7 @@
],
"description": "HTML and Form Builders for the Laravel Framework",
"homepage": "http://laravelcollective.com",
- "time": "2016-07-12 14:16:43"
+ "time": "2017-08-31T14:46:03+00:00"
},
{
"name": "league/flysystem",
@@ -1166,16 +1040,16 @@
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "f2ccd52d8e8a271fb340f6636e01d24673e8087b"
+ "reference": "3245df3acae2dded99694b499d3bbf937679c8f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f2ccd52d8e8a271fb340f6636e01d24673e8087b",
- "reference": "f2ccd52d8e8a271fb340f6636e01d24673e8087b",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3245df3acae2dded99694b499d3bbf937679c8f3",
+ "reference": "3245df3acae2dded99694b499d3bbf937679c8f3",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": ">=5.5.9"
},
"conflict": {
"league/flysystem-sftp": "<1.0.6"
@@ -1192,13 +1066,13 @@
"league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
"league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
"league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
- "league/flysystem-copy": "Allows you to use Copy.com storage",
- "league/flysystem-dropbox": "Allows you to use Dropbox storage",
"league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
"league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
"league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
"league/flysystem-webdav": "Allows you to use WebDAV storage",
- "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter"
+ "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
+ "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
+ "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
},
"type": "library",
"extra": {
@@ -1241,30 +1115,41 @@
"sftp",
"storage"
],
- "time": "2016-08-26 20:18:09"
+ "time": "2017-09-04T09:35:39+00:00"
},
{
"name": "mcamara/laravel-localization",
- "version": "1.1.7",
+ "version": "1.3.2",
"source": {
"type": "git",
"url": "https://github.com/mcamara/laravel-localization.git",
- "reference": "ff6d398d8437d0169f1d3b97e4244552a5abcced"
+ "reference": "86d6d9d95faf9c60decb8a3f59bfb894aace4798"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/ff6d398d8437d0169f1d3b97e4244552a5abcced",
- "reference": "ff6d398d8437d0169f1d3b97e4244552a5abcced",
+ "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/86d6d9d95faf9c60decb8a3f59bfb894aace4798",
+ "reference": "86d6d9d95faf9c60decb8a3f59bfb894aace4798",
"shasum": ""
},
"require": {
- "laravel/framework": "~5.2",
- "php": ">=5.5.0"
+ "laravel/framework": "~5.2||~5.3||~5.4||~5.5",
+ "php": ">=7.0.0"
},
"require-dev": {
- "orchestra/testbench": "3.2.*"
+ "orchestra/testbench-browser-kit": "~3.4",
+ "phpunit/phpunit": "6.0.*"
},
"type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Mcamara\\LaravelLocalization\\LaravelLocalizationServiceProvider"
+ ],
+ "aliases": {
+ "LaravelLocalization": "Mcamara\\LaravelLocalization\\Facades\\LaravelLocalization"
+ }
+ }
+ },
"autoload": {
"classmap": [],
"psr-0": {
@@ -1289,7 +1174,7 @@
"localization",
"php"
],
- "time": "2016-08-25 18:28:07"
+ "time": "2017-09-11T11:52:50+00:00"
},
{
"name": "monolog/monolog",
@@ -1297,12 +1182,12 @@
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952"
+ "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952",
- "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
+ "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
"shasum": ""
},
"require": {
@@ -1313,7 +1198,7 @@
"psr/log-implementation": "1.0.0"
},
"require-dev": {
- "aws/aws-sdk-php": "^2.4.9",
+ "aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"jakub-onderka/php-parallel-lint": "0.9",
@@ -1323,7 +1208,7 @@
"phpunit/phpunit-mock-objects": "2.3.0",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
- "swiftmailer/swiftmailer": "~5.3"
+ "swiftmailer/swiftmailer": "^5.3|^6.0"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
@@ -1367,20 +1252,20 @@
"logging",
"psr-3"
],
- "time": "2016-07-29 03:23:52"
+ "time": "2017-06-19T01:22:40+00:00"
},
{
"name": "mtdowling/cron-expression",
- "version": "v1.1.0",
+ "version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/mtdowling/cron-expression.git",
- "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5"
+ "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/c9ee7886f5a12902b225a1a12f36bb45f9ab89e5",
- "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5",
+ "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad",
+ "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad",
"shasum": ""
},
"require": {
@@ -1391,8 +1276,8 @@
},
"type": "library",
"autoload": {
- "psr-0": {
- "Cron": "src/"
+ "psr-4": {
+ "Cron\\": "src/Cron/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1411,7 +1296,7 @@
"cron",
"schedule"
],
- "time": "2016-01-26 21:23:30"
+ "time": "2017-01-23T04:29:33+00:00"
},
{
"name": "nesbot/carbon",
@@ -1419,26 +1304,26 @@
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "7a026991092624a245d300685ce09ff5b4d110e0"
+ "reference": "926aee5ab38c2868816aa760f862a85ad01cb61a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7a026991092624a245d300685ce09ff5b4d110e0",
- "reference": "7a026991092624a245d300685ce09ff5b4d110e0",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/926aee5ab38c2868816aa760f862a85ad01cb61a",
+ "reference": "926aee5ab38c2868816aa760f862a85ad01cb61a",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
- "symfony/translation": "~2.6|~3.0"
+ "symfony/translation": "~2.6 || ~3.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~1.11",
- "phpunit/phpunit": "~4.0|~5.0"
+ "friendsofphp/php-cs-fixer": "~2",
+ "phpunit/phpunit": "~4.0 || ~5.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.22-dev"
+ "dev-master": "1.23-dev"
}
},
"autoload": {
@@ -1464,71 +1349,88 @@
"datetime",
"time"
],
- "time": "2016-07-22 14:20:35"
+ "time": "2017-02-06T22:02:47+00:00"
},
{
- "name": "nikic/php-parser",
- "version": "2.x-dev",
+ "name": "nwidart/laravel-menus",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "83f34e7fa4975e9646e118b61226e17cebc5db14"
+ "url": "https://github.com/nWidart/laravel-menus.git",
+ "reference": "ffebe35a127d37790395a09283e7083a13b2f444"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/83f34e7fa4975e9646e118b61226e17cebc5db14",
- "reference": "83f34e7fa4975e9646e118b61226e17cebc5db14",
+ "url": "https://api.github.com/repos/nWidart/laravel-menus/zipball/ffebe35a127d37790395a09283e7083a13b2f444",
+ "reference": "ffebe35a127d37790395a09283e7083a13b2f444",
"shasum": ""
},
"require": {
- "ext-tokenizer": "*",
- "php": ">=5.4"
+ "illuminate/config": "5.5.*",
+ "illuminate/support": "5.5.*",
+ "illuminate/view": "5.5.*",
+ "laravelcollective/html": "5.5.*",
+ "php": ">=5.6.4"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "friendsofphp/php-cs-fixer": "^2.4",
+ "mockery/mockery": "~0.9",
+ "orchestra/testbench": "3.5.*",
+ "phpro/grumphp": "^0.11",
+ "phpunit/phpunit": "~6.0"
},
- "bin": [
- "bin/php-parse"
- ],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "2.1-dev"
+ "laravel": {
+ "providers": [
+ "Nwidart\\Menus\\MenusServiceProvider"
+ ],
+ "aliases": {
+ "Menu": "Nwidart\\Menus\\Facades\\Menu"
+ }
}
},
"autoload": {
"psr-4": {
- "PhpParser\\": "lib/PhpParser"
+ "Nwidart\\Menus\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Nikita Popov"
+ "name": "Pingpong Labs",
+ "email": "pingpong.labs@gmail.com"
+ },
+ {
+ "name": "Nicolas Widart",
+ "email": "n.widart@gmail.com"
}
],
- "description": "A PHP parser written in PHP",
+ "description": "Laravel Menu management",
"keywords": [
- "parser",
- "php"
+ "bootstrap",
+ "laravel",
+ "menus",
+ "nav",
+ "navigation"
],
- "time": "2016-08-30 20:37:51"
+ "time": "2017-09-01T11:38:49+00:00"
},
{
"name": "paragonie/random_compat",
- "version": "v1.x-dev",
+ "version": "v2.0.10",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
- "reference": "1115ffa06bad72d01735d91f51eb022db556e205"
+ "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/1115ffa06bad72d01735d91f51eb022db556e205",
- "reference": "1115ffa06bad72d01735d91f51eb022db556e205",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d",
+ "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d",
"shasum": ""
},
"require": {
@@ -1563,201 +1465,56 @@
"pseudorandom",
"random"
],
- "time": "2016-04-03 05:47:09"
+ "time": "2017-03-13T16:27:32+00:00"
},
{
- "name": "pingpong/generators",
- "version": "2.2.x-dev",
+ "name": "psr/container",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/pingpong-labs/generators.git",
- "reference": "7649e2dfa7d9b66a649696a83959e2d68f8d6073"
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "2cc4a01788191489dc7459446ba832fa79a216a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pingpong-labs/generators/zipball/7649e2dfa7d9b66a649696a83959e2d68f8d6073",
- "reference": "7649e2dfa7d9b66a649696a83959e2d68f8d6073",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/2cc4a01788191489dc7459446ba832fa79a216a7",
+ "reference": "2cc4a01788191489dc7459446ba832fa79a216a7",
"shasum": ""
},
"require": {
- "doctrine/dbal": "~2.5",
- "illuminate/filesystem": "5.2.*",
- "illuminate/support": "5.2.*",
- "php": ">=5.4.0",
- "pingpong/support": "2.2.*@dev"
- },
- "require-dev": {
- "mockery/mockery": "~0.9",
- "phpunit/phpunit": "~4"
+ "php": ">=5.3.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Pingpong\\Generators\\": ""
+ "Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Pingpong Labs",
- "email": "pingpong.labs@gmail.com"
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
}
],
- "description": "Laravel Generators",
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
"keywords": [
- "generators",
- "laravel",
- "pingpong"
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
],
- "time": "2016-02-26 04:53:40"
- },
- {
- "name": "pingpong/menus",
- "version": "2.2.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/pingpong-labs/menus.git",
- "reference": "03112523d3c5ff3e86997ce6e2de7fc1a5d372ca"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/pingpong-labs/menus/zipball/03112523d3c5ff3e86997ce6e2de7fc1a5d372ca",
- "reference": "03112523d3c5ff3e86997ce6e2de7fc1a5d372ca",
- "shasum": ""
- },
- "require": {
- "illuminate/config": "5.2.*",
- "illuminate/support": "5.2.*",
- "illuminate/view": "5.2.*",
- "laravelcollective/html": "~5.0",
- "php": ">=5.5.9"
- },
- "require-dev": {
- "mockery/mockery": "~0.9",
- "phpunit/phpunit": "~4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Pingpong\\Menus\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Pingpong Labs",
- "email": "pingpong.labs@gmail.com"
- }
- ],
- "description": "Laravel Menus",
- "keywords": [
- "bootstrap",
- "laravel",
- "menus",
- "nav",
- "navigation",
- "pingpong"
- ],
- "time": "2016-08-23 05:51:55"
- },
- {
- "name": "pingpong/modules",
- "version": "2.2.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/pingpong-labs/modules.git",
- "reference": "8ee9dfcc49e56173a26b3cfdc46b6037a1400a5a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/pingpong-labs/modules/zipball/8ee9dfcc49e56173a26b3cfdc46b6037a1400a5a",
- "reference": "8ee9dfcc49e56173a26b3cfdc46b6037a1400a5a",
- "shasum": ""
- },
- "require": {
- "laravel/framework": "5.2.*",
- "laravelcollective/html": "~5.0",
- "php": ">=5.4.0",
- "pingpong/generators": "2.2.*",
- "pingpong/support": "2.2.*"
- },
- "require-dev": {
- "mockery/mockery": "~0.9",
- "phpunit/phpunit": "~4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Pingpong\\Modules\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Pingpong Labs",
- "email": "pingpong.labs@gmail.com"
- }
- ],
- "description": "Laravel Modules",
- "keywords": [
- "hmvc",
- "laravel",
- "module",
- "modules",
- "pingpong"
- ],
- "time": "2016-01-29 04:39:40"
- },
- {
- "name": "pingpong/support",
- "version": "2.2.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/pingpong-labs/support.git",
- "reference": "2b4ada3e8071da1b39152cfb6a2df86f053d8bb6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/pingpong-labs/support/zipball/2b4ada3e8071da1b39152cfb6a2df86f053d8bb6",
- "reference": "2b4ada3e8071da1b39152cfb6a2df86f053d8bb6",
- "shasum": ""
- },
- "require": {
- "erusev/parsedown-extra": "0.7.*",
- "illuminate/filesystem": "5.2.*",
- "illuminate/support": "5.2.*",
- "php": ">=5.4.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Pingpong\\Support\\": ""
- },
- "files": [
- "helpers.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Pingpong Labs",
- "email": "pingpong.labs@gmail.com"
- }
- ],
- "description": "Support Component of Pingpong Sky Package",
- "time": "2016-01-07 08:23:04"
+ "time": "2017-06-28T15:35:32+00:00"
},
{
"name": "psr/http-message",
@@ -1807,7 +1564,7 @@
"request",
"response"
],
- "time": "2016-08-06 14:39:51"
+ "time": "2016-08-06T14:39:51+00:00"
},
{
"name": "psr/log",
@@ -1815,12 +1572,12 @@
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "d8e60a5619fff77f9669da8997697443ef1a1d7e"
+ "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/d8e60a5619fff77f9669da8997697443ef1a1d7e",
- "reference": "d8e60a5619fff77f9669da8997697443ef1a1d7e",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+ "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
"shasum": ""
},
"require": {
@@ -1854,57 +1611,34 @@
"psr",
"psr-3"
],
- "time": "2016-01-06 21:40:42"
+ "time": "2016-10-10T12:19:37+00:00"
},
{
- "name": "psy/psysh",
- "version": "v0.7.2",
+ "name": "psr/simple-cache",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/bobthecow/psysh.git",
- "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280"
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e64e10b20f8d229cac76399e1f3edddb57a0f280",
- "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24",
+ "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24",
"shasum": ""
},
"require": {
- "dnoegel/php-xdg-base-dir": "0.1",
- "jakub-onderka/php-console-highlighter": "0.3.*",
- "nikic/php-parser": "^1.2.1|~2.0",
- "php": ">=5.3.9",
- "symfony/console": "~2.3.10|^2.4.2|~3.0",
- "symfony/var-dumper": "~2.7|~3.0"
+ "php": ">=5.3.0"
},
- "require-dev": {
- "fabpot/php-cs-fixer": "~1.5",
- "phpunit/phpunit": "~3.7|~4.0|~5.0",
- "squizlabs/php_codesniffer": "~2.0",
- "symfony/finder": "~2.1|~3.0"
- },
- "suggest": {
- "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
- "ext-pdo-sqlite": "The doc command requires SQLite to work.",
- "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
- "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history."
- },
- "bin": [
- "bin/psysh"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-develop": "0.8.x-dev"
+ "dev-master": "1.0.x-dev"
}
},
"autoload": {
- "files": [
- "src/Psy/functions.php"
- ],
"psr-4": {
- "Psy\\": "src/Psy/"
+ "Psr\\SimpleCache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1913,45 +1647,128 @@
],
"authors": [
{
- "name": "Justin Hileman",
- "email": "justin@justinhileman.info",
- "homepage": "http://justinhileman.com"
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
}
],
- "description": "An interactive shell for modern PHP.",
- "homepage": "http://psysh.org",
+ "description": "Common interfaces for simple caching",
"keywords": [
- "REPL",
- "console",
- "interactive",
- "shell"
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
],
- "time": "2016-03-09 05:03:14"
+ "time": "2017-01-02T13:31:39+00:00"
},
{
- "name": "swiftmailer/swiftmailer",
- "version": "5.x-dev",
+ "name": "ramsey/uuid",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/swiftmailer/swiftmailer.git",
- "reference": "0b3e60404c3e398f521e9f366555678178695d91"
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0b3e60404c3e398f521e9f366555678178695d91",
- "reference": "0b3e60404c3e398f521e9f366555678178695d91",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/0ef23d1b10cf1bc576e9d865a7e9c47982c5715e",
+ "reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "paragonie/random_compat": "^1.0|^2.0",
+ "php": "^5.4 || ^7.0"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
},
"require-dev": {
- "mockery/mockery": "~0.9.1"
+ "apigen/apigen": "^4.1",
+ "codeception/aspect-mock": "^1.0 | ^2.0",
+ "doctrine/annotations": "~1.2.0",
+ "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1",
+ "ircmaxell/random-lib": "^1.1",
+ "jakub-onderka/php-parallel-lint": "^0.9.0",
+ "mockery/mockery": "^0.9.4",
+ "moontoast/math": "^1.1",
+ "php-mock/php-mock-phpunit": "^0.3|^1.1",
+ "phpunit/phpunit": "^4.7|>=5.0 <5.4",
+ "satooshi/php-coveralls": "^0.6.1",
+ "squizlabs/php_codesniffer": "^2.3"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
+ "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
+ "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
+ "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.4-dev"
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marijn Huizendveld",
+ "email": "marijn.huizendveld@gmail.com"
+ },
+ {
+ "name": "Thibaud Fabre",
+ "email": "thibaud@aztech.io"
+ },
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
+ "homepage": "https://github.com/ramsey/uuid",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "time": "2017-08-04T13:39:04+00:00"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "1a2f9df896c8bfa6e22e8e1a78cca637c6f70613"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/1a2f9df896c8bfa6e22e8e1a78cca637c6f70613",
+ "reference": "1a2f9df896c8bfa6e22e8e1a78cca637c6f70613",
+ "shasum": ""
+ },
+ "require": {
+ "egulias/email-validator": "~2.0",
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~0.9.1",
+ "symfony/phpunit-bridge": "~3.3@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.0-dev"
}
},
"autoload": {
@@ -1973,46 +1790,55 @@
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
- "homepage": "http://swiftmailer.org",
+ "homepage": "http://swiftmailer.symfony.com",
"keywords": [
"email",
"mail",
"mailer"
],
- "time": "2016-08-19 20:47:22"
+ "time": "2017-08-29T20:44:31+00:00"
},
{
"name": "symfony/console",
- "version": "3.0.x-dev",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "926061e74229e935d3c5b4e9ba87237316c6693f"
+ "reference": "ed85f121340bfeb8378cf736a1332a505f8382f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/926061e74229e935d3c5b4e9ba87237316c6693f",
- "reference": "926061e74229e935d3c5b4e9ba87237316c6693f",
+ "url": "https://api.github.com/repos/symfony/console/zipball/ed85f121340bfeb8378cf736a1332a505f8382f1",
+ "reference": "ed85f121340bfeb8378cf736a1332a505f8382f1",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
+ "php": "^5.5.9|>=7.0.8",
+ "symfony/debug": "~2.8|~3.0|~4.0",
"symfony/polyfill-mbstring": "~1.0"
},
+ "conflict": {
+ "symfony/dependency-injection": "<3.3",
+ "symfony/process": "<3.3"
+ },
"require-dev": {
"psr/log": "~1.0",
- "symfony/event-dispatcher": "~2.8|~3.0",
- "symfony/process": "~2.8|~3.0"
+ "symfony/config": "~3.3|~4.0",
+ "symfony/dependency-injection": "~3.3|~4.0",
+ "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
+ "symfony/lock": "~3.4|~4.0",
+ "symfony/process": "~3.3|~4.0"
},
"suggest": {
"psr/log": "For using the console logger",
"symfony/event-dispatcher": "",
+ "symfony/lock": "",
"symfony/process": ""
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2039,37 +1865,89 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2016-07-30 07:22:48"
+ "time": "2017-09-11T21:23:16+00:00"
},
{
- "name": "symfony/debug",
+ "name": "symfony/css-selector",
"version": "3.0.x-dev",
"source": {
"type": "git",
- "url": "https://github.com/symfony/debug.git",
- "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a"
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "b8999c1f33c224b2b66b38253f5e3a838d0d0115"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/697c527acd9ea1b2d3efac34d9806bf255278b0a",
- "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/b8999c1f33c224b2b66b38253f5e3a838d0d0115",
+ "reference": "b8999c1f33c224b2b66b38253f5e3a838d0d0115",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
+ "php": ">=5.5.9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony CssSelector Component",
+ "homepage": "https://symfony.com",
+ "time": "2016-06-29T05:40:00+00:00"
+ },
+ {
+ "name": "symfony/debug",
+ "version": "3.4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/debug.git",
+ "reference": "14076792065c98c32c234fbb94da9a478b394281"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/14076792065c98c32c234fbb94da9a478b394281",
+ "reference": "14076792065c98c32c234fbb94da9a478b394281",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8",
"psr/log": "~1.0"
},
"conflict": {
"symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
},
"require-dev": {
- "symfony/class-loader": "~2.8|~3.0",
- "symfony/http-kernel": "~2.8|~3.0"
+ "symfony/http-kernel": "~2.8|~3.0|~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2096,7 +1974,7 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2016-07-30 07:22:48"
+ "time": "2017-09-12T08:02:51+00:00"
},
{
"name": "symfony/event-dispatcher",
@@ -2104,23 +1982,26 @@
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "5382f4c882e73c267c80b8edcd482a76ef62bbe2"
+ "reference": "e7aca240dda99d78e4a51f4eee1390207a4dc8f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5382f4c882e73c267c80b8edcd482a76ef62bbe2",
- "reference": "5382f4c882e73c267c80b8edcd482a76ef62bbe2",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e7aca240dda99d78e4a51f4eee1390207a4dc8f8",
+ "reference": "e7aca240dda99d78e4a51f4eee1390207a4dc8f8",
"shasum": ""
},
"require": {
- "php": ">=5.5.9"
+ "php": "^7.1.3"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<3.4"
},
"require-dev": {
"psr/log": "~1.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/dependency-injection": "~2.8|~3.0",
- "symfony/expression-language": "~2.8|~3.0",
- "symfony/stopwatch": "~2.8|~3.0"
+ "symfony/config": "~3.4|~4.0",
+ "symfony/dependency-injection": "~3.4|~4.0",
+ "symfony/expression-language": "~3.4|~4.0",
+ "symfony/stopwatch": "~3.4|~4.0"
},
"suggest": {
"symfony/dependency-injection": "",
@@ -2129,7 +2010,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.2-dev"
+ "dev-master": "4.0-dev"
}
},
"autoload": {
@@ -2156,29 +2037,29 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2016-07-19 10:47:02"
+ "time": "2017-09-11T20:45:27+00:00"
},
{
"name": "symfony/finder",
- "version": "3.0.x-dev",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9"
+ "reference": "c661886c5a8f6398300812ae31445cd078af2a57"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9",
- "reference": "3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/c661886c5a8f6398300812ae31445cd078af2a57",
+ "reference": "c661886c5a8f6398300812ae31445cd078af2a57",
"shasum": ""
},
"require": {
- "php": ">=5.5.9"
+ "php": "^5.5.9|>=7.0.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2205,33 +2086,33 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2016-06-29 05:40:00"
+ "time": "2017-09-11T20:45:17+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "3.0.x-dev",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "49ba00f8ede742169cb6b70abe33243f4d673f82"
+ "reference": "eb635edacc95e9be0eaed39d65f7e320efb6f70c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49ba00f8ede742169cb6b70abe33243f4d673f82",
- "reference": "49ba00f8ede742169cb6b70abe33243f4d673f82",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/eb635edacc95e9be0eaed39d65f7e320efb6f70c",
+ "reference": "eb635edacc95e9be0eaed39d65f7e320efb6f70c",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
+ "php": "^5.5.9|>=7.0.8",
"symfony/polyfill-mbstring": "~1.1"
},
"require-dev": {
- "symfony/expression-language": "~2.8|~3.0"
+ "symfony/expression-language": "~2.8|~3.0|~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2258,52 +2139,55 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2016-07-17 13:54:30"
+ "time": "2017-09-11T21:34:45+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "3.0.x-dev",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "03ac7bbc8fccbf002e0bea88dbe09262b29dc2a9"
+ "reference": "a29b12f878f1493428cca25997c4199955b2bc0e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/03ac7bbc8fccbf002e0bea88dbe09262b29dc2a9",
- "reference": "03ac7bbc8fccbf002e0bea88dbe09262b29dc2a9",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a29b12f878f1493428cca25997c4199955b2bc0e",
+ "reference": "a29b12f878f1493428cca25997c4199955b2bc0e",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
+ "php": "^5.5.9|>=7.0.8",
"psr/log": "~1.0",
- "symfony/debug": "~2.8|~3.0",
- "symfony/event-dispatcher": "~2.8|~3.0",
- "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2"
+ "symfony/debug": "~2.8|~3.0|~4.0",
+ "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
+ "symfony/http-foundation": "~3.3|~4.0"
},
"conflict": {
- "symfony/config": "<2.8"
+ "symfony/config": "<2.8",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/var-dumper": "<3.3",
+ "twig/twig": "<1.34|<2.4,>=2"
},
"require-dev": {
- "symfony/browser-kit": "~2.8|~3.0",
+ "psr/cache": "~1.0",
+ "symfony/browser-kit": "~2.8|~3.0|~4.0",
"symfony/class-loader": "~2.8|~3.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/console": "~2.8|~3.0",
- "symfony/css-selector": "~2.8|~3.0",
- "symfony/dependency-injection": "~2.8|~3.0",
- "symfony/dom-crawler": "~2.8|~3.0",
- "symfony/expression-language": "~2.8|~3.0",
- "symfony/finder": "~2.8|~3.0",
- "symfony/process": "~2.8|~3.0",
- "symfony/routing": "~2.8|~3.0",
- "symfony/stopwatch": "~2.8|~3.0",
- "symfony/templating": "~2.8|~3.0",
- "symfony/translation": "~2.8|~3.0",
- "symfony/var-dumper": "~2.8|~3.0"
+ "symfony/config": "~2.8|~3.0|~4.0",
+ "symfony/console": "~2.8|~3.0|~4.0",
+ "symfony/css-selector": "~2.8|~3.0|~4.0",
+ "symfony/dependency-injection": "~3.4|~4.0",
+ "symfony/dom-crawler": "~2.8|~3.0|~4.0",
+ "symfony/expression-language": "~2.8|~3.0|~4.0",
+ "symfony/finder": "~2.8|~3.0|~4.0",
+ "symfony/process": "~2.8|~3.0|~4.0",
+ "symfony/routing": "~2.8|~3.0|~4.0",
+ "symfony/stopwatch": "~2.8|~3.0|~4.0",
+ "symfony/templating": "~2.8|~3.0|~4.0",
+ "symfony/translation": "~2.8|~3.0|~4.0",
+ "symfony/var-dumper": "~3.3|~4.0"
},
"suggest": {
"symfony/browser-kit": "",
- "symfony/class-loader": "",
"symfony/config": "",
"symfony/console": "",
"symfony/dependency-injection": "",
@@ -2313,7 +2197,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2340,7 +2224,7 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2016-07-30 09:29:03"
+ "time": "2017-09-11T21:23:16+00:00"
},
{
"name": "symfony/polyfill-mbstring",
@@ -2348,12 +2232,12 @@
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c"
+ "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c",
- "reference": "53ad9faffe141fbe8f98cd6a7fd9a5e84513f56c",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803",
+ "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803",
"shasum": ""
},
"require": {
@@ -2365,7 +2249,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2-dev"
+ "dev-master": "1.5-dev"
}
},
"autoload": {
@@ -2399,137 +2283,29 @@
"portable",
"shim"
],
- "time": "2016-08-30 17:06:17"
- },
- {
- "name": "symfony/polyfill-php56",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php56.git",
- "reference": "3dd0fbb5810358b86b5a8ebb4529134597a0f95f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3dd0fbb5810358b86b5a8ebb4529134597a0f95f",
- "reference": "3dd0fbb5810358b86b5a8ebb4529134597a0f95f",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "symfony/polyfill-util": "~1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php56\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2016-08-17 08:39:54"
- },
- {
- "name": "symfony/polyfill-util",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-util.git",
- "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99",
- "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Util\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony utilities for portability of PHP codes",
- "homepage": "https://symfony.com",
- "keywords": [
- "compat",
- "compatibility",
- "polyfill",
- "shim"
- ],
- "time": "2016-05-18 14:26:46"
+ "time": "2017-06-14T15:44:48+00:00"
},
{
"name": "symfony/process",
- "version": "3.0.x-dev",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "768debc5996f599c4372b322d9061dba2a4bf505"
+ "reference": "19d5369c0b38820685adeb119e717e292df2b46b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/768debc5996f599c4372b322d9061dba2a4bf505",
- "reference": "768debc5996f599c4372b322d9061dba2a4bf505",
+ "url": "https://api.github.com/repos/symfony/process/zipball/19d5369c0b38820685adeb119e717e292df2b46b",
+ "reference": "19d5369c0b38820685adeb119e717e292df2b46b",
"shasum": ""
},
"require": {
- "php": ">=5.5.9"
+ "php": "^5.5.9|>=7.0.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2556,36 +2332,39 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2016-07-28 11:13:34"
+ "time": "2017-09-11T21:23:16+00:00"
},
{
"name": "symfony/routing",
- "version": "3.0.x-dev",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "9038984bd9c05ab07280121e9e10f61a7231457b"
+ "reference": "27ec5b35a8af4dea0de400e974569cc655ef9763"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/9038984bd9c05ab07280121e9e10f61a7231457b",
- "reference": "9038984bd9c05ab07280121e9e10f61a7231457b",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/27ec5b35a8af4dea0de400e974569cc655ef9763",
+ "reference": "27ec5b35a8af4dea0de400e974569cc655ef9763",
"shasum": ""
},
"require": {
- "php": ">=5.5.9"
+ "php": "^5.5.9|>=7.0.8"
},
"conflict": {
- "symfony/config": "<2.8"
+ "symfony/config": "<2.8",
+ "symfony/dependency-injection": "<3.3",
+ "symfony/yaml": "<3.3"
},
"require-dev": {
"doctrine/annotations": "~1.0",
"doctrine/common": "~2.2",
"psr/log": "~1.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/expression-language": "~2.8|~3.0",
- "symfony/http-foundation": "~2.8|~3.0",
- "symfony/yaml": "~2.8|~3.0"
+ "symfony/config": "~2.8|~3.0|~4.0",
+ "symfony/dependency-injection": "~3.3|~4.0",
+ "symfony/expression-language": "~2.8|~3.0|~4.0",
+ "symfony/http-foundation": "~2.8|~3.0|~4.0",
+ "symfony/yaml": "~3.3|~4.0"
},
"suggest": {
"doctrine/annotations": "For using the annotation loader",
@@ -2598,7 +2377,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2631,34 +2410,38 @@
"uri",
"url"
],
- "time": "2016-06-29 05:40:00"
+ "time": "2017-09-11T21:23:16+00:00"
},
{
"name": "symfony/translation",
- "version": "3.0.x-dev",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26"
+ "reference": "eb3635f1bd757a0a13b93264e85c5fc81fe6819a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/eee6c664853fd0576f21ae25725cfffeafe83f26",
- "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/eb3635f1bd757a0a13b93264e85c5fc81fe6819a",
+ "reference": "eb3635f1bd757a0a13b93264e85c5fc81fe6819a",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
+ "php": "^5.5.9|>=7.0.8",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
- "symfony/config": "<2.8"
+ "symfony/config": "<2.8",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/yaml": "<3.3"
},
"require-dev": {
"psr/log": "~1.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/intl": "~2.8|~3.0",
- "symfony/yaml": "~2.8|~3.0"
+ "symfony/config": "~2.8|~3.0|~4.0",
+ "symfony/dependency-injection": "~3.4|~4.0",
+ "symfony/finder": "~2.8|~3.0|~4.0",
+ "symfony/intl": "^2.8.18|^3.2.5|~4.0",
+ "symfony/yaml": "~3.3|~4.0"
},
"suggest": {
"psr/log": "To use logging capability in translator",
@@ -2668,7 +2451,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2695,36 +2478,42 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2016-07-30 07:22:48"
+ "time": "2017-09-12T12:37:35+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "3.0.x-dev",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "1f7e071aafc6676fcb6e3f0497f87c2397247377"
+ "reference": "3f046fae2a075208272799339f8ba17e92292de0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1f7e071aafc6676fcb6e3f0497f87c2397247377",
- "reference": "1f7e071aafc6676fcb6e3f0497f87c2397247377",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3f046fae2a075208272799339f8ba17e92292de0",
+ "reference": "3f046fae2a075208272799339f8ba17e92292de0",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
+ "php": "^5.5.9|>=7.0.8",
"symfony/polyfill-mbstring": "~1.0"
},
+ "conflict": {
+ "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
+ },
"require-dev": {
- "twig/twig": "~1.20|~2.0"
+ "ext-iconv": "*",
+ "twig/twig": "~1.34|~2.4"
},
"suggest": {
+ "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+ "ext-intl": "To show region name in time zone dump",
"ext-symfony_debug": ""
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2758,7 +2547,54 @@
"debug",
"dump"
],
- "time": "2016-07-26 08:03:56"
+ "time": "2017-09-11T21:23:16+00:00"
+ },
+ {
+ "name": "tijsverkoyen/css-to-inline-styles",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
+ "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b",
+ "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5 || ^7",
+ "symfony/css-selector": "^2.7|~3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8|5.1.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "TijsVerkoyen\\CssToInlineStyles\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Tijs Verkoyen",
+ "email": "css_to_inline_styles@verkoyen.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
+ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+ "time": "2016-09-20T12:50:39+00:00"
},
{
"name": "vlucas/phpdotenv",
@@ -2766,12 +2602,12 @@
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c"
+ "reference": "3dd3d8f90e6604e75cca48ec32b033b50b05135b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
- "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3dd3d8f90e6604e75cca48ec32b033b50b05135b",
+ "reference": "3dd3d8f90e6604e75cca48ec32b033b50b05135b",
"shasum": ""
},
"require": {
@@ -2808,20 +2644,20 @@
"env",
"environment"
],
- "time": "2016-09-01 10:05:43"
+ "time": "2017-08-08T20:02:34+00:00"
},
{
"name": "watson/sitemap",
- "version": "2.0.14",
+ "version": "2.0.20",
"source": {
"type": "git",
"url": "https://github.com/dwightwatson/sitemap.git",
- "reference": "cca97f87135fc9fcaf70093453d71ec616ea90e1"
+ "reference": "2618d3e4e1d7cb7ae5bde3587489df76a6f37f03"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dwightwatson/sitemap/zipball/cca97f87135fc9fcaf70093453d71ec616ea90e1",
- "reference": "cca97f87135fc9fcaf70093453d71ec616ea90e1",
+ "url": "https://api.github.com/repos/dwightwatson/sitemap/zipball/2618d3e4e1d7cb7ae5bde3587489df76a6f37f03",
+ "reference": "2618d3e4e1d7cb7ae5bde3587489df76a6f37f03",
"shasum": ""
},
"require": {
@@ -2834,6 +2670,16 @@
"phpunit/phpunit": "4.3.*"
},
"type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Watson\\Sitemap\\SitemapServiceProvider"
+ ],
+ "aliases": {
+ "Sitemap": "Watson\\Sitemap\\Facades\\Sitemap"
+ }
+ }
+ },
"autoload": {
"psr-4": {
"Watson\\": "src/Watson"
@@ -2854,26 +2700,26 @@
"laravel",
"sitemaps"
],
- "time": "2016-08-18 23:27:53"
+ "time": "2017-06-30T01:15:34+00:00"
},
{
"name": "webwizo/laravel-shortcodes",
- "version": "v1.0.4",
+ "version": "1.0.9",
"source": {
"type": "git",
"url": "https://github.com/webwizo/laravel-shortcodes.git",
- "reference": "da0774fcba968b11591693cc55b28fabe7eaf047"
+ "reference": "9e42444a2fe5e5d3496bfbadd7546f91d91fcf51"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webwizo/laravel-shortcodes/zipball/da0774fcba968b11591693cc55b28fabe7eaf047",
- "reference": "da0774fcba968b11591693cc55b28fabe7eaf047",
+ "url": "https://api.github.com/repos/webwizo/laravel-shortcodes/zipball/9e42444a2fe5e5d3496bfbadd7546f91d91fcf51",
+ "reference": "9e42444a2fe5e5d3496bfbadd7546f91d91fcf51",
"shasum": ""
},
"require": {
- "illuminate/contracts": "~5.2",
- "illuminate/support": "~5.2",
- "illuminate/view": "~5.2",
+ "illuminate/contracts": "~5.1|~5.2|~5.3|~5.4",
+ "illuminate/support": "~5.1|~5.2|~5.3|~5.4",
+ "illuminate/view": "~5.1|~5.2|~5.3|~5.4",
"php": "~5.5|~7.0"
},
"require-dev": {
@@ -2883,11 +2729,6 @@
"squizlabs/php_codesniffer": "~2.3"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
"autoload": {
"classmap": [
"tests/TestCase.php"
@@ -2908,43 +2749,38 @@
"role": "Developer"
}
],
- "description": "Wordpress like shortcodes for Laravel 5.2",
+ "description": "Wordpress like shortcodes for Laravel 5.x",
"homepage": "https://github.com/webwizo/laravel-shortcodes",
"keywords": [
"laravel",
"shortcodes",
"wordpress"
],
- "time": "2016-08-25 06:02:46"
+ "time": "2017-01-30T08:37:02+00:00"
}
],
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
- "version": "dev-master",
+ "version": "2.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "5056a3878db4ab7ac232d5a075d54aaa590c2d27"
+ "reference": "b45cee906d15a798ae60db8edf71b31355dba929"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/5056a3878db4ab7ac232d5a075d54aaa590c2d27",
- "reference": "5056a3878db4ab7ac232d5a075d54aaa590c2d27",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/b45cee906d15a798ae60db8edf71b31355dba929",
+ "reference": "b45cee906d15a798ae60db8edf71b31355dba929",
"shasum": ""
},
"require": {
- "illuminate/support": "5.1.*|5.2.*|5.3.*",
- "maximebf/debugbar": "~1.11.0|~1.12.0",
+ "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*",
+ "maximebf/debugbar": "~1.14.0",
"php": ">=5.5.9",
"symfony/finder": "~2.7|~3.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2-dev"
- }
- },
"autoload": {
"psr-4": {
"Barryvdh\\Debugbar\\": "src/"
@@ -2971,7 +2807,7 @@
"profiler",
"webprofiler"
],
- "time": "2016-08-25 20:55:54"
+ "time": "2017-09-06T08:02:33+00:00"
},
{
"name": "doctrine/instantiator",
@@ -2979,28 +2815,28 @@
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
- "reference": "416fb8ad1d095a87f1d21bc40711843cd122fd4a"
+ "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/416fb8ad1d095a87f1d21bc40711843cd122fd4a",
- "reference": "416fb8ad1d095a87f1d21bc40711843cd122fd4a",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+ "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
"shasum": ""
},
"require": {
- "php": ">=5.3,<8.0-DEV"
+ "php": "^7.1"
},
"require-dev": {
"athletic/athletic": "~0.1.8",
"ext-pdo": "*",
"ext-phar": "*",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~2.0"
+ "phpunit/phpunit": "^6.2.3",
+ "squizlabs/php_codesniffer": "^3.0.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.2.x-dev"
}
},
"autoload": {
@@ -3025,7 +2861,7 @@
"constructor",
"instantiate"
],
- "time": "2016-03-31 10:24:22"
+ "time": "2017-07-22T11:58:36+00:00"
},
{
"name": "fzaninotto/faker",
@@ -3033,26 +2869,26 @@
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
- "reference": "efcde03be3051be1045515fb1520451283357fbb"
+ "reference": "95b16a4802b998f330f8a8bfc3fa4e412a7ce05b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/efcde03be3051be1045515fb1520451283357fbb",
- "reference": "efcde03be3051be1045515fb1520451283357fbb",
+ "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/95b16a4802b998f330f8a8bfc3fa4e412a7ce05b",
+ "reference": "95b16a4802b998f330f8a8bfc3fa4e412a7ce05b",
"shasum": ""
},
"require": {
- "php": "^5.3.3|^7.0"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
"ext-intl": "*",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~1.5"
+ "phpunit/phpunit": "^4.0 || ^5.0",
+ "squizlabs/php_codesniffer": "^1.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6.x-dev"
+ "dev-master": "1.8-dev"
}
},
"autoload": {
@@ -3075,7 +2911,7 @@
"faker",
"fixtures"
],
- "time": "2016-09-01 09:55:47"
+ "time": "2017-09-08T09:53:19+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -3126,50 +2962,7 @@
"keywords": [
"test"
],
- "time": "2016-01-19 12:08:55"
- },
- {
- "name": "ignasbernotas/laravel-model-generator",
- "version": "1.1.4",
- "source": {
- "type": "git",
- "url": "https://github.com/ignasbernotas/laravel-model-generator.git",
- "reference": "343ad81e5ec64b224aff01e7054e98faf98f1c61"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ignasbernotas/laravel-model-generator/zipball/343ad81e5ec64b224aff01e7054e98faf98f1c61",
- "reference": "343ad81e5ec64b224aff01e7054e98faf98f1c61",
- "shasum": ""
- },
- "require": {
- "illuminate/support": "~5.0",
- "php": ">=5.4.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Iber\\Generator\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ignas Bernotas",
- "email": "ignas@iber.lt"
- }
- ],
- "description": "Laravel 5 model generator from existing schema",
- "keywords": [
- "generator",
- "laravel",
- "model",
- "schema"
- ],
- "time": "2016-05-24 16:57:40"
+ "time": "2016-01-19T12:08:55+00:00"
},
{
"name": "maximebf/debugbar",
@@ -3177,12 +2970,12 @@
"source": {
"type": "git",
"url": "https://github.com/maximebf/php-debugbar.git",
- "reference": "c639a8435172116f4edf6d1cdad64801b1f2fad6"
+ "reference": "82a53b6ed8b16e3f7527d9a6f2e4bea68c6b14d8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/c639a8435172116f4edf6d1cdad64801b1f2fad6",
- "reference": "c639a8435172116f4edf6d1cdad64801b1f2fad6",
+ "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/82a53b6ed8b16e3f7527d9a6f2e4bea68c6b14d8",
+ "reference": "82a53b6ed8b16e3f7527d9a6f2e4bea68c6b14d8",
"shasum": ""
},
"require": {
@@ -3201,7 +2994,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.12-dev"
+ "dev-master": "1.14-dev"
}
},
"autoload": {
@@ -3230,20 +3023,20 @@
"debug",
"debugbar"
],
- "time": "2016-08-28 15:57:48"
+ "time": "2017-08-31T09:05:54+00:00"
},
{
"name": "mockery/mockery",
"version": "0.9.x-dev",
"source": {
"type": "git",
- "url": "https://github.com/padraic/mockery.git",
- "reference": "dc369985a60578ca38f3525e98c1038f84153bc6"
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "80ac8060487db317c133ee00154f0862bd4d4ec7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/padraic/mockery/zipball/dc369985a60578ca38f3525e98c1038f84153bc6",
- "reference": "dc369985a60578ca38f3525e98c1038f84153bc6",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/80ac8060487db317c133ee00154f0862bd4d4ec7",
+ "reference": "80ac8060487db317c133ee00154f0862bd4d4ec7",
"shasum": ""
},
"require": {
@@ -3271,7 +3064,7 @@
],
"authors": [
{
- "name": "Pádraic Brady",
+ "name": "Padraic Brady",
"email": "padraic.brady@gmail.com",
"homepage": "http://blog.astrumfutura.com"
},
@@ -3295,7 +3088,7 @@
"test double",
"testing"
],
- "time": "2016-09-03 07:05:34"
+ "time": "2017-06-07T08:41:50+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@@ -3303,12 +3096,12 @@
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c"
+ "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c",
- "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+ "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
"shasum": ""
},
"require": {
@@ -3349,26 +3142,26 @@
"reflection",
"static analysis"
],
- "time": "2015-12-27 11:43:31"
+ "time": "2017-09-11T18:02:19+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "3.1.0",
+ "version": "4.1.1",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "9270140b940ff02e58ec577c237274e92cd40cdd"
+ "reference": "2d3d238c433cf69caeb4842e97a3223a116f94b2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd",
- "reference": "9270140b940ff02e58ec577c237274e92cd40cdd",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2d3d238c433cf69caeb4842e97a3223a116f94b2",
+ "reference": "2d3d238c433cf69caeb4842e97a3223a116f94b2",
"shasum": ""
},
"require": {
- "php": ">=5.5",
+ "php": "^7.0",
"phpdocumentor/reflection-common": "^1.0@dev",
- "phpdocumentor/type-resolver": "^0.2.0",
+ "phpdocumentor/type-resolver": "^0.4.0",
"webmozart/assert": "^1.0"
},
"require-dev": {
@@ -3394,24 +3187,24 @@
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "time": "2016-06-10 09:48:41"
+ "time": "2017-08-30T18:51:59+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "0.2",
+ "version": "0.4.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443"
+ "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443",
- "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
+ "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
"shasum": ""
},
"require": {
- "php": ">=5.5",
+ "php": "^5.5 || ^7.0",
"phpdocumentor/reflection-common": "^1.0"
},
"require-dev": {
@@ -3441,7 +3234,7 @@
"email": "me@mikevanriel.com"
}
],
- "time": "2016-06-10 07:14:17"
+ "time": "2017-07-14T14:27:02+00:00"
},
{
"name": "phpspec/prophecy",
@@ -3449,28 +3242,29 @@
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "d883566b83ae601a50b38b249e92450dc57cf875"
+ "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d883566b83ae601a50b38b249e92450dc57cf875",
- "reference": "d883566b83ae601a50b38b249e92450dc57cf875",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6",
+ "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
- "phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
- "sebastian/comparator": "^1.1",
- "sebastian/recursion-context": "^1.0"
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
+ "sebastian/comparator": "^1.1|^2.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0"
},
"require-dev": {
- "phpspec/phpspec": "^2.0"
+ "phpspec/phpspec": "^2.5|^3.2",
+ "phpunit/phpunit": "^4.8 || ^5.6.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6.x-dev"
+ "dev-master": "1.7.x-dev"
}
},
"autoload": {
@@ -3503,7 +3297,7 @@
"spy",
"stub"
],
- "time": "2016-07-19 16:08:43"
+ "time": "2017-09-04T11:05:03+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -3565,7 +3359,7 @@
"testing",
"xunit"
],
- "time": "2015-10-06 15:47:00"
+ "time": "2015-10-06T15:47:00+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -3573,12 +3367,12 @@
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
+ "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
- "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
+ "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
"shasum": ""
},
"require": {
@@ -3612,7 +3406,7 @@
"filesystem",
"iterator"
],
- "time": "2015-06-21 13:08:43"
+ "time": "2016-10-03T07:40:28+00:00"
},
{
"name": "phpunit/php-text-template",
@@ -3653,29 +3447,34 @@
"keywords": [
"template"
],
- "time": "2015-06-21 13:50:34"
+ "time": "2015-06-21T13:50:34+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "1.0.8",
+ "version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
+ "reference": "d107f347d368dd8a384601398280c7c608390ab7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/d107f347d368dd8a384601398280c7c608390ab7",
+ "reference": "d107f347d368dd8a384601398280c7c608390ab7",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4|~5"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
"autoload": {
"classmap": [
"src/"
@@ -3697,20 +3496,20 @@
"keywords": [
"timer"
],
- "time": "2016-05-12 18:03:57"
+ "time": "2017-03-07T15:42:04+00:00"
},
{
"name": "phpunit/php-token-stream",
- "version": "dev-master",
+ "version": "1.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644"
+ "reference": "958103f327daef5dd0bb328dec53e0a9e43cfaf7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cab6c6fefee93d7b7c3a01292a0fe0884ea66644",
- "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/958103f327daef5dd0bb328dec53e0a9e43cfaf7",
+ "reference": "958103f327daef5dd0bb328dec53e0a9e43cfaf7",
"shasum": ""
},
"require": {
@@ -3746,7 +3545,7 @@
"keywords": [
"tokenizer"
],
- "time": "2015-09-23 14:46:55"
+ "time": "2017-03-07T08:21:50+00:00"
},
{
"name": "phpunit/phpunit",
@@ -3754,12 +3553,12 @@
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "41433b0d64caa3f2a73e415596dfa73490c262fc"
+ "reference": "18e5f52e8412d23e739f7d8744e177039860e800"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/41433b0d64caa3f2a73e415596dfa73490c262fc",
- "reference": "41433b0d64caa3f2a73e415596dfa73490c262fc",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/18e5f52e8412d23e739f7d8744e177039860e800",
+ "reference": "18e5f52e8412d23e739f7d8744e177039860e800",
"shasum": ""
},
"require": {
@@ -3775,7 +3574,7 @@
"phpunit/php-text-template": "~1.2",
"phpunit/php-timer": "^1.0.6",
"phpunit/phpunit-mock-objects": "~2.3",
- "sebastian/comparator": "~1.1",
+ "sebastian/comparator": "~1.2.2",
"sebastian/diff": "~1.2",
"sebastian/environment": "~1.3",
"sebastian/exporter": "~1.2",
@@ -3818,7 +3617,7 @@
"testing",
"xunit"
],
- "time": "2016-08-28 06:58:45"
+ "time": "2017-06-23T12:44:27+00:00"
},
{
"name": "phpunit/phpunit-mock-objects",
@@ -3874,26 +3673,26 @@
"mock",
"xunit"
],
- "time": "2015-10-02 06:51:40"
+ "time": "2015-10-02T06:51:40+00:00"
},
{
"name": "sebastian/comparator",
- "version": "dev-master",
+ "version": "1.2.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
+ "reference": "18a5d97c25f408f48acaf6d1b9f4079314c5996a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
- "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/18a5d97c25f408f48acaf6d1b9f4079314c5996a",
+ "reference": "18a5d97c25f408f48acaf6d1b9f4079314c5996a",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"sebastian/diff": "~1.2",
- "sebastian/exporter": "~1.2"
+ "sebastian/exporter": "~1.2 || ~2.0"
},
"require-dev": {
"phpunit/phpunit": "~4.4"
@@ -3938,27 +3737,27 @@
"compare",
"equality"
],
- "time": "2015-07-26 15:48:44"
+ "time": "2017-03-07T10:34:43+00:00"
},
{
"name": "sebastian/diff",
- "version": "dev-master",
+ "version": "1.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
+ "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+ "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.8"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
@@ -3990,7 +3789,7 @@
"keywords": [
"diff"
],
- "time": "2015-12-08 07:14:41"
+ "time": "2017-05-22T07:24:03+00:00"
},
{
"name": "sebastian/environment",
@@ -3998,19 +3797,19 @@
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
+ "reference": "67f55699c2810ff0f2cc47478bbdeda8567e68ee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
- "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/67f55699c2810ff0f2cc47478bbdeda8567e68ee",
+ "reference": "67f55699c2810ff0f2cc47478bbdeda8567e68ee",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8 || ^5.0"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
@@ -4040,34 +3839,34 @@
"environment",
"hhvm"
],
- "time": "2016-08-18 05:49:44"
+ "time": "2017-02-28T08:18:59+00:00"
},
{
"name": "sebastian/exporter",
- "version": "dev-master",
+ "version": "1.2.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
+ "reference": "dcd43bcc0fd3551bd2ede0081882d549bb78225d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
- "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/dcd43bcc0fd3551bd2ede0081882d549bb78225d",
+ "reference": "dcd43bcc0fd3551bd2ede0081882d549bb78225d",
"shasum": ""
},
"require": {
- "php": ">=5.3.3",
- "sebastian/recursion-context": "~1.0"
+ "php": "^5.3.3 || ^7.0",
+ "sebastian/recursion-context": "^1.0"
},
"require-dev": {
"ext-mbstring": "*",
- "phpunit/phpunit": "~4.4"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "1.2.x-dev"
}
},
"autoload": {
@@ -4107,27 +3906,27 @@
"export",
"exporter"
],
- "time": "2016-06-17 09:04:28"
+ "time": "2017-02-26T13:09:30+00:00"
},
{
"name": "sebastian/global-state",
- "version": "1.1.1",
+ "version": "1.1.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+ "reference": "cea85a84b00f2795341ebbbca4fa396347f2494e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/cea85a84b00f2795341ebbbca4fa396347f2494e",
+ "reference": "cea85a84b00f2795341ebbbca4fa396347f2494e",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
- "phpunit/phpunit": "~4.2"
+ "phpunit/phpunit": "~4.2|~5.0"
},
"suggest": {
"ext-uopz": "*"
@@ -4158,20 +3957,20 @@
"keywords": [
"global state"
],
- "time": "2015-10-12 03:26:01"
+ "time": "2017-02-23T14:11:06+00:00"
},
{
"name": "sebastian/recursion-context",
- "version": "dev-master",
+ "version": "1.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7"
+ "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7",
- "reference": "7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+ "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
"shasum": ""
},
"require": {
@@ -4211,7 +4010,7 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2016-01-28 05:39:29"
+ "time": "2016-10-03T07:41:43+00:00"
},
{
"name": "sebastian/version",
@@ -4246,60 +4045,7 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
- "time": "2015-06-21 13:59:46"
- },
- {
- "name": "symfony/css-selector",
- "version": "3.0.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/css-selector.git",
- "reference": "b8999c1f33c224b2b66b38253f5e3a838d0d0115"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/b8999c1f33c224b2b66b38253f5e3a838d0d0115",
- "reference": "b8999c1f33c224b2b66b38253f5e3a838d0d0115",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\CssSelector\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jean-François Simon",
- "email": "jeanfrancois.simon@sensiolabs.com"
- },
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony CssSelector Component",
- "homepage": "https://symfony.com",
- "time": "2016-06-29 05:40:00"
+ "time": "2015-06-21T13:59:46+00:00"
},
{
"name": "symfony/dom-crawler",
@@ -4355,27 +4101,30 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2016-07-30 07:22:48"
+ "time": "2016-07-30T07:22:48+00:00"
},
{
"name": "symfony/yaml",
- "version": "dev-master",
+ "version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "aa8be2235b5dd4e472424552390609f61996f5ab"
+ "reference": "c076a2d6f809130a84f99616b425b9665b3ce0a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/aa8be2235b5dd4e472424552390609f61996f5ab",
- "reference": "aa8be2235b5dd4e472424552390609f61996f5ab",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/c076a2d6f809130a84f99616b425b9665b3ce0a5",
+ "reference": "c076a2d6f809130a84f99616b425b9665b3ce0a5",
"shasum": ""
},
"require": {
- "php": ">=5.5.9"
+ "php": "^5.5.9|>=7.0.8"
+ },
+ "conflict": {
+ "symfony/console": "<3.4"
},
"require-dev": {
- "symfony/console": "~2.8|~3.0"
+ "symfony/console": "~3.4|~4.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
@@ -4383,7 +4132,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.2-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -4410,7 +4159,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2016-09-02 02:14:06"
+ "time": "2017-09-04T13:18:59+00:00"
},
{
"name": "webmozart/assert",
@@ -4418,12 +4167,12 @@
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
- "reference": "8444f2ac9f86342665cdae47b6d3ea6e07794456"
+ "reference": "4a8bf11547e139e77b651365113fc12850c43d9a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/assert/zipball/8444f2ac9f86342665cdae47b6d3ea6e07794456",
- "reference": "8444f2ac9f86342665cdae47b6d3ea6e07794456",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/4a8bf11547e139e77b651365113fc12850c43d9a",
+ "reference": "4a8bf11547e139e77b651365113fc12850c43d9a",
"shasum": ""
},
"require": {
@@ -4436,7 +4185,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2-dev"
+ "dev-master": "1.3-dev"
}
},
"autoload": {
@@ -4460,16 +4209,20 @@
"check",
"validate"
],
- "time": "2016-08-18 09:30:53"
+ "time": "2016-11-23T20:04:41+00:00"
}
],
"aliases": [],
"minimum-stability": "dev",
- "stability-flags": [],
+ "stability-flags": {
+ "greggilbert/recaptcha": 20,
+ "doctrine/dbal": 20,
+ "nwidart/laravel-menus": 20
+ },
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": ">=5.5.9"
+ "php": ">=7.0.0"
},
"platform-dev": []
}
diff --git a/config/.gitignore b/config/.gitignore
index a6acbe5b..30f2be9f 100644
--- a/config/.gitignore
+++ b/config/.gitignore
@@ -19,3 +19,4 @@
!sitemap.php
!image.php
!view.php
+!recaptcha.php
\ No newline at end of file
diff --git a/config/app.php b/config/app.php
index 8655d7a1..d62c8e9c 100644
--- a/config/app.php
+++ b/config/app.php
@@ -153,16 +153,14 @@ return [
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
+ Illuminate\Notifications\NotificationServiceProvider::class,
Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider::class,
- // this class must be before ModulesServiceProvider from PingPong, because it handles files module.json
- App\Providers\ModuleManager::class,
- Pingpong\Modules\ModulesServiceProvider::class,
- Pingpong\Menus\MenusServiceProvider::class,
- App\Providers\SubmodulesManager::class,
+ \App\CMS\ModuleManager\Providers\ModuleManager::class,
+ \Nwidart\Menus\MenusServiceProvider::class,
Franzose\ClosureTable\ClosureTableServiceProvider::class,
\Watson\Sitemap\SitemapServiceProvider::class,
Intervention\Image\ImageServiceProvider::class,
- Webwizo\Shortcodes\ShortcodesServiceProvider::class,
+// Webwizo\Shortcodes\ShortcodesServiceProvider::class,
/*
* Application Service Providers...
*/
@@ -172,6 +170,7 @@ return [
App\Providers\RouteServiceProvider::class,
App\Providers\BladeExtender::class,
\App\Providers\TemplateServiceProvider::class,
+ \Greggilbert\Recaptcha\RecaptchaServiceProvider::class,
],
/*
@@ -186,7 +185,6 @@ return [
*/
'aliases' => [
-
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
@@ -204,8 +202,7 @@ return [
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
- 'Menu' => Pingpong\Menus\MenuFacade::class,
- 'Module' => Pingpong\Modules\Facades\Module::class,
+ 'Menu' => Nwidart\Menus\Facades\Menu::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
@@ -221,8 +218,9 @@ return [
'Validator' => Illuminate\Support\Facades\Validator::class,
'LaravelLocalization' => Mcamara\LaravelLocalization\Facades\LaravelLocalization::class,
'View' => Illuminate\Support\Facades\View::class,
+ 'Recaptcha' => Greggilbert\Recaptcha\Facades\Recaptcha::class,
'Shortcode' => Webwizo\Shortcodes\Facades\Shortcode::class,
-
+ 'Notification' => Illuminate\Support\Facades\Notification::class,
],
];
diff --git a/config/mail.php b/config/mail.php
index 7c60a671..8f0edf46 100644
--- a/config/mail.php
+++ b/config/mail.php
@@ -111,4 +111,22 @@ return [
'sendmail' => '/usr/sbin/sendmail -bs',
+ /*
+ |--------------------------------------------------------------------------
+ | Markdown Mail Settings
+ |--------------------------------------------------------------------------
+ |
+ | If you are using Markdown based email rendering, you may configure your
+ | theme and component paths here, allowing you to customize the design
+ | of the emails. Or, you may simply stick with the Laravel defaults!
+ |
+ */
+
+ 'markdown' => [
+ 'theme' => 'default',
+
+ 'paths' => [
+ resource_path('views/vendor/mail'),
+ ],
+ ]
];
diff --git a/config/menus.php b/config/menus.php
index 0fc4ae4c..9119ddb8 100644
--- a/config/menus.php
+++ b/config/menus.php
@@ -3,12 +3,6 @@
return [
'styles' => [
- 'navbar' => 'Pingpong\Menus\Presenters\Bootstrap\NavbarPresenter',
- 'navbar-right' => 'Pingpong\Menus\Presenters\Bootstrap\NavbarRightPresenter',
- 'nav-pills' => 'Pingpong\Menus\Presenters\Bootstrap\NavPillsPresenter',
- 'nav-tab' => 'Pingpong\Menus\Presenters\Bootstrap\NavTabPresenter',
- 'sidebar' => 'Pingpong\Menus\Presenters\Bootstrap\SidebarMenuPresenter',
- 'navmenu' => 'Pingpong\Menus\Presenters\Bootstrap\NavMenuPresenter',
'foundation-drilldown' => App\CMS\MenuPresenters\FoundationDrilldownMenuPresenter::class,
'foundation-dropdown' => App\CMS\MenuPresenters\FoundationDropdownMenuPresenter::class,
'foundation-dropdown-initialized' => App\CMS\MenuPresenters\FoundationInitializedDropdownMenuPresenter::class,
diff --git a/config/modules.php b/config/modules.php
index 80edfbbb..038f14dc 100644
--- a/config/modules.php
+++ b/config/modules.php
@@ -1,160 +1,11 @@
'Modules',
-
- /*
- |--------------------------------------------------------------------------
- | Module Stubs
- |--------------------------------------------------------------------------
- |
- | Default module stubs.
- |
- */
-
- 'stubs' => [
- 'enabled' => false,
- 'path' => base_path().'/vendor/pingpong/modules/src/Pingpong/Modules/Commands/stubs',
- 'files' => [
- 'start' => 'start.php',
- 'routes' => 'Http/routes.php',
- 'json' => 'module.json',
- 'views/index' => 'Resources/views/index.blade.php',
- 'views/master' => 'Resources/views/layouts/master.blade.php',
- 'scaffold/config' => 'Config/config.php',
- 'composer' => 'composer.json',
- ],
- 'replacements' => [
- 'start' => ['LOWER_NAME'],
- 'routes' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
- 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'],
- 'views/index' => ['LOWER_NAME'],
- 'views/master' => ['STUDLY_NAME'],
- 'scaffold/config' => ['STUDLY_NAME'],
- 'composer' => [
- 'LOWER_NAME',
- 'STUDLY_NAME',
- 'VENDOR',
- 'AUTHOR_NAME',
- 'AUTHOR_EMAIL',
- 'MODULE_NAMESPACE',
- ],
- ],
- ],
- 'paths' => [
- /*
- |--------------------------------------------------------------------------
- | Modules path
- |--------------------------------------------------------------------------
- |
- | This path used for save the generated module. This path also will added
- | automatically to list of scanned folders.
- |
- */
-
- 'modules' => base_path('modules'),
- /*
- |--------------------------------------------------------------------------
- | Modules assets path
- |--------------------------------------------------------------------------
- |
- | Here you may update the modules assets path.
- |
- */
-
- 'assets' => public_path('modules'),
- /*
- |--------------------------------------------------------------------------
- | The migrations path
- |--------------------------------------------------------------------------
- |
- | Where you run 'module:publish-migration' command, where do you publish the
- | the migration files?
- |
- */
-
- 'migration' => base_path('database/migrations'),
- /*
- |--------------------------------------------------------------------------
- | Generator path
- |--------------------------------------------------------------------------
- |
- | Here you may update the modules generator path.
- |
- */
-
- 'generator' => [
- 'assets' => 'Assets',
- 'config' => 'Config',
- 'command' => 'Console',
- 'migration' => 'Database/Migrations',
- 'model' => 'Entities',
- 'repository' => 'Repositories',
- 'seeder' => 'Database/Seeders',
- 'controller' => 'Http/Controllers',
- 'filter' => 'Http/Middleware',
- 'request' => 'Http/Requests',
- 'provider' => 'Providers',
- 'lang' => 'Resources/lang',
- 'views' => 'Resources/views',
- 'test' => 'Tests',
- ],
- ],
- /*
- |--------------------------------------------------------------------------
- | Scan Path
- |--------------------------------------------------------------------------
- |
- | Here you define which folder will be scanned. By default will scan vendor
- | directory. This is useful if you host the package in packagist website.
- |
- */
-
- 'scan' => [
- 'enabled' => false,
- 'paths' => [
- base_path('vendor/*/*'),
- ],
- ],
- /*
- |--------------------------------------------------------------------------
- | Composer File Template
- |--------------------------------------------------------------------------
- |
- | Here is the config for composer.json file, generated by this package
- | in every module since version >= 1.2.0.
- |
- */
-
- 'composer' => [
- 'vendor' => 'pingpong-modules',
- 'author' => [
- 'name' => 'Pingpong Labs',
- 'email' => 'pingpong.labs@gmail.com',
- ],
- ],
- /*
- |--------------------------------------------------------------------------
- | Caching
- |--------------------------------------------------------------------------
- |
- | Here is the config for setting up caching feature.
- |
- */
- 'cache' => [
- 'enabled' => false,
- 'key' => 'pingpong-modules',
- 'lifetime' => 60,
- ],
-
+ 'paths' => [
+ 'modules' => base_path('modules'),
+ 'templates' => base_path('templates'),
+ 'assets' => public_path('modules'),
+ 'stubs' => base_path('app/CMS/Modules/Stubs'),
+ ]
];
diff --git a/config/recaptcha.php b/config/recaptcha.php
new file mode 100644
index 00000000..61957b81
--- /dev/null
+++ b/config/recaptcha.php
@@ -0,0 +1,66 @@
+ env('RECAPTCHA_PUBLIC_KEY', ''),
+ 'private_key' => env('RECAPTCHA_PRIVATE_KEY', ''),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Template
+ |--------------------------------------------------------------------------
+ |
+ | Set a template to use if you don't want to use the standard one.
+ |
+ */
+ 'template' => '',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Driver
+ |--------------------------------------------------------------------------
+ |
+ | Determine how to call out to get response; values are 'curl' or 'native'.
+ | Only applies to v2.
+ |
+ */
+ 'driver' => 'curl',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Options
+ |--------------------------------------------------------------------------
+ |
+ | Various options for the driver
+ |
+ */
+ 'options' => [
+
+ 'curl_timeout' => 1,
+ 'curl_verify' => true,
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Version
+ |--------------------------------------------------------------------------
+ |
+ | Set which version of ReCaptcha to use.
+ |
+ */
+
+ 'version' => 2,
+
+];
diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php
index 96f72d25..4eb4ec98 100644
--- a/database/factories/ModelFactory.php
+++ b/database/factories/ModelFactory.php
@@ -28,10 +28,13 @@ $factory->define(User::class, function (Faker\Generator $faker) {
});
$factory->define(Content::class, function (Faker\Generator $faker) {
+
+ $slug = isset($faker->slug) ? $faker->slug : $faker->slug(5);
+
return [
'title' => $faker->sentence(5),
'userId' => 1,
- 'url' => $faker->slug(5),
+ 'url' => $slug,
'pageContent' => $faker->text(1500),
'metaDescription' => $faker->text,
'moduleHandler' => config('staticpages.handler'),
diff --git a/database/migrations/2016_10_11_135756_AddUniqueCodeToWidgets.php b/database/migrations/2016_10_11_135756_AddUniqueCodeToWidgets.php
index c8456ba9..2c24874d 100644
--- a/database/migrations/2016_10_11_135756_AddUniqueCodeToWidgets.php
+++ b/database/migrations/2016_10_11_135756_AddUniqueCodeToWidgets.php
@@ -1,5 +1,6 @@
dropUnique('widgets_language_container_id_unique');
- });
+ try {
+ Schema::table('widgets', function (Blueprint $table) {
+ $table->dropUnique('widgets_language_container_id_unique');
+ });
+ } catch (\Exception $e) {
+
+ }
// migrate data
- $widgets = \App\Models\Widget::all();
+ $widgets = Widget::all();
foreach ($widgets as $widget) {
$widget->settings = (object)json_decode($widget->settings);
$widget->settings->containerClass = $widget->container_class;
diff --git a/database/migrations/2016_10_25_071455_rename_column_in_contents.php b/database/migrations/2016_10_25_071455_rename_column_in_contents.php
index 45b03e33..1ffcfd51 100644
--- a/database/migrations/2016_10_25_071455_rename_column_in_contents.php
+++ b/database/migrations/2016_10_25_071455_rename_column_in_contents.php
@@ -27,7 +27,6 @@ class RenameColumnInContents extends Migration
'url',
'meta_keywords',
'meta_description',
- 'content',
'module_settings',
'status'
];
diff --git a/database/migrations/2017_08_01_181056_add_static_name_to_modules_table.php b/database/migrations/2017_08_01_181056_add_static_name_to_modules_table.php
new file mode 100644
index 00000000..4818ab62
--- /dev/null
+++ b/database/migrations/2017_08_01_181056_add_static_name_to_modules_table.php
@@ -0,0 +1,38 @@
+string('static_name')->after('description');
+ });
+
+ $modules = \App\Models\Module::all();
+ foreach ($modules as $module) {
+ $module->update(['static_name' => $module->static_name]);
+ }
+
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('modules', function (Blueprint $table) {
+ $table->dropColumn('static_name');
+ });
+ }
+}
diff --git a/database/migrations/2017_08_01_212743_add_new_action_log_type.php b/database/migrations/2017_08_01_212743_add_new_action_log_type.php
new file mode 100644
index 00000000..3e91923f
--- /dev/null
+++ b/database/migrations/2017_08_01_212743_add_new_action_log_type.php
@@ -0,0 +1,29 @@
+ 'newFile',
+ 'name' => 'admin/actionLog.nameNewFile',
+ 'value' => 'admin/actionLog.newFile'
+ ]);
+ }
+
+ /**
+ * Reverse the migrations.
+ * @return void
+ */
+ public function down()
+ {
+ \App\Models\ActionLog\ActionLogType::where('string_id', 'newFile')
+ ->delete();
+ }
+}
diff --git a/database/migrations/2017_08_10_202656_CreatePermissionsTable.php b/database/migrations/2017_08_10_202656_CreatePermissionsTable.php
new file mode 100644
index 00000000..134536f5
--- /dev/null
+++ b/database/migrations/2017_08_10_202656_CreatePermissionsTable.php
@@ -0,0 +1,65 @@
+increments('id');
+ $table->integer('parent_id')
+ ->nullable()
+ ->unsigned();
+ $table->string('string_id')
+ ->unique();
+ $table->string('name');
+ $table->string('group')
+ ->nullable(true);
+ });
+
+ Schema::table('permissions', function (Blueprint $table) {
+ $table->foreign('parent_id')
+ ->references('id')
+ ->on('permissions')
+ ->onDelete('set null')
+ ->onUpdate('cascade');
+ });
+
+ Schema::create('user_has_permissions', function (Blueprint $table) {
+ $table->integer('user_id');
+ $table->integer('permission_id')
+ ->unsigned();
+ });
+
+ Schema::table('user_has_permissions', function (Blueprint $table) {
+ $table->foreign('user_id')
+ ->references('id')
+ ->on('users')
+ ->onDelete('cascade')
+ ->onUpdate('cascade');
+
+ $table->foreign('permission_id')
+ ->references('id')
+ ->on('permissions')
+ ->onDelete('cascade')
+ ->onUpdate('cascade');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('user_has_permissions');
+ Schema::drop('permissions');
+ }
+}
diff --git a/database/migrations/2017_08_10_214109_add_default_permissions.php b/database/migrations/2017_08_10_214109_add_default_permissions.php
new file mode 100644
index 00000000..6e4c8d04
--- /dev/null
+++ b/database/migrations/2017_08_10_214109_add_default_permissions.php
@@ -0,0 +1,66 @@
+boolean('default')
+ ->default(false);
+ });
+
+ Permission::getQuery()
+ ->delete();
+
+ $permissions = [
+ 'contents' => ['create', 'update', 'update-all', 'delete', 'set-homepage', 'publish', 'draft', 'protect', 'view-history'],
+ 'users' => ['create', 'update', 'delete', 'set-permissions', 'change-status', 'change-role'],
+ 'files' => ['upload', 'update', 'delete', 'move-to-directories'],
+ 'directories' => ['create', 'edit', 'delete'],
+ 'widgetareas' => ['create', 'edit', 'delete'],
+ 'widgets' => ['create', 'edit', 'delete', 'assign', 'unassign'],
+ 'templates' => ['copy', 'edit'],
+ 'actions' => [],
+ 'settings' => []
+ ];
+ foreach ($permissions as $entity => $abilities) {
+
+ $parent = Permission::create([
+ 'name' => 'admin/permissions.' . $entity . '.management',
+ 'string_id' => $entity . '-management',
+ 'group' => $entity,
+ 'default' => true,
+ ]);
+
+ foreach ($abilities as $ability) {
+ Permission::create([
+ 'name' => 'admin/permissions.' . $entity . '.' . $ability,
+ 'string_id' => $ability . '-' . $entity,
+ 'group' => $entity,
+ 'parent_id' => $parent->id,
+ 'default' => true,
+ ]);
+ }
+ }
+ }
+
+ /**
+ * Reverse the migrations.
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('permissions', function (Blueprint $table) {
+ $table->dropColumn('default');
+ });
+ }
+}
diff --git a/database/migrations/2017_08_24_011314_drop_custom_fields_tables.php b/database/migrations/2017_08_24_011314_drop_custom_fields_tables.php
new file mode 100644
index 00000000..57a1c773
--- /dev/null
+++ b/database/migrations/2017_08_24_011314_drop_custom_fields_tables.php
@@ -0,0 +1,30 @@
+integer('order')
+ ->after('viewed')
+ ->default(0);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('contents', function (Blueprint $table) {
+ $table->dropColumn('order');
+ });
+ }
+}
diff --git a/gulpfile.js b/gulpfile.js
index 4832a5de..226ae6e4 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -1,6 +1,19 @@
var elixir = require ('laravel-elixir');
+require ('laravel-elixir-remove')
+
elixir (function (mix) {
+ var defaultColor = "green";
+ var colors = ["blue", "seagreen", 'orange', "green", 'purple', 'red'];
+ var outputName;
+ colors.forEach (function (color) {
+ outputName = color === defaultColor ? 'app.css' : 'app-' + color + ".css";
+ mix.copy ('resources/assets/sass/admin/_themes/' + color + '-theme.scss', 'public/css/admin/theme.scss')
+ .sass ([
+ 'admin/**/!(_imports|_variables|*-theme)*.scss',
+ '../admin/css'
+ ], 'public/css/admin/' + outputName, null, {includePaths: ['bower_components', 'resources/assets/sass/admin']})
+ })
// vendor files
mix
@@ -13,27 +26,14 @@ elixir (function (mix) {
'tinycolor/dist/tinycolor-min.js',
'chart.js/dist/Chart.bundle.min.js',
'jquery.are-you-sure/jquery.are-you-sure.js',
- '../resources/assets/admin/js/app.js',
- ], 'public/js/vendor.js', 'bower_components');
-
- var defaultColor = "green";
- var colors = ["blue", "seagreen", 'orange', "green", 'purple', 'red'];
- var outputName;
- colors.forEach (function (color) {
- outputName = color == defaultColor ? 'app.css' : 'app-' + color + ".css";
- mix.copy ('resources/assets/sass/admin/_themes/' + color + '-theme.scss', 'public/css/admin/theme.scss');
- mix.sass ([
- 'admin/**/!(_imports|_variables|*-theme)*.scss',
- '../admin/css/custom.css'
-
- ], 'public/css/admin/' + outputName, null, {includePaths: ['bower_components', 'resources/assets/sass/admin']});
- })
-
- mix.copy ('bower_components/font-awesome/css/font-awesome.min.css', 'public/css');
- mix.copy ('bower_components/font-awesome/fonts', 'public/fonts');
- mix.sass (['bootstrap/bootstrap.scss'], 'public/css/admin/bootstrap.css');
- mix.styles ([
- '../../../public/css/admin/bootstrap.css',
- '../../../bower_components/animate.css/animate.css',
- ], 'public/css/admin/style.css');
+ '../resources/assets/admin/js/*.js',
+ ], 'public/js/vendor.js', 'bower_components')
+ .copy ('bower_components/font-awesome/css/font-awesome.min.css', 'public/css')
+ .copy ('bower_components/font-awesome/fonts', 'public/fonts')
+ .sass (['bootstrap/bootstrap.scss'], 'public/css/admin/bootstrap.css')
+ .styles ([
+ '../../../public/css/admin/bootstrap.css',
+ '../../../bower_components/animate.css/animate.css',
+ ], 'public/css/admin/style.css')
+ .remove ('public/css/admin/theme.scss');
});
diff --git a/index.php b/index.php
index 48384dc5..3fc4bbdc 100644
--- a/index.php
+++ b/index.php
@@ -16,5 +16,4 @@ if ($uri !== '/' && file_exists(__DIR__ . '/public' . $uri)) {
return false;
}
-require_once __DIR__ . '/app/CMS/Helpers/functions.php';
require_once __DIR__ . '/public/index.php';
diff --git a/modules/Blog/Article/Config/config.php b/modules/Blog/Article/Config/config.php
deleted file mode 100644
index fb19fdc4..00000000
--- a/modules/Blog/Article/Config/config.php
+++ /dev/null
@@ -1,12 +0,0 @@
- 'Articles',
- 'translatedName' => 'article::module.name',
- 'translatedDescription' => 'article::module.description',
- 'alias' => 'article',
- 'handler' => \Modules\Blog\Article\Handlers\Article::class,
- 'providers' => [\Modules\Blog\Article\Providers\ArticleServiceProvider::class],
- 'files' => ['start.php'],
- 'order' => 0,
-];
\ No newline at end of file
diff --git a/modules/Blog/Article/Entities/Article.php b/modules/Blog/Article/Entities/Article.php
deleted file mode 100644
index 1222a7bb..00000000
--- a/modules/Blog/Article/Entities/Article.php
+++ /dev/null
@@ -1,15 +0,0 @@
-hasMany(Comment::class, 'content_id')
- ->where('approved', true);
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Entities/Comment.php b/modules/Blog/Article/Entities/Comment.php
deleted file mode 100644
index 25a5e4f8..00000000
--- a/modules/Blog/Article/Entities/Comment.php
+++ /dev/null
@@ -1,27 +0,0 @@
-belongsTo(User::class, 'user_id');
- }
-
- public function article()
- {
- return $this->belongsTo(Content::class, 'content_id');
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Events/ApprovedComment.php b/modules/Blog/Article/Events/ApprovedComment.php
deleted file mode 100644
index 3fab72bc..00000000
--- a/modules/Blog/Article/Events/ApprovedComment.php
+++ /dev/null
@@ -1,20 +0,0 @@
-comment = $comment;
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Events/CreatedComment.php b/modules/Blog/Article/Events/CreatedComment.php
deleted file mode 100644
index d21f685b..00000000
--- a/modules/Blog/Article/Events/CreatedComment.php
+++ /dev/null
@@ -1,20 +0,0 @@
-comment = $comment;
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Events/DeletedComment.php b/modules/Blog/Article/Events/DeletedComment.php
deleted file mode 100644
index 048341ab..00000000
--- a/modules/Blog/Article/Events/DeletedComment.php
+++ /dev/null
@@ -1,20 +0,0 @@
-comment = $comment;
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Handlers/Article.php b/modules/Blog/Article/Handlers/Article.php
deleted file mode 100644
index 9a2b2615..00000000
--- a/modules/Blog/Article/Handlers/Article.php
+++ /dev/null
@@ -1,153 +0,0 @@
-whereTitle(trans('article::module.blog'));
- if (!$blogSubmenu) {
- $blogSubmenu = $menu->dropdown(trans('article::module.blog'), function ($sub) {
- }, 20, ['icon' => 'fa fa-fw fa-book']);
- }
-
- $blogSubmenu->dropdown(trans('article::module.name'), function ($sub) {
- $sub->route('content.new', trans('article::article.new'), ['id' => config('article.alias')], 10, ['icon' => 'fa fa-fw fa-pencil']);
- $sub->route('content.overview', trans('article::article.overview'), ['id' => config('article.alias')], 30, ['icon' => 'fa fa-fw fa-book']);
- }, 10, ['icon' => 'fa fa-fw fa-book']);
-
- $blogSubmenu->route('comments.overview', trans('article::module.commentsOverview'), [], 20, ['icon' => 'fa fa-fw fa-commenting-o']);
- }
-
- /**
- * Install module
- */
- public static function install()
- {
- $types = [
- [
- 'string_id' => 'commentCreated',
- 'name' => 'article::comments.events.names.commentCreated',
- 'value' => 'article::comments.events.descriptions.commentCreated',
- ],
- [
- 'string_id' => 'commentDeleted',
- 'name' => 'article::comments.events.names.commentDeleted',
- 'value' => 'article::comments.events.descriptions.commentDeleted',
- ],
- [
- 'string_id' => 'commentApproved',
- 'name' => 'article::comments.events.names.commentApproved',
- 'value' => 'article::comments.events.descriptions.commentApproved',
- ],
-
- ];
- foreach ($types as $type) {
- ActionLogType::create($type);
- }
- }
-
- /**
- * Uninstalls module
- *
- * @param Module $module
- *
- * @return mixed|void
- */
- public static function uninstall(Module $module)
- {
- ActionLogType::whereIn('string_id', ['commentCreated', 'commentDeleted', 'commentApproved'])
- ->delete();
- }
-
- /**
- * Get translated title for pages overview of given type.
- *
- * This value is used for rendering list of all content pages of given type in administration.
- *
- * @return string
- */
- public static function getOverviewTitle()
- {
- return trans('article::module.allArticles');
- }
-
- /**
- * Title displayed above for for creating new content page
- *
- * @return string
- */
- public static function getCreateNewTitle()
- {
- return trans('article::module.newArticle');
- }
-
- /**
- * Title for form displayed for editin content page
- *
- * @param Content $content
- *
- * @return mixed
- */
- public static function getEditTitle(Content $content)
- {
- return trans('article::module.editArticle');
- }
-
- /**
- * Method called right after content page is marked as deleted
- *
- * This method is supposed to clean after "deleted" page.
- *
- * @param Content $content
- *
- * @return mixed
- */
- public static function delete(Content $content)
- {
- }
-
- /**
- * Does this module support categories?
- *
- * @return boolean
- */
- public static function supportCategories()
- {
- return true;
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Http/Controllers/Admin/CommentsOverview.php b/modules/Blog/Article/Http/Controllers/Admin/CommentsOverview.php
deleted file mode 100644
index 9293d2b1..00000000
--- a/modules/Blog/Article/Http/Controllers/Admin/CommentsOverview.php
+++ /dev/null
@@ -1,19 +0,0 @@
-with('author')
- ->orderBy('approved')
- ->orderBy('created_at', 'DESC')
- ->paginate(25);
-
- return view('article::admin/comments.overview', ['comments' => $comments]);
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Http/Controllers/Admin/EditComment.php b/modules/Blog/Article/Http/Controllers/Admin/EditComment.php
deleted file mode 100644
index 969f845d..00000000
--- a/modules/Blog/Article/Http/Controllers/Admin/EditComment.php
+++ /dev/null
@@ -1,37 +0,0 @@
-approved = 1;
- $comment->save();
-
- Event::fire(new ApprovedComment($comment));
-
- return redirect()
- ->back()
- ->with('success', trans('article::comments.approved'));
- }
-
- public function delete($id)
- {
- $comment = Comment::findOrFail($id);
-
- Event::fire(new DeletedComment($comment));
-
- $comment->delete();
-
- return redirect()
- ->back()
- ->with('success', trans('article::comments.deleted'));
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Http/Controllers/Visitor/CreateNewComment.php b/modules/Blog/Article/Http/Controllers/Visitor/CreateNewComment.php
deleted file mode 100644
index c274f653..00000000
--- a/modules/Blog/Article/Http/Controllers/Visitor/CreateNewComment.php
+++ /dev/null
@@ -1,48 +0,0 @@
-moduleSettings['allowComments']) || !$article->moduleSettings['allowComments']) {
- return redirect()
- ->route('page.content', ['url' => $article->url])
- ->with('error', trans('article::comments.disabledComments'));
- }
-
- $content = $request->message;
- $user = Auth::user();
- if ($user) {
- $name = is_null($user->name) ? $user->email : $user->name;
- $email = $user->email;
- } else {
- $name = $request->name;
- $email = $request->email;
- }
-
- $comment = Comment::create([
- 'user_id' => $user ? $user->id : null,
- 'content_id' => $article->id,
- 'name' => $name,
- 'email' => $email,
- 'content' => $content,
- 'approved' => !is_null($user)
- ]);
-
- // fire event about new comment
- Event::fire(new CreatedComment($comment));
-
- return redirect()
- ->route('page.content', ['url' => $article->url])
- ->with('success', trans('article::comments.saved'));
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Http/Requests/CreateNewComment.php b/modules/Blog/Article/Http/Requests/CreateNewComment.php
deleted file mode 100644
index 18044f43..00000000
--- a/modules/Blog/Article/Http/Requests/CreateNewComment.php
+++ /dev/null
@@ -1,28 +0,0 @@
- 'required'];
-
- if (!$user) {
- $required['name'] = 'required';
- $required['email'] = 'required|email';
- }
-
- return $required;
- }
-}
diff --git a/modules/Blog/Article/Http/routes.php b/modules/Blog/Article/Http/routes.php
deleted file mode 100644
index 145c30ba..00000000
--- a/modules/Blog/Article/Http/routes.php
+++ /dev/null
@@ -1,28 +0,0 @@
- LaravelLocalization::setLocale(),
- 'namespace' => 'Modules\Blog\Article\Http\Controllers'
- ], function () {
- Route::group([
- 'middleware' => ['admin'],
- 'prefix' => 'admin/comments',
- 'namespace' => 'Admin'
- ], function () {
-
- Route::get('/', 'CommentsOverview@getOverview')
- ->name('comments.overview');
-
- Route::get('/delete/{id}', 'EditComment@delete')
- ->name('comments.delete');
-
- Route::get('/approve/{id}', 'EditComment@approve')
- ->name('comments.approve');
- });
-
- // public routes
- Route::group(['middleware' => ['web'], 'namespace' => 'Visitor'], function () {
-
- Route::post('comments/new/{article}', 'CreateNewComment@store')
- ->name('comments.new');
- });
-});
\ No newline at end of file
diff --git a/modules/Blog/Article/Listeners/LogCommentApproval.php b/modules/Blog/Article/Listeners/LogCommentApproval.php
deleted file mode 100644
index 2ff4f14b..00000000
--- a/modules/Blog/Article/Listeners/LogCommentApproval.php
+++ /dev/null
@@ -1,35 +0,0 @@
- $event->comment->name,
- 'email' => $event->comment->email,
- 'content' => $event->comment->content
- ];
-
- $this->saveLog($parameters);
- }
-
- /**
- * Getter for action name. Used only internally
- *
- * @return mixed
- */
- protected function getName()
- {
- return 'commentApproved';
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Listeners/LogDeletedComment.php b/modules/Blog/Article/Listeners/LogDeletedComment.php
deleted file mode 100644
index 0a016e0c..00000000
--- a/modules/Blog/Article/Listeners/LogDeletedComment.php
+++ /dev/null
@@ -1,35 +0,0 @@
- $event->comment->name,
- 'email' => $event->comment->email,
- 'content' => $event->comment->content
- ];
-
- $this->saveLog($parameters);
- }
-
- /**
- * Getter for action name. Used only internally
- *
- * @return mixed
- */
- protected function getName()
- {
- return 'commentDeleted';
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Listeners/LogNewComment.php b/modules/Blog/Article/Listeners/LogNewComment.php
deleted file mode 100644
index d2e6e313..00000000
--- a/modules/Blog/Article/Listeners/LogNewComment.php
+++ /dev/null
@@ -1,40 +0,0 @@
-comment->user_id) {
- return;
- }
-
- $parameters = [
- 'author' => $event->comment->name,
- 'email' => $event->comment->email,
- 'content' => $event->comment->content
- ];
-
- $this->saveLog($parameters);
- }
-
- /**
- * Getter for action name. Used only internally
- *
- * @return mixed
- */
- protected function getName()
- {
- return 'commentCreated';
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Modificators/PerexCreator.php b/modules/Blog/Article/Modificators/PerexCreator.php
deleted file mode 100644
index ad76b0be..00000000
--- a/modules/Blog/Article/Modificators/PerexCreator.php
+++ /dev/null
@@ -1,60 +0,0 @@
-DOMDocument = new \DOMDocument('1.0', 'UTF-8');
- $this->maxLength = 300;
- $this->maxImages = 2;
- $this->perex = '';
- }
-
- private function addHtml($node)
- {
- $this->perex .= strip_tags($this->DOMDocument->saveHTML($node), '');
- }
-
- public function create($html)
- {
- if (empty($html)) {
- return null;
- }
-
- $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
- $this->DOMDocument->loadHTML($html);
-
- $texts = $this->DOMDocument->getElementsByTagName('p');
- $images = $this->DOMDocument->getElementsByTagName('img');
- $iframes = $this->DOMDocument->getElementsByTagName('iframe');
-
- $textId = 0;
- $imgId = 0;
- if ($texts->length > 1) {
- $this->addHtml($texts[$textId++]);
- }
-
- if (mb_strlen($this->perex) < $this->maxLength) {
- if ($iframes->length > 0) {
- $this->perex .= $this->DOMDocument->saveHTML($iframes[0]);
- } elseif ($images->length > 0) {
- while ($imgId < $images->length && $imgId < $this->maxImages) {
- $this->perex .= $this->DOMDocument->saveHTML($images[$imgId++]);
- }
- } else {
- while (mb_strlen($this->perex) < $this->maxLength && $textId < $texts->length) {
- $this->addHtml($texts[$textId++]);
- }
- }
- }
-
- return $this->perex;
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Pipeline/DisplayContent/LoadCommentsForBlogpost.php b/modules/Blog/Article/Pipeline/DisplayContent/LoadCommentsForBlogpost.php
deleted file mode 100644
index 575f9249..00000000
--- a/modules/Blog/Article/Pipeline/DisplayContent/LoadCommentsForBlogpost.php
+++ /dev/null
@@ -1,33 +0,0 @@
-moduleHandler != Article::class)
- return;
-
- $content->comments = new Collection();
- if (isset($content->moduleSettings['allowComments']) && $content->moduleSettings['allowComments']) {
- $content->comments = Comment::where('content_id', $content->id)
- ->with('author')
- ->where('approved', 1)
- ->orderBy('created_at')
- ->get();
- }
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Pipeline/SaveContent/TurnCommentsOnOrOff.php b/modules/Blog/Article/Pipeline/SaveContent/TurnCommentsOnOrOff.php
deleted file mode 100644
index f52e4bc1..00000000
--- a/modules/Blog/Article/Pipeline/SaveContent/TurnCommentsOnOrOff.php
+++ /dev/null
@@ -1,29 +0,0 @@
-moduleHandler, '\\') !== Article::class) {
- return;
- }
-
- $settings = $content->moduleSettings;
- $settings['allowComments'] = isset($input['allowComments']) ? (int)$input['allowComments'] : 0;
- $content->moduleSettings = $settings;
- $content->save();
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Providers/ArticleEventServiceProvider.php b/modules/Blog/Article/Providers/ArticleEventServiceProvider.php
deleted file mode 100644
index 1004bfd3..00000000
--- a/modules/Blog/Article/Providers/ArticleEventServiceProvider.php
+++ /dev/null
@@ -1,36 +0,0 @@
- [LogCommentApproval::class],
- DeletedComment::class => [LogDeletedComment::class],
- CreatedComment::class => [LogNewComment::class],
- ];
-
- public function boot(DispatcherContract $events)
- {
- parent::boot($events);
- }
-
- protected function setModulePath()
- {
- $this->path = __DIR__;
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/Article/Providers/ArticleServiceProvider.php b/modules/Blog/Article/Providers/ArticleServiceProvider.php
deleted file mode 100644
index bae25fe8..00000000
--- a/modules/Blog/Article/Providers/ArticleServiceProvider.php
+++ /dev/null
@@ -1,35 +0,0 @@
-app->register(ArticleEventServiceProvider::class);
-
- // load comments for blogpost
- app('displayPipeline')->add(LoadCommentsForBlogpost::class);
-
- app('saveContentPipeline')->add(TurnCommentsOnOrOff::class);
- }
-
- protected function setModuleAlias()
- {
- $this->alias = 'article';
- }
-
- protected function setModulePath()
- {
- $this->path = __DIR__;
- }
-}
diff --git a/modules/Blog/Article/Resources/lang/cs/article.php b/modules/Blog/Article/Resources/lang/cs/article.php
deleted file mode 100644
index fd1c65c6..00000000
--- a/modules/Blog/Article/Resources/lang/cs/article.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Povolit komentáře?",
-"new" => "Napsat",
-"overview" => "Všechny články",
-];
diff --git a/modules/Blog/Article/Resources/lang/cs/comments.php b/modules/Blog/Article/Resources/lang/cs/comments.php
deleted file mode 100644
index fa9aca67..00000000
--- a/modules/Blog/Article/Resources/lang/cs/comments.php
+++ /dev/null
@@ -1,22 +0,0 @@
- "Schválit komentář a zobrazovat ho u článku",
- "approved" => "Komentář úspěšně schválen",
- "commentedArticle" => "Komentovaný článek",
- "createdAt" => "Vloženo :date",
- "deleted" => "Komentář smazán",
- "events" => [
- "descriptions" => [
- "commentApproved" => "Schválen komentář od autora :authro (:email) s následujícím obsahem: :content",
- "commentCreated" => "Přidán komentář od autora :author (e-mail :e-mail) s následujícím obsahem: :content",
- "commentDeleted" => "Smazán komentář od autora :author (:email) s následujícím obsahem: :content",
- ],
- "names" => [
- "commentApproved" => "Komentář schválen",
- "commentCreated" => "Komentář úspěšně přidán.",
- "commentDeleted" => "Smazán komentář",
- ],
- ],
- "noComments" => "Nejsou dostupné žádné komentáře",
- "unknownArticle" => "Neznámý článek",
-];
diff --git a/modules/Blog/Article/Resources/lang/cs/module.php b/modules/Blog/Article/Resources/lang/cs/module.php
deleted file mode 100644
index 22653cac..00000000
--- a/modules/Blog/Article/Resources/lang/cs/module.php
+++ /dev/null
@@ -1,12 +0,0 @@
- "Všechny články",
- "blog" => "Blog",
- "comments" => "Komentáře",
- "commentsOverview" => "Všechny komentáře",
- "description" => "Základní submodul pro blog. Tento modul umožňuje psát články.",
- "editArticle" => "Upravuji článek",
- "name" => "Články",
- "newArticle" => "Napsat nový článek",
- "templatePath" => "Články",
-];
diff --git a/modules/Blog/Article/Resources/lang/en/article.php b/modules/Blog/Article/Resources/lang/en/article.php
deleted file mode 100644
index 2d1e8b44..00000000
--- a/modules/Blog/Article/Resources/lang/en/article.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'Allow comments?',
- 'new' => 'Write new',
- 'overview' => 'All articles'
-];
\ No newline at end of file
diff --git a/modules/Blog/Article/Resources/lang/en/comments.php b/modules/Blog/Article/Resources/lang/en/comments.php
deleted file mode 100644
index de5e7301..00000000
--- a/modules/Blog/Article/Resources/lang/en/comments.php
+++ /dev/null
@@ -1,22 +0,0 @@
- 'Created at :date',
- 'commentedArticle' => 'Article',
- 'approve' => 'Approve comment',
- 'approved' => 'Comment successfully approved',
- 'deleted' => 'Comment deleted',
- 'unknownArticle' => 'Unknown article',
- 'noComments' => 'No comments available',
- 'events' => [
- 'names' => [
- 'commentCreated' => 'Added comment',
- 'commentApproved' => 'Approved comment',
- 'commentDeleted' => 'Deleted comment',
- ],
- 'descriptions' => [
- 'commentCreated' => 'Added comment from author :author with e-mail :email and following content: :content',
- 'commentApproved' => 'Approved comment from author :author with e-mail :email and following content: :content',
- 'commentDeleted' => 'Deleted comment from author :author with e-mail :email and following content: :content',
- ],
- ]
-];
\ No newline at end of file
diff --git a/modules/Blog/Article/Resources/lang/en/module.php b/modules/Blog/Article/Resources/lang/en/module.php
deleted file mode 100644
index 1e272945..00000000
--- a/modules/Blog/Article/Resources/lang/en/module.php
+++ /dev/null
@@ -1,12 +0,0 @@
- 'Articles',
- 'description' => 'Base submodule for blog',
- 'comments' => 'Comments',
- 'commentsOverview' => 'All comments',
- 'blog' => 'Blog',
- 'allArticles' => 'All articles',
- 'newArticle' => 'Write new article',
- 'editArticle' => 'Editing article',
- 'templatePath' => 'Articles',
-];
\ No newline at end of file
diff --git a/modules/Blog/Article/Resources/lang/sk/article.php b/modules/Blog/Article/Resources/lang/sk/article.php
deleted file mode 100644
index 2a3ce3a6..00000000
--- a/modules/Blog/Article/Resources/lang/sk/article.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Povoliť komentáre?",
- "new" => " Napísať nový",
- "overview" => "Všetky články",
-];
diff --git a/modules/Blog/Article/Resources/lang/sk/comments.php b/modules/Blog/Article/Resources/lang/sk/comments.php
deleted file mode 100644
index 5bde58a3..00000000
--- a/modules/Blog/Article/Resources/lang/sk/comments.php
+++ /dev/null
@@ -1,8 +0,0 @@
- "Schváliť komentár",
- "approved" => "Komentár úspešne schválený.",
- "commentedArticle" => "Článok",
- "createdAt" => "Vytvorené: :date",
- "deleted" => "Komentár zmazaný.",
-];
diff --git a/modules/Blog/Article/Resources/lang/sk/module.php b/modules/Blog/Article/Resources/lang/sk/module.php
deleted file mode 100644
index 04b574c0..00000000
--- a/modules/Blog/Article/Resources/lang/sk/module.php
+++ /dev/null
@@ -1,9 +0,0 @@
- "Všetky články",
- "blog" => "Blog",
- "comments" => "Komentáre",
- "commentsOverview" => "Všetky komentáre",
- "description" => "Základný submodul pre blog",
- "name" => "Články",
-];
diff --git a/modules/Blog/Article/Resources/views/admin/comments/overview.blade.php b/modules/Blog/Article/Resources/views/admin/comments/overview.blade.php
deleted file mode 100644
index adccff8f..00000000
--- a/modules/Blog/Article/Resources/views/admin/comments/overview.blade.php
+++ /dev/null
@@ -1,56 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', trans('article::module.comments'))
-
-@section('content')
- @if (count($comments))
- @foreach($comments as $comment)
-
-
- @endforeach
- @else
-
- @lang('article::comments.noComments')
-
- @endif
-@endsection
\ No newline at end of file
diff --git a/modules/Blog/Article/Resources/views/admin/content/basicInfo.blade.php b/modules/Blog/Article/Resources/views/admin/content/basicInfo.blade.php
deleted file mode 100644
index dd808110..00000000
--- a/modules/Blog/Article/Resources/views/admin/content/basicInfo.blade.php
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
- @foreach($contentStatuses as $status => $translation)
- status) == $status) selected @endif>
- {{$translation}}
-
- @endforeach
-
-
- @include('admin.snippets.hasError', ['field' => 'status'])
-
-
-
- @lang('admin/contents.noParentPage')
-
- @foreach($rootPages as $rootPage)
- parentId) == $rootPage->id) selected @endif>
- {{$rootPage->title}}
-
- @endforeach
-
-
- @include('admin.snippets.hasError', ['field' => 'parentPage'])
-
-
-
-
- moduleSettings->allowComments) ? $page->moduleSettings->allowComments : true)) checked
- @endif name="allowComments" type="checkbox">
- @lang('article::article.allowComments')
-
-
-
- @if($module->support_categories && count($categories))
-
-
- @lang('admin/contents.noCategory')
- @foreach($categories as $category)
- id == old('categoryId', $page->categoryId)) selected @endif>
- {{str_repeat(' - ', $category->real_depth)}} {{$category->name}}
-
- @endforeach
-
-
- @endif
-
-
-
-
-
-
-
-
diff --git a/modules/Blog/Article/start.php b/modules/Blog/Article/start.php
deleted file mode 100644
index 7d8ae759..00000000
--- a/modules/Blog/Article/start.php
+++ /dev/null
@@ -1,15 +0,0 @@
- 'Article list',
- 'translatedName' => 'articlelist::module.name',
- 'translatedDescription' => 'articlelist::module.description',
- 'alias' => 'articlelist',
- 'handler' => \Modules\Blog\ArticleList\Handlers\ArticleList::class,
- 'providers' => [\Modules\Blog\ArticleList\Providers\ArticleListServiceProvider::class],
- 'files' => ['start.php'],
- 'order' => 0,
-];
\ No newline at end of file
diff --git a/modules/Blog/ArticleList/Handlers/ArticleList.php b/modules/Blog/ArticleList/Handlers/ArticleList.php
deleted file mode 100644
index 2f67d703..00000000
--- a/modules/Blog/ArticleList/Handlers/ArticleList.php
+++ /dev/null
@@ -1,28 +0,0 @@
-whereTitle(trans('article::module.blog'));
- if (!$blogSubmenu) {
- $blogSubmenu = $menu->dropdown(trans('article::module.blog'), function ($sub) {
- }, 20, ['icon' => 'fa fa-fw fa-book']);
- }
-
- $blogSubmenu->route('content.new', trans('articlelist::module.name'), ['id' => config('articlelist.alias')], 100, ['icon' => 'fa fa-fw fa-list-alt']);
- }
-
- public static function supportCategories()
- {
- return false;
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/ArticleList/Http/Controllers/.gitkeep b/modules/Blog/ArticleList/Http/Controllers/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/modules/Blog/ArticleList/Http/Controllers/ArticleListController.php b/modules/Blog/ArticleList/Http/Controllers/ArticleListController.php
deleted file mode 100644
index df742323..00000000
--- a/modules/Blog/ArticleList/Http/Controllers/ArticleListController.php
+++ /dev/null
@@ -1,12 +0,0 @@
-moduleHandler != ArticleList::class)
- return;
-
- $articles = ArticleModel::where('moduleHandler', Article::class)
- ->with('comments')
- ->with('category')
- ->where(function ($query) {
- $query->where('publishedFrom', '<', Carbon::now())
- ->orWhereNull('publishedFrom');
- })
- ->where(function ($query) {
- $query->where('publishedTo', '>', Carbon::now())
- ->orWhereNull('publishedTo');
- })
- ->orderBy('publishedFrom', 'DESC')
- ->orderBy('created_at', 'DESC');
-
- // show articles for not-logged users of even for logged onew?
- $articles = !Auth::user() ? $articles->where('status', IContent::STATUS_PUBLIC) : $articles->whereIn('status', [
- IContent::STATUS_PUBLIC,
- IContent::STATUS_PROTECTED
- ]);
-
- // selected articles from archive?
- $this->archive($articles);
-
- // is given any category?
- $this->category($articles);
-
- // show articles only from specified user
- $author = Input::get('author');
- if ($author) {
- $user = User::findOrFail($author);
-
- $articles = $articles->where('user_id', $user->id);
- }
-
- $page->articles = $articles->paginate(setting('articlesPerPage', 20));
- }
-
- /**
- * Filter articles on article list using archive
- *
- * @param $articles
- */
- protected function archive(&$articles)
- {
- $year = Input::get('y');
- $month = Input::get('m');
- $day = Input::get('d');
-
- if ($year) {
- $articles = $articles->where(DB::raw('YEAR(created_at)'), $year);
- }
-
- if ($month) {
- $articles = $articles->where(DB::raw('MONTH(created_at)'), $month);
- }
-
- if ($day) {
- $articles = $articles->where(DB::raw('DAY(created_at)'), $day);
- }
- }
-
- /**
- * Filter article list to some specified category
- *
- * Category URL is specified as GET attribute "category"
- *
- * @param $articles
- */
- protected function category(&$articles)
- {
- $categoryUrl = Input::get('category');
-
- $categoriesEnabled = \Module::get('Categories')
- ->enabled();
-
- if ($categoryUrl && $categoriesEnabled) {
- $category = Category::where('url', $categoryUrl)
- ->firstOrFail();
-
- $subcategories = $category->getChildren()
- ->toArray();
-
- $categories = [$category->id];
- $categories = array_merge($categories, array_map(function ($cat) {
- return $cat['id'];
- }, $subcategories));
-
- $articles = $articles->whereIn('category_id', $categories);
- }
- }
-}
\ No newline at end of file
diff --git a/modules/Blog/ArticleList/Providers/ArticleListServiceProvider.php b/modules/Blog/ArticleList/Providers/ArticleListServiceProvider.php
deleted file mode 100644
index 75fea4ae..00000000
--- a/modules/Blog/ArticleList/Providers/ArticleListServiceProvider.php
+++ /dev/null
@@ -1,24 +0,0 @@
-alias = 'articlelist';
- }
-
- protected function setModulePath()
- {
- $this->path = __DIR__;
- }
-
- public function boot()
- {
- parent::boot();
-
- app('displayPipeline')->add(LoadArticlesForList::class);
- }
-}
diff --git a/modules/Blog/ArticleList/Resources/lang/cs/module.php b/modules/Blog/ArticleList/Resources/lang/cs/module.php
deleted file mode 100644
index 09d24c67..00000000
--- a/modules/Blog/ArticleList/Resources/lang/cs/module.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Modul pro zobrazování seznamu článků na webu.",
- "name" => "Seznam článků",
- "templatePath" => "Seznam článků",
-];
diff --git a/modules/Blog/ArticleList/Resources/lang/en/module.php b/modules/Blog/ArticleList/Resources/lang/en/module.php
deleted file mode 100644
index 98b22ac7..00000000
--- a/modules/Blog/ArticleList/Resources/lang/en/module.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'Article list',
- 'description' => 'Module for displaying list of articles on web',
- 'templatePath' => 'Article list',
-];
\ No newline at end of file
diff --git a/modules/Blog/ArticleList/Resources/lang/sk/module.php b/modules/Blog/ArticleList/Resources/lang/sk/module.php
deleted file mode 100644
index 2e2a64c4..00000000
--- a/modules/Blog/ArticleList/Resources/lang/sk/module.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Modul pre zobrazenie zoznamu článkov na webe",
- "name" => "Zoznam článkov",
-];
diff --git a/modules/Blog/ArticleList/Resources/views/admin/.gitkeep b/modules/Blog/ArticleList/Resources/views/admin/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/modules/Blog/ArticleList/start.php b/modules/Blog/ArticleList/start.php
deleted file mode 100644
index 7d8ae759..00000000
--- a/modules/Blog/ArticleList/start.php
+++ /dev/null
@@ -1,15 +0,0 @@
-increments('id');
- $table->timestamps();
- $table->integer('user_id')
- ->nullable(true)
- ->default(null)
- ->comment('When comment was inserted by logged user, save his ID here');
- $table->integer('content_id');
- $table->string('email');
- $table->string('name');
- $table->text('content');
- $table->boolean('approved');
-
- $table->foreign('content_id')
- ->references('id')
- ->on('contents')
- ->onDelete('cascade')
- ->onUpdate('cascade');
-
- $table->foreign('user_id')
- ->references('id')
- ->on('users')
- ->onDelete('set null')
- ->onUpdate('cascade');
- });
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Schema::drop('comments');
- }
-}
diff --git a/modules/Blog/Database/Migrations/2017_02_10_124658_update_alias_for_subdomodules.php b/modules/Blog/Database/Migrations/2017_02_10_124658_update_alias_for_subdomodules.php
deleted file mode 100644
index 76970aeb..00000000
--- a/modules/Blog/Database/Migrations/2017_02_10_124658_update_alias_for_subdomodules.php
+++ /dev/null
@@ -1,34 +0,0 @@
-update(['alias' => 'articlelist']);
- Module::where('alias', 'blog-article')
- ->update(['alias' => 'article']);
- }
-
- /**
- * Reverse the migrations.
- *
- * @return void
- */
- public function down()
- {
- Module::where('alias', 'articlelist')
- ->update(['alias' => 'blog-articlelist']);
- Module::where('alias', 'article')
- ->update(['alias' => 'blog-article']);
- }
-}
diff --git a/modules/Blog/info.php b/modules/Blog/info.php
deleted file mode 100644
index 0c426fe5..00000000
--- a/modules/Blog/info.php
+++ /dev/null
@@ -1,7 +0,0 @@
- 'Blog',
- 'translatedName' => 'article::module.blog',
- 'description' => 'article.module.blogDescription',
- 'hasSubmodules' => true,
-];
\ No newline at end of file
diff --git a/modules/Categories/Config/config.php b/modules/Categories/Config/config.php
deleted file mode 100644
index 5b050b72..00000000
--- a/modules/Categories/Config/config.php
+++ /dev/null
@@ -1,12 +0,0 @@
- 'Categories',
- 'translatedName' => 'categories::module.name',
- 'translatedDescription' => 'categories::module.description',
- 'alias' => 'categories',
- 'handler' => \Modules\Categories\Handlers\Categories::class,
- 'providers' => [\Modules\Categories\Providers\CategoriesServiceProvider::class],
- 'files' => ['start.php'],
- 'order' => 0,
-];
\ No newline at end of file
diff --git a/modules/Categories/Contracts/Repositories/Category.php b/modules/Categories/Contracts/Repositories/Category.php
deleted file mode 100644
index ea344d3d..00000000
--- a/modules/Categories/Contracts/Repositories/Category.php
+++ /dev/null
@@ -1,9 +0,0 @@
-increments('id');
- $table->timestamps();
- $table->softDeletes();
- $table->integer('parent_id')
- ->unsigned()
- ->nullable();
- $table->integer('position', false, true);
- $table->integer('real_depth', false, true);
- $table->integer('user_id')
- ->comment('Author of this category');
- $table->integer('module_id')
- ->comment('ID of module, where this category is used');
- $table->string('name')
- ->comment('Human readable name of category');
- $table->string('url')
- ->index()
- ->comment('URL slug of category');
- $table->text('description');
-
- $table->unique(['url', 'module_id']);
- });
-
- Schema::table('categories', function (Blueprint $table) {
- $table->foreign('parent_id')
- ->references('id')
- ->on('categories')
- ->onDelete('set null');
-
- $table->foreign('user_id')
- ->references('id')
- ->on('users')
- ->onDelete('cascade')
- ->onUpdate('cascade');
-
- $table->foreign('module_id')
- ->references('id')
- ->on('modules')
- ->onDelete('cascade')
- ->onUpdate('cascade');
- });
- }
-
- public function down()
- {
- Schema::table('categories', function (Blueprint $table) {
- Schema::dropIfExists('categories');
- });
- }
-}
diff --git a/modules/Categories/Database/Migrations/2016_08_10_204046_create_category_closures_table.php b/modules/Categories/Database/Migrations/2016_08_10_204046_create_category_closures_table.php
deleted file mode 100644
index d580f81a..00000000
--- a/modules/Categories/Database/Migrations/2016_08_10_204046_create_category_closures_table.php
+++ /dev/null
@@ -1,35 +0,0 @@
-increments('closure_id');
-
- $table->integer('ancestor', false, true);
- $table->integer('descendant', false, true);
- $table->integer('depth', false, true);
-
- $table->foreign('ancestor')
- ->references('id')
- ->on('categories')
- ->onDelete('cascade');
- $table->foreign('descendant')
- ->references('id')
- ->on('categories')
- ->onDelete('cascade');
- });
- }
-
- public function down()
- {
- Schema::table('category_closure', function (Blueprint $table) {
- Schema::dropIfExists('category_closure');
- });
- }
-}
diff --git a/modules/Categories/Database/Seeders/.gitkeep b/modules/Categories/Database/Seeders/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/modules/Categories/Database/Seeders/CategoriesDatabaseSeeder.php b/modules/Categories/Database/Seeders/CategoriesDatabaseSeeder.php
deleted file mode 100644
index 5a509fba..00000000
--- a/modules/Categories/Database/Seeders/CategoriesDatabaseSeeder.php
+++ /dev/null
@@ -1,20 +0,0 @@
-call("OthersTableSeeder");
- }
-
-}
\ No newline at end of file
diff --git a/modules/Categories/Entities/Category.php b/modules/Categories/Entities/Category.php
deleted file mode 100644
index f1147b26..00000000
--- a/modules/Categories/Entities/Category.php
+++ /dev/null
@@ -1,33 +0,0 @@
-belongsTo(Module::class);
- }
-
- public function content()
- {
- return $this->hasMany(Content::class, 'categoryId');
- }
-}
diff --git a/modules/Categories/Entities/CategoryClosure.php b/modules/Categories/Entities/CategoryClosure.php
deleted file mode 100644
index bdb3a035..00000000
--- a/modules/Categories/Entities/CategoryClosure.php
+++ /dev/null
@@ -1,14 +0,0 @@
-dropdown(trans('categories::categories.name'), function ($sub) {
- $sub->route('categories.new', trans('categories::categories.new'), [], 10, ['icon' => 'fa fa-fw fa-plus']);
- $sub->route('categories.overview', trans('categories::categories.overview'), [], 30, ['icon' => 'fa fa-fw fa-tags']);
- }, 55, ['icon' => 'fa fa-fw fa-tags']);
- }
-}
\ No newline at end of file
diff --git a/modules/Categories/Http/Controllers/CategoriesOverview.php b/modules/Categories/Http/Controllers/CategoriesOverview.php
deleted file mode 100644
index 741754a8..00000000
--- a/modules/Categories/Http/Controllers/CategoriesOverview.php
+++ /dev/null
@@ -1,23 +0,0 @@
-toArray();
-
- $modules = ModuleNamesWithIds::getWithTranslations();
-
- return view('categories::admin.overview', [
- 'categories' => $categories,
- 'modules' => $modules
- ]);
- }
-}
\ No newline at end of file
diff --git a/modules/Categories/Http/Controllers/CreateNewCategory.php b/modules/Categories/Http/Controllers/CreateNewCategory.php
deleted file mode 100644
index 129f0ec9..00000000
--- a/modules/Categories/Http/Controllers/CreateNewCategory.php
+++ /dev/null
@@ -1,61 +0,0 @@
-toArray();
-
- // get list of modules which supports categories
- $modules = Module::where('enabled', true)
- ->where('support_categories', true)
- ->get();
-
- return view('categories::admin.new', [
- 'category' => new Category(),
- 'categories' => $categories,
- 'modules' => $modules
- ]);
- }
-
- /**
- * Create new category
- *
- * @param Request $request
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function postNew(Request $request)
- {
- $category = new Category();
- $category->user_id = Auth::user()->id;
- $category->module_id = $request->moduleId;
- $category->name = $request->name;
- $category->url = Str::slug($request->url);
- $category->description = $request->description;
-
- if ((int)$request->parentCategory) {
- $category->parent_id = $request->parentCategory;
- }
-
- $category->save();
-
- return redirect()
- ->route('categories.overview')
- ->with('success', trans('categories::categories.saveSuccessfull'));
- }
-}
\ No newline at end of file
diff --git a/modules/Categories/Http/Controllers/EditCategory.php b/modules/Categories/Http/Controllers/EditCategory.php
deleted file mode 100644
index 4ff13b35..00000000
--- a/modules/Categories/Http/Controllers/EditCategory.php
+++ /dev/null
@@ -1,77 +0,0 @@
-toArray();
-
- // get list of modules which supports categories
- $modules = Module::where('enabled', true)
- ->where('support_categories', true)
- ->get();
-
- return view('categories::admin.edit', [
- 'category' => $category,
- 'categories' => $categories,
- 'modules' => $modules
- ]);
- }
-
- /**
- * Create new category
- *
- * @param Request $request
- * @param $id
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function postEdit(Request $request, $id)
- {
- $category = Category::findOrFail($id);
-
- $category->name = $request->name;
- $category->url = Str::slug($request->url);
- $category->description = $request->description;
-
- $category->save();
-
- if ($category->parent_id !== $request->parentCategory) {
- $category->parent_id = empty($request->parentCategory) ? null : $request->parentCategory;
- $category->save();
-
- if (empty($request->parentCategory)) {
- $category->makeRoot($category->position);
- }
- }
-
- return redirect()
- ->route('categories.edit', ['id' => $id])
- ->with('success', trans('categories::categories.saveSuccessfull'));
- }
-
- public function delete($id) {
- $category = Category::findOrFail($id);
-
- $category->delete();
-
- return redirect()
- ->route('categories.overview')
- ->with('success', trans('categories::categories.deleteSuccessfull'));
- }
-}
\ No newline at end of file
diff --git a/modules/Categories/Http/Middleware/.gitkeep b/modules/Categories/Http/Middleware/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/modules/Categories/Http/Requests/.gitkeep b/modules/Categories/Http/Requests/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/modules/Categories/Http/routes.php b/modules/Categories/Http/routes.php
deleted file mode 100644
index 52ff9a1a..00000000
--- a/modules/Categories/Http/routes.php
+++ /dev/null
@@ -1,23 +0,0 @@
- LaravelLocalization::setLocale() . '/admin/categories',
- 'middleware' => ['admin'],
- 'namespace' => 'Modules\Categories\Http\Controllers'
- ], function () {
- Route::get('/', 'CategoriesOverview@getOverview')
- ->name('categories.overview');
-
- Route::get('/new', 'CreateNewCategory@getNew')
- ->name('categories.new');
- Route::post('/new', 'CreateNewCategory@postNew')
- ->name('categories.postNew');
-
- Route::get('/edit/{id}', 'EditCategory@getEdit')
- ->name('categories.edit');
- Route::post('/edit/{id}', 'EditCategory@postEdit')
- ->name('categories.postEdit');
-
- Route::get('/delete/{id}', 'EditCategory@delete')
- ->name('categories.delete');
-});
\ No newline at end of file
diff --git a/modules/Categories/Providers/CategoriesServiceProvider.php b/modules/Categories/Providers/CategoriesServiceProvider.php
deleted file mode 100644
index 970fcc57..00000000
--- a/modules/Categories/Providers/CategoriesServiceProvider.php
+++ /dev/null
@@ -1,26 +0,0 @@
-alias = 'categories';
- }
-
- public function boot()
- {
- parent::boot();
-
- $this->app->bind(ICategory::class, Category::class);
- }
-
- protected function setModulePath()
- {
- $this->path = __DIR__;
- }
-}
diff --git a/modules/Categories/Repositories/Category.php b/modules/Categories/Repositories/Category.php
deleted file mode 100644
index d7c2a452..00000000
--- a/modules/Categories/Repositories/Category.php
+++ /dev/null
@@ -1,22 +0,0 @@
-support_categories && !is_null($categoryModule) && $categoryModule->enabled()) {
- $categories = CategoryModel::where('module_id', $module->id)
- ->get();
- }
-
- return $categories;
- }
-}
\ No newline at end of file
diff --git a/modules/Categories/Resources/lang/cs/categories.php b/modules/Categories/Resources/lang/cs/categories.php
deleted file mode 100644
index 70faf2ea..00000000
--- a/modules/Categories/Resources/lang/cs/categories.php
+++ /dev/null
@@ -1,20 +0,0 @@
- "Akce",
-"deleteSuccessfull" => "Kategorie úspěšně smazána",
-"description" => "Modul pro správu a kategorizaci obsahu.",
-"edit" => "Úprava kategorie",
-"fields" => ["description" => "Popis",
-"module" => "Modul",
-"name" => "Jméno",
-"parentCategory" => "Rodičovská kategorie",
-"save" => "Uložit",
-"url" => "URL",
-],
-"module" => "Modul",
-"name" => "Kategorie",
-"new" => "Nová kategorie",
-"noCategories" => "Žádná vytvořená kategorie.",
-"overview" => "Všechny kategorie",
-"saveSuccessfull" => "Kategorie úspěšně uložena",
-];
diff --git a/modules/Categories/Resources/lang/en/categories.php b/modules/Categories/Resources/lang/en/categories.php
deleted file mode 100644
index a01d847e..00000000
--- a/modules/Categories/Resources/lang/en/categories.php
+++ /dev/null
@@ -1,21 +0,0 @@
- 'Categories',
- 'description' => 'Module for category management and content categorization.',
- 'new' => 'New category',
- 'overview' => 'All categories',
- 'fields' => [
- 'name' => 'Name',
- 'description' => 'Description',
- 'url' => 'URL',
- 'module' => 'Module',
- 'parentCategory' => 'Parent category',
- 'save' => 'Save category'
- ],
- 'edit' => 'Edit category',
- 'saveSuccessfull' => 'Category successfully saved',
- 'deleteSuccessfull' => 'Category successfully deleted',
- 'module' => 'Module',
- 'actions' => 'Actions',
- 'noCategories' => 'No categories available'
-];
\ No newline at end of file
diff --git a/modules/Categories/Resources/lang/sk/categories.php b/modules/Categories/Resources/lang/sk/categories.php
deleted file mode 100644
index ceb9a5dd..00000000
--- a/modules/Categories/Resources/lang/sk/categories.php
+++ /dev/null
@@ -1,20 +0,0 @@
- "Akcie",
- "deleteSuccessfull" => "Kategória úspešne zmazaná.",
- "description" => "Modul pre správu kategórií a kategorizovanie obsahu",
- "edit" => "Upraviť kategóriu",
- "fields" => ["description" => "Popis",
- "module" => "Modul",
- "name" => "Názov",
- "parentCategory" => "Rodičovská kategória",
- "save" => "Uložiť kategóriu",
- "url" => "URL",
- ],
- "module" => "Modul",
- "name" => "Kategórie",
- "new" => "Nová kategória",
- "noCategories" => "Žiadne kategórie nie sú dostupné.",
- "overview" => "Všetky kategórie",
- "saveSuccessfull" => "Kategória úspešne uložená.",
-];
diff --git a/modules/Categories/Resources/views/admin/edit.blade.php b/modules/Categories/Resources/views/admin/edit.blade.php
deleted file mode 100644
index 9f2c69a6..00000000
--- a/modules/Categories/Resources/views/admin/edit.blade.php
+++ /dev/null
@@ -1,7 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', trans('categories::categories.edit'))
-
-@section('content')
- @include('categories::admin.form', ['action' => route('categories.postEdit', ['id' => $category->id])])
-@endsection
\ No newline at end of file
diff --git a/modules/Categories/Resources/views/admin/form.blade.php b/modules/Categories/Resources/views/admin/form.blade.php
deleted file mode 100644
index 9e744f23..00000000
--- a/modules/Categories/Resources/views/admin/form.blade.php
+++ /dev/null
@@ -1,67 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/Categories/Resources/views/admin/new.blade.php b/modules/Categories/Resources/views/admin/new.blade.php
deleted file mode 100644
index 12cae2af..00000000
--- a/modules/Categories/Resources/views/admin/new.blade.php
+++ /dev/null
@@ -1,7 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', trans('categories::categories.new'))
-
-@section('content')
- @include('categories::admin.form', ['action' => route('categories.postNew')])
-@endsection
\ No newline at end of file
diff --git a/modules/Categories/Resources/views/admin/overview.blade.php b/modules/Categories/Resources/views/admin/overview.blade.php
deleted file mode 100644
index 0114b128..00000000
--- a/modules/Categories/Resources/views/admin/overview.blade.php
+++ /dev/null
@@ -1,26 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', trans('categories::categories.overview'))
-
-@section('content')
- @if(count($categories))
-
-
-
- @lang('categories::categories.name')
- @lang('categories::categories.module')
- @lang('categories::categories.actions')
-
-
-
- @foreach($categories as $category)
- @include('categories::admin.snippets.overviewRow', ['level' => 0, 'currentCategory' => $category])
- @endforeach
-
-
- @else
-
- @lang('categories::categories.noCategories')
-
- @endif
-@stop
\ No newline at end of file
diff --git a/modules/Categories/Resources/views/admin/snippets/optionParentCategories.blade.php b/modules/Categories/Resources/views/admin/snippets/optionParentCategories.blade.php
deleted file mode 100644
index aee0f619..00000000
--- a/modules/Categories/Resources/views/admin/snippets/optionParentCategories.blade.php
+++ /dev/null
@@ -1,9 +0,0 @@
-parent_id) selected @endif value="{{$currentCategory['id']}}">
- {{str_repeat('-', $level)}} {{$currentCategory['name']}}
-
-
-@if(isset($currentCategory['children']))
- @foreach($currentCategory['children'] as $category)
- @include('categories::admin.snippets.optionParentCategories', ['selectedCategory' => $selectedCategory, 'currentCategory' => $category, 'level' => $level+1])
- @endforeach
-@endif
\ No newline at end of file
diff --git a/modules/Categories/Resources/views/admin/snippets/overviewRow.blade.php b/modules/Categories/Resources/views/admin/snippets/overviewRow.blade.php
deleted file mode 100644
index 13c15e65..00000000
--- a/modules/Categories/Resources/views/admin/snippets/overviewRow.blade.php
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- {{str_repeat('-', $level)}} {{$currentCategory['name']}}
-
- @lang($modules[$currentCategory['module_id']])
-
-
-
-
-
-
-
-@if(isset($currentCategory['children']))
- @foreach($currentCategory['children'] as $category)
- @include('categories::admin.snippets.overviewRow', ['currentCategory' => $category, 'level' => $level+1])
- @endforeach
-@endif
\ No newline at end of file
diff --git a/modules/Categories/composer.json b/modules/Categories/composer.json
deleted file mode 100644
index 660f3a21..00000000
--- a/modules/Categories/composer.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "pingpong-modules/categories",
- "description": "",
- "authors": [
- {
- "name": "Pingpong Labs",
- "email": "pingpong.labs@gmail.com"
- }
- ],
- "autoload": {
- "psr-4": {
- "Modules\\Categories\\": ""
- }
- }
-}
\ No newline at end of file
diff --git a/modules/Categories/start.php b/modules/Categories/start.php
deleted file mode 100644
index 7d8ae759..00000000
--- a/modules/Categories/start.php
+++ /dev/null
@@ -1,15 +0,0 @@
- 'ContactForm',
- 'translatedName' => 'contactform::module.name',
- 'translatedDescription' => 'contactform::module.description',
- 'alias' => 'contactform',
- 'handler' => '\\Modules\\ContactForm\\Handlers\\ContactForm',
- 'providers' => [\Modules\ContactForm\Providers\ContactFormServiceProvider::class],
- 'files' => ['start.php'],
- 'order' => 0,
-];
\ No newline at end of file
diff --git a/modules/ContactForm/Handlers/ContactForm.php b/modules/ContactForm/Handlers/ContactForm.php
deleted file mode 100644
index 6763d513..00000000
--- a/modules/ContactForm/Handlers/ContactForm.php
+++ /dev/null
@@ -1,152 +0,0 @@
-. View is returned only as name in plain text
- *
- * @return array of views/templates/html codes divided into section
- */
- public static function getExtendedFormInputsCreate()
- {
- return [
- 'basicInfo' => 'contactform::admin.form.basicInfo',
- 'content' => 'contactform::admin.form.content',
- 'meta' => 'admin.content.formParts.metaInformation',
- 'appearance' => 'admin.content.formParts.appearance',
- 'publication' => 'admin.content.formParts.publicationSetup',
- 'files' => 'admin.content.formParts.files',
- ];
- }
-
- public static function getExtendedFormInputsEdit()
- {
- return self::getExtendedFormInputsCreate();
- }
-
- /**
- * Register admin menu (or multiple ones)
- *
- * This cannot be in ServiceProvider because Session is started at middleware. And ServiceProvider is called before
- * starting any middleware..
- *
- * @param User $user model of logged user
- */
- public static function registerAdminMenu(User $user)
- {
- // register links in admin menu
- $menu = \Menu::instance('mainMenu');
-
- $submenu = $menu->whereTitle(trans('admin/mainMenu.contentPages'));
- $submenu->dropdown(trans('contactform::admin/adminMenu.contactForm'), function ($submenu) use ($user) {
- $submenu->route('content.new', trans('contactform::admin/adminMenu.new'), ['moduleId' => self::getModuleId()], 10, ['icon' => 'fa fa-plus']);
- $submenu->route('content.overview', trans('contactform::admin/adminMenu.overview'), ['moduleId' => self::getModuleId()], 20, ['icon' => 'fa fa-list']);
- // $submenu->route('emails.sent', trans('contactform::admin/adminMenu.sentMessages'), [], 30, ['icon' => 'fa fa-send']);
- }, 25, ['icon' => 'fa fa-envelope-o']);
- }
-
- /**
- * Does given module manage content? Or is it just module with widgets/something internal/something absolutely else?
- *
- * @return bool
- */
- public static function managesContent()
- {
- return true;
- }
-
- /**
- * Get translated title for pages overview of given type.
- *
- * This value is used for rendering list of all content pages of given type in administration.
- *
- * @return string
- */
- public static function getOverviewTitle()
- {
- return trans('contactform::module.allForms');
- }
-
- /**
- * Title displayed above for for creating new content page
- *
- * @return string
- */
- public static function getCreateNewTitle()
- {
- return trans('contactform::module.newForm');
- }
-
- /**
- * Title for form displayed for editin content page
- *
- * @param Content $content
- *
- * @return mixed
- */
- public static function getEditTitle(Content $content)
- {
- return trans('contactform::module.editForm');
- }
-
- /**
- * Does this module support categories?
- *
- * @return boolean
- */
- public static function supportCategories()
- {
- return true;
- }
-
- /**
- * Method called right after content page is marked as deleted
- *
- * This method is supposed to clean after "deleted" page.
- *
- * @param Content $content
- *
- * @return mixed
- */
- public static function delete(Content $content)
- {
- }
-}
\ No newline at end of file
diff --git a/modules/ContactForm/Handlers/ContactFormHistory.php b/modules/ContactForm/Handlers/ContactFormHistory.php
deleted file mode 100644
index 3a1def56..00000000
--- a/modules/ContactForm/Handlers/ContactFormHistory.php
+++ /dev/null
@@ -1,28 +0,0 @@
-findOrFail($formId);
-
- // select template
- $template = isset($form->moduleSettings['emailTemplate']) ? $form->moduleSettings['emailTemplate'] : 'contactform::emails.default';
-
- // send email
- $status = Mail::send(Template::name($template), ['data' => $request], function (Message $message) use ($request, $form) {
- $message->from($request->email, $request->name);
-
- // get message subject
- $subject = isset($form->moduleSettings['subject']) ? $form->moduleSettings['subject'] : trans('contactform::admin/contents.defaultSubject');
-
- $message->to($form->moduleSettings['email'])
- ->subject($subject);
- });
-
- // inform user about success or failure
- return $this->sendResponse($status, $request, $form);
- }
-
- private function sendResponse($status, SendNewEmailRequest $request, $form)
- {
- // send response for ajax
- if ($request->ajax()) {
- return response()->json([
- 'status' => $status ? 'success' : 'failed',
- 'redirectUrl' => $form->url
- ]);
- } else {
- // redirect user to previous form
- $response = redirect()->back();
-
- return $status ? $response->with('success', 'sent') : $response->with('error', 'cannotSend');
- }
- }
-}
diff --git a/modules/ContactForm/Http/Requests/SendNewEmailRequest.php b/modules/ContactForm/Http/Requests/SendNewEmailRequest.php
deleted file mode 100644
index e1a84208..00000000
--- a/modules/ContactForm/Http/Requests/SendNewEmailRequest.php
+++ /dev/null
@@ -1,20 +0,0 @@
- 'required',
- 'email' => 'required|email',
- 'message' => 'required',
- ];
- }
-}
diff --git a/modules/ContactForm/Http/routes.php b/modules/ContactForm/Http/routes.php
deleted file mode 100644
index 2ff17cff..00000000
--- a/modules/ContactForm/Http/routes.php
+++ /dev/null
@@ -1,12 +0,0 @@
- ['web'],
- 'namespace' => '\Modules\ContactForm\Http\Controllers\Visitor',
- 'prefix' => LaravelLocalization::setLocale() . '/contactform'
- ], function () {
-
- // method for sending new message
-
- Route::post('/message/{formId}', 'CreateNewMessage@postMessage')
- ->name('email.send');
-});
\ No newline at end of file
diff --git a/modules/ContactForm/Pipeline/SavePipeline/SaveContactInformation.php b/modules/ContactForm/Pipeline/SavePipeline/SaveContactInformation.php
deleted file mode 100644
index a4f74412..00000000
--- a/modules/ContactForm/Pipeline/SavePipeline/SaveContactInformation.php
+++ /dev/null
@@ -1,39 +0,0 @@
-
- */
- function handle(Content & $page, array & $input)
- {
- if (trim($page->moduleHandler, '\\') != ContactForm::class) {
- return;
- }
-
- $settings = [
- 'phone' => $input['phone'],
- 'email' => $input['email'],
- 'contactEmail' => $input['contactEmail'],
- 'subject' => $input['subject'],
- 'companyName' => $input['companyName'],
- 'address' => $input['address'],
- 'gpsLat' => $input['gpsLat'],
- 'gpsLng' => $input['gpsLng'],
- ];
-
- // save settings
- $page->moduleSettings = $settings;
- $page->save();
- }
-}
\ No newline at end of file
diff --git a/modules/ContactForm/Providers/ContactFormServiceProvider.php b/modules/ContactForm/Providers/ContactFormServiceProvider.php
deleted file mode 100644
index a04f0762..00000000
--- a/modules/ContactForm/Providers/ContactFormServiceProvider.php
+++ /dev/null
@@ -1,52 +0,0 @@
-registerWidgets();
-
- app('saveContentPipeline')->add(SaveContactInformation::class);
- }
-
- /**
- * Register the service provider.
- *
- * @return void
- */
- public function register()
- {
- $registrator = $this->app->make('registerSettingsExtension');
- $registrator->register('contactForm', 'contactform::module.name', 'contactform::admin.settings.form');
- }
-
- private function registerWidgets()
- {
- $registrator = $this->app->make('registerWidget');
-
- $registrator->register(Address::class, null, ContactForm::getModuleId());
- $registrator->register(Form::class, null, ContactForm::getModuleId());
- }
-
- protected function setModuleAlias()
- {
- $this->alias = 'contactform';
- }
-
- protected function setModulePath()
- {
- $this->path = __DIR__;
- }
-}
diff --git a/modules/ContactForm/Resources/lang/cs/admin/adminMenu.php b/modules/ContactForm/Resources/lang/cs/admin/adminMenu.php
deleted file mode 100644
index 72e7b038..00000000
--- a/modules/ContactForm/Resources/lang/cs/admin/adminMenu.php
+++ /dev/null
@@ -1,9 +0,0 @@
- "Kontaktní formulář",
-"emails" => "E-mailové šablony",
-"new" => "Nový",
-"overview" => "Všechny formuláře",
-"sentMessages" => "Zprávy",
-"templatePath" => "Kontaktní formulář",
-];
diff --git a/modules/ContactForm/Resources/lang/cs/admin/content.php b/modules/ContactForm/Resources/lang/cs/admin/content.php
deleted file mode 100644
index 85db12f7..00000000
--- a/modules/ContactForm/Resources/lang/cs/admin/content.php
+++ /dev/null
@@ -1,15 +0,0 @@
- "Adresa",
-"compName" => "Jméno zobrazené nad adresou",
-"contactEmail" => "E-mail, kam budou doručovány zprávy z tohoto formuláře",
-"contactInformation" => "Kontaktní informace",
-"content" => "Obsah kontaktního formuláře",
-"defaultSubject" => "Nová zpráva z kontaktního formuláře",
-"email" => "E-mail",
-"emailList" => "Odesílat zprávy na tyto adresy",
-"gpsLat" => "GPS šířka",
-"gpsLng" => "GPS délka",
-"phone" => "Kontaktní telefon",
-"subject" => "Předmět zprávy",
-];
diff --git a/modules/ContactForm/Resources/lang/cs/admin/history.php b/modules/ContactForm/Resources/lang/cs/admin/history.php
deleted file mode 100644
index 2c6525b8..00000000
--- a/modules/ContactForm/Resources/lang/cs/admin/history.php
+++ /dev/null
@@ -1,11 +0,0 @@
- "Adresa",
-"columnCompanyName" => "Jméno společnosti",
-"columnContactEmail" => "Kontaktní e-mail",
-"columnEmail" => "E-mail",
-"columnGpsLat" => "GPS šířka",
-"columnGpsLng" => "GPS délka",
-"columnPhone" => "Telefon",
-"columnSubject" => "Předmět",
-];
diff --git a/modules/ContactForm/Resources/lang/cs/admin/settings.php b/modules/ContactForm/Resources/lang/cs/admin/settings.php
deleted file mode 100644
index aee9fa69..00000000
--- a/modules/ContactForm/Resources/lang/cs/admin/settings.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Application secret kez pro reCaptcha",
-"recaptchaSiteKey" => "Site key pro reCaptcha",
-];
diff --git a/modules/ContactForm/Resources/lang/cs/admin/widgets.php b/modules/ContactForm/Resources/lang/cs/admin/widgets.php
deleted file mode 100644
index 9c2f1d09..00000000
--- a/modules/ContactForm/Resources/lang/cs/admin/widgets.php
+++ /dev/null
@@ -1,16 +0,0 @@
- [
- "description" => "Malý widget určený pro zobrazení adresy, která byla uložena u vybraného kontaktního formuláře.",
- "edit" => "Upravuji blok s adresou",
- "name" => "Blok s adresou",
- "new" => "Nový blok s adresou",
- ],
- "form" => [
- "description" => "Widget pro zobrazení kontaktního formuláře kdekoliv na webu - v obsahu stránky, menu, patičce, ...",
- "name" => "Kontaktní formulář",
- "new" => "Nový widget s kontaktním formulářem",
- ],
- "noContactForms" => "Vypadá to, že v systému nebyl vytvořen žádný kontaktní formulář. Z toho důvodu není možné vytvořit ani tento widget. Vytvořte nejprve nějaký kontaktní formulář a pak opakujte tento pokus.",
- "selectContactForm" => "Vybrat kontaktní formulář",
-];
diff --git a/modules/ContactForm/Resources/lang/cs/module.php b/modules/ContactForm/Resources/lang/cs/module.php
deleted file mode 100644
index c76b9420..00000000
--- a/modules/ContactForm/Resources/lang/cs/module.php
+++ /dev/null
@@ -1,8 +0,0 @@
- "Všechny formuláře",
-"description" => "Jednoduchý kontaktní formulář",
-"editForm" => "Upravuji formulář",
-"name" => "Kontaktní formulář",
-"newForm" => "Vytvořit nový kontaktní formulář",
-];
diff --git a/modules/ContactForm/Resources/lang/en/admin/adminMenu.php b/modules/ContactForm/Resources/lang/en/admin/adminMenu.php
deleted file mode 100644
index 3e869c0f..00000000
--- a/modules/ContactForm/Resources/lang/en/admin/adminMenu.php
+++ /dev/null
@@ -1,9 +0,0 @@
- 'Contact form',
- 'new' => 'New',
- 'overview' => 'All contact forms',
- 'sentMessages' => 'Messages',
- 'templatePath' => 'Contact form',
- 'emails' => 'E-mail templates',
-];
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/lang/en/admin/content.php b/modules/ContactForm/Resources/lang/en/admin/content.php
deleted file mode 100644
index 134b9b30..00000000
--- a/modules/ContactForm/Resources/lang/en/admin/content.php
+++ /dev/null
@@ -1,15 +0,0 @@
- 'Contact form content',
- 'address' => 'Address',
- 'emailList' => 'Send emails to these addresses',
- 'gpsLat' => 'GPS latitude',
- 'gpsLng' => 'GPS longitude',
- 'compName' => 'Name displayed above address',
- 'phone' => 'Contact phone',
- 'email' => 'E-mail',
- 'contactEmail' => 'E-mail, where messages from this form will be delivered',
- 'contactInformation' => 'Contact information',
- 'subject' => 'Subject',
- 'defaultSubject' => 'New message from contact form'
-];
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/lang/en/admin/history.php b/modules/ContactForm/Resources/lang/en/admin/history.php
deleted file mode 100644
index dab90865..00000000
--- a/modules/ContactForm/Resources/lang/en/admin/history.php
+++ /dev/null
@@ -1,12 +0,0 @@
- 'Phone',
- 'columnAddress' => 'Address',
- 'columnEmail' => 'E-mail',
- 'columnContactEmail' => 'Contact E-mail',
- 'columnSubject' => 'Subject',
- 'columnCompanyName' => 'Company name',
- 'columnGpsLat' => 'GPS Latitude',
- 'columnGpsLng' => 'Gps Longitude',
-];
-
diff --git a/modules/ContactForm/Resources/lang/en/admin/settings.php b/modules/ContactForm/Resources/lang/en/admin/settings.php
deleted file mode 100644
index 7bd1d2f4..00000000
--- a/modules/ContactForm/Resources/lang/en/admin/settings.php
+++ /dev/null
@@ -1,5 +0,0 @@
- 'reCAPTCHA site key',
- 'recaptchaSecret' => 'reCAPTCHA application secret key',
-];
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/lang/en/admin/widgets.php b/modules/ContactForm/Resources/lang/en/admin/widgets.php
deleted file mode 100644
index 3d387a0d..00000000
--- a/modules/ContactForm/Resources/lang/en/admin/widgets.php
+++ /dev/null
@@ -1,16 +0,0 @@
- [
- 'name' => 'Address block',
- 'description' => 'Small widget for displaying address saved in selected contact form.',
- 'new' => 'New address block',
- 'edit' => 'Editing address block'
- ],
- 'form' => [
- 'name' => 'Contact form',
- 'description' => 'Display small contact form anywhere on website.',
- 'new' => 'New contact form widget'
- ],
- 'noContactForms' => 'You have not created any contact form. Try to create one before creating this widget.',
- 'selectContactForm' => 'Select contact form'
-];
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/lang/en/module.php b/modules/ContactForm/Resources/lang/en/module.php
deleted file mode 100644
index 3e9d374e..00000000
--- a/modules/ContactForm/Resources/lang/en/module.php
+++ /dev/null
@@ -1,8 +0,0 @@
- 'Contact form',
- 'description' => 'Simple contact form',
- 'allForms' => 'All contact forms',
- 'newForm' => 'Create new contact form',
- 'editForm' => 'Editing contact form'
-];
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/lang/sk/admin/adminMenu.php b/modules/ContactForm/Resources/lang/sk/admin/adminMenu.php
deleted file mode 100644
index d4dcea93..00000000
--- a/modules/ContactForm/Resources/lang/sk/admin/adminMenu.php
+++ /dev/null
@@ -1,8 +0,0 @@
- "Kontaktný formulár",
- "new" => "Nový",
- "overview" => "Všetky formuláre",
- "sentMessages" => "Správy",
- "templatePath" => "Kontaktný formulár",
-];
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/lang/sk/admin/content.php b/modules/ContactForm/Resources/lang/sk/admin/content.php
deleted file mode 100644
index c283c250..00000000
--- a/modules/ContactForm/Resources/lang/sk/admin/content.php
+++ /dev/null
@@ -1,15 +0,0 @@
- "Adresa",
- "compName" => "Názov zobrazený nad adresou",
- "contactEmail" => "E-mail, kam budú doručované správy z tohoto formulára",
- "contactInformation" => "Kontaktné informácie",
- "content" => "Obsah kontaktného formulára",
- "defaultSubject" => "Nová správa z kontaktného formulára",
- "email" => "E-mail",
- "emailList" => "Odosielať správy na tieto adresy",
- "gpsLat" => "GPS šírka",
- "gpsLng" => "GPS dĺžka",
- "phone" => "Kontaktný telefón",
- "subject" => "Predmet správy",
-];
diff --git a/modules/ContactForm/Resources/lang/sk/admin/history.php b/modules/ContactForm/Resources/lang/sk/admin/history.php
deleted file mode 100644
index c0664dfd..00000000
--- a/modules/ContactForm/Resources/lang/sk/admin/history.php
+++ /dev/null
@@ -1,11 +0,0 @@
- "Adresa",
- "columnCompanyName" => "Názov spoločnosti",
- "columnContactEmail" => "Kontaktný e-mail",
- "columnEmail" => "E-mail",
- "columnGpsLat" => "GPS šírka",
- "columnGpsLng" => "GPS dĺžka",
- "columnPhone" => "Telefón",
- "columnSubject" => "Predmet",
-];
diff --git a/modules/ContactForm/Resources/lang/sk/admin/settings.php b/modules/ContactForm/Resources/lang/sk/admin/settings.php
deleted file mode 100644
index fa9eddd4..00000000
--- a/modules/ContactForm/Resources/lang/sk/admin/settings.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Application secret key pre reCaptcha",
- "recaptchaSiteKey" => "Site key pre reCaptcha",
-];
diff --git a/modules/ContactForm/Resources/lang/sk/module.php b/modules/ContactForm/Resources/lang/sk/module.php
deleted file mode 100644
index ad642712..00000000
--- a/modules/ContactForm/Resources/lang/sk/module.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Jednoduchý kontaktný formulár",
- "name" => "Kontaktný formulár",
-];
diff --git a/modules/ContactForm/Resources/views/admin/form/basicInfo.blade.php b/modules/ContactForm/Resources/views/admin/form/basicInfo.blade.php
deleted file mode 100644
index 184df299..00000000
--- a/modules/ContactForm/Resources/views/admin/form/basicInfo.blade.php
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
- @include('admin.snippets.hasError', ['field' => 'title'])
-
-
-
-
-
- @include('admin.snippets.hasError', ['field' => 'url'])
-
-
-
-
- id > 0 && \Illuminate\Support\Str::slug($page->title) != $page->url)) checked
- @endif name="lockUrl" type="checkbox">
- @lang('admin/contents.lockUrl')
-
-
-
-
-
-
-
-
- @foreach($contentStatuses as $status => $translation)
- status) == $status) selected @endif>
- {{$translation}}
-
- @endforeach
-
-
- @include('admin.snippets.hasError', ['field' => 'status'])
-
-
-
- @lang('admin/contents.noParentPage')
-
- @foreach($rootPages as $rootPage)
- parent_id) == $rootPage->id) selected @endif>
- {{$rootPage->title}}
-
- @endforeach
-
-
- @include('admin.snippets.hasError', ['field' => 'parentPage'])
-
-
- @if($module->support_categories && count($categories))
-
-
- @lang('admin/contents.noCategory')
- @foreach($categories as $category)
- id == old('categoryId', $page->categoryId)) selected @endif>
- {{str_repeat(' - ', $category->real_depth)}} {{$category->name}}
-
- @endforeach
-
-
- @endif
-
-
-@lang('contactform::admin/content.contactInformation')
-
-
diff --git a/modules/ContactForm/Resources/views/admin/form/content.blade.php b/modules/ContactForm/Resources/views/admin/form/content.blade.php
deleted file mode 100644
index 5d680a14..00000000
--- a/modules/ContactForm/Resources/views/admin/form/content.blade.php
+++ /dev/null
@@ -1,3 +0,0 @@
-
- {{old('pageContent', $page->content)}}
-
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/views/admin/settings/form.blade.php b/modules/ContactForm/Resources/views/admin/settings/form.blade.php
deleted file mode 100644
index a79ea856..00000000
--- a/modules/ContactForm/Resources/views/admin/settings/form.blade.php
+++ /dev/null
@@ -1,13 +0,0 @@
-
- @lang('contactform::admin/settings.recaptchaSiteKey')
-
-
-
-
-
- @lang('contactform::admin/settings.recaptchaSecret')
-
-
-
-
-reCAPTCHA
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/views/admin/widgets/address/edit.blade.php b/modules/ContactForm/Resources/views/admin/widgets/address/edit.blade.php
deleted file mode 100644
index 00692dd9..00000000
--- a/modules/ContactForm/Resources/views/admin/widgets/address/edit.blade.php
+++ /dev/null
@@ -1,19 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', @trans('contactform::admin/widgets.address.edit'))
-@section('pageDescription', $widget->description)
-
-@section('content')
-
- @if(!count($forms))
- @lang('contactform::admin/widgets.noContactForms')
- @else
-
- @include('contactform::admin.widgets.address.form', ['action' => route('widgets.postEdit', ['id' => $widget->id])])
-
-
- @widgetPreview($widget)
-
- @endif
-@endsection
-
diff --git a/modules/ContactForm/Resources/views/admin/widgets/address/form.blade.php b/modules/ContactForm/Resources/views/admin/widgets/address/form.blade.php
deleted file mode 100644
index e6cda721..00000000
--- a/modules/ContactForm/Resources/views/admin/widgets/address/form.blade.php
+++ /dev/null
@@ -1,19 +0,0 @@
-
- @include('admin.widgets.snippets.commonForm')
-
-
- @lang('contactform::admin/widgets.selectContactForm')
-
-
-
- @foreach($forms as $form)
- settings->contactFormId) ? $widget->settings->contactFormId : '') == $form->id) selected @endif value="{{$form->id}}">{{$form->title}}
- @endforeach
-
-
-
-
-
- @lang('widgets/htmlCode.save')
-
-
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/views/admin/widgets/address/new.blade.php b/modules/ContactForm/Resources/views/admin/widgets/address/new.blade.php
deleted file mode 100644
index 3a5eef53..00000000
--- a/modules/ContactForm/Resources/views/admin/widgets/address/new.blade.php
+++ /dev/null
@@ -1,14 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', @trans('contactform::admin/widgets.address.new'))
-@section('pageDescription', @trans($type->description))
-
-@section('content')
-
- @if(!count($forms))
- @lang('contactform::admin/widgets.noContactForms')
- @else
- @include('contactform::admin.widgets.address.form', ['action' => route('widgets.postNew', ['type' => $type])])
- @endif
-@endsection
-
diff --git a/modules/ContactForm/Resources/views/admin/widgets/form/edit.blade.php b/modules/ContactForm/Resources/views/admin/widgets/form/edit.blade.php
deleted file mode 100644
index b3b0b98c..00000000
--- a/modules/ContactForm/Resources/views/admin/widgets/form/edit.blade.php
+++ /dev/null
@@ -1,19 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', @trans('contactform::admin/widgets.address.edit'))
-@section('pageDescription', $widget->description)
-
-@section('content')
-
- @if(!count($forms))
- @lang('contactform::admin/widgets.noContactForms')
- @else
-
- @include('contactform::admin.widgets.form.form', ['action' => route('widgets.postEdit', ['id' => $widget->id])])
-
-
- @widgetPreview($widget)
-
- @endif
-@endsection
-
diff --git a/modules/ContactForm/Resources/views/admin/widgets/form/form.blade.php b/modules/ContactForm/Resources/views/admin/widgets/form/form.blade.php
deleted file mode 100644
index 19dfcd3e..00000000
--- a/modules/ContactForm/Resources/views/admin/widgets/form/form.blade.php
+++ /dev/null
@@ -1,17 +0,0 @@
-
- @include('admin.widgets.snippets.commonForm')
-
-
- @lang('contactform::admin/widgets.selectContactForm')
-
-
-
- @foreach($forms as $form)
- settings->contactFormId) ? $widget->settings->contactFormId : '') == $form->id) selected @endif value="{{$form->id}}">{{$form->title}}
- @endforeach
-
-
-
- @lang('widgets/htmlCode.save')
-
-
\ No newline at end of file
diff --git a/modules/ContactForm/Resources/views/admin/widgets/form/new.blade.php b/modules/ContactForm/Resources/views/admin/widgets/form/new.blade.php
deleted file mode 100644
index fc3ff7cb..00000000
--- a/modules/ContactForm/Resources/views/admin/widgets/form/new.blade.php
+++ /dev/null
@@ -1,14 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', @trans('contactform::admin/widgets.form.new'))
-@section('pageDescription', @trans($type->description))
-
-@section('content')
-
- @if(!count($forms))
- @lang('contactform::admin/widgets.noContactForms')
- @else
- @include('contactform::admin.widgets.form.form', ['action' => route('widgets.postNew', ['type' => $type])])
- @endif
-@endsection
-
diff --git a/modules/ContactForm/Widgets/Address/Address.php b/modules/ContactForm/Widgets/Address/Address.php
deleted file mode 100644
index 75d6f63f..00000000
--- a/modules/ContactForm/Widgets/Address/Address.php
+++ /dev/null
@@ -1,51 +0,0 @@
- $data->contactFormId];
- }
-}
\ No newline at end of file
diff --git a/modules/ContactForm/Widgets/Address/Presenter.php b/modules/ContactForm/Widgets/Address/Presenter.php
deleted file mode 100644
index d828752d..00000000
--- a/modules/ContactForm/Widgets/Address/Presenter.php
+++ /dev/null
@@ -1,76 +0,0 @@
-settings->contactFormId);
-
- if (!$form)
- return null;
-
- $formData = $form->moduleSettings;
-
- $code = '";
-
- return $code;
- }
-
- /**
- * Display form for creating new instance of widget
- *
- * @param WidgetType $type
- *
- * @return mixed
- */
- public static function renderAddForm(WidgetType $type)
- {
- $contactForms = Content::where('moduleHandler', config('contactform.handler'))
- ->get();
-
- return view('contactform::admin.widgets.address.new', [
- 'type' => $type,
- 'widget' => new Widget(),
- 'forms' => $contactForms
- ]);
- }
-
- /**
- * Display form for editing already existing widget
- *
- * @param Widget $widget
- *
- * @return mixed
- */
- public static function renderEditForm(Widget $widget)
- {
- $contactForms = Content::where('moduleHandler', config('contactform.handler'))
- ->get();
- return view('contactform::admin.widgets.address.edit', [
- 'widget' => $widget,
- 'forms' => $contactForms
- ]);
- }
-}
\ No newline at end of file
diff --git a/modules/ContactForm/Widgets/Form/Form.php b/modules/ContactForm/Widgets/Form/Form.php
deleted file mode 100644
index cb30e07f..00000000
--- a/modules/ContactForm/Widgets/Form/Form.php
+++ /dev/null
@@ -1,51 +0,0 @@
- $data->contactFormId];
- }
-}
\ No newline at end of file
diff --git a/modules/ContactForm/Widgets/Form/Presenter.php b/modules/ContactForm/Widgets/Form/Presenter.php
deleted file mode 100644
index b4859ede..00000000
--- a/modules/ContactForm/Widgets/Form/Presenter.php
+++ /dev/null
@@ -1,73 +0,0 @@
-settings->contactFormId);
-
- if (!$form) {
- return null;
- }
-
- return view(self::$template, ['widget' => $widget, 'form' => $form]);
- }
-
- /**
- * Display form for creating new instance of widget
- *
- * @param WidgetType $type
- *
- * @return mixed
- */
- public static function renderAddForm(WidgetType $type)
- {
- $contactForms = Content::where('moduleHandler', config('contactform.handler'))
- ->get();
-
- return view('contactform::admin.widgets.form.new', [
- 'type' => $type,
- 'widget' => new Widget(),
- 'forms' => $contactForms
- ]);
- }
-
- /**
- * Display form for editing already existing widget
- *
- * @param Widget $widget
- *
- * @return mixed
- */
- public static function renderEditForm(Widget $widget)
- {
- $contactForms = Content::where('moduleHandler', config('contactform.handler'))
- ->get();
- return view('contactform::admin.widgets.address.edit', [
- 'widget' => $widget,
- 'forms' => $contactForms
- ]);
- }
-}
\ No newline at end of file
diff --git a/modules/ContactForm/composer.json b/modules/ContactForm/composer.json
deleted file mode 100644
index 6fe0e828..00000000
--- a/modules/ContactForm/composer.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "pingpong-modules/contactform",
- "description": "",
- "authors": [
- {
- "name": "Pingpong Labs",
- "email": "pingpong.labs@gmail.com"
- }
- ],
- "autoload": {
- "psr-4": {
- "Modules\\ContactForm\\": ""
- }
- }
-}
\ No newline at end of file
diff --git a/modules/ContactForm/start.php b/modules/ContactForm/start.php
deleted file mode 100644
index 7be329cb..00000000
--- a/modules/ContactForm/start.php
+++ /dev/null
@@ -1,15 +0,0 @@
- 'Gallery',
- 'translatedName' => 'gallery::module.name',
- 'translatedDescription' => 'gallery::module.description',
- 'alias' => 'gallery',
- 'handler' => '\\Modules\\Gallery\\Handlers\\Gallery',
- 'providers' => [\Modules\Gallery\Providers\GalleryServiceProvider::class],
- 'files' => ['start.php'],
- 'order' => 0,
-];
\ No newline at end of file
diff --git a/modules/Gallery/Handlers/Gallery.php b/modules/Gallery/Handlers/Gallery.php
deleted file mode 100644
index 262acb3b..00000000
--- a/modules/Gallery/Handlers/Gallery.php
+++ /dev/null
@@ -1,255 +0,0 @@
-moduleSettings->directoryId;
-
- // get all images in given directory
- $images = File::where('directory_id', $directoryId)
- ->where('mime_type', 'LIKE', 'image%')
- ->get();
-
- // render content
- return Controller::VisitorsView($content->template, [
- 'images' => $images,
- 'page' => $content,
- 'extra' => $parameters
- ]);
- }
-
- public static function getHistoryHandler()
- {
- return History::class;
- }
-
- /**
- * @param Content $content
- *
- * @return array
- */
- public static function loadExtraData(Content $content)
- {
- if (is_string($content->moduleSettings)) {
- $content->moduleSettings = json_decode($content->moduleSettings);
- }
-
- $extra = [
- 'slider' => isset($content->moduleSettings->slider) ? $content->moduleSettings->slider : false
- ];
-
- return $extra;
- }
-
- /**
- * Save module-specific values into database
- *
- * @param Content $content
- * @param Request $request
- *
- * @return mixed
- * @internal param Widget $widget
- */
- public static function createNew(Content &$content, Request $request)
- {
- $parentDirectoryId = Storage::get(self::CONFIG_FILENAME);
-
- // create new directory for images
- $directory = Directory::create([
- 'name' => $content->id . '_' . $request->title,
- 'description' => $request->description,
- 'parent_id' => $parentDirectoryId
- ]);
-
- // save id into module_config array
- $settings = ['directoryId' => $directory->id];
-
- // save settings
- $content->moduleSettings = json_encode($settings);
- }
-
- /**
- * Method used for editing existing content page.
- *
- * Reason why it is separated from createNew() method is simple - we need to save history of changes.
- *
- * @param Content $content
- * @param Request $request
- *
- * @param $revisionID string ID of revision used
- *
- * @return int number of edited fields
- */
- public static function edit(Content &$content, Request $request, $revisionID)
- {
- // nothing to edit
- }
-
- /**
- * Does given module manage content? Or is it just module with widgets/something internal/something absolutely else?
- *
- * @return bool
- */
- public static function managesContent()
- {
- return true;
- }
-
- public static function getModuleId()
- {
- $handler = config('gallery.handler');
- $allModules = ModulesHandlerToId::getWithTranslations();
- $moduleId = isset($allModules[$handler]) ? $allModules[$handler] : null;
-
- return $moduleId;
- }
-
- /**
- * Getter for section names in creating/editing content resource
- *
- * @return mixed
- */
- public static function getExtendedFormSections()
- {
- $sections = Handler::getExtendedFormSections();
-
- $sections['upload'] = trans('gallery::admin/content.upload');
-
- return $sections;
- }
-
- /**
- * Getter for views used in extended part of form for creating new content
- *
- * This method should return pairs . View is returned only as name in plain text
- *
- * @return array of views/templates/html codes divided into section
- */
- public static function getExtendedFormInputsCreate()
- {
- $parts = Handler::getExtendedFormInputsCreate();
- $parts['upload'] = 'gallery::admin.content.newUpload';
-
- return $parts;
- }
-
- /**
- * Getter for extended part of form for editing existing content
- *
- * Basically, this method may be
- *
- * @return array of views/templates/html codes divided into section
- */
- public static function getExtendedFormInputsEdit()
- {
- $parts = Handler::getExtendedFormInputsCreate();
- $parts['upload'] = 'gallery::admin.content.editUpload';
-
- return $parts;
- }
-
- /**
- * Register admin menu (or multiple ones)
- *
- * This cannot be in ServiceProvider because Session is started at middleware. And ServiceProvider is called before
- * starting any middleware..
- *
- * @param User $user model of logged user
- */
- public static function registerAdminMenu(User $user)
- {
- $menu = \Menu::instance('mainMenu');
- $submenu = $menu->whereTitle(trans('admin/mainMenu.contentPages'));
- $submenu->dropdown(trans('gallery::module.name'), function ($submenu) use ($user) {
- $submenu->route('content.new', trans('gallery::admin/adminMenu.new'), ['moduleId' => self::getModuleId()], 10, ['icon' => 'fa fa-plus']);
- $submenu->route('content.overview', trans('gallery::admin/adminMenu.overview'), ['moduleId' => self::getModuleId()], 20, ['icon' => 'fa fa-list']);
- // $submenu->route('emails.sent', trans('contactform::admin/adminMenu.sentMessages'), [], 30, ['icon' => 'fa fa-send']);
- }, 25, ['icon' => 'fa fa-camera']);
- }
-
- /**
- * Install module
- *
- * @return mixed
- */
- public static function install()
- {
- $directory = Directory::where('name', self::DIRECTORY_NAME)
- ->first();
-
- if (!count($directory)) {
- $directory = Directory::create([
- 'name' => self::DIRECTORY_NAME,
- 'hidden' => true
- ]);
- }
-
- Storage::put(self::CONFIG_FILENAME, $directory->id);
- }
-
- /**
- * Method called right after content page is marked as deleted
- *
- * This method is supposed to clean after "deleted" page.
- *
- * @param Content $content
- *
- * @return mixed
- */
- public static function delete(Content $content)
- {
- // try to convert moduleSettings into something more accessible
- if (is_string($content->moduleSettings)) {
- $content->moduleSettings = json_decode($content->moduleSettings);
- }
-
- // get directory id
- $directoryId = $content->moduleSettings->directoryId;
-
- $directory = Directory::find($directoryId);
-
- // check if gallery exists
- if (!$directory) {
- return;
- }
-
- // delete directory used as photogallery
- $directory->delete();
- }
-
- /**
- * Does this module support categories?
- *
- * @return boolean
- */
- public static function supportCategories()
- {
- return true;
- }
-}
\ No newline at end of file
diff --git a/modules/Gallery/Providers/GalleryServiceProvider.php b/modules/Gallery/Providers/GalleryServiceProvider.php
deleted file mode 100644
index aac0bc39..00000000
--- a/modules/Gallery/Providers/GalleryServiceProvider.php
+++ /dev/null
@@ -1,16 +0,0 @@
-alias = 'gallery';
- }
-
- protected function setModulePath()
- {
- $this->path = __DIR__;
- }
-}
diff --git a/modules/Gallery/Resources/lang/cs/admin/adminMenu.php b/modules/Gallery/Resources/lang/cs/admin/adminMenu.php
deleted file mode 100644
index 91299728..00000000
--- a/modules/Gallery/Resources/lang/cs/admin/adminMenu.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Nová galerie",
-"overview" => "Všechny galerie",
-"templatePath" => "Šablony galerie",
-];
diff --git a/modules/Gallery/Resources/lang/cs/admin/content.php b/modules/Gallery/Resources/lang/cs/admin/content.php
deleted file mode 100644
index ac72921f..00000000
--- a/modules/Gallery/Resources/lang/cs/admin/content.php
+++ /dev/null
@@ -1,11 +0,0 @@
- "Tato stránka není platnou fotogalerií.",
-"makeSlider" => "Vytvořit slider z této fotogalerie",
-"orbitSliderMissing" => "Nelze vytvořit slider. Widget pro zobrazení slideru není nainstalován.",
-"sliderCreated" => "Slider úspěšně vytvořen.",
-"sliderEdit" => "Nastavení slideru",
-"sliderFailed" => "Slider nemohl být vytvořen. Zpráva: :message",
-"upload" => "Nahrát fotografie",
-"uploadAfterSavingGallery" => "Nahrávání do této galerie zatím není dostupné. Uložte galerii a nahrávejte fotografie až v rámci editace.",
-];
diff --git a/modules/Gallery/Resources/lang/cs/module.php b/modules/Gallery/Resources/lang/cs/module.php
deleted file mode 100644
index 337dd6d5..00000000
--- a/modules/Gallery/Resources/lang/cs/module.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Jednoduchá galerie zobrazující fotografie/grafiku v jednoduchém lightboxu. Tento modul nenabízí žádné speciální zobrazení pro fotografie.",
-"name" => "Galerie",
-];
diff --git a/modules/Gallery/Resources/lang/en/admin/adminMenu.php b/modules/Gallery/Resources/lang/en/admin/adminMenu.php
deleted file mode 100644
index 099f852a..00000000
--- a/modules/Gallery/Resources/lang/en/admin/adminMenu.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'Gallery templates',
- 'new' => 'New gallery',
- 'overview' => 'All galleries'
-];
\ No newline at end of file
diff --git a/modules/Gallery/Resources/lang/en/admin/content.php b/modules/Gallery/Resources/lang/en/admin/content.php
deleted file mode 100644
index c7741f22..00000000
--- a/modules/Gallery/Resources/lang/en/admin/content.php
+++ /dev/null
@@ -1,11 +0,0 @@
- 'Upload photos',
- 'uploadAfterSavingGallery' => 'Uploading for this gallery is not available yet. You must create the gallery first and upload later.',
- 'makeSlider' => 'Make slider from this photogallery',
- 'orbitSliderMissing' => 'Cannot create slider. Widget for slider is not installed.',
- 'invalidGallery' => 'This content page is not a valid gallery page.',
- 'sliderFailed' => 'Slider could not be created. Reason: :message',
- 'sliderCreated' => 'Slider successfully created.',
- 'sliderEdit' => 'Slider settings',
-];
\ No newline at end of file
diff --git a/modules/Gallery/Resources/lang/en/module.php b/modules/Gallery/Resources/lang/en/module.php
deleted file mode 100644
index 6b0048ab..00000000
--- a/modules/Gallery/Resources/lang/en/module.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'Gallery',
- 'description' => 'Simple photogallery',
-
-];
\ No newline at end of file
diff --git a/modules/Gallery/Resources/lang/sk/admin/adminMenu.php b/modules/Gallery/Resources/lang/sk/admin/adminMenu.php
deleted file mode 100644
index bd541608..00000000
--- a/modules/Gallery/Resources/lang/sk/admin/adminMenu.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Nová galéria",
-"overview" => "Všetky galérie",
-"templatePath" => "Šablóny galérie",
-];
diff --git a/modules/Gallery/Resources/lang/sk/admin/content.php b/modules/Gallery/Resources/lang/sk/admin/content.php
deleted file mode 100644
index 41ffac65..00000000
--- a/modules/Gallery/Resources/lang/sk/admin/content.php
+++ /dev/null
@@ -1,11 +0,0 @@
- "Táto stránka nie je platná fotogaléria.",
- "makeSlider" => "Vytvoriť slider z tejto fotogalérie",
- "orbitSliderMissing" => "Nie je možné vytvoriť slider. Widget pre zobrazenie slideru nie je nainštalovaný.",
- "sliderCreated" => "Slider úspešne vytvorený.",
- "sliderEdit" => "Nastavenie slideru",
- "sliderFailed" => "Slider nemohol byť vytvorený. Správa: :message",
- "upload" => "Nahrať fotografie",
- "uploadAfterSavingGallery" => "Nahrávanie do tejto galérie nie je dostupné. Najprv uložte galériu a fotografie nahrávajte až v rámci editácie.",
-];
diff --git a/modules/Gallery/Resources/lang/sk/module.php b/modules/Gallery/Resources/lang/sk/module.php
deleted file mode 100644
index 01532983..00000000
--- a/modules/Gallery/Resources/lang/sk/module.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Jednoduchá galéria zobrazujúca fotografie/grafiku v jednoduchom lightboxe. Tento modul neponúka žiadne špeciálne zobrazovanie fotografií.",
- "name" => "Galéria",
-];
diff --git a/modules/Gallery/Resources/views/admin/content/editUpload.blade.php b/modules/Gallery/Resources/views/admin/content/editUpload.blade.php
deleted file mode 100644
index 75f03669..00000000
--- a/modules/Gallery/Resources/views/admin/content/editUpload.blade.php
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/modules/Gallery/Resources/views/admin/content/newUpload.blade.php b/modules/Gallery/Resources/views/admin/content/newUpload.blade.php
deleted file mode 100644
index 8d84eda9..00000000
--- a/modules/Gallery/Resources/views/admin/content/newUpload.blade.php
+++ /dev/null
@@ -1,3 +0,0 @@
-
- @lang('gallery::admin/content.uploadAfterSavingGallery')
-
\ No newline at end of file
diff --git a/modules/Gallery/composer.json b/modules/Gallery/composer.json
deleted file mode 100644
index 24d1e0a0..00000000
--- a/modules/Gallery/composer.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "pingpong-modules/gallery",
- "description": "",
- "authors": [
- {
- "name": "Pingpong Labs",
- "email": "pingpong.labs@gmail.com"
- }
- ],
- "autoload": {
- "psr-4": {
- "Modules\\Gallery\\": ""
- }
- }
-}
\ No newline at end of file
diff --git a/modules/Gallery/start.php b/modules/Gallery/start.php
deleted file mode 100644
index a4abe2da..00000000
--- a/modules/Gallery/start.php
+++ /dev/null
@@ -1,2 +0,0 @@
- 'StaticPages',
- 'translatedName' => 'staticpages::module.name',
- 'translatedDescription' => 'staticpages::module.description',
- 'alias' => 'staticpages',
- 'handler' => '\\Modules\\StaticPages\\Handlers\\StaticPage',
- 'providers' => [\Modules\Staticpages\Providers\StaticPagesServiceProvider::class],
- 'files' => ['start.php'],
- 'order' => 0,
-];
\ No newline at end of file
diff --git a/modules/StaticPages/Handlers/StaticPage.php b/modules/StaticPages/Handlers/StaticPage.php
deleted file mode 100644
index e2926855..00000000
--- a/modules/StaticPages/Handlers/StaticPage.php
+++ /dev/null
@@ -1,76 +0,0 @@
-whereTitle(trans('admin/mainMenu.contentPages'));
-
- $submenu->dropdown(trans('staticpages::adminMenu.staticPages'), function ($submenu) use ($user) {
- $submenu->route('content.new', trans('staticpages::adminMenu.new'), ['module' => config('staticpages.alias')], 10, ['icon' => 'fa fa-plus']);
- $submenu->route('content.overview', trans('staticpages::adminMenu.overview'), ['module' => config('staticpages.alias')], 20, ['icon' => 'fa fa-list']);
- }, 15, ['icon' => 'fa fa-newspaper-o']);
- }
-
- /**
- * Get translated title for pages overview of given type.
- *
- * This value is used for rendering list of all content pages of given type in administration.
- *
- * @return string
- */
- public static function getOverviewTitle()
- {
- return trans('staticpages::module.allPages');
- }
-
- /**
- * Title displayed above for for creating new content page
- *
- * @return string
- */
- public static function getCreateNewTitle()
- {
- return trans('staticpages::module.newPage');
- }
-
- /**
- * Title for form displayed for editin content page
- *
- * @param Content $content
- *
- * @return mixed
- */
- public static function getEditTitle(Content $content)
- {
- return trans('staticpages::module.editPage');
- }
-
- /**
- * Does given module manage content? Or is it just module with widgets/something internal/something absolutely else?
- *
- * @return bool
- */
- public static function managesContent()
- {
- return true;
- }
-
- /**
- * Does this module support categories?
- *
- * @return boolean
- */
- public static function supportCategories()
- {
- return true;
- }
-}
\ No newline at end of file
diff --git a/modules/StaticPages/Providers/StaticPagesServiceProvider.php b/modules/StaticPages/Providers/StaticPagesServiceProvider.php
deleted file mode 100644
index ba92ce7f..00000000
--- a/modules/StaticPages/Providers/StaticPagesServiceProvider.php
+++ /dev/null
@@ -1,16 +0,0 @@
-alias = 'staticpages';
- }
-
- protected function setModulePath()
- {
- $this->path = __DIR__;
- }
-}
diff --git a/modules/StaticPages/Resources/lang/cs/admin.php b/modules/StaticPages/Resources/lang/cs/admin.php
deleted file mode 100644
index 9f233cff..00000000
--- a/modules/StaticPages/Resources/lang/cs/admin.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Nová stránka",
-"overview" => "Seznam všech statických stránek",
-"templatePath" => "Statické stránky",
-];
diff --git a/modules/StaticPages/Resources/lang/cs/adminMenu.php b/modules/StaticPages/Resources/lang/cs/adminMenu.php
deleted file mode 100644
index 48aa0404..00000000
--- a/modules/StaticPages/Resources/lang/cs/adminMenu.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Vytvořit novou",
-"overview" => "Přehled",
-"staticPages" => "Statické stránky",
-];
diff --git a/modules/StaticPages/Resources/lang/cs/module.php b/modules/StaticPages/Resources/lang/cs/module.php
deleted file mode 100644
index e0dfbbeb..00000000
--- a/modules/StaticPages/Resources/lang/cs/module.php
+++ /dev/null
@@ -1,8 +0,0 @@
- "Všechny statické stránky",
-"description" => "Statické stránky jsou určeny k zobrazování statického obsahu na stránkách.",
-"editPage" => "Upravuji statickou stránku",
-"name" => "Statické stránky",
-"newPage" => "Vytvářím novou stránku",
-];
diff --git a/modules/StaticPages/Resources/lang/en/admin.php b/modules/StaticPages/Resources/lang/en/admin.php
deleted file mode 100644
index c7ee3368..00000000
--- a/modules/StaticPages/Resources/lang/en/admin.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'List of all static pages',
- 'templatePath' => 'Static pages',
- 'new' => 'nova stranka'
-];
\ No newline at end of file
diff --git a/modules/StaticPages/Resources/lang/en/adminMenu.php b/modules/StaticPages/Resources/lang/en/adminMenu.php
deleted file mode 100644
index ae842272..00000000
--- a/modules/StaticPages/Resources/lang/en/adminMenu.php
+++ /dev/null
@@ -1,6 +0,0 @@
- 'Static pages',
- 'new' => 'Create new',
- 'overview' => 'Overview'
-];
\ No newline at end of file
diff --git a/modules/StaticPages/Resources/lang/en/module.php b/modules/StaticPages/Resources/lang/en/module.php
deleted file mode 100644
index db22a5b4..00000000
--- a/modules/StaticPages/Resources/lang/en/module.php
+++ /dev/null
@@ -1,8 +0,0 @@
- 'Static pages',
- 'description' => 'Static pages are intended for displaying static content on webpage.',
- 'allPages' => 'All static pages',
- 'editPage' => 'Editing static page',
- 'newPage' => 'Create new static page'
-];
\ No newline at end of file
diff --git a/modules/StaticPages/Resources/lang/sk/admin.php b/modules/StaticPages/Resources/lang/sk/admin.php
deleted file mode 100644
index ba6b774e..00000000
--- a/modules/StaticPages/Resources/lang/sk/admin.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Nová stránka",
- "overview" => "Zoznam všetkých statických stránok",
- "templatePath" => "Statické stránky",
-];
diff --git a/modules/StaticPages/Resources/lang/sk/adminMenu.php b/modules/StaticPages/Resources/lang/sk/adminMenu.php
deleted file mode 100644
index 89bf8bd4..00000000
--- a/modules/StaticPages/Resources/lang/sk/adminMenu.php
+++ /dev/null
@@ -1,6 +0,0 @@
- "Vytvoriť novú",
- "overview" => "Prehľad",
- "staticPages" => "Statické stránky",
-];
diff --git a/modules/StaticPages/Resources/lang/sk/module.php b/modules/StaticPages/Resources/lang/sk/module.php
deleted file mode 100644
index c3f11703..00000000
--- a/modules/StaticPages/Resources/lang/sk/module.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Statické stránky sú určené k zobrazovaniu statického obsahu na webe.",
- "name" => "Statické stránky",
-];
diff --git a/modules/StaticPages/composer.json b/modules/StaticPages/composer.json
deleted file mode 100644
index d9cb85d6..00000000
--- a/modules/StaticPages/composer.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "pingpong-modules/staticpages",
- "description": "",
- "authors": [
- {
- "name": "Pingpong Labs",
- "email": "pingpong.labs@gmail.com"
- }
- ],
- "autoload": {
- "psr-4": {
- "Modules\\StaticPages\\": ""
- }
- }
-}
\ No newline at end of file
diff --git a/modules/StaticPages/start.php b/modules/StaticPages/start.php
deleted file mode 100644
index b3d9bbc7..00000000
--- a/modules/StaticPages/start.php
+++ /dev/null
@@ -1 +0,0 @@
-
- ./tests/unit/
+ ./tests/Unit/
diff --git a/public/.htaccess b/public/.htaccess
index 8eb2dd0d..47a002ec 100644
--- a/public/.htaccess
+++ b/public/.htaccess
@@ -14,3 +14,69 @@
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
+
+
+
+ AddOutputFilterByType DEFLATE application/javascript
+ AddOutputFilterByType DEFLATE application/rss+xml
+ AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
+ AddOutputFilterByType DEFLATE application/x-font
+ AddOutputFilterByType DEFLATE application/x-font-opentype
+ AddOutputFilterByType DEFLATE application/x-font-otf
+ AddOutputFilterByType DEFLATE application/x-font-truetype
+ AddOutputFilterByType DEFLATE application/x-font-ttf
+ AddOutputFilterByType DEFLATE application/x-javascript
+ AddOutputFilterByType DEFLATE application/xhtml+xml
+ AddOutputFilterByType DEFLATE application/xml
+ AddOutputFilterByType DEFLATE font/opentype
+ AddOutputFilterByType DEFLATE font/otf
+ AddOutputFilterByType DEFLATE font/ttf
+ AddOutputFilterByType DEFLATE image/svg+xml
+ AddOutputFilterByType DEFLATE image/x-icon
+ AddOutputFilterByType DEFLATE text/css
+ AddOutputFilterByType DEFLATE text/html
+ AddOutputFilterByType DEFLATE text/javascript
+ AddOutputFilterByType DEFLATE text/plain
+
+
+
+ mod_gzip_on Yes
+ mod_gzip_dechunk Yes
+ mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
+ mod_gzip_item_include handler ^cgi-script$
+ mod_gzip_item_include mime ^text/.*
+ mod_gzip_item_include mime ^application/x-javascript.*
+ mod_gzip_item_exclude mime ^image/.*
+ mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
+
+#
+# Leverage Browser Caching
+
+ ExpiresActive On
+ ExpiresByType image/jpg "access 1 year"
+ ExpiresByType image/jpeg "access 1 year"
+ ExpiresByType image/gif "access 1 year"
+ ExpiresByType image/png "access 1 year"
+ ExpiresByType text/css "access 1 month"
+ ExpiresByType text/html "access 1 month"
+ ExpiresByType application/pdf "access 1 month"
+ ExpiresByType text/x-javascript "access 1 month"
+ ExpiresByType application/x-shockwave-flash "access 1 month"
+ ExpiresByType image/x-icon "access 1 year"
+ ExpiresDefault "access 1 month"
+
+
+
+
+ Header set Cache-Control "max-age=2678400, public"
+
+
+ Header set Cache-Control "max-age=7200, private, must-revalidate"
+
+
+ Header set Cache-Control "max-age=86400, public"
+
+
+ Header set Cache-Control "max-age=2678400, private"
+
+
\ No newline at end of file
diff --git a/public/index.php b/public/index.php
old mode 100644
new mode 100755
diff --git a/resources/assets/admin/css/custom.css b/resources/assets/admin/css/custom.css
index d3d68009..da3ef95c 100644
--- a/resources/assets/admin/css/custom.css
+++ b/resources/assets/admin/css/custom.css
@@ -22,8 +22,9 @@ a:focus {
padding-bottom: 20px !important;
}
-.form-control {
- margin: .3em 0;
+.blur {
+ -webkit-filter: blur(3px);
+ filter: blur(3px);
}
.text-center {
@@ -413,5 +414,11 @@ img {
/*background-color: #C9302C;*/
/*}*/
+.has-subpages:hover {
+ cursor: pointer;
+}
+#orderSetup .subpage td:first-child {
+ padding-left: 35px;
+}
diff --git a/resources/assets/admin/js/app.js b/resources/assets/admin/js/app.js
index fbb223ad..5ca40345 100644
--- a/resources/assets/admin/js/app.js
+++ b/resources/assets/admin/js/app.js
@@ -1,487 +1,9 @@
-var config = window.config = {};
-
-// Config reference element
-var $ref = $ ("#ref");
-
-// Configure responsive bootstrap toolkit
-config.ResponsiveBootstrapToolkitVisibilityDivs = {
- 'xs': $ ('
'),
- 'sm': $ ('
'),
- 'md': $ ('
'),
- 'lg': $ ('
'),
- 'xl': $ ('
')
-};
-
-ResponsiveBootstrapToolkit.use ('Custom', config.ResponsiveBootstrapToolkitVisibilityDivs);
-
-//validation configuration
-config.validations = {
- debug: true,
- errorClass: 'has-error',
- validClass: 'success',
- errorElement: "span",
-
- // add error class
- highlight: function (element, errorClass, validClass) {
- $ (element).parents ("div.form-group")
- .addClass (errorClass)
- .removeClass (validClass);
- },
-
- // add error class
- unhighlight: function (element, errorClass, validClass) {
- $ (element).parents (".has-error")
- .removeClass (errorClass)
- .addClass (validClass);
- },
-
- // submit handler
- submitHandler: function (form) {
- form.submit ();
- }
-};
-
-//delay time configuration
-config.delayTime = 50;
-
-// chart configurations
-config.chart = {};
-
-/***********************************************
- * Animation Settings
- ***********************************************/
-function animate(options) {
- var animationName = "animated " + options.name;
- var animationEnd = "webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend";
- $ (options.selector)
- .addClass (animationName)
- .one (animationEnd,
- function () {
- $ (this).removeClass (animationName);
- }
- );
-}
-
-$ (function () {
- var $itemActions = $ (".item-actions-dropdown");
-
- $ (document).on ('click', function (e) {
- if (!$ (e.target).closest ('.item-actions-dropdown').length) {
- $itemActions.removeClass ('active');
- }
- });
-
- $ ('.item-actions-toggle-btn').on ('click', function (e) {
- e.preventDefault ();
-
- var $thisActionList = $ (this).closest ('.item-actions-dropdown');
-
- $itemActions.not ($thisActionList).removeClass ('active');
-
- $thisActionList.toggleClass ('active');
- });
-});
-
-// /***********************************************
-// * NProgress Settings
-// ***********************************************/
-// var npSettings = {
-// easing: 'ease',
-// speed: 500
-// };
-//
-// NProgress.configure (npSettings);
-// $ (function () {
-// setSameHeights ();
-//
-// var resizeTimer;
-//
-// $ (window).resize (function () {
-// clearTimeout (resizeTimer);
-// resizeTimer = setTimeout (setSameHeights, 150);
-// });
-// });
-
-function setSameHeights($container) {
-
- $container = $container || $ ('.sameheight-container');
-
- var viewport = ResponsiveBootstrapToolkit.current ();
-
- $container.each (function () {
-
- var $items = $ (this).find (".sameheight-item");
-
- // Get max height of items in container
- var maxHeight = 0;
-
- $items.each (function () {
- $ (this).css ({height: 'auto'});
- maxHeight = Math.max (maxHeight, $ (this).innerHeight ());
- });
-
- // Set heights of items
- $items.each (function () {
- // Ignored viewports for item
- var excludedStr = $ (this).data ('exclude') || '';
- var excluded = excludedStr.split (',');
-
- // Set height of element if it's not excluded on
- if (excluded.indexOf (viewport) === -1) {
- $ (this).innerHeight (maxHeight);
- }
- });
- });
-}
-
-$ (function () {
- animate ({
- name: 'flipInY',
- selector: '.error-card > .error-title-block'
- });
-
- setTimeout (function () {
- var $el = $ ('.error-card > .error-container');
-
- animate ({
- name: 'fadeInUp',
- selector: $el
- });
-
- $el.addClass ('visible');
- }, 500);
-});
-
-$ (function () {
-
- $ ('#sidebar-menu, #customize-menu').metisMenu ({
- activeClass: 'open'
- });
-
- $ ('#sidebar-collapse-btn').on ('click', function (event) {
- event.preventDefault ();
-
- $ ("#app").toggleClass ("sidebar-open");
- });
-
- $ ("#sidebar-overlay").on ('click', function () {
- $ ("#app").removeClass ("sidebar-open");
- });
-
-});
-$ (function () {
-
- $ ('.actions-list > li').on ('click', '.check', function (e) {
- e.preventDefault ();
-
- $ (this).parents ('.tasks-item')
- .find ('.checkbox')
- .prop ("checked", true);
-
- // removeActionList ();
- });
-
-});
-
-// $ (function () {
-
- // // set sortable options
- // $ ('.images-container').sortable ({
- // animation: 150,
- // handle: ".control-btn.move",
- // draggable: ".image-container",
- // onMove: function (evt) {
- // var $relatedElem = $ (evt.related);
- //
- // if ($relatedElem.hasClass ('add-image')) {
- // return false;
- // }
- // }
- // });
- //
- // var $controlsButtons = $ ('.controls');
- //
- // var $controlsButtonsStar = $controlsButtons.find ('.star');
- //
- // $controlsButtonsStar.on ('click', function (e) {
- // e.preventDefault ();
- //
- // $controlsButtonsStar.removeClass ('active');
- // $controlsButtonsStar.parents ('.image-container').removeClass ('main');
- //
- // $ (this).addClass ('active');
- //
- // $ (this).parents ('.image-container').addClass ('main');
- // })
-// });
-
-$ (function () {
- $ ('.nav-profile > li > a').on ('click', function () {
- var $el = $ (this).next ();
-
- animate ({
- name: 'flipInX',
- selector: $el
- });
- });
-});
-
-$ (function () {
- // Local storage settings
- var themeSettings = getThemeSettings ();
-
- // Elements
-
- var $app = $ ('#app');
- var $styleLink = $ ('#theme-style');
- var $customizeMenu = $ ('#customize-menu');
-
- // Color switcher
- var $customizeMenuColorBtns = $customizeMenu.find ('.color-item');
-
- // Position switchers
- var $customizeMenuRadioBtns = $customizeMenu.find ('.radio');
-
- // /////////////////////////////////////////////////
-
- // Initial state
-
- // On setting event, set corresponding options
-
- // Update customize view based on options
-
- // Update theme based on options
-
- /************************************************
- * Initial State
- *************************************************/
-
- setThemeSettings ();
-
- /************************************************
- * Events
- *************************************************/
-
- // set theme type
- $customizeMenuColorBtns.on ('click', function () {
- themeSettings.themeName = $ (this).data ('theme');
-
- setThemeSettings ();
- });
-
- $customizeMenuRadioBtns.on ('click', function () {
-
- var optionName = $ (this).prop ('name');
- themeSettings[optionName] = $ (this).val ();
-
- setThemeSettings ();
- });
-
- function setThemeSettings() {
- setThemeState ()
- .delay (config.delayTime)
- .queue (function (next) {
-
- setThemeColor ();
- setThemeControlsState ();
- saveThemeSettings ();
-
- $ (document).trigger ("themechange");
-
- next ();
- });
- }
-
- /************************************************
- * Update theme based on options
- *************************************************/
-
- function setThemeState() {
- // set theme type
- if (themeSettings.themeName) {
- $styleLink.attr ('href', window.cssPath + '/app-' + themeSettings.themeName + '.css');
- }
- else {
- $styleLink.attr ('href', window.cssPath + '/app.css');
- }
- // App classes
- $app.removeClass ('header-fixed footer-fixed sidebar-fixed');
-
- // set header
- $app.addClass (themeSettings.headerPosition);
-
- // set footer
- $app.addClass (themeSettings.footerPosition);
-
- // set footer
- $app.addClass (themeSettings.sidebarPosition);
-
- return $app;
- }
-
- /************************************************
- * Update theme controls based on options
- *************************************************/
-
- function setThemeControlsState() {
- // set color switcher
- $customizeMenuColorBtns.each (function () {
- if ($ (this).data ('theme') === themeSettings.themeName) {
- $ (this).addClass ('active');
- }
- else {
- $ (this).removeClass ('active');
- }
- });
-
- // set radio buttons
- $customizeMenuRadioBtns.each (function () {
- var name = $ (this).prop ('name');
- var value = $ (this).val ();
-
- if (themeSettings[name] === value) {
- $ (this).prop ("checked", true);
- }
- else {
- $ (this).prop ("checked", false);
- }
- });
- }
-
- /************************************************
- * Update theme color
- *************************************************/
- function setThemeColor() {
- config.chart.colorPrimary = tinycolor ($ref.find (".chart .color-primary").css ("color"));
- config.chart.colorSecondary = tinycolor ($ref.find (".chart .color-secondary").css ("color"));
- }
-
- /************************************************
- * Storage Functions
- *************************************************/
-
- function getThemeSettings() {
- var settings = (localStorage.getItem ('themeSettings')) ? JSON.parse (localStorage.getItem ('themeSettings')) : {};
-
- settings.headerPosition = settings.headerPosition || '';
- settings.sidebarPosition = settings.sidebarPosition || '';
- settings.footerPosition = settings.footerPosition || '';
-
- return settings;
- }
-
- function saveThemeSettings() {
- localStorage.setItem ('themeSettings', JSON.stringify (themeSettings));
- }
-
-});
-
-$ (function () {
+// bind some custom methods
+$ (document).ready (function () {
$ ("body").addClass ("loaded");
- var notification = $ ('.notification');
- if (notification.length) {
-
- notification.click (function () {
- $ (this).fadeOut ('fast');
- });
-
- setTimeout (function () {
- notification.fadeOut (1500)
- }, 5 * 1000)
- }
-});
-
-/**
- * Makes slug from input string
- *
- * @param text
- * @param trimSpaces
- *
- * @returns {string}
- */
-function slugify(text, trimSpaces) {
- text = text.toString ().toLowerCase ();
-
- if (trimSpaces)
- text = text.trim ();
-
- return text.replace (/ /g, '-')
- .replace (/[àáâãäå]/g, "a")
- .replace (/[čç]/g, "c")
- .replace (/[ěèéêë]/g, "e")
- .replace (/[ùúûüů]/g, "u")
- .replace (/[ìíîï]/g, "i")
- .replace (/[ňńñ]/g, "n")
- .replace (/[òóôõö]/g, "o")
- .replace (/[ýÿ]/g, "y")
- .replace (/œ/g, "oe")
- .replace (/ď/g, "d")
- .replace (/ř/g, "r")
- .replace (/š/g, "s")
- .replace (/ž/g, "z")
- .replace (/ť/g, "t")
- .replace (/æ/g, "ae")
- .replace (/[^a-z0-9\-]+/g, '')
- .replace (/--+/g, '-');
-}
-
-// bind some custom methods
-$ (document).ready (function () {
- var previousTitle, previousMessage;
-
- $ ('.confirm').click (function (e) {
-
- var titleElement = $ ('#confirmation-title');
- var messageElement = $ ('#confirmation-message');
-
- previousTitle = titleElement.text ();
- previousMessage = messageElement.text ();
-
- var confirmTitle = $ (this).data ('title');
- var confirmMessage = $ (this).data ('message');
- var href = $ (this).attr ('href');
-
- $ ('#confirm-button').attr ('href', href);
-
- if (confirmTitle)
- titleElement.text (confirmTitle);
-
- if (confirmMessage)
- messageElement.text (confirmMessage);
-
- $ ('#confirm-modal').modal ('show');
-
- e.preventDefault ();
- });
-
- $ ('#confirm-modal').on ('hidden.bs.modal', function () {
- $ ('#confirmation-title').text (previousTitle);
- $ ('#confirmation-message').text (previousMessage);
- });
-
- $ ('#lockUrl').change (function () {
- $ ('.slug-source').keyup ();
- });
-
- $ ('.slug-target').keyup (function () {
- $ (this).val (slugify ($ (this).val (), false));
- $ ('#lockUrl').prop ('checked', true);
- });
-
- $ ('.slug-source').keyup (function () {
- var source = $ (this);
- var target = $ ('.slug-target');
- var locked = $ ('#lockUrl');
-
- if (!locked.is (':checked'))
- target.val (slugify (source.val (), true));
- });
-
- $ (function () {
- $ ('[data-toggle="tooltip"]').tooltip ()
- });
+ $ ('[data-toggle="tooltip"]').tooltip ()
// find if any error occured and mark tab with that error
$ ('.has-error').each (function () {
@@ -491,20 +13,31 @@ $ (document).ready (function () {
$ ("#" + tabCard.prop ('id') + "-tab").addClass ('tab-with-error');
});
- $('#removeTitlePhoto').click(function () {
- $('#titlePhotoContainer').remove();
- // $('existingTitlePhoto').val(null);
+ $ ('#removeTitlePhoto').click (function () {
+ $ ('#titlePhotoContainer').remove ();
});
- $('form').areYouSure();
+ $ ('form').areYouSure ();
});
-// /***********************************************
-// * NProgress Settings
-// ***********************************************/
-//
-// // start load bar
-// NProgress.start ();
-//
-// // end loading bar
-// NProgress.done ();
\ No newline at end of file
+$ ('.checkbox').change (function () {
+ var e = $ (this);
+ var checked = e.is (':checked');
+ var id = e.data ('id');
+
+ $ ('.child-' + id).prop ('checked', checked);
+
+ // check also parent
+ if (e.hasClass ('child-checkbox') && checked) {
+ var parent = e.data ('parent');
+ $ ('#checkbox-parent-' + parent).prop ('checked', true);
+ }
+});
+
+$ ('.has-subpages').click (function (e) {
+ if (!$ (e.target).is ("div"))
+ return;
+
+ var id = $ (this).data ('id');
+ $ ('.parent-page-' + id).toggleClass ('hidden-xs-up');
+})
\ No newline at end of file
diff --git a/resources/assets/admin/js/confirmModal.js b/resources/assets/admin/js/confirmModal.js
new file mode 100644
index 00000000..93c3c603
--- /dev/null
+++ b/resources/assets/admin/js/confirmModal.js
@@ -0,0 +1,43 @@
+var previousTitle, previousMessage;
+
+$ ('.confirm').click (function (e) {
+
+ var titleElement = $ ('#confirmation-title');
+ var messageElement = $ ('#confirmation-message');
+
+ previousTitle = titleElement.text ();
+ previousMessage = messageElement.text ();
+
+ var confirmTitle = $ (this).data ('title');
+ var confirmMessage = $ (this).data ('message');
+
+ var tag = $ (this).prop ('tagName');
+ if (tag === 'A') {
+ var href = $ (this).attr ('href');
+
+ $ ('#confirm-button').attr ('href', href);
+ } else if (tag === 'BUTTON') {
+ var form = $ (this).closest ('form');
+ $ ('#confirm-button').click (function () {
+ form.submit ();
+ })
+ }
+
+ if (confirmTitle)
+ titleElement.text (confirmTitle);
+
+ if (confirmMessage)
+ messageElement.text (confirmMessage);
+
+ $ ('#confirm-modal').modal ('show');
+
+ $ ('.main-wrapper').addClass ('blur');
+
+ e.preventDefault ();
+});
+
+$ ('#confirm-modal').on ('hidden.bs.modal', function () {
+ $ ('#confirmation-title').text (previousTitle);
+ $ ('#confirmation-message').text (previousMessage);
+ $ ('.main-wrapper').removeClass ('blur');
+});
\ No newline at end of file
diff --git a/resources/assets/admin/js/notification.js b/resources/assets/admin/js/notification.js
new file mode 100644
index 00000000..44a7f6fd
--- /dev/null
+++ b/resources/assets/admin/js/notification.js
@@ -0,0 +1,11 @@
+var notification = $ ('.notification');
+if (notification.length) {
+
+ notification.click (function () {
+ $ (this).fadeOut ('fast');
+ });
+
+ setTimeout (function () {
+ notification.fadeOut (1500)
+ }, 5 * 1000)
+}
\ No newline at end of file
diff --git a/resources/assets/admin/js/slugify.js b/resources/assets/admin/js/slugify.js
new file mode 100644
index 00000000..9892f153
--- /dev/null
+++ b/resources/assets/admin/js/slugify.js
@@ -0,0 +1,51 @@
+/**
+ * Makes slug from input string
+ *
+ * @param text
+ * @param trimSpaces
+ *
+ * @returns {string}
+ */
+function slugify(text, trimSpaces) {
+ text = text.toString ().toLowerCase ();
+
+ if (trimSpaces)
+ text = text.trim ();
+
+ return text.replace (/ /g, '-')
+ .replace (/[àáâãäå]/g, "a")
+ .replace (/[čç]/g, "c")
+ .replace (/[ěèéêë]/g, "e")
+ .replace (/[ùúûüů]/g, "u")
+ .replace (/[ìíîï]/g, "i")
+ .replace (/[ňńñ]/g, "n")
+ .replace (/[òóôõö]/g, "o")
+ .replace (/[ýÿ]/g, "y")
+ .replace (/œ/g, "oe")
+ .replace (/ď/g, "d")
+ .replace (/ř/g, "r")
+ .replace (/š/g, "s")
+ .replace (/ž/g, "z")
+ .replace (/ť/g, "t")
+ .replace (/æ/g, "ae")
+ .replace (/[^a-z0-9\-]+/g, '')
+ .replace (/--+/g, '-');
+}
+
+$ ('#lockUrl').change (function () {
+ $ ('.slug-source').keyup ();
+});
+
+$ ('.slug-target').keyup (function () {
+ $ (this).val (slugify ($ (this).val (), false));
+ $ ('#lockUrl').prop ('checked', true);
+});
+
+$ ('.slug-source').keyup (function () {
+ var source = $ (this);
+ var target = $ ('.slug-target');
+ var locked = $ ('#lockUrl');
+
+ if (!locked.is (':checked'))
+ target.val (slugify (source.val (), true));
+});
diff --git a/resources/assets/admin/js/theme.js b/resources/assets/admin/js/theme.js
new file mode 100644
index 00000000..506a8f9b
--- /dev/null
+++ b/resources/assets/admin/js/theme.js
@@ -0,0 +1,316 @@
+var config = window.config = {};
+
+// Config reference element
+var $ref = $ ("#ref");
+
+// Configure responsive bootstrap toolkit
+config.ResponsiveBootstrapToolkitVisibilityDivs = {
+ 'xs': $ ('
'),
+ 'sm': $ ('
'),
+ 'md': $ ('
'),
+ 'lg': $ ('
'),
+ 'xl': $ ('
')
+};
+
+ResponsiveBootstrapToolkit.use ('Custom', config.ResponsiveBootstrapToolkitVisibilityDivs);
+
+//validation configuration
+config.validations = {
+ debug: true,
+ errorClass: 'has-error',
+ validClass: 'success',
+ errorElement: "span",
+
+ // add error class
+ highlight: function (element, errorClass, validClass) {
+ $ (element).parents ("div.form-group")
+ .addClass (errorClass)
+ .removeClass (validClass);
+ },
+
+ // add error class
+ unhighlight: function (element, errorClass, validClass) {
+ $ (element).parents (".has-error")
+ .removeClass (errorClass)
+ .addClass (validClass);
+ },
+
+ // submit handler
+ submitHandler: function (form) {
+ form.submit ();
+ }
+};
+
+//delay time configuration
+config.delayTime = 50;
+
+// chart configurations
+config.chart = {};
+
+/***********************************************
+ * Animation Settings
+ ***********************************************/
+function animate(options) {
+ var animationName = "animated " + options.name;
+ var animationEnd = "webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend";
+ $ (options.selector)
+ .addClass (animationName)
+ .one (animationEnd,
+ function () {
+ $ (this).removeClass (animationName);
+ }
+ );
+}
+
+$ (function () {
+ var $itemActions = $ (".item-actions-dropdown");
+
+ $ (document).on ('click', function (e) {
+ if (!$ (e.target).closest ('.item-actions-dropdown').length) {
+ $itemActions.removeClass ('active');
+ }
+ });
+
+ $ ('.item-actions-toggle-btn').on ('click', function (e) {
+ e.preventDefault ();
+
+ var $thisActionList = $ (this).closest ('.item-actions-dropdown');
+
+ $itemActions.not ($thisActionList).removeClass ('active');
+
+ $thisActionList.toggleClass ('active');
+ });
+});
+
+function setSameHeights($container) {
+
+ $container = $container || $ ('.sameheight-container');
+
+ var viewport = ResponsiveBootstrapToolkit.current ();
+
+ $container.each (function () {
+
+ var $items = $ (this).find (".sameheight-item");
+
+ // Get max height of items in container
+ var maxHeight = 0;
+
+ $items.each (function () {
+ $ (this).css ({height: 'auto'});
+ maxHeight = Math.max (maxHeight, $ (this).innerHeight ());
+ });
+
+ // Set heights of items
+ $items.each (function () {
+ // Ignored viewports for item
+ var excludedStr = $ (this).data ('exclude') || '';
+ var excluded = excludedStr.split (',');
+
+ // Set height of element if it's not excluded on
+ if (excluded.indexOf (viewport) === -1) {
+ $ (this).innerHeight (maxHeight);
+ }
+ });
+ });
+}
+
+$ (function () {
+ animate ({
+ name: 'flipInY',
+ selector: '.error-card > .error-title-block'
+ });
+
+ setTimeout (function () {
+ var $el = $ ('.error-card > .error-container');
+
+ animate ({
+ name: 'fadeInUp',
+ selector: $el
+ });
+
+ $el.addClass ('visible');
+ }, 500);
+});
+
+$ (function () {
+
+ $ ('#sidebar-menu, #customize-menu').metisMenu ({
+ activeClass: 'open'
+ });
+
+ $ ('#sidebar-collapse-btn').on ('click', function (event) {
+ event.preventDefault ();
+
+ $ ("#app").toggleClass ("sidebar-open");
+ });
+
+ $ ("#sidebar-overlay").on ('click', function () {
+ $ ("#app").removeClass ("sidebar-open");
+ });
+
+});
+$ (function () {
+
+ $ ('.actions-list > li').on ('click', '.check', function (e) {
+ e.preventDefault ();
+
+ $ (this).parents ('.tasks-item')
+ .find ('.checkbox')
+ .prop ("checked", true);
+
+ // removeActionList ();
+ });
+
+});
+
+$ (function () {
+ $ ('.nav-profile > li > a').on ('click', function () {
+ var $el = $ (this).next ();
+
+ animate ({
+ name: 'flipInX',
+ selector: $el
+ });
+ });
+});
+
+$ (function () {
+ // Local storage settings
+ var themeSettings = getThemeSettings ();
+
+ // Elements
+
+ var $app = $ ('#app');
+ var $styleLink = $ ('#theme-style');
+ var $customizeMenu = $ ('#customize-menu');
+
+ // Color switcher
+ var $customizeMenuColorBtns = $customizeMenu.find ('.color-item');
+
+ // Position switchers
+ var $customizeMenuRadioBtns = $customizeMenu.find ('.radio');
+
+ /************************************************
+ * Initial State
+ *************************************************/
+
+ setThemeSettings ();
+
+ setSameHeights ();
+
+ /************************************************
+ * Events
+ *************************************************/
+
+ // set theme type
+ $customizeMenuColorBtns.on ('click', function () {
+ themeSettings.themeName = $ (this).data ('theme');
+
+ setThemeSettings ();
+ });
+
+ $customizeMenuRadioBtns.on ('click', function () {
+
+ var optionName = $ (this).prop ('name');
+ themeSettings[optionName] = $ (this).val ();
+
+ setThemeSettings ();
+ });
+
+ function setThemeSettings() {
+ setThemeState ()
+ .delay (config.delayTime)
+ .queue (function (next) {
+
+ setThemeColor ();
+ setThemeControlsState ();
+ saveThemeSettings ();
+
+ $ (document).trigger ("themechange");
+
+ next ();
+ });
+ }
+
+ /************************************************
+ * Update theme based on options
+ *************************************************/
+
+ function setThemeState() {
+ // set theme type
+ if (themeSettings.themeName) {
+ $styleLink.attr ('href', window.cssPath + '/app-' + themeSettings.themeName + '.css');
+ }
+ else {
+ $styleLink.attr ('href', window.cssPath + '/app.css');
+ }
+ // App classes
+ $app.removeClass ('header-fixed footer-fixed sidebar-fixed');
+
+ // set header
+ $app.addClass (themeSettings.headerPosition);
+
+ // set footer
+ $app.addClass (themeSettings.footerPosition);
+
+ // set footer
+ $app.addClass (themeSettings.sidebarPosition);
+
+ return $app;
+ }
+
+ /************************************************
+ * Update theme controls based on options
+ *************************************************/
+
+ function setThemeControlsState() {
+ // set color switcher
+ $customizeMenuColorBtns.each (function () {
+ if ($ (this).data ('theme') === themeSettings.themeName) {
+ $ (this).addClass ('active');
+ }
+ else {
+ $ (this).removeClass ('active');
+ }
+ });
+
+ // set radio buttons
+ $customizeMenuRadioBtns.each (function () {
+ var name = $ (this).prop ('name');
+ var value = $ (this).val ();
+
+ if (themeSettings[name] === value) {
+ $ (this).prop ("checked", true);
+ }
+ else {
+ $ (this).prop ("checked", false);
+ }
+ });
+ }
+
+ /************************************************
+ * Update theme color
+ *************************************************/
+ function setThemeColor() {
+ config.chart.colorPrimary = tinycolor ($ref.find (".chart .color-primary").css ("color"));
+ config.chart.colorSecondary = tinycolor ($ref.find (".chart .color-secondary").css ("color"));
+ }
+
+ /************************************************
+ * Storage Functions
+ *************************************************/
+
+ function getThemeSettings() {
+ var settings = (localStorage.getItem ('themeSettings')) ? JSON.parse (localStorage.getItem ('themeSettings')) : {};
+
+ settings.headerPosition = settings.headerPosition || '';
+ settings.sidebarPosition = settings.sidebarPosition || '';
+ settings.footerPosition = settings.footerPosition || '';
+
+ return settings;
+ }
+
+ function saveThemeSettings() {
+ localStorage.setItem ('themeSettings', JSON.stringify (themeSettings));
+ }
+});
\ No newline at end of file
diff --git a/resources/assets/sass/admin/_common/_styles/layout.scss b/resources/assets/sass/admin/_common/_styles/layout.scss
index 47b0ec98..a5c1edef 100644
--- a/resources/assets/sass/admin/_common/_styles/layout.scss
+++ b/resources/assets/sass/admin/_common/_styles/layout.scss
@@ -3,8 +3,8 @@
.row {
.col {
- padding-left: $grid-gutter-width/2;
- padding-right: $grid-gutter-width/2;
+ padding-left: $grid-gutter-width-base/2;
+ padding-right: $grid-gutter-width-base/2;
float: left;
}
}
diff --git a/resources/assets/sass/admin/_common/items-list.scss b/resources/assets/sass/admin/_common/items-list.scss
index dcd99ce7..f0c3bd4a 100644
--- a/resources/assets/sass/admin/_common/items-list.scss
+++ b/resources/assets/sass/admin/_common/items-list.scss
@@ -1,386 +1,390 @@
@import "../imports";
-
-
/* *******************************************
* Item List general styles
********************************************** */
.item-list {
- list-style: none;
- padding: 0;
- margin: 0;
- margin-bottom: 0;
- line-height: $item-list-line-height;
-
- @include media(lg) {
- font-size: 1rem;
- }
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ line-height: $item-list-line-height;
- @include media(md) {
- font-size: 0.95rem;
- }
+ @include media(lg) {
+ font-size: 1rem;
+ }
- @include media-down(sm) {
- font-size: 1.05rem;
- }
+ @include media(md) {
+ font-size: 0.95rem;
+ }
- display: flex;
- flex-flow: column nowrap;
+ @include media-down(sm) {
+ font-size: 1.05rem;
+ }
- &.striped {
- & > li {
- border-bottom: 1px solid $item-list-color-border;
- }
-
- & > li:nth-child(2n + 1) {
- background-color: lighten($color-divider, 12%);
-
- @include media-down(sm) {
- background-color: lighten($color-divider, 11%);
- }
- }
-
- .item-list-footer {
- border-bottom: none;
- }
- }
+ display: flex;
+ flex-flow: column nowrap;
}
+ .striped {
+ & > div, & tr {
+ border-bottom: 1px solid $item-list-color-border;
+ }
+
+ & > div:nth-child(2n + 1), & tr:nth-child(2n + 1) {
+ background-color: lighten($color-divider, 12%);
+
+ @include media-down(sm) {
+ background-color: lighten($color-divider, 11%);
+ }
+ }
+
+ .item-list-footer {
+ border-bottom: none;
+ }
+ }
/* *******************************************
* Item general styles
********************************************** */
-
.item-list {
- .item {
- display: flex;
- flex-direction: column;
- }
- .item-row {
- display: flex;
- align-items: stretch;
- flex-direction: row;
- justify-content: space-between;
- flex-wrap: wrap;
- min-width: 100%;
+ .subpage {
+ padding-left: 35px;
+ }
- &.nowrap {
- flex-wrap: nowrap;
- }
- }
+ .thumbnail {
+ width: 100%;
+ height: 80px;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center center;
+ }
- .item-col {
- align-items: center;
- display: flex;
- padding: $item-list-padding-y $item-list-padding-x $item-list-padding-y 0;
- flex-basis: 0;
- flex-grow: $item-list-col-grow;
- flex-shrink: $item-list-col-shrink;
- margin-left: auto;
- margin-right: auto;
- min-width: 0;
+ .item {
+ display: flex;
+ flex-direction: column;
+ }
- &.fixed {
- flex-grow: 0;
- flex-shrink: 0;
- flex-basis: auto;
- }
+ .item-row {
+ display: flex;
+ align-items: stretch;
+ flex-direction: row;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ min-width: 100%;
- &.pull-left {
- margin-right: auto;
- }
+ &.nowrap {
+ flex-wrap: nowrap;
+ }
+ }
- &.pull-right {
- margin-left: auto;
- }
+ .item-col {
+ align-items: center;
+ display: flex;
+ padding: $item-list-padding-y $item-list-padding-x $item-list-padding-y 0;
+ flex-basis: 0;
+ flex-grow: $item-list-col-grow;
+ flex-shrink: $item-list-col-shrink;
+ margin-left: auto;
+ margin-right: auto;
+ min-width: 0;
- & > div {
- width: 100%;
- }
+ &.fixed {
+ flex-grow: 0;
+ flex-shrink: 0;
+ flex-basis: auto;
+ }
- &:last-child {
- padding-right: 0;
- }
- }
+ &.pull-left {
+ margin-right: auto;
+ }
- .no-overflow {
- overflow: hidden;
- }
+ &.pull-right {
+ margin-left: auto;
+ }
- .no-wrap {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
+ & > div {
+ width: 100%;
+ }
+
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+
+ .no-overflow {
+ overflow: hidden;
+ }
+
+ .no-wrap {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
}
-
/* *******************************************
* Item components
********************************************** */
-
.item-list {
- /********************************************
- * Header
- *********************************************/
+ /********************************************
+ * Header
+ *********************************************/
- .item-list-header {
- .item-col.item-col-header {
- span {
- color: #999;
- font-size: 0.8rem;
- font-weight: 700 !important;
- }
- }
- }
+ .item-list-header {
+ .item-col.item-col-header {
+ span {
+ color: #999;
+ font-size: 0.8rem;
+ font-weight: 700 !important;
+ }
+ }
+ }
- /********************************************
- * Heading
- *********************************************/
+ /********************************************
+ * Heading
+ *********************************************/
- .item-heading {
- font-size: 0.9rem;
- display: none;
- color: #666;
- font-weight: 700;
- padding-right: $item-list-padding-x;
+ .item-heading {
+ font-size: 0.9rem;
+ display: none;
+ color: #666;
+ font-weight: 700;
+ padding-right: $item-list-padding-x;
- @include media-down(sm) {
- display: block;
- }
+ @include media-down(sm) {
+ display: block;
+ }
- @include media(sm) {
- width: 100%;
- }
+ @include media(sm) {
+ width: 100%;
+ }
- @include media(xs) {
- width: 40%;
- }
- }
+ @include media(xs) {
+ width: 40%;
+ }
+ }
- /********************************************
- * Checkbox
- *********************************************/
+ /********************************************
+ * Checkbox
+ *********************************************/
- .item-col.item-col-check {
- flex-basis: 20px + $item-list-padding-x;
+ .item-col.item-col-check {
+ flex-basis: 20px + $item-list-padding-x;
- @include media-down(sm) {
- order: -8;
- }
- }
+ @include media-down(sm) {
+ order: -8;
+ }
+ }
- .item-check {
- margin-bottom: 0;
+ .item-check {
+ margin-bottom: 0;
- .checkbox + span {
- padding-right: 0;
+ .checkbox + span {
+ padding-right: 0;
- &:before {
- width: 20px;
- }
- }
- }
+ &:before {
+ width: 20px;
+ }
+ }
+ }
- /********************************************
- * Image
- *********************************************/
+ /********************************************
+ * Image
+ *********************************************/
- .item-col.item-col-img {
- display: flex;
- flex-basis: 60px + $item-list-padding-x;
+ .item-col.item-col-img {
+ display: flex;
+ flex-basis: 60px + $item-list-padding-x;
- &.xs{
- flex-basis: 30px + $item-list-padding-x;
- }
+ &.xs {
+ flex-basis: 30px + $item-list-padding-x;
+ }
- &.sm {
- flex-basis: 40px + $item-list-padding-x;
- }
+ &.sm {
+ flex-basis: 40px + $item-list-padding-x;
+ }
- &.lg {
- flex-basis: 90px + $item-list-padding-x;
- }
+ &.lg {
+ flex-basis: 90px + $item-list-padding-x;
+ }
- &.xl {
- flex-basis: 110px + $item-list-padding-x;
- }
+ &.xl {
+ flex-basis: 110px + $item-list-padding-x;
+ }
- a {
- width: 100%;
- // display: flex;
- }
- }
+ a {
+ width: 100%;
+ // display: flex;
+ }
+ }
- .item-img {
- flex-grow: 1;
- align-self: stretch;
- background-color: #efefef;
- padding-bottom: 100%;
- width: 100%;
- height: 0;
+ .item-img {
+ flex-grow: 1;
+ align-self: stretch;
+ background-color: #EFEFEF;
+ padding-bottom: 100%;
+ width: 100%;
+ height: 0;
- @include bg-cover();
- }
+ @include bg-cover();
+ }
- /********************************************
- * Title
- *********************************************/
+ /********************************************
+ * Title
+ *********************************************/
- .item-col.item-col-title {
+ .item-col.item-col-title {
- @include media-down(sm) {
- order: -4;
- }
+ @include media-down(sm) {
+ order: -4;
+ }
- a {
- display: block;
- }
- }
+ a {
+ display: block;
+ }
+ }
- .item-title {
- margin: 0;
- font-size: inherit;
- line-height: inherit;
- font-weight: 600;
- }
+ .item-title {
+ margin: 0;
+ font-size: inherit;
+ line-height: inherit;
+ font-weight: 600;
+ }
- /********************************************
- * Stats
- *********************************************/
+ /********************************************
+ * Stats
+ *********************************************/
- .item-stats {
- height: $item-list-line-height;
- }
+ .item-stats {
+ height: $item-list-line-height;
+ }
- /********************************************
- * Actions
- *********************************************/
+ /********************************************
+ * Actions
+ *********************************************/
- .item-col.item-col-actions-dropdown {
- flex-basis: 30px + $item-list-padding-x;
- text-align: center;
- padding-left: 0 !important;
+ .item-col.item-col-actions-dropdown {
+ flex-basis: 30px + $item-list-padding-x;
+ text-align: center;
+ padding-left: 0 !important;
- @include media-down(sm) {
- order: -3;
+ @include media-down(sm) {
+ order: -3;
- flex-basis: 30px + $item-list-padding-x !important;
- padding-right: $item-list-padding-x;
- }
- }
+ flex-basis: 30px + $item-list-padding-x !important;
+ padding-right: $item-list-padding-x;
+ }
+ }
- .item-actions-dropdown {
- position: relative;
- font-size: 1.1rem;
+ .item-actions-dropdown {
+ position: relative;
+ font-size: 1.1rem;
- &.active {
- .item-actions-block {
- max-width: 120px;
- }
+ &.active {
+ .item-actions-block {
+ max-width: 120px;
+ }
- .item-actions-toggle-btn {
- color: $color-primary;
+ .item-actions-toggle-btn {
+ color: $color-primary;
- .active {
- display: block;
- }
+ .active {
+ display: block;
+ }
- .inactive {
- display: none;
- }
- }
- }
+ .inactive {
+ display: none;
+ }
+ }
+ }
- .item-actions-toggle-btn {
- color: lighten($color-text-light, 10);
- font-size: 1.2rem;
- cursor: pointer;
- width: 100%;
- line-height: 30px;
- text-align: center;
- text-decoration: none;
+ .item-actions-toggle-btn {
+ color: lighten($color-text-light, 10);
+ font-size: 1.2rem;
+ cursor: pointer;
+ width: 100%;
+ line-height: 30px;
+ text-align: center;
+ text-decoration: none;
- .active {
- display: none;
- }
- }
+ .active {
+ display: none;
+ }
+ }
- .item-actions-block {
- height: 30px;
- max-width: 0px;
- line-height: 30px;
- overflow: hidden;
- position: absolute;
- top: 0;
- right: 100%;
- background-color: $color-divider;
- border-radius: 3px;
- transition: all 0.15s ease-in-out;
+ .item-actions-block {
+ height: 30px;
+ max-width: 0px;
+ line-height: 30px;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ right: 100%;
+ background-color: $color-divider;
+ border-radius: 3px;
+ transition: all 0.15s ease-in-out;
- &.direction-right {
- right: auto;
- left: 100%;
- }
+ &.direction-right {
+ right: auto;
+ left: 100%;
+ }
+ .item-actions-list {
+ padding: 0;
+ list-style: none;
+ white-space: nowrap;
+ padding: 0 5px;
- .item-actions-list {
- padding: 0;
- list-style: none;
- white-space: nowrap;
- padding: 0 5px;
+ li {
+ display: inline-block;
+ padding: 0;
+ }
- li{
- display: inline-block;
- padding: 0;
- }
+ a {
+ display: block;
+ padding: 0 5px;
- a {
- display: block;
- padding: 0 5px;
+ &.edit {
+ color: #38424C;
+ }
- &.edit {
- color: #38424C;
- }
+ &.check {
+ color: #40B726;
+ }
- &.check {
- color: #40B726;
- }
+ &.remove {
+ color: #DB0E1E;
+ }
+ }
+ }
+ }
- &.remove {
- color: #DB0E1E;
- }
- }
- }
- }
+ }
- }
-
- /********************************************
- * Something else?
- *********************************************/
+ /********************************************
+ * Something else?
+ *********************************************/
}
-
/* *******************************************
* Adjustments
********************************************** */
// Item which is located inside card inside item-list
.card > .item-list .item > .item-row {
- padding: 0 $card-padding-x;
+ padding: 0 $card-padding-x;
- @include media(xl) {
- padding: 0 $card-padding-x-xl;
- }
+ @include media(xl) {
+ padding: 0 $card-padding-x-xl;
+ }
- @include media-down(sm) {
- padding: 0 $card-padding-x-sm;
- }
+ @include media-down(sm) {
+ padding: 0 $card-padding-x-sm;
+ }
}
\ No newline at end of file
diff --git a/resources/assets/sass/admin/app/items/list/items-list.scss b/resources/assets/sass/admin/app/items/list/items-list.scss
index bd9eb441..c5fff005 100644
--- a/resources/assets/sass/admin/app/items/list/items-list.scss
+++ b/resources/assets/sass/admin/app/items/list/items-list.scss
@@ -1,5 +1,9 @@
@import "../../../imports";
+.item-list {
+
+}
+
.items-list-page {
.title-search-block {
@@ -313,12 +317,7 @@
text-align: left;
}
-
}
-
-
}
}
-
-
}
\ No newline at end of file
diff --git a/resources/lang/cs/admin/actionLog.php b/resources/lang/cs/admin/actionLog.php
index 66fd4f6d..75b32942 100644
--- a/resources/lang/cs/admin/actionLog.php
+++ b/resources/lang/cs/admin/actionLog.php
@@ -1,51 +1,53 @@
"Přiřadil widget :widgetName (#:widgetId) do plochy :widgetAreaName (#:widgetAreaId)",
- "changeSettings" => "Změna nastavení",
- "createNewContent" => "Vytvořena nová obsahová stránka. Titulek :title , url :url a ID #:id",
- "createUser" => "Vytvořen nový uživatel :name s e-mailem :email.",
- "deleteContent" => 'Smazána stránka ":title", url "url a ID #:id. Tato změna je zaznamenána v revizi :revision.',
- "deleteCustomField" => "a",
- "deleteWidgetArea" => "Smazal plochu pro widget :name",
- "displayingUsersActions" => "Zobrazuji všechny akce od uživatele :name (:email).",
- "draftFromContent" => "Upraven widget :name (#:id)",
- "editContent" => 'Editace stránky - nový titulek je ":title", url :url a ID #:id. Revize změny: :revision.',
- "editCustomField" => "a",
- "editWidget" => "Upraven widget :name (#:id)",
- "editWidgetArea" => 'Upravena plocha pro widgety :name (#:id) s popisem ":description"',
- "invalidEditContentAttempt" => "Pokus o editaci obsahu s ID :contentId",
- "ip" => "IP adresa",
- "login" => "Přihlášen",
- "logout" => "Odhlášen",
- "nameAssignWidget" => "Přiřazení widgetu",
- "nameChangeSettings" => "Změna nastavení",
- "nameCreateNewContent" => "Vytvoření nové stránky",
- "nameCreateUser" => "Vytvořen uživatel",
- "nameDeleteContent" => "Smazání stránky",
- "nameDeleteCustomField" => "Smazání uživatelského pole",
- "nameDeleteWidgetArea" => "Smazání plochy pro widgety",
- "nameDraftFromContent" => "Vytvoření konceptu z publikované stránky",
- "nameEditContent" => "Úprava obsahu",
- "nameEditCustomField" => "Editace uživatelského pole",
- "nameEditWidget" => "Úprava widgetu",
- "nameEditWidgetArea" => "Úprava plochy pro widgety",
+ "assignWidget" => "Přiřadil widget :widgetName (#:widgetId) do plochy :widgetAreaName (#:widgetAreaId)",
+ "changeSettings" => "Změna nastavení",
+ "createNewContent" => "Vytvořena nová obsahová stránka. Titulek :title , url :url a ID #:id",
+ "createUser" => "Vytvořen nový uživatel :name s e-mailem :email.",
+ "deleteContent" => 'Smazána stránka ":title", url "url a ID #:id. Tato změna je zaznamenána v revizi :revision.',
+ "deleteCustomField" => "a",
+ "deleteWidgetArea" => "Smazal plochu pro widget :name",
+ "displayingUsersActions" => "Zobrazuji všechny akce od uživatele :name (:email).",
+ "draftFromContent" => "Upraven widget :name (#:id)",
+ "editContent" => 'Editace stránky - nový titulek je ":title", url :url a ID #:id. Revize změny: :revision.',
+ "editCustomField" => "a",
+ "editWidget" => "Upraven widget :name (#:id)",
+ "editWidgetArea" => 'Upravena plocha pro widgety :name (#:id) s popisem ":description"',
+ "invalidEditContentAttempt" => "Pokus o editaci obsahu s ID :contentId",
+ "ip" => "IP adresa",
+ "login" => "Přihlášen",
+ "logout" => "Odhlášen",
+ "nameAssignWidget" => "Přiřazení widgetu",
+ "nameChangeSettings" => "Změna nastavení",
+ "nameCreateNewContent" => "Vytvoření nové stránky",
+ "nameCreateUser" => "Vytvořen uživatel",
+ "nameDeleteContent" => "Smazání stránky",
+ "nameDeleteCustomField" => "Smazání uživatelského pole",
+ "nameDeleteWidgetArea" => "Smazání plochy pro widgety",
+ "nameDraftFromContent" => "Vytvoření konceptu z publikované stránky",
+ "nameEditContent" => "Úprava obsahu",
+ "nameEditCustomField" => "Editace uživatelského pole",
+ "nameEditWidget" => "Úprava widgetu",
+ "nameEditWidgetArea" => "Úprava plochy pro widgety",
"nameInvalidEditContentAttempt" => "Pokus o editaci neexistující/neplatné stránky",
- "nameLogin" => "Login",
- "nameLogout" => "Odhlášení",
- "nameNewCustomField" => "Vytvoření uživatelského pole",
- "nameNewWidget" => "Nový widget",
- "nameNewWidgetArea" => "Vytoření plochy pro widgety",
- "namePublishContent" => "Publikace stránky",
- "nameRemoveWidgetFromArea" => "Odebrání widgetu z plochy",
- "nameSetHomepage" => "Nastavení domovské stránky",
- "nameUserEdit" => "Editace uživatele",
- "newCustomField" => 'Přidal nové uživatelské pole s ID #:id a jménem ":name"',
- "newWidget" => 'Vytvořen nový widget :type se jménem :name (#:id) a popisem ":description".',
- "newWidgetArea" => 'Vytvořil plochu pro widgety :name (#:id) s popisem ":description"',
- "overview" => "Seznam všech akcí",
- "publishContent" => 'Publikována stránka ":title" (url :url, ID #:id). Revize :revision.',
- "removeWidgetFromArea" => "Odebrán widget :widgetName z oblasti :widgetAreaName (#widgetAreaId)",
- "setHomepage" => "Nastavena nová domovská stránka: :title, URL: :url a ID #:id. Revize :revision.",
- "userAgent" => "Prohlížeč",
- "userEdit" => "Upravil uživatele :name (:email)",
+ "nameLogin" => "Login",
+ "nameLogout" => "Odhlášení",
+ "nameNewCustomField" => "Vytvoření uživatelského pole",
+ "nameNewWidget" => "Nový widget",
+ "nameNewWidgetArea" => "Vytoření plochy pro widgety",
+ "namePublishContent" => "Publikace stránky",
+ "nameRemoveWidgetFromArea" => "Odebrání widgetu z plochy",
+ "nameSetHomepage" => "Nastavení domovské stránky",
+ "nameUserEdit" => "Editace uživatele",
+ "newCustomField" => 'Přidal nové uživatelské pole s ID #:id a jménem ":name"',
+ "newWidget" => 'Vytvořen nový widget :type se jménem :name (#:id) a popisem ":description".',
+ "newWidgetArea" => 'Vytvořil plochu pro widgety :name (#:id) s popisem ":description"',
+ "overview" => "Seznam všech akcí",
+ "publishContent" => 'Publikována stránka ":title" (url :url, ID #:id). Revize :revision.',
+ "removeWidgetFromArea" => "Odebrán widget :widgetName z oblasti :widgetAreaName (#widgetAreaId)",
+ "setHomepage" => "Nastavena nová domovská stránka: :title, URL: :url a ID #:id. Revize :revision.",
+ "userAgent" => "Prohlížeč",
+ "userEdit" => "Upravil uživatele :name (:email)",
+ 'newFile' => 'Nahrál soubor :name (typ :mime)',
+ 'nameNewFile' => 'Nahrání souboru'
];
diff --git a/resources/lang/cs/admin/common.php b/resources/lang/cs/admin/common.php
index 6f0180de..a8cc3e2c 100644
--- a/resources/lang/cs/admin/common.php
+++ b/resources/lang/cs/admin/common.php
@@ -7,5 +7,6 @@ return [
"logoutSuccessfull" => "Odhlášení proběhlo úspěšně",
"no" => "Ne",
"yes" => "Ano",
- 'empty' => 'Žádná data nebyla nalezena.'
+ 'empty' => 'Žádná data nebyla nalezena.',
+ "noSearchEngine" => 'Není dostupný žádný vyhledávač.'
];
diff --git a/resources/lang/cs/admin/contents.php b/resources/lang/cs/admin/contents.php
index f4ce8ddd..1e84ba2a 100644
--- a/resources/lang/cs/admin/contents.php
+++ b/resources/lang/cs/admin/contents.php
@@ -35,10 +35,10 @@ return [
"noHomepage" => "Domovská stránka není nastavena (a nebo je nastavena jako Koncept)! Vyberte prosím jinou stránku, nebo stávající publikujte.",
"noPagesAvailable" => "Nejsou dostupné žádné stránky. Pro zobrazení přehledu nejprve nějakou vytvořte.",
"noParentPage" => "-- Nadřazená stránka nevybrána --",
- "noTemplates" => "Nelze vytvořit stránku. Pro tento modul neexistuje žádná šablona, která by šla použít pro vykreslení obsahu.",
+ "noTemplates" => "Pro tento modul neexistuje žádná šablona, která by šla použít pro vykreslení obsahu. Nebude možné tuto stránku zobrazit!",
"nothingToEdit" => "Nebyly provedeny žádné změny, proto nedošlo k editaci.",
"overview" => "Seznam všech obsahových stránek",
- "pageDeleted" => "Stránka :name (:url) úspěšně smazána.",
+ "pageDeleted" => "Stránka :name úspěšně smazána.",
"parentPage" => "Nadřazená stránka",
"publicationOptions" => "Nastavení publikace",
"save" => "Uložit",
@@ -56,4 +56,6 @@ return [
"title" => "Titulek",
"uploadTitleImage" => "Nahrát titulní obrázek",
"viewPage" => "Zobrazit",
+ 'setOrder' => 'Nastavení pořadí stránek',
+ 'orderSuccessfullySet' => 'Pořadí stránek úspěšně nastaveno',
];
diff --git a/resources/lang/cs/admin/history.php b/resources/lang/cs/admin/history.php
index f0191438..72ed3fa5 100644
--- a/resources/lang/cs/admin/history.php
+++ b/resources/lang/cs/admin/history.php
@@ -6,7 +6,7 @@ return [
"changedFromTo" => "Změna z :from na :to ",
"columnCategory" => "Kategorie",
"columnFile" => "Přiřazené soubory",
- "columnIs_homepage" => "Domovská stránka",
+ "columnIsHomepage" => "Domovská stránka",
"columnMetaDescription" => "Popis",
"columnMetaKeywords" => "Klíčová slova",
"columnPageContent" => "Obsah stránky",
@@ -14,6 +14,7 @@ return [
"columnStatus" => "Viditelnost stránky",
"columnTemplate" => "Šablona",
"columnTitle" => "Titulek",
+ "columnTitlePhoto" => "Titulní obrázek",
"columnTitlePhotoFilename" => "Titulní obrázek",
"columnUrl" => "URL",
"deletedFile" => "Odebrán soubor :file.",
diff --git a/resources/lang/cs/admin/loginForm.php b/resources/lang/cs/admin/loginForm.php
index bc8dec7a..d6236905 100644
--- a/resources/lang/cs/admin/loginForm.php
+++ b/resources/lang/cs/admin/loginForm.php
@@ -10,4 +10,6 @@ return [
'loginToContinue' => 'Pro vstup je nutné přihlášení',
'yourEmail' => 'Váš e-mail',
'yourPassword' => 'Vaše heslo',
+ 'sendConfirmEmail' => 'Odeslat odkaz pro resetování hesla',
+ 'passwordReset' => 'Nové heslo'
];
diff --git a/resources/lang/cs/admin/mainMenu.php b/resources/lang/cs/admin/mainMenu.php
index 5fa6e0ac..595883d3 100644
--- a/resources/lang/cs/admin/mainMenu.php
+++ b/resources/lang/cs/admin/mainMenu.php
@@ -27,4 +27,6 @@ return [
"widgetAreas" => "Plochy pro widgety",
"widgets" => "Widgety",
"widgetsOverview" => "Všechny widgety",
+ 'permissions' => 'Přístupová práva',
+ 'contentOrder' => 'Pořadí stránek'
];
diff --git a/resources/lang/cs/admin/permissions.php b/resources/lang/cs/admin/permissions.php
new file mode 100644
index 00000000..b45b9125
--- /dev/null
+++ b/resources/lang/cs/admin/permissions.php
@@ -0,0 +1,69 @@
+ 'Výchozí oprávnění úspěšně nastavena.',
+ 'pageTitle' => 'Nastavení výchozích oprávnění',
+ 'description' => 'Nastavte výchozí oprávnění, která budou přidělena nově vytvořeným uživatelům.',
+ 'successfullySet' => 'Oprávnění úspěšně nastavena.',
+ 'contents' => [
+ 'management' => 'Správa obsahu',
+ 'create' => 'Vytvořit novou stránku',
+ 'update' => 'Upravovat své stránky',
+ 'update-all' => 'Upravovat i cizí stránky',
+ 'delete' => 'Mazat',
+ 'set-homepage' => 'Nastavovat domovskou stránku',
+ 'publish' => 'Publikovat',
+ 'protect' => 'Publikovat jen pro přihlášené',
+ 'draft' => 'Skrýt publikovanou stránku',
+ 'view-history' => 'Zobrazit historii',
+ ],
+ 'users' => [
+ 'management' => 'Správa uživatelů',
+ 'create' => 'Vytvořit nového uživatele',
+ 'update' => 'Upravovat ostatní uživatele',
+ 'block' => 'Zablokovat',
+ 'delete' => 'Mazat',
+ 'unblock' => 'Odblokovat',
+ 'set-permissions' => 'Nastavovat oprávnění',
+ 'change-role' => 'Změnit roli',
+ 'change-status' => 'Změnit status uživatele (zablokovat/odblokovat)'
+ ],
+ 'files' => [
+ 'management' => 'Správa souborů',
+ 'upload' => 'Nahrávání',
+ 'update' => 'Úprava',
+ 'delete' => 'Mazání',
+ 'move-to-directories' => 'Přesouvat soubory mezi adresáři'
+ ],
+ 'directories' => [
+ 'management' => 'Správa složek',
+ 'create' => 'Vytváření',
+ 'edit' => 'Úprava',
+ 'delete' => 'Mazání'
+ ],
+ 'widgetareas' => [
+ 'management' => 'Správa ploch pro widgety',
+ 'create' => 'Vytváření',
+ 'edit' => 'Úprava',
+ 'delete' => 'Mazání'
+ ],
+ 'widgets' => [
+ 'management' => 'Správa widgetů',
+ 'create' => 'Vytváření',
+ 'edit' => 'Úprava',
+ 'delete' => 'Mazání',
+ 'assign' => 'Přiřazování widgetů do plochy',
+ 'unassign' => 'Odstraňování widgetů z plochy'
+ ],
+ 'templates' => [
+ 'management' => 'Správa šablon',
+ 'copy' => 'Kopírování',
+ 'edit' => 'Úprava',
+ ],
+ 'actions' => [
+ 'management' => 'Zobrazení přehledu akcí',
+ ],
+ 'settings' => [
+ 'management' => 'Správa nastavení',
+ ],
+ 'save' => 'Uložit výchozí nastavení'
+];
\ No newline at end of file
diff --git a/resources/lang/cs/admin/settings.php b/resources/lang/cs/admin/settings.php
index 4e1ed5ab..e4043ed2 100644
--- a/resources/lang/cs/admin/settings.php
+++ b/resources/lang/cs/admin/settings.php
@@ -21,4 +21,21 @@ return [
],
"socialSites" => "Sociální sítě",
"successfullySaved" => "Nastavení úspěšně změněno",
+ 'advanced' => [
+ "title" => 'Pokročilé',
+ ],
+
+ 'previews' => [
+ 'title' => 'Nastavení obrázkových náhledů',
+ 'quality' => 'Kvalita',
+ 'size' => 'Velikost (v pixelech)'
+ ],
+
+ 'widgets' => [
+ 'title' => 'Widgety',
+ 'useWidgetPreloading' => 'Používat přednačítání widgetů?',
+ 'preloadFrequentedWidgetAreasTreshold' => 'Práh pro přednačtení widgetů',
+ 'widgetCacheLifetime' => 'Platnost cache pro widgety'
+ ]
+
];
diff --git a/resources/lang/cs/admin/templates.php b/resources/lang/cs/admin/templates.php
index 6256abf6..060179da 100644
--- a/resources/lang/cs/admin/templates.php
+++ b/resources/lang/cs/admin/templates.php
@@ -1,23 +1,27 @@
"Adresář nemá potřebná práva k zápisu. Kopírování není dostupné.",
- "cannotWriteContent" => "Nelze uložit obsah šablony, adresář pro uložení souboru nemá dostatečná oprávnění pro zápis. Meta informace k šabloně však byly uloženy.",
- "copyFailed" => "Nelze zkopírovat šablonu do :name. Zkontrolujte prosím právo pro zápis do adresáře s šablonami.",
- "copySuccessfull" => "Šablona :name úspěšně vytvořena zkopírováním z jiné šablony",
- "core" => "Společné šablony",
- "description" => "Popis",
- "edit" => "Úprava šablony :name",
- "editSuccessfull" => "Šablona úspěšně uložena",
- "error" => "Šablony pro zobrazení chyb",
- "homepage" => "Domovská stránka",
- "name" => "Jméno šablony",
- "new" => "Nová šablona",
- "newTemplateName" => "Jméno šablony použité v Blade šablonách",
+ "copy" => 'Kopírovat šablonu',
+ "cannotCopy" => "Adresář nemá potřebná práva k zápisu. Kopírování není dostupné.",
+ "cannotWriteContent" => "Nelze uložit obsah šablony, adresář pro uložení souboru nemá dostatečná oprávnění pro zápis. Meta informace k šabloně však byly uloženy.",
+ "copyFailed" => "Nelze zkopírovat šablonu do :name. Zkontrolujte prosím právo pro zápis do adresáře s šablonami.",
+ "copySuccessfull" => "Šablona :name úspěšně vytvořena zkopírováním z jiné šablony",
+ "core" => "Společné šablony",
+ "description" => "Popis",
+ "edit" => "Úprava šablony :name",
+ "editSuccessfull" => "Šablona úspěšně uložena",
+ "error" => "Šablony pro zobrazení chyb",
+ "homepage" => "Domovská stránka",
+ "name" => "Jméno šablony",
+ "new" => "Nová šablona",
+ "newTemplateName" => "Jméno šablony použité v Blade šablonách",
"newTemplateNameSuffix" => "kopie",
- "noSubdirectories" => "Nejsou k dispozici žádné podadresáře",
- "noTemplates" => "Žádná šablona k dispozici",
- "notWritable" => "Nelze zapisovat do :file. Veškeré úpravy na tomto soubory nebudou uloženy!",
- "overview" => "Šablony",
- "parentDirectory" => "Rodičovský adresář",
- "subdirectories" => "Podadresáře",
+ "noSubdirectories" => "Nejsou k dispozici žádné podadresáře",
+ "noTemplates" => "Žádná šablona k dispozici",
+ "notWritable" => "Nelze zapisovat do :file. Veškeré úpravy na tomto soubory nebudou uloženy!",
+ "overview" => "Šablony",
+ "parentDirectory" => "Rodičovský adresář",
+ "subdirectories" => "Podadresáře",
+ 'widgets' => 'Widgety',
+ 'errors' => 'Chybové stránky',
+ 'contact' => 'Kontaktní formulář'
];
diff --git a/resources/lang/cs/admin/userManagement.php b/resources/lang/cs/admin/userManagement.php
index 0cec8e24..ec7e6a7e 100644
--- a/resources/lang/cs/admin/userManagement.php
+++ b/resources/lang/cs/admin/userManagement.php
@@ -1,32 +1,32 @@
"Přidat nového uživatele",
- "allStatuses" => "Všechny",
- "detail" => "Detaily uživatele :name (:email)",
- "edit" => "Upravit uživatele",
- "editUser" => "Editace uživatele :name (:email)",
- "email" => "E-mail",
- "gravatarLink" => 'Nastavte si avatar na gravatar.com ',
- "moreUserActions" => "Zobrazit více...",
- "name" => "Celé jméno",
- "noActions" => "Uživatel zatím v systému nic neudělal.",
- "noUsers" => "Žádní uživatelé.",
- "overview" => "Seznam všech uživatelů",
- "password" => "Heslo",
- "passwordLeaveEmpty" => "Nevyplňujte, pokud nechcete změnit heslo.",
- "profile" => "Profil uživatele",
- "register" => "Vytvořit uživatele",
+ "addNewUser" => "Přidat nového uživatele",
+ "allStatuses" => "Všechny",
+ "detail" => "Detaily uživatele :name (:email)",
+ "edit" => "Upravit uživatele",
+ "editUser" => "Editace uživatele :name (:email)",
+ "email" => "E-mail",
+ "gravatarLink" => 'Nastavte si avatar na gravatar.com ',
+ "moreUserActions" => "Zobrazit více...",
+ "name" => "Celé jméno",
+ "noActions" => "Uživatel zatím v systému nic neudělal.",
+ "noUsers" => "Žádní uživatelé.",
+ "overview" => "Seznam všech uživatelů",
+ "password" => "Heslo",
+ "passwordLeaveEmpty" => "Nevyplňujte, pokud nechcete změnit heslo.",
+ "profile" => "Profil uživatele",
+ "register" => "Vytvořit uživatele",
"registrationSuccessfull" => "Nový úživatel úspěšně přidán.",
- "role_admin" => "Administrátor",
- "role_editor" => "Editor",
- "role_visitor" => "Návštěvník",
- "roles" => "Prosím, zvolte roli uživatele",
- "status" => "Stav",
- "status_active" => "Aktivní",
- "status_blocked" => "Zablokovaný",
- "status_deleted" => "Smazaný",
- "update" => "Upravit informace",
- "userDetail" => "Informace",
- "userSuccessfullyEdited" => "Uživatel úspěšně upraven.",
- "usersActions" => "Akce uživatele",
+ "role_admin" => "Uživatel s přístupem do administrace",
+ "role_visitor" => "Návštěvník (bez přístupu do administrace)",
+ "roles" => "Prosím, zvolte roli uživatele",
+ "status" => "Stav",
+ "status_active" => "Aktivní",
+ "status_blocked" => "Zablokovaný",
+ "status_deleted" => "Smazaný",
+ "update" => "Upravit informace",
+ "userDetail" => "Informace",
+ "userSuccessfullyEdited" => "Uživatel úspěšně upraven.",
+ "usersActions" => "Akce uživatele",
+ 'permissions' => 'Oprávnění'
];
diff --git a/resources/lang/cs/admin/widgetAreas.php b/resources/lang/cs/admin/widgetAreas.php
index c601cf81..912cefaa 100644
--- a/resources/lang/cs/admin/widgetAreas.php
+++ b/resources/lang/cs/admin/widgetAreas.php
@@ -20,4 +20,5 @@ return [
"successfullyCreated" => "Plocha pro widgety úspěšně vytvořena",
"successfullyDeleted" => "Úspěšně smazáno",
"uniqueCode" => "Unikátní kód",
+ 'pageDescription' => 'Plochy pro widgety jsou oblasti, do kterých je možné přiřadit widgety a následně je zobrazovat na webu.'
];
diff --git a/resources/lang/cs/auth.php b/resources/lang/cs/auth.php
index 3c6641c8..e27fa692 100644
--- a/resources/lang/cs/auth.php
+++ b/resources/lang/cs/auth.php
@@ -1,6 +1,9 @@
"Nelze přistoupit k tomuto zdroji",
- "failed" => "Přihlašovací údaje nejsou správné.",
- "throttle" => "Příliš mnoho neplatných přihlášení. Zkuste to znovu za :seconds sekund.",
+ "accessDenied" => "Nelze přistoupit k tomuto zdroji",
+ "failed" => "Přihlašovací údaje nejsou správné.",
+ "throttle" => "Příliš mnoho neplatných přihlášení. Zkuste to znovu za :seconds sekund.",
+ 'userNotActive' => 'Uživatel nebyl aktivován, či byl administrátorem zablokován.',
+ 'visitorInAdmin' => 'Návštěvník nemá oprávnění do adminstrace!',
+ 'loginExpired' => 'Vaše přihlášení expirovalo. Přihlašte se prosím znovu.'
];
diff --git a/resources/lang/cs/common.php b/resources/lang/cs/common.php
index 763c5c6c..2a258214 100644
--- a/resources/lang/cs/common.php
+++ b/resources/lang/cs/common.php
@@ -28,5 +28,7 @@ return [
"positionStatic" => "statické",
"sidebar" => "Sidebar",
'no' => 'Ne',
- 'yes' => 'Ano'
+ 'yes' => 'Ano',
+ 'minutes' => 'minut',
+ 'views' => 'zobrazení'
];
diff --git a/resources/lang/cs/notification.php b/resources/lang/cs/notification.php
new file mode 100644
index 00000000..d79ea618
--- /dev/null
+++ b/resources/lang/cs/notification.php
@@ -0,0 +1,9 @@
+ [
+ 'firstLine' => 'Dostali jste tento e-mail, protože byl zaslán požadavek na reset hesla. Pro nastavení nového hesla klikněte na následující tlačítko:',
+ 'lastLine' => 'V případě, že tento e-mail neočekáváte, můžete ho klidně ignorovat.',
+ 'button' => 'Resetovat heslo',
+ 'subject' => 'Odkaz pro změnu hesla'
+ ]
+];
\ No newline at end of file
diff --git a/resources/lang/cs/register.php b/resources/lang/cs/register.php
new file mode 100644
index 00000000..38d8ec29
--- /dev/null
+++ b/resources/lang/cs/register.php
@@ -0,0 +1,10 @@
+ 'Registrace nového uživatele',
+ 'name' => 'Jméno',
+ 'email' => 'E-mail',
+ 'password' => 'Heslo',
+ 'passwordConfirm' => 'Heslo (znovu)',
+ 'register' => 'Vytvořit účet',
+ 'setNewPassword' => 'Nastavit nové heslo'
+];
\ No newline at end of file
diff --git a/resources/lang/cs/widgets/common.php b/resources/lang/cs/widgets/common.php
index 5d545038..49bf9a4d 100644
--- a/resources/lang/cs/widgets/common.php
+++ b/resources/lang/cs/widgets/common.php
@@ -1,9 +1,10 @@
"HTML třída použitá pro obalový element widgetu",
- "containerId" => "Unikátní ID widgetu (může být i prázdné)",
- "description" => "Popis",
- "edit" => "Upravuji widget :name",
- "name" => "Jméno",
- "new" => "Vytvořit nový widget"
+"containerClass" => "HTML třída použitá pro obalový element widgetu",
+"containerId" => "Unikátní ID widgetu (může být i prázdné)",
+"description" => "Popis",
+"edit" => "Upravuji widget :name",
+"name" => "Jméno",
+"new" => "Vytvořit nový widget",
+"widgetDescription" => "Jednoduchý widget pro vkládání HTML kódů.",
];
diff --git a/resources/lang/cs/widgets/orbitSlider.php b/resources/lang/cs/widgets/orbitSlider.php
deleted file mode 100644
index 3ac4aab9..00000000
--- a/resources/lang/cs/widgets/orbitSlider.php
+++ /dev/null
@@ -1,21 +0,0 @@
- "Dodatečný HTML/JS kód pro slider",
-"containerClass" => "HTML třída pro obalový element tohoto widgetu",
-"createNew" => "Vytvořit nový",
-"description" => "Popis",
-"displayBullets" => "Zobrazit odrážky?",
-"edit" => "Upravit :name",
-"editExisting" => "Uložit",
-"extraSettings" => "Další nastavení",
-"fullscreen" => "Zobrazit slider na celou obrazovku",
-"imagesPerSlide" => "Obrázků na slide",
-"name" => "Jméno slideru",
-"new" => "Vytvořit nový slider",
-"preview" => "Náhled",
-"showInFullscreen" => "Zobrazit na celou obrazovku",
-"slideContainerClass" => "HTML třída pro každý obrázek ve slideru",
-"upload" => "Přidat obrázky do slideru",
-"widgetDescription" => "Slider pro obrázky. Tento widget používá Foundation framework a jeho vlastní slider zvaný Orbit. (Nebude fungovat bez Foundation 6!)",
-"widgetName" => "Orbit slider",
-];
diff --git a/resources/lang/cs/widgets/socialButtons.php b/resources/lang/cs/widgets/socialButtons.php
new file mode 100644
index 00000000..987ef446
--- /dev/null
+++ b/resources/lang/cs/widgets/socialButtons.php
@@ -0,0 +1,16 @@
+ "HTML kod",
+"containerClass" => "HTML třída pro obalový element tohoto widgetu",
+"createNew" => "Vytvořit nový widget",
+"description" => "Popis",
+"edit" => "Edituji widget :name",
+"editExisting" => "Upravit widget",
+"name" => "Jméno",
+"new" => "Vytvořit nový widget",
+"preview" => "Náhled",
+"save" => "Uložit",
+"successfullyEdited" => "Widget úspěšně upraven",
+"widgetDescription" => "Jednoduchý widget pro vkládání sociálních tlačítek.",
+"widgetName" => "Sociální tlačítka",
+];
diff --git a/resources/views/admin/content/_partials/orderSetupRow.blade.php b/resources/views/admin/content/_partials/orderSetupRow.blade.php
new file mode 100644
index 00000000..db691d26
--- /dev/null
+++ b/resources/views/admin/content/_partials/orderSetupRow.blade.php
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/resources/views/admin/content/_partials/overviewRow.blade.php b/resources/views/admin/content/_partials/overviewRow.blade.php
new file mode 100644
index 00000000..12ed6919
--- /dev/null
+++ b/resources/views/admin/content/_partials/overviewRow.blade.php
@@ -0,0 +1,137 @@
+
\ No newline at end of file
diff --git a/resources/views/admin/content/edit.blade.php b/resources/views/admin/content/edit.blade.php
index ba31fe6c..49bdee65 100644
--- a/resources/views/admin/content/edit.blade.php
+++ b/resources/views/admin/content/edit.blade.php
@@ -21,9 +21,12 @@
@if ($historySize > 0)
-
+ @can('viewHistory', $page)
+
+ @endcan
@endif
diff --git a/resources/views/admin/content/formParts/appearance.blade.php b/resources/views/admin/content/formParts/appearance.blade.php
index 341a5ca3..e9991903 100644
--- a/resources/views/admin/content/formParts/appearance.blade.php
+++ b/resources/views/admin/content/formParts/appearance.blade.php
@@ -4,25 +4,30 @@
class="col-lg-4 col-lg-offset-4 col-md-6 col-md-offset-3 col-sm-12 title-photo text-center">
-
-
-
+ @can('upload', \App\Models\FileManager\File::class)
+
+
+
+ @endcan
@endif
-
-
-
- @lang('admin/contents.uploadTitleImage')
-
-
+@can('upload', \App\Models\FileManager\File::class)
+
-
+@endcan
@if (count($templates))
diff --git a/resources/views/admin/content/formParts/publicationSetup.blade.php b/resources/views/admin/content/formParts/publicationSetup.blade.php
index 62725948..479a07ff 100644
--- a/resources/views/admin/content/formParts/publicationSetup.blade.php
+++ b/resources/views/admin/content/formParts/publicationSetup.blade.php
@@ -5,7 +5,7 @@
+ placeholder="@lang('admin/contents.field_published_from')" />
@include('admin.snippets.hasError', ['field' => 'publishedFrom'])
@@ -16,7 +16,7 @@
+ placeholder="@lang('admin/contents.field_published_to')" />
@include('admin.snippets.hasError', ['field' => 'publishedTo'])
\ No newline at end of file
diff --git a/resources/views/admin/content/new.blade.php b/resources/views/admin/content/new.blade.php
index fc2a5996..e2d3e58f 100644
--- a/resources/views/admin/content/new.blade.php
+++ b/resources/views/admin/content/new.blade.php
@@ -10,7 +10,7 @@
@endif
-
+
{!! csrf_field() !!}
@include('admin.content.formInputs')
diff --git a/resources/views/admin/content/order.blade.php b/resources/views/admin/content/order.blade.php
new file mode 100644
index 00000000..ec5db2bd
--- /dev/null
+++ b/resources/views/admin/content/order.blade.php
@@ -0,0 +1,39 @@
+@extends('admin.layoutWithNavigation')
+
+@section('pageHeading', trans('admin/contents.setOrder'))
+
+@section('content')
+
+ @if (count($pages) > 0)
+
+
+
+ {!! csrf_field() !!}
+
+
+ @foreach($pages as $page)
+ @include('admin.content._partials.orderSetupRow')
+
+ @foreach($page->subpages as $subpage)
+ @include('admin.content._partials.orderSetupRow', ['page' => $subpage, 'extraClass' => 'subpage'])
+ @endforeach
+ @endforeach
+
+
+
+ @lang('admin/contents.save')
+
+
+
+
+
+
+
+ @else
+
+ @lang('admin/contents.noPagesAvailable')
+
+ @endif
+@endsection
diff --git a/resources/views/admin/content/overview.blade.php b/resources/views/admin/content/overview.blade.php
index 24d5f3b9..84c21fde 100644
--- a/resources/views/admin/content/overview.blade.php
+++ b/resources/views/admin/content/overview.blade.php
@@ -3,11 +3,27 @@
@section('pageHeading', @trans($pageHeading))
@section('headerButtons')
- @if($module->exists === true)
-
-
-
- @endif
+ @can('create', \App\Models\Content\Content::class)
+ @if (!empty($contentModules))
+
+ @if (count($contentModules) == 1)
+
+ @else
+
+ @endif
+
+ @endif
+ @endcan
@endsection
@section('content')
@@ -22,132 +38,32 @@
@endif
@if (count($pages) > 0)
-
-
-
-
@lang('admin/contents.title')
-
@lang('admin/contents.status')
-
@lang('admin/contents.moduleName')
-
@lang('admin/contents.createdAt')
-
@lang('admin/contents.actions')
-
- @foreach($pages as $page)
-
-
-
- @if(!view()->exists(template_name($page->template, false)))
-
- @else
- @if(!empty($page->titlePhoto))
-
- @else
-
- @endif
- @endif
-
+
+
+
+
+
+
@lang('admin/contents.title')
+
@lang('admin/contents.status')
+
@lang('admin/contents.moduleName')
+
@lang('admin/contents.createdAt')
+
@lang('admin/contents.actions')
-
-
- {{$page->title}}
-
+ @foreach($pages as $page)
+ @include('admin.content._partials.overviewRow', ['extraClass' => $page->subpages->isEmpty() ?: 'has-subpages'])
- @if($page->isHomepage)
@lang('admin/contents.homepage') @endif
-
-
- {{$statuses[$page->status]}}
-
-
-
@date($page->created_at)
-
-
-
-
-
-
-
-
-
-
-
-
-
- @if(!$page->isHomepage)
-
-
-
-
-
-
- @endif
-
-
-
-
-
-
-
- @if($page->isDraft())
-
-
-
-
-
-
-
-
-
-
- @else
-
-
-
-
-
-
-
-
-
- @endif
-
-
-
-
-
-
-
-
-
-
+ @foreach($page->subpages as $subpage)
+ @include('admin.content._partials.overviewRow', ['page' => $subpage, 'extraClass' => 'subpage hidden-xs-up'])
+ @endforeach
+ @endforeach
- @endforeach
+
+
+
-
- {!! $pages->render() !!}
-
@else
diff --git a/resources/views/admin/fileManager/edit.blade.php b/resources/views/admin/fileManager/edit.blade.php
index a7336f4f..cd924318 100644
--- a/resources/views/admin/fileManager/edit.blade.php
+++ b/resources/views/admin/fileManager/edit.blade.php
@@ -2,41 +2,60 @@
@section('pageHeading', @trans('admin/fileManager.edit', ['name' => $file->original_filename]))
@section('headerButtons')
-
-
-
- @endsection
+
+
+
+ @can('delete', $file)
+
+
+
+ @endcan
+@endsection
@section('content')
- {!! \App\CMS\Helpers\FileManager::getLargePreview($file) !!}
+
+
+ {!! \App\CMS\Helpers\FileManager::getLargePreview($file) !!}
+
+
-
-
{{$file->original_filename}}
+
+
-
- @lang('admin/fileManager.createdAt'): {{$file->created_at}}
- @lang('admin/fileManager.updatedAt'): {{$file->updated_at}}
- @lang('admin/fileManager.mime'): {{$file->mime_type}}
- @lang('admin/fileManager.hash'): {{str_limit($file->file_hash, 10)}}
- @lang('admin/fileManager.url'): {{$file->filename}}
- @lang('admin/fileManager.fileSize'): {{\App\CMS\Helpers\FileManager::getFormattedSize($file)}}
+
+
{{$file->original_filename}}
- @foreach($extraInfo as $column => $info)
-
{{$column}}: {{$info}}
- @endforeach
+
+ @lang('admin/fileManager.createdAt'): {{$file->created_at}}
+ @lang('admin/fileManager.updatedAt'): {{$file->updated_at}}
+ @lang('admin/fileManager.mime'): {{$file->mime_type}}
+ @lang('admin/fileManager.hash'): {{str_limit($file->file_hash, 10)}}
+ @lang('admin/fileManager.url'): {{$file->filename}}
+
+ @lang('admin/fileManager.fileSize')
+ : {{\App\CMS\Helpers\FileManager::getFormattedSize($file)}}
-
-
+ @foreach($extraInfo as $column => $info)
+ {{$column}}: {{$info}}
+ @endforeach
-
- @include('admin.fileManager.editForm')
+
+
+
+
+ @include('admin.fileManager.editForm')
+
+
@@ -49,6 +68,6 @@
@section('javascripts')
@stop
diff --git a/resources/views/admin/fileManager/editForm.blade.php b/resources/views/admin/fileManager/editForm.blade.php
index d7d0e21d..ef8e93db 100644
--- a/resources/views/admin/fileManager/editForm.blade.php
+++ b/resources/views/admin/fileManager/editForm.blade.php
@@ -1,33 +1,34 @@
-
- {!! csrf_field() !!}
+@can('update', $file)
+
+ {!! csrf_field() !!}
-
- @lang('admin/fileManager.name')
-
+
+ @lang('admin/fileManager.name')
+
-
+
-
- @lang('admin/fileManager.keywords')
-
+
+ @lang('admin/fileManager.keywords')
+
-
+
-
- @lang('admin/fileManager.directory')
-
+
+ @lang('admin/fileManager.directory')
+
-
- @include('admin/fileManager.directories.subdirectoriesOptionList', ['directory' => $root, 'depth' => 0, 'file' => $file])
-
+
+ @include('admin/fileManager.directories.subdirectoriesOptionList', ['directory' => $root, 'depth' => 0, 'file' => $file])
+
-
- @lang('admin/fileManager.description')
-
+
+ @lang('admin/fileManager.description')
+
- {{$file->description}}
-
- @lang('admin/fileManager.editButton')
-
+
{{$file->description}}
+
@lang('admin/fileManager.editButton')
+
+@endcan
diff --git a/resources/views/admin/fileManager/filesTiles.blade.php b/resources/views/admin/fileManager/filesTiles.blade.php
index cef41a0e..e1f2148e 100644
--- a/resources/views/admin/fileManager/filesTiles.blade.php
+++ b/resources/views/admin/fileManager/filesTiles.blade.php
@@ -4,7 +4,7 @@
'body' => '
'.\App\CMS\Helpers\FileManager::getPreview($file).' ',
'footerClass' => 'text-right',
'cardClass' => 'file-preview',
- 'footer' => (!isset($hideDelete) || !$hideDelete) ? '
\Auth::user()->can('delete', $file) && (!isset($hideDelete) || !$hideDelete) ? '
diff --git a/resources/views/admin/fileManager/overview.blade.php b/resources/views/admin/fileManager/overview.blade.php
index 54d4c027..3fc4b3b7 100644
--- a/resources/views/admin/fileManager/overview.blade.php
+++ b/resources/views/admin/fileManager/overview.blade.php
@@ -15,51 +15,64 @@
-
-
-
-
- @include('admin.fileManager.newFileForm')
-
-
+
+
+
+ @can('upload', \App\Models\FileManager\File::class)
- @if (!$directory->is_root)
-
-
-
- @include('admin.fileManager.directories.form', ['action' => route('upload.postEditDirectory', ['id' => $directory->id])])
-
-
- @endif
+
+
+
+ @include('admin.fileManager.newFileForm')
+
+
+ @endcan
-
-
-
- @include('admin.fileManager.directories.form', ['directory' => $newDirectory, 'action' => route('upload.postNewDirectory')])
+
+ @if (!$directory->is_root)
+ @can('update', $directory)
+
+
+
+ @include('admin.fileManager.directories.form', ['action' => route('upload.postEditDirectory', ['id' => $directory->id])])
+
+
+ @endcan
+ @endif
+
+ @can('create', \App\Models\FileManager\Directory::class)
+
+
+
+ @include('admin.fileManager.directories.form', ['directory' => $newDirectory, 'action' => route('upload.postNewDirectory')])
+
+
+ @endcan
diff --git a/resources/views/admin/history/overview.blade.php b/resources/views/admin/history/overview.blade.php
index 78f15280..4cf92a77 100644
--- a/resources/views/admin/history/overview.blade.php
+++ b/resources/views/admin/history/overview.blade.php
@@ -33,7 +33,9 @@
@endforeach
-
- @lang('admin/history.backToEdit')
-
+ @can('update', $page)
+
+ @lang('admin/history.backToEdit')
+
+ @endcan
@stop
\ No newline at end of file
diff --git a/resources/views/admin/layout.blade.php b/resources/views/admin/layout.blade.php
index 2dae3db6..0a183172 100644
--- a/resources/views/admin/layout.blade.php
+++ b/resources/views/admin/layout.blade.php
@@ -26,6 +26,13 @@
+@if (session('status'))
+
+
+ {{ session('status') }}
+
+@endif
+
@if (session('success'))
diff --git a/resources/views/admin/permissions/index.blade.php b/resources/views/admin/permissions/index.blade.php
new file mode 100644
index 00000000..a4733dc0
--- /dev/null
+++ b/resources/views/admin/permissions/index.blade.php
@@ -0,0 +1,41 @@
+@extends('admin.layoutWithNavigation')
+
+@section('pageHeading', trans('admin/permissions.pageTitle'))
+@section('pageDescription', trans('admin/permissions.description'))
+
+@section('content')
+
+
+ {!! csrf_field() !!}
+
+ @foreach($permissions as $permission)
+
+
+
+ default)
+ checked
+ @endif name="permissions[{{$permission->string_id}}]" type="checkbox">
+ {{trans($permission->name)}}
+
+
+
+ @if($permission->subpermissions->count() > 0)
+ @foreach($permission->subpermissions as $subpermission)
+
+
+
+ default && $subpermission->default)
+ checked
+ @endif name="permissions[{{$subpermission->string_id}}]" type="checkbox">
+ {{trans($subpermission->name)}}
+
+
+ @endforeach
+ @endif
+ @endforeach
+ @lang('admin/permissions.save')
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/search/page.blade.php b/resources/views/admin/search/page.blade.php
index 0c3597bd..d2a0bf30 100644
--- a/resources/views/admin/search/page.blade.php
+++ b/resources/views/admin/search/page.blade.php
@@ -6,8 +6,16 @@
@if ($search)
-
@lang('search.results')
- @include('admin.search.results')
+ @if(!empty($results))
+
@lang('search.results')
+ @include('admin.search.results')
+ @else
+
+
+ @lang('admin/common.noSearchEngine')
+
+
+ @endif
@lang('search.term')
diff --git a/resources/views/admin/settings/parts/advanced.blade.php b/resources/views/admin/settings/parts/advanced.blade.php
new file mode 100644
index 00000000..00a3b319
--- /dev/null
+++ b/resources/views/admin/settings/parts/advanced.blade.php
@@ -0,0 +1,81 @@
+
+
@lang('admin/settings.previews.title')
+
+
+
+
+
@lang('admin/settings.previews.size')
+
+
+
+ px
+
+
+
+ @include('admin.settings.snippets.commonSettings', ['field' => 'previewSize'])
+
+
+
+
+
@lang('admin/settings.previews.quality')
+
+
+
+ %
+
+
+
+ @include('admin.settings.snippets.commonSettings', ['field' => 'previewQuality'])
+
+
+
+
@lang('admin/settings.widgets.title')
+
+
+
+
+ useWidgetPreloading) || $settings->useWidgetPreloading['lang'] == null)
+ checked
+ @endif name="useWidgetPreloading" type="checkbox">
+ @lang('admin/settings.widgets.useWidgetPreloading')
+
+
+
+ @include('admin.settings.snippets.commonSettings', ['field' => 'useWidgetPreloading'])
+
+
+
+
+
+
+
+ @lang('admin/settings.widgets.preloadFrequentedWidgetAreasTreshold')
+
+
+
+
+ @lang('common.views')
+
+
+
+ @include('admin.settings.snippets.commonSettings', ['field' => 'author'])
+
+
+
+
+
+
+
+ @lang('admin/settings.widgets.widgetCacheLifetime')
+
+
+
+
+ @lang('common.minutes')
+
+
+
+ @include('admin.settings.snippets.commonSettings', ['field' => 'author'])
+
+
diff --git a/resources/views/admin/snippets/buttons/delete.blade.php b/resources/views/admin/snippets/buttons/delete.blade.php
new file mode 100644
index 00000000..8fee6356
--- /dev/null
+++ b/resources/views/admin/snippets/buttons/delete.blade.php
@@ -0,0 +1,6 @@
+
+ {!! csrf_field() !!}
+ {!! method_field('DELETE') !!}
+
+
+
\ No newline at end of file
diff --git a/resources/views/admin/snippets/ckEditor.blade.php b/resources/views/admin/snippets/ckEditor.blade.php
index 450aaeca..785794d6 100644
--- a/resources/views/admin/snippets/ckEditor.blade.php
+++ b/resources/views/admin/snippets/ckEditor.blade.php
@@ -1,29 +1,39 @@
\ No newline at end of file
diff --git a/resources/views/admin/templates/directoriesList.blade.php b/resources/views/admin/templates/_partials/directoriesList.blade.php
similarity index 68%
rename from resources/views/admin/templates/directoriesList.blade.php
rename to resources/views/admin/templates/_partials/directoriesList.blade.php
index 9835f77b..34a0af7b 100644
--- a/resources/views/admin/templates/directoriesList.blade.php
+++ b/resources/views/admin/templates/_partials/directoriesList.blade.php
@@ -14,12 +14,11 @@
{{--@endif--}}
-
-
@lang('admin/templates.subdirectories')
-
- @forelse($subdirectories as $subdirectory)
-
{{trans($subdirectory->name)}}
+
+ @forelse($directory->subdirectories as $subdirectory)
+ {{trans($subdirectory->name)}}
@empty
- @lang('admin/templates.noSubdirectories')
+ @lang('admin/templates.noSubdirectories')
@endforelse
+
\ No newline at end of file
diff --git a/resources/views/admin/templates/editForm.blade.php b/resources/views/admin/templates/_partials/editForm.blade.php
similarity index 100%
rename from resources/views/admin/templates/editForm.blade.php
rename to resources/views/admin/templates/_partials/editForm.blade.php
diff --git a/resources/views/admin/templates/_partials/templatesTiles.blade.php b/resources/views/admin/templates/_partials/templatesTiles.blade.php
new file mode 100644
index 00000000..157a9ecd
--- /dev/null
+++ b/resources/views/admin/templates/_partials/templatesTiles.blade.php
@@ -0,0 +1,70 @@
+
+ @forelse($directory->templates as $template)
+
+
+ {{str_limit($template->name, 15)}}
+
+
+ {{str_limit($template->description, 150)}}
+
+
+ @can('copy', \App\Models\Templates\Template::class)
+ @if($isWritable)
+
+
+
+ @else
+
+
+
+ @endif
+ @endcan
+ @can('update', $template)
+
+ @if ($template->editable)
+
+ @else
+
+ @endif
+
+
+ @endcan
+
+ @empty
+
+ @lang('admin/templates.noTemplates')
+
+ @endforelse
+
+
+@section('javascripts')
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/templates/edit.blade.php b/resources/views/admin/templates/edit.blade.php
index df60b694..5e342914 100644
--- a/resources/views/admin/templates/edit.blade.php
+++ b/resources/views/admin/templates/edit.blade.php
@@ -3,5 +3,5 @@
@section('pageHeading', @trans('admin/templates.edit', ['name' => $template->template_name]))
@section('content')
- @include('admin.templates.editForm')
+ @include('admin.templates._partials.editForm')
@stop
\ No newline at end of file
diff --git a/resources/views/admin/templates/index.blade.php b/resources/views/admin/templates/index.blade.php
new file mode 100644
index 00000000..e84ebb6d
--- /dev/null
+++ b/resources/views/admin/templates/index.blade.php
@@ -0,0 +1,13 @@
+@extends('admin.layoutWithNavigation')
+
+@section('pageHeading', @trans('admin/templates.overview'))
+
+@section('content')
+
+
+ @foreach($templatePaths as $directory)
+ @include('admin.templates._partials.directoriesList')
+ @endforeach
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/templates/list.blade.php b/resources/views/admin/templates/list.blade.php
index 95e6e0bc..003295c9 100644
--- a/resources/views/admin/templates/list.blade.php
+++ b/resources/views/admin/templates/list.blade.php
@@ -3,16 +3,24 @@
@section('pageHeading', @trans('admin/templates.overview'))
@section('content')
-
+
+
+
+
- @include('admin.templates.templatesTiles')
+
+
+ @include('admin.templates._partials.templatesTiles')
+
+
-
- @include('admin.templates.directoriesList')
+
+
+ @include('admin.templates._partials.directoriesList')
+
-
-@stop
\ No newline at end of file
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/templates/templatesTiles.blade.php b/resources/views/admin/templates/templatesTiles.blade.php
deleted file mode 100644
index 4a5d5041..00000000
--- a/resources/views/admin/templates/templatesTiles.blade.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
- @forelse($templates as $template)
-
- @empty
-
- @lang('admin/templates.noTemplates')
-
- @endforelse
-
-
-@section('javascripts')
-
-@endsection
\ No newline at end of file
diff --git a/resources/views/admin/userManagement/detail.blade.php b/resources/views/admin/userManagement/detail.blade.php
index 4d566885..0f719143 100644
--- a/resources/views/admin/userManagement/detail.blade.php
+++ b/resources/views/admin/userManagement/detail.blade.php
@@ -3,10 +3,13 @@
@section('pageHeading', trans('admin/userManagement.profile'))
@section('pageDescription', @trans('admin/userManagement.detail', ['name' => $user->name, 'email' => $user->email]))
@section('headerButtons')
-
-
-
+
+ @can('manage', \App\Models\User::class)
+
+
+
+ @endcan
@endsection
@section('content')
@@ -32,12 +35,24 @@
-
-
- @lang('admin/userManagement.edit')
-
-
+ @can('update', $user)
+
+
+ @lang('admin/userManagement.edit')
+
+
+ @endcan
+
+ @can('set-permissions', $user)
+
+
+ @lang('admin/userManagement.permissions')
+
+
+ @endcan
-
- @include('admin.userManagement.editForm', ['states' => $statuses])
-
+ @can('update', $user)
+
+ @include('admin.userManagement.editForm', ['states' => $statuses])
+
+ @endcan
+
+ @can('set-permissions', $user)
+
+ @include('admin.userManagement.permissions.form')
+
+ @endcan
@if (!empty($actions))
@@ -89,13 +112,12 @@
@endforeach
-
-
-
-
+ @can('manage', \App\Models\ActionLog\ActionLog::class)
+
+ @endcan
@else
@lang('admin/userManagement.noActions')
diff --git a/resources/views/admin/userManagement/edit.blade.php b/resources/views/admin/userManagement/edit.blade.php
index a1240547..b0b6ae3d 100644
--- a/resources/views/admin/userManagement/edit.blade.php
+++ b/resources/views/admin/userManagement/edit.blade.php
@@ -2,13 +2,17 @@
@section('pageHeading', @trans('admin/userManagement.editUser', ['name' => str_limit($user->name, 20), 'email' => $user->email]))
@section('headerButtons')
-
+
@endsection
@section('content')
-
- @include('admin.userManagement.editForm')
+
+
+ @include('admin.userManagement.editForm')
+
+
@stop
\ No newline at end of file
diff --git a/resources/views/admin/userManagement/editForm.blade.php b/resources/views/admin/userManagement/editForm.blade.php
index 43f34d4e..a290864c 100644
--- a/resources/views/admin/userManagement/editForm.blade.php
+++ b/resources/views/admin/userManagement/editForm.blade.php
@@ -1,6 +1,8 @@
{!! csrf_field() !!}
+
+
@@ -28,35 +32,40 @@
placeholder="@lang('admin/userManagement.password')"
name="password"
value="">
+ @include('admin.snippets.hasError', ['field' => 'password'])
- @if (\Auth::user()->role == \App\Models\User::ROLE_ADMIN && \Auth::user()->id != $user->id)
-
+
+ @can('change-role', $user)
-
-
+
@lang('admin/userManagement.roles')
-
+
@foreach($roles as $role => $translation)
role) selected @endif>{{$translation}}
@endforeach
-
+ @include('admin.snippets.hasError', ['field' => 'role'])
+
+ @endcan
+
+ @can('change-status', $user)
-
+
@lang('admin/userManagement.status')
-
+
@foreach($states as $status => $translation)
status) selected @endif>{{$translation}}
@endforeach
+ @include('admin.snippets.hasError', ['field' => 'status'])
-
- @endif
+ @endcan
+
@lang('admin/userManagement.update')
\ No newline at end of file
diff --git a/resources/views/admin/userManagement/overview.blade.php b/resources/views/admin/userManagement/overview.blade.php
index feed3740..9f612055 100644
--- a/resources/views/admin/userManagement/overview.blade.php
+++ b/resources/views/admin/userManagement/overview.blade.php
@@ -3,8 +3,15 @@
@section('pageHeading', @trans('admin/userManagement.overview'))
@section('headerButtons')
+
+ @can('create', \App\Models\User::class)
+
+
+
+ @endcan
+
@foreach($statuses as $status => $translation)
-
{{$translation}}
@endforeach
@endsection
@@ -16,14 +23,18 @@
diff --git a/resources/views/admin/userManagement/permissions/form.blade.php b/resources/views/admin/userManagement/permissions/form.blade.php
new file mode 100644
index 00000000..272d571a
--- /dev/null
+++ b/resources/views/admin/userManagement/permissions/form.blade.php
@@ -0,0 +1,34 @@
+
+ {!! csrf_field() !!}
+
+ @foreach($permissions as $permission)
+
+
+
+ hasAbility($permission->string_id))
+ checked
+ @endif name="permissions[{{$permission->string_id}}]" type="checkbox">
+ {{trans($permission->name)}}
+
+
+
+ @if($permission->subpermissions->count() > 0)
+ @foreach($permission->subpermissions as $subpermission)
+
+
+
+ hasAbility($permission->string_id) && $user->hasAbility($subpermission->string_id))
+ checked
+ @endif name="permissions[{{$subpermission->string_id}}]" type="checkbox">
+ {{trans($subpermission->name)}}
+
+
+ @endforeach
+ @endif
+
+ @endforeach
+
+ Ulozit
+
\ No newline at end of file
diff --git a/resources/views/admin/widgets/area/edit.blade.php b/resources/views/admin/widgets/area/edit.blade.php
index 67900ed5..87266738 100644
--- a/resources/views/admin/widgets/area/edit.blade.php
+++ b/resources/views/admin/widgets/area/edit.blade.php
@@ -4,18 +4,13 @@
@section('content')
-
+
@include('admin.widgets.area.form', ['action' => route('widgetareas.postEdit', ['id' => $area->id])])
@lang('admin/widgets.overview')
@include('admin.widgets.widgetsToAssociate', ['tileClass' => 'col-md-4 col-sm-6 col-xs-12', 'widgetArea' => $area])
-
-
@lang('admin/widgets.preview')
-
- @widgetArea($area->code)
-
@endsection
diff --git a/resources/views/admin/widgets/area/overview.blade.php b/resources/views/admin/widgets/area/overview.blade.php
index 6d0d7b65..985f8975 100644
--- a/resources/views/admin/widgets/area/overview.blade.php
+++ b/resources/views/admin/widgets/area/overview.blade.php
@@ -1,69 +1,113 @@
@extends('admin.layoutWithNavigation')
@section('pageHeading', @trans('admin/widgetAreas.overview'))
+@section('pageDescription', @trans('admin/widgetAreas.pageDescription'))
+
+@section('headerButtons')
+ @can('create', \App\Models\Widgets\WidgetArea::class)
+
+
+
+ @endcan
+@endsection
@section('content')
-
@else
@lang('admin/widgetAreas.noEntries')
@endif
-
-
@lang('admin/widgetAreas.new')
-
- @include('admin.widgets.area.form', ['action' => route('widgetareas.postNew'), 'area' => new \App\Models\Widgets\WidgetArea()])
-
+ @can('create', \App\Models\Widgets\WidgetArea::class)
+
+
+
+
+ @include('admin.widgets.area.form', ['action' => route('widgetareas.postNew'), 'area' => new \App\Models\Widgets\WidgetArea()])
+
+
+
+ @endcan
diff --git a/resources/views/admin/widgets/association.blade.php b/resources/views/admin/widgets/association.blade.php
index 67679ad5..67ae3cc2 100644
--- a/resources/views/admin/widgets/association.blade.php
+++ b/resources/views/admin/widgets/association.blade.php
@@ -21,13 +21,10 @@
@lang('admin/widgets.updatedAt'): @date($widgetArea->updated_at)
-
@lang('admin/widgetAreas.editButton')
-
- @if (!empty($associatedWidgetIds))
-
@lang('admin/widgets.preview')
-
- @widgetArea($widgetArea->code)
- @endif
+ @can('update', $widgetArea)
+
@lang('admin/widgetAreas.editButton')
+ @endcan
@stop
\ No newline at end of file
diff --git a/resources/views/admin/widgets/htmlCode/edit.blade.php b/resources/views/admin/widgets/htmlCode/edit.blade.php
index e91e4a74..71ac1a11 100644
--- a/resources/views/admin/widgets/htmlCode/edit.blade.php
+++ b/resources/views/admin/widgets/htmlCode/edit.blade.php
@@ -2,6 +2,12 @@
@section('pageHeading', @trans('widgets/htmlCode.edit', ['name' => $widget->name]))
+@section('headerButtons')
+
+
+
+@endsection
+
@section('content')
@include('admin.widgets.htmlCode.form', ['action' => route('widgets.postEdit', ['id' => $widget->id])])
diff --git a/resources/views/admin/widgets/menu/edit.blade.php b/resources/views/admin/widgets/menu/edit.blade.php
index 5b21f9e9..e5c396ed 100644
--- a/resources/views/admin/widgets/menu/edit.blade.php
+++ b/resources/views/admin/widgets/menu/edit.blade.php
@@ -2,11 +2,16 @@
@section('pageHeading', @trans('widgets/menu.edit', ['name' => $widget->name]))
+@section('headerButtons')
+
+
+
+@endsection
+
@section('content')
@include('admin.widgets.menu.form', ['formAction' => route('widgets.postEdit', ['id' => $widget->id])])
-
@lang('widgets/menu.preview')
@@ -14,5 +19,5 @@
@widgetPreview($widget)
-@stop
+@endsection
diff --git a/resources/views/admin/widgets/menu/form.blade.php b/resources/views/admin/widgets/menu/form.blade.php
index ad5ffece..9d9a1215 100644
--- a/resources/views/admin/widgets/menu/form.blade.php
+++ b/resources/views/admin/widgets/menu/form.blade.php
@@ -1,5 +1,5 @@
diff --git a/resources/views/admin/loginForm.blade.php b/resources/views/auth/login.blade.php
similarity index 65%
rename from resources/views/admin/loginForm.blade.php
rename to resources/views/auth/login.blade.php
index d44cc144..569fea3d 100644
--- a/resources/views/admin/loginForm.blade.php
+++ b/resources/views/auth/login.blade.php
@@ -8,7 +8,7 @@
@@ -24,6 +24,12 @@
name="email" id="email"
placeholder="@lang('admin/loginForm.yourEmail')"
required>
+
+ @if ($errors->has('email'))
+
+ {{ $errors->first('email') }}
+
+ @endif
@lang('admin/loginForm.password')
@@ -32,13 +38,27 @@
name="password" id="password"
placeholder="@lang('admin/loginForm.yourPassword')"
required>
+
+ @if ($errors->has('password'))
+
+ {{ $errors->first('password') }}
+
+ @endif
-
-@endsection
\ No newline at end of file
+@endsection
diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php
new file mode 100644
index 00000000..161c650d
--- /dev/null
+++ b/resources/views/auth/passwords/email.blade.php
@@ -0,0 +1,42 @@
+@extends('admin.layout')
+
+@section('pageHeading', trans('admin/loginForm.forgottenPassword'))
+
+@section('page')
+
+
+
+
+
+
+
+ {!! csrf_field() !!}
+
+
+ @lang('register.email')
+
+
+
+ @if ($errors->has('email'))
+
+ {{ $errors->first('email') }}
+
+ @endif
+
+
+
+
+ @lang('admin/loginForm.sendConfirmEmail')
+
+
+
+
+
+
+
+@endsection
diff --git a/resources/views/auth/passwords/reset.blade.php b/resources/views/auth/passwords/reset.blade.php
new file mode 100644
index 00000000..34c8d196
--- /dev/null
+++ b/resources/views/auth/passwords/reset.blade.php
@@ -0,0 +1,68 @@
+@extends('admin.layout')
+
+@section('pageHeading', trans('admin/loginForm.passwordReset'))
+
+@section('page')
+
+@endsection
diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php
new file mode 100644
index 00000000..10f9a9a7
--- /dev/null
+++ b/resources/views/auth/register.blade.php
@@ -0,0 +1,89 @@
+@extends('admin.layout')
+
+@section('pageHeading', trans('register.heading'))
+
+@section('page')
+
+@endsection
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
new file mode 100644
index 00000000..d4745b4e
--- /dev/null
+++ b/resources/views/layouts/app.blade.php
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
{{ config('app.name', 'Laravel') }}
+
+
+
+
+
+
+
+
+
+
+ @yield('content')
+
+
+
+
+
+
diff --git a/resources/views/vendor/mail/html/button.blade.php b/resources/views/vendor/mail/html/button.blade.php
new file mode 100644
index 00000000..c7aae1b8
--- /dev/null
+++ b/resources/views/vendor/mail/html/button.blade.php
@@ -0,0 +1,19 @@
+
diff --git a/resources/views/vendor/mail/html/footer.blade.php b/resources/views/vendor/mail/html/footer.blade.php
new file mode 100644
index 00000000..c3f9360a
--- /dev/null
+++ b/resources/views/vendor/mail/html/footer.blade.php
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php
new file mode 100644
index 00000000..eefabab9
--- /dev/null
+++ b/resources/views/vendor/mail/html/header.blade.php
@@ -0,0 +1,7 @@
+
+
+
diff --git a/resources/views/vendor/mail/html/layout.blade.php b/resources/views/vendor/mail/html/layout.blade.php
new file mode 100644
index 00000000..991ae52a
--- /dev/null
+++ b/resources/views/vendor/mail/html/layout.blade.php
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $header or '' }}
+
+
+
+
+
+
+
+
+ {{ Illuminate\Mail\Markdown::parse($slot) }}
+
+ {{ $subcopy or '' }}
+
+
+
+
+
+
+ {{ $footer or '' }}
+
+
+
+
+
+
diff --git a/resources/views/vendor/mail/html/message.blade.php b/resources/views/vendor/mail/html/message.blade.php
new file mode 100644
index 00000000..2ad23a66
--- /dev/null
+++ b/resources/views/vendor/mail/html/message.blade.php
@@ -0,0 +1,27 @@
+@component('mail::layout')
+ {{-- Header --}}
+ @slot('header')
+ @component('mail::header', ['url' => config('app.url')])
+ {{ config('app.name') }}
+ @endcomponent
+ @endslot
+
+ {{-- Body --}}
+ {{ $slot }}
+
+ {{-- Subcopy --}}
+ @isset($subcopy)
+ @slot('subcopy')
+ @component('mail::subcopy')
+ {{ $subcopy }}
+ @endcomponent
+ @endslot
+ @endisset
+
+ {{-- Footer --}}
+ @slot('footer')
+ @component('mail::footer')
+ © {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
+ @endcomponent
+ @endslot
+@endcomponent
diff --git a/resources/views/vendor/mail/html/panel.blade.php b/resources/views/vendor/mail/html/panel.blade.php
new file mode 100644
index 00000000..f3970802
--- /dev/null
+++ b/resources/views/vendor/mail/html/panel.blade.php
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ {{ Illuminate\Mail\Markdown::parse($slot) }}
+
+
+
+
+
+
diff --git a/resources/views/vendor/mail/html/promotion.blade.php b/resources/views/vendor/mail/html/promotion.blade.php
new file mode 100644
index 00000000..0debcf8a
--- /dev/null
+++ b/resources/views/vendor/mail/html/promotion.blade.php
@@ -0,0 +1,7 @@
+
diff --git a/resources/views/vendor/mail/html/promotion/button.blade.php b/resources/views/vendor/mail/html/promotion/button.blade.php
new file mode 100644
index 00000000..8e79081c
--- /dev/null
+++ b/resources/views/vendor/mail/html/promotion/button.blade.php
@@ -0,0 +1,13 @@
+
diff --git a/resources/views/vendor/mail/html/subcopy.blade.php b/resources/views/vendor/mail/html/subcopy.blade.php
new file mode 100644
index 00000000..c3df7b4c
--- /dev/null
+++ b/resources/views/vendor/mail/html/subcopy.blade.php
@@ -0,0 +1,7 @@
+
+
+
+ {{ Illuminate\Mail\Markdown::parse($slot) }}
+
+
+
diff --git a/resources/views/vendor/mail/html/table.blade.php b/resources/views/vendor/mail/html/table.blade.php
new file mode 100644
index 00000000..a5f3348b
--- /dev/null
+++ b/resources/views/vendor/mail/html/table.blade.php
@@ -0,0 +1,3 @@
+
+{{ Illuminate\Mail\Markdown::parse($slot) }}
+
diff --git a/resources/views/vendor/mail/html/themes/default.css b/resources/views/vendor/mail/html/themes/default.css
new file mode 100644
index 00000000..20659933
--- /dev/null
+++ b/resources/views/vendor/mail/html/themes/default.css
@@ -0,0 +1,285 @@
+/* Base */
+
+body, body *:not(html):not(style):not(br):not(tr):not(code) {
+ font-family: Avenir, Helvetica, sans-serif;
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #f5f8fa;
+ color: #74787E;
+ height: 100%;
+ hyphens: auto;
+ line-height: 1.4;
+ margin: 0;
+ -moz-hyphens: auto;
+ -ms-word-break: break-all;
+ width: 100% !important;
+ -webkit-hyphens: auto;
+ -webkit-text-size-adjust: none;
+ word-break: break-all;
+ word-break: break-word;
+}
+
+p,
+ul,
+ol,
+blockquote {
+ line-height: 1.4;
+ text-align: left;
+}
+
+a {
+ color: #3869D4;
+}
+
+a img {
+ border: none;
+}
+
+/* Typography */
+
+h1 {
+ color: #2F3133;
+ font-size: 19px;
+ font-weight: bold;
+ margin-top: 0;
+ text-align: left;
+}
+
+h2 {
+ color: #2F3133;
+ font-size: 16px;
+ font-weight: bold;
+ margin-top: 0;
+ text-align: left;
+}
+
+h3 {
+ color: #2F3133;
+ font-size: 14px;
+ font-weight: bold;
+ margin-top: 0;
+ text-align: left;
+}
+
+p {
+ color: #74787E;
+ font-size: 16px;
+ line-height: 1.5em;
+ margin-top: 0;
+ text-align: left;
+}
+
+p.sub {
+ font-size: 12px;
+}
+
+img {
+ max-width: 100%;
+}
+
+/* Layout */
+
+.wrapper {
+ background-color: #f5f8fa;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+}
+
+.content {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+}
+
+/* Header */
+
+.header {
+ padding: 25px 0;
+ text-align: center;
+}
+
+.header a {
+ color: #bbbfc3;
+ font-size: 19px;
+ font-weight: bold;
+ text-decoration: none;
+ text-shadow: 0 1px 0 white;
+}
+
+/* Body */
+
+.body {
+ background-color: #FFFFFF;
+ border-bottom: 1px solid #EDEFF2;
+ border-top: 1px solid #EDEFF2;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+}
+
+.inner-body {
+ background-color: #FFFFFF;
+ margin: 0 auto;
+ padding: 0;
+ width: 570px;
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 570px;
+}
+
+/* Subcopy */
+
+.subcopy {
+ border-top: 1px solid #EDEFF2;
+ margin-top: 25px;
+ padding-top: 25px;
+}
+
+.subcopy p {
+ font-size: 12px;
+}
+
+/* Footer */
+
+.footer {
+ margin: 0 auto;
+ padding: 0;
+ text-align: center;
+ width: 570px;
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 570px;
+}
+
+.footer p {
+ color: #AEAEAE;
+ font-size: 12px;
+ text-align: center;
+}
+
+/* Tables */
+
+.table table {
+ margin: 30px auto;
+ width: 100%;
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+}
+
+.table th {
+ border-bottom: 1px solid #EDEFF2;
+ padding-bottom: 8px;
+}
+
+.table td {
+ color: #74787E;
+ font-size: 15px;
+ line-height: 18px;
+ padding: 10px 0;
+}
+
+.content-cell {
+ padding: 35px;
+}
+
+/* Buttons */
+
+.action {
+ margin: 30px auto;
+ padding: 0;
+ text-align: center;
+ width: 100%;
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+}
+
+.button {
+ border-radius: 3px;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16);
+ color: #FFF;
+ display: inline-block;
+ text-decoration: none;
+ -webkit-text-size-adjust: none;
+}
+
+.button-blue {
+ background-color: #3097D1;
+ border-top: 10px solid #3097D1;
+ border-right: 18px solid #3097D1;
+ border-bottom: 10px solid #3097D1;
+ border-left: 18px solid #3097D1;
+}
+
+.button-green {
+ background-color: #2ab27b;
+ border-top: 10px solid #2ab27b;
+ border-right: 18px solid #2ab27b;
+ border-bottom: 10px solid #2ab27b;
+ border-left: 18px solid #2ab27b;
+}
+
+.button-red {
+ background-color: #bf5329;
+ border-top: 10px solid #bf5329;
+ border-right: 18px solid #bf5329;
+ border-bottom: 10px solid #bf5329;
+ border-left: 18px solid #bf5329;
+}
+
+/* Panels */
+
+.panel {
+ margin: 0 0 21px;
+}
+
+.panel-content {
+ background-color: #EDEFF2;
+ padding: 16px;
+}
+
+.panel-item {
+ padding: 0;
+}
+
+.panel-item p:last-of-type {
+ margin-bottom: 0;
+ padding-bottom: 0;
+}
+
+/* Promotions */
+
+.promotion {
+ background-color: #FFFFFF;
+ border: 2px dashed #9BA2AB;
+ margin: 0;
+ margin-bottom: 25px;
+ margin-top: 25px;
+ padding: 24px;
+ width: 100%;
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+}
+
+.promotion h1 {
+ text-align: center;
+}
+
+.promotion p {
+ font-size: 15px;
+ text-align: center;
+}
diff --git a/resources/views/vendor/mail/markdown/button.blade.php b/resources/views/vendor/mail/markdown/button.blade.php
new file mode 100644
index 00000000..97444ebd
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/button.blade.php
@@ -0,0 +1 @@
+{{ $slot }}: {{ $url }}
diff --git a/resources/views/vendor/mail/markdown/footer.blade.php b/resources/views/vendor/mail/markdown/footer.blade.php
new file mode 100644
index 00000000..3338f620
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/footer.blade.php
@@ -0,0 +1 @@
+{{ $slot }}
diff --git a/resources/views/vendor/mail/markdown/header.blade.php b/resources/views/vendor/mail/markdown/header.blade.php
new file mode 100644
index 00000000..aaa3e575
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/header.blade.php
@@ -0,0 +1 @@
+[{{ $slot }}]({{ $url }})
diff --git a/resources/views/vendor/mail/markdown/layout.blade.php b/resources/views/vendor/mail/markdown/layout.blade.php
new file mode 100644
index 00000000..9378baa0
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/layout.blade.php
@@ -0,0 +1,9 @@
+{!! strip_tags($header) !!}
+
+{!! strip_tags($slot) !!}
+@isset($subcopy)
+
+{!! strip_tags($subcopy) !!}
+@endisset
+
+{!! strip_tags($footer) !!}
diff --git a/resources/views/vendor/mail/markdown/message.blade.php b/resources/views/vendor/mail/markdown/message.blade.php
new file mode 100644
index 00000000..b409c71c
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/message.blade.php
@@ -0,0 +1,27 @@
+@component('mail::layout')
+ {{-- Header --}}
+ @slot('header')
+ @component('mail::header', ['url' => config('app.url')])
+ {{ config('app.name') }}
+ @endcomponent
+ @endslot
+
+ {{-- Body --}}
+ {{ $slot }}
+
+ {{-- Subcopy --}}
+ @isset($subcopy)
+ @slot('subcopy')
+ @component('mail::subcopy')
+ {{ $subcopy }}
+ @endcomponent
+ @endslot
+ @endisset
+
+ {{-- Footer --}}
+ @slot('footer')
+ @component('mail::footer')
+ © {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
+ @endcomponent
+ @endslot
+@endcomponent
diff --git a/resources/views/vendor/mail/markdown/panel.blade.php b/resources/views/vendor/mail/markdown/panel.blade.php
new file mode 100644
index 00000000..3338f620
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/panel.blade.php
@@ -0,0 +1 @@
+{{ $slot }}
diff --git a/resources/views/vendor/mail/markdown/promotion.blade.php b/resources/views/vendor/mail/markdown/promotion.blade.php
new file mode 100644
index 00000000..3338f620
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/promotion.blade.php
@@ -0,0 +1 @@
+{{ $slot }}
diff --git a/resources/views/vendor/mail/markdown/promotion/button.blade.php b/resources/views/vendor/mail/markdown/promotion/button.blade.php
new file mode 100644
index 00000000..aaa3e575
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/promotion/button.blade.php
@@ -0,0 +1 @@
+[{{ $slot }}]({{ $url }})
diff --git a/resources/views/vendor/mail/markdown/subcopy.blade.php b/resources/views/vendor/mail/markdown/subcopy.blade.php
new file mode 100644
index 00000000..3338f620
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/subcopy.blade.php
@@ -0,0 +1 @@
+{{ $slot }}
diff --git a/resources/views/vendor/mail/markdown/table.blade.php b/resources/views/vendor/mail/markdown/table.blade.php
new file mode 100644
index 00000000..3338f620
--- /dev/null
+++ b/resources/views/vendor/mail/markdown/table.blade.php
@@ -0,0 +1 @@
+{{ $slot }}
diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php
new file mode 100644
index 00000000..5f008b4c
--- /dev/null
+++ b/resources/views/vendor/notifications/email.blade.php
@@ -0,0 +1,36 @@
+@component('mail::message')
+ {{-- Intro Lines --}}
+ @foreach ($introLines as $line)
+ {!!$line!!}
+
+ @endforeach
+
+ {{-- Action Button --}}
+ @isset($actionText)
+
+ @component('mail::button', ['url' => $actionUrl, 'color' => $color])
+ {!!$actionText!!}
+ @endcomponent
+ @endisset
+
+ {{-- Outro Lines --}}
+ @foreach ($outroLines as $line)
+ {!!$line!!}
+ @endforeach
+
+ {{-- Salutation --}}
+ @if (! empty($salutation))
+ {!!$salutation!!}
+ @endif
+@endcomponent
diff --git a/resources/views/vendor/nwidart/menus/child/dropdown.blade.php b/resources/views/vendor/nwidart/menus/child/dropdown.blade.php
new file mode 100644
index 00000000..e02f1e33
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/child/dropdown.blade.php
@@ -0,0 +1,12 @@
+
diff --git a/resources/views/vendor/nwidart/menus/child/item.blade.php b/resources/views/vendor/nwidart/menus/child/item.blade.php
new file mode 100644
index 00000000..4a1fea66
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/child/item.blade.php
@@ -0,0 +1,11 @@
+@if ($item->isDivider())
+
+@elseif ($item->isHeader())
+
+@else
+
+
+ {{ $item->title }}
+
+
+@endif
diff --git a/resources/views/vendor/nwidart/menus/default.blade.php b/resources/views/vendor/nwidart/menus/default.blade.php
new file mode 100644
index 00000000..a4b286fa
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/default.blade.php
@@ -0,0 +1,3 @@
+
+ @include('menus::menu')
+
diff --git a/resources/views/vendor/nwidart/menus/item/dropdown.blade.php b/resources/views/vendor/nwidart/menus/item/dropdown.blade.php
new file mode 100644
index 00000000..5dc6f342
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/item/dropdown.blade.php
@@ -0,0 +1,15 @@
+
+
+ {{ $item->title }}
+
+
+
+
diff --git a/resources/views/vendor/nwidart/menus/item/item.blade.php b/resources/views/vendor/nwidart/menus/item/item.blade.php
new file mode 100644
index 00000000..d2278747
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/item/item.blade.php
@@ -0,0 +1,12 @@
+@if ($item->isDivider())
+
+@elseif ($item->isHeader())
+
+@else
+
+ getAttributes() !!}>
+ {!! $item->getIcon() !!}
+ {{ $item->title }}
+
+
+@endif
diff --git a/resources/views/vendor/nwidart/menus/menu.blade.php b/resources/views/vendor/nwidart/menus/menu.blade.php
new file mode 100644
index 00000000..aef51281
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/menu.blade.php
@@ -0,0 +1,7 @@
+@foreach ($items as $item)
+ @if ($item->hasChilds())
+ @include('menus::item.dropdown', compact('item'))
+ @else
+ @include('menus::item.item', compact('item'))
+ @endif
+@endforeach
diff --git a/resources/views/vendor/nwidart/menus/nav-pills-justified.blade.php b/resources/views/vendor/nwidart/menus/nav-pills-justified.blade.php
new file mode 100644
index 00000000..325bd9ee
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/nav-pills-justified.blade.php
@@ -0,0 +1,3 @@
+
+ @include('menus::menu')
+
diff --git a/resources/views/vendor/nwidart/menus/nav-pills-stacked.blade.php b/resources/views/vendor/nwidart/menus/nav-pills-stacked.blade.php
new file mode 100644
index 00000000..dbe0131f
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/nav-pills-stacked.blade.php
@@ -0,0 +1,3 @@
+
+ @include('menus::menu')
+
diff --git a/resources/views/vendor/nwidart/menus/nav-pills.blade.php b/resources/views/vendor/nwidart/menus/nav-pills.blade.php
new file mode 100644
index 00000000..46d91da2
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/nav-pills.blade.php
@@ -0,0 +1,3 @@
+
+ @include('menus::menu')
+
diff --git a/resources/views/vendor/nwidart/menus/nav-tabs-justified.blade.php b/resources/views/vendor/nwidart/menus/nav-tabs-justified.blade.php
new file mode 100644
index 00000000..03ce5de2
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/nav-tabs-justified.blade.php
@@ -0,0 +1,3 @@
+
+ @include('menus::menu')
+
diff --git a/resources/views/vendor/nwidart/menus/nav-tabs.blade.php b/resources/views/vendor/nwidart/menus/nav-tabs.blade.php
new file mode 100644
index 00000000..445455b4
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/nav-tabs.blade.php
@@ -0,0 +1,3 @@
+
+ @include('menus::menu')
+
diff --git a/resources/views/vendor/nwidart/menus/navbar-left.blade.php b/resources/views/vendor/nwidart/menus/navbar-left.blade.php
new file mode 100644
index 00000000..bc2cf1c8
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/navbar-left.blade.php
@@ -0,0 +1,3 @@
+
+ @include('menus::menu')
+
diff --git a/resources/views/vendor/nwidart/menus/navbar-right.blade.php b/resources/views/vendor/nwidart/menus/navbar-right.blade.php
new file mode 100644
index 00000000..67aa7532
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/navbar-right.blade.php
@@ -0,0 +1,3 @@
+
+ @include('menus::menu')
+
diff --git a/resources/views/vendor/nwidart/menus/style.blade.php b/resources/views/vendor/nwidart/menus/style.blade.php
new file mode 100644
index 00000000..76f31ec4
--- /dev/null
+++ b/resources/views/vendor/nwidart/menus/style.blade.php
@@ -0,0 +1,49 @@
+
diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php
new file mode 100644
index 00000000..3f984557
--- /dev/null
+++ b/resources/views/vendor/pagination/bootstrap-4.blade.php
@@ -0,0 +1,36 @@
+@if ($paginator->hasPages())
+
+@endif
diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php
new file mode 100644
index 00000000..4e795ff4
--- /dev/null
+++ b/resources/views/vendor/pagination/default.blade.php
@@ -0,0 +1,36 @@
+@if ($paginator->hasPages())
+
+@endif
diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php
new file mode 100644
index 00000000..a9a18d32
--- /dev/null
+++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php
@@ -0,0 +1,17 @@
+@if ($paginator->hasPages())
+
+@endif
diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php
new file mode 100644
index 00000000..18016092
--- /dev/null
+++ b/resources/views/vendor/pagination/simple-default.blade.php
@@ -0,0 +1,17 @@
+@if ($paginator->hasPages())
+
+@endif
diff --git a/routes/admin.php b/routes/admin.php
new file mode 100644
index 00000000..7218ff0a
--- /dev/null
+++ b/routes/admin.php
@@ -0,0 +1,37 @@
+ LaravelLocalization::setLocale() . '/admin',
+ 'middleware' => ['bindings', 'admin']
+ ], function () {
+
+ // include all routes in routes/admin subfolder
+ $files = File::allFiles('routes/admin');
+ foreach ($files as $file) {
+ require_once base_path($file);
+ }
+
+ // display dashboard with some usefull information
+ Route::get('/', 'Dashboard\Dashboard@index')
+ ->name('admin.dashboard');
+
+ // list of all actions
+ Route::get('actions', 'ActionLog\Overview@index')
+ ->name('log.overview')
+ ->middleware('can:manage,' . \App\Models\ActionLog\ActionLog::class);
+
+ // search form with results
+ Route::get('search', 'Search@getSearch')
+ ->name('search');
+});
\ No newline at end of file
diff --git a/routes/admin/contents.php b/routes/admin/contents.php
new file mode 100644
index 00000000..53fc4094
--- /dev/null
+++ b/routes/admin/contents.php
@@ -0,0 +1,56 @@
+ 'Contents'], function () {
+ // list of all static pages
+ Route::get('content/overview/{module?}', 'ContentOverview@index')
+ ->name('content.overview')
+ ->middleware('can:manage,' . \App\Models\Content\Content::class);
+
+ // form for creating new static page
+ Route::get('content/new/{module}', 'CreateNewContent@create')
+ ->name('content.new')// ->middleware(['can:create,module', 'can:create,' . \App\Models\Content\Content::class]);
+ ->middleware('can:create,' . \App\Models\Content\Content::class);
+
+ // form for editing existing static page
+ Route::get('content/edit/{page}', 'EditContent@edit')
+ ->name('content.edit')
+ ->middleware('can:update,page');
+
+ // post method for creating new static page
+ Route::post('content/new/{module}', 'CreateNewContent@store')
+ ->name('content.newPost')
+ ->middleware('can:create,' . \App\Models\Content\Content::class);
+ // ->middleware('can:create,module');
+
+ // post method for creating new static page
+ Route::post('content/edit/{page}', 'EditContent@update')
+ ->name('content.editPost')
+ ->middleware('can:update,page');
+
+ // change status of page (protected, public or draft)
+ Route::get('content/status/{page}/{status}', 'ContentActions@changeStatus')
+ ->name('content.changeStatus')
+ ->middleware('can:changeStatus,page,status');
+
+ // set homepage
+ Route::get('content/homepage/{page}', 'ContentActions@setHomepage')
+ ->name('content.setHomepage')
+ ->middleware('can:setHomepage,page');
+
+ // delete page
+ Route::get('content/delete/{page}', 'ContentActions@delete')
+ ->name('content.delete')
+ ->middleware('can:delete,page');
+
+ // history of changes for specified page
+ Route::get('history/{page}', 'History@getOverview')
+ ->name('content.history')
+ ->middleware('can:viewHistory,page');
+
+ // history of changes for specified page
+ Route::get('history/diff/{revision}', 'History@getDiff')
+ ->name('history.diff')
+ ->middleware('can:viewHistory,'.\App\Models\Content\Content::class);
+
+ Route::get('content/order', 'EditContent@order')->name('content.order');
+ Route::post('content/order', 'EditContent@setOrder')->name('content.setOrder');
+});
\ No newline at end of file
diff --git a/routes/admin/fileManager.php b/routes/admin/fileManager.php
new file mode 100644
index 00000000..8cbb3f3c
--- /dev/null
+++ b/routes/admin/fileManager.php
@@ -0,0 +1,37 @@
+ 'FileManager'], function () {
+
+ Route::get('files/overview/{directory?}', 'UploadedFilesOverview@index')
+ ->name('upload.overview')
+ ->middleware('can:manage,' . \App\Models\FileManager\File::class);
+
+ // uploader methods
+ Route::get('directories/edit/{directory}', 'EditDirectory@edit')
+ ->name('upload.editDirectory')
+ ->middleware('can:update,directory');
+
+ Route::post('directories/edit/{directory}', 'EditDirectory@update')
+ ->name('upload.postEditDirectory')
+ ->middleware('can:update,directory');
+
+ route::post('directories/new', 'CreateNewDirectory@store')
+ ->name('upload.postNewDirectory')
+ ->middleware('can:create,'.\App\Models\FileManager\Directory::class);
+
+ Route::get('upload/detail/{file}', 'EditUploadedFile@show')
+ ->name('upload.detail')
+ ->middleware('can:manage,' . \App\Models\FileManager\File::class);
+
+ Route::post('upload/detail/{file}', 'EditUploadedFile@update')
+ ->name('upload.postEdit')
+ ->middleware('can:update,file');
+
+ Route::get('upload/delete/{file}', 'EditUploadedFile@delete')
+ ->name('upload.delete')
+ ->middleware('can:delete,file');
+
+ // uploader methods
+ Route::post('upload', 'UploadFile@store')
+ ->name('upload.postFile')
+ ->middleware('can:upload,' . \App\Models\FileManager\File::class);
+});
diff --git a/routes/admin/settings.php b/routes/admin/settings.php
new file mode 100644
index 00000000..4f51cc37
--- /dev/null
+++ b/routes/admin/settings.php
@@ -0,0 +1,17 @@
+name('settings.overview')
+ ->middleware('can:manage,' . \App\Models\Settings::class);
+
+Route::post('settings', 'Settings@saveSettings')
+ ->name('settings.save')
+ ->middleware('can:manage,' . \App\Models\Settings::class);
+
+Route::get('permissions', 'Permissions@index')
+ ->name('permissions.index')
+ ->middleware('can:manage,' . \App\Models\Settings::class);
+
+Route::post('permissions', 'Permissions@setDefault')
+ ->name('permissions.setDefault')
+ ->middleware('can:manage,' . \App\Models\Settings::class);
\ No newline at end of file
diff --git a/routes/admin/templates.php b/routes/admin/templates.php
new file mode 100644
index 00000000..d9ad1343
--- /dev/null
+++ b/routes/admin/templates.php
@@ -0,0 +1,24 @@
+ 'Templates'], function () {
+
+ Route::get('templates', 'TemplateOverview@index')
+ ->name('templates.index')
+ ->middleware('can:manage,' . \App\Models\Templates\Template::class);
+
+ Route::get('templates/{templatePath}', 'TemplateOverview@getPath')
+ ->name('templates.overview')
+ ->middleware('can:manage,' . \App\Models\Templates\Template::class);
+
+ Route::post('templates/copy', 'CopyTemplate@createCopy')
+ ->name('templates.postCopy')
+ ->middleware('can:copy,' . \App\Models\Templates\Template::class);
+
+ Route::get('templates/edit/{template}', 'EditTemplate@getEdit')
+ ->name('templates.edit')
+ ->middleware('can:update,template');
+
+ Route::post('templates/edit/{template}', 'EditTemplate@postEdit')
+ ->name('templates.postEdit')
+ ->middleware('can:update,template');
+});
\ No newline at end of file
diff --git a/routes/admin/users.php b/routes/admin/users.php
new file mode 100644
index 00000000..70fc5c44
--- /dev/null
+++ b/routes/admin/users.php
@@ -0,0 +1,37 @@
+ 'Users'], function () {
+ // display form for creating new user
+ Route::get('users/new', 'CreateNewUser@getNewUser')
+ ->name('users.new')
+ ->middleware('can:create,' . \App\Models\User::class);
+
+ // POST methods
+ // display form for creating new user
+ Route::post('users/new', 'CreateNewUser@postRegistration')
+ ->name('users.newPost')
+ ->middleware('can:create,' . \App\Models\User::class);
+
+ // display form for edit of existing user
+ Route::get('users/edit/{user}', 'EditUser@getEditUser')
+ ->name('users.edit')
+ ->middleware('can:update,user');
+
+ // display user detail in admin
+ Route::get('users/detail/{user}', 'UserDetail@getDetail')
+ ->name('users.detail')
+ ->middleware('can:view,user');
+
+ // method for saving edited data of user
+ Route::post('users/edit/{user}', 'EditUser@postEdit')
+ ->name('users.editPost')
+ ->middleware('can:update,user');
+
+ // display list of all users registered into our system
+ Route::get('users/overview/{state?}/{perPage?}', 'UsersOverview@getOverview')
+ ->name('users.overview')
+ ->middleware('can:manage,' . \App\Models\User::class);
+
+ Route::post('users/{user}/permissions', 'EditUser@setPermissions')
+ ->middleware('can:set-permissions,user')
+ ->name('users.setPermissions');
+});
diff --git a/routes/admin/widgets.php b/routes/admin/widgets.php
new file mode 100644
index 00000000..8f9db1c4
--- /dev/null
+++ b/routes/admin/widgets.php
@@ -0,0 +1,75 @@
+ 'Widgets'], function () {
+
+ // list of all installed widget types
+ Route::get('widgets', 'WidgetsOverview@index')
+ ->name('widgets.overview')
+ ->middleware('can:manage,' . \App\Models\Widgets\Widget::class);
+
+ // create new instance of widget of given type
+ Route::get('widgets/new/{widgetType}', 'CreateNewWidget@getNew')
+ ->name('widgets.new')
+ ->middleware('can:create,' . \App\Models\Widgets\Widget::class);
+
+ Route::post('widgets/new/{widgetType}', 'CreateNewWidget@postNew')
+ ->name('widgets.postNew')
+ ->middleware('can:create,' . \App\Models\Widgets\Widget::class);
+
+ // edit widget settings
+ Route::get('widgets/edit/{widget}', 'EditWidget@getEdit')
+ ->name('widgets.edit')
+ ->middleware('can:update,widget');
+
+ // delete widget settings
+ Route::get('widgets/delete/{widget}', 'EditWidget@deleteWidget')
+ ->name('widgets.delete')
+ ->middleware('can:delete,widget');
+
+ Route::post('widgets/edit/{widget}', 'EditWidget@postEdit')
+ ->name('widgets.postEdit')
+ ->middleware('can:update,widget');
+
+ // display form for association of widget and widget area
+ Route::get('widgets/associate/{widgetArea}', 'AssociateWidget@getList')
+ ->name('widgets.associate')
+ ->middleware('can:assign,' . \App\Models\Widgets\Widget::class);
+
+ Route::get('widgets/deassociate/{widget}/{widgetArea}', 'AssociateWidget@deleteAssociation')
+ ->name('widgets.deleteAssociation')
+ ->middleware('can:unassign,' . \App\Models\Widgets\Widget::class);
+
+ Route::get('widgets/associate/{widget}/{widgetArea}', 'AssociateWidget@makeAssociation')
+ ->name('widgets.makeAssociation')
+ ->middleware('can:assign,' . \App\Models\Widgets\Widget::class);
+
+ Route::group(['namespace' => 'Areas'], function () {
+ Route::get('widgets/areas/overview', 'WidgetAreaOverview@getOverview')
+ ->name('widgetareas.overview')
+ ->middleware('can:manage,' . \App\Models\Widgets\WidgetArea::class);
+
+ // form for new widget area
+ Route::get('widgets/areas/new', 'CreateNewWidgetArea@create')
+ ->name('widgetareas.new')
+ ->middleware('can:create,' . \App\Models\Widgets\WidgetArea::class);
+
+ // form for new widget area
+ Route::post('widgets/areas/new', 'CreateNewWidgetArea@store')
+ ->name('widgetareas.postNew')
+ ->middleware('can:create,' . \App\Models\Widgets\WidgetArea::class);
+
+ // edit form for widget area
+ Route::get('widgets/areas/edit/{widgetArea}', 'EditWidgetArea@edit')
+ ->name('widgetareas.edit')
+ ->middleware('can:update,widgetArea');
+
+ Route::post('widgets/areas/edit/{widgetArea}', 'EditWidgetArea@update')
+ ->name('widgetareas.postEdit')
+ ->middleware('can:update,widgetArea');
+
+ // edit form for widget area
+ Route::get('widgets/areas/delete/{widgetArea}', 'EditWidgetArea@delete')
+ ->name('widgetareas.delete')
+ ->middleware('can:delete,widgetArea');
+ });
+});
diff --git a/routes/auth.php b/routes/auth.php
new file mode 100644
index 00000000..b99618dc
--- /dev/null
+++ b/routes/auth.php
@@ -0,0 +1,6 @@
+get('logout', 'Auth\LoginController@logout')
+ ->name('logout');
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
new file mode 100644
index 00000000..e88d429c
--- /dev/null
+++ b/routes/web.php
@@ -0,0 +1,26 @@
+ LaravelLocalization::setLocale(), 'middleware' => ['bindings', 'web']], function () {
+ // Homepage
+ Route::get('/', 'Visitor\Homepage@getIndex')
+ ->name('page.index');
+
+ // route for sitemap
+ Route::get('sitemap.xml', 'Visitor\Sitemap@getMap')
+ ->name('sitemap');
+
+ // route for all content pages. This rule must be specified last (because it matches every route)
+ Route::get('{url}', 'Visitor\ContentPage@getPage')
+ ->name('page.content');
+});
diff --git a/scripts/install.sh b/scripts/install.sh
index 6f534e4f..ca57063c 100644
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -255,8 +255,6 @@ if [ ! -e $THEME_SET_FILE ]; then
chmod 0777 resources/views/visitor -R
chmod 0777 resources/views/modules -R
- chmod 0777 modules/*/module.json
-
echo $THEME_NAME > $THEME_SET_FILE
fi
diff --git a/templates/Base/OnePage/Events/AddPageIntoHomepage.php b/templates/Base/OnePage/Events/AddPageIntoHomepage.php
deleted file mode 100644
index 2415e477..00000000
--- a/templates/Base/OnePage/Events/AddPageIntoHomepage.php
+++ /dev/null
@@ -1,18 +0,0 @@
-page = $page;
- }
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Events/RemovePageFromHomepage.php b/templates/Base/OnePage/Events/RemovePageFromHomepage.php
deleted file mode 100644
index 6b7e2e81..00000000
--- a/templates/Base/OnePage/Events/RemovePageFromHomepage.php
+++ /dev/null
@@ -1,18 +0,0 @@
-page = $page;
- }
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Handlers/OnePage.php b/templates/Base/OnePage/Handlers/OnePage.php
deleted file mode 100644
index 39acbad9..00000000
--- a/templates/Base/OnePage/Handlers/OnePage.php
+++ /dev/null
@@ -1,188 +0,0 @@
-route('template.setHomepage', trans('template::admin/mainMenu.setHomepage'), [], 1, ['icon' => 'fa fa-fw fa-home']);
- }
-
- /**
- * Getter for pages displayed on homepage
- *
- * @return array
- */
- public static function getPagesOnHomepage()
- {
- if (!self::$homepagePagesInitialized) {
- $pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]'));
-
- if (empty($pageIds)) {
- return [];
- }
-
- // get all available pages
- $pages = Content::whereIn('id', $pageIds);
-
- if (Auth::user()) {
- $pages = $pages->where('status', '!=', IContent::STATUS_DRAFT);
- } else {
- $pages = $pages->where('status', IContent::STATUS_PUBLIC);
- }
-
- $homepagePages = $pages->get()
- ->getDictionary();
-
- foreach ($pageIds as $pageId) {
- if (!isset($homepagePages[$pageId])) {
- continue;
- }
-
- self::$homepagePages[] = $homepagePages[$pageId];
- }
-
- self::$homepagePagesInitialized = true;
- }
-
- return self::$homepagePages;
- }
-
- /**
- * Prepare Content object to be rendered using Blade template
- *
- * @param Content $content
- *
- * @return array
- */
- public static function beforeRender(Content & $content)
- {
- if ($content->isHomepage) {
- $pages = self::getPagesOnHomepage();
-
- // create real content from pages
- $pagesRaw = $pagesInTemplates = [];
- foreach ($pages as $page) {
- // save pages as models only
- $pagesRaw[$page->url] = $page;
-
- // save rendered pages
- try {
- $pagesInTemplates[$page->url] = PageRenderer::render($page)
- ->render();
- } catch (\Exception $e) {
- if (Auth::user()) {
- $pagesInTemplates[$page->url] = view(Template::name('errors.cannotRender'), ['page' => $page])->render();
- }
- }
- }
-
- // return pages into template
- return ['pagesHtml' => $pagesInTemplates, 'pagesRaw' => $pagesRaw];
- }
-
- return [];
- }
-
- /**
- * Install module
- */
- public static function install()
- {
- // register action log types
-
- $types = [
- [
- 'string_id' => 'pageRemovedFromHomepage',
- 'name' => 'template::admin/setHomepage.events.names.removedPage',
- 'value' => 'template::admin/setHomepage.events.descriptions.removedPage',
- ],
- [
- 'string_id' => 'pageAddedIntoHomepage',
- 'name' => 'template::admin/setHomepage.events.names.addedPage',
- 'value' => 'template::admin/setHomepage.events.descriptions.addedPage',
- ],
-
- ];
- foreach ($types as $type) {
- ActionLogType::create($type);
- }
-
- // try to create onepage menu widget
- $widgetName = OnePageMenu::getName();
- $widgetDescription = OnePageMenu::getDescription();
-
- CurrentTemplate::reset();
-
- // create row in widget types
- WidgetType::create([
- 'handler' => OnePageMenu::class,
- 'name' => $widgetName,
- 'module_id' => null,
- 'template_id' => CurrentTemplate::get()->id,
- 'description' => $widgetDescription
- ]);
-
- $area = WidgetArea::create(['name' => 'Top menu', 'code' => 'topMenu', 'deletable' => 0]);
- $widget = Widget::create([
- 'widget_type_handler' => OnePageMenu::class,
- 'name' => 'Menu',
- 'settings' => '{"containerClass": null}',
- 'deletable' => 0
- ]);
-
- // bind widget with widget area
- WidgetInWidgetArea::create(['widget_id' => $widget->id, 'widget_area_id' => $area->id, 'position' => 1]);
- }
-
- /**
- * Uninstall template
- *
- * @param Module $template
- */
- public static function uninstall(Module $template)
- {
- // delete action log types
- ActionLogType::whereIn('string_id', ['pageRemovedFromHomepage', 'pageAddedIntoHomepage'])
- ->delete();
-
- // delete settings with pages on homepage
- SettingsModel::where('key', self::HOMEPAGE_PAGES_SETTINGS_KEY)
- ->delete();
- }
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Http/Controllers/Admin/SetHomepage.php b/templates/Base/OnePage/Http/Controllers/Admin/SetHomepage.php
deleted file mode 100644
index 83440001..00000000
--- a/templates/Base/OnePage/Http/Controllers/Admin/SetHomepage.php
+++ /dev/null
@@ -1,160 +0,0 @@
-content = $content;
- }
-
- /**
- * Display form for organizing pages on homepage
- *
- * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
- */
- public function getPages()
- {
- // get pages which are assigned as homepage parts
- $usedPagesIds = (array)Settings::getJson(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY);
-
- // get all pages - they will be separated for used and not used on next lines
- $allPages = $this->content->getOverview()
- ->get();
-
- // separate pages to used and not used - with help of $usedPAgesIds array defined above
- $pages = $used = $notUsed = [];
- $homepage = null;
- foreach ($allPages as $page) {
-
- if ($page->isHomepage) {
- $homepage = $page;
- continue;
- }
-
- $pages[$page->id] = $page;
-
- if (in_array($page->id, $usedPagesIds)) {
- $used[$page->id] = $page;
- } else {
- $notUsed[$page->id] = $page;
- }
- }
-
- return view('template::admin/homepage.set', [
- 'usedPagesIds' => $usedPagesIds,
- 'allPages' => $pages,
- 'usedPages' => $used,
- 'notUsedPages' => $notUsed,
- 'homepage' => $homepage
- ]);
- }
-
- /**
- * Add page into homepage
- *
- * @param $id
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function addPage($id)
- {
- $page = $this->content->getOne($id);
-
- if ($page->isHomepage) {
- return redirect()
- ->back()
- ->with('error', trans('template::admin/setHomepage.cannotSetHomepageAsPartOfHomepage'));
- }
-
- // try to get page config
- $settingsEntry = SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
- ->where('language', LaravelLocalization::getCurrentLocale())
- ->first();
-
- if (!$settingsEntry) {
- $settingsEntry = new SettingsModel();
- $settingsEntry->language = LaravelLocalization::getCurrentLocale();
- $settingsEntry->key = OnePage::HOMEPAGE_PAGES_SETTINGS_KEY;
- $usedPagesIds = [];
- } else {
- $usedPagesIds = (array)json_decode($settingsEntry->value);
- }
-
- // add page into list of used pages - if not already there
- if (!in_array($id, $usedPagesIds)) {
- $usedPagesIds[] = $id;
- }
-
- $settingsEntry->value = json_encode($usedPagesIds);
- $settingsEntry->save();
-
- // inform other application parts about this event
- Event::fire(new AddPageIntoHomepage($page));
-
- return redirect()
- ->back()
- ->with('success', trans('template::admin/setHomepage.successfullyAdded'));
- }
-
- /**
- * Remove page from homepage
- *
- * @param $id
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function removePage($id)
- {
- $pages = (array)Settings::getJson(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY);
-
- $page = $this->content->getOne($id);
-
- if (!in_array($id, $pages)) {
- return redirect()
- ->back()
- ->with('error', trans('template::admin/setHomepage.invalidPageId'));
- } else {
- $pagePosition = array_search($id, $pages);
-
- // remove page from config array
- unset($pages[$pagePosition]);
-
- $pages = array_values($pages);
-
- // update in database
- SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
- ->where('language', LaravelLocalization::getCurrentLocale())
- ->update(['value' => json_encode($pages)]);
-
- // inform other application parts about this event
- Event::fire(new RemovePageFromHomepage($page));
-
- return redirect()
- ->back()
- ->with('success', trans('template::admin/setHomepage.successfullyRemoved'));
- }
- }
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Http/routes.php b/templates/Base/OnePage/Http/routes.php
deleted file mode 100644
index 55c87aee..00000000
--- a/templates/Base/OnePage/Http/routes.php
+++ /dev/null
@@ -1,19 +0,0 @@
- ['admin'],
- 'prefix' => \LaravelLocalization::setLocale() . '/admin/template',
- 'namespace' => 'Templates\Base\OnePage\Http\Controllers\Admin'
- ], function () {
-
- // display form for selecting pages for homepage
- Route::get('homepage', 'SetHomepage@getPages')
- ->name('template.setHomepage');
-
- // add page into homepage
- Route::get('add/{id}', 'SetHomepage@addPage')
- ->name('template.homepage.addPage');
-
- // delete page from homepage
- Route::get('remove/{id}', 'SetHomepage@removePage')
- ->name('template.homepage.removePage');
-});
\ No newline at end of file
diff --git a/templates/Base/OnePage/Listeners/HomepageChanged.php b/templates/Base/OnePage/Listeners/HomepageChanged.php
deleted file mode 100644
index bd5ac2a8..00000000
--- a/templates/Base/OnePage/Listeners/HomepageChanged.php
+++ /dev/null
@@ -1,37 +0,0 @@
-page->id, $pagesOnHomepage)) {
- $position = array_search($event->page->id, $pagesOnHomepage);
-
- unset($pagesOnHomepage[$position]);
-
- $pages = array_values($pagesOnHomepage);
-
- $settings = SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
- ->where('language', \LaravelLocalization::getCurrentLocale());
-
- // update in database
- if (!empty($pages)) {
- $settings->update(['value' => json_encode($pages)]);
- } else {
- $settings->delete();
- }
- }
- }
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Listeners/Loggers/LogAddingPage.php b/templates/Base/OnePage/Listeners/Loggers/LogAddingPage.php
deleted file mode 100644
index 67bb113a..00000000
--- a/templates/Base/OnePage/Listeners/Loggers/LogAddingPage.php
+++ /dev/null
@@ -1,23 +0,0 @@
- $event->page->id,
- 'title' => $event->page->title
- ];
-
- $this->saveLog($parameters);
- }
-
- protected function getName()
- {
- return 'pageAddedIntoHomepage';
- }
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Listeners/Loggers/LogRemovingPage.php b/templates/Base/OnePage/Listeners/Loggers/LogRemovingPage.php
deleted file mode 100644
index f862f115..00000000
--- a/templates/Base/OnePage/Listeners/Loggers/LogRemovingPage.php
+++ /dev/null
@@ -1,23 +0,0 @@
- $event->page->id,
- 'title' => $event->page->title
- ];
-
- $this->saveLog($parameters);
- }
-
- protected function getName()
- {
- return 'pageRemovedFromHomepage';
- }
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Providers/EventProvider.php b/templates/Base/OnePage/Providers/EventProvider.php
deleted file mode 100644
index 7f6c9bbc..00000000
--- a/templates/Base/OnePage/Providers/EventProvider.php
+++ /dev/null
@@ -1,19 +0,0 @@
- [HomepageChanged::class],
- AddPageIntoHomepage::class => [LogAddingPage::class],
- RemovePageFromHomepage::class => [LogRemovingPage::class],
- ];
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Providers/OnePageTemplate.php b/templates/Base/OnePage/Providers/OnePageTemplate.php
deleted file mode 100644
index 6de33b5c..00000000
--- a/templates/Base/OnePage/Providers/OnePageTemplate.php
+++ /dev/null
@@ -1,58 +0,0 @@
-registerTranslations();
- }
-
- public function boot()
- {
- $this->registerViews();
- $this->registerWidgets();
-
- // register event service provider for this template
- $this->app->register(EventProvider::class);
- }
-
- /**
- * Register translations used in this base template
- */
- private function registerTranslations()
- {
- // register translations
- $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'template');
- }
-
- /**
- * Register views used in this template - both visitor's and admin's
- */
- private function registerViews()
- {
- // load views
- $this->loadViewsFrom(array_merge(array_map(function ($path) {
- return $path;
- }, \Config::get('view.paths')), [__DIR__ . '/../Resources/views']), 'template');
- }
-
- /**
- * Register all widgets related to this template
- */
- private function registerWidgets()
- {
- $registrator = $this->app->make('registerWidget');
-
- // register all available widgets
- $registrator->register(OnePageMenu::class);
- }
-}
\ No newline at end of file
diff --git a/templates/Base/OnePage/Resources/lang/cs/admin/mainMenu.php b/templates/Base/OnePage/Resources/lang/cs/admin/mainMenu.php
deleted file mode 100644
index 89c2e5c5..00000000
--- a/templates/Base/OnePage/Resources/lang/cs/admin/mainMenu.php
+++ /dev/null
@@ -1,5 +0,0 @@
- "Nastavení hlavní stránky",
-"templateName" => "Jednostránkovka",
-];
diff --git a/templates/Base/OnePage/Resources/lang/cs/admin/setHomepage.php b/templates/Base/OnePage/Resources/lang/cs/admin/setHomepage.php
deleted file mode 100644
index 0a06cf67..00000000
--- a/templates/Base/OnePage/Resources/lang/cs/admin/setHomepage.php
+++ /dev/null
@@ -1,23 +0,0 @@
- "Přidat stránku na homepage",
-"cannotSetHomepageAsPartOfHomepage" => "No toto? Jak mám nastavit domovskou stárnku jako podstránku sama sebe?",
-"events" => ["descriptions" => ["addedPage" => 'Na domovskou stránku byla přidána stránka #:id s titulkem ":title"',
-"removedPage" => 'Z domovské stránky byla odebrána stránka #:id ":title"',
-],
-"names" => ["addedPage" => "Stránka přidána na titulní stranu.",
-"removedPage" => "Stránka odebrána z titulní strany.",
-],
-],
-"invalidPageId" => "Nelze odebrat stránku z titulní strany, neboť uvedené ID neexistuje.",
-"noHomepageSet" => "Není nastavena domovská stránka, následující nastavení se nikde neprojeví!",
-"noPagesAvailable" => "Žádné stránky k dispozici.",
-"noPagesSelected" => "Nebyla vybrána žádná stránka pro zobrazení na titulní straně. Zatím...",
-"notUsedPages" => "Nepoužité stránky",
-"pageDescription" => "Na této stránce můžete nastavit stránky, které se mají zobrazovat na titulní strane.",
-"reallyRemovePage" => "Opravdu chcete odebrat stránku y hlavní stránky?",
-"successfullyAdded" => "Stránka úspěšně přidána na úvodní stranu",
-"successfullyRemoved" => "Stránka úspěšně odebrána z úvodní stránky.",
-"title" => "Nastavení úvodní stránky",
-"usedPages" => "Použité stránky",
-];
diff --git a/templates/Base/OnePage/Resources/lang/cs/widget/menu.php b/templates/Base/OnePage/Resources/lang/cs/widget/menu.php
deleted file mode 100644
index 48a23882..00000000
--- a/templates/Base/OnePage/Resources/lang/cs/widget/menu.php
+++ /dev/null
@@ -1,11 +0,0 @@
- "Jednoduché menu použité pro navigaci v jednostránkovém webu. Pro přechody mezi stránkami používá anchor odkazy na stránky. Ty se generují automaticky ze seznamu stránek přidaných na homepage.",
-"form" => ["containerClass" => "HTML třída obalového elementu",
-"description" => "Popis",
-"name" => "Název menu",
-"save" => "Uložit",
-],
-"name" => "Jednstránkové menu",
-"new" => "Vytvořit nové menu",
-];
diff --git a/templates/Base/OnePage/Resources/lang/en/admin/mainMenu.php b/templates/Base/OnePage/Resources/lang/en/admin/mainMenu.php
deleted file mode 100644
index 9f102eeb..00000000
--- a/templates/Base/OnePage/Resources/lang/en/admin/mainMenu.php
+++ /dev/null
@@ -1,5 +0,0 @@
- 'Homepage settings',
- 'templateName' => 'Onepager'
-];
\ No newline at end of file
diff --git a/templates/Base/OnePage/Resources/lang/en/admin/setHomepage.php b/templates/Base/OnePage/Resources/lang/en/admin/setHomepage.php
deleted file mode 100644
index 1609b533..00000000
--- a/templates/Base/OnePage/Resources/lang/en/admin/setHomepage.php
+++ /dev/null
@@ -1,26 +0,0 @@
- 'Homepage setup',
- 'pageDescription' => 'On this page you can setup all pages which should appear on homepage. Use drag\'n\'drop feature and organize your pages into your presentation.',
- 'noPagesSelected' => 'No pages selected for homepage. Yet...',
- 'noPagesAvailable' => 'There are no pages you could set up for homepage.',
- 'successfullyAdded' => 'Page successfully added to homepage.',
- 'successfullyRemoved' => 'Page successfully removed from homepage.',
- 'invalidPageId' => 'Cannot remove page from homepage, because given ID does not exist.',
- 'usedPages' => 'Used pages',
- 'notUsedPages' => 'Not used pages',
- 'reallyRemovePage' => 'Do you really want to remove this page from homepage?',
- 'cannotSetHomepageAsPartOfHomepage' => 'Cannot set currently set homepage as one of homepage pages.',
- 'noHomepageSet' => 'No homepage set, following settings will not take effect!',
- 'addToHomepage' => 'Add page into homepage',
- 'events' => [
- 'names' => [
- 'removedPage' => 'Removed page from homepage',
- 'addedPage' => 'Added page into homepage'
- ],
- 'descriptions' => [
- 'removedPage' => 'Removed page #:id ":title" from homepage.',
- 'addedPage' => 'Added page #:id ":title" into homepage.'
- ]
- ]
-];
\ No newline at end of file
diff --git a/templates/Base/OnePage/Resources/lang/en/widget/menu.php b/templates/Base/OnePage/Resources/lang/en/widget/menu.php
deleted file mode 100644
index 04a5c5c8..00000000
--- a/templates/Base/OnePage/Resources/lang/en/widget/menu.php
+++ /dev/null
@@ -1,12 +0,0 @@
- 'One page menu',
- 'description' => 'Simple menu used for one page templates. This menu navigates using nachor links on page. Links are generated automatically using list of pages on homepage.',
- 'new' => 'Create new menu',
- 'form' => [
- 'name' => 'Menu name',
- 'description' => 'Description',
- 'containerClass' => 'HTML class for container element',
- 'save' => 'Save',
- ]
-];
\ No newline at end of file
diff --git a/templates/Base/OnePage/Resources/views/admin/homepage/set.blade.php b/templates/Base/OnePage/Resources/views/admin/homepage/set.blade.php
deleted file mode 100644
index cfa6d1bc..00000000
--- a/templates/Base/OnePage/Resources/views/admin/homepage/set.blade.php
+++ /dev/null
@@ -1,90 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', trans('template::admin/setHomepage.title'))
-@section('pageDescription', trans('template::admin/setHomepage.pageDescription'))
-
-{{--
-Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
---}}
-
-@section('content')
-
-
-
- @if(isset($homepage))
- @include('admin.snippets.card', [
- 'type' => 'primary',
- 'title' => $homepage->title.'
'.trans($homepage->module_name).' ',
- 'body' => '
'.str_limit(strip_tags($homepage->content), 200).'
',
- 'footerClass' => 'text-right',
- 'footer' => '
'
- ])
- @else
-
@lang('template::admin/setHomepage.noHomepageSet')
- @endif
-
-
@lang('template::admin/setHomepage.usedPages')
-
- @forelse($usedPagesIds as $pageId)
-
- {{--ignore non-existing pages--}}
- @if(!isset($allPages[$pageId]))
- @continue
- @endif
-
-
- @include('admin.snippets.card', [
- 'title' => $allPages[$pageId]->title.'
'.trans($allPages[$pageId]->module_name).' ',
- 'body' => '
'.str_limit(strip_tags($allPages[$pageId]->content), 200).'
',
- 'footerClass' => 'text-right',
- 'footer' => '
-
-
- '
- ])
- @empty
-
- @lang('template::admin/setHomepage.noPagesSelected')
-
- @endforelse
-
-
-
@lang('template::admin/setHomepage.notUsedPages')
- @forelse($notUsedPages as $page)
-
-
-
- {{str_limit(strip_tags($page->content), 100)}}
-
-
-
- @empty
-
- @lang('template::admin/setHomepage.noPagesAvailable')
-
- @endforelse
-
-
-
-@endsection
\ No newline at end of file
diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php
deleted file mode 100644
index f4dbc2cd..00000000
--- a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/edit.blade.php
+++ /dev/null
@@ -1,15 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', @trans('widgets/htmlCode.edit', ['name' => $widget->name]))
-
-@section('content')
-
- @include('template::admin.widgets.onePageMenu.form', ['action' => route('widgets.postEdit', ['id' => $widget->id])])
-
-
-
@lang('widgets/menu.preview')
-
- @widgetPreview($widget)
-
-@stop
-
diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php
deleted file mode 100644
index 94d02c07..00000000
--- a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/form.blade.php
+++ /dev/null
@@ -1,27 +0,0 @@
-
- {!! csrf_field() !!}
-
- @lang('template::widget/menu.form.name')
-
-
-
-
-
- @lang('template::widget/menu.form.description')
-
-
-
-
-
- @lang('template::widget/menu.form.containerClass')
-
-
-
-
-
- @lang('template::widget/menu.form.save')
-
-
\ No newline at end of file
diff --git a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php b/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php
deleted file mode 100644
index 426b2db2..00000000
--- a/templates/Base/OnePage/Resources/views/admin/widgets/onePageMenu/new.blade.php
+++ /dev/null
@@ -1,9 +0,0 @@
-@extends('admin.layoutWithNavigation')
-
-@section('pageHeading', @trans('template::widget/menu.new'))
-@section('pageDescription', @trans($type->description))
-
-@section('content')
- @include('template::admin.widgets.onePageMenu.form', ['action' => route('widgets.postNew', ['type' => $type->id])])
-@stop
-
diff --git a/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php b/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php
deleted file mode 100644
index 28f2e46f..00000000
--- a/templates/Base/OnePage/Widgets/OnePageMenu/OnePageMenu.php
+++ /dev/null
@@ -1,49 +0,0 @@
- $pages, 'widget' => $widget])->render();
- }
-
- /**
- * Display form for creating new instance of widget
- *
- * @param WidgetType $type
- *
- * @return mixed
- */
- public static function renderAddForm(WidgetType $type)
- {
- return view('template::admin.widgets.onePageMenu.new', [
- 'type' => $type,
- 'widget' => new Widget(),
- 'settings' => new \stdClass()
- ]);
- }
-
- /**
- * Display form for editing already existing widget
- *
- * @param Widget $widget
- *
- * @return mixed
- */
- public static function renderEditForm(Widget $widget)
- {
- $settings = $widget->settings;
- return view('template::admin.widgets.onePageMenu.edit', ['widget' => $widget, 'settings' => $settings]);
- }
-}
diff --git a/templates/Base/OnePage/config.php b/templates/Base/OnePage/config.php
deleted file mode 100644
index a94cf0f9..00000000
--- a/templates/Base/OnePage/config.php
+++ /dev/null
@@ -1,8 +0,0 @@
- [\Templates\Base\OnePage\Providers\OnePageTemplate::class],
- 'files' => [__DIR__ . '/Http/routes.php'],
- 'handler' => null,
- 'name' => null,
- 'description' => null,
-];
diff --git a/templates/Binarity/Handler.php b/templates/Binarity/Handler.php
deleted file mode 100644
index 8b4e98e0..00000000
--- a/templates/Binarity/Handler.php
+++ /dev/null
@@ -1,85 +0,0 @@
- 0, 'code' => 'mainMenu', 'name' => 'Menu']);
- }
-
- /**
- * Uninstall template
- *
- * Delete some items in database, delete files etc.
- *
- * @param Module $template
- */
- public static function uninstall(Module $template)
- {
- WidgetArea::where('code', 'mainMenu')
- ->delete();
- }
-
- /**
- * Get list of registered templates and supported modules.
- *
- * Returned array is expected to be array of arrays with following items: module, namespace and templateName.
- * Example:
- * return [
- * ['module' => 'Article', 'templateName' => 'article::template.name']
- * ];
- *
- * When no "namespace" is specified, value strtolower(module) is used instaed.
- *
- * @return array
- */
- public static function getPublicTemplatePaths()
- {
- return [
- [
- 'module' => 'StaticPages',
- 'templateName' => 'staticpages::admin.templatePath'
- ],
- [
- 'module' => 'ContactForm',
- 'templateName' => 'contactform::admin/adminMenu.templatePath'
- ],
- [
- 'module' => 'ArticleList',
- 'alias' => 'blog-articlelist',
- 'templateName' => 'articlelist::module.templatePath'
- ],
- [
- 'module' => 'Article',
- 'alias' => 'blog-article',
- 'templateName' => 'article::module.templatePath'
- ],
- ];
- }
-}
\ No newline at end of file
diff --git a/templates/Binarity/Providers/ServiceProvider.php b/templates/Binarity/Providers/ServiceProvider.php
deleted file mode 100644
index 63a5dd58..00000000
--- a/templates/Binarity/Providers/ServiceProvider.php
+++ /dev/null
@@ -1,22 +0,0 @@
-
');
- background-size: 9px 6px;
- background-position: right center;
- background-origin: content-box;
- background-repeat: no-repeat;
-}
-#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object {
- max-width: none !important;
-}
-[data-whatinput='mouse'] button {
- outline: 0;
-}
-.is-visible {
- display: block !important;
-}
-.is-hidden {
- display: none !important;
-}
-.row {
- max-width: 75rem;
- margin-left: auto;
- margin-right: auto;
-}
-.row::before,.row::after {
- content: ' ';
- display: table;
-}
-.row::after {
- clear: both;
-}
-.row.collapse > .column,.row.collapse > .columns {
- padding-left: 0;
- padding-right: 0;
-}
-.row .row {
- max-width: none;
- margin-left: -0.625rem;
- margin-right: -0.625rem;
-}
-
-@media screen and (min-width: 40em) {
-
- .row .row {
- margin-left: -0.9375rem;
- margin-right: -0.9375rem;
- }
-}
-
-.row .row.collapse {
- margin-left: 0;
- margin-right: 0;
-}
-.row.expanded {
- max-width: none;
-}
-.row.expanded .row {
- margin-left: auto;
- margin-right: auto;
-}
-.column,.columns {
- width: 100%;
- float: left;
- padding-left: 0.625rem;
- padding-right: 0.625rem;
-}
-
-@media screen and (min-width: 40em) {
-
- .column,.columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
-}
-
-.column:last-child:not(:first-child),.columns:last-child:not(:first-child) {
- float: right;
-}
-.column.end:last-child:last-child,.end.columns:last-child:last-child {
- float: left;
-}
-.column.row.row,.row.row.columns {
- float: none;
-}
-.row .column.row.row,.row .row.row.columns {
- padding-left: 0;
- padding-right: 0;
- margin-left: 0;
- margin-right: 0;
-}
-.small-1 {
- width: 8.33333%;
-}
-.small-push-1 {
- position: relative;
- left: 8.33333%;
-}
-.small-pull-1 {
- position: relative;
- left: -8.33333%;
-}
-.small-offset-0 {
- margin-left: 0%;
-}
-.small-2 {
- width: 16.66667%;
-}
-.small-push-2 {
- position: relative;
- left: 16.66667%;
-}
-.small-pull-2 {
- position: relative;
- left: -16.66667%;
-}
-.small-offset-1 {
- margin-left: 8.33333%;
-}
-.small-3 {
- width: 25%;
-}
-.small-push-3 {
- position: relative;
- left: 25%;
-}
-.small-pull-3 {
- position: relative;
- left: -25%;
-}
-.small-offset-2 {
- margin-left: 16.66667%;
-}
-.small-4 {
- width: 33.33333%;
-}
-.small-push-4 {
- position: relative;
- left: 33.33333%;
-}
-.small-pull-4 {
- position: relative;
- left: -33.33333%;
-}
-.small-offset-3 {
- margin-left: 25%;
-}
-.small-5 {
- width: 41.66667%;
-}
-.small-push-5 {
- position: relative;
- left: 41.66667%;
-}
-.small-pull-5 {
- position: relative;
- left: -41.66667%;
-}
-.small-offset-4 {
- margin-left: 33.33333%;
-}
-.small-6 {
- width: 50%;
-}
-.small-push-6 {
- position: relative;
- left: 50%;
-}
-.small-pull-6 {
- position: relative;
- left: -50%;
-}
-.small-offset-5 {
- margin-left: 41.66667%;
-}
-.small-7 {
- width: 58.33333%;
-}
-.small-push-7 {
- position: relative;
- left: 58.33333%;
-}
-.small-pull-7 {
- position: relative;
- left: -58.33333%;
-}
-.small-offset-6 {
- margin-left: 50%;
-}
-.small-8 {
- width: 66.66667%;
-}
-.small-push-8 {
- position: relative;
- left: 66.66667%;
-}
-.small-pull-8 {
- position: relative;
- left: -66.66667%;
-}
-.small-offset-7 {
- margin-left: 58.33333%;
-}
-.small-9 {
- width: 75%;
-}
-.small-push-9 {
- position: relative;
- left: 75%;
-}
-.small-pull-9 {
- position: relative;
- left: -75%;
-}
-.small-offset-8 {
- margin-left: 66.66667%;
-}
-.small-10 {
- width: 83.33333%;
-}
-.small-push-10 {
- position: relative;
- left: 83.33333%;
-}
-.small-pull-10 {
- position: relative;
- left: -83.33333%;
-}
-.small-offset-9 {
- margin-left: 75%;
-}
-.small-11 {
- width: 91.66667%;
-}
-.small-push-11 {
- position: relative;
- left: 91.66667%;
-}
-.small-pull-11 {
- position: relative;
- left: -91.66667%;
-}
-.small-offset-10 {
- margin-left: 83.33333%;
-}
-.small-12 {
- width: 100%;
-}
-.small-offset-11 {
- margin-left: 91.66667%;
-}
-.small-up-1 > .column,.small-up-1 > .columns {
- width: 100%;
- float: left;
-}
-.small-up-1 > .column:nth-of-type(1n),.small-up-1 > .columns:nth-of-type(1n) {
- clear: none;
-}
-.small-up-1 > .column:nth-of-type(1n+1),.small-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
-}
-.small-up-1 > .column:last-child,.small-up-1 > .columns:last-child {
- float: left;
-}
-.small-up-2 > .column,.small-up-2 > .columns {
- width: 50%;
- float: left;
-}
-.small-up-2 > .column:nth-of-type(1n),.small-up-2 > .columns:nth-of-type(1n) {
- clear: none;
-}
-.small-up-2 > .column:nth-of-type(2n+1),.small-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
-}
-.small-up-2 > .column:last-child,.small-up-2 > .columns:last-child {
- float: left;
-}
-.small-up-3 > .column,.small-up-3 > .columns {
- width: 33.33333%;
- float: left;
-}
-.small-up-3 > .column:nth-of-type(1n),.small-up-3 > .columns:nth-of-type(1n) {
- clear: none;
-}
-.small-up-3 > .column:nth-of-type(3n+1),.small-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
-}
-.small-up-3 > .column:last-child,.small-up-3 > .columns:last-child {
- float: left;
-}
-.small-up-4 > .column,.small-up-4 > .columns {
- width: 25%;
- float: left;
-}
-.small-up-4 > .column:nth-of-type(1n),.small-up-4 > .columns:nth-of-type(1n) {
- clear: none;
-}
-.small-up-4 > .column:nth-of-type(4n+1),.small-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
-}
-.small-up-4 > .column:last-child,.small-up-4 > .columns:last-child {
- float: left;
-}
-.small-up-5 > .column,.small-up-5 > .columns {
- width: 20%;
- float: left;
-}
-.small-up-5 > .column:nth-of-type(1n),.small-up-5 > .columns:nth-of-type(1n) {
- clear: none;
-}
-.small-up-5 > .column:nth-of-type(5n+1),.small-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
-}
-.small-up-5 > .column:last-child,.small-up-5 > .columns:last-child {
- float: left;
-}
-.small-up-6 > .column,.small-up-6 > .columns {
- width: 16.66667%;
- float: left;
-}
-.small-up-6 > .column:nth-of-type(1n),.small-up-6 > .columns:nth-of-type(1n) {
- clear: none;
-}
-.small-up-6 > .column:nth-of-type(6n+1),.small-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
-}
-.small-up-6 > .column:last-child,.small-up-6 > .columns:last-child {
- float: left;
-}
-.small-up-7 > .column,.small-up-7 > .columns {
- width: 14.28571%;
- float: left;
-}
-.small-up-7 > .column:nth-of-type(1n),.small-up-7 > .columns:nth-of-type(1n) {
- clear: none;
-}
-.small-up-7 > .column:nth-of-type(7n+1),.small-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
-}
-.small-up-7 > .column:last-child,.small-up-7 > .columns:last-child {
- float: left;
-}
-.small-up-8 > .column,.small-up-8 > .columns {
- width: 12.5%;
- float: left;
-}
-.small-up-8 > .column:nth-of-type(1n),.small-up-8 > .columns:nth-of-type(1n) {
- clear: none;
-}
-.small-up-8 > .column:nth-of-type(8n+1),.small-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
-}
-.small-up-8 > .column:last-child,.small-up-8 > .columns:last-child {
- float: left;
-}
-.small-collapse > .column,.small-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
-}
-.small-collapse .row {
- margin-left: 0;
- margin-right: 0;
-}
-.small-uncollapse > .column,.small-uncollapse > .columns {
- padding-left: 0.625rem;
- padding-right: 0.625rem;
-}
-.small-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
-}
-.small-uncentered,.small-push-0,.small-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
-}
-
-@media screen and (min-width: 40em) {
-
- .medium-1 {
- width: 8.33333%;
- }
- .medium-push-1 {
- position: relative;
- left: 8.33333%;
- }
- .medium-pull-1 {
- position: relative;
- left: -8.33333%;
- }
- .medium-offset-0 {
- margin-left: 0%;
- }
- .medium-2 {
- width: 16.66667%;
- }
- .medium-push-2 {
- position: relative;
- left: 16.66667%;
- }
- .medium-pull-2 {
- position: relative;
- left: -16.66667%;
- }
- .medium-offset-1 {
- margin-left: 8.33333%;
- }
- .medium-3 {
- width: 25%;
- }
- .medium-push-3 {
- position: relative;
- left: 25%;
- }
- .medium-pull-3 {
- position: relative;
- left: -25%;
- }
- .medium-offset-2 {
- margin-left: 16.66667%;
- }
- .medium-4 {
- width: 33.33333%;
- }
- .medium-push-4 {
- position: relative;
- left: 33.33333%;
- }
- .medium-pull-4 {
- position: relative;
- left: -33.33333%;
- }
- .medium-offset-3 {
- margin-left: 25%;
- }
- .medium-5 {
- width: 41.66667%;
- }
- .medium-push-5 {
- position: relative;
- left: 41.66667%;
- }
- .medium-pull-5 {
- position: relative;
- left: -41.66667%;
- }
- .medium-offset-4 {
- margin-left: 33.33333%;
- }
- .medium-6 {
- width: 50%;
- }
- .medium-push-6 {
- position: relative;
- left: 50%;
- }
- .medium-pull-6 {
- position: relative;
- left: -50%;
- }
- .medium-offset-5 {
- margin-left: 41.66667%;
- }
- .medium-7 {
- width: 58.33333%;
- }
- .medium-push-7 {
- position: relative;
- left: 58.33333%;
- }
- .medium-pull-7 {
- position: relative;
- left: -58.33333%;
- }
- .medium-offset-6 {
- margin-left: 50%;
- }
- .medium-8 {
- width: 66.66667%;
- }
- .medium-push-8 {
- position: relative;
- left: 66.66667%;
- }
- .medium-pull-8 {
- position: relative;
- left: -66.66667%;
- }
- .medium-offset-7 {
- margin-left: 58.33333%;
- }
- .medium-9 {
- width: 75%;
- }
- .medium-push-9 {
- position: relative;
- left: 75%;
- }
- .medium-pull-9 {
- position: relative;
- left: -75%;
- }
- .medium-offset-8 {
- margin-left: 66.66667%;
- }
- .medium-10 {
- width: 83.33333%;
- }
- .medium-push-10 {
- position: relative;
- left: 83.33333%;
- }
- .medium-pull-10 {
- position: relative;
- left: -83.33333%;
- }
- .medium-offset-9 {
- margin-left: 75%;
- }
- .medium-11 {
- width: 91.66667%;
- }
- .medium-push-11 {
- position: relative;
- left: 91.66667%;
- }
- .medium-pull-11 {
- position: relative;
- left: -91.66667%;
- }
- .medium-offset-10 {
- margin-left: 83.33333%;
- }
- .medium-12 {
- width: 100%;
- }
- .medium-offset-11 {
- margin-left: 91.66667%;
- }
- .medium-up-1 > .column,.medium-up-1 > .columns {
- width: 100%;
- float: left;
- }
- .medium-up-1 > .column:nth-of-type(1n),.medium-up-1 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-1 > .column:nth-of-type(1n+1),.medium-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
- }
- .medium-up-1 > .column:last-child,.medium-up-1 > .columns:last-child {
- float: left;
- }
- .medium-up-2 > .column,.medium-up-2 > .columns {
- width: 50%;
- float: left;
- }
- .medium-up-2 > .column:nth-of-type(1n),.medium-up-2 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-2 > .column:nth-of-type(2n+1),.medium-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
- }
- .medium-up-2 > .column:last-child,.medium-up-2 > .columns:last-child {
- float: left;
- }
- .medium-up-3 > .column,.medium-up-3 > .columns {
- width: 33.33333%;
- float: left;
- }
- .medium-up-3 > .column:nth-of-type(1n),.medium-up-3 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-3 > .column:nth-of-type(3n+1),.medium-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
- }
- .medium-up-3 > .column:last-child,.medium-up-3 > .columns:last-child {
- float: left;
- }
- .medium-up-4 > .column,.medium-up-4 > .columns {
- width: 25%;
- float: left;
- }
- .medium-up-4 > .column:nth-of-type(1n),.medium-up-4 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-4 > .column:nth-of-type(4n+1),.medium-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
- }
- .medium-up-4 > .column:last-child,.medium-up-4 > .columns:last-child {
- float: left;
- }
- .medium-up-5 > .column,.medium-up-5 > .columns {
- width: 20%;
- float: left;
- }
- .medium-up-5 > .column:nth-of-type(1n),.medium-up-5 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-5 > .column:nth-of-type(5n+1),.medium-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
- }
- .medium-up-5 > .column:last-child,.medium-up-5 > .columns:last-child {
- float: left;
- }
- .medium-up-6 > .column,.medium-up-6 > .columns {
- width: 16.66667%;
- float: left;
- }
- .medium-up-6 > .column:nth-of-type(1n),.medium-up-6 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-6 > .column:nth-of-type(6n+1),.medium-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
- }
- .medium-up-6 > .column:last-child,.medium-up-6 > .columns:last-child {
- float: left;
- }
- .medium-up-7 > .column,.medium-up-7 > .columns {
- width: 14.28571%;
- float: left;
- }
- .medium-up-7 > .column:nth-of-type(1n),.medium-up-7 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-7 > .column:nth-of-type(7n+1),.medium-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
- }
- .medium-up-7 > .column:last-child,.medium-up-7 > .columns:last-child {
- float: left;
- }
- .medium-up-8 > .column,.medium-up-8 > .columns {
- width: 12.5%;
- float: left;
- }
- .medium-up-8 > .column:nth-of-type(1n),.medium-up-8 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-8 > .column:nth-of-type(8n+1),.medium-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
- }
- .medium-up-8 > .column:last-child,.medium-up-8 > .columns:last-child {
- float: left;
- }
- .medium-collapse > .column,.medium-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
- }
- .medium-collapse .row {
- margin-left: 0;
- margin-right: 0;
- }
- .medium-uncollapse > .column,.medium-uncollapse > .columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
- .medium-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
- }
- .medium-uncentered,.medium-push-0,.medium-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .large-1 {
- width: 8.33333%;
- }
- .large-push-1 {
- position: relative;
- left: 8.33333%;
- }
- .large-pull-1 {
- position: relative;
- left: -8.33333%;
- }
- .large-offset-0 {
- margin-left: 0%;
- }
- .large-2 {
- width: 16.66667%;
- }
- .large-push-2 {
- position: relative;
- left: 16.66667%;
- }
- .large-pull-2 {
- position: relative;
- left: -16.66667%;
- }
- .large-offset-1 {
- margin-left: 8.33333%;
- }
- .large-3 {
- width: 25%;
- }
- .large-push-3 {
- position: relative;
- left: 25%;
- }
- .large-pull-3 {
- position: relative;
- left: -25%;
- }
- .large-offset-2 {
- margin-left: 16.66667%;
- }
- .large-4 {
- width: 33.33333%;
- }
- .large-push-4 {
- position: relative;
- left: 33.33333%;
- }
- .large-pull-4 {
- position: relative;
- left: -33.33333%;
- }
- .large-offset-3 {
- margin-left: 25%;
- }
- .large-5 {
- width: 41.66667%;
- }
- .large-push-5 {
- position: relative;
- left: 41.66667%;
- }
- .large-pull-5 {
- position: relative;
- left: -41.66667%;
- }
- .large-offset-4 {
- margin-left: 33.33333%;
- }
- .large-6 {
- width: 50%;
- }
- .large-push-6 {
- position: relative;
- left: 50%;
- }
- .large-pull-6 {
- position: relative;
- left: -50%;
- }
- .large-offset-5 {
- margin-left: 41.66667%;
- }
- .large-7 {
- width: 58.33333%;
- }
- .large-push-7 {
- position: relative;
- left: 58.33333%;
- }
- .large-pull-7 {
- position: relative;
- left: -58.33333%;
- }
- .large-offset-6 {
- margin-left: 50%;
- }
- .large-8 {
- width: 66.66667%;
- }
- .large-push-8 {
- position: relative;
- left: 66.66667%;
- }
- .large-pull-8 {
- position: relative;
- left: -66.66667%;
- }
- .large-offset-7 {
- margin-left: 58.33333%;
- }
- .large-9 {
- width: 75%;
- }
- .large-push-9 {
- position: relative;
- left: 75%;
- }
- .large-pull-9 {
- position: relative;
- left: -75%;
- }
- .large-offset-8 {
- margin-left: 66.66667%;
- }
- .large-10 {
- width: 83.33333%;
- }
- .large-push-10 {
- position: relative;
- left: 83.33333%;
- }
- .large-pull-10 {
- position: relative;
- left: -83.33333%;
- }
- .large-offset-9 {
- margin-left: 75%;
- }
- .large-11 {
- width: 91.66667%;
- }
- .large-push-11 {
- position: relative;
- left: 91.66667%;
- }
- .large-pull-11 {
- position: relative;
- left: -91.66667%;
- }
- .large-offset-10 {
- margin-left: 83.33333%;
- }
- .large-12 {
- width: 100%;
- }
- .large-offset-11 {
- margin-left: 91.66667%;
- }
- .large-up-1 > .column,.large-up-1 > .columns {
- width: 100%;
- float: left;
- }
- .large-up-1 > .column:nth-of-type(1n),.large-up-1 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-1 > .column:nth-of-type(1n+1),.large-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
- }
- .large-up-1 > .column:last-child,.large-up-1 > .columns:last-child {
- float: left;
- }
- .large-up-2 > .column,.large-up-2 > .columns {
- width: 50%;
- float: left;
- }
- .large-up-2 > .column:nth-of-type(1n),.large-up-2 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-2 > .column:nth-of-type(2n+1),.large-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
- }
- .large-up-2 > .column:last-child,.large-up-2 > .columns:last-child {
- float: left;
- }
- .large-up-3 > .column,.large-up-3 > .columns {
- width: 33.33333%;
- float: left;
- }
- .large-up-3 > .column:nth-of-type(1n),.large-up-3 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-3 > .column:nth-of-type(3n+1),.large-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
- }
- .large-up-3 > .column:last-child,.large-up-3 > .columns:last-child {
- float: left;
- }
- .large-up-4 > .column,.large-up-4 > .columns {
- width: 25%;
- float: left;
- }
- .large-up-4 > .column:nth-of-type(1n),.large-up-4 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-4 > .column:nth-of-type(4n+1),.large-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
- }
- .large-up-4 > .column:last-child,.large-up-4 > .columns:last-child {
- float: left;
- }
- .large-up-5 > .column,.large-up-5 > .columns {
- width: 20%;
- float: left;
- }
- .large-up-5 > .column:nth-of-type(1n),.large-up-5 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-5 > .column:nth-of-type(5n+1),.large-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
- }
- .large-up-5 > .column:last-child,.large-up-5 > .columns:last-child {
- float: left;
- }
- .large-up-6 > .column,.large-up-6 > .columns {
- width: 16.66667%;
- float: left;
- }
- .large-up-6 > .column:nth-of-type(1n),.large-up-6 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-6 > .column:nth-of-type(6n+1),.large-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
- }
- .large-up-6 > .column:last-child,.large-up-6 > .columns:last-child {
- float: left;
- }
- .large-up-7 > .column,.large-up-7 > .columns {
- width: 14.28571%;
- float: left;
- }
- .large-up-7 > .column:nth-of-type(1n),.large-up-7 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-7 > .column:nth-of-type(7n+1),.large-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
- }
- .large-up-7 > .column:last-child,.large-up-7 > .columns:last-child {
- float: left;
- }
- .large-up-8 > .column,.large-up-8 > .columns {
- width: 12.5%;
- float: left;
- }
- .large-up-8 > .column:nth-of-type(1n),.large-up-8 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-8 > .column:nth-of-type(8n+1),.large-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
- }
- .large-up-8 > .column:last-child,.large-up-8 > .columns:last-child {
- float: left;
- }
- .large-collapse > .column,.large-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
- }
- .large-collapse .row {
- margin-left: 0;
- margin-right: 0;
- }
- .large-uncollapse > .column,.large-uncollapse > .columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
- .large-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
- }
- .large-uncentered,.large-push-0,.large-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .xlarge-1 {
- width: 8.33333%;
- }
- .xlarge-push-1 {
- position: relative;
- left: 8.33333%;
- }
- .xlarge-pull-1 {
- position: relative;
- left: -8.33333%;
- }
- .xlarge-offset-0 {
- margin-left: 0%;
- }
- .xlarge-2 {
- width: 16.66667%;
- }
- .xlarge-push-2 {
- position: relative;
- left: 16.66667%;
- }
- .xlarge-pull-2 {
- position: relative;
- left: -16.66667%;
- }
- .xlarge-offset-1 {
- margin-left: 8.33333%;
- }
- .xlarge-3 {
- width: 25%;
- }
- .xlarge-push-3 {
- position: relative;
- left: 25%;
- }
- .xlarge-pull-3 {
- position: relative;
- left: -25%;
- }
- .xlarge-offset-2 {
- margin-left: 16.66667%;
- }
- .xlarge-4 {
- width: 33.33333%;
- }
- .xlarge-push-4 {
- position: relative;
- left: 33.33333%;
- }
- .xlarge-pull-4 {
- position: relative;
- left: -33.33333%;
- }
- .xlarge-offset-3 {
- margin-left: 25%;
- }
- .xlarge-5 {
- width: 41.66667%;
- }
- .xlarge-push-5 {
- position: relative;
- left: 41.66667%;
- }
- .xlarge-pull-5 {
- position: relative;
- left: -41.66667%;
- }
- .xlarge-offset-4 {
- margin-left: 33.33333%;
- }
- .xlarge-6 {
- width: 50%;
- }
- .xlarge-push-6 {
- position: relative;
- left: 50%;
- }
- .xlarge-pull-6 {
- position: relative;
- left: -50%;
- }
- .xlarge-offset-5 {
- margin-left: 41.66667%;
- }
- .xlarge-7 {
- width: 58.33333%;
- }
- .xlarge-push-7 {
- position: relative;
- left: 58.33333%;
- }
- .xlarge-pull-7 {
- position: relative;
- left: -58.33333%;
- }
- .xlarge-offset-6 {
- margin-left: 50%;
- }
- .xlarge-8 {
- width: 66.66667%;
- }
- .xlarge-push-8 {
- position: relative;
- left: 66.66667%;
- }
- .xlarge-pull-8 {
- position: relative;
- left: -66.66667%;
- }
- .xlarge-offset-7 {
- margin-left: 58.33333%;
- }
- .xlarge-9 {
- width: 75%;
- }
- .xlarge-push-9 {
- position: relative;
- left: 75%;
- }
- .xlarge-pull-9 {
- position: relative;
- left: -75%;
- }
- .xlarge-offset-8 {
- margin-left: 66.66667%;
- }
- .xlarge-10 {
- width: 83.33333%;
- }
- .xlarge-push-10 {
- position: relative;
- left: 83.33333%;
- }
- .xlarge-pull-10 {
- position: relative;
- left: -83.33333%;
- }
- .xlarge-offset-9 {
- margin-left: 75%;
- }
- .xlarge-11 {
- width: 91.66667%;
- }
- .xlarge-push-11 {
- position: relative;
- left: 91.66667%;
- }
- .xlarge-pull-11 {
- position: relative;
- left: -91.66667%;
- }
- .xlarge-offset-10 {
- margin-left: 83.33333%;
- }
- .xlarge-12 {
- width: 100%;
- }
- .xlarge-offset-11 {
- margin-left: 91.66667%;
- }
- .xlarge-up-1 > .column,.xlarge-up-1 > .columns {
- width: 100%;
- float: left;
- }
- .xlarge-up-1 > .column:nth-of-type(1n),.xlarge-up-1 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-1 > .column:nth-of-type(1n+1),.xlarge-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
- }
- .xlarge-up-1 > .column:last-child,.xlarge-up-1 > .columns:last-child {
- float: left;
- }
- .xlarge-up-2 > .column,.xlarge-up-2 > .columns {
- width: 50%;
- float: left;
- }
- .xlarge-up-2 > .column:nth-of-type(1n),.xlarge-up-2 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-2 > .column:nth-of-type(2n+1),.xlarge-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
- }
- .xlarge-up-2 > .column:last-child,.xlarge-up-2 > .columns:last-child {
- float: left;
- }
- .xlarge-up-3 > .column,.xlarge-up-3 > .columns {
- width: 33.33333%;
- float: left;
- }
- .xlarge-up-3 > .column:nth-of-type(1n),.xlarge-up-3 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-3 > .column:nth-of-type(3n+1),.xlarge-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
- }
- .xlarge-up-3 > .column:last-child,.xlarge-up-3 > .columns:last-child {
- float: left;
- }
- .xlarge-up-4 > .column,.xlarge-up-4 > .columns {
- width: 25%;
- float: left;
- }
- .xlarge-up-4 > .column:nth-of-type(1n),.xlarge-up-4 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-4 > .column:nth-of-type(4n+1),.xlarge-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
- }
- .xlarge-up-4 > .column:last-child,.xlarge-up-4 > .columns:last-child {
- float: left;
- }
- .xlarge-up-5 > .column,.xlarge-up-5 > .columns {
- width: 20%;
- float: left;
- }
- .xlarge-up-5 > .column:nth-of-type(1n),.xlarge-up-5 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-5 > .column:nth-of-type(5n+1),.xlarge-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
- }
- .xlarge-up-5 > .column:last-child,.xlarge-up-5 > .columns:last-child {
- float: left;
- }
- .xlarge-up-6 > .column,.xlarge-up-6 > .columns {
- width: 16.66667%;
- float: left;
- }
- .xlarge-up-6 > .column:nth-of-type(1n),.xlarge-up-6 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-6 > .column:nth-of-type(6n+1),.xlarge-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
- }
- .xlarge-up-6 > .column:last-child,.xlarge-up-6 > .columns:last-child {
- float: left;
- }
- .xlarge-up-7 > .column,.xlarge-up-7 > .columns {
- width: 14.28571%;
- float: left;
- }
- .xlarge-up-7 > .column:nth-of-type(1n),.xlarge-up-7 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-7 > .column:nth-of-type(7n+1),.xlarge-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
- }
- .xlarge-up-7 > .column:last-child,.xlarge-up-7 > .columns:last-child {
- float: left;
- }
- .xlarge-up-8 > .column,.xlarge-up-8 > .columns {
- width: 12.5%;
- float: left;
- }
- .xlarge-up-8 > .column:nth-of-type(1n),.xlarge-up-8 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-8 > .column:nth-of-type(8n+1),.xlarge-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
- }
- .xlarge-up-8 > .column:last-child,.xlarge-up-8 > .columns:last-child {
- float: left;
- }
- .xlarge-collapse > .column,.xlarge-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
- }
- .xlarge-collapse .row {
- margin-left: 0;
- margin-right: 0;
- }
- .xlarge-uncollapse > .column,.xlarge-uncollapse > .columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
- .xlarge-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
- }
- .xlarge-uncentered,.xlarge-push-0,.xlarge-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .xxlarge-1 {
- width: 8.33333%;
- }
- .xxlarge-push-1 {
- position: relative;
- left: 8.33333%;
- }
- .xxlarge-pull-1 {
- position: relative;
- left: -8.33333%;
- }
- .xxlarge-offset-0 {
- margin-left: 0%;
- }
- .xxlarge-2 {
- width: 16.66667%;
- }
- .xxlarge-push-2 {
- position: relative;
- left: 16.66667%;
- }
- .xxlarge-pull-2 {
- position: relative;
- left: -16.66667%;
- }
- .xxlarge-offset-1 {
- margin-left: 8.33333%;
- }
- .xxlarge-3 {
- width: 25%;
- }
- .xxlarge-push-3 {
- position: relative;
- left: 25%;
- }
- .xxlarge-pull-3 {
- position: relative;
- left: -25%;
- }
- .xxlarge-offset-2 {
- margin-left: 16.66667%;
- }
- .xxlarge-4 {
- width: 33.33333%;
- }
- .xxlarge-push-4 {
- position: relative;
- left: 33.33333%;
- }
- .xxlarge-pull-4 {
- position: relative;
- left: -33.33333%;
- }
- .xxlarge-offset-3 {
- margin-left: 25%;
- }
- .xxlarge-5 {
- width: 41.66667%;
- }
- .xxlarge-push-5 {
- position: relative;
- left: 41.66667%;
- }
- .xxlarge-pull-5 {
- position: relative;
- left: -41.66667%;
- }
- .xxlarge-offset-4 {
- margin-left: 33.33333%;
- }
- .xxlarge-6 {
- width: 50%;
- }
- .xxlarge-push-6 {
- position: relative;
- left: 50%;
- }
- .xxlarge-pull-6 {
- position: relative;
- left: -50%;
- }
- .xxlarge-offset-5 {
- margin-left: 41.66667%;
- }
- .xxlarge-7 {
- width: 58.33333%;
- }
- .xxlarge-push-7 {
- position: relative;
- left: 58.33333%;
- }
- .xxlarge-pull-7 {
- position: relative;
- left: -58.33333%;
- }
- .xxlarge-offset-6 {
- margin-left: 50%;
- }
- .xxlarge-8 {
- width: 66.66667%;
- }
- .xxlarge-push-8 {
- position: relative;
- left: 66.66667%;
- }
- .xxlarge-pull-8 {
- position: relative;
- left: -66.66667%;
- }
- .xxlarge-offset-7 {
- margin-left: 58.33333%;
- }
- .xxlarge-9 {
- width: 75%;
- }
- .xxlarge-push-9 {
- position: relative;
- left: 75%;
- }
- .xxlarge-pull-9 {
- position: relative;
- left: -75%;
- }
- .xxlarge-offset-8 {
- margin-left: 66.66667%;
- }
- .xxlarge-10 {
- width: 83.33333%;
- }
- .xxlarge-push-10 {
- position: relative;
- left: 83.33333%;
- }
- .xxlarge-pull-10 {
- position: relative;
- left: -83.33333%;
- }
- .xxlarge-offset-9 {
- margin-left: 75%;
- }
- .xxlarge-11 {
- width: 91.66667%;
- }
- .xxlarge-push-11 {
- position: relative;
- left: 91.66667%;
- }
- .xxlarge-pull-11 {
- position: relative;
- left: -91.66667%;
- }
- .xxlarge-offset-10 {
- margin-left: 83.33333%;
- }
- .xxlarge-12 {
- width: 100%;
- }
- .xxlarge-offset-11 {
- margin-left: 91.66667%;
- }
- .xxlarge-up-1 > .column,.xxlarge-up-1 > .columns {
- width: 100%;
- float: left;
- }
- .xxlarge-up-1 > .column:nth-of-type(1n),.xxlarge-up-1 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-1 > .column:nth-of-type(1n+1),.xxlarge-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
- }
- .xxlarge-up-1 > .column:last-child,.xxlarge-up-1 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-2 > .column,.xxlarge-up-2 > .columns {
- width: 50%;
- float: left;
- }
- .xxlarge-up-2 > .column:nth-of-type(1n),.xxlarge-up-2 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-2 > .column:nth-of-type(2n+1),.xxlarge-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
- }
- .xxlarge-up-2 > .column:last-child,.xxlarge-up-2 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-3 > .column,.xxlarge-up-3 > .columns {
- width: 33.33333%;
- float: left;
- }
- .xxlarge-up-3 > .column:nth-of-type(1n),.xxlarge-up-3 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-3 > .column:nth-of-type(3n+1),.xxlarge-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
- }
- .xxlarge-up-3 > .column:last-child,.xxlarge-up-3 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-4 > .column,.xxlarge-up-4 > .columns {
- width: 25%;
- float: left;
- }
- .xxlarge-up-4 > .column:nth-of-type(1n),.xxlarge-up-4 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-4 > .column:nth-of-type(4n+1),.xxlarge-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
- }
- .xxlarge-up-4 > .column:last-child,.xxlarge-up-4 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-5 > .column,.xxlarge-up-5 > .columns {
- width: 20%;
- float: left;
- }
- .xxlarge-up-5 > .column:nth-of-type(1n),.xxlarge-up-5 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-5 > .column:nth-of-type(5n+1),.xxlarge-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
- }
- .xxlarge-up-5 > .column:last-child,.xxlarge-up-5 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-6 > .column,.xxlarge-up-6 > .columns {
- width: 16.66667%;
- float: left;
- }
- .xxlarge-up-6 > .column:nth-of-type(1n),.xxlarge-up-6 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-6 > .column:nth-of-type(6n+1),.xxlarge-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
- }
- .xxlarge-up-6 > .column:last-child,.xxlarge-up-6 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-7 > .column,.xxlarge-up-7 > .columns {
- width: 14.28571%;
- float: left;
- }
- .xxlarge-up-7 > .column:nth-of-type(1n),.xxlarge-up-7 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-7 > .column:nth-of-type(7n+1),.xxlarge-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
- }
- .xxlarge-up-7 > .column:last-child,.xxlarge-up-7 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-8 > .column,.xxlarge-up-8 > .columns {
- width: 12.5%;
- float: left;
- }
- .xxlarge-up-8 > .column:nth-of-type(1n),.xxlarge-up-8 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-8 > .column:nth-of-type(8n+1),.xxlarge-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
- }
- .xxlarge-up-8 > .column:last-child,.xxlarge-up-8 > .columns:last-child {
- float: left;
- }
- .xxlarge-collapse > .column,.xxlarge-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
- }
- .xxlarge-collapse .row {
- margin-left: 0;
- margin-right: 0;
- }
- .xxlarge-uncollapse > .column,.xxlarge-uncollapse > .columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
- .xxlarge-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
- }
- .xxlarge-uncentered,.xxlarge-push-0,.xxlarge-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
- }
-}
-
-div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td {
- margin: 0;
- padding: 0;
-}
-p {
- font-size: inherit;
- line-height: 1.6;
- margin-bottom: 0;
- text-rendering: optimizeLegibility;
-}
-.off-canvas-content div {
- line-height: 1.6;
-}
-em,i {
- font-style: italic;
- line-height: inherit;
-}
-strong,b {
- font-weight: bold;
- line-height: inherit;
-}
-h1,h2,h3,h4,h5,h6 {
- font-family: "Hind Siliguri", Helvetica, Roboto, Arial, sans-serif;
- font-weight: 500;
- font-style: normal;
- color: #7cad2a;
- text-rendering: optimizeLegibility;
- margin-top: 0;
- margin-bottom: 0.5rem;
- line-height: 1.4;
-}
-h1 small,h2 small,h3 small,h4 small,h5 small,h6 small {
- color: #cacaca;
- line-height: 0;
-}
-h2 {
- font-size: 1.25rem;
-}
-h3 {
- font-size: 1.1875rem;
-}
-h4 {
- font-size: 1.125rem;
-}
-h5 {
- font-size: 1.0625rem;
-}
-h6 {
- font-size: 1rem;
-}
-
-a:hover,a:focus {
- color: #779000;
- text-decoration: underline;
-}
-a img {
- border: 0;
-}
-ul,ol,dl {
- line-height: 1.6;
- margin-bottom: 0;
- list-style-position: outside;
-}
-li {
- font-size: inherit;
-}
-ul {
- list-style-type: disc;
- margin-left: 1.25rem;
-}
-ol {
- margin-left: 1.25rem;
-}
-ul ul,ol ul,ul ol,ol ol {
- margin-left: 1.25rem;
- margin-bottom: 0;
-}
-dl {
- margin-bottom: 1rem;
-}
-dl dt {
- margin-bottom: 0.3rem;
- font-weight: bold;
-}
-blockquote {
- margin: 0 0 0;
- padding: 0.5625rem 1.25rem 0 1.1875rem;
- border-left: 1px solid #cacaca;
-}
-blockquote,blockquote p {
- line-height: 1.6;
- color: #414042;
-}
-cite {
- display: block;
- font-size: 0.8125rem;
- color: #414042;
-}
-cite:before {
- content: '\2014 \0020';
-}
-abbr {
- color: #414042;
- cursor: help;
- border-bottom: 1px dotted #0a0a0a;
-}
-code {
- font-family: Consolas, "Liberation Mono", Courier, monospace;
- font-weight: 300;
- color: #0a0a0a;
- background-color: #e6e6e6;
- border: 1px solid #cacaca;
- padding: 0.125rem 0.3125rem 0.0625rem;
-}
-kbd {
- padding: 0.125rem 0.25rem 0;
- margin: 0;
- background-color: #e6e6e6;
- color: #0a0a0a;
- font-family: Consolas, "Liberation Mono", Courier, monospace;
-}
-.subheader {
- margin-top: 0.2rem;
- margin-bottom: 0.5rem;
- font-weight: 300;
- line-height: 1.4;
- color: #414042;
-}
-.lead {
- font-size: 125%;
- line-height: 1.6;
-}
-.stat {
- font-size: 2.5rem;
- line-height: 1;
-}
-p + .stat {
- margin-top: -1rem;
-}
-.no-bullet {
- margin-left: 0;
- list-style: none;
-}
-.text-left {
- text-align: left;
-}
-.text-right {
- text-align: right;
-}
-.text-center {
- text-align: center;
-}
-.text-justify {
- text-align: justify;
-}
-
-@media screen and (min-width: 40em) {
-
- .medium-text-left {
- text-align: left;
- }
- .medium-text-right {
- text-align: right;
- }
- .medium-text-center {
- text-align: center;
- }
- .medium-text-justify {
- text-align: justify;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .large-text-left {
- text-align: left;
- }
- .large-text-right {
- text-align: right;
- }
- .large-text-center {
- text-align: center;
- }
- .large-text-justify {
- text-align: justify;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .xlarge-text-left {
- text-align: left;
- }
- .xlarge-text-right {
- text-align: right;
- }
- .xlarge-text-center {
- text-align: center;
- }
- .xlarge-text-justify {
- text-align: justify;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .xxlarge-text-left {
- text-align: left;
- }
- .xxlarge-text-right {
- text-align: right;
- }
- .xxlarge-text-center {
- text-align: center;
- }
- .xxlarge-text-justify {
- text-align: justify;
- }
-}
-
-.show-for-print {
- display: none !important;
-}
-
-@media print {
-
- * {
- background: transparent !important;
- color: black !important;
- box-shadow: none !important;
- text-shadow: none !important;
- }
- .show-for-print {
- display: block !important;
- }
- .hide-for-print {
- display: none !important;
- }
- table.show-for-print {
- display: table !important;
- }
- thead.show-for-print {
- display: table-header-group !important;
- }
- tbody.show-for-print {
- display: table-row-group !important;
- }
- tr.show-for-print {
- display: table-row !important;
- }
- td.show-for-print {
- display: table-cell !important;
- }
- th.show-for-print {
- display: table-cell !important;
- }
- a,a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- .ir a:after,a[href^='javascript:']:after,a[href^='#']:after {
- content: '';
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- pre,blockquote {
- border: 1px solid #414042;
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- @page {
- margin: 0.5cm;
- }
- p,h2,h3 {
- orphans: 3;
- widows: 3;
- }
- h2,h3 {
- page-break-after: avoid;
- }
-}
-
-.button {
- display: inline-block;
- text-align: center;
- line-height: 1;
- cursor: pointer;
- -webkit-appearance: none;
- transition: background-color 0.25s ease-out, color 0.25s ease-out;
- vertical-align: middle;
- border: 1px solid transparent;
- border-radius: 7px;
- padding: 0.65em 1.25em;
- margin: 0 0 1rem 0;
- font-size: 0.9rem;
- background-color: #2bc8e8;
- color: #fefefe;
-}
-[data-whatinput='mouse'] .button {
- outline: 0;
-}
-.button:hover,.button:focus {
- background-color: #17b3d3;
- color: #fefefe;
-}
-.button.tiny {
- font-size: 0.6rem;
-}
-.button.small {
- font-size: 0.75rem;
-}
-.button.large {
- font-size: 1.25rem;
-}
-.button.expanded {
- display: block;
- width: 100%;
- margin-left: 0;
- margin-right: 0;
-}
-.button.primary {
- background-color: #2bc8e8;
- color: #fefefe;
-}
-.button.primary:hover,.button.primary:focus {
- background-color: #16a9c6;
- color: #fefefe;
-}
-.button.secondary {
- background-color: #777;
- color: #fefefe;
-}
-.button.secondary:hover,.button.secondary:focus {
- background-color: #5f5f5f;
- color: #fefefe;
-}
-.button.success {
- background-color: #7cad2a;
- color: #fefefe;
-}
-.button.success:hover,.button.success:focus {
- background-color: #6e8600;
- color: #fefefe;
-}
-.button.warning {
- background-color: #ffc339;
- color: #0a0a0a;
-}
-.button.warning:hover,.button.warning:focus {
- background-color: #faae00;
- color: #0a0a0a;
-}
-.button.alert {
- background-color: #ec5840;
- color: #fefefe;
-}
-.button.alert:hover,.button.alert:focus {
- background-color: #da3116;
- color: #fefefe;
-}
-.button.hollow {
- border: 1px solid #2bc8e8;
- color: #2bc8e8;
-}
-.button.hollow,.button.hollow:hover,.button.hollow:focus {
- background-color: transparent;
-}
-.button.hollow:hover,.button.hollow:focus {
- border-color: #0d697c;
- color: #0d697c;
-}
-.button.hollow.primary {
- border: 1px solid #2bc8e8;
- color: #2bc8e8;
-}
-.button.hollow.primary:hover,.button.hollow.primary:focus {
- border-color: #0d697c;
- color: #0d697c;
-}
-.button.hollow.secondary {
- border: 1px solid #777;
- color: #777;
-}
-.button.hollow.secondary:hover,.button.hollow.secondary:focus {
- border-color: #3c3c3c;
- color: #3c3c3c;
-}
-.button.hollow.success {
- border: 1px solid #7cad2a;
- color: #7cad2a;
-}
-.button.hollow.success:hover,.button.hollow.success:focus {
- border-color: #455400;
- color: #455400;
-}
-.button.hollow.warning {
- border: 1px solid #ffc339;
- color: #ffc339;
-}
-.button.hollow.warning:hover,.button.hollow.warning:focus {
- border-color: #9c6d00;
- color: #9c6d00;
-}
-.button.hollow.alert {
- border: 1px solid #ec5840;
- color: #ec5840;
-}
-.button.hollow.alert:hover,.button.hollow.alert:focus {
- border-color: #881f0e;
- color: #881f0e;
-}
-.button.disabled,.button[disabled] {
- opacity: 0.25;
- cursor: not-allowed;
-}
-.button.dropdown::after {
- content: '';
- display: inline-block;
- width: 0;
- height: 0;
- border: inset 0.4em;
- border-color: #fefefe transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- position: relative;
- top: 0.4em;
- float: right;
- margin-left: 1.25em;
-}
-.button.arrow-only::after {
- margin-left: 0;
- float: none;
- top: -0.1em;
-}
-[type='text'],[type='password'],[type='date'],[type='datetime'],[type='datetime-local'],[type='month'],[type='week'],[type='email'],[type='number'],[type='search'],[type='tel'],[type='time'],[type='url'],[type='color'],textarea {
- display: block;
- box-sizing: border-box;
- width: 100%;
- height: 2.4375rem;
- padding: 0.5rem;
- border: 1px solid #7cad2a;
- margin: 0 0 1rem;
- font-family: inherit;
- font-size: 1rem;
- color: #414042;
- background-color: #fefefe;
- box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1);
- border-radius: 7px;
- transition: box-shadow 0.5s, border-color 0.25s ease-in-out;
- -webkit-appearance: none;
- -moz-appearance: none;
-}
-[type='text']:focus,[type='password']:focus,[type='date']:focus,[type='datetime']:focus,[type='datetime-local']:focus,[type='month']:focus,[type='week']:focus,[type='email']:focus,[type='number']:focus,[type='search']:focus,[type='tel']:focus,[type='time']:focus,[type='url']:focus,[type='color']:focus,textarea:focus {
- border: 2px solid #7cad2a;
- background-color: #fefefe;
- outline: none;
- box-shadow: 0 0 5px #414042;
- transition: box-shadow 0.5s, border-color 0.25s ease-in-out;
-}
-textarea[rows] {
- height: auto;
-}
-input::-webkit-input-placeholder,textarea::-webkit-input-placeholder {
- color: #9F9F9F;
-}
-input::-moz-placeholder,textarea::-moz-placeholder {
- color: #9F9F9F;
-}
-input:-ms-input-placeholder,textarea:-ms-input-placeholder {
- color: #9F9F9F;
-}
-input::placeholder,textarea::placeholder {
- color: #9F9F9F;
-}
-input:disabled,input[readonly],textarea:disabled,textarea[readonly] {
- background-color: #e6e6e6;
- cursor: default;
-}
-[type='submit'],[type='button'] {
- border-radius: 7px;
- -webkit-appearance: none;
- -moz-appearance: none;
-}
-input[type='search'] {
- box-sizing: border-box;
-}
-[type='file'],[type='checkbox'],[type='radio'] {
- margin: 0 0 1rem;
-}
-[type='checkbox'] + label,[type='radio'] + label {
- display: inline-block;
- margin-left: 0.5rem;
- margin-right: 1rem;
- margin-bottom: 0;
- vertical-align: baseline;
-}
-[type='checkbox'] + label[for],[type='radio'] + label[for] {
- cursor: pointer;
-}
-label > [type='checkbox'],label > [type='radio'] {
- margin-right: 0.5rem;
-}
-[type='file'] {
- width: 100%;
-}
-label {
- display: block;
- margin: 0;
- font-size: 0.875rem;
- font-weight: 300;
- line-height: 1.8;
- color: #0a0a0a;
-}
-label.middle {
- margin: 0 0 1rem;
- padding: 0.625rem 0;
-}
-.help-text {
- margin-top: -0.5rem;
- font-size: 0.8125rem;
- font-style: italic;
- color: #0a0a0a;
-}
-.input-group {
- display: table;
- width: 100%;
- margin-bottom: 1rem;
-}
-.input-group > :first-child {
- border-radius: 0 0 0 0;
-}
-.input-group > :last-child > * {
- border-radius: 0 0 0 0;
-}
-.input-group-label,.input-group-field,.input-group-button {
- margin: 0;
- display: table-cell;
- vertical-align: middle;
-}
-.input-group-label {
- text-align: center;
- padding: 0 1rem;
- background: #e6e6e6;
- color: #0a0a0a;
- border: 1px solid #cacaca;
- white-space: nowrap;
- width: 1%;
- height: 100%;
-}
-.input-group-label:first-child {
- border-right: 0;
-}
-.input-group-label:last-child {
- border-left: 0;
-}
-.input-group-field {
- border-radius: 0;
- height: 2.5rem;
-}
-.input-group-button {
- padding-top: 0;
- padding-bottom: 0;
- text-align: center;
- height: 100%;
- width: 1%;
-}
-.input-group-button a,.input-group-button input,.input-group-button button {
- margin: 0;
-}
-.input-group .input-group-button {
- display: table-cell;
-}
-fieldset {
- border: 0;
- padding: 0;
- margin: 0;
-}
-.fieldset {
- border: 1px solid #cacaca;
- padding: 1.25rem;
- margin: 1.125rem 0;
-}
-.fieldset legend {
- background: #fefefe;
- padding: 0 0.1875rem;
- margin: 0;
- margin-left: -0.1875rem;
-}
-
-@media screen and (min-width: 0\0) {
-
- select {
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==");
- }
-}
-
-select:disabled {
- background-color: #e6e6e6;
- cursor: default;
-}
-select::-ms-expand {
- display: none;
-}
-select[multiple] {
- height: auto;
- background-image: none;
-}
-.is-invalid-input:not(:focus) {
- background-color: rgba(236, 88, 64, 0.1);
- border-color: #ec5840;
-}
-.is-invalid-label {
- color: #ec5840;
-}
-.form-error {
- display: none;
- margin-top: -0.5rem;
- margin-bottom: 1rem;
- font-size: 0.75rem;
- font-weight: bold;
- color: #ec5840;
-}
-.form-error.is-visible {
- display: block;
-}
-.accordion {
- list-style-type: none;
- background: #fefefe;
- border: 1px solid #e6e6e6;
- border-bottom: 0;
- border-radius: 0;
- margin-left: 0;
-}
-.accordion-title {
- display: block;
- padding: 1.25rem 1rem;
- line-height: 1;
- font-size: 0.75rem;
- color: #2bc8e8;
- position: relative;
- border-bottom: 1px solid #e6e6e6;
-}
-.accordion-title:hover,.accordion-title:focus {
- background-color: #e6e6e6;
-}
-.accordion-title::before {
- content: '+';
- position: absolute;
- right: 1rem;
- top: 50%;
- margin-top: -0.5rem;
-}
-.is-active > .accordion-title::before {
- content: '–';
-}
-.accordion-content {
- padding: 1rem;
- display: none;
- border-bottom: 1px solid #e6e6e6;
- background-color: #fefefe;
-}
-.is-accordion-submenu-parent > a {
- position: relative;
-}
-.is-accordion-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- border-color: #2bc8e8 transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- position: absolute;
- top: 50%;
- margin-top: -4px;
- right: 1rem;
-}
-.is-accordion-submenu-parent[aria-expanded='true'] > a::after {
- -webkit-transform-origin: 50% 50%;
- -ms-transform-origin: 50% 50%;
- transform-origin: 50% 50%;
- -webkit-transform: scaleY(-1);
- -ms-transform: scaleY(-1);
- transform: scaleY(-1);
-}
-.badge {
- display: inline-block;
- padding: 0.3em;
- min-width: 2.1em;
- font-size: 0.6rem;
- text-align: center;
- border-radius: 50%;
- background: #2bc8e8;
- color: #fefefe;
-}
-.badge.secondary {
- background: #777;
- color: #fefefe;
-}
-.badge.success {
- background: #7cad2a;
- color: #fefefe;
-}
-.badge.warning {
- background: #ffc339;
- color: #0a0a0a;
-}
-.badge.alert {
- background: #ec5840;
- color: #fefefe;
-}
-.breadcrumbs {
- list-style: none;
- margin: 0 0 1rem 0;
-}
-.breadcrumbs::before,.breadcrumbs::after {
- content: ' ';
- display: table;
-}
-.breadcrumbs::after {
- clear: both;
-}
-.breadcrumbs li {
- float: left;
- color: #0a0a0a;
- font-size: 0.6875rem;
- cursor: default;
- text-transform: uppercase;
-}
-.breadcrumbs li:not(:last-child)::after {
- color: #cacaca;
- content: "/";
- margin: 0 0.75rem;
- position: relative;
- top: 1px;
- opacity: 1;
-}
-.breadcrumbs a {
- color: #2bc8e8;
-}
-.breadcrumbs a:hover {
- text-decoration: underline;
-}
-.breadcrumbs .disabled {
- color: #cacaca;
- cursor: not-allowed;
-}
-.button-group {
- margin-bottom: 1rem;
- font-size: 0;
-}
-.button-group::before,.button-group::after {
- content: ' ';
- display: table;
-}
-.button-group::after {
- clear: both;
-}
-.button-group .button {
- margin: 0;
- font-size: 0.9rem;
-}
-.button-group .button:not(:last-child) {
- margin-right: 1px;
-}
-.button-group.tiny .button {
- font-size: 0.6rem;
-}
-.button-group.small .button {
- font-size: 0.75rem;
-}
-.button-group.large .button {
- font-size: 1.25rem;
-}
-.button-group.expanded {
- margin-right: -1px;
-}
-.button-group.expanded::before,.button-group.expanded::after {
- display: none;
-}
-.button-group.expanded .button:first-child:nth-last-child(2),.button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button {
- display: inline-block;
- width: calc(50% - 1px);
- margin-right: 1px;
-}
-.button-group.expanded .button:first-child:nth-last-child(3),.button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button {
- display: inline-block;
- width: calc(33.33333% - 1px);
- margin-right: 1px;
-}
-.button-group.expanded .button:first-child:nth-last-child(4),.button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button {
- display: inline-block;
- width: calc(25% - 1px);
- margin-right: 1px;
-}
-.button-group.expanded .button:first-child:nth-last-child(5),.button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button {
- display: inline-block;
- width: calc(20% - 1px);
- margin-right: 1px;
-}
-.button-group.expanded .button:first-child:nth-last-child(6),.button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button {
- display: inline-block;
- width: calc(16.66667% - 1px);
- margin-right: 1px;
-}
-.button-group.primary .button {
- background-color: #2bc8e8;
- color: #fefefe;
-}
-.button-group.primary .button:hover,.button-group.primary .button:focus {
- background-color: #16a9c6;
- color: #fefefe;
-}
-.button-group.secondary .button {
- background-color: #777;
- color: #fefefe;
-}
-.button-group.secondary .button:hover,.button-group.secondary .button:focus {
- background-color: #5f5f5f;
- color: #fefefe;
-}
-.button-group.success .button {
- background-color: #7cad2a;
- color: #fefefe;
-}
-.button-group.success .button:hover,.button-group.success .button:focus {
- background-color: #6e8600;
- color: #fefefe;
-}
-.button-group.warning .button {
- background-color: #ffc339;
- color: #0a0a0a;
-}
-.button-group.warning .button:hover,.button-group.warning .button:focus {
- background-color: #faae00;
- color: #0a0a0a;
-}
-.button-group.alert .button {
- background-color: #ec5840;
- color: #fefefe;
-}
-.button-group.alert .button:hover,.button-group.alert .button:focus {
- background-color: #da3116;
- color: #fefefe;
-}
-.button-group.stacked .button,.button-group.stacked-for-small .button,.button-group.stacked-for-medium .button {
- width: 100%;
- border-right: 1px solid transparent;
-}
-.button-group.stacked .button:not(:last-child),.button-group.stacked-for-small .button:not(:last-child),.button-group.stacked-for-medium .button:not(:last-child) {
- border-bottom: 1px solid #fefefe;
-}
-
-@media screen and (min-width: 40em) {
-
- .button-group.stacked-for-small .button {
- width: auto;
- }
- .button-group.stacked-for-small .button:not(:last-child) {
- margin-right: 1px;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .button-group.stacked-for-medium .button {
- width: auto;
- }
- .button-group.stacked-for-medium .button:not(:last-child) {
- margin-right: 1px;
- }
-}
-
-
-@media screen and (max-width: 39.9375em) {
-
- .button-group.stacked-for-small.expanded {
- display: block;
- }
- .button-group.stacked-for-small.expanded .button {
- display: block;
- margin-right: 0;
- }
-}
-
-.callout {
- margin: 0 0 1rem 0;
- padding: 1rem;
- border: 1px solid rgba(10, 10, 10, 0.25);
- border-radius: 0;
- position: relative;
- color: #414042;
- background-color: white;
-}
-.callout > :first-child {
- margin-top: 0;
-}
-.callout > :last-child {
- margin-bottom: 0;
-}
-.callout.primary {
- background-color: #dff7fc;
-}
-.callout.secondary {
- background-color: #ebebeb;
-}
-.callout.success {
- background-color: #f6ffcc;
-}
-.callout.warning {
- background-color: #fff6e1;
-}
-.callout.alert {
- background-color: #fce6e2;
-}
-.callout.small {
- padding-top: 0.5rem;
- padding-right: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 0.5rem;
-}
-.callout.large {
- padding-top: 3rem;
- padding-right: 3rem;
- padding-bottom: 3rem;
- padding-left: 3rem;
-}
-.close-button {
- position: absolute;
- color: #414042;
- right: 1rem;
- top: 0.5rem;
- font-size: 2em;
- line-height: 1;
- cursor: pointer;
-}
-[data-whatinput='mouse'] .close-button {
- outline: 0;
-}
-.close-button:hover,.close-button:focus {
- color: #0a0a0a;
-}
-.menu {
- margin: 0;
- list-style-type: none;
-}
-.menu > li {
- display: table-cell;
- vertical-align: middle;
-}
-[data-whatinput='mouse'] .menu > li {
- outline: 0;
-}
-.menu > li > a {
- display: block;
- padding: 0.7rem 1rem;
- line-height: 1;
-}
-.menu input,.menu a,.menu button {
- margin-bottom: 0;
-}
-.menu > li > a img,.menu > li > a i {
- vertical-align: middle;
- margin-right: 0.25rem;
- display: inline-block;
-}
-.menu > li > a i + span,.menu > li > a img + span {
- vertical-align: middle;
-}
-.menu.vertical > li {
- display: block;
-}
-
-@media screen and (min-width: 40em) {
-
- .menu.medium-horizontal > li {
- display: table-cell;
- }
- .menu.medium-vertical > li {
- display: block;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .menu.large-horizontal > li {
- display: table-cell;
- }
- .menu.large-vertical > li {
- display: block;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .menu.xlarge-horizontal > li {
- display: table-cell;
- }
- .menu.xlarge-vertical > li {
- display: block;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .menu.xxlarge-horizontal > li {
- display: table-cell;
- }
- .menu.xxlarge-vertical > li {
- display: block;
- }
-}
-
-.menu.simple li {
- line-height: 1;
- display: inline-block;
- margin-right: 1rem;
-}
-.menu.simple a {
- padding: 0;
-}
-.menu.align-right::before,.menu.align-right::after {
- content: ' ';
- display: table;
-}
-.menu.align-right::after {
- clear: both;
-}
-.menu.align-right > li {
- float: right;
-}
-.menu.expanded {
- width: 100%;
- display: table;
- table-layout: fixed;
-}
-.menu.expanded > li:first-child:last-child {
- width: 100%;
-}
-.menu.icon-top > li > a {
- text-align: center;
-}
-.menu.icon-top > li > a img,.menu.icon-top > li > a i {
- display: block;
- margin: 0 auto 0.25rem;
-}
-.menu.nested {
- margin-left: 1rem;
-}
-.menu .active > a {
- color: #fefefe;
- background: inherit;
-}
-.menu-text {
- font-weight: bold;
- color: inherit;
- line-height: 1;
- padding-top: 0;
- padding-bottom: 0;
- padding: 0.7rem 1rem;
-}
-.menu-centered {
- text-align: center;
-}
-.menu-centered > .menu {
- display: inline-block;
-}
-.no-js [data-responsive-menu] ul {
- display: none;
-}
-.menu-icon {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- cursor: pointer;
- width: 20px;
- height: 16px;
-}
-.menu-icon::after {
- content: '';
- position: absolute;
- display: block;
- width: 100%;
- height: 2px;
- background: #fefefe;
- top: 0;
- left: 0;
- box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe;
-}
-.menu-icon:hover::after {
- background: #cacaca;
- box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca;
-}
-.menu-icon.dark {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- cursor: pointer;
- width: 20px;
- height: 16px;
-}
-.menu-icon.dark::after {
- content: '';
- position: absolute;
- display: block;
- width: 100%;
- height: 2px;
- background: #0a0a0a;
- top: 0;
- left: 0;
- box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a;
-}
-.menu-icon.dark:hover::after {
- background: #414042;
- box-shadow: 0 7px 0 #414042, 0 14px 0 #414042;
-}
-.is-drilldown {
- position: relative;
- overflow: hidden;
-}
-.is-drilldown li {
- display: block !important;
-}
-.is-drilldown-submenu {
- position: absolute;
- top: 0;
- left: 100%;
- z-index: -1;
- height: 100%;
- width: 100%;
- background: #fefefe;
- transition: transform 0.15s linear, -webkit-transform 0.15s linear;
-}
-.is-drilldown-submenu.is-active {
- z-index: 1;
- display: block;
- -webkit-transform: translateX(-100%);
- -ms-transform: translateX(-100%);
- transform: translateX(-100%);
-}
-.is-drilldown-submenu.is-closing {
- -webkit-transform: translateX(100%);
- -ms-transform: translateX(100%);
- transform: translateX(100%);
-}
-.is-drilldown-submenu-parent > a {
- position: relative;
-}
-.is-drilldown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 6px;
- border-color: transparent transparent transparent #2bc8e8;
- border-left-style: solid;
- border-right-width: 0;
- position: absolute;
- top: 50%;
- margin-top: -6px;
- right: 1rem;
-}
-.js-drilldown-back > a::before {
- content: '';
- display: inline-block;
- width: 0;
- height: 0;
- border: inset 6px;
- border-color: transparent #2bc8e8 transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- vertical-align: middle;
- margin-right: 0.75rem;
-}
-.dropdown-pane {
- background-color: #fefefe;
- border: 1px solid #cacaca;
- border-radius: 0;
- display: block;
- font-size: 1rem;
- padding: 1rem;
- position: absolute;
- visibility: hidden;
- width: 300px;
- z-index: 10;
-}
-.dropdown-pane.is-open {
- visibility: visible;
-}
-.dropdown-pane.tiny {
- width: 100px;
-}
-.dropdown-pane.small {
- width: 200px;
-}
-.dropdown-pane.large {
- width: 400px;
-}
-.dropdown.menu > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
-}
-.dropdown.menu > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
-}
-.dropdown.menu > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
-}
-.dropdown.menu > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
-}
-[data-whatinput='mouse'] .dropdown.menu a {
- outline: 0;
-}
-.no-js .dropdown.menu ul {
- display: none;
-}
-.dropdown.menu.vertical > li .is-dropdown-submenu {
- top: 0;
-}
-.dropdown.menu.vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
-}
-.dropdown.menu.vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
-}
-.dropdown.menu.vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
-}
-.dropdown.menu.vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
-}
-.dropdown.menu.vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
-}
-
-@media screen and (min-width: 40em) {
-
- .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
- }
- .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
- }
- .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
- }
- .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
- }
- .dropdown.menu.medium-vertical > li .is-dropdown-submenu {
- top: 0;
- }
- .dropdown.menu.medium-vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
- }
- .dropdown.menu.medium-vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
- }
- .dropdown.menu.medium-vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
- }
- .dropdown.menu.medium-vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- }
- .dropdown.menu.medium-vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
- }
- .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
- }
- .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
- }
- .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
- }
- .dropdown.menu.large-vertical > li .is-dropdown-submenu {
- top: 0;
- }
- .dropdown.menu.large-vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
- }
- .dropdown.menu.large-vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
- }
- .dropdown.menu.large-vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
- }
- .dropdown.menu.large-vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- }
- .dropdown.menu.large-vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .dropdown.menu.xlarge-horizontal > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
- }
- .dropdown.menu.xlarge-horizontal > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
- }
- .dropdown.menu.xlarge-horizontal > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
- }
- .dropdown.menu.xlarge-horizontal > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
- }
- .dropdown.menu.xlarge-vertical > li .is-dropdown-submenu {
- top: 0;
- }
- .dropdown.menu.xlarge-vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
- }
- .dropdown.menu.xlarge-vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
- }
- .dropdown.menu.xlarge-vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
- }
- .dropdown.menu.xlarge-vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- }
- .dropdown.menu.xlarge-vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .dropdown.menu.xxlarge-horizontal > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
- }
- .dropdown.menu.xxlarge-horizontal > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
- }
- .dropdown.menu.xxlarge-horizontal > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
- }
- .dropdown.menu.xxlarge-horizontal > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
- }
- .dropdown.menu.xxlarge-vertical > li .is-dropdown-submenu {
- top: 0;
- }
- .dropdown.menu.xxlarge-vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
- }
- .dropdown.menu.xxlarge-vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
- }
- .dropdown.menu.xxlarge-vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
- }
- .dropdown.menu.xxlarge-vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- }
- .dropdown.menu.xxlarge-vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
- }
-}
-
-.dropdown.menu.align-right .is-dropdown-submenu.first-sub {
- top: 100%;
- left: auto;
- right: 0;
-}
-.is-dropdown-menu.vertical {
- width: 100px;
-}
-.is-dropdown-menu.vertical.align-right {
- float: right;
-}
-.is-dropdown-submenu-parent {
- position: relative;
-}
-.is-dropdown-submenu-parent a::after {
- position: absolute;
- top: 50%;
- right: 5px;
- margin-top: -2px;
-}
-.is-dropdown-submenu-parent.opens-inner .is-dropdown-submenu {
- top: 100%;
-}
-.is-dropdown-submenu-parent.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
-}
-.is-dropdown-submenu {
- display: none;
- position: absolute;
- top: 0;
- left: 100%;
- min-width: 200px;
- z-index: 1;
- background: #fefefe;
- border: 1px solid #cacaca;
-}
-.is-dropdown-submenu .is-dropdown-submenu-parent > a::after {
- right: 14px;
- margin-top: -3px;
-}
-.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
-}
-.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
-}
-.is-dropdown-submenu .is-dropdown-submenu {
- margin-top: -1px;
-}
-.is-dropdown-submenu > li {
- width: 100%;
-}
-.is-dropdown-submenu:not(.js-dropdown-nohover) > .is-dropdown-submenu-parent:hover > .is-dropdown-submenu,.is-dropdown-submenu.js-dropdown-active {
- display: block;
-}
-.flex-video {
- position: relative;
- height: 0;
- padding-bottom: 75%;
- margin-bottom: 1rem;
- overflow: hidden;
-}
-.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-.flex-video.widescreen {
- padding-bottom: 56.25%;
-}
-.flex-video.vimeo {
- padding-top: 0;
-}
-.label {
- display: inline-block;
- padding: 0.33333rem 0.5rem;
- font-size: 0.8rem;
- line-height: 1;
- white-space: nowrap;
- cursor: default;
- border-radius: 0;
- background: #2bc8e8;
- color: #fefefe;
-}
-.label.secondary {
- background: #777;
- color: #fefefe;
-}
-.label.success {
- background: #7cad2a;
- color: #fefefe;
-}
-.label.warning {
- background: #ffc339;
- color: #0a0a0a;
-}
-.label.alert {
- background: #ec5840;
- color: #fefefe;
-}
-.media-object {
- margin-bottom: 1rem;
- display: block;
-}
-.media-object img {
- max-width: none;
-}
-
-@media screen and (max-width: 39.9375em) {
-
- .media-object.stack-for-small .media-object-section {
- padding: 0;
- padding-bottom: 1rem;
- display: block;
- }
- .media-object.stack-for-small .media-object-section img {
- width: 100%;
- }
-}
-
-.media-object-section {
- display: table-cell;
- vertical-align: top;
-}
-.media-object-section:first-child {
- padding-right: 1rem;
-}
-.media-object-section:last-child:not(:nth-child(2)) {
- padding-left: 1rem;
-}
-.media-object-section.middle {
- vertical-align: middle;
-}
-.media-object-section.bottom {
- vertical-align: bottom;
-}
-html,body {
- height: 100%;
-}
-.off-canvas-wrapper {
- width: 100%;
- overflow-x: hidden;
- position: relative;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-overflow-scrolling: auto;
- overflow: hidden;
-}
-.off-canvas-wrapper-inner {
- position: relative;
- width: 100%;
- transition: transform 0.5s ease, -webkit-transform 0.5s ease;
-}
-.off-canvas-wrapper-inner::before,.off-canvas-wrapper-inner::after {
- content: ' ';
- display: table;
-}
-.off-canvas-wrapper-inner::after {
- clear: both;
-}
-.off-canvas-content,.off-canvas-content {
- min-height: 100%;
- background: #fefefe;
- transition: transform 0.5s ease, -webkit-transform 0.5s ease;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- z-index: 1;
- padding-bottom: 0.1px;
- box-shadow: 0 0 10px rgba(10, 10, 10, 0.5);
-}
-.js-off-canvas-exit {
- display: none;
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: rgba(254, 254, 254, 0.25);
- cursor: pointer;
- transition: background 0.5s ease;
-}
-.off-canvas {
- position: fixed;
- background: #7cad2a;
- z-index: 50;
- max-height: 100%;
- overflow-y: auto;
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0);
- min-height: 100%;
-}
-[data-whatinput='mouse'] .off-canvas {
- outline: 0;
-}
-.off-canvas.position-left {
- left: -250px;
- top: 0;
- width: 250px;
-}
-.is-open-left {
- -webkit-transform: translateX(250px);
- -ms-transform: translateX(250px);
- transform: translateX(250px);
-}
-.off-canvas.position-right {
- right: -250px;
- top: 0;
- width: 250px;
-}
-.is-open-right {
- -webkit-transform: translateX(-250px);
- -ms-transform: translateX(-250px);
- transform: translateX(-250px);
-}
-
-@media screen and (min-width: 40em) {
-
- .position-left.reveal-for-medium {
- left: 0;
- z-index: auto;
- position: fixed;
- }
- .position-left.reveal-for-medium ~ .off-canvas-content {
- margin-left: 250px;
- }
- .position-right.reveal-for-medium {
- right: 0;
- z-index: auto;
- position: fixed;
- }
- .position-right.reveal-for-medium ~ .off-canvas-content {
- margin-right: 250px;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .position-left.reveal-for-large {
- left: 0;
- z-index: auto;
- position: fixed;
- }
- .position-left.reveal-for-large ~ .off-canvas-content {
- margin-left: 250px;
- }
- .position-right.reveal-for-large {
- right: 0;
- z-index: auto;
- position: fixed;
- }
- .position-right.reveal-for-large ~ .off-canvas-content {
- margin-right: 250px;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .position-left.reveal-for-xlarge {
- left: 0;
- z-index: auto;
- position: fixed;
- }
- .position-left.reveal-for-xlarge ~ .off-canvas-content {
- margin-left: 250px;
- }
- .position-right.reveal-for-xlarge {
- right: 0;
- z-index: auto;
- position: fixed;
- }
- .position-right.reveal-for-xlarge ~ .off-canvas-content {
- margin-right: 250px;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .position-left.reveal-for-xxlarge {
- left: 0;
- z-index: auto;
- position: fixed;
- }
- .position-left.reveal-for-xxlarge ~ .off-canvas-content {
- margin-left: 250px;
- }
- .position-right.reveal-for-xxlarge {
- right: 0;
- z-index: auto;
- position: fixed;
- }
- .position-right.reveal-for-xxlarge ~ .off-canvas-content {
- margin-right: 250px;
- }
-}
-
-.orbit {
- position: relative;
-}
-.orbit-container {
- position: relative;
- margin: 0;
- overflow: hidden;
- list-style: none;
-}
-.orbit-slide {
- width: 100%;
- max-height: 100%;
-}
-.orbit-slide.no-motionui.is-active {
- top: 0;
- left: 0;
-}
-.orbit-figure {
- margin: 0;
-}
-.orbit-image {
- margin: 0;
- width: 100%;
- max-width: 100%;
-}
-.orbit-caption {
- position: absolute;
- bottom: 0;
- width: 100%;
- padding: 1rem;
- margin-bottom: 0;
- color: #fefefe;
- background-color: rgba(10, 10, 10, 0.5);
-}
-.orbit-previous,.orbit-next {
- position: absolute;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
- z-index: 10;
- padding: 1rem;
- color: #fefefe;
-}
-[data-whatinput='mouse'] .orbit-previous,[data-whatinput='mouse'] .orbit-next {
- outline: 0;
-}
-.orbit-previous:hover,.orbit-next:hover,.orbit-previous:active,.orbit-next:active,.orbit-previous:focus,.orbit-next:focus {
- background-color: rgba(10, 10, 10, 0.5);
-}
-.orbit-previous {
- left: 0;
-}
-.orbit-next {
- left: auto;
- right: 0;
-}
-.orbit-bullets {
- position: relative;
- margin-top: 0.8rem;
- margin-bottom: 0.8rem;
- text-align: center;
-}
-[data-whatinput='mouse'] .orbit-bullets {
- outline: 0;
-}
-.orbit-bullets button {
- width: 1.2rem;
- height: 1.2rem;
- margin: 0.1rem;
- background-color: #cacaca;
- border-radius: 50%;
-}
-.orbit-bullets button:hover {
- background-color: #414042;
-}
-.orbit-bullets button.is-active {
- background-color: #414042;
-}
-.pagination {
- margin-left: 0;
- margin-bottom: 1rem;
-}
-.pagination::before,.pagination::after {
- content: ' ';
- display: table;
-}
-.pagination::after {
- clear: both;
-}
-.pagination li {
- font-size: 0.875rem;
- margin-right: 0.0625rem;
- border-radius: 0;
- display: none;
-}
-.pagination li:last-child,.pagination li:first-child {
- display: inline-block;
-}
-
-@media screen and (min-width: 40em) {
-
- .pagination li {
- display: inline-block;
- }
-}
-
-.pagination a,.pagination button {
- color: #0a0a0a;
- display: block;
- padding: 0.1875rem 0.625rem;
- border-radius: 0;
-}
-.pagination a:hover,.pagination button:hover {
- background: #e6e6e6;
-}
-.pagination .current {
- padding: 0.1875rem 0.625rem;
- background: #2bc8e8;
- color: #fefefe;
- cursor: default;
-}
-.pagination .disabled {
- padding: 0.1875rem 0.625rem;
- color: #cacaca;
- cursor: not-allowed;
-}
-.pagination .disabled:hover {
- background: transparent;
-}
-.pagination .ellipsis::after {
- content: '\2026';
- padding: 0.1875rem 0.625rem;
- color: #0a0a0a;
-}
-.pagination-previous a::before,.pagination-previous.disabled::before {
- content: '\00ab';
- display: inline-block;
- margin-right: 0.5rem;
-}
-.pagination-next a::after,.pagination-next.disabled::after {
- content: '\00bb';
- display: inline-block;
- margin-left: 0.5rem;
-}
-.progress {
- background-color: #cacaca;
- height: 1rem;
- margin-bottom: 1rem;
- border-radius: 0;
-}
-.progress.primary .progress-meter {
- background-color: #2bc8e8;
-}
-.progress.secondary .progress-meter {
- background-color: #777;
-}
-.progress.success .progress-meter {
- background-color: #7cad2a;
-}
-.progress.warning .progress-meter {
- background-color: #ffc339;
-}
-.progress.alert .progress-meter {
- background-color: #ec5840;
-}
-.progress-meter {
- position: relative;
- display: block;
- width: 0%;
- height: 100%;
- background-color: #2bc8e8;
-}
-.progress-meter-text {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translate(-50%, -50%);
- -ms-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
- margin: 0;
- font-size: 0.75rem;
- font-weight: bold;
- color: #fefefe;
- white-space: nowrap;
-}
-.slider {
- position: relative;
- height: 0.5rem;
- margin-top: 1.25rem;
- margin-bottom: 2.25rem;
- background-color: #e6e6e6;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -ms-touch-action: none;
- touch-action: none;
-}
-.slider-fill {
- position: absolute;
- top: 0;
- left: 0;
- display: inline-block;
- max-width: 100%;
- height: 0.5rem;
- background-color: #cacaca;
- transition: all 0.2s ease-in-out;
-}
-.slider-fill.is-dragging {
- transition: all 0s linear;
-}
-.slider-handle {
- position: absolute;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
- left: 0;
- z-index: 1;
- display: inline-block;
- width: 1.4rem;
- height: 1.4rem;
- background-color: #2bc8e8;
- transition: all 0.2s ease-in-out;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- border-radius: 0;
-}
-[data-whatinput='mouse'] .slider-handle {
- outline: 0;
-}
-.slider-handle:hover {
- background-color: #17b3d3;
-}
-.slider-handle.is-dragging {
- transition: all 0s linear;
-}
-.slider.disabled,.slider[disabled] {
- opacity: 0.25;
- cursor: not-allowed;
-}
-.slider.vertical {
- display: inline-block;
- width: 0.5rem;
- height: 12.5rem;
- margin: 0 1.25rem;
- -webkit-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- transform: scale(1, -1);
-}
-.slider.vertical .slider-fill {
- top: 0;
- width: 0.5rem;
- max-height: 100%;
-}
-.slider.vertical .slider-handle {
- position: absolute;
- top: 0;
- left: 50%;
- width: 1.4rem;
- height: 1.4rem;
- -webkit-transform: translateX(-50%);
- -ms-transform: translateX(-50%);
- transform: translateX(-50%);
-}
-.sticky-container {
- position: relative;
-}
-.sticky {
- position: absolute;
- z-index: 0;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-.sticky.is-stuck {
- position: fixed;
- z-index: 5;
-}
-.sticky.is-stuck.is-at-top {
- top: 0;
-}
-.sticky.is-stuck.is-at-bottom {
- bottom: 0;
-}
-.sticky.is-anchored {
- position: absolute;
- left: auto;
- right: auto;
-}
-.sticky.is-anchored.is-at-bottom {
- bottom: 0;
-}
-body.is-reveal-open {
- overflow: hidden;
-}
-.reveal-overlay {
- display: none;
- position: fixed;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- z-index: 1005;
- background-color: rgba(10, 10, 10, 0.45);
- overflow-y: scroll;
-}
-.reveal {
- display: none;
- z-index: 1006;
- padding: 1rem;
- border: 1px solid #cacaca;
- background-color: #fefefe;
- border-radius: 0;
- position: relative;
- top: 100px;
- margin-left: auto;
- margin-right: auto;
- overflow-y: auto;
-}
-[data-whatinput='mouse'] .reveal {
- outline: 0;
-}
-
-@media screen and (min-width: 40em) {
-
- .reveal {
- min-height: 0;
- }
-}
-
-.reveal .column,.reveal .columns,.reveal .columns {
- min-width: 0;
-}
-.reveal > :last-child {
- margin-bottom: 0;
-}
-
-@media screen and (min-width: 40em) {
-
- .reveal {
- width: 600px;
- max-width: 75rem;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal .reveal {
- left: auto;
- right: auto;
- margin: 0 auto;
- }
-}
-
-.reveal.collapse {
- padding: 0;
-}
-
-@media screen and (min-width: 40em) {
-
- .reveal.tiny {
- width: 30%;
- max-width: 75rem;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal.small {
- width: 50%;
- max-width: 75rem;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal.large {
- width: 90%;
- max-width: 75rem;
- }
-}
-
-.reveal.full {
- top: 0;
- left: 0;
- width: 100%;
- height: 100vh;
- min-height: 100vh;
- max-width: none;
- margin-left: 0;
- border: 0;
- border-radius: 0;
-}
-
-@media screen and (max-width: 39.9375em) {
-
- .reveal {
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- height: 100vh;
- min-height: 100vh;
- max-width: none;
- margin-left: 0;
- border: 0;
- border-radius: 0;
- }
-}
-
-.reveal.without-overlay {
- position: fixed;
-}
-.switch {
- margin-bottom: 1rem;
- outline: 0;
- position: relative;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- color: #fefefe;
- font-weight: bold;
- font-size: 0.875rem;
-}
-.switch-input {
- opacity: 0;
- position: absolute;
-}
-.switch-paddle {
- background: #cacaca;
- cursor: pointer;
- display: block;
- position: relative;
- width: 4rem;
- height: 2rem;
- transition: all 0.25s ease-out;
- border-radius: 0;
- color: inherit;
- font-weight: inherit;
-}
-input + .switch-paddle {
- margin: 0;
-}
-.switch-paddle::after {
- background: #fefefe;
- content: '';
- display: block;
- position: absolute;
- height: 1.5rem;
- left: 0.25rem;
- top: 0.25rem;
- width: 1.5rem;
- transition: all 0.25s ease-out;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- border-radius: 0;
-}
-input:checked ~ .switch-paddle {
- background: #2bc8e8;
-}
-input:checked ~ .switch-paddle::after {
- left: 2.25rem;
-}
-[data-whatinput='mouse'] input:focus ~ .switch-paddle {
- outline: 0;
-}
-.switch-active,.switch-inactive {
- position: absolute;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
-}
-.switch-active {
- left: 8%;
- display: none;
-}
-input:checked + label > .switch-active {
- display: block;
-}
-.switch-inactive {
- right: 15%;
-}
-input:checked + label > .switch-inactive {
- display: none;
-}
-.switch.tiny .switch-paddle {
- width: 3rem;
- height: 1.5rem;
- font-size: 0.625rem;
-}
-.switch.tiny .switch-paddle::after {
- width: 1rem;
- height: 1rem;
-}
-.switch.tiny input:checked ~ .switch-paddle::after {
- left: 1.75rem;
-}
-.switch.small .switch-paddle {
- width: 3.5rem;
- height: 1.75rem;
- font-size: 0.75rem;
-}
-.switch.small .switch-paddle::after {
- width: 1.25rem;
- height: 1.25rem;
-}
-.switch.small input:checked ~ .switch-paddle::after {
- left: 2rem;
-}
-.switch.large .switch-paddle {
- width: 5rem;
- height: 2.5rem;
- font-size: 1rem;
-}
-.switch.large .switch-paddle::after {
- width: 2rem;
- height: 2rem;
-}
-.switch.large input:checked ~ .switch-paddle::after {
- left: 2.75rem;
-}
-table thead,table tbody,table tfoot {
- border: 1px solid #f1f1f1;
- background-color: #fefefe;
-}
-table caption {
- font-weight: bold;
- padding: 0.5rem 0.625rem 0.625rem;
-}
-table thead,table tfoot {
- background: #f8f8f8;
- color: #414042;
-}
-table thead tr,table tfoot tr {
- background: transparent;
-}
-table thead th,table thead td,table tfoot th,table tfoot td {
- padding: 0.5rem 0.625rem 0.625rem;
- font-weight: bold;
- text-align: left;
-}
-table tbody tr:nth-child(even) {
- background-color: #f1f1f1;
-}
-table tbody th,table tbody td {
- padding: 0.5rem 0.625rem 0.625rem;
-}
-
-@media screen and (max-width: 63.9375em) {
-
- table.stack thead {
- display: none;
- }
- table.stack tfoot {
- display: none;
- }
- table.stack tr,table.stack th,table.stack td {
- display: block;
- }
- table.stack td {
- border-top: 0;
- }
-}
-
-table.scroll {
- display: block;
- width: 100%;
- overflow-x: auto;
-}
-table.hover tr:hover {
- background-color: #f9f9f9;
-}
-table.hover tr:nth-of-type(even):hover {
- background-color: #ececec;
-}
-.table-scroll {
- overflow-x: auto;
-}
-.table-scroll table {
- width: auto;
-}
-.tabs {
- margin: 0;
- list-style-type: none;
- background: #fefefe;
- border: 1px solid #e6e6e6;
-}
-.tabs::before,.tabs::after {
- content: ' ';
- display: table;
-}
-.tabs::after {
- clear: both;
-}
-.tabs.vertical > li {
- width: auto;
- float: none;
- display: block;
-}
-.tabs.simple > li > a {
- padding: 0;
-}
-.tabs.simple > li > a:hover {
- background: transparent;
-}
-.tabs.primary {
- background: #2bc8e8;
-}
-.tabs.primary > li > a {
- color: #fefefe;
-}
-.tabs.primary > li > a:hover,.tabs.primary > li > a:focus {
- background: #1fc5e7;
-}
-.tabs-title {
- float: left;
-}
-.tabs-title > a {
- display: block;
- padding: 1.25rem 1.5rem;
- line-height: 1;
- font-size: 0.75rem;
-}
-.tabs-title > a:hover {
- background: #fefefe;
-}
-.tabs-title > a:focus,.tabs-title > a[aria-selected='true'] {
- background: #e6e6e6;
-}
-.tabs-content {
- background: #fefefe;
- transition: all 0.5s ease;
- border: 1px solid #e6e6e6;
- border-top: 0;
-}
-.tabs-content.vertical {
- border: 1px solid #e6e6e6;
- border-left: 0;
-}
-.tabs-panel {
- display: none;
- padding: 1rem;
-}
-.tabs-panel.is-active {
- display: block;
-}
-.thumbnail {
- border: solid 7px #e6e6e6;
- box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2);
- display: inline-block;
- line-height: 0;
- max-width: 100%;
- transition: box-shadow 200ms ease-out;
- border-radius: 7px;
- margin-bottom: 1rem;
-}
-.thumbnail:hover,.thumbnail:focus {
- box-shadow: 0 0 6px 1px rgba(138, 168, 0, 0.8);
-}
-.title-bar {
- background: #0a0a0a;
- color: #fefefe;
- padding: 0.5rem;
- background-color: #7cad2a;
- margin-bottom: 25px;
- width: 100%;
- z-index: 1000;
-}
-.title-bar::before,.title-bar::after {
- content: ' ';
- display: table;
-}
-.title-bar::after {
- clear: both;
-}
-.title-bar .menu-icon {
- margin-left: 0.25rem;
- margin-right: 0.5rem;
-}
-.title-bar-left {
- float: left;
-}
-.title-bar-right {
- float: right;
- text-align: right;
-}
-.title-bar-title {
- font-weight: bold;
- vertical-align: middle;
- display: inline-block;
-}
-.has-tip {
- border-bottom: dotted 1px #414042;
- font-weight: bold;
- position: relative;
- display: inline-block;
- cursor: help;
-}
-.tooltip {
- background-color: #0a0a0a;
- color: #fefefe;
- font-size: 80%;
- padding: 0.75rem;
- position: absolute;
- z-index: 10;
- top: calc(100% + 0.6495rem);
- max-width: 10rem !important;
- border-radius: 0;
-}
-.tooltip::before {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 0.75rem;
- border-color: transparent transparent #0a0a0a;
- border-bottom-style: solid;
- border-top-width: 0;
- bottom: 100%;
- position: absolute;
- left: 50%;
- -webkit-transform: translateX(-50%);
- -ms-transform: translateX(-50%);
- transform: translateX(-50%);
-}
-.tooltip.top::before {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 0.75rem;
- border-color: #0a0a0a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- top: 100%;
- bottom: auto;
-}
-.tooltip.left::before {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 0.75rem;
- border-color: transparent transparent transparent #0a0a0a;
- border-left-style: solid;
- border-right-width: 0;
- bottom: auto;
- left: 100%;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
-}
-.tooltip.right::before {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 0.75rem;
- border-color: transparent #0a0a0a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- bottom: auto;
- left: auto;
- right: 100%;
- top: 50%;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
-}
-.top-bar {
- padding: 0.5rem;
-}
-.top-bar::before,.top-bar::after {
- content: ' ';
- display: table;
-}
-.top-bar::after {
- clear: both;
-}
-.top-bar,.top-bar ul {
- background-color: #e6e6e6;
-}
-.top-bar input {
- max-width: 200px;
- margin-right: 1rem;
-}
-.top-bar .input-group-field {
- width: 100%;
- margin-right: 0;
-}
-.top-bar input.button {
- width: auto;
-}
-.top-bar .top-bar-left,.top-bar .top-bar-right {
- width: 100%;
-}
-
-@media screen and (min-width: 40em) {
-
- .top-bar .top-bar-left,.top-bar .top-bar-right {
- width: auto;
- }
-}
-
-
-@media screen and (max-width: 63.9375em) {
-
- .top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right {
- width: 100%;
- }
-}
-
-
-@media screen and (max-width: 74.9375em) {
-
- .top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right {
- width: 100%;
- }
-}
-
-
-@media screen and (max-width: 89.9375em) {
-
- .top-bar.stacked-for-xlarge .top-bar-left,.top-bar.stacked-for-xlarge .top-bar-right {
- width: 100%;
- }
-}
-
-.top-bar.stacked-for-xxlarge .top-bar-left,.top-bar.stacked-for-xxlarge .top-bar-right {
- width: 100%;
-}
-.top-bar-title {
- float: left;
- margin-right: 1rem;
-}
-.top-bar-left {
- float: left;
-}
-.top-bar-right {
- float: right;
-}
-.hide {
- display: none !important;
-}
-.invisible {
- visibility: hidden;
-}
-
-@media screen and (max-width: 39.9375em) {
-
- .hide-for-small-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 0em), screen and (min-width: 40em) {
-
- .show-for-small-only {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .hide-for-medium {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 39.9375em) {
-
- .show-for-medium {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 40em) and (max-width: 63.9375em) {
-
- .hide-for-medium-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 39.9375em), screen and (min-width: 64em) {
-
- .show-for-medium-only {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .hide-for-large {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 63.9375em) {
-
- .show-for-large {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 64em) and (max-width: 74.9375em) {
-
- .hide-for-large-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 63.9375em), screen and (min-width: 75em) {
-
- .show-for-large-only {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .hide-for-xlarge {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 74.9375em) {
-
- .show-for-xlarge {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 75em) and (max-width: 89.9375em) {
-
- .hide-for-xlarge-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 74.9375em), screen and (min-width: 90em) {
-
- .show-for-xlarge-only {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .hide-for-xxlarge {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 89.9375em) {
-
- .show-for-xxlarge {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .hide-for-xxlarge-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 89.9375em) {
-
- .show-for-xxlarge-only {
- display: none !important;
- }
-}
-
-.show-for-sr,.show-on-focus {
- position: absolute !important;
- width: 1px;
- height: 1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
-}
-.show-on-focus:active,.show-on-focus:focus {
- position: static !important;
- height: auto;
- width: auto;
- overflow: visible;
- clip: auto;
-}
-.show-for-landscape,.hide-for-portrait {
- display: block !important;
-}
-
-@media screen and (orientation: landscape) {
-
- .show-for-landscape,.hide-for-portrait {
- display: block !important;
- }
-}
-
-
-@media screen and (orientation: portrait) {
-
- .show-for-landscape,.hide-for-portrait {
- display: none !important;
- }
-}
-
-.hide-for-landscape,.show-for-portrait {
- display: none !important;
-}
-
-@media screen and (orientation: landscape) {
-
- .hide-for-landscape,.show-for-portrait {
- display: none !important;
- }
-}
-
-
-@media screen and (orientation: portrait) {
-
- .hide-for-landscape,.show-for-portrait {
- display: block !important;
- }
-}
-
-.float-left {
- float: left !important;
-}
-.float-right {
- float: right !important;
-}
-.float-center {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-.clearfix::before,.clearfix::after {
- content: ' ';
- display: table;
-}
-.clearfix::after {
- clear: both;
-}
-.slide-in-down.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateY(-100%);
- -ms-transform: translateY(-100%);
- transform: translateY(-100%);
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-.slide-in-down.mui-enter.mui-enter-active {
- -webkit-transform: translateY(0);
- -ms-transform: translateY(0);
- transform: translateY(0);
-}
-.slide-in-left.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateX(-100%);
- -ms-transform: translateX(-100%);
- transform: translateX(-100%);
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-.slide-in-left.mui-enter.mui-enter-active {
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0);
-}
-.slide-in-up.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateY(100%);
- -ms-transform: translateY(100%);
- transform: translateY(100%);
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-.slide-in-up.mui-enter.mui-enter-active {
- -webkit-transform: translateY(0);
- -ms-transform: translateY(0);
- transform: translateY(0);
-}
-.slide-in-right.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateX(100%);
- -ms-transform: translateX(100%);
- transform: translateX(100%);
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-.slide-in-right.mui-enter.mui-enter-active {
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0);
-}
-.slide-out-down.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateY(0);
- -ms-transform: translateY(0);
- transform: translateY(0);
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-.slide-out-down.mui-leave.mui-leave-active {
- -webkit-transform: translateY(100%);
- -ms-transform: translateY(100%);
- transform: translateY(100%);
-}
-.slide-out-right.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0);
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-.slide-out-right.mui-leave.mui-leave-active {
- -webkit-transform: translateX(100%);
- -ms-transform: translateX(100%);
- transform: translateX(100%);
-}
-.slide-out-up.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateY(0);
- -ms-transform: translateY(0);
- transform: translateY(0);
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-.slide-out-up.mui-leave.mui-leave-active {
- -webkit-transform: translateY(-100%);
- -ms-transform: translateY(-100%);
- transform: translateY(-100%);
-}
-.slide-out-left.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: translateX(0);
- -ms-transform: translateX(0);
- transform: translateX(0);
- transition-property: transform, opacity, -webkit-transform;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-.slide-out-left.mui-leave.mui-leave-active {
- -webkit-transform: translateX(-100%);
- -ms-transform: translateX(-100%);
- transform: translateX(-100%);
-}
-.fade-in.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- opacity: 0;
- transition-property: opacity;
-}
-.fade-in.mui-enter.mui-enter-active {
- opacity: 1;
-}
-.fade-out.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- opacity: 1;
- transition-property: opacity;
-}
-.fade-out.mui-leave.mui-leave-active {
- opacity: 0;
-}
-.hinge-in-from-top.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateX(-90deg);
- transform: perspective(2000px) rotateX(-90deg);
- -webkit-transform-origin: top;
- -ms-transform-origin: top;
- transform-origin: top;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.hinge-in-from-top.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1;
-}
-.hinge-in-from-right.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateY(-90deg);
- transform: perspective(2000px) rotateY(-90deg);
- -webkit-transform-origin: right;
- -ms-transform-origin: right;
- transform-origin: right;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.hinge-in-from-right.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1;
-}
-.hinge-in-from-bottom.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateX(90deg);
- transform: perspective(2000px) rotateX(90deg);
- -webkit-transform-origin: bottom;
- -ms-transform-origin: bottom;
- transform-origin: bottom;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.hinge-in-from-bottom.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1;
-}
-.hinge-in-from-left.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateY(90deg);
- transform: perspective(2000px) rotateY(90deg);
- -webkit-transform-origin: left;
- -ms-transform-origin: left;
- transform-origin: left;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.hinge-in-from-left.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1;
-}
-.hinge-in-from-middle-x.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateX(-90deg);
- transform: perspective(2000px) rotateX(-90deg);
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.hinge-in-from-middle-x.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1;
-}
-.hinge-in-from-middle-y.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotateY(-90deg);
- transform: perspective(2000px) rotateY(-90deg);
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.hinge-in-from-middle-y.mui-enter.mui-enter-active {
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- opacity: 1;
-}
-.hinge-out-from-top.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: top;
- -ms-transform-origin: top;
- transform-origin: top;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.hinge-out-from-top.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateX(-90deg);
- transform: perspective(2000px) rotateX(-90deg);
- opacity: 0;
-}
-.hinge-out-from-right.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: right;
- -ms-transform-origin: right;
- transform-origin: right;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.hinge-out-from-right.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateY(-90deg);
- transform: perspective(2000px) rotateY(-90deg);
- opacity: 0;
-}
-.hinge-out-from-bottom.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: bottom;
- -ms-transform-origin: bottom;
- transform-origin: bottom;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.hinge-out-from-bottom.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateX(90deg);
- transform: perspective(2000px) rotateX(90deg);
- opacity: 0;
-}
-.hinge-out-from-left.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: left;
- -ms-transform-origin: left;
- transform-origin: left;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.hinge-out-from-left.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateY(90deg);
- transform: perspective(2000px) rotateY(90deg);
- opacity: 0;
-}
-.hinge-out-from-middle-x.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.hinge-out-from-middle-x.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateX(-90deg);
- transform: perspective(2000px) rotateX(-90deg);
- opacity: 0;
-}
-.hinge-out-from-middle-y.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: perspective(2000px) rotate(0deg);
- transform: perspective(2000px) rotate(0deg);
- -webkit-transform-origin: center;
- -ms-transform-origin: center;
- transform-origin: center;
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.hinge-out-from-middle-y.mui-leave.mui-leave-active {
- -webkit-transform: perspective(2000px) rotateY(-90deg);
- transform: perspective(2000px) rotateY(-90deg);
- opacity: 0;
-}
-.scale-in-up.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: scale(0.5);
- -ms-transform: scale(0.5);
- transform: scale(0.5);
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.scale-in-up.mui-enter.mui-enter-active {
- -webkit-transform: scale(1);
- -ms-transform: scale(1);
- transform: scale(1);
- opacity: 1;
-}
-.scale-in-down.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: scale(1.5);
- -ms-transform: scale(1.5);
- transform: scale(1.5);
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.scale-in-down.mui-enter.mui-enter-active {
- -webkit-transform: scale(1);
- -ms-transform: scale(1);
- transform: scale(1);
- opacity: 1;
-}
-.scale-out-up.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: scale(1);
- -ms-transform: scale(1);
- transform: scale(1);
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.scale-out-up.mui-leave.mui-leave-active {
- -webkit-transform: scale(1.5);
- -ms-transform: scale(1.5);
- transform: scale(1.5);
- opacity: 0;
-}
-.scale-out-down.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: scale(1);
- -ms-transform: scale(1);
- transform: scale(1);
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.scale-out-down.mui-leave.mui-leave-active {
- -webkit-transform: scale(0.5);
- -ms-transform: scale(0.5);
- transform: scale(0.5);
- opacity: 0;
-}
-.spin-in.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: rotate(-0.75turn);
- -ms-transform: rotate(-0.75turn);
- transform: rotate(-0.75turn);
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.spin-in.mui-enter.mui-enter-active {
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- opacity: 1;
-}
-.spin-out.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.spin-out.mui-leave.mui-leave-active {
- -webkit-transform: rotate(0.75turn);
- -ms-transform: rotate(0.75turn);
- transform: rotate(0.75turn);
- opacity: 0;
-}
-.spin-in-ccw.mui-enter {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: rotate(0.75turn);
- -ms-transform: rotate(0.75turn);
- transform: rotate(0.75turn);
- transition-property: transform, opacity, -webkit-transform;
- opacity: 0;
-}
-.spin-in-ccw.mui-enter.mui-enter-active {
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- opacity: 1;
-}
-.spin-out-ccw.mui-leave {
- transition-duration: 500ms;
- transition-timing-function: linear;
- -webkit-transform: rotate(0);
- -ms-transform: rotate(0);
- transform: rotate(0);
- transition-property: transform, opacity, -webkit-transform;
- opacity: 1;
-}
-.spin-out-ccw.mui-leave.mui-leave-active {
- -webkit-transform: rotate(-0.75turn);
- -ms-transform: rotate(-0.75turn);
- transform: rotate(-0.75turn);
- opacity: 0;
-}
-.slow {
- transition-duration: 750ms !important;
- -webkit-animation-duration: 750ms !important;
- animation-duration: 750ms !important;
-}
-.fast {
- transition-duration: 250ms !important;
- -webkit-animation-duration: 250ms !important;
- animation-duration: 250ms !important;
-}
-.linear {
- transition-timing-function: linear !important;
- -webkit-animation-timing-function: linear !important;
- animation-timing-function: linear !important;
-}
-.ease {
- transition-timing-function: ease !important;
- -webkit-animation-timing-function: ease !important;
- animation-timing-function: ease !important;
-}
-.ease-in {
- transition-timing-function: ease-in !important;
- -webkit-animation-timing-function: ease-in !important;
- animation-timing-function: ease-in !important;
-}
-.ease-out {
- transition-timing-function: ease-out !important;
- -webkit-animation-timing-function: ease-out !important;
- animation-timing-function: ease-out !important;
-}
-.ease-in-out {
- transition-timing-function: ease-in-out !important;
- -webkit-animation-timing-function: ease-in-out !important;
- animation-timing-function: ease-in-out !important;
-}
-.bounce-in {
- transition-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important;
- -webkit-animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important;
- animation-timing-function: cubic-bezier(0.485, 0.155, 0.24, 1.245) !important;
-}
-.bounce-out {
- transition-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important;
- -webkit-animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important;
- animation-timing-function: cubic-bezier(0.485, 0.155, 0.515, 0.845) !important;
-}
-.bounce-in-out {
- transition-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important;
- -webkit-animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important;
- animation-timing-function: cubic-bezier(0.76, -0.245, 0.24, 1.245) !important;
-}
-.short-delay {
- transition-delay: 300ms !important;
- -webkit-animation-delay: 300ms !important;
- animation-delay: 300ms !important;
-}
-.long-delay {
- transition-delay: 700ms !important;
- -webkit-animation-delay: 700ms !important;
- animation-delay: 700ms !important;
-}
-.shake {
- -webkit-animation-name: shake-7;
- animation-name: shake-7;
-}
-
-@keyframes shake-7 {
- 0%,10%,20%,30%,40%,50%,60%,70%,80%,90% {
- -webkit-transform: translateX(7%);
- transform: translateX(7%);
- }
- 5%,15%,25%,35%,45%,55%,65%,75%,85%,95% {
- -webkit-transform: translateX(-7%);
- transform: translateX(-7%);
- }
-}
-
-
-@keyframes shake-7 {
- 0%,10%,20%,30%,40%,50%,60%,70%,80%,90% {
- -webkit-transform: translateX(7%);
- transform: translateX(7%);
- }
- 5%,15%,25%,35%,45%,55%,65%,75%,85%,95% {
- -webkit-transform: translateX(-7%);
- transform: translateX(-7%);
- }
-}
-
-.spin-cw {
- -webkit-animation-name: spin-cw-1turn;
- animation-name: spin-cw-1turn;
-}
-
-@keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(-1turn);
- transform: rotate(-1turn);
- }
- 100% {
- -webkit-transform: rotate(0);
- transform: rotate(0);
- }
-}
-
-
-@keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(-1turn);
- transform: rotate(-1turn);
- }
- 100% {
- -webkit-transform: rotate(0);
- transform: rotate(0);
- }
-}
-
-.spin-ccw {
- -webkit-animation-name: spin-cw-1turn;
- animation-name: spin-cw-1turn;
-}
-
-@keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(0);
- transform: rotate(0);
- }
- 100% {
- -webkit-transform: rotate(1turn);
- transform: rotate(1turn);
- }
-}
-
-.wiggle {
- -webkit-animation-name: wiggle-7deg;
- animation-name: wiggle-7deg;
-}
-
-@keyframes wiggle-7deg {
- 40%,50%,60% {
- -webkit-transform: rotate(7deg);
- transform: rotate(7deg);
- }
- 35%,45%,55%,65% {
- -webkit-transform: rotate(-7deg);
- transform: rotate(-7deg);
- }
- 0%,30%,70%,100% {
- -webkit-transform: rotate(0);
- transform: rotate(0);
- }
-}
-
-
-@keyframes wiggle-7deg {
- 40%,50%,60% {
- -webkit-transform: rotate(7deg);
- transform: rotate(7deg);
- }
- 35%,45%,55%,65% {
- -webkit-transform: rotate(-7deg);
- transform: rotate(-7deg);
- }
- 0%,30%,70%,100% {
- -webkit-transform: rotate(0);
- transform: rotate(0);
- }
-}
-
-.shake,.spin-cw,.spin-ccw,.wiggle {
- -webkit-animation-duration: 500ms;
- animation-duration: 500ms;
-}
-.infinite {
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
-}
-.m-0 {
- margin: 0 !important;
-}
-.m-t-5 {
- margin-top: 5px;
-}
-.m-t-25 {
- margin-top: 25px;
-}
-.m-t-35 {
- margin-top: 35px;
-}
-.m-t-50 {
- margin-top: 50px;
-}
-.m-b-25 {
- margin-bottom: 25px;
-}
-.m-b-50 {
- margin-bottom: 50px;
-}
-.m-b-26 {
- margin-bottom: 26px;
-}
-.m-l-5 {
- margin-left: 5px;
-}
-.m-l-25 {
- margin-left: 25px;
-}
-.m-r-25 {
- margin-right: 25px;
-}
-.m-l-40 {
- margin-left: 40px;
-}
-.p-0 {
- padding: 0;
-}
-.p-lr-15 {
- padding-left: 15px;
- padding-right: 15px;
-}
-.p-tb-15 {
- padding-top: 15px;
- padding-bottom: 15px;
-}
-.p-tb-25 {
- padding-top: 25px;
- padding-bottom: 25px;
-}
-.p-tb-35 {
- padding-top: 35px;
- padding-bottom: 35px;
-}
-.p-lr-0 {
- padding-left: 0;
- padding-right: 0;
-}
-.p-25 {
- padding: 25px !important;
-}
-.p-b-0 {
- padding-bottom: 0 !important;
-}
-.p-l-0 {
- padding-left: 0 !important;
-}
-.rounded {
- border-radius: 7px;
-}
-.button.long {
- padding: 0.9em 4em;
- text-transform: uppercase;
-}
-
-.thin {
- font-weight: 300 !important;
-}
-.bolder {
- font-weight: 500 !important;
-}
-.bold {
- font-weight: 700 !important;
-}
-.pointer {
- cursor: pointer;
-}
-.uppercase {
- text-transform: uppercase;
-}
-.underline {
- text-decoration: underline;
-}
-.green-text {
- color: #7cad2a !important;
-}
-.white-text {
- color: #fefefe !important;
-}
-.large-text {
- font-size: 1.2rem;
-}
-.fa-small {
- font-size: 1rem;
-}
-[type="text"],[type="password"],[type="date"],[type="datetime"],[type="datetime-local"],[type="month"],[type="week"],[type="email"],[type="number"],[type="search"],[type="tel"],[type="time"],[type="url"],[type="color"],textarea,[type="text"]:focus,[type="password"]:focus,[type="date"]:focus,[type="datetime"]:focus,[type="datetime-local"]:focus,[type="month"]:focus,[type="week"]:focus,[type="email"]:focus,[type="number"]:focus,[type="search"]:focus,[type="tel"]:focus,[type="time"]:focus,[type="url"]:focus,[type="color"]:focus,textarea:focus {
- box-shadow: none;
- padding: 0.8rem 1rem;
- line-height: 2rem;
- height: 3rem;
- margin-bottom: 1.4rem;
-}
-textarea,textarea:focus {
- height: 120px;
-}
-#logo-href {
- margin: 50px auto 0;
- text-align: center;
- display: block;
-}
-.social-icons {
- margin: 70px auto 0;
- float: right;
-}
-.binarity-info {
- margin: 30px auto 20px;
- float: right;
- text-align: right;
-}
-.binarity-info:before {
- content: '';
- width: 25%;
- position: relative;
- right: 0.7rem;
- height: 1px;
- background-color: #fefefe;
- margin-bottom: 30px;
- display: inline-block;
-}
-#responsive-menu .main-menu {
- margin: 70px auto 0;
- text-align: right;
-}
-.off-canvas#responsive-menu .main-menu.menu > li > a {
- padding: 0.2rem 0.5rem;
- text-transform: uppercase;
- letter-spacing: 2px;
- font-size: 1.2rem;
- color: #fefefe;
-}
-.off-canvas#responsive-menu .main-menu.menu > li > a:hover,.off-canvas#responsive-menu .main-menu.menu > li.active > a {
- text-decoration: none;
- color: #414042;
-}
-.social-icons.menu > li > a {
- padding: 0.2rem;
-}
-.social-icons.menu > li > a > i {
- color: #fefefe;
-}
-.social-icons.menu > li > a:hover > i {
- color: #414042;
-}
-.binarity-info.menu > li {
- padding: 0.1rem 0.7rem;
- letter-spacing: 2px;
- font-size: 0.9rem;
- color: #414042;
- line-height: 1;
-}
-.binarity-info.menu > li > a {
- padding: 0.1rem 0;
- color: #414042;
- font-weight: 700;
-}
-.off-canvas-content {
- box-shadow: none;
- background: transparent;
- padding-top: 25px;
- min-height: 100%;
- height: 100%;
-}
-.more-references {
- display: none;
-}
-.more-refs {
- display: block;
- width: 100%;
- clear: both;
- margin-bottom: 25px;
-}
-.reference-item {
- margin-bottom: 1rem;
-}
-.reference-item .holder {
- position: relative;
- display: inline-block;
-}
-.item-data {
- display: block;
- opacity: 0;
- width: calc(100% - 14px) !important;
- height: calc(100% - 30px);
- position: absolute;
- top: 7px;
- left: 7px;
- background-color: rgba(65, 64, 66, 0.85);
- font-size: 0.8rem;
- text-align: center;
- font-weight: 300;
- padding: 5px;
-}
-.item-data p,.item-data a,.item-data h4 {
- color: #ffffff;
-}
-.item-data h4 {
- font-size: 1rem;
- margin-top: 20px;
- display: block;
- margin-bottom: 15px;
-}
-.item-data h4:after {
- content: '';
- width: 10%;
- height: 1px;
- background-color: #fefefe;
- display: inline-block;
- position: absolute;
- top: 50px;
- left: 45%;
-}
-.item-data a {
- text-transform: uppercase;
-}
-.member-list {
- border-right: 2px solid #7cad2a;
-}
-.member {
- margin-bottom: 15px;
- clear: both;
-}
-.contact-address {
- background-color: #7cad2a;
-}
-.contact-address div {
- margin: 15px auto;
-}
-.contact-address p,.contact-address b,.contact-address a {
- color: #fefefe;
- margin: 0;
- line-height: 20px;
-}
-.member-tile p,.member-tile a {
- color: #414042;
- margin: 0;
- line-height: 17px;
-}
-.avatar-image {
- margin: 2px auto 0 auto;
- width: 75px;
- height: auto;
- position: relative;
- left: calc(50% - 37px);
-}
-.what-we-know-holder {
- width: 650px;
- height: 76px;
- position: relative;
- margin: 0 auto;
-}
-
-.what-we-know {
- position: absolute;
- display: inline-block;
- background: url(../images/technologies_hexagon.png);
- width: 87px;
- height: 74px;
-}
-.what-we-know:nth-child(2) {
- left: 70px;
-}
-.what-we-know:nth-child(3) {
- left: 140px;
-}
-.what-we-know:nth-child(4) {
- left: 210px;
-}
-.what-we-know:nth-child(5) {
- left: 280px;
-}
-.what-we-know:nth-child(6) {
- left: 350px;
-}
-.what-we-know:nth-child(7) {
- left: 420px;
-}
-.what-we-know:nth-child(8) {
- left: 490px;
-}
-.what-we-know:nth-child(9) {
- left: 560px;
-}
-.what-we-know:nth-child(even) {
- top: 37px;
-}
-.what-we-know img {
- width: 54px;
- height: auto;
- position: absolute;
- top: 14px;
- left: 16px;
-}
-.services-pos {
- position: relative;
-}
-a#responsive-menu-button {
- color: #ffffff;
- font-size: 1.5rem;
- line-height: 75px;
-}
-a#responsive-menu-button:hover {
- text-decoration: none;
-}
-#footer {
- width: 100%;
- display: block;
- background-color: #7cad2a;
- text-align: center;
-}
-#footer .social-icons {
- margin: 20px auto 0;
- float: none;
- display: inline-block;
-}
-#footer .binarity-info {
- margin: 5px auto 20px;
- float: none;
- display: inline-block;
- text-align: center;
-}
-#footer .binarity-info:before {
- content: '';
- width: 50px;
- position: relative;
- left: calc(50% - 95px);
- height: 1px;
- background-color: #fefefe;
- margin-bottom: 5px;
- display: inline-block;
-}
-
-
-@media only screen and (min-width: 90.063em) {
-
- .services-pos:nth-child(1) {
- top: 0;
- margin-top: 302px;
- margin-left: 351px;
- }
-
- .services-pos:nth-child(2) {
- top: 0;
- margin-top: -217px;
- margin-left: 489px;
- }
- .services-pos:nth-child(3) {
- top: 0;
- margin-top: -138px;
- margin-left: 1037px;
- }
- .services-pos:nth-child(4) {
- top: 0;
- margin-top: -58px;
- margin-left: 625px;
- }
- .services-pos:nth-child(5) {
- top: 0;
- margin-top: -138px;
- margin-left: 900px;
- }
- .services-pos:nth-child(6) {
- top: 0;
- margin-top: -58px;
- margin-left: 489px;
- }
- .services-pos:nth-child(7) {
- top: 0;
- margin-top: -138px;
- margin-left: 762px;
- }
- .services-pos:nth-child(8) {
- top: 0;
- margin-top: -138px;
- margin-left: 1037px;
- }
- .services-pos:nth-child(9) {
- top: 0;
- margin-top: -58px;
- margin-left: 625px;
- }
- .services-pos:nth-child(10) {
- top: 0;
- margin-top: -138px;
- margin-left: 900px;
- }
- .services-pos:nth-child(11) {
- top: 0;
- margin-top: -58px;
- margin-left: 762px;
- }
- .services-pos:nth-child(12) {
- top: 0;
- margin-top: -58px;
- margin-left: 900px;
- }
-}
-
-
-
-@media only screen and (min-width: 64.063em) and (max-width: 90em) {
-
- .services-pos:nth-child(1) {
- top: 0;
- margin-top: 143px;
- margin-left: 76px;
- }
- .services-pos:nth-child(2) {
- top: 0;
- margin-top: -217px;
- margin-left: 214px;
- }
- .services-pos:nth-child(3) {
- top: 0;
- margin-top: -138px;
- margin-left: 762px;
- }
- .services-pos:nth-child(4) {
- top: 0;
- margin-top: -58px;
- margin-left: 350px;
- }
- .services-pos:nth-child(5) {
- top: 0;
- margin-top: -138px;
- margin-left: 625px;
- }
- .services-pos:nth-child(6) {
- top: 0;
- margin-top: -58px;
- margin-left: 214px;
- }
- .services-pos:nth-child(7) {
- top: 0;
- margin-top: -138px;
- margin-left: 487px;
- }
- .services-pos:nth-child(8) {
- top: 0;
- margin-top: -138px;
- margin-left: 762px;
- }
- .services-pos:nth-child(9) {
- top: 0;
- margin-top: -58px;
- margin-left: 350px;
- }
- .services-pos:nth-child(10) {
- top: 0;
- margin-top: -138px;
- margin-left: 625px;
- }
- .services-pos:nth-child(11) {
- top: 0;
- margin-top: -58px;
- margin-left: 487px;
- }
- .services-pos:nth-child(12) {
- top: 0;
- margin-top: -58px;
- margin-left: 625px;
- }
-}
-
-
-
-@media only screen and (min-width: 40.063em) and (max-width: 64em) {
-
- .services-pos:nth-child(1) {
- top: 0;
- margin-top: 126px;
- margin-left: 190px;
- }
- .services-pos:nth-child(2) {
- top: 0;
- margin-top: -217px;
- margin-left: 328px;
- }
- .services-pos:nth-child(3) {
- top: 313px;
- margin-top: -138px;
- margin-left: 328px;
- }
- .services-pos:nth-child(4) {
- top: 0;
- margin-top: -58px;
- margin-left: 464px;
- }
- .services-pos:nth-child(5) {
- top: -80px;
- margin-top: -134px;
- margin-left: 601px;
- }
- .services-pos:nth-child(6) {
- top: 0;
- margin-top: -58px;
- margin-left: 328px;
- }
- .services-pos:nth-child(7) {
- top: 0;
- margin-top: -138px;
- margin-left: 601px;
- }
- .services-pos:nth-child(8) {
- top: 80px;
- margin-top: -138px;
- margin-left: 190px;
- }
- .services-pos:nth-child(9) {
- top: 0;
- margin-top: -58px;
- margin-left: 464px;
- }
- .services-pos:nth-child(10) {
- top: 160px;
- margin-top: -138px;
- margin-left: 190px;
- }
- .services-pos:nth-child(11) {
- top: 0;
- margin-top: -58px;
- margin-left: 601px;
- }
- .services-pos:nth-child(12) {
- top: 0;
- margin-top: -58px;
- margin-left: 464px;
- }
-}
-
-
-
-@media only screen and (max-width: 40em) {
-
- .outline-holder {
- display: none;
- }
- .services-pos:nth-child(2) {
- left: calc(50% - 150px);
- }
- .services-pos:nth-child(4) {
- margin-top: 10px;
- left: calc(50% - 150px);
- }
- .services-pos:nth-child(6) {
- left: calc(50% - 15px);
- margin-top: -210px;
- }
- .services-pos:nth-child(7) {
- left: calc(50% - 15px);
- margin-top: 10px;
- }
- .services-pos:nth-child(8) {
- left: calc(50% - 150px);
- margin-top: -65px;
- }
- .services-pos:nth-child(9) {
- left: calc(50% - 15px);
- margin-top: -60px;
- }
- .services-pos:nth-child(10) {
- left: calc(50% - 150px);
- margin-top: -65px;
- }
- .services-pos:nth-child(12) {
- left: calc(50% - 15px);
- margin-top: -60px;
- }
-}
-
-
-
-@media only screen and (max-width: 1270px) and (min-width: 64.063em) {
-
- .services-pos:nth-child(3) {
- margin-top: -138px;
- top: 313px;
- margin-left: 214px;
- }
- .services-pos:nth-child(8) {
- margin-top: -138px;
- top: 80px;
- margin-left: 76px;
- }
- .services-pos:nth-child(12) {
- margin-left: 350px;
- }
-}
-
-
-@media only screen and (min-width: 40.063em) and (max-width: 850px) {
-
- .services-pos:nth-child(5) {
- margin-left: 53px;
- }
- .services-pos:nth-child(7) {
- margin-left: 53px;
- }
- .services-pos:nth-child(11) {
- margin-left: 53px;
- }
-}
-
-
-@media (max-width: 1366px) {
-
- .row:not(.nochange) {
- max-width: 60rem;
- }
-}
-
-
-@media (max-width: 1270px) {
-
- .row:not(.nochange) {
- max-width: 50rem;
- }
- h2,h5 {
- text-align: center;
- margin: auto;
- }
- .what-we-know-holder {
- left: calc(50% - 650px / 2);
- }
-}
-
-
-@media (max-width: 1100px) {
-
- .row:not(.nochange) {
- max-width: 40rem;
- }
-}
-
-
-@media (min-width: 1024px) {
-
- .medium-centered {
- float: none;
- display: block;
- margin-left: 0;
- margin-right: 0;
- }
-}
-
-
-@media (max-width: 1023px) {
-
- .row:not(.nochange) {
- max-width: 50rem;
- }
- .off-canvas-content {
- padding-top: 0;
- }
- .item-data {
- padding: 15px;
- }
- .item-data h4::after {
- top: 60px;
- }
- .item-data a.button {
- margin-top: 10px;
- }
- .ref-scr {
- padding-left: 0.3rem;
- padding-right: 0.3rem;
- }
- .detail-info {
- padding-left: 1.5rem !important;
- padding-right: 1.5rem !important;
- }
- .detail-buttons {
- text-align: center;
- }
- .pull-right-for-small {
- float: right;
- }
- [type="text"],[type="password"],[type="date"],[type="datetime"],[type="datetime-local"],[type="month"],[type="week"],[type="email"],[type="number"],[type="search"],[type="tel"],[type="time"],[type="url"],[type="color"],textarea,[type="text"]:focus,[type="password"]:focus,[type="date"]:focus,[type="datetime"]:focus,[type="datetime-local"]:focus,[type="month"]:focus,[type="week"]:focus,[type="email"]:focus,[type="number"]:focus,[type="search"]:focus,[type="tel"]:focus,[type="time"]:focus,[type="url"]:focus,[type="color"]:focus,textarea:focus {
- margin-bottom: 0.4rem;
- }
- .button-medium-centered {
- margin: auto;
- text-align: center;
- display: block;
- }
- .member-list {
- margin-top: 25px;
- border-right: 0;
- }
- .contact-address,.members {
- float: left;
- width: 50%;
- }
- .contact-address .small-8 {
- text-align: right;
- padding-top: 30px;
- padding-bottom: 30px;
- }
- .members {
- margin-top: 0;
- }
- .off-canvas {
- background-color: rgba(88, 89, 91, 0.95);
- }
- #responsive-menu .main-menu {
- text-align: center;
- }
- .off-canvas#responsive-menu .main-menu.menu > li > a {
- font-size: 1.7rem;
- }
- .off-canvas#responsive-menu .main-menu.menu > li > a:hover,.off-canvas#responsive-menu .main-menu.menu > li.active > a {
- color: #7cad2a;
- }
- .off-canvas#responsive-menu .main-menu.menu > li.active > a {
- font-size: 2.2rem;
- }
-}
-
-
-@media (max-width: 850px) {
-
- .row:not(.nochange) {
- max-width: 45rem;
- }
- .item-data {
- padding: 5px;
- font-size: 0.8rem;
- }
- .item-data h4 {
- margin-top: 5px;
- margin-bottom: 5px;
- }
- .item-data h4::after {
- top: 35px;
- }
- .item-data a.button {
- margin-top: 10px;
- }
- .item-data p {
- line-height: 1.2;
- }
-}
-
-
-@media (max-width: 750px) {
-
- .row:not(.nochange) {
- max-width: 40rem;
- }
-}
-
-
-@media (max-width: 639px) {
-
- .row:not(.nochange) {
- max-width: 30rem;
- }
- .ref-scr {
- margin-bottom: 0;
- }
- .detail-info {
- margin-top: 15px;
- }
- .item-data p,.item-data a,.item-data h4 {
- color: #ffffff;
- }
- .item-data h4 {
- font-size: 1rem;
- margin-top: 20px;
- display: block;
- margin-bottom: 15px;
- }
- .item-data h4:after {
- content: '';
- width: 10%;
- height: 1px;
- background-color: #fefefe;
- display: inline-block;
- position: absolute;
- top: 50px;
- left: 45%;
- }
- .item-data a {
- text-transform: uppercase;
- }
-}
-
-
-@media (max-width: 530px) {
-
- .row:not(.nochange) {
- padding-left: 20px;
- padding-right: 20px;
- }
- .detail-buttons .m-l-25 {
- margin-left: 0;
- }
-}
-
-
-@media (max-width: 500px) {
-
- .item-data h4:after {
- display: none;
- }
- .item-data h4 {
- margin-top: 10px;
- margin-bottom: 5px;
- }
- .item-data p {
- display: none;
- }
- .item-data a.button {
- margin-top: 0;
- }
- .contact-address .small-4 {
- display: none;
- }
- .contact-address,.members,.contact-address .small-8 {
- float: left;
- width: 100%;
- }
- .contact-address .small-8 {
- text-align: center;
- }
- .members {
- margin-top: 25px;
- }
- .what-we-know-holder {
- left: 0;
- height: 152px;
- }
- .what-we-know:nth-child(2) {
- left: 70px;
- }
- .what-we-know:nth-child(3) {
- left: 140px;
- }
- .what-we-know:nth-child(4) {
- left: 210px;
- }
- .what-we-know:nth-child(5) {
- left: 280px;
- }
- .what-we-know:nth-child(6) {
- left: 0;
- top: 76px;
- }
- .what-we-know:nth-child(7) {
- left: 70px;
- top: 114px;
- }
- .what-we-know:nth-child(8) {
- left: 140px;
- top: 76px;
- }
- .what-we-know:nth-child(9) {
- left: 210px;
- top: 114px;
- }
-}
-
-
-@media (max-width: 400px) {
-
- .title-bar-title img {
- width: 100px;
- height: auto;
- margin-top: 17px;
- }
- a#responsive-menu-button {
- font-size: 1rem;
- }
- .off-canvas#responsive-menu .main-menu.menu > li > a {
- font-size: 1.3rem;
- }
- .off-canvas#responsive-menu .main-menu.menu > li.active > a {
- font-size: 1.6rem;
- }
-}
-
-.dark-background {
- background-color: #58595b;
- color: #fefefe;
- padding: 1em;
-}
-
-.dark-background h2, .dark-background h3 {
- text-align: center;
-}
-
-.dark-background table {
- color: #fefefe;
- width: 85%;
- margin: 0 auto;
- border: none;
-}
-.dark-background table tbody {
- border: none;
- background-color: transparent !important;
-}
-
-.dark-background table td:nth-child(2) {
- text-align: right;
-}
-
-.dark-background table tbody tr,.dark-background table tbody tr:nth-child(2n) {
- background-color: transparent !important;
-}
-.dark-background table tbody tr td {
- padding: 0.2rem 0.625rem 0.2rem 0;
- border: none;
-}
-.dark-background table tbody tr td:first-child:before {
- content: '•';
- margin-right: 5px;
- color: #7cad2a;
-}
-
-
-.flip-container {
- -webkit-perspective: 1000px;
- perspective: 1000px;
-}
-
-.flip-container:hover .flipper,.flip-container.hover .flipper {
- -webkit-transform: rotateY(180deg);
- transform: rotateY(180deg);
-}
-.flip-container,.front,.back {
- width: 165px;
- height: 137px;
-}
-
-.flipper {
- transition: 0.6s;
- -webkit-transform-style: preserve-3d;
- transform-style: preserve-3d;
- position: relative;
-}
-
-.front,.back {
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- position: absolute;
- top: 0;
- left: 0;
-}
-
-.front {
- z-index: 2;
- color: #ffffff;
- text-transform: uppercase;
- text-align: center;
- font-weight: 500;
- padding-top: 27%;
- -webkit-transform: rotateY(0deg);
- transform: rotateY(0deg);
- background: url(../images/hexagon_grey.png);
- background-size: cover;
-}
-.outline {
- position: absolute;
- width: 166px;
- height: 137px;
- z-index: 2;
- background: url(../images/hexagon_green_outline.png);
- background-size: cover;
-}
-.outline-grey {
- position: absolute;
- width: 165px;
- height: 137px;
- z-index: 2;
- background: url(../images/hexagon_grey_outline.png);
- background-size: cover;
-}
-
-.back {
- color: #ffffff;
- text-align: center;
- font-weight: 500;
- padding-top: 18%;
- -webkit-transform: rotateY(180deg);
- transform: rotateY(180deg);
- background: url(../images/hexagon_green.png);
- background-size: cover;
-}
-
-.b-lightbox-holder {
- background-color: rgba(10, 10, 10, 0.85);
- width: 100%;
- height: 100%;
- position: fixed;
- top: 0;
- left: 0;
- display: none;
- z-index: 1000;
-}
-.b-lightbox-image {
- display: none;
- border-radius: 0;
- max-height: 90%;
- max-width: 90%;
- position: fixed;
- margin: 0 auto;
- z-index: 1001;
-}
-.b-lightbox-close-button {
- z-index: 1100;
- display: block;
- position: fixed;
- top: 8px;
- right: 8px;
- font-size: 14px;
- color: rgba(254, 254, 254, 0.8);
- cursor: pointer;
- font-weight: 700;
-}
-.b-lightbox-close-button:hover {
- font-weight: 700;
-}
-.b-lightbox-direction {
- z-index: 1050;
- height: 100%;
- font-size: 10em;
- cursor: pointer;
- display: inline-block;
- min-width: 10%;
- text-align: center;
- position: absolute;
- top: 0;
-}
-.b-lightbox-direction.next {
- right: 0;
-}
-.b-lightbox-direction.previous {
- left: 0;
-}
-.b-lightbox-direction:hover {
- background-color: rgba(254, 254, 254, 0.1);
- text-decoration: none;
-}
-.b-lightbox-direction:before {
- content: '';
- height: 35%;
- display: block;
- width: 100%;
-}
-.b-lightbox-label {
- box-sizing: border-box;
- display: none;
- z-index: 1015;
- background-color: rgba(65, 64, 66, 0.9);
- color: rgba(254, 254, 254, 0.95);
- font-weight: 500;
- position: absolute;
- padding: 10px;
- font-size: 13px;
-}
-@charset "UTF-8";
-
-
-
-
-
-
-
-
-article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary {
- display: block;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-@media screen and (min-width: 40em) {
-
- .row .row {
- margin-left: -0.9375rem;
- margin-right: -0.9375rem;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .column,.columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .medium-1 {
- width: 8.33333%;
- }
- .medium-push-1 {
- position: relative;
- left: 8.33333%;
- }
- .medium-pull-1 {
- position: relative;
- left: -8.33333%;
- }
- .medium-offset-0 {
- margin-left: 0%;
- }
- .medium-2 {
- width: 16.66667%;
- }
- .medium-push-2 {
- position: relative;
- left: 16.66667%;
- }
- .medium-pull-2 {
- position: relative;
- left: -16.66667%;
- }
- .medium-offset-1 {
- margin-left: 8.33333%;
- }
- .medium-3 {
- width: 25%;
- }
- .medium-push-3 {
- position: relative;
- left: 25%;
- }
- .medium-pull-3 {
- position: relative;
- left: -25%;
- }
- .medium-offset-2 {
- margin-left: 16.66667%;
- }
- .medium-4 {
- width: 33.33333%;
- }
- .medium-push-4 {
- position: relative;
- left: 33.33333%;
- }
- .medium-pull-4 {
- position: relative;
- left: -33.33333%;
- }
- .medium-offset-3 {
- margin-left: 25%;
- }
- .medium-5 {
- width: 41.66667%;
- }
- .medium-push-5 {
- position: relative;
- left: 41.66667%;
- }
- .medium-pull-5 {
- position: relative;
- left: -41.66667%;
- }
- .medium-offset-4 {
- margin-left: 33.33333%;
- }
- .medium-6 {
- width: 50%;
- }
- .medium-push-6 {
- position: relative;
- left: 50%;
- }
- .medium-pull-6 {
- position: relative;
- left: -50%;
- }
- .medium-offset-5 {
- margin-left: 41.66667%;
- }
- .medium-7 {
- width: 58.33333%;
- }
- .medium-push-7 {
- position: relative;
- left: 58.33333%;
- }
- .medium-pull-7 {
- position: relative;
- left: -58.33333%;
- }
- .medium-offset-6 {
- margin-left: 50%;
- }
- .medium-8 {
- width: 66.66667%;
- }
- .medium-push-8 {
- position: relative;
- left: 66.66667%;
- }
- .medium-pull-8 {
- position: relative;
- left: -66.66667%;
- }
- .medium-offset-7 {
- margin-left: 58.33333%;
- }
- .medium-9 {
- width: 75%;
- }
- .medium-push-9 {
- position: relative;
- left: 75%;
- }
- .medium-pull-9 {
- position: relative;
- left: -75%;
- }
- .medium-offset-8 {
- margin-left: 66.66667%;
- }
- .medium-10 {
- width: 83.33333%;
- }
- .medium-push-10 {
- position: relative;
- left: 83.33333%;
- }
- .medium-pull-10 {
- position: relative;
- left: -83.33333%;
- }
- .medium-offset-9 {
- margin-left: 75%;
- }
- .medium-11 {
- width: 91.66667%;
- }
- .medium-push-11 {
- position: relative;
- left: 91.66667%;
- }
- .medium-pull-11 {
- position: relative;
- left: -91.66667%;
- }
- .medium-offset-10 {
- margin-left: 83.33333%;
- }
- .medium-12 {
- width: 100%;
- }
- .medium-offset-11 {
- margin-left: 91.66667%;
- }
- .medium-up-1 > .column,.medium-up-1 > .columns {
- width: 100%;
- float: left;
- }
- .medium-up-1 > .column:nth-of-type(1n),.medium-up-1 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-1 > .column:nth-of-type(1n+1),.medium-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
- }
- .medium-up-1 > .column:last-child,.medium-up-1 > .columns:last-child {
- float: left;
- }
- .medium-up-2 > .column,.medium-up-2 > .columns {
- width: 50%;
- float: left;
- }
- .medium-up-2 > .column:nth-of-type(1n),.medium-up-2 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-2 > .column:nth-of-type(2n+1),.medium-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
- }
- .medium-up-2 > .column:last-child,.medium-up-2 > .columns:last-child {
- float: left;
- }
- .medium-up-3 > .column,.medium-up-3 > .columns {
- width: 33.33333%;
- float: left;
- }
- .medium-up-3 > .column:nth-of-type(1n),.medium-up-3 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-3 > .column:nth-of-type(3n+1),.medium-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
- }
- .medium-up-3 > .column:last-child,.medium-up-3 > .columns:last-child {
- float: left;
- }
- .medium-up-4 > .column,.medium-up-4 > .columns {
- width: 25%;
- float: left;
- }
- .medium-up-4 > .column:nth-of-type(1n),.medium-up-4 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-4 > .column:nth-of-type(4n+1),.medium-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
- }
- .medium-up-4 > .column:last-child,.medium-up-4 > .columns:last-child {
- float: left;
- }
- .medium-up-5 > .column,.medium-up-5 > .columns {
- width: 20%;
- float: left;
- }
- .medium-up-5 > .column:nth-of-type(1n),.medium-up-5 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-5 > .column:nth-of-type(5n+1),.medium-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
- }
- .medium-up-5 > .column:last-child,.medium-up-5 > .columns:last-child {
- float: left;
- }
- .medium-up-6 > .column,.medium-up-6 > .columns {
- width: 16.66667%;
- float: left;
- }
- .medium-up-6 > .column:nth-of-type(1n),.medium-up-6 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-6 > .column:nth-of-type(6n+1),.medium-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
- }
- .medium-up-6 > .column:last-child,.medium-up-6 > .columns:last-child {
- float: left;
- }
- .medium-up-7 > .column,.medium-up-7 > .columns {
- width: 14.28571%;
- float: left;
- }
- .medium-up-7 > .column:nth-of-type(1n),.medium-up-7 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-7 > .column:nth-of-type(7n+1),.medium-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
- }
- .medium-up-7 > .column:last-child,.medium-up-7 > .columns:last-child {
- float: left;
- }
- .medium-up-8 > .column,.medium-up-8 > .columns {
- width: 12.5%;
- float: left;
- }
- .medium-up-8 > .column:nth-of-type(1n),.medium-up-8 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .medium-up-8 > .column:nth-of-type(8n+1),.medium-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
- }
- .medium-up-8 > .column:last-child,.medium-up-8 > .columns:last-child {
- float: left;
- }
- .medium-collapse > .column,.medium-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
- }
- .medium-collapse .row {
- margin-left: 0;
- margin-right: 0;
- }
- .medium-uncollapse > .column,.medium-uncollapse > .columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
- .medium-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
- }
- .medium-uncentered,.medium-push-0,.medium-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .large-1 {
- width: 8.33333%;
- }
- .large-push-1 {
- position: relative;
- left: 8.33333%;
- }
- .large-pull-1 {
- position: relative;
- left: -8.33333%;
- }
- .large-offset-0 {
- margin-left: 0%;
- }
- .large-2 {
- width: 16.66667%;
- }
- .large-push-2 {
- position: relative;
- left: 16.66667%;
- }
- .large-pull-2 {
- position: relative;
- left: -16.66667%;
- }
- .large-offset-1 {
- margin-left: 8.33333%;
- }
- .large-3 {
- width: 25%;
- }
- .large-push-3 {
- position: relative;
- left: 25%;
- }
- .large-pull-3 {
- position: relative;
- left: -25%;
- }
- .large-offset-2 {
- margin-left: 16.66667%;
- }
- .large-4 {
- width: 33.33333%;
- }
- .large-push-4 {
- position: relative;
- left: 33.33333%;
- }
- .large-pull-4 {
- position: relative;
- left: -33.33333%;
- }
- .large-offset-3 {
- margin-left: 25%;
- }
- .large-5 {
- width: 41.66667%;
- }
- .large-push-5 {
- position: relative;
- left: 41.66667%;
- }
- .large-pull-5 {
- position: relative;
- left: -41.66667%;
- }
- .large-offset-4 {
- margin-left: 33.33333%;
- }
- .large-6 {
- width: 50%;
- }
- .large-push-6 {
- position: relative;
- left: 50%;
- }
- .large-pull-6 {
- position: relative;
- left: -50%;
- }
- .large-offset-5 {
- margin-left: 41.66667%;
- }
- .large-7 {
- width: 58.33333%;
- }
- .large-push-7 {
- position: relative;
- left: 58.33333%;
- }
- .large-pull-7 {
- position: relative;
- left: -58.33333%;
- }
- .large-offset-6 {
- margin-left: 50%;
- }
- .large-8 {
- width: 66.66667%;
- }
- .large-push-8 {
- position: relative;
- left: 66.66667%;
- }
- .large-pull-8 {
- position: relative;
- left: -66.66667%;
- }
- .large-offset-7 {
- margin-left: 58.33333%;
- }
- .large-9 {
- width: 75%;
- }
- .large-push-9 {
- position: relative;
- left: 75%;
- }
- .large-pull-9 {
- position: relative;
- left: -75%;
- }
- .large-offset-8 {
- margin-left: 66.66667%;
- }
- .large-10 {
- width: 83.33333%;
- }
- .large-push-10 {
- position: relative;
- left: 83.33333%;
- }
- .large-pull-10 {
- position: relative;
- left: -83.33333%;
- }
- .large-offset-9 {
- margin-left: 75%;
- }
- .large-11 {
- width: 91.66667%;
- }
- .large-push-11 {
- position: relative;
- left: 91.66667%;
- }
- .large-pull-11 {
- position: relative;
- left: -91.66667%;
- }
- .large-offset-10 {
- margin-left: 83.33333%;
- }
- .large-12 {
- width: 100%;
- }
- .large-offset-11 {
- margin-left: 91.66667%;
- }
- .large-up-1 > .column,.large-up-1 > .columns {
- width: 100%;
- float: left;
- }
- .large-up-1 > .column:nth-of-type(1n),.large-up-1 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-1 > .column:nth-of-type(1n+1),.large-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
- }
- .large-up-1 > .column:last-child,.large-up-1 > .columns:last-child {
- float: left;
- }
- .large-up-2 > .column,.large-up-2 > .columns {
- width: 50%;
- float: left;
- }
- .large-up-2 > .column:nth-of-type(1n),.large-up-2 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-2 > .column:nth-of-type(2n+1),.large-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
- }
- .large-up-2 > .column:last-child,.large-up-2 > .columns:last-child {
- float: left;
- }
- .large-up-3 > .column,.large-up-3 > .columns {
- width: 33.33333%;
- float: left;
- }
- .large-up-3 > .column:nth-of-type(1n),.large-up-3 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-3 > .column:nth-of-type(3n+1),.large-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
- }
- .large-up-3 > .column:last-child,.large-up-3 > .columns:last-child {
- float: left;
- }
- .large-up-4 > .column,.large-up-4 > .columns {
- width: 25%;
- float: left;
- }
- .large-up-4 > .column:nth-of-type(1n),.large-up-4 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-4 > .column:nth-of-type(4n+1),.large-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
- }
- .large-up-4 > .column:last-child,.large-up-4 > .columns:last-child {
- float: left;
- }
- .large-up-5 > .column,.large-up-5 > .columns {
- width: 20%;
- float: left;
- }
- .large-up-5 > .column:nth-of-type(1n),.large-up-5 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-5 > .column:nth-of-type(5n+1),.large-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
- }
- .large-up-5 > .column:last-child,.large-up-5 > .columns:last-child {
- float: left;
- }
- .large-up-6 > .column,.large-up-6 > .columns {
- width: 16.66667%;
- float: left;
- }
- .large-up-6 > .column:nth-of-type(1n),.large-up-6 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-6 > .column:nth-of-type(6n+1),.large-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
- }
- .large-up-6 > .column:last-child,.large-up-6 > .columns:last-child {
- float: left;
- }
- .large-up-7 > .column,.large-up-7 > .columns {
- width: 14.28571%;
- float: left;
- }
- .large-up-7 > .column:nth-of-type(1n),.large-up-7 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-7 > .column:nth-of-type(7n+1),.large-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
- }
- .large-up-7 > .column:last-child,.large-up-7 > .columns:last-child {
- float: left;
- }
- .large-up-8 > .column,.large-up-8 > .columns {
- width: 12.5%;
- float: left;
- }
- .large-up-8 > .column:nth-of-type(1n),.large-up-8 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .large-up-8 > .column:nth-of-type(8n+1),.large-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
- }
- .large-up-8 > .column:last-child,.large-up-8 > .columns:last-child {
- float: left;
- }
- .large-collapse > .column,.large-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
- }
- .large-collapse .row {
- margin-left: 0;
- margin-right: 0;
- }
- .large-uncollapse > .column,.large-uncollapse > .columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
- .large-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
- }
- .large-uncentered,.large-push-0,.large-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .xlarge-1 {
- width: 8.33333%;
- }
- .xlarge-push-1 {
- position: relative;
- left: 8.33333%;
- }
- .xlarge-pull-1 {
- position: relative;
- left: -8.33333%;
- }
- .xlarge-offset-0 {
- margin-left: 0%;
- }
- .xlarge-2 {
- width: 16.66667%;
- }
- .xlarge-push-2 {
- position: relative;
- left: 16.66667%;
- }
- .xlarge-pull-2 {
- position: relative;
- left: -16.66667%;
- }
- .xlarge-offset-1 {
- margin-left: 8.33333%;
- }
- .xlarge-3 {
- width: 25%;
- }
- .xlarge-push-3 {
- position: relative;
- left: 25%;
- }
- .xlarge-pull-3 {
- position: relative;
- left: -25%;
- }
- .xlarge-offset-2 {
- margin-left: 16.66667%;
- }
- .xlarge-4 {
- width: 33.33333%;
- }
- .xlarge-push-4 {
- position: relative;
- left: 33.33333%;
- }
- .xlarge-pull-4 {
- position: relative;
- left: -33.33333%;
- }
- .xlarge-offset-3 {
- margin-left: 25%;
- }
- .xlarge-5 {
- width: 41.66667%;
- }
- .xlarge-push-5 {
- position: relative;
- left: 41.66667%;
- }
- .xlarge-pull-5 {
- position: relative;
- left: -41.66667%;
- }
- .xlarge-offset-4 {
- margin-left: 33.33333%;
- }
- .xlarge-6 {
- width: 50%;
- }
- .xlarge-push-6 {
- position: relative;
- left: 50%;
- }
- .xlarge-pull-6 {
- position: relative;
- left: -50%;
- }
- .xlarge-offset-5 {
- margin-left: 41.66667%;
- }
- .xlarge-7 {
- width: 58.33333%;
- }
- .xlarge-push-7 {
- position: relative;
- left: 58.33333%;
- }
- .xlarge-pull-7 {
- position: relative;
- left: -58.33333%;
- }
- .xlarge-offset-6 {
- margin-left: 50%;
- }
- .xlarge-8 {
- width: 66.66667%;
- }
- .xlarge-push-8 {
- position: relative;
- left: 66.66667%;
- }
- .xlarge-pull-8 {
- position: relative;
- left: -66.66667%;
- }
- .xlarge-offset-7 {
- margin-left: 58.33333%;
- }
- .xlarge-9 {
- width: 75%;
- }
- .xlarge-push-9 {
- position: relative;
- left: 75%;
- }
- .xlarge-pull-9 {
- position: relative;
- left: -75%;
- }
- .xlarge-offset-8 {
- margin-left: 66.66667%;
- }
- .xlarge-10 {
- width: 83.33333%;
- }
- .xlarge-push-10 {
- position: relative;
- left: 83.33333%;
- }
- .xlarge-pull-10 {
- position: relative;
- left: -83.33333%;
- }
- .xlarge-offset-9 {
- margin-left: 75%;
- }
- .xlarge-11 {
- width: 91.66667%;
- }
- .xlarge-push-11 {
- position: relative;
- left: 91.66667%;
- }
- .xlarge-pull-11 {
- position: relative;
- left: -91.66667%;
- }
- .xlarge-offset-10 {
- margin-left: 83.33333%;
- }
- .xlarge-12 {
- width: 100%;
- }
- .xlarge-offset-11 {
- margin-left: 91.66667%;
- }
- .xlarge-up-1 > .column,.xlarge-up-1 > .columns {
- width: 100%;
- float: left;
- }
- .xlarge-up-1 > .column:nth-of-type(1n),.xlarge-up-1 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-1 > .column:nth-of-type(1n+1),.xlarge-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
- }
- .xlarge-up-1 > .column:last-child,.xlarge-up-1 > .columns:last-child {
- float: left;
- }
- .xlarge-up-2 > .column,.xlarge-up-2 > .columns {
- width: 50%;
- float: left;
- }
- .xlarge-up-2 > .column:nth-of-type(1n),.xlarge-up-2 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-2 > .column:nth-of-type(2n+1),.xlarge-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
- }
- .xlarge-up-2 > .column:last-child,.xlarge-up-2 > .columns:last-child {
- float: left;
- }
- .xlarge-up-3 > .column,.xlarge-up-3 > .columns {
- width: 33.33333%;
- float: left;
- }
- .xlarge-up-3 > .column:nth-of-type(1n),.xlarge-up-3 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-3 > .column:nth-of-type(3n+1),.xlarge-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
- }
- .xlarge-up-3 > .column:last-child,.xlarge-up-3 > .columns:last-child {
- float: left;
- }
- .xlarge-up-4 > .column,.xlarge-up-4 > .columns {
- width: 25%;
- float: left;
- }
- .xlarge-up-4 > .column:nth-of-type(1n),.xlarge-up-4 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-4 > .column:nth-of-type(4n+1),.xlarge-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
- }
- .xlarge-up-4 > .column:last-child,.xlarge-up-4 > .columns:last-child {
- float: left;
- }
- .xlarge-up-5 > .column,.xlarge-up-5 > .columns {
- width: 20%;
- float: left;
- }
- .xlarge-up-5 > .column:nth-of-type(1n),.xlarge-up-5 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-5 > .column:nth-of-type(5n+1),.xlarge-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
- }
- .xlarge-up-5 > .column:last-child,.xlarge-up-5 > .columns:last-child {
- float: left;
- }
- .xlarge-up-6 > .column,.xlarge-up-6 > .columns {
- width: 16.66667%;
- float: left;
- }
- .xlarge-up-6 > .column:nth-of-type(1n),.xlarge-up-6 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-6 > .column:nth-of-type(6n+1),.xlarge-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
- }
- .xlarge-up-6 > .column:last-child,.xlarge-up-6 > .columns:last-child {
- float: left;
- }
- .xlarge-up-7 > .column,.xlarge-up-7 > .columns {
- width: 14.28571%;
- float: left;
- }
- .xlarge-up-7 > .column:nth-of-type(1n),.xlarge-up-7 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-7 > .column:nth-of-type(7n+1),.xlarge-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
- }
- .xlarge-up-7 > .column:last-child,.xlarge-up-7 > .columns:last-child {
- float: left;
- }
- .xlarge-up-8 > .column,.xlarge-up-8 > .columns {
- width: 12.5%;
- float: left;
- }
- .xlarge-up-8 > .column:nth-of-type(1n),.xlarge-up-8 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xlarge-up-8 > .column:nth-of-type(8n+1),.xlarge-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
- }
- .xlarge-up-8 > .column:last-child,.xlarge-up-8 > .columns:last-child {
- float: left;
- }
- .xlarge-collapse > .column,.xlarge-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
- }
- .xlarge-collapse .row {
- margin-left: 0;
- margin-right: 0;
- }
- .xlarge-uncollapse > .column,.xlarge-uncollapse > .columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
- .xlarge-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
- }
- .xlarge-uncentered,.xlarge-push-0,.xlarge-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .xxlarge-1 {
- width: 8.33333%;
- }
- .xxlarge-push-1 {
- position: relative;
- left: 8.33333%;
- }
- .xxlarge-pull-1 {
- position: relative;
- left: -8.33333%;
- }
- .xxlarge-offset-0 {
- margin-left: 0%;
- }
- .xxlarge-2 {
- width: 16.66667%;
- }
- .xxlarge-push-2 {
- position: relative;
- left: 16.66667%;
- }
- .xxlarge-pull-2 {
- position: relative;
- left: -16.66667%;
- }
- .xxlarge-offset-1 {
- margin-left: 8.33333%;
- }
- .xxlarge-3 {
- width: 25%;
- }
- .xxlarge-push-3 {
- position: relative;
- left: 25%;
- }
- .xxlarge-pull-3 {
- position: relative;
- left: -25%;
- }
- .xxlarge-offset-2 {
- margin-left: 16.66667%;
- }
- .xxlarge-4 {
- width: 33.33333%;
- }
- .xxlarge-push-4 {
- position: relative;
- left: 33.33333%;
- }
- .xxlarge-pull-4 {
- position: relative;
- left: -33.33333%;
- }
- .xxlarge-offset-3 {
- margin-left: 25%;
- }
- .xxlarge-5 {
- width: 41.66667%;
- }
- .xxlarge-push-5 {
- position: relative;
- left: 41.66667%;
- }
- .xxlarge-pull-5 {
- position: relative;
- left: -41.66667%;
- }
- .xxlarge-offset-4 {
- margin-left: 33.33333%;
- }
- .xxlarge-6 {
- width: 50%;
- }
- .xxlarge-push-6 {
- position: relative;
- left: 50%;
- }
- .xxlarge-pull-6 {
- position: relative;
- left: -50%;
- }
- .xxlarge-offset-5 {
- margin-left: 41.66667%;
- }
- .xxlarge-7 {
- width: 58.33333%;
- }
- .xxlarge-push-7 {
- position: relative;
- left: 58.33333%;
- }
- .xxlarge-pull-7 {
- position: relative;
- left: -58.33333%;
- }
- .xxlarge-offset-6 {
- margin-left: 50%;
- }
- .xxlarge-8 {
- width: 66.66667%;
- }
- .xxlarge-push-8 {
- position: relative;
- left: 66.66667%;
- }
- .xxlarge-pull-8 {
- position: relative;
- left: -66.66667%;
- }
- .xxlarge-offset-7 {
- margin-left: 58.33333%;
- }
- .xxlarge-9 {
- width: 75%;
- }
- .xxlarge-push-9 {
- position: relative;
- left: 75%;
- }
- .xxlarge-pull-9 {
- position: relative;
- left: -75%;
- }
- .xxlarge-offset-8 {
- margin-left: 66.66667%;
- }
- .xxlarge-10 {
- width: 83.33333%;
- }
- .xxlarge-push-10 {
- position: relative;
- left: 83.33333%;
- }
- .xxlarge-pull-10 {
- position: relative;
- left: -83.33333%;
- }
- .xxlarge-offset-9 {
- margin-left: 75%;
- }
- .xxlarge-11 {
- width: 91.66667%;
- }
- .xxlarge-push-11 {
- position: relative;
- left: 91.66667%;
- }
- .xxlarge-pull-11 {
- position: relative;
- left: -91.66667%;
- }
- .xxlarge-offset-10 {
- margin-left: 83.33333%;
- }
- .xxlarge-12 {
- width: 100%;
- }
- .xxlarge-offset-11 {
- margin-left: 91.66667%;
- }
- .xxlarge-up-1 > .column,.xxlarge-up-1 > .columns {
- width: 100%;
- float: left;
- }
- .xxlarge-up-1 > .column:nth-of-type(1n),.xxlarge-up-1 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-1 > .column:nth-of-type(1n+1),.xxlarge-up-1 > .columns:nth-of-type(1n+1) {
- clear: both;
- }
- .xxlarge-up-1 > .column:last-child,.xxlarge-up-1 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-2 > .column,.xxlarge-up-2 > .columns {
- width: 50%;
- float: left;
- }
- .xxlarge-up-2 > .column:nth-of-type(1n),.xxlarge-up-2 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-2 > .column:nth-of-type(2n+1),.xxlarge-up-2 > .columns:nth-of-type(2n+1) {
- clear: both;
- }
- .xxlarge-up-2 > .column:last-child,.xxlarge-up-2 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-3 > .column,.xxlarge-up-3 > .columns {
- width: 33.33333%;
- float: left;
- }
- .xxlarge-up-3 > .column:nth-of-type(1n),.xxlarge-up-3 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-3 > .column:nth-of-type(3n+1),.xxlarge-up-3 > .columns:nth-of-type(3n+1) {
- clear: both;
- }
- .xxlarge-up-3 > .column:last-child,.xxlarge-up-3 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-4 > .column,.xxlarge-up-4 > .columns {
- width: 25%;
- float: left;
- }
- .xxlarge-up-4 > .column:nth-of-type(1n),.xxlarge-up-4 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-4 > .column:nth-of-type(4n+1),.xxlarge-up-4 > .columns:nth-of-type(4n+1) {
- clear: both;
- }
- .xxlarge-up-4 > .column:last-child,.xxlarge-up-4 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-5 > .column,.xxlarge-up-5 > .columns {
- width: 20%;
- float: left;
- }
- .xxlarge-up-5 > .column:nth-of-type(1n),.xxlarge-up-5 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-5 > .column:nth-of-type(5n+1),.xxlarge-up-5 > .columns:nth-of-type(5n+1) {
- clear: both;
- }
- .xxlarge-up-5 > .column:last-child,.xxlarge-up-5 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-6 > .column,.xxlarge-up-6 > .columns {
- width: 16.66667%;
- float: left;
- }
- .xxlarge-up-6 > .column:nth-of-type(1n),.xxlarge-up-6 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-6 > .column:nth-of-type(6n+1),.xxlarge-up-6 > .columns:nth-of-type(6n+1) {
- clear: both;
- }
- .xxlarge-up-6 > .column:last-child,.xxlarge-up-6 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-7 > .column,.xxlarge-up-7 > .columns {
- width: 14.28571%;
- float: left;
- }
- .xxlarge-up-7 > .column:nth-of-type(1n),.xxlarge-up-7 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-7 > .column:nth-of-type(7n+1),.xxlarge-up-7 > .columns:nth-of-type(7n+1) {
- clear: both;
- }
- .xxlarge-up-7 > .column:last-child,.xxlarge-up-7 > .columns:last-child {
- float: left;
- }
- .xxlarge-up-8 > .column,.xxlarge-up-8 > .columns {
- width: 12.5%;
- float: left;
- }
- .xxlarge-up-8 > .column:nth-of-type(1n),.xxlarge-up-8 > .columns:nth-of-type(1n) {
- clear: none;
- }
- .xxlarge-up-8 > .column:nth-of-type(8n+1),.xxlarge-up-8 > .columns:nth-of-type(8n+1) {
- clear: both;
- }
- .xxlarge-up-8 > .column:last-child,.xxlarge-up-8 > .columns:last-child {
- float: left;
- }
- .xxlarge-collapse > .column,.xxlarge-collapse > .columns {
- padding-left: 0;
- padding-right: 0;
- }
- .xxlarge-collapse .row {
- margin-left: 0;
- margin-right: 0;
- }
- .xxlarge-uncollapse > .column,.xxlarge-uncollapse > .columns {
- padding-left: 0.9375rem;
- padding-right: 0.9375rem;
- }
- .xxlarge-centered {
- float: none;
- margin-left: auto;
- margin-right: auto;
- }
- .xxlarge-uncentered,.xxlarge-push-0,.xxlarge-pull-0 {
- position: static;
- margin-left: 0;
- margin-right: 0;
- float: left;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .medium-text-left {
- text-align: left;
- }
- .medium-text-right {
- text-align: right;
- }
- .medium-text-center {
- text-align: center;
- }
- .medium-text-justify {
- text-align: justify;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .large-text-left {
- text-align: left;
- }
- .large-text-right {
- text-align: right;
- }
- .large-text-center {
- text-align: center;
- }
- .large-text-justify {
- text-align: justify;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .xlarge-text-left {
- text-align: left;
- }
- .xlarge-text-right {
- text-align: right;
- }
- .xlarge-text-center {
- text-align: center;
- }
- .xlarge-text-justify {
- text-align: justify;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .xxlarge-text-left {
- text-align: left;
- }
- .xxlarge-text-right {
- text-align: right;
- }
- .xxlarge-text-center {
- text-align: center;
- }
- .xxlarge-text-justify {
- text-align: justify;
- }
-}
-
-
-@media print {
-
- * {
- background: transparent !important;
- color: black !important;
- box-shadow: none !important;
- text-shadow: none !important;
- }
- .show-for-print {
- display: block !important;
- }
- .hide-for-print {
- display: none !important;
- }
- table.show-for-print {
- display: table !important;
- }
- thead.show-for-print {
- display: table-header-group !important;
- }
- tbody.show-for-print {
- display: table-row-group !important;
- }
- tr.show-for-print {
- display: table-row !important;
- }
- td.show-for-print {
- display: table-cell !important;
- }
- th.show-for-print {
- display: table-cell !important;
- }
- a,a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- .ir a:after,a[href^='javascript:']:after,a[href^='#']:after {
- content: '';
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- pre,blockquote {
- border: 1px solid #414042;
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- @page {
- margin: 0.5cm;
- }
- p,h2,h3 {
- orphans: 3;
- widows: 3;
- }
- h2,h3 {
- page-break-after: avoid;
- }
-}
-
-
-@media screen and (min-width: 0\0) {
-
- select {
- background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==");
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .button-group.stacked-for-small .button {
- width: auto;
- }
- .button-group.stacked-for-small .button:not(:last-child) {
- margin-right: 1px;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .button-group.stacked-for-medium .button {
- width: auto;
- }
- .button-group.stacked-for-medium .button:not(:last-child) {
- margin-right: 1px;
- }
-}
-
-
-@media screen and (max-width: 39.9375em) {
-
- .button-group.stacked-for-small.expanded {
- display: block;
- }
- .button-group.stacked-for-small.expanded .button {
- display: block;
- margin-right: 0;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .menu.medium-horizontal > li {
- display: table-cell;
- }
- .menu.medium-vertical > li {
- display: block;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .menu.large-horizontal > li {
- display: table-cell;
- }
- .menu.large-vertical > li {
- display: block;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .menu.xlarge-horizontal > li {
- display: table-cell;
- }
- .menu.xlarge-vertical > li {
- display: block;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .menu.xxlarge-horizontal > li {
- display: table-cell;
- }
- .menu.xxlarge-vertical > li {
- display: block;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
- }
- .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
- }
- .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
- }
- .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
- }
- .dropdown.menu.medium-vertical > li .is-dropdown-submenu {
- top: 0;
- }
- .dropdown.menu.medium-vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
- }
- .dropdown.menu.medium-vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
- }
- .dropdown.menu.medium-vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
- }
- .dropdown.menu.medium-vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- }
- .dropdown.menu.medium-vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
- }
- .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
- }
- .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
- }
- .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
- }
- .dropdown.menu.large-vertical > li .is-dropdown-submenu {
- top: 0;
- }
- .dropdown.menu.large-vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
- }
- .dropdown.menu.large-vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
- }
- .dropdown.menu.large-vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
- }
- .dropdown.menu.large-vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- }
- .dropdown.menu.large-vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .dropdown.menu.xlarge-horizontal > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
- }
- .dropdown.menu.xlarge-horizontal > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
- }
- .dropdown.menu.xlarge-horizontal > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
- }
- .dropdown.menu.xlarge-horizontal > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
- }
- .dropdown.menu.xlarge-vertical > li .is-dropdown-submenu {
- top: 0;
- }
- .dropdown.menu.xlarge-vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
- }
- .dropdown.menu.xlarge-vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
- }
- .dropdown.menu.xlarge-vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
- }
- .dropdown.menu.xlarge-vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- }
- .dropdown.menu.xlarge-vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .dropdown.menu.xxlarge-horizontal > li.opens-left > .is-dropdown-submenu {
- left: auto;
- right: 0;
- top: 100%;
- }
- .dropdown.menu.xxlarge-horizontal > li.opens-right > .is-dropdown-submenu {
- right: auto;
- left: 0;
- top: 100%;
- }
- .dropdown.menu.xxlarge-horizontal > li.is-dropdown-submenu-parent > a {
- padding-right: 1.5rem;
- position: relative;
- }
- .dropdown.menu.xxlarge-horizontal > li.is-dropdown-submenu-parent > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: #7cad2a transparent transparent;
- border-top-style: solid;
- border-bottom-width: 0;
- right: 5px;
- margin-top: -2px;
- }
- .dropdown.menu.xxlarge-vertical > li .is-dropdown-submenu {
- top: 0;
- }
- .dropdown.menu.xxlarge-vertical > li.opens-left .is-dropdown-submenu {
- left: auto;
- right: 100%;
- }
- .dropdown.menu.xxlarge-vertical > li.opens-right .is-dropdown-submenu {
- right: auto;
- left: 100%;
- }
- .dropdown.menu.xxlarge-vertical > li > a::after {
- right: 14px;
- margin-top: -3px;
- }
- .dropdown.menu.xxlarge-vertical > li.opens-left > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent #7cad2a transparent transparent;
- border-right-style: solid;
- border-left-width: 0;
- }
- .dropdown.menu.xxlarge-vertical > li.opens-right > a::after {
- content: '';
- display: block;
- width: 0;
- height: 0;
- border: inset 5px;
- border-color: transparent transparent transparent #7cad2a;
- border-left-style: solid;
- border-right-width: 0;
- }
-}
-
-
-@media screen and (max-width: 39.9375em) {
-
- .media-object.stack-for-small .media-object-section {
- padding: 0;
- padding-bottom: 1rem;
- display: block;
- }
- .media-object.stack-for-small .media-object-section img {
- width: 100%;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .position-left.reveal-for-medium {
- left: 0;
- z-index: auto;
- position: fixed;
- }
- .position-left.reveal-for-medium ~ .off-canvas-content {
- margin-left: 250px;
- }
- .position-right.reveal-for-medium {
- right: 0;
- z-index: auto;
- position: fixed;
- }
- .position-right.reveal-for-medium ~ .off-canvas-content {
- margin-right: 250px;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .position-left.reveal-for-large {
- left: 0;
- z-index: auto;
- position: fixed;
- }
- .position-left.reveal-for-large ~ .off-canvas-content {
- margin-left: 250px;
- }
- .position-right.reveal-for-large {
- right: 0;
- z-index: auto;
- position: fixed;
- }
- .position-right.reveal-for-large ~ .off-canvas-content {
- margin-right: 250px;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .position-left.reveal-for-xlarge {
- left: 0;
- z-index: auto;
- position: fixed;
- }
- .position-left.reveal-for-xlarge ~ .off-canvas-content {
- margin-left: 250px;
- }
- .position-right.reveal-for-xlarge {
- right: 0;
- z-index: auto;
- position: fixed;
- }
- .position-right.reveal-for-xlarge ~ .off-canvas-content {
- margin-right: 250px;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .position-left.reveal-for-xxlarge {
- left: 0;
- z-index: auto;
- position: fixed;
- }
- .position-left.reveal-for-xxlarge ~ .off-canvas-content {
- margin-left: 250px;
- }
- .position-right.reveal-for-xxlarge {
- right: 0;
- z-index: auto;
- position: fixed;
- }
- .position-right.reveal-for-xxlarge ~ .off-canvas-content {
- margin-right: 250px;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .pagination li {
- display: inline-block;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal {
- min-height: 0;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal {
- width: 600px;
- max-width: 75rem;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal .reveal {
- left: auto;
- right: auto;
- margin: 0 auto;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal.tiny {
- width: 30%;
- max-width: 75rem;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal.small {
- width: 50%;
- max-width: 75rem;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .reveal.large {
- width: 90%;
- max-width: 75rem;
- }
-}
-
-
-@media screen and (max-width: 39.9375em) {
-
- .reveal {
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- height: 100vh;
- min-height: 100vh;
- max-width: none;
- margin-left: 0;
- border: 0;
- border-radius: 0;
- }
-}
-
-
-@media screen and (max-width: 63.9375em) {
-
- table.stack thead {
- display: none;
- }
- table.stack tfoot {
- display: none;
- }
- table.stack tr,table.stack th,table.stack td {
- display: block;
- }
- table.stack td {
- border-top: 0;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .top-bar .top-bar-left,.top-bar .top-bar-right {
- width: auto;
- }
-}
-
-
-@media screen and (max-width: 63.9375em) {
-
- .top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right {
- width: 100%;
- }
-}
-
-
-@media screen and (max-width: 74.9375em) {
-
- .top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right {
- width: 100%;
- }
-}
-
-
-@media screen and (max-width: 89.9375em) {
-
- .top-bar.stacked-for-xlarge .top-bar-left,.top-bar.stacked-for-xlarge .top-bar-right {
- width: 100%;
- }
-}
-
-
-@media screen and (max-width: 39.9375em) {
-
- .hide-for-small-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 0em), screen and (min-width: 40em) {
-
- .show-for-small-only {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 40em) {
-
- .hide-for-medium {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 39.9375em) {
-
- .show-for-medium {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 40em) and (max-width: 63.9375em) {
-
- .hide-for-medium-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 39.9375em), screen and (min-width: 64em) {
-
- .show-for-medium-only {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 64em) {
-
- .hide-for-large {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 63.9375em) {
-
- .show-for-large {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 64em) and (max-width: 74.9375em) {
-
- .hide-for-large-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 63.9375em), screen and (min-width: 75em) {
-
- .show-for-large-only {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 75em) {
-
- .hide-for-xlarge {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 74.9375em) {
-
- .show-for-xlarge {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 75em) and (max-width: 89.9375em) {
-
- .hide-for-xlarge-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 74.9375em), screen and (min-width: 90em) {
-
- .show-for-xlarge-only {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .hide-for-xxlarge {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 89.9375em) {
-
- .show-for-xxlarge {
- display: none !important;
- }
-}
-
-
-@media screen and (min-width: 90em) {
-
- .hide-for-xxlarge-only {
- display: none !important;
- }
-}
-
-
-@media screen and (max-width: 89.9375em) {
-
- .show-for-xxlarge-only {
- display: none !important;
- }
-}
-
-
-@media screen and (orientation: landscape) {
-
- .show-for-landscape,.hide-for-portrait {
- display: block !important;
- }
-}
-
-
-@media screen and (orientation: portrait) {
-
- .show-for-landscape,.hide-for-portrait {
- display: none !important;
- }
-}
-
-
-@media screen and (orientation: landscape) {
-
- .hide-for-landscape,.show-for-portrait {
- display: none !important;
- }
-}
-
-
-@media screen and (orientation: portrait) {
-
- .hide-for-landscape,.show-for-portrait {
- display: block !important;
- }
-}
-
-
-@keyframes shake-7 {
- 0%,10%,20%,30%,40%,50%,60%,70%,80%,90% {
- -webkit-transform: translateX(7%);
- transform: translateX(7%);
- }
- 5%,15%,25%,35%,45%,55%,65%,75%,85%,95% {
- -webkit-transform: translateX(-7%);
- transform: translateX(-7%);
- }
-}
-
-
-@keyframes shake-7 {
- 0%,10%,20%,30%,40%,50%,60%,70%,80%,90% {
- -webkit-transform: translateX(7%);
- transform: translateX(7%);
- }
- 5%,15%,25%,35%,45%,55%,65%,75%,85%,95% {
- -webkit-transform: translateX(-7%);
- transform: translateX(-7%);
- }
-}
-
-
-@keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(-1turn);
- transform: rotate(-1turn);
- }
- 100% {
- -webkit-transform: rotate(0);
- transform: rotate(0);
- }
-}
-
-
-@keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(-1turn);
- transform: rotate(-1turn);
- }
- 100% {
- -webkit-transform: rotate(0);
- transform: rotate(0);
- }
-}
-
-
-@keyframes spin-cw-1turn {
- 0% {
- -webkit-transform: rotate(0);
- transform: rotate(0);
- }
- 100% {
- -webkit-transform: rotate(1turn);
- transform: rotate(1turn);
- }
-}
-
-
-@keyframes wiggle-7deg {
- 40%,50%,60% {
- -webkit-transform: rotate(7deg);
- transform: rotate(7deg);
- }
- 35%,45%,55%,65% {
- -webkit-transform: rotate(-7deg);
- transform: rotate(-7deg);
- }
- 0%,30%,70%,100% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-}
-
-
-@keyframes wiggle-7deg {
- 40%,50%,60% {
- -webkit-transform: rotate(7deg);
- transform: rotate(7deg);
- }
- 35%,45%,55%,65% {
- -webkit-transform: rotate(-7deg);
- transform: rotate(-7deg);
- }
- 0%,30%,70%,100% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-}
-
-#responsive-menu {
- box-shadow: gray 0 0 20px;
-}
-.services-pos:nth-child(1) {
- z-index: 50;
-}
-.services-pos:nth-child(2) {
- z-index: 51;
-}
-.services-pos:nth-child(3) {
- z-index: 52;
-}
-.services-pos:nth-child(4) {
- z-index: 53;
-}
-.services-pos:nth-child(5) {
- z-index: 54;
-}
-.services-pos:nth-child(6) {
- z-index: 55;
-}
-.services-pos:nth-child(7) {
- z-index: 56;
-}
-.services-pos:nth-child(8) {
- z-index: 57;
-}
-.services-pos:nth-child(9) {
- z-index: 58;
-}
-.services-pos:nth-child(10) {
- z-index: 59;
-}
-.services-pos:nth-child(11) {
- z-index: 60;
-}
-.services-pos:nth-child(12) {
- z-index: 61;
-}
-
-
-@media only screen and (min-width: 90.063em) {
-
- .services-pos:nth-child(1) {
- top: 0;
- margin-top: 302px;
- margin-left: 351px;
- }
- .services-pos:nth-child(2) {
- top: 0;
- margin-top: -217px;
- margin-left: 489px;
- }
- .services-pos:nth-child(3) {
- top: 0;
- margin-top: -138px;
- margin-left: 1037px;
- }
- .services-pos:nth-child(4) {
- top: 0;
- margin-top: -58px;
- margin-left: 625px;
- }
- .services-pos:nth-child(5) {
- top: 0;
- margin-top: -138px;
- margin-left: 900px;
- }
- .services-pos:nth-child(6) {
- top: 0;
- margin-top: -58px;
- margin-left: 489px;
- }
- .services-pos:nth-child(7) {
- top: 0;
- margin-top: -138px;
- margin-left: 762px;
- }
- .services-pos:nth-child(8) {
- top: 0;
- margin-top: -138px;
- margin-left: 1037px;
- }
- .services-pos:nth-child(9) {
- top: 0;
- margin-top: -58px;
- margin-left: 625px;
- }
- .services-pos:nth-child(10) {
- top: 0;
- margin-top: -138px;
- margin-left: 900px;
- }
- .services-pos:nth-child(11) {
- top: 0;
- margin-top: -58px;
- margin-left: 762px;
- }
- .services-pos:nth-child(12) {
- top: 0;
- margin-top: -58px;
- margin-left: 900px;
- }
-}
-
-
-
-@media only screen and (min-width: 64.063em) and (max-width: 90em) {
-
- .services-pos:nth-child(1) {
- top: 0;
- margin-top: 143px;
- margin-left: 76px;
- }
- .services-pos:nth-child(2) {
- top: 0;
- margin-top: -217px;
- margin-left: 214px;
- }
- .services-pos:nth-child(3) {
- top: 0;
- margin-top: -138px;
- margin-left: 762px;
- }
- .services-pos:nth-child(4) {
- top: 0;
- margin-top: -58px;
- margin-left: 350px;
- }
- .services-pos:nth-child(5) {
- top: 0;
- margin-top: -138px;
- margin-left: 625px;
- }
- .services-pos:nth-child(6) {
- top: 0;
- margin-top: -58px;
- margin-left: 214px;
- }
- .services-pos:nth-child(7) {
- top: 0;
- margin-top: -138px;
- margin-left: 487px;
- }
- .services-pos:nth-child(8) {
- top: 0;
- margin-top: -138px;
- margin-left: 762px;
- }
- .services-pos:nth-child(9) {
- top: 0;
- margin-top: -58px;
- margin-left: 350px;
- }
- .services-pos:nth-child(10) {
- top: 0;
- margin-top: -138px;
- margin-left: 625px;
- }
- .services-pos:nth-child(11) {
- top: 0;
- margin-top: -58px;
- margin-left: 487px;
- }
- .services-pos:nth-child(12) {
- top: 0;
- margin-top: -58px;
- margin-left: 625px;
- }
-}
-
-
-
-@media only screen and (min-width: 40.063em) and (max-width: 64em) {
-
- .services-pos:nth-child(1) {
- top: 0;
- margin-top: 126px;
- margin-left: 190px;
- }
- .services-pos:nth-child(2) {
- top: 0;
- margin-top: -217px;
- margin-left: 328px;
- }
- .services-pos:nth-child(3) {
- top: 313px;
- margin-top: -138px;
- margin-left: 328px;
- }
- .services-pos:nth-child(4) {
- top: 0;
- margin-top: -58px;
- margin-left: 464px;
- }
- .services-pos:nth-child(5) {
- top: -80px;
- margin-top: -134px;
- margin-left: 601px;
- }
- .services-pos:nth-child(6) {
- top: 0;
- margin-top: -58px;
- margin-left: 328px;
- }
- .services-pos:nth-child(7) {
- top: 0;
- margin-top: -138px;
- margin-left: 601px;
- }
- .services-pos:nth-child(8) {
- top: 80px;
- margin-top: -138px;
- margin-left: 190px;
- }
- .services-pos:nth-child(9) {
- top: 0;
- margin-top: -58px;
- margin-left: 464px;
- }
- .services-pos:nth-child(10) {
- top: 160px;
- margin-top: -138px;
- margin-left: 190px;
- }
- .services-pos:nth-child(11) {
- top: 0;
- margin-top: -58px;
- margin-left: 601px;
- }
- .services-pos:nth-child(12) {
- top: 0;
- margin-top: -58px;
- margin-left: 464px;
- }
-}
-
-
-
-@media only screen and (max-width: 40em) {
-
- .outline-holder {
- display: none;
- }
- .services-pos:nth-child(2) {
- left: calc(50% - 150px);
- }
- .services-pos:nth-child(4) {
- margin-top: 10px;
- left: calc(50% - 150px);
- }
- .services-pos:nth-child(6) {
- left: calc(50% - 15px);
- margin-top: -210px;
- }
- .services-pos:nth-child(7) {
- left: calc(50% - 15px);
- margin-top: 10px;
- }
- .services-pos:nth-child(8) {
- left: calc(50% - 150px);
- margin-top: -65px;
- }
- .services-pos:nth-child(9) {
- left: calc(50% - 15px);
- margin-top: -60px;
- }
- .services-pos:nth-child(10) {
- left: calc(50% - 15px);
- margin-top: -65px;
- }
- .services-pos:nth-child(12) {
- left: calc(50% - 150px);
- margin-top: -60px;
- }
-}
-
-
-
-@media only screen and (max-width: 1270px) and (min-width: 64.063em) {
-
- .services-pos:nth-child(3) {
- margin-top: -138px;
- top: 313px;
- margin-left: 214px;
- }
- .services-pos:nth-child(8) {
- margin-top: -138px;
- top: 80px;
- margin-left: 76px;
- }
- .services-pos:nth-child(12) {
- margin-left: 350px;
- }
-}
-
-
-@media only screen and (min-width: 40.063em) and (max-width: 850px) {
-
- .services-pos:nth-child(5) {
- margin-left: 53px;
- }
- .services-pos:nth-child(7) {
- margin-left: 53px;
- }
- .services-pos:nth-child(11) {
- margin-left: 53px;
- }
-}
-
-
-@media (max-width: 1366px) {
-
- .row:not(.nochange) {
- max-width: 60rem;
- }
-}
-
-
-@media (max-width: 1270px) {
-
- .row:not(.nochange) {
- max-width: 50rem;
- }
- h2,h5 {
- text-align: center;
- margin: auto;
- }
- .what-we-know-holder {
- left: calc(50% - 650px / 2);
- }
-}
-
-
-@media (max-width: 1100px) {
-
- .row:not(.nochange) {
- max-width: 40rem;
- }
-}
-
-
-@media (min-width: 1024px) {
-
- .medium-centered {
- float: none;
- display: block;
- margin-left: 0;
- margin-right: 0;
- }
-}
-
-
-@media (max-width: 1023px) {
-
- .row:not(.nochange) {
- max-width: 50rem;
- }
- .off-canvas-content {
- padding-top: 0;
- }
- .item-data {
- padding: 15px;
- }
- .item-data h4::after {
- top: 60px;
- }
- .item-data a.button {
- margin-top: 10px;
- }
- .ref-scr {
- padding-left: 0.3rem;
- padding-right: 0.3rem;
- }
- .detail-info {
- padding-left: 1.5rem !important;
- padding-right: 1.5rem !important;
- }
- .detail-buttons {
- text-align: center;
- }
- .pull-right-for-small {
- float: right;
- }
- [type="text"],[type="password"],[type="date"],[type="datetime"],[type="datetime-local"],[type="month"],[type="week"],[type="email"],[type="number"],[type="search"],[type="tel"],[type="time"],[type="url"],[type="color"],textarea,[type="text"]:focus,[type="password"]:focus,[type="date"]:focus,[type="datetime"]:focus,[type="datetime-local"]:focus,[type="month"]:focus,[type="week"]:focus,[type="email"]:focus,[type="number"]:focus,[type="search"]:focus,[type="tel"]:focus,[type="time"]:focus,[type="url"]:focus,[type="color"]:focus,textarea:focus {
- margin-bottom: 0.4rem;
- }
- .button-medium-centered {
- margin: auto;
- text-align: center;
- display: block;
- }
- .member-list {
- margin-top: 25px;
- border-right: 0;
- }
- .contact-address,.members {
- float: left;
- width: 50%;
- }
- .contact-address .small-8 {
- text-align: right;
- padding-top: 30px;
- padding-bottom: 30px;
- }
- .members {
- margin-top: 0;
- }
- .off-canvas {
- background-color: rgba(88, 89, 91, 0.95);
- }
- #responsive-menu .main-menu {
- text-align: center;
- }
- .off-canvas#responsive-menu .main-menu.menu > li > a {
- font-size: 1.7rem;
- }
- .off-canvas#responsive-menu .main-menu.menu > li > a:hover,.off-canvas#responsive-menu .main-menu.menu > li.active > a {
- color: #7cad2a;
- }
- .off-canvas#responsive-menu .main-menu.menu > li.active > a {
- font-size: 2.2rem;
- }
-}
-
-
-@media (max-width: 850px) {
-
- .row:not(.nochange) {
- max-width: 45rem;
- }
- .item-data {
- padding: 5px;
- font-size: 0.8rem;
- }
- .item-data h4 {
- margin-top: 5px;
- margin-bottom: 5px;
- }
- .item-data h4::after {
- top: 35px;
- }
- .item-data a.button {
- margin-top: 10px;
- }
- .item-data p {
- line-height: 1.2;
- }
-}
-
-
-@media (max-width: 750px) {
-
- .row:not(.nochange) {
- max-width: 40rem;
- }
-}
-
-
-@media (max-width: 639px) {
-
- .row:not(.nochange) {
- max-width: 30rem;
- }
- .ref-scr {
- margin-bottom: 0;
- }
- .detail-info {
- margin-top: 15px;
- }
- .item-data p,.item-data a,.item-data h4 {
- color: #ffffff;
- }
- .item-data h4 {
- font-size: 1rem;
- margin-top: 20px;
- display: block;
- margin-bottom: 15px;
- }
- .item-data h4:after {
- content: '';
- width: 10%;
- height: 1px;
- background-color: #fefefe;
- display: inline-block;
- position: absolute;
- top: 50px;
- left: 45%;
- }
- .item-data a {
- text-transform: uppercase;
- }
-}
-
-
-@media (max-width: 530px) {
-
- .row:not(.nochange) {
- padding-left: 20px;
- padding-right: 20px;
- }
- .detail-buttons .m-l-25 {
- margin-left: 0;
- }
-}
-
-
-@media (max-width: 500px) {
-
- .item-data h4:after {
- display: none;
- }
- .item-data h4 {
- margin-top: 10px;
- margin-bottom: 5px;
- }
- .item-data p {
- display: none;
- }
- .item-data a.button {
- margin-top: 0;
- }
- .contact-address .small-4 {
- display: none;
- }
- .contact-address,.members,.contact-address .small-8 {
- float: left;
- width: 100%;
- }
- .contact-address .small-8 {
- text-align: center;
- }
- .members {
- margin-top: 25px;
- }
- .what-we-know-holder {
- left: 0;
- height: 152px;
- }
- .what-we-know:nth-child(2) {
- left: 70px;
- }
- .what-we-know:nth-child(3) {
- left: 140px;
- }
- .what-we-know:nth-child(4) {
- left: 210px;
- }
- .what-we-know:nth-child(5) {
- left: 280px;
- }
- .what-we-know:nth-child(6) {
- left: 0;
- top: 76px;
- }
- .what-we-know:nth-child(7) {
- left: 70px;
- top: 114px;
- }
- .what-we-know:nth-child(8) {
- left: 140px;
- top: 76px;
- }
- .what-we-know:nth-child(9) {
- left: 210px;
- top: 114px;
- }
-}
-
-
-@media (max-width: 400px) {
- .title-bar-title img {
- width: 100px;
- height: auto;
- margin-top: 17px;
- }
- a#responsive-menu-button {
- font-size: 1rem;
- }
- .off-canvas#responsive-menu .main-menu.menu > li > a {
- font-size: 1.3rem;
- }
- .off-canvas#responsive-menu .main-menu.menu > li.active > a {
- font-size: 1.6rem;
- }
-}
-
-
-
-.article-list-item .date.big {
- font-size: 5em;
- line-height: 1em;
- font-weight: 500;
- color: #414042;
-}
-.article-list-item .date.month {
- top: -15px;
- position: relative;
- right: 3px;
- color: #414042;
-}
-
-.gravatar {
- border-radius: 50%;
-}
-.author .gravatar {
- width: 40px;
-}
-
-.article-list-item .author {
- line-height: 1;
- /*text-align: center;*/
-}
-
-
-.article-list-item article {
- padding: 0 15px 0 0;
-}
-
-.article-list-item footer {
- font-weight: bold; font-size: 120%;
- padding: 0;
- padding-right: 15px;
-}
-
-article h1 {
- font-size: 1.9em;
- font-weight: 700;
-}
-article h2 {
- margin-top: 20px;
- font-size: 1.35em;
- color: #414042;
-}
-
-article h3 {
- margin-top: 20px;
- font-size: 1.15em;
- color: #414042;
-}
-
-.off-canvas-content .article-list-item div {
- color: #414042;
-}
-
-.comment aside {
- line-height: 1;
-}
-
-.comments-form textarea {
- margin-bottom: 3px;
-}
-.comments-form .gravatar {
- width: 50px;
- float: right;
- padding: 0;
- margin: 0;
-}
\ No newline at end of file
diff --git a/templates/Binarity/Resources/assets/images/avatar_kristyna.png b/templates/Binarity/Resources/assets/images/avatar_kristyna.png
deleted file mode 100644
index 2b1f0e1e..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_kristyna.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/avatar_kristyna_hexa_75.png b/templates/Binarity/Resources/assets/images/avatar_kristyna_hexa_75.png
deleted file mode 100644
index 9dd65a8b..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_kristyna_hexa_75.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/avatar_kristyna_small.png b/templates/Binarity/Resources/assets/images/avatar_kristyna_small.png
deleted file mode 100644
index 23cb91aa..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_kristyna_small.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/avatar_michal.png b/templates/Binarity/Resources/assets/images/avatar_michal.png
deleted file mode 100644
index e123b5fc..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_michal.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/avatar_michal_hexa_75.png b/templates/Binarity/Resources/assets/images/avatar_michal_hexa_75.png
deleted file mode 100644
index 04547aa0..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_michal_hexa_75.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/avatar_michal_small.png b/templates/Binarity/Resources/assets/images/avatar_michal_small.png
deleted file mode 100644
index 1afca666..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_michal_small.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/avatar_peter.png b/templates/Binarity/Resources/assets/images/avatar_peter.png
deleted file mode 100644
index 0bdc2f79..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_peter.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/avatar_peter_hexa_75.png b/templates/Binarity/Resources/assets/images/avatar_peter_hexa_75.png
deleted file mode 100644
index 59839a9a..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_peter_hexa_75.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/avatar_peter_small.png b/templates/Binarity/Resources/assets/images/avatar_peter_small.png
deleted file mode 100644
index ba70357e..00000000
Binary files a/templates/Binarity/Resources/assets/images/avatar_peter_small.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/backgorund-image.jpg b/templates/Binarity/Resources/assets/images/backgorund-image.jpg
deleted file mode 100644
index daf4d4e4..00000000
Binary files a/templates/Binarity/Resources/assets/images/backgorund-image.jpg and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/binarity_logo_menu.png b/templates/Binarity/Resources/assets/images/binarity_logo_menu.png
deleted file mode 100644
index 414bf4c5..00000000
Binary files a/templates/Binarity/Resources/assets/images/binarity_logo_menu.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/hexagon_green.png b/templates/Binarity/Resources/assets/images/hexagon_green.png
deleted file mode 100644
index ab4866a7..00000000
Binary files a/templates/Binarity/Resources/assets/images/hexagon_green.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/hexagon_green_outline.png b/templates/Binarity/Resources/assets/images/hexagon_green_outline.png
deleted file mode 100644
index 20bceabc..00000000
Binary files a/templates/Binarity/Resources/assets/images/hexagon_green_outline.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/hexagon_grey.png b/templates/Binarity/Resources/assets/images/hexagon_grey.png
deleted file mode 100644
index 69d4a523..00000000
Binary files a/templates/Binarity/Resources/assets/images/hexagon_grey.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/hexagon_grey_outline.png b/templates/Binarity/Resources/assets/images/hexagon_grey_outline.png
deleted file mode 100644
index 74d6edb2..00000000
Binary files a/templates/Binarity/Resources/assets/images/hexagon_grey_outline.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/menu_logo.png b/templates/Binarity/Resources/assets/images/menu_logo.png
deleted file mode 100644
index 5752e5eb..00000000
Binary files a/templates/Binarity/Resources/assets/images/menu_logo.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/social-cover.png b/templates/Binarity/Resources/assets/images/social-cover.png
deleted file mode 100644
index 599b985d..00000000
Binary files a/templates/Binarity/Resources/assets/images/social-cover.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/angularjs.png b/templates/Binarity/Resources/assets/images/techno/angularjs.png
deleted file mode 100644
index 4305f756..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/angularjs.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/css3.png b/templates/Binarity/Resources/assets/images/techno/css3.png
deleted file mode 100644
index 5924c20c..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/css3.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/html5.png b/templates/Binarity/Resources/assets/images/techno/html5.png
deleted file mode 100644
index b5acc1ff..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/html5.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/javascript.png b/templates/Binarity/Resources/assets/images/techno/javascript.png
deleted file mode 100644
index fac60681..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/javascript.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/jquery.png b/templates/Binarity/Resources/assets/images/techno/jquery.png
deleted file mode 100644
index ab9abb0d..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/jquery.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/laravel.png b/templates/Binarity/Resources/assets/images/techno/laravel.png
deleted file mode 100644
index d28e1190..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/laravel.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/mysql.png b/templates/Binarity/Resources/assets/images/techno/mysql.png
deleted file mode 100644
index fceaa27a..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/mysql.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/nette.png b/templates/Binarity/Resources/assets/images/techno/nette.png
deleted file mode 100644
index 2ca818a2..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/nette.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/nodejs.png b/templates/Binarity/Resources/assets/images/techno/nodejs.png
deleted file mode 100644
index a78ce3c0..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/nodejs.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/phalcon.png b/templates/Binarity/Resources/assets/images/techno/phalcon.png
deleted file mode 100644
index 9aef3a7a..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/phalcon.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/php.png b/templates/Binarity/Resources/assets/images/techno/php.png
deleted file mode 100644
index 4d33d051..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/php.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/postgresql.png b/templates/Binarity/Resources/assets/images/techno/postgresql.png
deleted file mode 100644
index 4105e6dc..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/postgresql.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/techno/sailsjs.png b/templates/Binarity/Resources/assets/images/techno/sailsjs.png
deleted file mode 100644
index d6f15b87..00000000
Binary files a/templates/Binarity/Resources/assets/images/techno/sailsjs.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/images/technologies_hexagon.png b/templates/Binarity/Resources/assets/images/technologies_hexagon.png
deleted file mode 100644
index d6539db3..00000000
Binary files a/templates/Binarity/Resources/assets/images/technologies_hexagon.png and /dev/null differ
diff --git a/templates/Binarity/Resources/assets/js/BLightBox.js b/templates/Binarity/Resources/assets/js/BLightBox.js
deleted file mode 100644
index 2357c2bf..00000000
--- a/templates/Binarity/Resources/assets/js/BLightBox.js
+++ /dev/null
@@ -1,289 +0,0 @@
-/**
- * Lightbox library created by binarity s.r.o.
- * www.binarity.cz
- * version 1.0.0
- *
- * Vanilla JavaScript lightbox plugin.
- *
- * Can use custom invoker passed as first argument or uses a default one - .b-lightbox.
- * This allows to have more lightbox instances on one site to categorize items.
- *
- * Default behaviour:
- * - Hides on escape keydown event - settable (options.allow_escape).
- * - Hides on background click - settable (options.allow_backgroundclick).
- * - Hide button in top right corner - settable (options.close_text).
- * - Allows usage of arrow keys (left/right) to navigate through images - settable (option.allow_arrows).
- *
- * @param options
- * @param autorun
- * @constructor
- */
-function BLightBox(options, autorun) {
- // Instance and instance variables.
- var BLightBox = this,
- escape_key_allowed = (!(options !== undefined && options.allow_escape === false)),
- hide_on_holder_allowed = (!(options !== undefined && options.allow_backgroundclick === false)),
- arrows_allowed = (!(options !== undefined && options.allow_arrows === false)),
- close_text = (options !== undefined && options.close_text !== undefined) ? options.close_text : 'Close',
-
- // DOM
- lightbox_holder = document.createElement('div'),
- invoker_string = (options !== undefined && options.invoker !== undefined) ? options.invoker : '.b-lightbox',
- invokers = document.querySelectorAll(invoker_string),
- invokers_length = invokers.length,
- lightbox_image = document.createElement('img'),
- close_label = document.createElement('a'),
- previous_button = document.createElement('a'),
- next_button = document.createElement('a'),
- lightbox_label = document.createElement('span');
-
- // BLightBox DOM default settings.
- lightbox_holder.className = 'b-lightbox-holder';
- lightbox_image.className = 'b-lightbox-image';
- close_label.className = 'b-lightbox-close-button';
- close_label.textContent = close_text;
- previous_button.className = 'b-lightbox-direction previous';
- previous_button.innerHTML = '‹';
- next_button.className = 'b-lightbox-direction next';
- next_button.innerHTML = '›';
- lightbox_label.className = 'b-lightbox-label';
-
- /**
- * Show new image according to data-newindex attribute on directional button
- */
- this.loadNewImage = function(event) {
- event.stopPropagation();
- var index = event.target.getAttribute('data-newindex'),
- label = invokers[index].getAttribute('data-label');
-
- if(invokers[index]) {
- lightbox_image.style.display = 'none';
- this.decideFromLoad(invokers[index]);
- lightbox_image.style.display = 'block';
- if(label != '') {
- lightbox_label.innerHTML = label;
- }
- }
-
- this.lightboxImageCenter(label != ''); // Center image.
-
- // Change indexes to be opened.
- previous_button.setAttribute('data-newindex', this.getPreviousIndex(index));
- next_button.setAttribute('data-newindex', this.getNextIndex(index));
- };
-
- /**
- * Returns first next index possible, or return very first index to allow rotation.
- * @param index
- * @returns {number}
- */
- this.getNextIndex = function(index) {
- // Skip to last image if we are on the first.
- return (index == invokers_length - 1) ? 0 : parseInt(index) + 1;
- };
-
- /**
- * Returns first previous index possible, or returns last array index to allow rotation.
- * @param index
- * @returns {number}
- */
- this.getPreviousIndex = function(index) {
- // Skip to last image if we are on the first.
- return (index == 0) ? invokers_length - 1 : index - 1;
- };
-
- /**
- * Reset ivokers_length variable for re-use.
- */
- this.resetInvokersLength = function() {
- invokers_length = invokers.length;
- };
-
- /**
- * Provides code for closing a lightbox and hiding images.
- */
- this.listenActionClose = function(event) {
- lightbox_holder.style.display = 'none';
- lightbox_image.style.display = 'none';
- };
-
- /**
- * Adds src to lightbox image from element's style background-image.
- * Removes url() par of the string.
- * @param el
- */
- this.loadImageFromBackgroundImage = function(el) {
- lightbox_image.src = el.style.backgroundImage.replace(/url\("?(.*[^"])"?\)/, '$1');
- };
-
- /**
- * Adds src to lightbox image from element's child img tag.
- * @param el
- */
- this.loadImageFromChildImg = function(el) {
- var img = el.querySelector('img');
- if(img) {
- lightbox_image.src = img.src;
- }
- };
-
- /**
- * Move lightbox image to the center of screen.
- */
- this.lightboxImageCenter = function(bool_label) {
- // Image
- lightbox_image.style.left = ((lightbox_holder.offsetWidth - lightbox_image.offsetWidth) / 2) + 'px';
- lightbox_image.style.top = ((lightbox_holder.offsetHeight - lightbox_image.offsetHeight) / 2) + 'px';
-
- // Image label.
- if(bool_label === true) {
- lightbox_label.style.width = lightbox_image.offsetWidth + 'px';
- lightbox_label.style.left = ((lightbox_holder.offsetWidth - lightbox_image.offsetWidth) / 2) + 'px';
- lightbox_label.style.display = 'block';
- lightbox_label.style.top = (lightbox_image.offsetTop + lightbox_image.offsetHeight - lightbox_label.offsetHeight) + 'px';
- }
- };
-
- /**
- * Returns index in invokers array or false on unsuccessful attempt to find the element.
- * @param el
- * @returns {*}
- */
- this.getIndexInInvokers = function(el) {
- var inv_length = invokers_length;
- while(inv_length--) {
- if(invokers[inv_length].isEqualNode(el)) {
- return inv_length;
- }
- }
- return false;
- };
-
- /**
- * This method decides from where to load src attribute into lightbox_image.
- * @param el
- */
- this.decideFromLoad = function(el) {
- // Decide from which source to get image url.
- if(el.hasAttribute('data-background')) {
- this.loadImageFromBackgroundImage(el);
- } else if(el.hasAttribute('data-img')) {
- this.loadImageFromChildImg(el);
- }
-
- lightbox_label.style.display = 'none';
- lightbox_label.innerHTML = '';
- };
-
- /**
- * Provides code for opening a lightbox and displaying images.
- */
- this.listenActionOpen = function(el, app, event) {
- var label = el.getAttribute('data-label');
-
- event.stopPropagation();
- event.preventDefault(); // If element is a-tag, prevent from href requesting.
-
- app.decideFromLoad(el); // Load image into lightbox_image.
-
- // Change indexes to be opened.
- previous_button.setAttribute('data-newindex', app.getPreviousIndex(app.getIndexInInvokers(el)));
- next_button.setAttribute('data-newindex', app.getNextIndex(app.getIndexInInvokers(el)));
-
- // Show lightbox and image.
- lightbox_holder.style.display = 'block';
- lightbox_image.style.display = 'block';
- if(label != '') {
- lightbox_label.innerHTML = label;
- }
-
- // Center lightbox within the screen.
- app.lightboxImageCenter(label != '');
- };
-
- /**
- * Add lightbox closing method listener to given element.
- * @param el
- */
- this.addCloseListenerFor = function(el) {
- el.addEventListener('click', this.listenActionClose.bind(this));
- };
-
- /**
- * Add lightbox opening method listener to given element.
- * @param el
- */
- this.addOpenListenerFor = function(el) {
- var app = this;
- el.addEventListener('click', app.listenActionOpen.bind(app, el, this), true);
- };
-
- /**
- * Initializes all possible listeners at once on class instance creation.
- */
- this.initiateListeners = function() {
- // Open Listeners.
- while(invokers_length--) {
- this.addOpenListenerFor(invokers[invokers_length]);
- }
- this.resetInvokersLength();
-
- // Close Listeners.
- // On background click.
- if(hide_on_holder_allowed){
- this.addCloseListenerFor(lightbox_holder);
- }
- // On escape key hit, if requested.
- if(escape_key_allowed) {
- window.addEventListener('keydown', function (event) {
- if(event.keyCode === 27) {
- BLightBox.listenActionClose();
- }
- });
- }
-
- // Directional buttons.
- previous_button.addEventListener('click',this.loadNewImage.bind(this));
- next_button.addEventListener('click',this.loadNewImage.bind(this));
- // Allow directing with arrows when enabled.
- if(arrows_allowed) {
- window.addEventListener('keydown', function arrowDirections(event) {
- if(event.keyCode === 37) {
- previous_button.click();
- } else if(event.keyCode === 39) {
- next_button.click();
- }
- });
- }
- };
-
- /**
- * Initialization method that starts BLightBox instance.
- * @returns {*}
- */
- this.init = function() {
- // Append lightbox background.
- document.body.appendChild(lightbox_holder);
- lightbox_holder.appendChild(previous_button);
- lightbox_holder.appendChild(lightbox_image);
- lightbox_holder.appendChild(next_button);
- lightbox_holder.appendChild(close_label);
- lightbox_holder.appendChild(lightbox_label);
- // Add event listeners for invokers.
- this.initiateListeners();
-
- // Auto centering on window.resize;
- window.addEventListener('resize', function() {
- BLightBox.lightboxImageCenter(true);
- });
-
- return BLightBox;
- };
-
- // If autorun is requested, create instance.
- if(autorun !== undefined && autorun === true) {
- return this.init();
- } else {
- return this;
- }
-}
\ No newline at end of file
diff --git a/templates/Binarity/Resources/assets/js/app.js b/templates/Binarity/Resources/assets/js/app.js
deleted file mode 100644
index 907cfbde..00000000
--- a/templates/Binarity/Resources/assets/js/app.js
+++ /dev/null
@@ -1,86 +0,0 @@
-$(document).foundation();
-
-new CookiePolicy();
-
-window.addEventListener('load', function() {
- var lightbox = new BLightBox({
- invoker: '.b-invo',
- close_text: 'Zavřít'
- }, true);
-
- var gallery_links = document.querySelectorAll('.b-invo'),
- gallery_links_i = gallery_links.length;
-});
-
-function switchResponsiveMenu() {
- var menuHolder = document.getElementById('responsive-menu');
- if(menuHolder.style.width == "100%") {
- hideResponsiveMenu();
- } else {
- showResponsiveMenu();
- }
-}
-
-function showResponsiveMenu() {
- var menuHolder = document.getElementById('responsive-menu'),
- titleBar = document.getElementsByClassName('title-bar')[0],
- titleBarCS = window.getComputedStyle(titleBar);
- menuHolder.style.display="block";
- menuHolder.style.height = document.documentElement.clientHeight + 'px';
- menuHolder.style.height = window.innerHeight + 'px';
- menuHolder.style.left = "0";
- menuHolder.style.width = "100%";
- menuHolder.style.zIndex = 1000;
- menuHolder.style.top = titleBarCS.height;
- menuHolder.style.height = '100%;';
- titleBar.style.position = 'fixed';
-}
-
-function hideResponsiveMenu() {
- var menuHolder = document.getElementById('responsive-menu'),
- titleBar = document.getElementsByClassName('title-bar')[0];
- menuHolder.style.display = "none";
- menuHolder.style.width = "250px";
- titleBar.style.position = 'initial';
- document.body.style.paddingTop = '0';
-}
-
-window.addEventListener('resize', function() {
- var menuHolder = document.getElementById('responsive-menu');
- hideResponsiveMenu();
- if(window.innerWidth >= 1023) {
- menuHolder.style.display="block";
- menuHolder.style.height = "auto";
- menuHolder.style.top = "0";
- }
-});
-
-var flippers = document.querySelectorAll ('.hover-on-start'),
- flipi = flippers.length;
-
-while (flipi--) {
- (function (flipi) {
- setTimeout (function () {
- flippers[flipi].classList.toggle ('hover');
- }, flipi * 200);
- }) (flipi);
-}
-
-
-$('.flip-container.hover-on-start').bind('touchstart', function (e) {
- e.preventDefault();
- $(this).toggleClass('hover');
-});
-
-function showMoreReferences(evt) {
- $ (evt).parent ().remove ();
- $ ('.more-references').fadeIn (200);
-}
-
-window.addEventListener ('load', function () {
- $ ('.reference-item').mouseenter (function () {
- $ (this).find ('.item-data').animate ({opacity: 1}, 300, 'swing');
- }).mouseleave (function () {
- $ (this).find ('.item-data').animate ({opacity: 0}, 300, 'swing');
- });
-});
\ No newline at end of file
diff --git a/templates/Binarity/Resources/assets/js/cookies.js b/templates/Binarity/Resources/assets/js/cookies.js
deleted file mode 100644
index 59441f88..00000000
--- a/templates/Binarity/Resources/assets/js/cookies.js
+++ /dev/null
@@ -1,150 +0,0 @@
-/**
- * Cookie handling mini framework &
- * EU Cookie policy information layer
- *
- * created by binarity s.r.o
- * www.binarity.cz
- *
- * @returns {*}
- * @constructor
- */
-var Cookies = {
- read: function(sKey) {
- return !sKey ? null : decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
- },
- set: function(sKey, sValue, vEnd, sPath, sDomain, bSecure) {
- if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false; }
- var sExpires = "";
- if (vEnd) {
- switch (vEnd.constructor) {
- case Number:
- sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;
- break;
- case String:
- sExpires = "; expires=" + vEnd;
- break;
- case Date:
- sExpires = "; expires=" + vEnd.toUTCString();
- break;
- }
- }
- document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
- return true;
- },
- remove: function (sKey, sPath, sDomain) {
- if (!this.has(sKey)) { return false; }
- document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "");
- return true;
- },
- has: function (sKey) {
- if (!sKey) { return false; }
- return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
- },
- keys: function () {
- var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
- for (var nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); }
- return aKeys;
- }
-};
-
-function CookiePolicy(sPrefix, sText, sMore, sMoreURL, sUnderstand, sCookieName) {
- 'use strict';
-
- var prefix = sPrefix || 'bineucookie_',
- cookieName = sCookieName || 'allowed_eu',
- text = sText || 'Tyto webové stránky používají k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Informace o tom, jak tyto webové stránky používáte, jsou sdíleny se společností Google. Používáním těchto webových stránek souhlasíte s použitím souborů cookie.',
- more = sMore || 'Další informace',
- more_url = sMoreURL || 'https://www.google.com/policies/technologies/cookies/',
- understand = sUnderstand || 'Rozumím',
- // DOM
- layerHolder = document.createElement('div'),
- textElement = document.createElement('p'),
- moreInfoButton = document.createElement('a'),
- okButton = document.createElement('a');
-
- /**
- * This method checks whether cookie about cookies was set or not.
- * If it was set, this method additionally checks for its validity.
- */
- this.isValidCookie = function(sKey) {
- return Cookies.has(prefix + sKey);
- };
-
- /**
- * This method just adds custom styles to page header so it does not need to be all inline/
- */
- this.addStyle = function() {
- var styleElement = document.createElement('style');
-
- styleElement.id = prefix + 'style';
- styleElement.innerHTML += '#bin_eu_cookie_layer {opacity:1; position:fixed; padding:16px; left:0; top:0; width:100%; display:block; color:#f4f4f4; background-color:rgba(0,0,0,0.8); z-index:1000;}\r\n';
- styleElement.innerHTML += '#bin_eu_cookie_layer #bin-cookie-text {width:80%; float:left; display:inline-block;}\r\n';
- styleElement.innerHTML += '#bin_eu_cookie_layer .bin-button {padding: 8px; float:right;}\r\n';
-
- // Responsive version
- styleElement.innerHTML += '@media screen and (max-width:980px) {\r\n';
- styleElement.innerHTML += '\t#bin_eu_cookie_layer #bin-cookie-text {width:100%;}';
- styleElement.innerHTML += '}\r\n';
-
- document.head.appendChild(styleElement);
- };
-
- /**
- * This method accepts eu cookie policy by setting up a cookie that will inform the script next time that the policy
- * was already accepted.
- */
- this.acceptCookiePolicy = function() {
- var date = new Date();
- date.setFullYear(date.getFullYear() + 25);
- Cookies.set(prefix + cookieName, 1, date.toGMTString(), '/');
-
- layerHolder.parentNode.removeChild(layerHolder);
- };
-
- /**
- * This method adds necessary elements to the DOM
- */
- this.addElements = function() {
- layerHolder.id = "bin_eu_cookie_layer";
-
- textElement.id = "bin-cookie-text";
- textElement.textContent = text;
-
- moreInfoButton.className = 'bin-button';
- moreInfoButton.textContent = more;
- moreInfoButton.href = more_url;
- moreInfoButton.target = '_blank';
-
- okButton.id = 'bin-cookie-ok';
- okButton.className = 'bin-button';
- okButton.textContent = understand;
- okButton.href = 'javascript:void(0);';
-
- layerHolder.appendChild(textElement);
- layerHolder.appendChild(moreInfoButton);
- layerHolder.appendChild(okButton);
-
- document.body.appendChild(layerHolder);
-
- okButton.addEventListener('click', this.acceptCookiePolicy);
- };
-
- /**
- * Method for adding complete DOM layer to the DOM.
- */
- this.addDOMLayer = function() {
- this.addStyle();
- this.addElements();
- };
-
- /**
- * This method initializes the whole process of drawing eu cookie policy layer.
- */
- this.init = function() {
- if(!this.isValidCookie(cookieName)) {
- this.addDOMLayer();
- }
- };
-
- return this.init(); // Auto-run on setup.
-}
\ No newline at end of file
diff --git a/templates/Binarity/Resources/assets/js/foundation.min.js b/templates/Binarity/Resources/assets/js/foundation.min.js
deleted file mode 100644
index 4f3d749a..00000000
--- a/templates/Binarity/Resources/assets/js/foundation.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-!function(t){"use strict";function e(t){if(void 0===Function.prototype.name){var e=/function\s([^(]{1,})\(/,i=e.exec(t.toString());return i&&i.length>1?i[1].trim():""}return void 0===t.prototype?t.constructor.name:t.prototype.constructor.name}function i(t){return/true/.test(t)?!0:/false/.test(t)?!1:isNaN(1*t)?t:parseFloat(t)}function n(t){return t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}var s="6.1.1",o={version:s,_plugins:{},_uuids:[],_activePlugins:{},rtl:function(){return"rtl"===t("html").attr("dir")},plugin:function(t,i){var s=i||e(t),o=n(s);this._plugins[o]=this[s]=t},registerPlugin:function(t,i){var s=i?n(i):e(t.constructor).toLowerCase();t.uuid=this.GetYoDigits(6,s),t.$element.attr("data-"+s)||t.$element.attr("data-"+s,t.uuid),t.$element.data("zfPlugin")||t.$element.data("zfPlugin",t),t.$element.trigger("init.zf."+s),this._uuids.push(t.uuid)},unregisterPlugin:function(t){var i=n(e(t.$element.data("zfPlugin").constructor));this._uuids.splice(this._uuids.indexOf(t.uuid),1),t.$element.removeAttr("data-"+i).removeData("zfPlugin").trigger("destroyed.zf."+i);for(var s in t)t[s]=null},reInit:function(e){var i=e instanceof t;try{if(i)e.each(function(){t(this).data("zfPlugin")._init()});else{var n=typeof e,s=this,o={object:function(e){e.forEach(function(e){t("[data-"+e+"]").foundation("_init")})},string:function(){t("[data-"+e+"]").foundation("_init")},undefined:function(){this.object(Object.keys(s._plugins))}};o[n](e)}}catch(a){console.error(a)}finally{return e}},GetYoDigits:function(t,e){return t=t||6,Math.round(Math.pow(36,t+1)-Math.random()*Math.pow(36,t)).toString(36).slice(1)+(e?"-"+e:"")},reflow:function(e,n){"undefined"==typeof n?n=Object.keys(this._plugins):"string"==typeof n&&(n=[n]);var s=this;t.each(n,function(n,o){var a=s._plugins[o],r=t(e).find("[data-"+o+"]").addBack("[data-"+o+"]");r.each(function(){var e=t(this),n={};if(e.data("zfPlugin"))return void console.warn("Tried to initialize "+o+" on an element that already has a Foundation plugin.");if(e.attr("data-options")){e.attr("data-options").split(";").forEach(function(t,e){var s=t.split(":").map(function(t){return t.trim()});s[0]&&(n[s[0]]=i(s[1]))})}try{e.data("zfPlugin",new a(t(this),n))}catch(s){console.error(s)}finally{return}})})},getFnName:e,transitionend:function(t){var e,i={transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend"},n=document.createElement("div");for(var s in i)"undefined"!=typeof n.style[s]&&(e=i[s]);return e?e:(e=setTimeout(function(){t.triggerHandler("transitionend",[t])},1),"transitionend")}};o.util={throttle:function(t,e){var i=null;return function(){var n=this,s=arguments;null===i&&(i=setTimeout(function(){t.apply(n,s),i=null},e))}}};var a=function(i){var n=typeof i,s=t("meta.foundation-mq"),a=t(".no-js");if(s.length||t('
').appendTo(document.head),a.length&&a.removeClass("no-js"),"undefined"===n)o.MediaQuery._init(),o.reflow(this);else{if("string"!==n)throw new TypeError("We're sorry, '"+n+"' is not a valid parameter. You must use a string representing the method you wish to invoke.");var r=Array.prototype.slice.call(arguments,1),l=this.data("zfPlugin");if(void 0===l||void 0===l[i])throw new ReferenceError("We're sorry, '"+i+"' is not an available method for "+(l?e(l):"this element")+".");1===this.length?l[i].apply(l,r):this.each(function(e,n){l[i].apply(t(n).data("zfPlugin"),r)})}return this};window.Foundation=o,t.fn.foundation=a,function(){Date.now&&window.Date.now||(window.Date.now=Date.now=function(){return(new Date).getTime()});for(var t=["webkit","moz"],e=0;e
=h.offset.top,r=d.offset.left>=h.offset.left,l=d.offset.left+d.width<=h.width}else a=d.offset.top+d.height<=d.windowDims.height+d.windowDims.offset.top,o=d.offset.top>=d.windowDims.offset.top,r=d.offset.left>=d.windowDims.offset.left,l=d.offset.left+d.width<=d.windowDims.width;var u=[a,o,r,l];return i?r===l==!0:s?o===a==!0:-1===u.indexOf(!1)},n=function(t,i){if(t=t.length?t[0]:t,t===e||t===document)throw new Error("I'm sorry, Dave. I'm afraid I can't do that.");var n=t.getBoundingClientRect(),s=t.parentNode.getBoundingClientRect(),o=document.body.getBoundingClientRect(),a=e.pageYOffset,r=e.pageXOffset;return{width:n.width,height:n.height,offset:{top:n.top+a,left:n.left+r},parentDims:{width:s.width,height:s.height,offset:{top:s.top+a,left:s.left+r}},windowDims:{width:o.width,height:o.height,offset:{top:a,left:r}}}},s=function(t,e,i,s,o,a){var r=n(t),l=e?n(e):null;switch(i){case"top":return{left:l.offset.left,top:l.offset.top-(r.height+s)};case"left":return{left:l.offset.left-(r.width+o),top:l.offset.top};case"right":return{left:l.offset.left+l.width+o,top:l.offset.top};case"center top":return{left:l.offset.left+l.width/2-r.width/2,top:l.offset.top-(r.height+s)};case"center bottom":return{left:a?o:l.offset.left+l.width/2-r.width/2,top:l.offset.top+l.height+s};case"center left":return{left:l.offset.left-(r.width+o),top:l.offset.top+l.height/2-r.height/2};case"center right":return{left:l.offset.left+l.width+o+1,top:l.offset.top+l.height/2-r.height/2};case"center":return{left:r.windowDims.offset.left+r.windowDims.width/2-r.width/2,top:r.windowDims.offset.top+r.windowDims.height/2-r.height/2};case"reveal":return{left:(r.windowDims.width-r.width)/2,top:r.windowDims.offset.top+s};case"reveal full":return{left:r.windowDims.offset.left,top:r.windowDims.offset.top};default:return{left:l.offset.left,top:l.offset.top+l.height+s}}};t.Box={ImNotTouchingYou:i,GetDimensions:n,GetOffsets:s}}(window.Foundation,window),!function(t,e){"use strict";e.Keyboard={};var i={9:"TAB",13:"ENTER",27:"ESCAPE",32:"SPACE",37:"ARROW_LEFT",38:"ARROW_UP",39:"ARROW_RIGHT",40:"ARROW_DOWN"},n=function(t){var e={};for(var i in t)e[t[i]]=t[i];return e}(i);e.Keyboard.keys=n;var s=function(t){var e=i[t.which||t.keyCode]||String.fromCharCode(t.which).toUpperCase();return t.shiftKey&&(e="SHIFT_"+e),t.ctrlKey&&(e="CTRL_"+e),t.altKey&&(e="ALT_"+e),e};e.Keyboard.parseKey=s;var o={},a=function(i,n,a){var r,l,d,h=o[n],u=s(i);return h?(r="undefined"==typeof h.ltr?h:e.rtl()?t.extend({},h.ltr,h.rtl):t.extend({},h.rtl,h.ltr),l=r[u],d=a[l],void(d&&"function"==typeof d?(d.apply(),(a.handled||"function"==typeof a.handled)&&a.handled.apply()):(a.unhandled||"function"==typeof a.unhandled)&&a.unhandled.apply())):console.warn("Component not defined!")};e.Keyboard.handleKey=a;var r=function(e){return e.find("a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]").filter(function(){return!t(this).is(":visible")||t(this).attr("tabindex")<0?!1:!0})};e.Keyboard.findFocusable=r;var l=function(t,e){o[t]=e};e.Keyboard.register=l}(jQuery,window.Foundation),!function(t,e){function i(t){var e={};return"string"!=typeof t?e:(t=t.trim().slice(1,-1))?e=t.split("&").reduce(function(t,e){var i=e.replace(/\+/g," ").split("="),n=i[0],s=i[1];return n=decodeURIComponent(n),s=void 0===s?null:decodeURIComponent(s),t.hasOwnProperty(n)?Array.isArray(t[n])?t[n].push(s):t[n]=[t[n],s]:t[n]=s,t},{}):e}var n={queries:[],current:"",atLeast:function(t){var e=this.get(t);return e?window.matchMedia(e).matches:!1},get:function(t){for(var e in this.queries){var i=this.queries[e];if(t===i.name)return i.value}return null},_init:function(){var e,n=this,s=t(".foundation-mq").css("font-family");e=i(s);for(var o in e)n.queries.push({name:o,value:"only screen and (min-width: "+e[o]+")"});this.current=this._getCurrentSize(),this._watcher()},_getCurrentSize:function(){var t;for(var e in this.queries){var i=this.queries[e];window.matchMedia(i.value).matches&&(t=i)}return"object"==typeof t?t.name:t},_watcher:function(){var e=this;t(window).on("resize.zf.mediaquery",function(){var i=e._getCurrentSize();i!==e.current&&(t(window).trigger("changed.zf.mediaquery",[i,e.current]),e.current=i)})}};e.MediaQuery=n,window.matchMedia||(window.matchMedia=function(){"use strict";var t=window.styleMedia||window.media;if(!t){var e=document.createElement("style"),i=document.getElementsByTagName("script")[0],n=null;e.type="text/css",e.id="matchmediajs-test",i.parentNode.insertBefore(e,i),n="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle,t={matchMedium:function(t){var i="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=i:e.textContent=i,"1px"===n.width}}}return function(e){return{matches:t.matchMedium(e||"all"),media:e||"all"}}}())}(jQuery,Foundation),!function(t,e){function i(i,o,a,r){function l(){i||o.hide(),d(),r&&r.apply(o)}function d(){o[0].style.transitionDuration=0,o.removeClass(h+" "+u+" "+a)}if(o=t(o).eq(0),o.length){var h=i?n[0]:n[1],u=i?s[0]:s[1];d(),o.addClass(a).css("transition","none"),requestAnimationFrame(function(){o.addClass(h),i&&o.show()}),requestAnimationFrame(function(){o[0].offsetWidth,o.css("transition",""),o.addClass(u)}),o.one(e.transitionend(o),l)}}var n=["mui-enter","mui-leave"],s=["mui-enter-active","mui-leave-active"],o={animateIn:function(t,e,n){i(!0,t,e,n)},animateOut:function(t,e,n){i(!1,t,e,n)}},a=function(t,e,i){function n(r){a||(a=window.performance.now()),o=r-a,i.apply(e),t>o?s=window.requestAnimationFrame(n,e):(window.cancelAnimationFrame(s),e.trigger("finished.zf.animate",[e]).triggerHandler("finished.zf.animate",[e]))}var s,o,a=null;s=window.requestAnimationFrame(n)};e.Move=a,e.Motion=o}(jQuery,Foundation),!function(t,e){"use strict";e.Nest={Feather:function(e,i){e.attr("role","menubar"),i=i||"zf";var n=e.find("li").attr({role:"menuitem"}),s="is-"+i+"-submenu",o=s+"-item",a="is-"+i+"-submenu-parent";e.find("a:first").attr("tabindex",0),n.each(function(){var e=t(this),i=e.children("ul");i.length&&(e.addClass("has-submenu "+a).attr({"aria-haspopup":!0,"aria-selected":!1,"aria-expanded":!1,"aria-label":e.children("a:first").text()}),i.addClass("submenu "+s).attr({"data-submenu":"","aria-hidden":!0,role:"menu"})),e.parent("[data-submenu]").length&&e.addClass("is-submenu-item "+o)})},Burn:function(t,e){var i=(t.find("li").removeAttr("tabindex"),"is-"+e+"-submenu"),n=i+"-item",s="is-"+e+"-submenu-parent";t.find("*").removeClass(i+" "+n+" "+s+" has-submenu is-submenu-item submenu is-active").removeAttr("data-submenu").css("display","")}}}(jQuery,window.Foundation),!function(t,e){"use strict";var i=function(t,e,i){var n,s,o=this,a=e.duration,r=Object.keys(t.data())[0]||"timer",l=-1;this.restart=function(){l=-1,clearTimeout(s),this.start()},this.start=function(){clearTimeout(s),l=0>=l?a:l,t.data("paused",!1),n=Date.now(),s=setTimeout(function(){e.infinite&&o.restart(),i()},l),t.trigger("timerstart.zf."+r)},this.pause=function(){clearTimeout(s),t.data("paused",!0);var e=Date.now();l-=e-n,t.trigger("timerpaused.zf."+r)}},n=function(e,i){var n=e.length;0===n&&i();var s=function(){n--,0===n&&i()};e.each(function(){this.complete?s():"undefined"!=typeof this.naturalWidth&&this.naturalWidth>0?s():t(this).one("load",function(){s()})})};e.Timer=i,e.onImagesLoaded=n}(jQuery,window.Foundation),function(t){function e(){this.removeEventListener("touchmove",i),this.removeEventListener("touchend",e),d=!1}function i(i){if(t.spotSwipe.preventDefault&&i.preventDefault(),d){var n,s=i.touches[0].pageX,a=(i.touches[0].pageY,o-s);l=(new Date).getTime()-r,Math.abs(a)>=t.spotSwipe.moveThreshold&&l<=t.spotSwipe.timeThreshold&&(n=a>0?"left":"right"),n&&(i.preventDefault(),e.call(this),t(this).trigger("swipe",n).trigger("swipe"+n))}}function n(t){1==t.touches.length&&(o=t.touches[0].pageX,a=t.touches[0].pageY,d=!0,r=(new Date).getTime(),this.addEventListener("touchmove",i,!1),this.addEventListener("touchend",e,!1))}function s(){this.addEventListener&&this.addEventListener("touchstart",n,!1)}t.spotSwipe={version:"1.0.0",enabled:"ontouchstart"in document.documentElement,preventDefault:!1,moveThreshold:75,timeThreshold:200};var o,a,r,l,d=!1;t.event.special.swipe={setup:s},t.each(["left","up","down","right"],function(){t.event.special["swipe"+this]={setup:function(){t(this).on("swipe",t.noop)}}})}(jQuery),!function(t){t.fn.addTouch=function(){this.each(function(i,n){t(n).bind("touchstart touchmove touchend touchcancel",function(){e(event)})});var e=function(t){var e=t.changedTouches,i=e[0],n={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup"},s=n[t.type],o=document.createEvent("MouseEvent");o.initMouseEvent(s,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(o)}}}(jQuery),!function(t,e){"use strict";e(document).on("click.zf.trigger","[data-open]",function(){var t=e(this).data("open");e("#"+t).triggerHandler("open.zf.trigger",[e(this)])}),e(document).on("click.zf.trigger","[data-close]",function(){var t=e(this).data("close");t?e("#"+t).triggerHandler("close.zf.trigger",[e(this)]):e(this).trigger("close.zf.trigger")}),e(document).on("click.zf.trigger","[data-toggle]",function(){var t=e(this).data("toggle");e("#"+t).triggerHandler("toggle.zf.trigger",[e(this)])}),e(document).on("close.zf.trigger","[data-closable]",function(){var i=e(this).data("closable")||"fade-out";t.Motion?t.Motion.animateOut(e(this),i,function(){e(this).trigger("closed.zf")}):e(this).fadeOut().trigger("closed.zf")});var i=function(){for(var t=["WebKit","Moz","O","Ms",""],e=0;eBack ',wrapper:"
",closeOnClick:!1},i.prototype._init=function(){this.$submenuAnchors=this.$element.find("li.has-submenu"),this.$submenus=this.$submenuAnchors.children("[data-submenu]"),this.$menuItems=this.$element.find("li").not(".js-drilldown-back").attr("role","menuitem"),this._prepareMenu(),this._keyboardEvents()},i.prototype._prepareMenu=function(){var e=this;this.$submenuAnchors.each(function(){var i=t(this),n=i.find("a:first");n.data("savedHref",n.attr("href")).removeAttr("href"),i.children("[data-submenu]").attr({"aria-hidden":!0,tabindex:0,role:"menu"}),e._events(i)}),this.$submenus.each(function(){var i=t(this),n=i.find(".js-drilldown-back");n.length||i.prepend(e.options.backButton),e._back(i)}),this.$element.parent().hasClass("is-drilldown")||(this.$wrapper=t(this.options.wrapper).addClass("is-drilldown").css(this._getMaxDims()),this.$element.wrap(this.$wrapper))},i.prototype._events=function(e){var i=this;e.off("click.zf.drilldown").on("click.zf.drilldown",function(n){if(t(n.target).parentsUntil("ul","li").hasClass("is-drilldown-submenu-parent")&&(n.stopImmediatePropagation(),n.preventDefault()),i._show(e),i.options.closeOnClick){var s=t("body").not(i.$wrapper);s.off(".zf.drilldown").on("click.zf.drilldown",function(t){t.preventDefault(),i._hideAll(),s.off(".zf.drilldown")})}})},i.prototype._keyboardEvents=function(){var i=this;this.$menuItems.add(this.$element.find(".js-drilldown-back")).on("keydown.zf.drilldown",function(n){var s,o,a=t(this),r=a.parent("ul").children("li");r.each(function(e){return t(this).is(a)?(s=r.eq(Math.max(0,e-1)),void(o=r.eq(Math.min(e+1,r.length-1)))):void 0}),e.Keyboard.handleKey(n,"Drilldown",{next:function(){a.is(i.$submenuAnchors)&&(i._show(a),a.on(e.transitionend(a),function(){a.find("ul li").filter(i.$menuItems).first().focus()}))},previous:function(){i._hide(a.parent("ul")),a.parent("ul").on(e.transitionend(a),function(){setTimeout(function(){
-a.parent("ul").parent("li").focus()},1)})},up:function(){s.focus()},down:function(){o.focus()},close:function(){i._back()},open:function(){a.is(i.$menuItems)?a.is(i.$submenuAnchors)&&(i._show(a),setTimeout(function(){a.find("ul li").filter(i.$menuItems).first().focus()},1)):(i._hide(a.parent("ul")),setTimeout(function(){a.parent("ul").parent("li").focus()},1))},handled:function(){n.preventDefault(),n.stopImmediatePropagation()}})})},i.prototype._hideAll=function(){var t=this.$element.find(".is-drilldown-sub.is-active").addClass("is-closing");t.one(e.transitionend(t),function(e){t.removeClass("is-active is-closing")}),this.$element.trigger("closed.zf.drilldown")},i.prototype._back=function(t){var e=this;t.off("click.zf.drilldown"),t.children(".js-drilldown-back").on("click.zf.drilldown",function(i){i.stopImmediatePropagation(),e._hide(t)})},i.prototype._menuLinkEvents=function(){var t=this;this.$menuItems.not(".has-submenu").off("click.zf.drilldown").on("click.zf.drilldown",function(e){setTimeout(function(){t._hideAll()},0)})},i.prototype._show=function(t){t.children("[data-submenu]").addClass("is-active"),this.$element.trigger("open.zf.drilldown",[t])},i.prototype._hide=function(t){t.addClass("is-closing").one(e.transitionend(t),function(){t.removeClass("is-active is-closing")}),t.trigger("hide.zf.drilldown",[t])},i.prototype._getMaxDims=function(){var e=0,i={};return this.$submenus.add(this.$element).each(function(){var i=t(this).children("li").length;e=i>e?i:e}),i.height=e*this.$menuItems[0].getBoundingClientRect().height+"px",i.width=this.$element[0].getBoundingClientRect().width+"px",i},i.prototype.destroy=function(){this._hideAll(),e.Nest.Burn(this.$element,"drilldown"),this.$element.unwrap().find(".js-drilldown-back").remove().end().find(".is-active, .is-closing, .is-drilldown-sub").removeClass("is-active is-closing is-drilldown-sub").end().find("[data-submenu]").removeAttr("aria-hidden tabindex role").off(".zf.drilldown").end().off("zf.drilldown"),this.$element.find("a").each(function(){var e=t(this);e.data("savedHref")&&e.attr("href",e.data("savedHref")).removeData("savedHref")}),e.unregisterPlugin(this)},e.plugin(i,"Drilldown")}(jQuery,window.Foundation),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=t.extend({},i.defaults,this.$element.data(),s),this._init(),e.registerPlugin(this,"Dropdown"),e.Keyboard.register("Dropdown",{ENTER:"open",SPACE:"open",ESCAPE:"close",TAB:"tab_forward",SHIFT_TAB:"tab_backward"})}i.defaults={hoverDelay:250,hover:!1,hoverPane:!1,vOffset:1,hOffset:1,positionClass:"",trapFocus:!1,autoFocus:!1,closeOnClick:!1},i.prototype._init=function(){var i=this.$element.attr("id");this.$anchor=t('[data-toggle="'+i+'"]')||t('[data-open="'+i+'"]'),this.$anchor.attr({"aria-controls":i,"data-is-focus":!1,"data-yeti-box":i,"aria-haspopup":!0,"aria-expanded":!1}),this.options.positionClass=this.getPositionClass(),this.counter=4,this.usedPositions=[],this.$element.attr({"aria-hidden":"true","data-yeti-box":i,"data-resize":i,"aria-labelledby":this.$anchor[0].id||e.GetYoDigits(6,"dd-anchor")}),this._events()},i.prototype.getPositionClass=function(){var t=this.$element[0].className.match(/(top|left|right)/g);return t=t?t[0]:""},i.prototype._reposition=function(t){this.usedPositions.push(t?t:"bottom"),!t&&this.usedPositions.indexOf("top")<0?this.$element.addClass("top"):"top"===t&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(t):"left"===t&&this.usedPositions.indexOf("right")<0?this.$element.removeClass(t).addClass("right"):"right"===t&&this.usedPositions.indexOf("left")<0?this.$element.removeClass(t).addClass("left"):!t&&this.usedPositions.indexOf("top")>-1&&this.usedPositions.indexOf("left")<0?this.$element.addClass("left"):"top"===t&&this.usedPositions.indexOf("bottom")>-1&&this.usedPositions.indexOf("left")<0?this.$element.removeClass(t).addClass("left"):"left"===t&&this.usedPositions.indexOf("right")>-1&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(t):"right"===t&&this.usedPositions.indexOf("left")>-1&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(t):this.$element.removeClass(t),this.classChanged=!0,this.counter--},i.prototype._setPosition=function(){if("false"===this.$anchor.attr("aria-expanded"))return!1;var t=this.getPositionClass(),i=e.Box.GetDimensions(this.$element),n=(e.Box.GetDimensions(this.$anchor),"left"===t?"left":"right"===t?"left":"top"),s="top"===n?"height":"width";"height"===s?this.options.vOffset:this.options.hOffset;if(i.width>=i.windowDims.width||!this.counter&&!e.Box.ImNotTouchingYou(this.$element))return this.$element.offset(e.Box.GetOffsets(this.$element,this.$anchor,"center bottom",this.options.vOffset,this.options.hOffset,!0)).css({width:i.windowDims.width-2*this.options.hOffset,height:"auto"}),this.classChanged=!0,!1;for(this.$element.offset(e.Box.GetOffsets(this.$element,this.$anchor,t,this.options.vOffset,this.options.hOffset));!e.Box.ImNotTouchingYou(this.$element)&&this.counter;)this._reposition(t),this._setPosition()},i.prototype._events=function(){var i=this;this.$element.on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":this.close.bind(this),"toggle.zf.trigger":this.toggle.bind(this),"resizeme.zf.trigger":this._setPosition.bind(this)}),this.options.hover&&(this.$anchor.off("mouseenter.zf.dropdown mouseleave.zf.dropdown").on("mouseenter.zf.dropdown",function(){clearTimeout(i.timeout),i.timeout=setTimeout(function(){i.open(),i.$anchor.data("hover",!0)},i.options.hoverDelay)}).on("mouseleave.zf.dropdown",function(){clearTimeout(i.timeout),i.timeout=setTimeout(function(){i.close(),i.$anchor.data("hover",!1)},i.options.hoverDelay)}),this.options.hoverPane&&this.$element.off("mouseenter.zf.dropdown mouseleave.zf.dropdown").on("mouseenter.zf.dropdown",function(){clearTimeout(i.timeout)}).on("mouseleave.zf.dropdown",function(){clearTimeout(i.timeout),i.timeout=setTimeout(function(){i.close(),i.$anchor.data("hover",!1)},i.options.hoverDelay)})),this.$anchor.add(this.$element).on("keydown.zf.dropdown",function(n){var s=t(this),o=e.Keyboard.findFocusable(i.$element);e.Keyboard.handleKey(n,"Dropdown",{tab_forward:function(){i.$element.find(":focus").is(o.eq(-1))&&(i.options.trapFocus?(o.eq(0).focus(),n.preventDefault()):i.close())},tab_backward:function(){(i.$element.find(":focus").is(o.eq(0))||i.$element.is(":focus"))&&(i.options.trapFocus?(o.eq(-1).focus(),n.preventDefault()):i.close())},open:function(){s.is(i.$anchor)&&(i.open(),i.$element.attr("tabindex",-1).focus(),n.preventDefault())},close:function(){i.close(),i.$anchor.focus()}})})},i.prototype._addBodyHandler=function(){var e=t(document.body).not(this.$element),i=this;e.off("click.zf.dropdown").on("click.zf.dropdown",function(t){i.$anchor.is(t.target)||i.$anchor.find(t.target).length||i.$element.find(t.target).length||(i.close(),e.off("click.zf.dropdown"))})},i.prototype.open=function(){if(this.$element.trigger("closeme.zf.dropdown",this.$element.attr("id")),this.$anchor.addClass("hover").attr({"aria-expanded":!0}),this._setPosition(),this.$element.addClass("is-open").attr({"aria-hidden":!1}),this.options.autoFocus){var t=e.Keyboard.findFocusable(this.$element);t.length&&t.eq(0).focus()}this.options.closeOnClick&&this._addBodyHandler(),this.$element.trigger("show.zf.dropdown",[this.$element])},i.prototype.close=function(){if(!this.$element.hasClass("is-open"))return!1;if(this.$element.removeClass("is-open").attr({"aria-hidden":!0}),this.$anchor.removeClass("hover").attr("aria-expanded",!1),this.classChanged){var t=this.getPositionClass();t&&this.$element.removeClass(t),this.$element.addClass(this.options.positionClass).css({height:"",width:""}),this.classChanged=!1,this.counter=4,this.usedPositions.length=0}this.$element.trigger("hide.zf.dropdown",[this.$element])},i.prototype.toggle=function(){if(this.$element.hasClass("is-open")){if(this.$anchor.data("hover"))return;this.close()}else this.open()},i.prototype.destroy=function(){this.$element.off(".zf.trigger").hide(),this.$anchor.off(".zf.dropdown"),e.unregisterPlugin(this)},e.plugin(i,"Dropdown")}(jQuery,window.Foundation),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=t.extend({},i.defaults,this.$element.data(),s),e.Nest.Feather(this.$element,"dropdown"),this._init(),e.registerPlugin(this,"DropdownMenu"),e.Keyboard.register("DropdownMenu",{ENTER:"open",SPACE:"open",ARROW_RIGHT:"next",ARROW_UP:"up",ARROW_DOWN:"down",ARROW_LEFT:"previous",ESCAPE:"close"})}i.defaults={disableHover:!1,autoclose:!0,hoverDelay:50,clickOpen:!1,closingTime:500,alignment:"left",closeOnClick:!0,verticalClass:"vertical",rightClass:"align-right",forceFollow:!0},i.prototype._init=function(){var t=this.$element.find("li.is-dropdown-submenu-parent");this.$element.children(".is-dropdown-submenu-parent").children(".is-dropdown-submenu").addClass("first-sub"),this.$menuItems=this.$element.find('[role="menuitem"]'),this.$tabs=this.$element.children('[role="menuitem"]'),this.isVert=this.$element.hasClass(this.options.verticalClass),this.$tabs.find("ul.is-dropdown-submenu").addClass(this.options.verticalClass),this.$element.hasClass(this.options.rightClass)||"right"===this.options.alignment?(this.options.alignment="right",t.addClass("is-left-arrow opens-left")):t.addClass("is-right-arrow opens-right"),this.isVert||this.$tabs.filter(".is-dropdown-submenu-parent").removeClass("is-right-arrow is-left-arrow opens-right opens-left").addClass("is-down-arrow"),this.changed=!1,this._events()},i.prototype._events=function(){var i,n=this,s="ontouchstart"in window||"undefined"!=typeof window.ontouchstart,o="is-dropdown-submenu-parent";(this.options.clickOpen||s)&&this.$menuItems.on("click.zf.dropdownmenu touchstart.zf.dropdownmenu",function(e){var i=t(e.target).parentsUntil("ul","."+o),a=i.hasClass(o),r="true"===i.attr("data-is-click");i.children(".is-dropdown-submenu");if(a)if(r){if(!n.options.closeOnClick||!n.options.clickOpen&&!s||n.options.forceFollow&&s)return;e.stopImmediatePropagation(),e.preventDefault(),n._hide(i)}else e.preventDefault(),e.stopImmediatePropagation(),n._show(i.children(".is-dropdown-submenu")),i.add(i.parentsUntil(n.$element,"."+o)).attr("data-is-click",!0)}),this.options.disableHover||this.$menuItems.on("mouseenter.zf.dropdownmenu",function(e){e.stopImmediatePropagation();var s=t(this),a=s.hasClass(o);a&&(clearTimeout(i),i=setTimeout(function(){n._show(s.children(".is-dropdown-submenu"))},n.options.hoverDelay))}).on("mouseleave.zf.dropdownmenu",function(e){var s=t(this),a=s.hasClass(o);if(a&&n.options.autoclose){if("true"===s.attr("data-is-click")&&n.options.clickOpen)return!1;i=setTimeout(function(){n._hide(s)},n.options.closingTime)}}),this.$menuItems.on("keydown.zf.dropdownmenu",function(i){var s,o,a=t(i.target).parentsUntil("ul",'[role="menuitem"]'),r=n.$tabs.index(a)>-1,l=r?n.$tabs:a.siblings("li").add(a);l.each(function(e){return t(this).is(a)?(s=l.eq(e-1),void(o=l.eq(e+1))):void 0});var d=function(){a.is(":last-child")||o.children("a:first").focus()},h=function(){s.children("a:first").focus()},u=function(){var t=a.children("ul.is-dropdown-submenu");t.length&&(n._show(t),a.find("li > a:first").focus())},f=function(){var t=a.parent("ul").parent("li");t.children("a:first").focus(),n._hide(t)},c={open:u,close:function(){n._hide(n.$element),n.$menuItems.find("a:first").focus()},handled:function(){i.preventDefault(),i.stopImmediatePropagation()}};r?n.vertical?"left"===n.options.alignment?t.extend(c,{down:d,up:h,next:u,previous:f}):t.extend(c,{down:d,up:h,next:f,previous:u}):t.extend(c,{next:d,previous:h,down:u,up:f}):"left"===n.options.alignment?t.extend(c,{next:u,previous:f,down:d,up:h}):t.extend(c,{next:f,previous:u,down:d,up:h}),e.Keyboard.handleKey(i,"DropdownMenu",c)})},i.prototype._addBodyHandler=function(){var e=t(document.body),i=this;e.off("mouseup.zf.dropdownmenu touchend.zf.dropdownmenu").on("mouseup.zf.dropdownmenu touchend.zf.dropdownmenu",function(t){var n=i.$element.find(t.target);n.length||(i._hide(),e.off("mouseup.zf.dropdownmenu touchend.zf.dropdownmenu"))})},i.prototype._show=function(i){var n=this.$tabs.index(this.$tabs.filter(function(e,n){return t(n).find(i).length>0})),s=i.parent("li.is-dropdown-submenu-parent").siblings("li.is-dropdown-submenu-parent");this._hide(s,n),i.css("visibility","hidden").addClass("js-dropdown-active").attr({"aria-hidden":!1}).parent("li.is-dropdown-submenu-parent").addClass("is-active").attr({"aria-selected":!0,"aria-expanded":!0});var o=e.Box.ImNotTouchingYou(i,null,!0);if(!o){var a="left"===this.options.alignment?"-right":"-left",r=i.parent(".is-dropdown-submenu-parent");r.removeClass("opens"+a).addClass("opens-"+this.options.alignment),o=e.Box.ImNotTouchingYou(i,null,!0),o||r.removeClass("opens-"+this.options.alignment).addClass("opens-inner"),this.changed=!0}i.css("visibility",""),this.options.closeOnClick&&this._addBodyHandler(),this.$element.trigger("show.zf.dropdownmenu",[i])},i.prototype._hide=function(t,e){var i;i=t&&t.length?t:void 0!==e?this.$tabs.not(function(t,i){return t===e}):this.$element;var n=i.hasClass("is-active")||i.find(".is-active").length>0;if(n){if(i.find("li.is-active").add(i).attr({"aria-selected":!1,"aria-expanded":!1,"data-is-click":!1}).removeClass("is-active"),i.find("ul.js-dropdown-active").attr({"aria-hidden":!0}).removeClass("js-dropdown-active"),this.changed||i.find("opens-inner").length){var s="left"===this.options.alignment?"right":"left";i.find("li.is-dropdown-submenu-parent").add(i).removeClass("opens-inner opens-"+this.options.alignment).addClass("opens-"+s),this.changed=!1}this.$element.trigger("hide.zf.dropdownmenu",[i])}},i.prototype.destroy=function(){this.$menuItems.off(".zf.dropdownmenu").removeAttr("data-is-click").removeClass("is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner"),e.Nest.Burn(this.$element,"dropdown"),e.unregisterPlugin(this)},e.plugin(i,"DropdownMenu")}(jQuery,window.Foundation),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=e.extend({},i.defaults,this.$element.data(),s),this._init(),t.registerPlugin(this,"Equalizer")}i.defaults={equalizeOnStack:!0,equalizeByRow:!1,equalizeOn:""},i.prototype._init=function(){var i=this.$element.attr("data-equalizer")||"",n=this.$element.find('[data-equalizer-watch="'+i+'"]');this.$watched=n.length?n:this.$element.find("[data-equalizer-watch]"),this.$element.attr("data-resize",i||t.GetYoDigits(6,"eq")),this.hasNested=this.$element.find("[data-equalizer]").length>0,this.isNested=this.$element.parentsUntil(document.body,"[data-equalizer]").length>0,this.isOn=!1;var s,o=this.$element.find("img");this.options.equalizeOn?(s=this._checkMQ(),e(window).on("changed.zf.mediaquery",this._checkMQ.bind(this))):this._events(),(void 0!==s&&s===!1||void 0===s)&&(o.length?t.onImagesLoaded(o,this._reflow.bind(this)):this._reflow())},i.prototype._pauseEvents=function(){this.isOn=!1,this.$element.off(".zf.equalizer resizeme.zf.trigger")},i.prototype._events=function(){var t=this;this._pauseEvents(),this.hasNested?this.$element.on("postequalized.zf.equalizer",function(e){e.target!==t.$element[0]&&t._reflow()}):this.$element.on("resizeme.zf.trigger",this._reflow.bind(this)),this.isOn=!0},i.prototype._checkMQ=function(){var e=!t.MediaQuery.atLeast(this.options.equalizeOn);return e?this.isOn&&(this._pauseEvents(),this.$watched.css("height","auto")):this.isOn||this._events(),e},i.prototype._killswitch=function(){},i.prototype._reflow=function(){return!this.options.equalizeOnStack&&this._isStacked()?(this.$watched.css("height","auto"),!1):void(this.options.equalizeByRow?this.getHeightsByRow(this.applyHeightByRow.bind(this)):this.getHeights(this.applyHeight.bind(this)))},i.prototype._isStacked=function(){return this.$watched[0].offsetTop!==this.$watched[1].offsetTop},i.prototype.getHeights=function(t){for(var e=[],i=0,n=this.$watched.length;n>i;i++)this.$watched[i].style.height="auto",e.push(this.$watched[i].offsetHeight);t(e)},i.prototype.getHeightsByRow=function(t){var i=this.$watched.first().offset().top,n=[],s=0;n[s]=[];for(var o=0,a=this.$watched.length;a>o;o++){this.$watched[o].style.height="auto";var r=e(this.$watched[o]).offset().top;r!=i&&(s++,n[s]=[],i=r),n[s].push([this.$watched[o],this.$watched[o].offsetHeight])}for(var o=0,a=n.length;a>o;o++){var l=e(n[o]).map(function(){return this[1]}).get(),d=Math.max.apply(null,l);n[o].push(d)}t(n)},i.prototype.applyHeight=function(t){var e=Math.max.apply(null,t);this.$element.trigger("preequalized.zf.equalizer"),this.$watched.css("height",e),this.$element.trigger("postequalized.zf.equalizer")},i.prototype.applyHeightByRow=function(t){this.$element.trigger("preequalized.zf.equalizer");for(var i=0,n=t.length;n>i;i++){var s=t[i].length,o=t[i][s-1];if(2>=s)e(t[i][0][0]).css({height:"auto"});else{this.$element.trigger("preequalizedrow.zf.equalizer");for(var a=0,r=s-1;r>a;a++)e(t[i][a][0]).css({height:o});this.$element.trigger("postequalizedrow.zf.equalizer")}}this.$element.trigger("postequalized.zf.equalizer")},i.prototype.destroy=function(){this._pauseEvents(),this.$watched.css("height","auto"),t.unregisterPlugin(this)},t.plugin(i,"Equalizer"),"undefined"!=typeof module&&"undefined"!=typeof module.exports&&(module.exports=i),"function"==typeof define&&define(["foundation"],function(){return i})}(Foundation,jQuery),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=e.extend({},i.defaults,s),this.rules=[],this.currentPath="",this._init(),this._events(),t.registerPlugin(this,"Interchange")}i.defaults={rules:null},i.SPECIAL_QUERIES={landscape:"screen and (orientation: landscape)",portrait:"screen and (orientation: portrait)",retina:"only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)"},i.prototype._init=function(){this._addBreakpoints(),this._generateRules(),this._reflow()},i.prototype._events=function(){e(window).on("resize.zf.interchange",t.util.throttle(this._reflow.bind(this),50))},i.prototype._reflow=function(){var t;for(var e in this.rules){var i=this.rules[e];window.matchMedia(i.query).matches&&(t=i)}t&&this.replace(t.path)},i.prototype._addBreakpoints=function(){for(var e in t.MediaQuery.queries){var n=t.MediaQuery.queries[e];i.SPECIAL_QUERIES[n.name]=n.value}},i.prototype._generateRules=function(){var t,e=[];t=this.options.rules?this.options.rules:this.$element.data("interchange").match(/\[.*?\]/g);for(var n in t){var s=t[n].slice(1,-1).split(", "),o=s.slice(0,-1).join(""),a=s[s.length-1];i.SPECIAL_QUERIES[a]&&(a=i.SPECIAL_QUERIES[a]),e.push({path:o,query:a})}this.rules=e},i.prototype.replace=function(t){if(this.currentPath!==t){var i=this;"IMG"===this.$element[0].nodeName?this.$element.attr("src",t).load(function(){i.currentPath=t}):t.match(/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i)?this.$element.css({"background-image":"url("+t+")"}):e.get(t,function(n){i.$element.html(n),e(n).foundation(),i.currentPath=t}),this.$element.trigger("replaced.zf.interchange")}},i.prototype.destroy=function(){},t.plugin(i,"Interchange"),"undefined"!=typeof module&&"undefined"!=typeof module.exports&&(module.exports=i),"function"==typeof define&&define(["foundation"],function(){return i})}(Foundation,jQuery),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=e.extend({},i.defaults,this.$element.data(),s),this._init(),t.registerPlugin(this,"Magellan")}i.defaults={animationDuration:500,animationEasing:"linear",threshold:50,activeClass:"active",deepLinking:!1,barOffset:0},i.prototype._init=function(){var i=this.$element[0].id||t.GetYoDigits(6,"magellan");this.$targets=e("[data-magellan-target]"),this.$links=this.$element.find("a"),this.$element.attr({"data-resize":i,"data-scroll":i,id:i}),this.$active=e(),this.scrollPos=parseInt(window.pageYOffset,10),this._events()},i.prototype.calcPoints=function(){var t=this,i=document.body,n=document.documentElement;this.points=[],this.winHeight=Math.round(Math.max(window.innerHeight,n.clientHeight)),this.docHeight=Math.round(Math.max(i.scrollHeight,i.offsetHeight,n.clientHeight,n.scrollHeight,n.offsetHeight)),this.$targets.each(function(){var i=e(this),n=Math.round(i.offset().top-t.options.threshold);i.targetPoint=n,t.points.push(n)})},i.prototype._events=function(){var t=this,i=e("html, body"),n={duration:t.options.animationDuration,easing:t.options.animationEasing};e(window).one("load",function(){t.calcPoints(),t._updateActive()}),this.$element.on({"resizeme.zf.trigger":this.reflow.bind(this),"scrollme.zf.trigger":this._updateActive.bind(this)}).on("click.zf.magellan",'a[href^="#"]',function(s){s.preventDefault();var o=this.getAttribute("href"),a=e(o).offset().top-t.options.threshold/2-t.options.barOffset;i.stop(!0).animate({scrollTop:a},n)})},i.prototype.reflow=function(){this.calcPoints(),this._updateActive()},i.prototype._updateActive=function(){var t,e=parseInt(window.pageYOffset,10);if(e+this.winHeight===this.docHeight)t=this.points.length-1;else if(e=t:t-n.options.threshold<=e});t=s.length?s.length-1:0}if(this.$active.removeClass(this.options.activeClass),this.$active=this.$links.eq(t).addClass(this.options.activeClass),this.options.deepLinking){var o=this.$active[0].getAttribute("href");window.history.pushState?window.history.pushState(null,null,o):window.location.hash=o}this.scrollPos=e,this.$element.trigger("update.zf.magellan",[this.$active])},i.prototype.destroy=function(){if(this.$element.off(".zf.trigger .zf.magellan").find("."+this.options.activeClass).removeClass(this.options.activeClass),this.options.deepLinking){var e=this.$active[0].getAttribute("href");window.location.hash.replace(e,"")}t.unregisterPlugin(this)},t.plugin(i,"Magellan"),"undefined"!=typeof module&&"undefined"!=typeof module.exports&&(module.exports=i),"function"==typeof define&&define(["foundation"],function(){return i})}(Foundation,jQuery),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=t.extend({},i.defaults,this.$element.data(),s),this.$lastTrigger=t(),this._init(),this._events(),e.registerPlugin(this,"OffCanvas")}i.defaults={closeOnClick:!0,transitionTime:0,position:"left",forceTop:!0,isRevealed:!1,revealOn:null,autoFocus:!0,revealClass:"reveal-for-",trapFocus:!1},i.prototype._init=function(){var e=this.$element.attr("id");if(this.$element.attr("aria-hidden","true"),t(document).find('[data-open="'+e+'"], [data-close="'+e+'"], [data-toggle="'+e+'"]').attr("aria-expanded","false").attr("aria-controls",e),this.options.closeOnClick)if(t(".js-off-canvas-exit").length)this.$exiter=t(".js-off-canvas-exit");else{var i=document.createElement("div");i.setAttribute("class","js-off-canvas-exit"),t("[data-off-canvas-content]").append(i),this.$exiter=t(i)}this.options.isRevealed=this.options.isRevealed||new RegExp(this.options.revealClass,"g").test(this.$element[0].className),this.options.isRevealed&&(this.options.revealOn=this.options.revealOn||this.$element[0].className.match(/(reveal-for-medium|reveal-for-large)/g)[0].split("-")[2],this._setMQChecker()),this.options.transitionTime||(this.options.transitionTime=1e3*parseFloat(window.getComputedStyle(t("[data-off-canvas-wrapper]")[0]).transitionDuration))},i.prototype._events=function(){if(this.$element.off(".zf.trigger .zf.offcanvas").on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":this.close.bind(this),"toggle.zf.trigger":this.toggle.bind(this),"keydown.zf.offcanvas":this._handleKeyboard.bind(this)}),this.$exiter.length){this.$exiter.on({"click.zf.offcanvas":this.close.bind(this)})}},i.prototype._setMQChecker=function(){var i=this;t(window).on("changed.zf.mediaquery",function(){e.MediaQuery.atLeast(i.options.revealOn)?i.reveal(!0):i.reveal(!1)}).one("load.zf.offcanvas",function(){e.MediaQuery.atLeast(i.options.revealOn)&&i.reveal(!0)})},i.prototype.reveal=function(t){var e=this.$element.find("[data-close]");t?(this.close(),this.isRevealed=!0,this.$element.off("open.zf.trigger toggle.zf.trigger"),e.length&&e.hide()):(this.isRevealed=!1,this.$element.on({"open.zf.trigger":this.open.bind(this),"toggle.zf.trigger":this.toggle.bind(this)}),e.length&&e.show())},i.prototype.open=function(i,n){if(!this.$element.hasClass("is-open")&&!this.isRevealed){var s=this;t(document.body);t("body").scrollTop(0),e.Move(this.options.transitionTime,this.$element,function(){t("[data-off-canvas-wrapper]").addClass("is-off-canvas-open is-open-"+s.options.position),s.$element.addClass("is-open")}),this.$element.attr("aria-hidden","false").trigger("opened.zf.offcanvas"),n&&(this.$lastTrigger=n.attr("aria-expanded","true")),this.options.autoFocus&&this.$element.one("finished.zf.animate",function(){s.$element.find("a, button").eq(0).focus()}),this.options.trapFocus&&(t("[data-off-canvas-content]").attr("tabindex","-1"),this._trapFocus())}},i.prototype._trapFocus=function(){var t=e.Keyboard.findFocusable(this.$element),i=t.eq(0),n=t.eq(-1);t.off(".zf.offcanvas").on("keydown.zf.offcanvas",function(t){(9===t.which||9===t.keycode)&&(t.target!==n[0]||t.shiftKey||(t.preventDefault(),i.focus()),t.target===i[0]&&t.shiftKey&&(t.preventDefault(),n.focus()))})},i.prototype.close=function(e){if(this.$element.hasClass("is-open")&&!this.isRevealed){var i=this;t("[data-off-canvas-wrapper]").removeClass("is-off-canvas-open is-open-"+i.options.position),i.$element.removeClass("is-open"),this.$element.attr("aria-hidden","true").trigger("closed.zf.offcanvas"),this.$lastTrigger.attr("aria-expanded","false"),this.options.trapFocus&&t("[data-off-canvas-content]").removeAttr("tabindex")}},i.prototype.toggle=function(t,e){this.$element.hasClass("is-open")?this.close(t,e):this.open(t,e)},i.prototype._handleKeyboard=function(t){27===t.which&&(t.stopPropagation(),t.preventDefault(),this.close(),this.$lastTrigger.focus())},i.prototype.destroy=function(){this.close(),this.$element.off(".zf.trigger .zf.offcanvas"),this.$exiter.off(".zf.offcanvas"),e.unregisterPlugin(this)},e.plugin(i,"OffCanvas")}(jQuery,Foundation),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=t.extend({},i.defaults,this.$element.data(),s),this._init(),e.registerPlugin(this,"Orbit"),e.Keyboard.register("Orbit",{ltr:{ARROW_RIGHT:"next",ARROW_LEFT:"previous"},rtl:{ARROW_LEFT:"next",ARROW_RIGHT:"previous"}})}i.defaults={bullets:!0,navButtons:!0,animInFromRight:"slide-in-right",animOutToRight:"slide-out-right",animInFromLeft:"slide-in-left",animOutToLeft:"slide-out-left",autoPlay:!0,timerDelay:5e3,infiniteWrap:!0,swipe:!0,pauseOnHover:!0,accessible:!0,containerClass:"orbit-container",slideClass:"orbit-slide",boxOfBullets:"orbit-bullets",nextClass:"orbit-next",prevClass:"orbit-previous",useMUI:!0},i.prototype._init=function(){this.$wrapper=this.$element.find("."+this.options.containerClass),this.$slides=this.$element.find("."+this.options.slideClass);var t=this.$element.find("img"),i=this.$slides.filter(".is-active");i.length||this.$slides.eq(0).addClass("is-active"),this.options.useMUI||this.$slides.addClass("no-motionui"),t.length?e.onImagesLoaded(t,this._prepareForOrbit.bind(this)):this._prepareForOrbit(),this.options.bullets&&this._loadBullets(),this._events(),this.options.autoPlay&&this.geoSync(),this.options.accessible&&this.$wrapper.attr("tabindex",0)},i.prototype._loadBullets=function(){this.$bullets=this.$element.find("."+this.options.boxOfBullets).find("button")},i.prototype.geoSync=function(){var t=this;this.timer=new e.Timer(this.$element,{duration:this.options.timerDelay,infinite:!1},function(){t.changeSlide(!0)}),this.timer.start()},i.prototype._prepareForOrbit=function(){var t=this;this._setWrapperHeight(function(e){t._setSlideHeight(e)})},i.prototype._setWrapperHeight=function(e){var i,n=0,s=0;this.$slides.each(function(){i=this.getBoundingClientRect().height,t(this).attr("data-slide",s),s&&t(this).css({position:"relative",display:"none"}),n=i>n?i:n,s++}),s===this.$slides.length&&(this.$wrapper.css({height:n}),e(n))},i.prototype._setSlideHeight=function(e){this.$slides.each(function(){t(this).css("max-height",e)})},i.prototype._events=function(){var i=this;if(this.options.swipe&&this.$slides.off("swipeleft.zf.orbit swiperight.zf.orbit").on("swipeleft.zf.orbit",function(t){t.preventDefault(),i.changeSlide(!0)}).on("swiperight.zf.orbit",function(t){t.preventDefault(),i.changeSlide(!1)}),this.options.autoPlay&&(this.$slides.on("click.zf.orbit",function(){i.$element.data("clickedOn",i.$element.data("clickedOn")?!1:!0),i.timer[i.$element.data("clickedOn")?"pause":"start"]()}),this.options.pauseOnHover&&this.$element.on("mouseenter.zf.orbit",function(){i.timer.pause()}).on("mouseleave.zf.orbit",function(){i.$element.data("clickedOn")||i.timer.start()})),this.options.navButtons){var n=this.$element.find("."+this.options.nextClass+", ."+this.options.prevClass);n.attr("tabindex",0).on("click.zf.orbit touchend.zf.orbit",function(){i.changeSlide(t(this).hasClass(i.options.nextClass))})}this.options.bullets&&this.$bullets.on("click.zf.orbit touchend.zf.orbit",function(){if(/is-active/g.test(this.className))return!1;var e=t(this).data("slide"),n=e>i.$slides.filter(".is-active").data("slide"),s=i.$slides.eq(e);i.changeSlide(n,s,e)}),this.$wrapper.add(this.$bullets).on("keydown.zf.orbit",function(n){e.Keyboard.handleKey(n,"Orbit",{next:function(){i.changeSlide(!0)},previous:function(){i.changeSlide(!1)},handled:function(){t(n.target).is(i.$bullets)&&i.$bullets.filter(".is-active").focus()}})})},i.prototype.changeSlide=function(t,i,n){var s=this.$slides.filter(".is-active").eq(0);if(/mui/g.test(s[0].className))return!1;var o,a=this.$slides.first(),r=this.$slides.last(),l=t?"Right":"Left",d=t?"Left":"Right",h=this;o=i?i:t?this.options.infiniteWrap?s.next("."+this.options.slideClass).length?s.next("."+this.options.slideClass):a:s.next("."+this.options.slideClass):this.options.infiniteWrap?s.prev("."+this.options.slideClass).length?s.prev("."+this.options.slideClass):r:s.prev("."+this.options.slideClass),o.length&&(this.options.bullets&&(n=n||this.$slides.index(o),this._updateBullets(n)),this.options.useMUI?(e.Motion.animateIn(o.addClass("is-active").css({position:"absolute",top:0}),this.options["animInFrom"+l],function(){o.css({position:"relative",display:"block"}).attr("aria-live","polite")}),e.Motion.animateOut(s.removeClass("is-active"),this.options["animOutTo"+d],function(){s.removeAttr("aria-live"),h.options.autoPlay&&h.timer.restart()})):(s.removeClass("is-active is-in").removeAttr("aria-live").hide(),o.addClass("is-active is-in").attr("aria-live","polite").show(),this.options.autoPlay&&this.timer.restart()),this.$element.trigger("slidechange.zf.orbit",[o]))},i.prototype._updateBullets=function(t){var e=this.$element.find("."+this.options.boxOfBullets).find(".is-active").removeClass("is-active").blur(),i=e.find("span:last").detach();this.$bullets.eq(t).addClass("is-active").append(i)},i.prototype.destroy=function(){delete this.timer,this.$element.off(".zf.orbit").find("*").off(".zf.orbit").end().hide(),e.unregisterPlugin(this)},e.plugin(i,"Orbit")}(jQuery,window.Foundation),!function(t,e){"use strict";function i(i){this.$element=e(i),this.rules=this.$element.data("responsive-menu"),this.currentMq=null,this.currentPlugin=null,this._init(),this._events(),t.registerPlugin(this,"ResponsiveMenu")}var n={dropdown:{cssClass:"dropdown",plugin:t._plugins["dropdown-menu"]||null},drilldown:{cssClass:"drilldown",plugin:t._plugins.drilldown||null},accordion:{cssClass:"accordion-menu",plugin:t._plugins["accordion-menu"]||null}};i.defaults={},i.prototype._init=function(){for(var t={},i=this.rules.split(" "),s=0;s1?o[0]:"small",r=o.length>1?o[1]:o[0];null!==n[r]&&(t[a]=n[r])}this.rules=t,e.isEmptyObject(t)||this._checkMediaQueries()},i.prototype._events=function(){var t=this;e(window).on("changed.zf.mediaquery",function(){
-t._checkMediaQueries()})},i.prototype._checkMediaQueries=function(){var i,s=this;e.each(this.rules,function(e){t.MediaQuery.atLeast(e)&&(i=e)}),i&&(this.currentPlugin instanceof this.rules[i].plugin||(e.each(n,function(t,e){s.$element.removeClass(e.cssClass)}),this.$element.addClass(this.rules[i].cssClass),this.currentPlugin&&this.currentPlugin.destroy(),this.currentPlugin=new this.rules[i].plugin(this.$element,{})))},i.prototype.destroy=function(){this.currentPlugin.destroy(),e(window).off(".zf.ResponsiveMenu"),t.unregisterPlugin(this)},t.plugin(i,"ResponsiveMenu")}(Foundation,jQuery),!function(t,e){"use strict";function i(n,s){this.$element=t(n),this.options=t.extend({},i.defaults,this.$element.data(),s),this._init(),this._events(),e.registerPlugin(this,"ResponsiveToggle")}i.defaults={hideFor:"medium"},i.prototype._init=function(){var e=this.$element.data("responsive-toggle");e||console.error("Your tab bar needs an ID of a Menu as the value of data-tab-bar."),this.$targetMenu=t("#"+e),this.$toggler=this.$element.find("[data-toggle]"),this._update()},i.prototype._events=function(){t(window).on("changed.zf.mediaquery",this._update.bind(this)),this.$toggler.on("click.zf.responsiveToggle",this.toggleMenu.bind(this))},i.prototype._update=function(){e.MediaQuery.atLeast(this.options.hideFor)?(this.$element.hide(),this.$targetMenu.show()):(this.$element.show(),this.$targetMenu.hide())},i.prototype.toggleMenu=function(){e.MediaQuery.atLeast(this.options.hideFor)||(this.$targetMenu.toggle(0),this.$element.trigger("toggled.zf.responsiveToggle"))},i.prototype.destroy=function(){},e.plugin(i,"ResponsiveToggle")}(jQuery,Foundation),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=e.extend({},i.defaults,this.$element.data(),s),this._init(),t.registerPlugin(this,"Reveal"),t.Keyboard.register("Reveal",{ENTER:"open",SPACE:"open",ESCAPE:"close",TAB:"tab_forward",SHIFT_TAB:"tab_backward"})}i.defaults={animationIn:"",animationOut:"",showDelay:0,hideDelay:0,closeOnClick:!0,closeOnEsc:!0,multipleOpened:!1,vOffset:100,hOffset:0,fullScreen:!1,btmOffsetPct:10,overlay:!0,resetOnClose:!1},i.prototype._init=function(){if(this.id=this.$element.attr("id"),this.isActive=!1,this.$anchor=e(e('[data-open="'+this.id+'"]').length?'[data-open="'+this.id+'"]':'[data-toggle="'+this.id+'"]'),this.$anchor.length){var i=this.$anchor[0].id||t.GetYoDigits(6,"reveal");this.$anchor.attr({"aria-controls":this.id,id:i,"aria-haspopup":!0,tabindex:0}),this.$element.attr({"aria-labelledby":i})}(this.options.fullScreen||this.$element.hasClass("full"))&&(this.options.fullScreen=!0,this.options.overlay=!1),this.options.overlay&&!this.$overlay&&(this.$overlay=this._makeOverlay(this.id)),this.$element.attr({role:"dialog","aria-hidden":!0,"data-yeti-box":this.id,"data-resize":this.id}),this._events()},i.prototype._makeOverlay=function(t){var i=e("
").addClass("reveal-overlay").attr({tabindex:-1,"aria-hidden":!0}).appendTo("body");return this.options.closeOnClick&&i.attr({"data-close":t}),i},i.prototype._events=function(){var t=this;this.$element.on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":this.close.bind(this),"toggle.zf.trigger":this.toggle.bind(this),"resizeme.zf.trigger":function(){t.$element.is(":visible")&&t._setPosition(function(){})}}),this.$anchor.length&&this.$anchor.on("keydown.zf.reveal",function(e){(13===e.which||32===e.which)&&(e.stopPropagation(),e.preventDefault(),t.open())}),this.options.closeOnClick&&this.options.overlay&&this.$overlay.off(".zf.reveal").on("click.zf.reveal",this.close.bind(this))},i.prototype._setPosition=function(e){var i=t.Box.GetDimensions(this.$element),n=this.options.fullScreen?"reveal full":i.height>=.5*i.windowDims.height?"reveal":"center";"reveal full"===n?this.$element.offset(t.Box.GetOffsets(this.$element,null,n,this.options.vOffset)).css({height:i.windowDims.height,width:i.windowDims.width}):t.MediaQuery.atLeast("medium")&&t.Box.ImNotTouchingYou(this.$element,null,!0,!1)?this.$element.css({"max-height":i.windowDims.height-this.options.vOffset*(this.options.btmOffsetPct/100+1),width:""}).offset(t.Box.GetOffsets(this.$element,null,n,this.options.vOffset)):(this.$element.css({width:i.windowDims.width-2*this.options.hOffset}).offset(t.Box.GetOffsets(this.$element,null,"center",this.options.vOffset,this.options.hOffset)),this.changedSize=!0),e()},i.prototype.open=function(){var i=this;this.isActive=!0,this.$element.css({visibility:"hidden"}).show().scrollTop(0),this._setPosition(function(){i.$element.hide().css({visibility:""}),i.options.multipleOpened||i.$element.trigger("closeme.zf.reveal",i.id),i.options.animationIn?i.options.overlay?t.Motion.animateIn(i.$overlay,"fade-in",function(){t.Motion.animateIn(i.$element,i.options.animationIn,function(){i.focusableElements=t.Keyboard.findFocusable(i.$element)})}):t.Motion.animateIn(i.$element,i.options.animationIn,function(){i.focusableElements=t.Keyboard.findFocusable(i.$element)}):i.options.overlay?i.$overlay.show(0,function(){i.$element.show(i.options.showDelay,function(){})}):i.$element.show(i.options.showDelay,function(){})}),this.$element.attr({"aria-hidden":!1}).attr("tabindex",-1).focus().trigger("open.zf.reveal"),e("body").addClass("is-reveal-open").attr({"aria-hidden":this.options.overlay||this.options.fullScreen?!0:!1}),setTimeout(function(){i._extraHandlers()},0)},i.prototype._extraHandlers=function(){var i=this;this.focusableElements=t.Keyboard.findFocusable(this.$element),this.options.overlay||!this.options.closeOnClick||this.options.fullScreen||e("body").on("click.zf.reveal",function(t){i.close()}),this.options.closeOnEsc&&e(window).on("keydown.zf.reveal",function(e){t.Keyboard.handleKey(e,"Reveal",{close:function(){i.options.closeOnEsc&&(i.close(),i.$anchor.focus())}}),0===i.focusableElements.length&&e.preventDefault()}),this.$element.on("keydown.zf.reveal",function(n){var s=e(this);t.Keyboard.handleKey(n,"Reveal",{tab_forward:function(){i.$element.find(":focus").is(i.focusableElements.eq(-1))&&(i.focusableElements.eq(0).focus(),n.preventDefault())},tab_backward:function(){(i.$element.find(":focus").is(i.focusableElements.eq(0))||i.$element.is(":focus"))&&(i.focusableElements.eq(-1).focus(),n.preventDefault())},open:function(){i.$element.find(":focus").is(i.$element.find("[data-close]"))?setTimeout(function(){i.$anchor.focus()},1):s.is(i.focusableElements)&&i.open()},close:function(){i.options.closeOnEsc&&(i.close(),i.$anchor.focus())}})})},i.prototype.close=function(){if(!this.isActive||!this.$element.is(":visible"))return!1;var i=this;this.options.animationOut?t.Motion.animateOut(this.$element,this.options.animationOut,function(){i.options.overlay&&t.Motion.animateOut(i.$overlay,"fade-out",function(){})}):this.$element.hide(i.options.hideDelay,function(){i.options.overlay&&i.$overlay.hide(0,function(){})}),this.options.closeOnEsc&&e(window).off("keydown.zf.reveal"),!this.options.overlay&&this.options.closeOnClick&&e("body").off("click.zf.reveal"),this.$element.off("keydown.zf.reveal"),this.changedSize&&this.$element.css({height:"",width:""}),e("body").removeClass("is-reveal-open").attr({"aria-hidden":!1,tabindex:""}),this.options.resetOnClose&&this.$element.html(this.$element.html()),this.isActive=!1,this.$element.attr({"aria-hidden":!0}).trigger("closed.zf.reveal")},i.prototype.toggle=function(){this.isActive?this.close():this.open()},i.prototype.destroy=function(){this.options.overlay&&this.$overlay.hide().off().remove(),this.$element.hide(),this.$anchor.off(),t.unregisterPlugin(this)},t.plugin(i,"Reveal"),"undefined"!=typeof module&&"undefined"!=typeof module.exports&&(module.exports=i),"function"==typeof define&&define(["foundation"],function(){return i})}(Foundation,jQuery),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=t.extend({},i.defaults,this.$element.data(),s),this._init(),e.registerPlugin(this,"Slider"),e.Keyboard.register("Slider",{ltr:{ARROW_RIGHT:"increase",ARROW_UP:"increase",ARROW_DOWN:"decrease",ARROW_LEFT:"decrease",SHIFT_ARROW_RIGHT:"increase_fast",SHIFT_ARROW_UP:"increase_fast",SHIFT_ARROW_DOWN:"decrease_fast",SHIFT_ARROW_LEFT:"decrease_fast"},rtl:{ARROW_LEFT:"increase",ARROW_RIGHT:"decrease",SHIFT_ARROW_LEFT:"increase_fast",SHIFT_ARROW_RIGHT:"decrease_fast"}})}function n(t,e){return t/e}function s(t,e,i,n){return Math.abs(t.position()[e]+t[n]()/2-i)}i.defaults={start:0,end:100,step:1,initialStart:0,initialEnd:100,binding:!1,clickSelect:!0,vertical:!1,draggable:!0,disabled:!1,doubleSided:!1,decimal:2,moveTime:200,disabledClass:"disabled"},i.prototype._init=function(){this.inputs=this.$element.find("input"),this.handles=this.$element.find("[data-slider-handle]"),this.$handle=this.handles.eq(0),this.$input=this.inputs.length?this.inputs.eq(0):t("#"+this.$handle.attr("aria-controls")),this.$fill=this.$element.find("[data-slider-fill]").css(this.options.vertical?"height":"width",0);var e=!1,i=this;(this.options.disabled||this.$element.hasClass(this.options.disabledClass))&&(this.options.disabled=!0,this.$element.addClass(this.options.disabledClass)),this.inputs.length||(this.inputs=t().add(this.$input),this.options.binding=!0),this._setInitAttr(0),this._events(this.$handle),this.handles[1]&&(this.options.doubleSided=!0,this.$handle2=this.handles.eq(1),this.$input2=this.inputs.length>1?this.inputs.eq(1):t("#"+this.$handle2.attr("aria-controls")),this.inputs[1]||(this.inputs=this.inputs.add(this.$input2)),e=!0,this._setHandlePos(this.$handle,this.options.initialStart,!0,function(){i._setHandlePos(i.$handle2,i.options.initialEnd)}),this._setInitAttr(1),this._events(this.$handle2)),e||this._setHandlePos(this.$handle,this.options.initialStart,!0)},i.prototype._setHandlePos=function(t,i,s,o){i=parseFloat(i),ithis.options.end&&(i=this.options.end);var a=this.options.doubleSided;if(a)if(0===this.handles.index(t)){var r=parseFloat(this.$handle2.attr("aria-valuenow"));i=i>=r?r-this.options.step:i}else{var l=parseFloat(this.$handle.attr("aria-valuenow"));i=l>=i?l+this.options.step:i}this.options.vertical&&!s&&(i=this.options.end-i);var d=this,h=this.options.vertical,u=h?"height":"width",f=h?"top":"left",c=t[0].getBoundingClientRect()[u]/2,p=this.$element[0].getBoundingClientRect()[u],m=n(i,this.options.end).toFixed(2),g=(p-c)*m,v=(100*n(g,p)).toFixed(this.options.decimal),i=i>0?parseFloat(i.toFixed(this.options.decimal)):0,w={};if(this._setValues(t,i),this.options.doubleSided){var y,$=0===this.handles.index(t);this.handles.index(t);if($)w[f]=(m>0?100*m:0)+"%",y=(100*(n(this.$handle2.position()[f]+c,p)-parseFloat(m))).toFixed(this.options.decimal)+"%",w["min-"+u]=y,o&&"function"==typeof o&&o();else{var b=parseFloat(this.$handle[0].style.left);i=(100>i?i:100)-(isNaN(b)?this.options.end-i:b),w["min-"+u]=i+"%"}}this.$element.one("finished.zf.animate",function(){d.animComplete=!0,d.$element.trigger("moved.zf.slider",[t])});var C=d.$element.data("dragging")?1e3/60:d.options.moveTime;e.Move(C,t,function(){t.css(f,v+"%"),d.options.doubleSided?d.$fill.css(w):d.$fill.css(u,100*m+"%")})},i.prototype._setInitAttr=function(t){var i=this.inputs.eq(t).attr("id")||e.GetYoDigits(6,"slider");this.inputs.eq(t).attr({id:i,max:this.options.end,min:this.options.start}),this.handles.eq(t).attr({role:"slider","aria-controls":i,"aria-valuemax":this.options.end,"aria-valuemin":this.options.start,"aria-valuenow":0===t?this.options.initialStart:this.options.initialEnd,"aria-orientation":this.options.vertical?"vertical":"horizontal",tabindex:0})},i.prototype._setValues=function(t,e){var i=this.options.doubleSided?this.handles.index(t):0;this.inputs.eq(i).val(e),t.attr("aria-valuenow",e)},i.prototype._handleEvent=function(t,e,i){var o,a;if(i)o=i,a=!0;else{t.preventDefault();var r=this.options.vertical,l=r?"height":"width",d=r?"top":"left",h=r?t.pageY:t.pageX,u=this.$handle[0].getBoundingClientRect()[l]/2,f=this.$element[0].getBoundingClientRect()[l],c=this.$element.offset()[d]-h,p=c>0?-u:-f>c-u?f:Math.abs(c),m=n(p,f);if(o=(this.options.end-this.options.start)*m,a=!1,!e){var g=s(this.$handle,d,p,l),v=s(this.$handle2,d,p,l);e=v>=g?this.$handle:this.$handle2}}this._setHandlePos(e,o,a)},i.prototype._events=function(i){if(this.options.disabled)return!1;var n,s=this;if(this.inputs.off("change.zf.slider").on("change.zf.slider",function(e){var i=s.inputs.index(t(this));s._handleEvent(e,s.handles.eq(i),t(this).val())}),this.options.clickSelect&&this.$element.off("click.zf.slider").on("click.zf.slider",function(t){return s.$element.data("dragging")?!1:(s.animComplete=!1,void(s.options.doubleSided?s._handleEvent(t):s._handleEvent(t,s.$handle)))}),this.options.draggable){this.handles.addTouch();var o=t("body");i.off("mousedown.zf.slider").on("mousedown.zf.slider",function(e){i.addClass("is-dragging"),s.$fill.addClass("is-dragging"),s.$element.data("dragging",!0),s.animComplete=!1,n=t(e.currentTarget),o.on("mousemove.zf.slider",function(t){t.preventDefault(),s._handleEvent(t,n)}).on("mouseup.zf.slider",function(t){s.animComplete=!0,s._handleEvent(t,n),i.removeClass("is-dragging"),s.$fill.removeClass("is-dragging"),s.$element.data("dragging",!1),o.off("mousemove.zf.slider mouseup.zf.slider")})})}i.off("keydown.zf.slider").on("keydown.zf.slider",function(i){var n,o=s.options.doubleSided?s.handles.index(t(this)):0,a=parseFloat(s.inputs.eq(o).val()),r=t(this);e.Keyboard.handleKey(i,"Slider",{decrease:function(){n=a-s.options.step},increase:function(){n=a+s.options.step},decrease_fast:function(){n=a-10*s.options.step},increase_fast:function(){n=a+10*s.options.step},handled:function(){i.preventDefault(),s._setHandlePos(r,n,!0)}})})},i.prototype.destroy=function(){this.handles.off(".zf.slider"),this.inputs.off(".zf.slider"),this.$element.off(".zf.slider"),e.unregisterPlugin(this)},e.plugin(i,"Slider")}(jQuery,window.Foundation),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=t.extend({},i.defaults,this.$element.data(),s),this._init(),e.registerPlugin(this,"Sticky")}function n(t){return parseInt(window.getComputedStyle(document.body,null).fontSize,10)*t}i.defaults={container:"
",stickTo:"top",anchor:"",topAnchor:"",btmAnchor:"",marginTop:1,marginBottom:1,stickyOn:"medium",stickyClass:"sticky",containerClass:"sticky-container",checkEvery:-1},i.prototype._init=function(){var i=this.$element.parent("[data-sticky-container]"),n=this.$element[0].id||e.GetYoDigits(6,"sticky"),s=this;i.length||(this.wasWrapped=!0),this.$container=i.length?i:t(this.options.container).wrapInner(this.$element),this.$container.addClass(this.options.containerClass),this.$element.addClass(this.options.stickyClass).attr({"data-resize":n}),this.scrollCount=this.options.checkEvery,this.isStuck=!1,""!==this.options.anchor?this.$anchor=t("#"+this.options.anchor):this._parsePoints(),this._setSizes(function(){s._calc(!1)}),this._events(n.split("-").reverse().join("-"))},i.prototype._parsePoints=function(){var e=this.options.topAnchor,i=this.options.btmAnchor,n=[e,i],s={};if(e&&i)for(var o=0,a=n.length;a>o&&n[o];o++){var r;if("number"==typeof n[o])r=n[o];else{var l=n[o].split(":"),d=t("#"+l[0]);r=d.offset().top,l[1]&&"bottom"===l[1].toLowerCase()&&(r+=d[0].getBoundingClientRect().height)}s[o]=r}else s={0:1,1:document.documentElement.scrollHeight};this.points=s},i.prototype._events=function(e){var i=this,n=this.scrollListener="scroll.zf."+e;this.isOn||(this.canStick&&(this.isOn=!0,t(window).off(n).on(n,function(t){0===i.scrollCount?(i.scrollCount=i.options.checkEvery,i._setSizes(function(){i._calc(!1,window.pageYOffset)})):(i.scrollCount--,i._calc(!1,window.pageYOffset))})),this.$element.off("resizeme.zf.trigger").on("resizeme.zf.trigger",function(t,s){i._setSizes(function(){i._calc(!1),i.canStick?i.isOn||i._events(e):i.isOn&&i._pauseListeners(n)})}))},i.prototype._pauseListeners=function(e){this.isOn=!1,t(window).off(e),this.$element.trigger("pause.zf.sticky")},i.prototype._calc=function(t,e){return t&&this._setSizes(),this.canStick?(e||(e=window.pageYOffset),void(e>=this.topPoint?e<=this.bottomPoint?this.isStuck||this._setSticky():this.isStuck&&this._removeSticky(!1):this.isStuck&&this._removeSticky(!0))):(this.isStuck&&this._removeSticky(!0),!1)},i.prototype._setSticky=function(){var t=this.options.stickTo,e="top"===t?"marginTop":"marginBottom",i="top"===t?"bottom":"top",n={};n[e]=this.options[e]+"em",n[t]=0,n[i]="auto",n.left=this.$container.offset().left+parseInt(window.getComputedStyle(this.$container[0])["padding-left"],10),this.isStuck=!0,this.$element.removeClass("is-anchored is-at-"+i).addClass("is-stuck is-at-"+t).css(n).trigger("sticky.zf.stuckto:"+t)},i.prototype._removeSticky=function(t){var e=this.options.stickTo,i="top"===e,n={},s=(this.points?this.points[1]-this.points[0]:this.anchorHeight)-this.elemHeight,o=i?"marginTop":"marginBottom",a=i?"bottom":"top",r=t?"top":"bottom";n[o]=0,t&&!i||i&&!t?(n[e]=s,n[a]=0):(n[e]=0,n[a]=s),n.left="",this.isStuck=!1,this.$element.removeClass("is-stuck is-at-"+e).addClass("is-anchored is-at-"+r).css(n).trigger("sticky.zf.unstuckfrom:"+r)},i.prototype._setSizes=function(t){this.canStick=e.MediaQuery.atLeast(this.options.stickyOn),this.canStick||t();var i=this.$container[0].getBoundingClientRect().width,n=window.getComputedStyle(this.$container[0]),s=parseInt(n["padding-right"],10);this.$anchor&&this.$anchor.length?this.anchorHeight=this.$anchor[0].getBoundingClientRect().height:this._parsePoints(),this.$element.css({"max-width":i-s+"px"});var o=this.$element[0].getBoundingClientRect().height||this.containerHeight;this.containerHeight=o,this.$container.css({height:o}),this.elemHeight=o,this.isStuck&&this.$element.css({left:this.$container.offset().left+parseInt(n["padding-left"],10)}),this._setBreakPoints(o,function(){t&&t()})},i.prototype._setBreakPoints=function(t,e){if(!this.canStick){if(!e)return!1;e()}var i=n(this.options.marginTop),s=n(this.options.marginBottom),o=this.points?this.points[0]:this.$anchor.offset().top,a=this.points?this.points[1]:o+this.anchorHeight,r=window.innerHeight;"top"===this.options.stickTo?(o-=i,a-=t+i):"bottom"===this.options.stickTo&&(o-=r-(t+s),a-=r-s),this.topPoint=o,this.bottomPoint=a,e&&e()},i.prototype.destroy=function(){this._removeSticky(!0),this.$element.removeClass(this.options.stickyClass+" is-anchored is-at-top").css({height:"",top:"",bottom:"","max-width":""}).off("resizeme.zf.trigger"),this.$anchor.off("change.zf.sticky"),t(window).off(this.scrollListener),this.wasWrapped?this.$element.unwrap():this.$container.removeClass(this.options.containerClass).css({height:""}),e.unregisterPlugin(this)},e.plugin(i,"Sticky")}(jQuery,window.Foundation),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=t.extend({},i.defaults,this.$element.data(),s),this._init(),e.registerPlugin(this,"Tabs"),e.Keyboard.register("Tabs",{ENTER:"open",SPACE:"open",ARROW_RIGHT:"next",ARROW_UP:"previous",ARROW_DOWN:"next",ARROW_LEFT:"previous"})}i.defaults={autoFocus:!1,wrapOnKeys:!0,matchHeight:!1,linkClass:"tabs-title",panelClass:"tabs-panel"},i.prototype._init=function(){var i=this;if(this.$tabTitles=this.$element.find("."+this.options.linkClass),this.$tabContent=t('[data-tabs-content="'+this.$element[0].id+'"]'),this.$tabTitles.each(function(){var e=t(this),n=e.find("a"),s=e.hasClass("is-active"),o=n.attr("href").slice(1),a=o+"-label",r=t(o);e.attr({role:"presentation"}),n.attr({role:"tab","aria-controls":o,"aria-selected":s,id:a}),r.attr({role:"tabpanel","aria-hidden":!s,"aria-labelledby":a}),s&&i.options.autoFocus&&n.focus()}),this.options.matchHeight){var n=this.$tabContent.find("img");n.length?e.onImagesLoaded(n,this._setHeight.bind(this)):this._setHeight()}this._events()},i.prototype._events=function(){this._addKeyHandler(),this._addClickHandler(),this.options.matchHeight&&t(window).on("changed.zf.mediaquery",this._setHeight.bind(this))},i.prototype._addClickHandler=function(){var e=this;this.$element.off("click.zf.tabs").on("click.zf.tabs","."+this.options.linkClass,function(i){i.preventDefault(),i.stopPropagation(),t(this).hasClass("is-active")||e._handleTabChange(t(this))})},i.prototype._addKeyHandler=function(){var i=this;i.$element.find("li:first-of-type"),i.$element.find("li:last-of-type");this.$tabTitles.off("keydown.zf.tabs").on("keydown.zf.tabs",function(n){if(9!==n.which){n.stopPropagation(),n.preventDefault();var s,o,a=t(this),r=a.parent("ul").children("li");r.each(function(e){return t(this).is(a)?void(i.options.wrapOnKeys?(s=0===e?r.last():r.eq(e-1),o=e===r.length-1?r.first():r.eq(e+1)):(s=r.eq(Math.max(0,e-1)),o=r.eq(Math.min(e+1,r.length-1)))):void 0}),e.Keyboard.handleKey(n,"Tabs",{open:function(){a.find('[role="tab"]').focus(),i._handleTabChange(a)},previous:function(){s.find('[role="tab"]').focus(),i._handleTabChange(s)},next:function(){o.find('[role="tab"]').focus(),i._handleTabChange(o)}})}})},i.prototype._handleTabChange=function(e){var i=e.find('[role="tab"]'),n=i.attr("href"),s=t(n),o=this.$element.find("."+this.options.linkClass+".is-active").removeClass("is-active").find('[role="tab"]').attr({"aria-selected":"false"}).attr("href");t(o).removeClass("is-active").attr({"aria-hidden":"true"}),e.addClass("is-active"),i.attr({"aria-selected":"true"}),s.addClass("is-active").attr({"aria-hidden":"false"}),this.$element.trigger("change.zf.tabs",[e])},i.prototype.selectTab=function(t){var e;e="object"==typeof t?t[0].id:t,e.indexOf("#")<0&&(e="#"+e);var i=this.$tabTitles.find('[href="'+e+'"]').parent("."+this.options.linkClass);this._handleTabChange(i)},i.prototype._setHeight=function(){var e=0;this.$tabContent.find("."+this.options.panelClass).css("height","").each(function(){var i=t(this),n=i.hasClass("is-active");n||i.css({visibility:"hidden",display:"block"});var s=this.getBoundingClientRect().height;n||i.css({visibility:"",display:""}),e=s>e?s:e}).css("height",e+"px")},i.prototype.destroy=function(){this.$element.find("."+this.options.linkClass).off(".zf.tabs").hide().end().find("."+this.options.panelClass).hide(),this.options.matchHeight&&t(window).off("changed.zf.mediaquery"),e.unregisterPlugin(this)},e.plugin(i,"Tabs")}(jQuery,window.Foundation),!function(t,e){"use strict";function i(n,s){this.$element=n,this.options=e.extend({},i.defaults,n.data(),s),this.className="",this._init(),this._events(),t.registerPlugin(this,"Toggler")}i.defaults={animate:!1},i.prototype._init=function(){var t;this.options.animate?(t=this.options.animate.split(" "),this.animationIn=t[0],this.animationOut=t[1]||null):(t=this.$element.data("toggler"),this.className="."===t[0]?t.slice(1):t);var i=this.$element[0].id;e('[data-open="'+i+'"], [data-close="'+i+'"], [data-toggle="'+i+'"]').attr("aria-controls",i),this.$element.attr("aria-expanded",this.$element.is(":hidden")?!1:!0)},i.prototype._events=function(){this.$element.off("toggle.zf.trigger").on("toggle.zf.trigger",this.toggle.bind(this))},i.prototype.toggle=function(){this[this.options.animate?"_toggleAnimate":"_toggleClass"]()},i.prototype._toggleClass=function(){this.$element.toggleClass(this.className);var t=this.$element.hasClass(this.className);t?this.$element.trigger("on.zf.toggler"):this.$element.trigger("off.zf.toggler"),this._updateARIA(t)},i.prototype._toggleAnimate=function(){var e=this;this.$element.is(":hidden")?t.Motion.animateIn(this.$element,this.animationIn,function(){this.trigger("on.zf.toggler"),e._updateARIA(!0)}):t.Motion.animateOut(this.$element,this.animationOut,function(){this.trigger("off.zf.toggler"),e._updateARIA(!1)})},i.prototype._updateARIA=function(t){this.$element.attr("aria-expanded",t?!0:!1)},i.prototype.destroy=function(){this.$element.off(".zf.toggler"),t.unregisterPlugin(this)},t.plugin(i,"Toggler"),"undefined"!=typeof module&&"undefined"!=typeof module.exports&&(module.exports=i),"function"==typeof define&&define(["foundation"],function(){return i})}(Foundation,jQuery),!function(t,e,i){"use strict";function n(e,s){this.$element=e,this.options=t.extend({},n.defaults,this.$element.data(),s),this.isActive=!1,this.isClick=!1,this._init(),i.registerPlugin(this,"Tooltip")}n.defaults={disableForTouch:!1,hoverDelay:200,fadeInDuration:150,fadeOutDuration:150,disableHover:!1,templateClasses:"",tooltipClass:"tooltip",triggerClass:"has-tip",showOn:"small",template:"",tipText:"",touchCloseText:"Tap to close.",clickOpen:!0,positionClass:"",vOffset:10,hOffset:12},n.prototype._init=function(){var n=this.$element.attr("aria-describedby")||i.GetYoDigits(6,"tooltip");this.options.positionClass=this._getPositionClass(this.$element),this.options.tipText=this.options.tipText||this.$element.attr("title"),this.template=this.options.template?t(this.options.template):this._buildTemplate(n),this.template.appendTo(e.body).text(this.options.tipText).hide(),this.$element.attr({title:"","aria-describedby":n,"data-yeti-box":n,"data-toggle":n,"data-resize":n}).addClass(this.triggerClass),this.usedPositions=[],this.counter=4,this.classChanged=!1,this._events()},n.prototype._getPositionClass=function(t){if(!t)return"";var e=t[0].className.match(/(top|left|right)/g);return e=e?e[0]:""},n.prototype._buildTemplate=function(e){var i=(this.options.tooltipClass+" "+this.options.positionClass).trim(),n=t("
").addClass(i).attr({role:"tooltip","aria-hidden":!0,"data-is-active":!1,"data-is-focus":!1,id:e});return n},n.prototype._reposition=function(t){this.usedPositions.push(t?t:"bottom"),!t&&this.usedPositions.indexOf("top")<0?this.template.addClass("top"):"top"===t&&this.usedPositions.indexOf("bottom")<0?this.template.removeClass(t):"left"===t&&this.usedPositions.indexOf("right")<0?this.template.removeClass(t).addClass("right"):"right"===t&&this.usedPositions.indexOf("left")<0?this.template.removeClass(t).addClass("left"):!t&&this.usedPositions.indexOf("top")>-1&&this.usedPositions.indexOf("left")<0?this.template.addClass("left"):"top"===t&&this.usedPositions.indexOf("bottom")>-1&&this.usedPositions.indexOf("left")<0?this.template.removeClass(t).addClass("left"):"left"===t&&this.usedPositions.indexOf("right")>-1&&this.usedPositions.indexOf("bottom")<0?this.template.removeClass(t):"right"===t&&this.usedPositions.indexOf("left")>-1&&this.usedPositions.indexOf("bottom")<0?this.template.removeClass(t):this.template.removeClass(t),this.classChanged=!0,this.counter--},n.prototype._setPosition=function(){var t=this._getPositionClass(this.template),e=i.Box.GetDimensions(this.template),n=i.Box.GetDimensions(this.$element),s="left"===t?"left":"right"===t?"left":"top",o="top"===s?"height":"width";"height"===o?this.options.vOffset:this.options.hOffset;if(e.width>=e.windowDims.width||!this.counter&&!i.Box.ImNotTouchingYou(this.template))return this.template.offset(i.Box.GetOffsets(this.template,this.$element,"center bottom",this.options.vOffset,this.options.hOffset,!0)).css({width:n.windowDims.width-2*this.options.hOffset,height:"auto"}),!1;for(this.template.offset(i.Box.GetOffsets(this.template,this.$element,"center "+(t||"bottom"),this.options.vOffset,this.options.hOffset));!i.Box.ImNotTouchingYou(this.template)&&this.counter;)this._reposition(t),this._setPosition()},n.prototype.show=function(){if("all"!==this.options.showOn&&!i.MediaQuery.atLeast(this.options.showOn))return!1;var t=this;this.template.css("visibility","hidden").show(),this._setPosition(),this.$element.trigger("closeme.zf.tooltip",this.template.attr("id")),this.template.attr({"data-is-active":!0,"aria-hidden":!1}),t.isActive=!0,this.template.stop().hide().css("visibility","").fadeIn(this.options.fadeInDuration,function(){}),this.$element.trigger("show.zf.tooltip")},n.prototype.hide=function(){var t=this;this.template.stop().attr({"aria-hidden":!0,"data-is-active":!1}).fadeOut(this.options.fadeOutDuration,function(){t.isActive=!1,t.isClick=!1,t.classChanged&&(t.template.removeClass(t._getPositionClass(t.template)).addClass(t.options.positionClass),t.usedPositions=[],t.counter=4,t.classChanged=!1)}),this.$element.trigger("hide.zf.tooltip")},n.prototype._events=function(){var t=this,e=(this.template,!1);this.options.disableHover||this.$element.on("mouseenter.zf.tooltip",function(e){t.isActive||(t.timeout=setTimeout(function(){t.show()},t.options.hoverDelay))}).on("mouseleave.zf.tooltip",function(i){clearTimeout(t.timeout),(!e||!t.isClick&&t.options.clickOpen)&&t.hide()}),this.options.clickOpen&&this.$element.on("mousedown.zf.tooltip",function(e){e.stopImmediatePropagation(),t.isClick?t.hide():(t.isClick=!0,!t.options.disableHover&&t.$element.attr("tabindex")||t.isActive||t.show())}),this.options.disableForTouch||this.$element.on("tap.zf.tooltip touchend.zf.tooltip",function(e){t.isActive?t.hide():t.show()}),this.$element.on({"close.zf.trigger":this.hide.bind(this)}),this.$element.on("focus.zf.tooltip",function(i){return e=!0,t.isClick?!1:void t.show()}).on("focusout.zf.tooltip",function(i){e=!1,t.isClick=!1,t.hide()}).on("resizeme.zf.trigger",function(){t.isActive&&t._setPosition()})},n.prototype.toggle=function(){this.isActive?this.hide():this.show()},n.prototype.destroy=function(){this.$element.attr("title",this.template.text()).off(".zf.trigger .zf.tootip").removeAttr("aria-describedby").removeAttr("data-yeti-box").removeAttr("data-toggle").removeAttr("data-resize"),this.template.remove(),i.unregisterPlugin(this)},i.plugin(n,"Tooltip")}(jQuery,window.document,window.Foundation);
\ No newline at end of file
diff --git a/templates/Binarity/Resources/assets/js/jquery.min.js b/templates/Binarity/Resources/assets/js/jquery.min.js
deleted file mode 100644
index fad9ab12..00000000
--- a/templates/Binarity/Resources/assets/js/jquery.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML=" ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML=" ","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML=" ",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){
-return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*\s*$/g,ia={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1>$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1>$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("")).appendTo(b.documentElement),b=qa[0].contentDocument,b.write(),b.close(),c=sa(a,b),qa.detach()),ra[a]=c),c}var ua=/^margin/,va=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wa=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xa(a,b,c){var d,e,f,g,h=a.style;return c=c||wa(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),va.test(g)&&ua.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function ya(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var za=/^(none|table(?!-c[ea]).+)/,Aa=new RegExp("^("+Q+")(.*)$","i"),Ba=new RegExp("^([+-])=("+Q+")","i"),Ca={position:"absolute",visibility:"hidden",display:"block"},Da={letterSpacing:"0",fontWeight:"400"},Ea=["Webkit","O","Moz","ms"];function Fa(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Ea.length;while(e--)if(b=Ea[e]+c,b in a)return b;return d}function Ga(a,b,c){var d=Aa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ha(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ia(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wa(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xa(a,b,f),(0>e||null==e)&&(e=a.style[b]),va.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Ha(a,b,c||(g?"border":"content"),d,f)+"px"}function Ja(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",ta(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fa(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ba.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fa(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xa(a,b,d)),"normal"===e&&b in Da&&(e=Da[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?za.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Ca,function(){return Ia(a,b,d)}):Ia(a,b,d):void 0},set:function(a,c,d){var e=d&&wa(a);return Ga(a,c,d?Ha(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=ya(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ua.test(a)||(n.cssHooks[a+b].set=Ga)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wa(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Ja(this,!0)},hide:function(){return Ja(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Ka(a,b,c,d,e){return new Ka.prototype.init(a,b,c,d,e)}n.Tween=Ka,Ka.prototype={constructor:Ka,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ka.propHooks[this.prop];return a&&a.get?a.get(this):Ka.propHooks._default.get(this)},run:function(a){var b,c=Ka.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ka.propHooks._default.set(this),this}},Ka.prototype.init.prototype=Ka.prototype,Ka.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Ka.propHooks.scrollTop=Ka.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Ka.prototype.init,n.fx.step={};var La,Ma,Na=/^(?:toggle|show|hide)$/,Oa=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pa=/queueHooks$/,Qa=[Va],Ra={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Oa.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Oa.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sa(){return setTimeout(function(){La=void 0}),La=n.now()}function Ta(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ua(a,b,c){for(var d,e=(Ra[b]||[]).concat(Ra["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Va(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||ta(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Na.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?ta(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ua(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wa(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xa(a,b,c){var d,e,f=0,g=Qa.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=La||Sa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:La||Sa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wa(k,j.opts.specialEasing);g>f;f++)if(d=Qa[f].call(j,a,k,j.opts))return d;return n.map(k,Ua,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xa,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Ra[c]=Ra[c]||[],Ra[c].unshift(b)},prefilter:function(a,b){b?Qa.unshift(a):Qa.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xa(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pa.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Ta(b,!0),a,d,e)}}),n.each({slideDown:Ta("show"),slideUp:Ta("hide"),slideToggle:Ta("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(La=n.now();b1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Za:Ya)),
-void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Za={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$a[b]||n.find.attr;$a[b]=function(a,b,d){var e,f;return d||(f=$a[b],$a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$a[b]=f),e}});var _a=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_a.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ab=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ab," ").indexOf(b)>=0)return!0;return!1}});var bb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cb=n.now(),db=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var eb=/#.*$/,fb=/([?&])_=[^&]*/,gb=/^(.*?):[ \t]*([^\r\n]*)$/gm,hb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ib=/^(?:GET|HEAD)$/,jb=/^\/\//,kb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lb={},mb={},nb="*/".concat("*"),ob=a.location.href,pb=kb.exec(ob.toLowerCase())||[];function qb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rb(a,b,c,d){var e={},f=a===mb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function ub(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ob,type:"GET",isLocal:hb.test(pb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sb(sb(a,n.ajaxSettings),b):sb(n.ajaxSettings,a)},ajaxPrefilter:qb(lb),ajaxTransport:qb(mb),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gb.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||ob)+"").replace(eb,"").replace(jb,pb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kb.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pb[1]&&h[2]===pb[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pb[3]||("http:"===pb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rb(lb,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ib.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(db.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fb.test(d)?d.replace(fb,"$1_="+cb++):d+(db.test(d)?"&":"?")+"_="+cb++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nb+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rb(mb,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tb(k,v,f)),u=ub(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vb=/%20/g,wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&").replace(vb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bb=0,Cb={},Db={0:200,1223:204},Eb=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cb)Cb[a]()}),k.cors=!!Eb&&"withCredentials"in Eb,k.ajax=Eb=!!Eb,n.ajaxTransport(function(a){var b;return k.cors||Eb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Db[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cb[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("
- @endif
-
-
-
-
-
-
-
-
-
-
-
-
-
- @yield('content')
-
-
-
-
-
-
-
-
-
-
-
-
-@yield('javascripts')
-
-
-
- {{$comment->name}} ({{$comment->email}})
-
-- {{$comment->content}} -
-