From f9b340ca69e0172a0476bb468e44a7ea915b2e1e Mon Sep 17 00:00:00 2001 From: "Mykola (Nikolay) Ostrizhnii" <44202033+ostrizhny@users.noreply.github.com> Date: Fri, 15 Mar 2019 07:28:35 +0200 Subject: [PATCH 001/304] TE-966: Create TwigApplicationPlugin (#5017) * TE-968 Created TwigExtensionInterface. * TE-1192 Added EventDispatcherExtension module. * TE-1191 Adding EventDispatcher module. * TE-1192 Added Container for EventDispatcherExtensionPlugin. * TE-1191 Added EventDispatcherExtension as dependency. * TE-1191 Fixed Symfony version constraints. * TE-967 Create Twig ApplicationExtension plugin (#4830). * TE-967 Added shared Twig application plugin. * TE-967 Moved logic to separate application extensions and twig extension plugins. * TE-967 Created event subscriber for Zed twig service. * TE-967 Removed all twig container id's that should not be in the application and moved logic to plugins. * TE-967: EventDispatcherExtensionPluginInterface -> EventDispatcherPluginInterface * TE-977 Added UserTwigPlugin. * TE-976 Added MoneyTwigPlugin. * TE-975 Added CurrencyTwigPlugin. * TE-974 Added ZedNavigationTwigPlugin. * TE-983: Added CmsContentWidgetPlugin (#4930). * TE-983: * Deprecated CmsContentWidgetServiceProvider * Created CmsContentWidgetTwigPlugin as replacement for CmsContentWidgetTwigPlugin * Updated composer dependencies * TE-969: Move TwigChartFunctionServiceProvider (#4937) * TE-969 * Deprecated TwigChartFunctionServiceProvider * Created ChartTwigPlugin as replacement for TwigChartFunctionServiceProvider * Updated composer.json * TE-992 * Created KernelApplicationPlugin as replacement of application functionality of ShopAppliactionServiceProvider * Created StoreApplicationPlugin as replacement of store functionality of ShopApplicaitonServiceProvider * Revert "TE-992" This reverts commit 247ba8e970b6e6aa55af034f1049efc55f9db8bd. * TE-972: Move DateTimeFormatterServiceProvider (#4935) * TE-972 * Deprecated DateTimeFormatterServiceProvider * Created DateTimeFormatterTwigPlugin as replacement for DateTimeFormatterServiceProvider * Updated composer.json for UtilDateTime * TE-970: Move TwigGlobalVariablesServiceProvider (#4944) * TE-970 * Deprecated EnvironmentInformationServiceProvider * Depracated TwigGlobalVariablesServiceProvider * Deprecated EnfironmentInfo * Created ApplicationTwigPlugin * Updated copmoser.json * TE-994: Added LocaleExtensionModule (#4973). * TE-994: Added LocaleExtension module. * TE-966: Removed adding global variables from TwigApplicationPlugins (#4998) * TE-994: MoveShopApplicationServiceProvider (#4968) TE-994 * Created ShopApplicationApplicationPlugin as replacement of application functionality of ShopAppliactionServiceProvider * Created StoreApplicationPlugin as replacement of store functionality of ShopApplicaitonServiceProvider * Created LocaleApplicationPlugin as replacement of locale functionality of ShopApplicaitonServiceProvider * Added getName to zed's AbstractTwigExtensionPlugin * Added FLAG_USE_LOCALE_LISTENER * TE-973 Move TranslationServiceProvider (#4953) * added new translator plugin * refactored Translator and UserLocale application plugins * created LocaleApplicationPlugin * refactored event dispatcher. Added new LocaleListener substitution for Zed * added locale listener substitution plugin for Yves * te-966 Fixed Translator performance by moving plugin stack execution inside of Translator to not run on instantiation. * TE-966: * Fixed doc block typehints for container. Ignored not found exception * LocalePlugin -> LocaleLocalePlugin * Introduced `Spryker/Yves/CmsBlock/Plugin/Twig/CmsBlockPlaceholderTwigPlugin` instead of `Spryker/Yves/CmsBlock/Twig/Plugin/TwigCmsBlockPlaceholder`. * Deprecated `Spryker/Yves/CmsBlock/Twig/Plugin/TwigCmsBlockPlaceholder`. * Deprecated `Spryker/Yves/CmsBlock/Twig/Plugin/TwigCmsBlock`. * Modified typehints `Spryker/Yves/Kernel/Plugin/Pimple` it is able to take Container as well as Application. * Introduced `Spryker/Yves/Twig/Plugin/AbstractTwigExtensionPlugin`. * te-966 Added TwigGlobalVariablesServiceProvider to ApplicationDependencyProvider for BC * te-966 Added check with instance of which translator is added as service for BC reasons. --- composer.json | 3 + phpstan.neon | 1 + .../Zed/Gui/Communication/Form/DeleteForm.php | 1 + .../Form/Type/AutosuggestType.php | 1 + .../Gui/Communication/Form/Type/ImageType.php | 1 + .../Communication/Form/Type/ParagraphType.php | 1 + .../Form/Type/Select2ComboBoxType.php | 1 + .../Communication/Form/Type/SelectType.php | 1 + .../Communication/GuiCommunicationFactory.php | 12 ++ .../Plugin/ConstraintsPlugin.php | 1 + .../GuiTwigExtensionServiceProvider.php | 1 + .../Twig/FormRuntimeLoaderTwigPlugin.php | 111 ++++++++++++++++++ .../Plugin/Twig/GuiTwigLoaderPlugin.php | 31 +++++ src/Spryker/Zed/Gui/GuiConfig.php | 45 +++++++ src/Spryker/Zed/Gui/GuiDependencyProvider.php | 3 + 15 files changed, 214 insertions(+) create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php create mode 100644 src/Spryker/Zed/Gui/GuiConfig.php diff --git a/composer.json b/composer.json index 796cada6..41cda244 100644 --- a/composer.json +++ b/composer.json @@ -9,16 +9,19 @@ "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", "spryker/twig": "^3.0.0", + "spryker/twig-extension": "^1.0.0", "spryker/util-sanitize": "^2.0.0", "spryker/util-text": "^1.1.0" }, "require-dev": { "spryker/application": "*", + "spryker/container": "*", "spryker/propel": "*", "spryker/silex": "*", "spryker/testify": "*" }, "suggest": { + "spryker/container": "If you want to use Twig plugins", "spryker/silex": "If you want to use ServiceProvider." }, "autoload": { diff --git a/phpstan.neon b/phpstan.neon index afb3f59c..455bf4e8 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -3,3 +3,4 @@ parameters: - '#Function twig_escape_filter not found.#' - '#.+ has invalid typehint type Symfony\\Component\\OptionsResolver\\OptionsResolverInterface.#' - '#Call to method setDefault\(\) on an unknown class Symfony\\Component\\OptionsResolver\\OptionsResolverInterface.#' + - '#Class Symfony\\Bridge\\Twig\\Form\\TwigRenderer not found.#' diff --git a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php index 4163710f..14903f90 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class DeleteForm extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php index 3c2c8a53..a6752b64 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class AutosuggestType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php index 3c7e923c..8cb97469 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php @@ -15,6 +15,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class ImageType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php index f5eb426b..dcdd5fdf 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php @@ -14,6 +14,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class ParagraphType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php index c2a74463..e3ad1912 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class Select2ComboBoxType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php index bd1498cf..e481c020 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class SelectType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index fa43888b..3c6520df 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -7,8 +7,20 @@ namespace Spryker\Zed\Gui\Communication; +use Spryker\Shared\Twig\Loader\FilesystemLoader; +use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; +/** + * @method \Spryker\Zed\Gui\GuiConfig getConfig() + */ class GuiCommunicationFactory extends AbstractCommunicationFactory { + /** + * @return \Spryker\Shared\Twig\Loader\FilesystemLoaderInterface + */ + public function createFilesystemLoader(): FilesystemLoaderInterface + { + return new FilesystemLoader($this->getConfig()->getTemplatePaths()); + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php index ccaff5c1..45f55fa3 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php @@ -58,6 +58,7 @@ * @deprecated This class will be removed. * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class ConstraintsPlugin extends AbstractPlugin { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index 667251bc..e7f1a846 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class GuiTwigExtensionServiceProvider extends AbstractPlugin implements ServiceProviderInterface { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php new file mode 100644 index 00000000..33eadd28 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php @@ -0,0 +1,111 @@ +addRuntimeLoader($this->createFactoryRuntimeLoader($twig, $container)); + + return $twig; + } + + /** + * @return array + */ + protected function getTwigTemplateFileNames(): array + { + $files = new FilesystemIterator( + $this->getConfig()->getFormResourcesPath(), + FilesystemIterator::SKIP_DOTS | FilesystemIterator::KEY_AS_PATHNAME + ); + + $typeTemplates = $this->getConfig()->getDefaultTemplateFileNames(); + foreach ($files as $file) { + $typeTemplates[] = $file->getFilename(); + } + + return $typeTemplates; + } + + /** + * @param \Twig\Environment $twig + * + * @return \Symfony\Component\Form\FormRendererEngineInterface + */ + protected function createTwigRendererEngine(Environment $twig): FormRendererEngineInterface + { + return new TwigRendererEngine($this->getTwigTemplateFileNames(), $twig); + } + + /** + * @param \Twig\Environment $twig + * @param \Symfony\Component\Security\Csrf\CsrfTokenManagerInterface|null $csrfTokenManager + * + * @return \Symfony\Component\Form\FormRendererInterface + */ + protected function createFormRenderer(Environment $twig, ?CsrfTokenManagerInterface $csrfTokenManager = null): FormRendererInterface + { + return new FormRenderer($this->createTwigRendererEngine($twig), $csrfTokenManager); + } + + /** + * @param \Twig\Environment $twig + * @param \Spryker\Service\Container\ContainerInterface $container + * + * @return \Twig\RuntimeLoader\FactoryRuntimeLoader + */ + protected function createFactoryRuntimeLoader(Environment $twig, ContainerInterface $container) + { + $formRendererCallback = function () use ($twig, $container) { + if ($container->has(static::SERVICE_FORM_CSRF_PROVIDER)) { + return $this->createFormRenderer($twig, $container->get(static::SERVICE_FORM_CSRF_PROVIDER)); + } + + return $this->createFormRenderer($twig); + }; + + $loadersMap = []; + $loadersMap[FormRenderer::class] = $formRendererCallback; + if (class_exists(TwigRenderer::class)) { + $loadersMap[TwigRenderer::class] = $formRendererCallback; + } + + return new FactoryRuntimeLoader($loadersMap); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php new file mode 100644 index 00000000..5e878972 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php @@ -0,0 +1,31 @@ +getFactory()->createFilesystemLoader(); + } +} diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php new file mode 100644 index 00000000..2626b7a8 --- /dev/null +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -0,0 +1,45 @@ +getFormResourcesPath(), + ]; + } + + /** + * @return string[] + */ + public function getDefaultTemplateFileNames(): array + { + return static::FORM_DEFAULT_TEMPLATE_FILE_NAMES; + } +} diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index 4fb157d0..4cc61cb3 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -26,6 +26,9 @@ use Spryker\Zed\Kernel\AbstractBundleDependencyProvider; use Spryker\Zed\Kernel\Container; +/** + * @method \Spryker\Zed\Gui\GuiConfig getConfig() + */ class GuiDependencyProvider extends AbstractBundleDependencyProvider { public const GUI_TWIG_FUNCTIONS = 'gui_twig_functions'; From 517681582da2cf3a69f8f0b80c32bdaeea84e930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Tue, 26 Mar 2019 16:19:37 +0100 Subject: [PATCH 002/304] TE-966: Create TwigApplicationPlugin (#5091) * TE-966: Create TwigApplicationPlugin (#5017) * TE-968 Created TwigExtensionInterface. * TE-1192 Added EventDispatcherExtension module. * TE-1191 Adding EventDispatcher module. * TE-1192 Added Container for EventDispatcherExtensionPlugin. * TE-1191 Added EventDispatcherExtension as dependency. * TE-1191 Fixed Symfony version constraints. * TE-967 Create Twig ApplicationExtension plugin (#4830). * TE-967 Added shared Twig application plugin. * TE-967 Moved logic to separate application extensions and twig extension plugins. * TE-967 Created event subscriber for Zed twig service. * TE-967 Removed all twig container id's that should not be in the application and moved logic to plugins. * TE-967: EventDispatcherExtensionPluginInterface -> EventDispatcherPluginInterface * TE-977 Added UserTwigPlugin. * TE-976 Added MoneyTwigPlugin. * TE-975 Added CurrencyTwigPlugin. * TE-974 Added ZedNavigationTwigPlugin. * TE-983: Added CmsContentWidgetPlugin (#4930). * TE-983: * Deprecated CmsContentWidgetServiceProvider * Created CmsContentWidgetTwigPlugin as replacement for CmsContentWidgetTwigPlugin * Updated composer dependencies * TE-969: Move TwigChartFunctionServiceProvider (#4937) * TE-969 * Deprecated TwigChartFunctionServiceProvider * Created ChartTwigPlugin as replacement for TwigChartFunctionServiceProvider * Updated composer.json * TE-992 * Created KernelApplicationPlugin as replacement of application functionality of ShopAppliactionServiceProvider * Created StoreApplicationPlugin as replacement of store functionality of ShopApplicaitonServiceProvider * Revert "TE-992" This reverts commit 247ba8e970b6e6aa55af034f1049efc55f9db8bd. * TE-972: Move DateTimeFormatterServiceProvider (#4935) * TE-972 * Deprecated DateTimeFormatterServiceProvider * Created DateTimeFormatterTwigPlugin as replacement for DateTimeFormatterServiceProvider * Updated composer.json for UtilDateTime * TE-970: Move TwigGlobalVariablesServiceProvider (#4944) * TE-970 * Deprecated EnvironmentInformationServiceProvider * Depracated TwigGlobalVariablesServiceProvider * Deprecated EnfironmentInfo * Created ApplicationTwigPlugin * Updated copmoser.json * TE-994: Added LocaleExtensionModule (#4973). * TE-994: Added LocaleExtension module. * TE-966: Removed adding global variables from TwigApplicationPlugins (#4998) * TE-994: MoveShopApplicationServiceProvider (#4968) TE-994 * Created ShopApplicationApplicationPlugin as replacement of application functionality of ShopAppliactionServiceProvider * Created StoreApplicationPlugin as replacement of store functionality of ShopApplicaitonServiceProvider * Created LocaleApplicationPlugin as replacement of locale functionality of ShopApplicaitonServiceProvider * Added getName to zed's AbstractTwigExtensionPlugin * Added FLAG_USE_LOCALE_LISTENER * TE-973 Move TranslationServiceProvider (#4953) * added new translator plugin * refactored Translator and UserLocale application plugins * created LocaleApplicationPlugin * refactored event dispatcher. Added new LocaleListener substitution for Zed * added locale listener substitution plugin for Yves * te-966 Fixed Translator performance by moving plugin stack execution inside of Translator to not run on instantiation. * TE-966: * Fixed doc block typehints for container. Ignored not found exception * LocalePlugin -> LocaleLocalePlugin * Introduced `Spryker/Yves/CmsBlock/Plugin/Twig/CmsBlockPlaceholderTwigPlugin` instead of `Spryker/Yves/CmsBlock/Twig/Plugin/TwigCmsBlockPlaceholder`. * Deprecated `Spryker/Yves/CmsBlock/Twig/Plugin/TwigCmsBlockPlaceholder`. * Deprecated `Spryker/Yves/CmsBlock/Twig/Plugin/TwigCmsBlock`. * Modified typehints `Spryker/Yves/Kernel/Plugin/Pimple` it is able to take Container as well as Application. * Introduced `Spryker/Yves/Twig/Plugin/AbstractTwigExtensionPlugin`. * te-966 Added TwigGlobalVariablesServiceProvider to ApplicationDependencyProvider for BC * te-966 Added check with instance of which translator is added as service for BC reasons. * TE-966 Fixed code review findings * TE-966 Updated composer constraints --- composer.json | 3 + phpstan.neon | 1 + .../Zed/Gui/Communication/Form/DeleteForm.php | 1 + .../Form/Type/AutosuggestType.php | 1 + .../Gui/Communication/Form/Type/ImageType.php | 1 + .../Communication/Form/Type/ParagraphType.php | 1 + .../Form/Type/Select2ComboBoxType.php | 1 + .../Communication/Form/Type/SelectType.php | 1 + .../Communication/GuiCommunicationFactory.php | 12 ++ .../Plugin/ConstraintsPlugin.php | 1 + .../GuiTwigExtensionServiceProvider.php | 1 + .../Twig/FormRuntimeLoaderTwigPlugin.php | 111 ++++++++++++++++++ .../Plugin/Twig/GuiTwigLoaderPlugin.php | 31 +++++ src/Spryker/Zed/Gui/GuiConfig.php | 45 +++++++ src/Spryker/Zed/Gui/GuiDependencyProvider.php | 3 + 15 files changed, 214 insertions(+) create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php create mode 100644 src/Spryker/Zed/Gui/GuiConfig.php diff --git a/composer.json b/composer.json index 796cada6..41cda244 100644 --- a/composer.json +++ b/composer.json @@ -9,16 +9,19 @@ "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", "spryker/twig": "^3.0.0", + "spryker/twig-extension": "^1.0.0", "spryker/util-sanitize": "^2.0.0", "spryker/util-text": "^1.1.0" }, "require-dev": { "spryker/application": "*", + "spryker/container": "*", "spryker/propel": "*", "spryker/silex": "*", "spryker/testify": "*" }, "suggest": { + "spryker/container": "If you want to use Twig plugins", "spryker/silex": "If you want to use ServiceProvider." }, "autoload": { diff --git a/phpstan.neon b/phpstan.neon index afb3f59c..455bf4e8 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -3,3 +3,4 @@ parameters: - '#Function twig_escape_filter not found.#' - '#.+ has invalid typehint type Symfony\\Component\\OptionsResolver\\OptionsResolverInterface.#' - '#Call to method setDefault\(\) on an unknown class Symfony\\Component\\OptionsResolver\\OptionsResolverInterface.#' + - '#Class Symfony\\Bridge\\Twig\\Form\\TwigRenderer not found.#' diff --git a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php index 4163710f..14903f90 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class DeleteForm extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php index 3c2c8a53..a6752b64 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class AutosuggestType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php index 3c7e923c..8cb97469 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php @@ -15,6 +15,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class ImageType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php index f5eb426b..dcdd5fdf 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php @@ -14,6 +14,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class ParagraphType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php index c2a74463..e3ad1912 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class Select2ComboBoxType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php index bd1498cf..e481c020 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class SelectType extends AbstractType { diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index fa43888b..3c6520df 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -7,8 +7,20 @@ namespace Spryker\Zed\Gui\Communication; +use Spryker\Shared\Twig\Loader\FilesystemLoader; +use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; +/** + * @method \Spryker\Zed\Gui\GuiConfig getConfig() + */ class GuiCommunicationFactory extends AbstractCommunicationFactory { + /** + * @return \Spryker\Shared\Twig\Loader\FilesystemLoaderInterface + */ + public function createFilesystemLoader(): FilesystemLoaderInterface + { + return new FilesystemLoader($this->getConfig()->getTemplatePaths()); + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php index ccaff5c1..45f55fa3 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php @@ -58,6 +58,7 @@ * @deprecated This class will be removed. * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class ConstraintsPlugin extends AbstractPlugin { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index cc067089..9d433476 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -16,6 +16,7 @@ /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class GuiTwigExtensionServiceProvider extends AbstractPlugin implements ServiceProviderInterface { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php new file mode 100644 index 00000000..33eadd28 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php @@ -0,0 +1,111 @@ +addRuntimeLoader($this->createFactoryRuntimeLoader($twig, $container)); + + return $twig; + } + + /** + * @return array + */ + protected function getTwigTemplateFileNames(): array + { + $files = new FilesystemIterator( + $this->getConfig()->getFormResourcesPath(), + FilesystemIterator::SKIP_DOTS | FilesystemIterator::KEY_AS_PATHNAME + ); + + $typeTemplates = $this->getConfig()->getDefaultTemplateFileNames(); + foreach ($files as $file) { + $typeTemplates[] = $file->getFilename(); + } + + return $typeTemplates; + } + + /** + * @param \Twig\Environment $twig + * + * @return \Symfony\Component\Form\FormRendererEngineInterface + */ + protected function createTwigRendererEngine(Environment $twig): FormRendererEngineInterface + { + return new TwigRendererEngine($this->getTwigTemplateFileNames(), $twig); + } + + /** + * @param \Twig\Environment $twig + * @param \Symfony\Component\Security\Csrf\CsrfTokenManagerInterface|null $csrfTokenManager + * + * @return \Symfony\Component\Form\FormRendererInterface + */ + protected function createFormRenderer(Environment $twig, ?CsrfTokenManagerInterface $csrfTokenManager = null): FormRendererInterface + { + return new FormRenderer($this->createTwigRendererEngine($twig), $csrfTokenManager); + } + + /** + * @param \Twig\Environment $twig + * @param \Spryker\Service\Container\ContainerInterface $container + * + * @return \Twig\RuntimeLoader\FactoryRuntimeLoader + */ + protected function createFactoryRuntimeLoader(Environment $twig, ContainerInterface $container) + { + $formRendererCallback = function () use ($twig, $container) { + if ($container->has(static::SERVICE_FORM_CSRF_PROVIDER)) { + return $this->createFormRenderer($twig, $container->get(static::SERVICE_FORM_CSRF_PROVIDER)); + } + + return $this->createFormRenderer($twig); + }; + + $loadersMap = []; + $loadersMap[FormRenderer::class] = $formRendererCallback; + if (class_exists(TwigRenderer::class)) { + $loadersMap[TwigRenderer::class] = $formRendererCallback; + } + + return new FactoryRuntimeLoader($loadersMap); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php new file mode 100644 index 00000000..5e878972 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php @@ -0,0 +1,31 @@ +getFactory()->createFilesystemLoader(); + } +} diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php new file mode 100644 index 00000000..2626b7a8 --- /dev/null +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -0,0 +1,45 @@ +getFormResourcesPath(), + ]; + } + + /** + * @return string[] + */ + public function getDefaultTemplateFileNames(): array + { + return static::FORM_DEFAULT_TEMPLATE_FILE_NAMES; + } +} diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index a6da7867..53328e14 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -26,6 +26,9 @@ use Spryker\Zed\Kernel\AbstractBundleDependencyProvider; use Spryker\Zed\Kernel\Container; +/** + * @method \Spryker\Zed\Gui\GuiConfig getConfig() + */ class GuiDependencyProvider extends AbstractBundleDependencyProvider { public const GUI_TWIG_FUNCTIONS = 'gui_twig_functions'; From d2dea7aef50dc8e1f4559452d0530f7a68940c6f Mon Sep 17 00:00:00 2001 From: gechetspr Date: Wed, 27 Mar 2019 17:33:58 +0200 Subject: [PATCH 003/304] TE-963 refactored validator module and fixed some additional issues --- .../Extension/NoValidateTypeExtension.php | 36 ---------- .../Extension/NoValidateTypeExtension.php | 3 - .../Communication/GuiCommunicationFactory.php | 27 ++++++++ .../Plugin/Form}/NoValidateTypeFormPlugin.php | 12 ++-- .../GuiTwigExtensionServiceProvider.php | 3 + .../Plugin/Twig/GuiTwigPlugin.php | 68 +++++++++++++++++++ 6 files changed, 106 insertions(+), 43 deletions(-) delete mode 100644 src/Spryker/Shared/Gui/Form/Type/Extension/NoValidateTypeExtension.php rename src/Spryker/{Shared/Gui/Plugin/FormExtension => Zed/Gui/Communication/Plugin/Form}/NoValidateTypeFormPlugin.php (70%) create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php diff --git a/src/Spryker/Shared/Gui/Form/Type/Extension/NoValidateTypeExtension.php b/src/Spryker/Shared/Gui/Form/Type/Extension/NoValidateTypeExtension.php deleted file mode 100644 index aabcaa9f..00000000 --- a/src/Spryker/Shared/Gui/Form/Type/Extension/NoValidateTypeExtension.php +++ /dev/null @@ -1,36 +0,0 @@ -vars['attr'] = array_merge($view->vars['attr'], [ - 'novalidate' => 'novalidate', - ]); - } - - /** - * {@inheritdoc} - */ - public function getExtendedType() - { - return Form::class; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php index 8181734f..71838dc4 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php @@ -12,9 +12,6 @@ use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; -/** - * @deprecated Use `Spryker\Shared\Gui\Form\Type\Extension\NoValidateTypeExtension` instead. - */ class NoValidateTypeExtension extends AbstractTypeExtension { /** diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index 3c6520df..4e621849 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -9,7 +9,10 @@ use Spryker\Shared\Twig\Loader\FilesystemLoader; use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; +use Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension; +use Spryker\Zed\Gui\GuiDependencyProvider; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; +use Symfony\Component\Form\FormTypeExtensionInterface; /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() @@ -23,4 +26,28 @@ public function createFilesystemLoader(): FilesystemLoaderInterface { return new FilesystemLoader($this->getConfig()->getTemplatePaths()); } + + /** + * @return \Twig\TwigFunction[] + */ + public function getTwigFunctions(): array + { + return $this->getProvidedDependency(GuiDependencyProvider::GUI_TWIG_FUNCTIONS); + } + + /** + * @return \Twig\TwigFunction[] + */ + public function getTwigFilters(): array + { + return $this->getProvidedDependency(GuiDependencyProvider::GUI_TWIG_FILTERS); + } + + /** + * @return \Symfony\Component\Form\FormTypeExtensionInterface + */ + public function createNoValidateFormTypeExtension(): FormTypeExtensionInterface + { + return new NoValidateTypeExtension(); + } } diff --git a/src/Spryker/Shared/Gui/Plugin/FormExtension/NoValidateTypeFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php similarity index 70% rename from src/Spryker/Shared/Gui/Plugin/FormExtension/NoValidateTypeFormPlugin.php rename to src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php index f955da5d..d7532b9c 100644 --- a/src/Spryker/Shared/Gui/Plugin/FormExtension/NoValidateTypeFormPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php @@ -5,14 +5,18 @@ * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ -namespace Spryker\Shared\Gui\Plugin\FormExtension; +namespace Spryker\Zed\Gui\Communication\Plugin\Form; use Spryker\Service\Container\ContainerInterface; use Spryker\Shared\FormExtension\Dependency\Plugin\FormPluginInterface; -use Spryker\Shared\Gui\Form\Type\Extension\NoValidateTypeExtension; +use Spryker\Zed\Kernel\Communication\AbstractPlugin; use Symfony\Component\Form\FormFactoryBuilderInterface; -class NoValidateTypeFormPlugin implements FormPluginInterface +/** + * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() + */ +class NoValidateTypeFormPlugin extends AbstractPlugin implements FormPluginInterface { /** * {@inheritdoc} @@ -28,7 +32,7 @@ class NoValidateTypeFormPlugin implements FormPluginInterface public function extend(FormFactoryBuilderInterface $formFactoryBuilder, ContainerInterface $container): FormFactoryBuilderInterface { $formFactoryBuilder->addTypeExtension( - new NoValidateTypeExtension() + $this->getFactory()->createNoValidateFormTypeExtension() ); return $formFactoryBuilder; diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index 9d433476..f96212a6 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -15,6 +15,9 @@ use Twig\Environment; /** + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\GuiTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\GuiTwigPlugin` instead. + * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php new file mode 100644 index 00000000..4783b408 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php @@ -0,0 +1,68 @@ +addTwigFilters($twig); + $twig = $this->addTwigFunctions($twig); + + return $twig; + } + + /** + * @param \Twig\Environment $twig + * + * @return \Twig\Environment + */ + protected function addTwigFunctions(Environment $twig): Environment + { + $twigFunctions = $this->getFactory()->getTwigFunctions(); + foreach ($twigFunctions as $function) { + $twig->addFunction($function); + } + + return $twig; + } + + /** + * @param \Twig\Environment $twig + * + * @return \Twig\Environment + */ + protected function addTwigFilters(Environment $twig): Environment + { + $twigFilters = $this->getFactory()->getTwigFilters(); + foreach ($twigFilters as $filter) { + $twig->addFilter($filter); + } + + return $twig; + } +} From 6bcbcf1142fbedc930e5dea6c0a741a920ecf5bd Mon Sep 17 00:00:00 2001 From: mscherer Date: Mon, 8 Apr 2019 11:22:39 +0200 Subject: [PATCH 004/304] Collector phpstan level5 --- assets/Zed/package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index ea2f3301..51e6f099 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -146,7 +146,7 @@ "jquery-migrate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.0.1.tgz", - "integrity": "sha1-FB3jq/5tMBuqpBMLDse5qDmEXnI=" + "integrity": "sha512-NYlhcFnRh4Bv9jvadPlcAKQdVGRE0+TSgFYxQ+ZnCxUUHbwd+SjbOg+Xvu1Oea9mpQJ+2VB1eCfcBORWNQsHaA==" }, "jquery-mousewheel": { "version": "3.1.13", From cc3ad4c5a1bbf2100cb9283691477e9c2101d694 Mon Sep 17 00:00:00 2001 From: Alexander Veselov Date: Mon, 15 Apr 2019 15:44:35 +0000 Subject: [PATCH 005/304] CMS-171: CMS-32: refactoring, fixed sorting --- .../Table/TableConfiguration.php | 24 +++++++++---------- .../Zed/Gui/Presentation/Table/index.twig | 3 ++- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php index 5600ba20..679277d9 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php +++ b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php @@ -368,9 +368,9 @@ public function setStateSave($stateSave) } /** - * @return bool + * @return bool|null */ - public function isProcessing() + public function isProcessing(): ?bool { return $this->processing; } @@ -380,15 +380,15 @@ public function isProcessing() * * @return void */ - public function setProcessing($processing) + public function setProcessing(bool $processing) { $this->processing = $processing; } /** - * @return bool + * @return bool|null */ - public function isServerSide() + public function isServerSide(): ?bool { return $this->serverSide; } @@ -398,15 +398,15 @@ public function isServerSide() * * @return void */ - public function setServerSide($serverSide) + public function setServerSide(bool $serverSide) { $this->serverSide = $serverSide; } /** - * @return bool + * @return bool|null */ - public function isPaging() + public function isPaging(): ?bool { return $this->paging; } @@ -416,15 +416,15 @@ public function isPaging() * * @return void */ - public function setPaging($paging) + public function setPaging(bool $paging) { $this->paging = $paging; } /** - * @return bool + * @return bool|null */ - public function isOrdering() + public function isOrdering(): ?bool { return $this->ordering; } @@ -434,7 +434,7 @@ public function isOrdering() * * @return void */ - public function setOrdering($ordering) + public function setOrdering(bool $ordering) { $this->ordering = $ordering; } diff --git a/src/Spryker/Zed/Gui/Presentation/Table/index.twig b/src/Spryker/Zed/Gui/Presentation/Table/index.twig index 03a70cfc..93b4595a 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/index.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/index.twig @@ -1,6 +1,7 @@ +{% set baseUrl = config.baseUrl is not empty ? config.baseUrl : '/' ~ app.request.get('module') ~ '/' ~ app.request.get('controller') ~ '/' %} Date: Fri, 19 Apr 2019 18:09:08 +0300 Subject: [PATCH 006/304] CMS-1540: content item editor --- assets/Zed/js/modules/init.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index 0583bd52..f286613a 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -5,7 +5,7 @@ 'use strict'; -var editor = require('ZedGuiEditorConfiguration'); +var editorConfig = require('ZedGuiEditorConfiguration'); var Tabs = require('./libs/tabs'); var TranslationCopyFields = require('./libs/translation-copy-fields'); var Ibox = require('./libs/ibox'); @@ -19,13 +19,13 @@ var dataTablesSearchDelay = function() { var dataTable = $(wrapper).find('.gui-table-data'); var dataTableApi = dataTable.dataTable().api(); var timeOutId = 0; - + if(searchInput.length && dataTable.length) { searchInput .unbind() .bind("input", function(e) { var self = this; - + clearTimeout(timeOutId); timeOutId = setTimeout(function() { dataTableApi.search(self.value).draw(); @@ -38,7 +38,13 @@ var dataTablesSearchDelay = function() { $(document).ready(function() { // editor - $('.html-editor').summernote(editor.getConfig()); + $('.html-editor').each(function() { + const editor = $(this); + + if (typeof editor.data('editor-config') === 'undefined') { + editor.summernote(editorConfig.getConfig()) + } + }); /* Data tables custom error handling */ dataTable.setTableErrorMode('none'); @@ -47,7 +53,7 @@ $(document).ready(function() { $('.gui-table-data') .on('error.dt', dataTable.onError) .dataTable(dataTable.defaultConfiguration); - + /* Draw data tables without search */ $('.gui-table-data-no-search') .on('error.dt', dataTable.onError) From fa9911c65ab34ff1dec0f290dd884c23210ed258 Mon Sep 17 00:00:00 2001 From: galitsky Date: Mon, 22 Apr 2019 15:44:20 +0300 Subject: [PATCH 007/304] CMS-1540: fix variables, config --- assets/Zed/js/modules/init.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index f286613a..f34d81c0 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -39,10 +39,10 @@ var dataTablesSearchDelay = function() { $(document).ready(function() { // editor $('.html-editor').each(function() { - const editor = $(this); + const $editor = $(this); - if (typeof editor.data('editor-config') === 'undefined') { - editor.summernote(editorConfig.getConfig()) + if (typeof $editor.data('editor-config') === 'undefined') { + $editor.summernote(editorConfig.getConfig()) } }); From d95277982ca388ea45ac263c3c0ba518248bfef9 Mon Sep 17 00:00:00 2001 From: galitsky Date: Tue, 23 Apr 2019 13:24:20 +0300 Subject: [PATCH 008/304] CMS-1540: fix attrs, variables --- assets/Zed/js/modules/init.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index f34d81c0..e6333cb4 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -39,10 +39,10 @@ var dataTablesSearchDelay = function() { $(document).ready(function() { // editor $('.html-editor').each(function() { - const $editor = $(this); + const $textarea = $(this); - if (typeof $editor.data('editor-config') === 'undefined') { - $editor.summernote(editorConfig.getConfig()) + if (typeof $textarea.data('editor-config') === 'undefined') { + $textarea.summernote(editorConfig.getConfig()) } }); From 1a0cd6b9790b7da40f6cb08a118b05092b479abe Mon Sep 17 00:00:00 2001 From: galitsky Date: Tue, 23 Apr 2019 14:43:36 +0300 Subject: [PATCH 009/304] CMS-1540: check on init --- assets/Zed/js/modules/editor.js | 9 +++++++-- assets/Zed/js/modules/init.js | 15 +++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/assets/Zed/js/modules/editor.js b/assets/Zed/js/modules/editor.js index 6035112c..a9cd1c35 100644 --- a/assets/Zed/js/modules/editor.js +++ b/assets/Zed/js/modules/editor.js @@ -1,11 +1,16 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ 'use strict'; module.exports = { + globalConfigExist: function(configName) { + return Boolean(configName && + window.contentItemConfiguration && + window.contentItemConfiguration[configName]); + }, getConfig: function(content) { content = content || ''; diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index e6333cb4..7c7c79f0 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -36,15 +36,22 @@ var dataTablesSearchDelay = function() { }); } -$(document).ready(function() { - // editor +const editorInit = function() { $('.html-editor').each(function() { const $textarea = $(this); + const $textareaConfigName = $textarea.data('editor-config'); - if (typeof $textarea.data('editor-config') === 'undefined') { - $textarea.summernote(editorConfig.getConfig()) + if (editorConfig.globalConfigExist($textareaConfigName)) { + return; } + + $textarea.summernote(editorConfig.getConfig()) }); +}; + +$(document).ready(function() { + // editor + editorInit(); /* Data tables custom error handling */ dataTable.setTableErrorMode('none'); From e92d74fd3f91433bb665a0170cdbc27b45d73e2d Mon Sep 17 00:00:00 2001 From: galitsky Date: Tue, 23 Apr 2019 15:03:26 +0300 Subject: [PATCH 010/304] CMS-1540: config variable change --- assets/Zed/js/modules/editor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/Zed/js/modules/editor.js b/assets/Zed/js/modules/editor.js index a9cd1c35..6475d07a 100644 --- a/assets/Zed/js/modules/editor.js +++ b/assets/Zed/js/modules/editor.js @@ -8,8 +8,8 @@ module.exports = { globalConfigExist: function(configName) { return Boolean(configName && - window.contentItemConfiguration && - window.contentItemConfiguration[configName]); + window.editorConfiguration && + window.editorConfiguration[configName]); }, getConfig: function(content) { content = content || ''; From 092523946c75bf8b129ac909b1ed4b0a26d3efd4 Mon Sep 17 00:00:00 2001 From: Stanislav Matveyev Date: Tue, 30 Apr 2019 12:07:25 +0300 Subject: [PATCH 011/304] CMS-371: CMS-372: merging configs, config to enable/disable old insert content widget button in summernote toolbar --- assets/Zed/js/modules/commons.js | 1 - assets/Zed/js/modules/editor.js | 48 ++++++++++++++- assets/Zed/js/modules/init.js | 10 ++-- assets/Zed/js/spryker-zed-gui-init.entry.js | 8 +++ assets/Zed/package-lock.json | 59 ++++++++++--------- assets/Zed/package.json | 2 +- .../Zed/Gui/Presentation/Layout/layout.twig | 1 + 7 files changed, 92 insertions(+), 37 deletions(-) create mode 100644 assets/Zed/js/spryker-zed-gui-init.entry.js diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index a2a5c04f..140e844b 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -42,4 +42,3 @@ require('../../../Inspinia/inspinia'); // spryker customization require('../../sass/main.scss'); require('./legacy/fixHeight'); -require('./init'); diff --git a/assets/Zed/js/modules/editor.js b/assets/Zed/js/modules/editor.js index 6475d07a..28d85f23 100644 --- a/assets/Zed/js/modules/editor.js +++ b/assets/Zed/js/modules/editor.js @@ -6,10 +6,31 @@ 'use strict'; module.exports = { - globalConfigExist: function(configName) { + getGlobalConfig: function(configName) { return Boolean(configName && window.editorConfiguration && - window.editorConfiguration[configName]); + window.editorConfiguration[configName]) ? window.editorConfiguration[configName] : null; + }, + mergeConfigs: function (baseConfig, newConfig) { + for (const property in newConfig) { + switch (property) { + case 'toolbar': + updateToolbarOptions(baseConfig, newConfig); + break; + case 'buttons': + if (baseConfig.hasOwnProperty('buttons') && newConfig.hasOwnProperty('buttons')) { + Object.assign(baseConfig.buttons, newConfig.buttons); + } + if (!baseConfig.hasOwnProperty('buttons')) { + baseConfig.buttons = newConfig.buttons; + } + break; + default: + baseConfig[property] = newConfig[property]; + } + } + + return baseConfig; }, getConfig: function(content) { content = content || ''; @@ -26,8 +47,29 @@ module.exports = { ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['insert', ['picture', 'link', 'video', 'table', 'hr']], - ['misc', ['undo', 'redo', 'codeview']] + ['misc', ['undo', 'redo', 'codeview']], + ['custom', []] ] }; } }; + + +const updateToolbarOptions = function (baseConfig, newConfig) { + newConfig.toolbar.forEach(function (newToolbarOption) { + const existingOptionIndex = baseConfig.toolbar.findIndex(function(defaultToolbarOption) { + return newToolbarOption[0] === defaultToolbarOption[0]; + }); + + if (existingOptionIndex) { + const newToolbarOptionsArray = newToolbarOption[1].slice(0); + const toolbarOptionGroup = baseConfig.toolbar[existingOptionIndex]; + const toolbarOptionsArray = toolbarOptionGroup[1]; + + toolbarOptionsArray.push(newToolbarOptionsArray); + return; + } + + baseConfig.toolbar.push(newToolbarOption); + }); +}; diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index 7c7c79f0..2dab29d3 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -39,13 +39,15 @@ var dataTablesSearchDelay = function() { const editorInit = function() { $('.html-editor').each(function() { const $textarea = $(this); - const $textareaConfigName = $textarea.data('editor-config'); + const textareaConfigName = $textarea.data('editor-config'); - if (editorConfig.globalConfigExist($textareaConfigName)) { - return; + let config = editorConfig.getGlobalConfig(textareaConfigName); + + if (!config) { + config = editorConfig.getConfig(); } - $textarea.summernote(editorConfig.getConfig()) + $textarea.summernote(config); }); }; diff --git a/assets/Zed/js/spryker-zed-gui-init.entry.js b/assets/Zed/js/spryker-zed-gui-init.entry.js new file mode 100644 index 00000000..85057dc6 --- /dev/null +++ b/assets/Zed/js/spryker-zed-gui-init.entry.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + */ + +'use strict'; + +require('./modules/init'); diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 51e6f099..e83c5681 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -29,7 +29,7 @@ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz", "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==", "requires": { - "jquery": "3.3.1" + "jquery": ">=1.7" }, "dependencies": { "jquery": { @@ -45,7 +45,7 @@ "integrity": "sha512-5gxoI2n+duZP06+4xVC2TtH6zcY369/TRKTZ1DdSgDcDUl4OYQsrXCuaLJmbVzna/5Y5lrMmK7CxgvYgIynICA==", "requires": { "datatables.net": "1.10.19", - "jquery": "3.2.1" + "jquery": ">=1.7" } }, "datatables.net-buttons": { @@ -53,8 +53,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.2.4.tgz", "integrity": "sha1-rZCn6zlBmWEI7/bVKTxHM/GHQyk=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.3.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" }, "dependencies": { "jquery": { @@ -69,9 +69,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs/-/datatables.net-buttons-bs-1.2.4.tgz", "integrity": "sha1-GEOvK+BUSYfN06vUcQKKoj2kjOY=", "requires": { - "datatables.net-bs": "2.1.1", - "datatables.net-buttons": "1.2.4", - "jquery": "3.3.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-buttons": ">=1.0.3", + "jquery": ">=1.7" }, "dependencies": { "datatables.net-bs": { @@ -79,8 +79,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-2.1.1.tgz", "integrity": "sha1-cEEIlyiRlJ0JS/RPU9BlTZ/ue84=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.3.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "jquery": { @@ -95,8 +95,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.0.2.tgz", "integrity": "sha1-P7G5poZ9Hk2N/BsAdi9rrlyeqXg=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.2.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "datatables.net-responsive-bs": { @@ -104,9 +104,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.0.2.tgz", "integrity": "sha1-UvCc/HHTjdGurbQzQ4dXQH+Xaig=", "requires": { - "datatables.net-bs": "1.10.19", - "datatables.net-responsive": "2.0.2", - "jquery": "3.2.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-responsive": ">=1.0.7", + "jquery": ">=1.7" } }, "datatables.net-select": { @@ -114,8 +114,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.1.2.tgz", "integrity": "sha1-S0SOgLG75+7kmrCB/Rl6AlHq7zk=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.2.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "datatables.net-select-bs": { @@ -123,9 +123,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.1.2.tgz", "integrity": "sha1-yDd2JG/ikuidkNdmAB4YP49IVjU=", "requires": { - "datatables.net-bs": "1.10.19", - "datatables.net-select": "1.1.2", - "jquery": "3.2.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-select": ">=1.0.1", + "jquery": ">=1.7" } }, "es6-promise": { @@ -146,7 +146,7 @@ "jquery-migrate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.0.1.tgz", - "integrity": "sha512-NYlhcFnRh4Bv9jvadPlcAKQdVGRE0+TSgFYxQ+ZnCxUUHbwd+SjbOg+Xvu1Oea9mpQJ+2VB1eCfcBORWNQsHaA==" + "integrity": "sha1-FB3jq/5tMBuqpBMLDse5qDmEXnI=" }, "jquery-mousewheel": { "version": "3.1.13", @@ -163,7 +163,7 @@ "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.6.tgz", "integrity": "sha512-60yWq6batzrakamfhJKB/pQsR6E7O27pafHr5p/klEE3rDQjGY0zxV+C8+ljPVw90LmUJyUXEIuNbeQJB2xqcg==", "requires": { - "jquery": "3.3.1" + "jquery": ">=1.9.1" }, "dependencies": { "jquery": { @@ -179,22 +179,25 @@ "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, "nestable": { - "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d" + "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", + "from": "git+https://git@github.com/ilmente/Nestable.git#v1.1.1" }, "pace": { - "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4" + "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", + "from": "git+https://git@github.com/hubspot/pace.git#v1.0.2" }, "select2": { "version": "git+https://git@github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", + "from": "git+https://git@github.com/select2/select2.git#4.0.2", "requires": { - "almond": "0.3.3", - "jquery-mousewheel": "3.1.13" + "almond": "~0.3.1", + "jquery-mousewheel": "~3.1.13" } }, "summernote": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.10.tgz", - "integrity": "sha512-1b4ESCiY9HW+12HYXCntjbThVgeYNaYKfKL7pC4Jqjo/WDS4G4mMtd2kPuCw56HxeRT67d+zlehopaE+M4o6aQ==" + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.11.tgz", + "integrity": "sha512-j+YbSK2ox1RZGeD5E/+6k57bvqhQLxiaazSj9zHBXOJnCuc0LZPSIGwyTlMaAGWpo6FlkXfjGS93hEDkV3zVJw==" }, "sweetalert": { "version": "1.1.3", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 496ae37e..a849bbf1 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -24,7 +24,7 @@ "nestable": "git+https://git@github.com/ilmente/Nestable#v1.1.1", "pace": "git+https://git@github.com/hubspot/pace#v1.0.2", "select2": "git+https://git@github.com/select2/select2#4.0.2", - "summernote": "~0.8.1", + "summernote": "^0.8.11", "sweetalert": "~1.1.3" } } diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index 09f5ce8a..532ee42d 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -111,6 +111,7 @@ {% block footer_js %} + {% endblock %} From 6903663948670fe1fd825c6518a994501939a711 Mon Sep 17 00:00:00 2001 From: Stanislav Matveyev Date: Tue, 30 Apr 2019 15:18:12 +0300 Subject: [PATCH 012/304] CMS-371: CMS-372: refactored templates --- src/Spryker/Zed/Gui/Presentation/Layout/layout.twig | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index 532ee42d..1e4b6708 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -110,8 +110,12 @@ {% block footer_js %} - - + {% block common_js %} + + {% endblock %} + {% block init_js %} + + {% endblock %} {% endblock %} From 0e1e492f372684fe616ff5740f7ea2da6c96ce8e Mon Sep 17 00:00:00 2001 From: Stanislav Matveev Date: Tue, 7 May 2019 16:44:00 +0300 Subject: [PATCH 013/304] CMS-371: added custom Object.assign and Array.findIndex() for phantomjs --- assets/Zed/js/modules/editor.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/assets/Zed/js/modules/editor.js b/assets/Zed/js/modules/editor.js index 28d85f23..62ab845c 100644 --- a/assets/Zed/js/modules/editor.js +++ b/assets/Zed/js/modules/editor.js @@ -19,7 +19,7 @@ module.exports = { break; case 'buttons': if (baseConfig.hasOwnProperty('buttons') && newConfig.hasOwnProperty('buttons')) { - Object.assign(baseConfig.buttons, newConfig.buttons); + $.extend(baseConfig.buttons, newConfig.buttons); } if (!baseConfig.hasOwnProperty('buttons')) { baseConfig.buttons = newConfig.buttons; @@ -54,6 +54,28 @@ module.exports = { } }; +if (!Array.prototype.findIndex) { + Array.prototype.findIndex = function(predicate) { + if (this === null) { + throw new TypeError('Array.prototype.findIndex called on null or undefined'); + } + if (typeof predicate !== 'function') { + throw new TypeError('predicate must be a function'); + } + var list = Object(this); + var length = list.length >>> 0; + var thisArg = arguments[1]; + var value; + + for (var i = 0; i < length; i++) { + value = list[i]; + if (predicate.call(thisArg, value, i, list)) { + return i; + } + } + return -1; + }; +} const updateToolbarOptions = function (baseConfig, newConfig) { newConfig.toolbar.forEach(function (newToolbarOption) { From 7f1bc21f061a5771900c6c64b62b216fd17d7364 Mon Sep 17 00:00:00 2001 From: Stanislav Matveev Date: Tue, 7 May 2019 17:37:08 +0300 Subject: [PATCH 014/304] CMS-371: trying to fix phantomjs issue --- assets/Zed/js/modules/editor.js | 12 ++++++------ assets/Zed/js/modules/init.js | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/assets/Zed/js/modules/editor.js b/assets/Zed/js/modules/editor.js index 62ab845c..91e0530b 100644 --- a/assets/Zed/js/modules/editor.js +++ b/assets/Zed/js/modules/editor.js @@ -12,7 +12,7 @@ module.exports = { window.editorConfiguration[configName]) ? window.editorConfiguration[configName] : null; }, mergeConfigs: function (baseConfig, newConfig) { - for (const property in newConfig) { + for (var property in newConfig) { switch (property) { case 'toolbar': updateToolbarOptions(baseConfig, newConfig); @@ -77,16 +77,16 @@ if (!Array.prototype.findIndex) { }; } -const updateToolbarOptions = function (baseConfig, newConfig) { +var updateToolbarOptions = function (baseConfig, newConfig) { newConfig.toolbar.forEach(function (newToolbarOption) { - const existingOptionIndex = baseConfig.toolbar.findIndex(function(defaultToolbarOption) { + var existingOptionIndex = baseConfig.toolbar.findIndex(function(defaultToolbarOption) { return newToolbarOption[0] === defaultToolbarOption[0]; }); if (existingOptionIndex) { - const newToolbarOptionsArray = newToolbarOption[1].slice(0); - const toolbarOptionGroup = baseConfig.toolbar[existingOptionIndex]; - const toolbarOptionsArray = toolbarOptionGroup[1]; + var newToolbarOptionsArray = newToolbarOption[1].slice(0); + var toolbarOptionGroup = baseConfig.toolbar[existingOptionIndex]; + var toolbarOptionsArray = toolbarOptionGroup[1]; toolbarOptionsArray.push(newToolbarOptionsArray); return; diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index 2dab29d3..d4b71617 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -36,12 +36,12 @@ var dataTablesSearchDelay = function() { }); } -const editorInit = function() { +var editorInit = function() { $('.html-editor').each(function() { - const $textarea = $(this); - const textareaConfigName = $textarea.data('editor-config'); + var $textarea = $(this); + var textareaConfigName = $textarea.data('editor-config'); - let config = editorConfig.getGlobalConfig(textareaConfigName); + var config = editorConfig.getGlobalConfig(textareaConfigName); if (!config) { config = editorConfig.getConfig(); From 4591ea3dfb0356b7804a82da4c999b6893f68a05 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Wed, 8 May 2019 17:48:03 +0300 Subject: [PATCH 015/304] CC-4744: Security: Fix package.json dependencies vulnerabilities --- assets/Zed/package-lock.json | 62 ++++++++++++++++++------------------ assets/Zed/package.json | 10 +++--- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index e83c5681..58ff4ea0 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -33,9 +33,9 @@ }, "dependencies": { "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" } } }, @@ -84,47 +84,47 @@ } }, "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" } } }, "datatables.net-responsive": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.0.2.tgz", - "integrity": "sha1-P7G5poZ9Hk2N/BsAdi9rrlyeqXg=", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.2.3.tgz", + "integrity": "sha512-8D6VtZcyuH3FG0Hn5A4LPZQEOX3+HrRFM7HjpmsQc/nQDBbdeBLkJX4Sh/o1nzFTSneuT1Wh/lYZHVPpjcN+Sw==", "requires": { - "datatables.net": ">=1.10.9", + "datatables.net": "^1.10.15", "jquery": ">=1.7" } }, "datatables.net-responsive-bs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.0.2.tgz", - "integrity": "sha1-UvCc/HHTjdGurbQzQ4dXQH+Xaig=", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.2.3.tgz", + "integrity": "sha512-tQZiqqjXGlTiRBlBP3lON7ULThiMc0sLh4hT5xLaHRWBniaQkIMNhIzX9RRybWjOEQcHS7LA/ZiwE2S7rYqq9w==", "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-responsive": ">=1.0.7", + "datatables.net-bs": "^1.10.15", + "datatables.net-responsive": "2.2.3", "jquery": ">=1.7" } }, "datatables.net-select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.1.2.tgz", - "integrity": "sha1-S0SOgLG75+7kmrCB/Rl6AlHq7zk=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.3.0.tgz", + "integrity": "sha512-sj72BM+Sx2n9mTHQjPiGMrGUoAVA1PCGmD+vEuAedhlDX1PAHcnqsOnG37eWrpqIsOQR/ZcSuE8IkU7gmiQkew==", "requires": { - "datatables.net": ">=1.10.9", + "datatables.net": "^1.10.15", "jquery": ">=1.7" } }, "datatables.net-select-bs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.1.2.tgz", - "integrity": "sha1-yDd2JG/ikuidkNdmAB4YP49IVjU=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.3.0.tgz", + "integrity": "sha512-MW9mmd2Hw6N6XFfGy0q5W/2XV7gP/CaGCtcReSiBu9McQNGJE2S06NkSfsKl+yoiW9mRQUPnbYa/Af4ykskFqg==", "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-select": ">=1.0.1", + "datatables.net-bs": "^1.10.15", + "datatables.net-select": "1.3.0", "jquery": ">=1.7" } }, @@ -139,14 +139,14 @@ "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" }, "jquery": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", - "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" }, "jquery-migrate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.0.1.tgz", - "integrity": "sha1-FB3jq/5tMBuqpBMLDse5qDmEXnI=" + "integrity": "sha512-NYlhcFnRh4Bv9jvadPlcAKQdVGRE0+TSgFYxQ+ZnCxUUHbwd+SjbOg+Xvu1Oea9mpQJ+2VB1eCfcBORWNQsHaA==" }, "jquery-mousewheel": { "version": "3.1.13", @@ -167,9 +167,9 @@ }, "dependencies": { "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" } } }, diff --git a/assets/Zed/package.json b/assets/Zed/package.json index a849bbf1..048e47be 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -10,13 +10,13 @@ "datatables.net-bs": "~1.10.10", "datatables.net-buttons": "~1.2.3", "datatables.net-buttons-bs": "~1.2.3", - "datatables.net-responsive": "~2.0.0", - "datatables.net-responsive-bs": "~2.0.0", - "datatables.net-select": "~1.1.0", - "datatables.net-select-bs": "~1.1.0", + "datatables.net-responsive": "~2.2.3", + "datatables.net-responsive-bs": "~2.2.3", + "datatables.net-select": "~1.3.0", + "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "font-awesome": "~4.7.0", - "jquery": "~3.2.1", + "jquery": "~3.4.1", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", "jstree": "~3.3.3", From 94684b402f1b582ccadf7b7c68da787638acbbc3 Mon Sep 17 00:00:00 2001 From: galitsky Date: Fri, 10 May 2019 15:27:40 +0300 Subject: [PATCH 016/304] CMS-2067: buttons, popover, styles --- assets/Zed/js/modules/editor.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/Zed/js/modules/editor.js b/assets/Zed/js/modules/editor.js index 91e0530b..cfa44269 100644 --- a/assets/Zed/js/modules/editor.js +++ b/assets/Zed/js/modules/editor.js @@ -25,6 +25,12 @@ module.exports = { baseConfig.buttons = newConfig.buttons; } break; + case 'popover': + var defaultPopoveroptions = $.summernote.options.popover; + var extendedOptions = $.extend(defaultPopoveroptions, newConfig.popover); + + baseConfig.popover = extendedOptions; + break; default: baseConfig[property] = newConfig[property]; } From 67d80868ac49b724a6dbaf12ca98bb7c7f726d28 Mon Sep 17 00:00:00 2001 From: Sergey Samoylov Date: Tue, 14 May 2019 20:29:43 +0300 Subject: [PATCH 017/304] cms-1500: cms-2067: refactoring model names, refactoring converters --- assets/Zed/package-lock.json | 51 +++++++++++++++++------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index e83c5681..e94bc00a 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -29,7 +29,7 @@ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz", "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==", "requires": { - "jquery": ">=1.7" + "jquery": "3.3.1" }, "dependencies": { "jquery": { @@ -45,7 +45,7 @@ "integrity": "sha512-5gxoI2n+duZP06+4xVC2TtH6zcY369/TRKTZ1DdSgDcDUl4OYQsrXCuaLJmbVzna/5Y5lrMmK7CxgvYgIynICA==", "requires": { "datatables.net": "1.10.19", - "jquery": ">=1.7" + "jquery": "3.2.1" } }, "datatables.net-buttons": { @@ -53,8 +53,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.2.4.tgz", "integrity": "sha1-rZCn6zlBmWEI7/bVKTxHM/GHQyk=", "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" + "datatables.net": "1.10.19", + "jquery": "3.3.1" }, "dependencies": { "jquery": { @@ -69,9 +69,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs/-/datatables.net-buttons-bs-1.2.4.tgz", "integrity": "sha1-GEOvK+BUSYfN06vUcQKKoj2kjOY=", "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-buttons": ">=1.0.3", - "jquery": ">=1.7" + "datatables.net-bs": "2.1.1", + "datatables.net-buttons": "1.2.4", + "jquery": "3.3.1" }, "dependencies": { "datatables.net-bs": { @@ -79,8 +79,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-2.1.1.tgz", "integrity": "sha1-cEEIlyiRlJ0JS/RPU9BlTZ/ue84=", "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" + "datatables.net": "1.10.19", + "jquery": "3.3.1" } }, "jquery": { @@ -95,8 +95,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.0.2.tgz", "integrity": "sha1-P7G5poZ9Hk2N/BsAdi9rrlyeqXg=", "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" + "datatables.net": "1.10.19", + "jquery": "3.2.1" } }, "datatables.net-responsive-bs": { @@ -104,9 +104,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.0.2.tgz", "integrity": "sha1-UvCc/HHTjdGurbQzQ4dXQH+Xaig=", "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-responsive": ">=1.0.7", - "jquery": ">=1.7" + "datatables.net-bs": "1.10.19", + "datatables.net-responsive": "2.0.2", + "jquery": "3.2.1" } }, "datatables.net-select": { @@ -114,8 +114,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.1.2.tgz", "integrity": "sha1-S0SOgLG75+7kmrCB/Rl6AlHq7zk=", "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" + "datatables.net": "1.10.19", + "jquery": "3.2.1" } }, "datatables.net-select-bs": { @@ -123,9 +123,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.1.2.tgz", "integrity": "sha1-yDd2JG/ikuidkNdmAB4YP49IVjU=", "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-select": ">=1.0.1", - "jquery": ">=1.7" + "datatables.net-bs": "1.10.19", + "datatables.net-select": "1.1.2", + "jquery": "3.2.1" } }, "es6-promise": { @@ -163,7 +163,7 @@ "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.6.tgz", "integrity": "sha512-60yWq6batzrakamfhJKB/pQsR6E7O27pafHr5p/klEE3rDQjGY0zxV+C8+ljPVw90LmUJyUXEIuNbeQJB2xqcg==", "requires": { - "jquery": ">=1.9.1" + "jquery": "3.3.1" }, "dependencies": { "jquery": { @@ -179,19 +179,16 @@ "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, "nestable": { - "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", - "from": "git+https://git@github.com/ilmente/Nestable.git#v1.1.1" + "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d" }, "pace": { - "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", - "from": "git+https://git@github.com/hubspot/pace.git#v1.0.2" + "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4" }, "select2": { "version": "git+https://git@github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", - "from": "git+https://git@github.com/select2/select2.git#4.0.2", "requires": { - "almond": "~0.3.1", - "jquery-mousewheel": "~3.1.13" + "almond": "0.3.3", + "jquery-mousewheel": "3.1.13" } }, "summernote": { From 134a50b3ba8414620e2eb907b90a4af10754f6f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Wed, 15 May 2019 09:35:45 +0200 Subject: [PATCH 018/304] TE-3361 Add empty before each return expression (#5206) * TE-3361 Added an empty line before each return expression. --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index a09cdfc5..048dbccc 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -539,6 +539,7 @@ public function getLimit() public function setLimit($limit) { $this->limit = (int)$limit; + return $this; } From 7fb12df3d35b83feb7013a389cd39c09c92bba32 Mon Sep 17 00:00:00 2001 From: Stanislav Matveyev Date: Thu, 16 May 2019 12:09:46 +0300 Subject: [PATCH 019/304] CMS-2067: CR changes --- assets/Zed/js/modules/editor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/Zed/js/modules/editor.js b/assets/Zed/js/modules/editor.js index cfa44269..c6b5c8f1 100644 --- a/assets/Zed/js/modules/editor.js +++ b/assets/Zed/js/modules/editor.js @@ -26,8 +26,8 @@ module.exports = { } break; case 'popover': - var defaultPopoveroptions = $.summernote.options.popover; - var extendedOptions = $.extend(defaultPopoveroptions, newConfig.popover); + var defaultPopoverOptions = $.summernote.options.popover; + var extendedOptions = $.extend(defaultPopoverOptions, newConfig.popover); baseConfig.popover = extendedOptions; break; From a9f77673398a930fe0fa2a3906fbe1c316755114 Mon Sep 17 00:00:00 2001 From: Anton Zubariev Date: Tue, 21 May 2019 10:20:33 +0300 Subject: [PATCH 020/304] [CMS-9] Fixed the issue with unselecting via ajax data source --- assets/Zed/js/modules/init.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index db61dfd3..c5424e52 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -104,22 +104,31 @@ $(document).ready(function() { $('.dropdown-toggle').dropdown(); $('.spryker-form-select2combobox').each(function(index, element) { - var select2InitOptions = {}; + let select2InitOptions = {}; + const selectElement = $(element); - if ($(element).data('autocomplete-url')) { - var autocompleteUrl = $(element).data('autocomplete-url'); + if (selectElement.data('autocomplete-url')) { select2InitOptions = { ajax: { - url: autocompleteUrl, + url: selectElement.data('autocomplete-url'), dataType: 'json', delay: 500, cache: true, }, minimumInputLength: 3 }; + + selectElement.on('select2:unselecting', function(e) { + const idSelected = e.params.args.data.id; + let selectedValues = selectElement.val(); + + selectElement.val(selectedValues.filter(function(value) { + return value !== ('' + idSelected); + })).trigger('change'); + }); } - $(element).select2(select2InitOptions); + selectElement.select2(select2InitOptions); }); /* Init tabs */ From 5458783dff2bb6268d61a01c0833d28ec26e2e86 Mon Sep 17 00:00:00 2001 From: Anton Zubariev Date: Tue, 21 May 2019 10:23:44 +0300 Subject: [PATCH 021/304] [CMS-9] Fixed `let` and `const` --- assets/Zed/js/modules/init.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index c5424e52..0efc6aec 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -104,8 +104,8 @@ $(document).ready(function() { $('.dropdown-toggle').dropdown(); $('.spryker-form-select2combobox').each(function(index, element) { - let select2InitOptions = {}; - const selectElement = $(element); + var select2InitOptions = {}; + var selectElement = $(element); if (selectElement.data('autocomplete-url')) { select2InitOptions = { @@ -119,8 +119,8 @@ $(document).ready(function() { }; selectElement.on('select2:unselecting', function(e) { - const idSelected = e.params.args.data.id; - let selectedValues = selectElement.val(); + var idSelected = e.params.args.data.id; + var selectedValues = selectElement.val(); selectElement.val(selectedValues.filter(function(value) { return value !== ('' + idSelected); From e08763296cd6c6b0e30c327d11edb35f7895528e Mon Sep 17 00:00:00 2001 From: Anton Zubariev Date: Wed, 22 May 2019 15:45:41 +0300 Subject: [PATCH 022/304] [CMS-9] Fixed the issue with SKU - ID switching. Added the pagination for autocomplete --- assets/Zed/js/modules/init.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index 0efc6aec..04efc06e 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -114,6 +114,11 @@ $(document).ready(function() { dataType: 'json', delay: 500, cache: true, + data: function(params) { + params.page = params.page || 1; + + return params; + } }, minimumInputLength: 3 }; From 48d7e57e58c72e120c17375177bf7b1a81a99d48 Mon Sep 17 00:00:00 2001 From: Sergey Samoylov Date: Tue, 28 May 2019 14:51:46 +0300 Subject: [PATCH 023/304] cms-1500: revert package-lock.json --- assets/Zed/package-lock.json | 51 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index e94bc00a..e83c5681 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -29,7 +29,7 @@ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz", "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==", "requires": { - "jquery": "3.3.1" + "jquery": ">=1.7" }, "dependencies": { "jquery": { @@ -45,7 +45,7 @@ "integrity": "sha512-5gxoI2n+duZP06+4xVC2TtH6zcY369/TRKTZ1DdSgDcDUl4OYQsrXCuaLJmbVzna/5Y5lrMmK7CxgvYgIynICA==", "requires": { "datatables.net": "1.10.19", - "jquery": "3.2.1" + "jquery": ">=1.7" } }, "datatables.net-buttons": { @@ -53,8 +53,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.2.4.tgz", "integrity": "sha1-rZCn6zlBmWEI7/bVKTxHM/GHQyk=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.3.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" }, "dependencies": { "jquery": { @@ -69,9 +69,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs/-/datatables.net-buttons-bs-1.2.4.tgz", "integrity": "sha1-GEOvK+BUSYfN06vUcQKKoj2kjOY=", "requires": { - "datatables.net-bs": "2.1.1", - "datatables.net-buttons": "1.2.4", - "jquery": "3.3.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-buttons": ">=1.0.3", + "jquery": ">=1.7" }, "dependencies": { "datatables.net-bs": { @@ -79,8 +79,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-2.1.1.tgz", "integrity": "sha1-cEEIlyiRlJ0JS/RPU9BlTZ/ue84=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.3.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "jquery": { @@ -95,8 +95,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.0.2.tgz", "integrity": "sha1-P7G5poZ9Hk2N/BsAdi9rrlyeqXg=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.2.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "datatables.net-responsive-bs": { @@ -104,9 +104,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.0.2.tgz", "integrity": "sha1-UvCc/HHTjdGurbQzQ4dXQH+Xaig=", "requires": { - "datatables.net-bs": "1.10.19", - "datatables.net-responsive": "2.0.2", - "jquery": "3.2.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-responsive": ">=1.0.7", + "jquery": ">=1.7" } }, "datatables.net-select": { @@ -114,8 +114,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.1.2.tgz", "integrity": "sha1-S0SOgLG75+7kmrCB/Rl6AlHq7zk=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.2.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "datatables.net-select-bs": { @@ -123,9 +123,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.1.2.tgz", "integrity": "sha1-yDd2JG/ikuidkNdmAB4YP49IVjU=", "requires": { - "datatables.net-bs": "1.10.19", - "datatables.net-select": "1.1.2", - "jquery": "3.2.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-select": ">=1.0.1", + "jquery": ">=1.7" } }, "es6-promise": { @@ -163,7 +163,7 @@ "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.6.tgz", "integrity": "sha512-60yWq6batzrakamfhJKB/pQsR6E7O27pafHr5p/klEE3rDQjGY0zxV+C8+ljPVw90LmUJyUXEIuNbeQJB2xqcg==", "requires": { - "jquery": "3.3.1" + "jquery": ">=1.9.1" }, "dependencies": { "jquery": { @@ -179,16 +179,19 @@ "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, "nestable": { - "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d" + "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", + "from": "git+https://git@github.com/ilmente/Nestable.git#v1.1.1" }, "pace": { - "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4" + "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", + "from": "git+https://git@github.com/hubspot/pace.git#v1.0.2" }, "select2": { "version": "git+https://git@github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", + "from": "git+https://git@github.com/select2/select2.git#4.0.2", "requires": { - "almond": "0.3.3", - "jquery-mousewheel": "3.1.13" + "almond": "~0.3.1", + "jquery-mousewheel": "~3.1.13" } }, "summernote": { From d74b37098a55eba025d079110d0ea067507f151c Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Fri, 31 May 2019 19:09:23 +0300 Subject: [PATCH 024/304] CC-5110: Import result page: Pagination is absent in the table 'Errors found inside your file' --- .../Zed/Gui/Presentation/Table/table.twig | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/table.twig b/src/Spryker/Zed/Gui/Presentation/Table/table.twig index 2ad24699..99248729 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/table.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/table.twig @@ -1,15 +1,19 @@ {# this template is used to render the table without ajax call #} -
- - {% for title in table.header %} - - {% endfor %} - - {% for rows in table.data %} +
{{ title | trans }}
+ - {% for column in rows %} - + {% for title in table.header %} + {% endfor %} - {% endfor %} + + + {% for rows in table.data %} + + {% for column in rows %} + + {% endfor %} + + {% endfor %} +
{{ column }}{{ title | trans }}
{{ column }}
From b1230cc7c00b04f63936151e2d05d541116913da Mon Sep 17 00:00:00 2001 From: Sergey Samoylov Date: Mon, 3 Jun 2019 13:04:54 +0300 Subject: [PATCH 025/304] cms-1500: add query test --- assets/Zed/package-lock.json | 51 +++++++++++++++++------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index e83c5681..e94bc00a 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -29,7 +29,7 @@ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz", "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==", "requires": { - "jquery": ">=1.7" + "jquery": "3.3.1" }, "dependencies": { "jquery": { @@ -45,7 +45,7 @@ "integrity": "sha512-5gxoI2n+duZP06+4xVC2TtH6zcY369/TRKTZ1DdSgDcDUl4OYQsrXCuaLJmbVzna/5Y5lrMmK7CxgvYgIynICA==", "requires": { "datatables.net": "1.10.19", - "jquery": ">=1.7" + "jquery": "3.2.1" } }, "datatables.net-buttons": { @@ -53,8 +53,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.2.4.tgz", "integrity": "sha1-rZCn6zlBmWEI7/bVKTxHM/GHQyk=", "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" + "datatables.net": "1.10.19", + "jquery": "3.3.1" }, "dependencies": { "jquery": { @@ -69,9 +69,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs/-/datatables.net-buttons-bs-1.2.4.tgz", "integrity": "sha1-GEOvK+BUSYfN06vUcQKKoj2kjOY=", "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-buttons": ">=1.0.3", - "jquery": ">=1.7" + "datatables.net-bs": "2.1.1", + "datatables.net-buttons": "1.2.4", + "jquery": "3.3.1" }, "dependencies": { "datatables.net-bs": { @@ -79,8 +79,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-2.1.1.tgz", "integrity": "sha1-cEEIlyiRlJ0JS/RPU9BlTZ/ue84=", "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" + "datatables.net": "1.10.19", + "jquery": "3.3.1" } }, "jquery": { @@ -95,8 +95,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.0.2.tgz", "integrity": "sha1-P7G5poZ9Hk2N/BsAdi9rrlyeqXg=", "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" + "datatables.net": "1.10.19", + "jquery": "3.2.1" } }, "datatables.net-responsive-bs": { @@ -104,9 +104,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.0.2.tgz", "integrity": "sha1-UvCc/HHTjdGurbQzQ4dXQH+Xaig=", "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-responsive": ">=1.0.7", - "jquery": ">=1.7" + "datatables.net-bs": "1.10.19", + "datatables.net-responsive": "2.0.2", + "jquery": "3.2.1" } }, "datatables.net-select": { @@ -114,8 +114,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.1.2.tgz", "integrity": "sha1-S0SOgLG75+7kmrCB/Rl6AlHq7zk=", "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" + "datatables.net": "1.10.19", + "jquery": "3.2.1" } }, "datatables.net-select-bs": { @@ -123,9 +123,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.1.2.tgz", "integrity": "sha1-yDd2JG/ikuidkNdmAB4YP49IVjU=", "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-select": ">=1.0.1", - "jquery": ">=1.7" + "datatables.net-bs": "1.10.19", + "datatables.net-select": "1.1.2", + "jquery": "3.2.1" } }, "es6-promise": { @@ -163,7 +163,7 @@ "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.6.tgz", "integrity": "sha512-60yWq6batzrakamfhJKB/pQsR6E7O27pafHr5p/klEE3rDQjGY0zxV+C8+ljPVw90LmUJyUXEIuNbeQJB2xqcg==", "requires": { - "jquery": ">=1.9.1" + "jquery": "3.3.1" }, "dependencies": { "jquery": { @@ -179,19 +179,16 @@ "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, "nestable": { - "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", - "from": "git+https://git@github.com/ilmente/Nestable.git#v1.1.1" + "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d" }, "pace": { - "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", - "from": "git+https://git@github.com/hubspot/pace.git#v1.0.2" + "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4" }, "select2": { "version": "git+https://git@github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", - "from": "git+https://git@github.com/select2/select2.git#4.0.2", "requires": { - "almond": "~0.3.1", - "jquery-mousewheel": "~3.1.13" + "almond": "0.3.3", + "jquery-mousewheel": "3.1.13" } }, "summernote": { From 218711e5ec7ad6e5b2384557580dac2ff8d2e765 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Mon, 3 Jun 2019 16:44:34 +0300 Subject: [PATCH 026/304] CC-5110: Import result page: Pagination is absent in the table 'Errors found inside your file' --- src/Spryker/Zed/Gui/Presentation/Table/table.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/table.twig b/src/Spryker/Zed/Gui/Presentation/Table/table.twig index 99248729..db592691 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/table.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/table.twig @@ -1,5 +1,5 @@ {# this template is used to render the table without ajax call #} - +
{% for title in table.header %} From 152a50de6e5bd9c5438955a5a0a719fd547e51e3 Mon Sep 17 00:00:00 2001 From: dpodlesny Date: Fri, 7 Jun 2019 00:54:27 +0300 Subject: [PATCH 027/304] CC-3441 Revert gui lock --- assets/Zed/package-lock.json | 51 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index e94bc00a..e83c5681 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -29,7 +29,7 @@ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz", "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==", "requires": { - "jquery": "3.3.1" + "jquery": ">=1.7" }, "dependencies": { "jquery": { @@ -45,7 +45,7 @@ "integrity": "sha512-5gxoI2n+duZP06+4xVC2TtH6zcY369/TRKTZ1DdSgDcDUl4OYQsrXCuaLJmbVzna/5Y5lrMmK7CxgvYgIynICA==", "requires": { "datatables.net": "1.10.19", - "jquery": "3.2.1" + "jquery": ">=1.7" } }, "datatables.net-buttons": { @@ -53,8 +53,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.2.4.tgz", "integrity": "sha1-rZCn6zlBmWEI7/bVKTxHM/GHQyk=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.3.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" }, "dependencies": { "jquery": { @@ -69,9 +69,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs/-/datatables.net-buttons-bs-1.2.4.tgz", "integrity": "sha1-GEOvK+BUSYfN06vUcQKKoj2kjOY=", "requires": { - "datatables.net-bs": "2.1.1", - "datatables.net-buttons": "1.2.4", - "jquery": "3.3.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-buttons": ">=1.0.3", + "jquery": ">=1.7" }, "dependencies": { "datatables.net-bs": { @@ -79,8 +79,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-2.1.1.tgz", "integrity": "sha1-cEEIlyiRlJ0JS/RPU9BlTZ/ue84=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.3.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "jquery": { @@ -95,8 +95,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.0.2.tgz", "integrity": "sha1-P7G5poZ9Hk2N/BsAdi9rrlyeqXg=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.2.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "datatables.net-responsive-bs": { @@ -104,9 +104,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.0.2.tgz", "integrity": "sha1-UvCc/HHTjdGurbQzQ4dXQH+Xaig=", "requires": { - "datatables.net-bs": "1.10.19", - "datatables.net-responsive": "2.0.2", - "jquery": "3.2.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-responsive": ">=1.0.7", + "jquery": ">=1.7" } }, "datatables.net-select": { @@ -114,8 +114,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.1.2.tgz", "integrity": "sha1-S0SOgLG75+7kmrCB/Rl6AlHq7zk=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.2.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "datatables.net-select-bs": { @@ -123,9 +123,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.1.2.tgz", "integrity": "sha1-yDd2JG/ikuidkNdmAB4YP49IVjU=", "requires": { - "datatables.net-bs": "1.10.19", - "datatables.net-select": "1.1.2", - "jquery": "3.2.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-select": ">=1.0.1", + "jquery": ">=1.7" } }, "es6-promise": { @@ -163,7 +163,7 @@ "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.6.tgz", "integrity": "sha512-60yWq6batzrakamfhJKB/pQsR6E7O27pafHr5p/klEE3rDQjGY0zxV+C8+ljPVw90LmUJyUXEIuNbeQJB2xqcg==", "requires": { - "jquery": "3.3.1" + "jquery": ">=1.9.1" }, "dependencies": { "jquery": { @@ -179,16 +179,19 @@ "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, "nestable": { - "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d" + "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", + "from": "git+https://git@github.com/ilmente/Nestable.git#v1.1.1" }, "pace": { - "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4" + "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", + "from": "git+https://git@github.com/hubspot/pace.git#v1.0.2" }, "select2": { "version": "git+https://git@github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", + "from": "git+https://git@github.com/select2/select2.git#4.0.2", "requires": { - "almond": "0.3.3", - "jquery-mousewheel": "3.1.13" + "almond": "~0.3.1", + "jquery-mousewheel": "~3.1.13" } }, "summernote": { From 5e35c36cb0fd08bbb2fee67ea2255d4d7bb053f1 Mon Sep 17 00:00:00 2001 From: maslov Date: Mon, 10 Jun 2019 11:26:33 +0300 Subject: [PATCH 028/304] CC-4744: update package.lock --- assets/Zed/package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 58ff4ea0..4d9a0ca8 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -58,9 +58,9 @@ }, "dependencies": { "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" } } }, @@ -146,7 +146,7 @@ "jquery-migrate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.0.1.tgz", - "integrity": "sha512-NYlhcFnRh4Bv9jvadPlcAKQdVGRE0+TSgFYxQ+ZnCxUUHbwd+SjbOg+Xvu1Oea9mpQJ+2VB1eCfcBORWNQsHaA==" + "integrity": "sha1-FB3jq/5tMBuqpBMLDse5qDmEXnI=" }, "jquery-mousewheel": { "version": "3.1.13", From b08e68bf4d4ad45a59c2343f1a461fbef7eb26e2 Mon Sep 17 00:00:00 2001 From: Sergey Samoylov Date: Wed, 12 Jun 2019 14:03:53 +0300 Subject: [PATCH 029/304] cms-1500: revert package-lock.json --- assets/Zed/package-lock.json | 51 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index e94bc00a..e83c5681 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -29,7 +29,7 @@ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz", "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==", "requires": { - "jquery": "3.3.1" + "jquery": ">=1.7" }, "dependencies": { "jquery": { @@ -45,7 +45,7 @@ "integrity": "sha512-5gxoI2n+duZP06+4xVC2TtH6zcY369/TRKTZ1DdSgDcDUl4OYQsrXCuaLJmbVzna/5Y5lrMmK7CxgvYgIynICA==", "requires": { "datatables.net": "1.10.19", - "jquery": "3.2.1" + "jquery": ">=1.7" } }, "datatables.net-buttons": { @@ -53,8 +53,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.2.4.tgz", "integrity": "sha1-rZCn6zlBmWEI7/bVKTxHM/GHQyk=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.3.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" }, "dependencies": { "jquery": { @@ -69,9 +69,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs/-/datatables.net-buttons-bs-1.2.4.tgz", "integrity": "sha1-GEOvK+BUSYfN06vUcQKKoj2kjOY=", "requires": { - "datatables.net-bs": "2.1.1", - "datatables.net-buttons": "1.2.4", - "jquery": "3.3.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-buttons": ">=1.0.3", + "jquery": ">=1.7" }, "dependencies": { "datatables.net-bs": { @@ -79,8 +79,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-2.1.1.tgz", "integrity": "sha1-cEEIlyiRlJ0JS/RPU9BlTZ/ue84=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.3.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "jquery": { @@ -95,8 +95,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.0.2.tgz", "integrity": "sha1-P7G5poZ9Hk2N/BsAdi9rrlyeqXg=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.2.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "datatables.net-responsive-bs": { @@ -104,9 +104,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.0.2.tgz", "integrity": "sha1-UvCc/HHTjdGurbQzQ4dXQH+Xaig=", "requires": { - "datatables.net-bs": "1.10.19", - "datatables.net-responsive": "2.0.2", - "jquery": "3.2.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-responsive": ">=1.0.7", + "jquery": ">=1.7" } }, "datatables.net-select": { @@ -114,8 +114,8 @@ "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.1.2.tgz", "integrity": "sha1-S0SOgLG75+7kmrCB/Rl6AlHq7zk=", "requires": { - "datatables.net": "1.10.19", - "jquery": "3.2.1" + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" } }, "datatables.net-select-bs": { @@ -123,9 +123,9 @@ "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.1.2.tgz", "integrity": "sha1-yDd2JG/ikuidkNdmAB4YP49IVjU=", "requires": { - "datatables.net-bs": "1.10.19", - "datatables.net-select": "1.1.2", - "jquery": "3.2.1" + "datatables.net-bs": ">=1.10.9", + "datatables.net-select": ">=1.0.1", + "jquery": ">=1.7" } }, "es6-promise": { @@ -163,7 +163,7 @@ "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.6.tgz", "integrity": "sha512-60yWq6batzrakamfhJKB/pQsR6E7O27pafHr5p/klEE3rDQjGY0zxV+C8+ljPVw90LmUJyUXEIuNbeQJB2xqcg==", "requires": { - "jquery": "3.3.1" + "jquery": ">=1.9.1" }, "dependencies": { "jquery": { @@ -179,16 +179,19 @@ "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, "nestable": { - "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d" + "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", + "from": "git+https://git@github.com/ilmente/Nestable.git#v1.1.1" }, "pace": { - "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4" + "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", + "from": "git+https://git@github.com/hubspot/pace.git#v1.0.2" }, "select2": { "version": "git+https://git@github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", + "from": "git+https://git@github.com/select2/select2.git#4.0.2", "requires": { - "almond": "0.3.3", - "jquery-mousewheel": "3.1.13" + "almond": "~0.3.1", + "jquery-mousewheel": "~3.1.13" } }, "summernote": { From 7ff3d3b53fd35d418f61a6184f509d6d65e96bee Mon Sep 17 00:00:00 2001 From: Mykola Date: Tue, 25 Jun 2019 19:44:43 +0300 Subject: [PATCH 030/304] CC-3693: Removed hidden dependency to symfony/twig-bridge --- .../Zed/Gui/Presentation/Form/Type/form_extension.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig b/src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig index 66df735b..6d782437 100644 --- a/src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig +++ b/src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig @@ -13,12 +13,12 @@ {% block form_errors -%} {% if errors|length > 0 -%} - {% if form is not rootform %}{% else %}
{% endif %} + {% if form.parent is not null %}{% else %}
{% endif %}
    {%- for error in errors -%}
  • {{ error.message | trans }}
  • {%- endfor -%}
- {% if form is not rootform %}{% else %}
{% endif %} + {% if form.parent is not null %}
{% else %}
{% endif %} {%- endif %} {%- endblock form_errors %} From e982950f91ae2021d63e3285afa56b162adcf0d6 Mon Sep 17 00:00:00 2001 From: mscherer Date: Mon, 8 Jul 2019 10:25:34 +0200 Subject: [PATCH 031/304] Adjust to Kernel minor for container set() availability. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 41cda244..0ac28b4f 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "license": "proprietary", "require": { "php": ">=7.1", - "spryker/kernel": "^3.0.0", + "spryker/kernel": "^3.30.0", "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", "spryker/twig": "^3.0.0", From 9a09cd1151de06bdb9e075e2e5db4e9c0232c844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Fri, 28 Jun 2019 10:16:48 +0000 Subject: [PATCH 032/304] TE-3787 Removed choices_as_values usages, replaced OptionsResolverInterface with OptionResolver. --- src/Spryker/Shared/Gui/Form/AbstractForm.php | 6 +++--- src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php | 5 ++--- .../Zed/Gui/Communication/Form/Type/AutosuggestType.php | 5 ++--- .../Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php | 5 ++--- src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php | 5 ++--- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/Spryker/Shared/Gui/Form/AbstractForm.php b/src/Spryker/Shared/Gui/Form/AbstractForm.php index c21a909d..c8867eaf 100644 --- a/src/Spryker/Shared/Gui/Form/AbstractForm.php +++ b/src/Spryker/Shared/Gui/Form/AbstractForm.php @@ -12,7 +12,7 @@ use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormTypeInterface; use Symfony\Component\Form\FormView; -use Symfony\Component\OptionsResolver\OptionsResolverInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; /** * @deprecated Use `Spryker\Zed\Kernel\Communication\Form\AbstractType` for Zed and `Spryker\Yves\Kernel\Form\AbstractType` for Yves instead. @@ -45,11 +45,11 @@ abstract public function populateFormFields(); abstract protected function getDataClass(); /** - * @param \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver + * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * * @return void */ - public function setDefaultOptions(OptionsResolverInterface $resolver) + public function setDefaultOptions(OptionsResolver $resolver) { if ($this->getDataClass() instanceof TransferInterface) { $resolver->setDefault('data_class', get_class($this->getDataClass())); diff --git a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php index 14903f90..45faeb98 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php @@ -12,7 +12,6 @@ use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\OptionsResolver\OptionsResolverInterface; /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() @@ -40,11 +39,11 @@ public function configureOptions(OptionsResolver $resolver) /** * @deprecated Use `configureOptions()` instead. * - * @param \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver + * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * * @return void */ - public function setDefaultOptions(OptionsResolverInterface $resolver) + public function setDefaultOptions(OptionsResolver $resolver) { $this->configureOptions($resolver); } diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php index a6752b64..b6154dd9 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php @@ -12,7 +12,6 @@ use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\OptionsResolver\OptionsResolverInterface; /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() @@ -56,11 +55,11 @@ public function configureOptions(OptionsResolver $resolver) /** * @deprecated Use `configureOptions()` instead. * - * @param \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver + * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * * @return void */ - public function setDefaultOptions(OptionsResolverInterface $resolver) + public function setDefaultOptions(OptionsResolver $resolver) { $this->configureOptions($resolver); } diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php index e3ad1912..a87702bf 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php @@ -12,7 +12,6 @@ use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\OptionsResolver\OptionsResolverInterface; /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() @@ -50,11 +49,11 @@ public function configureOptions(OptionsResolver $resolver) /** * @deprecated Use `configureOptions()` instead. * - * @param \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver + * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * * @return void */ - public function setDefaultOptions(OptionsResolverInterface $resolver) + public function setDefaultOptions(OptionsResolver $resolver) { $this->configureOptions($resolver); } diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php index e481c020..80799848 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php @@ -12,7 +12,6 @@ use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\OptionsResolver\OptionsResolverInterface; /** * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() @@ -52,11 +51,11 @@ public function configureOptions(OptionsResolver $resolver) /** * @deprecated Use `configureOptions()` instead. * - * @param \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver + * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * * @return void */ - public function setDefaultOptions(OptionsResolverInterface $resolver) + public function setDefaultOptions(OptionsResolver $resolver) { $this->configureOptions($resolver); } From 2ca1d305abc2ea3a6eda4c175c553f17fa40f19a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Mon, 1 Jul 2019 13:35:55 +0000 Subject: [PATCH 033/304] TE-3787 Removed ignoreError patterns. --- phpstan.neon | 2 -- 1 file changed, 2 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 455bf4e8..1b00e159 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,6 +1,4 @@ parameters: ignoreErrors: - '#Function twig_escape_filter not found.#' - - '#.+ has invalid typehint type Symfony\\Component\\OptionsResolver\\OptionsResolverInterface.#' - - '#Call to method setDefault\(\) on an unknown class Symfony\\Component\\OptionsResolver\\OptionsResolverInterface.#' - '#Class Symfony\\Bridge\\Twig\\Form\\TwigRenderer not found.#' From c66d1baf2404f521aa2e251bebc3c3614e7e8916 Mon Sep 17 00:00:00 2001 From: galitsky Date: Tue, 16 Jul 2019 17:26:34 +0300 Subject: [PATCH 034/304] CMS-2347: wrap twig macro in a div --- assets/Zed/sass/_custom.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index a16ff694..32b08e77 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -135,6 +135,16 @@ body.login { white-space: nowrap; } +.note-editor { + .note-editable { + p { + & + div { + margin-bottom: 10px; + } + } + } +} + .note-editor *, .note-editor *:before { color: #444 !important; From 3a32db6b6dacb3b7410429d5d047ed387d1d2597 Mon Sep 17 00:00:00 2001 From: galitsky Date: Mon, 22 Jul 2019 18:53:44 +0300 Subject: [PATCH 035/304] CMS-2448: fix methods, var names, scss --- assets/Zed/sass/_custom.scss | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 32b08e77..a09acfea 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -137,10 +137,8 @@ body.login { .note-editor { .note-editable { - p { - & + div { - margin-bottom: 10px; - } + p + div { + margin-bottom: 10px; } } } From e5b1d58513b5ede0cbd4656e540148d3ec4cbbf4 Mon Sep 17 00:00:00 2001 From: Dmitriy Svetlichniy Date: Wed, 24 Jul 2019 13:26:24 +0300 Subject: [PATCH 036/304] CC-5476. Navigation: Nodes editing: there is no autocomplete for link field. * Updated "init.js" and "main.js". --- assets/Zed/js/modules/init.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index 04efc06e..96db5f96 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -76,6 +76,11 @@ $(document).ready(function() { if (obj.data('url') === 'undefined') { return; } + + if (obj.hasClass('ui-autocomplete')) { + obj.autocomplete('destroy'); + } + obj.autocomplete({ source: obj.data('url'), minLength: 3 From a877fdcaf9722bc531e22895acfe41a14eba7d77 Mon Sep 17 00:00:00 2001 From: Dmitriy Svetlichniy Date: Wed, 24 Jul 2019 15:09:26 +0300 Subject: [PATCH 037/304] CC-5476. Navigation: Nodes editing: there is no autocomplete for link field. * Updated "init.js" and "main.js". --- assets/Zed/js/modules/init.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index 96db5f96..3b9b54e8 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -72,17 +72,17 @@ $(document).ready(function() { $('.fix-height').sprykerFixHeight(); $('.spryker-form-autocomplete').each(function(key, value) { - var obj = $(value); - if (obj.data('url') === 'undefined') { + var autoCompletedField = $(value); + if (autoCompletedField.data('url') === 'undefined') { return; } - if (obj.hasClass('ui-autocomplete')) { - obj.autocomplete('destroy'); + if (autoCompletedField.hasClass('ui-autocomplete')) { + autoCompletedField.autocomplete('destroy'); } - obj.autocomplete({ - source: obj.data('url'), + autoCompletedField.autocomplete({ + source: autoCompletedField.data('url'), minLength: 3 }); }); From 337e1397cb9f8f9e45d257736f918715cfe09c3d Mon Sep 17 00:00:00 2001 From: gechetspr Date: Thu, 1 Aug 2019 16:12:22 +0300 Subject: [PATCH 038/304] TE-963 refactored code before final AA review --- .../Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php | 2 +- .../Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php index d7532b9c..2a7107c7 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php @@ -20,7 +20,7 @@ class NoValidateTypeFormPlugin extends AbstractPlugin implements FormPluginInter { /** * {@inheritdoc} - * - Adds `novalidate` to the form type attributes. + * - Adds `Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension` to the form type attributes. * * @api * diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index f96212a6..37206197 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -15,7 +15,6 @@ use Twig\Environment; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\GuiTwigPlugin` instead. * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\GuiTwigPlugin` instead. * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() From 7ae6015148172b4e6a2a3395587d4b2dd8cf9016 Mon Sep 17 00:00:00 2001 From: gechetspr Date: Fri, 2 Aug 2019 10:21:56 +0300 Subject: [PATCH 039/304] TE-963 fixed doc sections --- .../Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php index 2a7107c7..c2445cc2 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php @@ -20,7 +20,7 @@ class NoValidateTypeFormPlugin extends AbstractPlugin implements FormPluginInter { /** * {@inheritdoc} - * - Adds `Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension` to the form type attributes. + * - Adds `Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension`. * * @api * From 74cb9b3c986ec12387c63f244eaa47b326ad0604 Mon Sep 17 00:00:00 2001 From: "k.kravchenko" Date: Tue, 6 Aug 2019 15:17:57 +0300 Subject: [PATCH 040/304] PS-8324 fixing logic for activation tab with validation error --- assets/Zed/js/modules/libs/tabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index ffced68c..63f41ed6 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -21,7 +21,7 @@ Tabs.prototype.checkErrors = function() { } self.tabsContainer.find('.tab-content .tab-pane').each(function(i, tab) { - var hasError = $(tab).find('.has-error').length; + var hasError = $(tab).find('.has-error').length || $(tab).find('.alert-danger').length; var tabHeader = self.tabsContainer.find('.nav-tabs li[data-tab-content-id="' + tab.id + '"]'); if (hasError) { From 16b85baa6695e9a58edc3d46fe15eccb11c0f7b3 Mon Sep 17 00:00:00 2001 From: "k.kravchenko" Date: Wed, 7 Aug 2019 09:23:04 +0300 Subject: [PATCH 041/304] PS-8324 refactoring after code review --- assets/Zed/js/modules/libs/tabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index 63f41ed6..1948de36 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -21,7 +21,7 @@ Tabs.prototype.checkErrors = function() { } self.tabsContainer.find('.tab-content .tab-pane').each(function(i, tab) { - var hasError = $(tab).find('.has-error').length || $(tab).find('.alert-danger').length; + var hasError = $(tab).find('.has-error, .alert-danger').length; var tabHeader = self.tabsContainer.find('.nav-tabs li[data-tab-content-id="' + tab.id + '"]'); if (hasError) { From a7e6b817780161599a43ee77130f4f8981858e4b Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Mon, 12 Aug 2019 17:08:16 +0300 Subject: [PATCH 042/304] CC-5896: Make selection of currency choices reusable --- .../js/modules/libs/dependent-select-box.js | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 assets/Zed/js/modules/libs/dependent-select-box.js diff --git a/assets/Zed/js/modules/libs/dependent-select-box.js b/assets/Zed/js/modules/libs/dependent-select-box.js new file mode 100644 index 00000000..5cca23c5 --- /dev/null +++ b/assets/Zed/js/modules/libs/dependent-select-box.js @@ -0,0 +1,100 @@ +/** + * Copyright (c) 2017-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + */ + +'use strict'; + +function DependentSelectBox( + // successCallback, + $trigger, + $target, + requestUrl, + property +) { + this.trigger = $trigger; + this.target = $target; + this.data = {}; + this.requestUrl = requestUrl; + this.property = property; + // this.successCallback = successCallback; +} + +DependentSelectBox.prototype.mapEvents = function() { + var self = this; + + this.trigger.on('change', function () { + self.prepareData($(this)); + self.requestData(); + }); +}; + +DependentSelectBox.prototype.prepareData = function(trigger) { + if (this.property.length) { + this.data[this.property] = trigger.val(); + + return; + } + + this.data = trigger.val(); +}; + +DependentSelectBox.prototype.requestData = function() { + var self = this; + // var data = {}; + // data.idStore = this.trigger.val(); + + $.ajax({ + url: this.requestUrl, + type: 'POST', + data: this.data, + success: function(data) { + self.target.find('option:gt(0)').remove(); + $.each(data.currencies, function(key, currency) { + self.target.append($('')); + }); + // self.callback(); + } + // success: this.successCallback + }); +}; + +module.exports = DependentSelectBox; + + + +// $(document).ready(function() { +// var $activeFromDate = $('#price_product_schedule_activeFrom_date'); +// var $activeToDate = $('#price_product_schedule_activeTo_date'); +// var $store = $('#price_product_schedule_priceProduct_moneyValue_store_idStore'); +// var $currency = $('#price_product_schedule_priceProduct_moneyValue_currency_idCurrency'); +// $activeFromDate.datepicker({ +// altFormat: "yy-mm-dd", +// dateFormat: 'yy-mm-dd', +// changeMonth: true, +// defaultData: 0, +// }); +// $activeToDate.datepicker({ +// dateFormat: 'yy-mm-dd', +// changeMonth: true, +// defaultData: 0, +// }); +// +// $store.change(function() { +// var data = {}; +// data.idStore = $store.val(); +// $currency.find('option:gt(0)').remove(); +// $.ajax({ +// url: '/currency/currencies-for-store', +// type: 'POST', +// data: data, +// success: function(data) { +// $.each(data.currencies, function(key, currency) { +// $currency.append($('')); +// }); +// $('#active_from_timezone').html(data.timezoneText); +// $('#active_to_timezone').html(data.timezoneText); +// } +// }); +// }); +// }); From 7ac679137c377229af5ef009ec60035b29bee342 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Mon, 12 Aug 2019 18:27:36 +0300 Subject: [PATCH 043/304] CC-5896: Make selection of currency choices reusable --- .../js/modules/libs/dependent-select-box.js | 76 ++++++------------- 1 file changed, 25 insertions(+), 51 deletions(-) diff --git a/assets/Zed/js/modules/libs/dependent-select-box.js b/assets/Zed/js/modules/libs/dependent-select-box.js index 5cca23c5..f53076bb 100644 --- a/assets/Zed/js/modules/libs/dependent-select-box.js +++ b/assets/Zed/js/modules/libs/dependent-select-box.js @@ -6,18 +6,20 @@ 'use strict'; function DependentSelectBox( - // successCallback, $trigger, $target, requestUrl, - property + dataKey, + successCallback ) { + this.data = {}; this.trigger = $trigger; this.target = $target; - this.data = {}; this.requestUrl = requestUrl; - this.property = property; - // this.successCallback = successCallback; + this.dataKey = dataKey; + this.successCallback = successCallback; + + this.mapEvents(); } DependentSelectBox.prototype.mapEvents = function() { @@ -30,8 +32,8 @@ DependentSelectBox.prototype.mapEvents = function() { }; DependentSelectBox.prototype.prepareData = function(trigger) { - if (this.property.length) { - this.data[this.property] = trigger.val(); + if (this.dataKey.length) { + this.data[this.dataKey] = trigger.val(); return; } @@ -41,60 +43,32 @@ DependentSelectBox.prototype.prepareData = function(trigger) { DependentSelectBox.prototype.requestData = function() { var self = this; - // var data = {}; - // data.idStore = this.trigger.val(); $.ajax({ url: this.requestUrl, type: 'POST', data: this.data, success: function(data) { - self.target.find('option:gt(0)').remove(); - $.each(data.currencies, function(key, currency) { - self.target.append($('')); - }); - // self.callback(); + self.setResponseData(data); + self.successCallback ? self.successCallback() : null; } - // success: this.successCallback }); }; -module.exports = DependentSelectBox; +DependentSelectBox.prototype.setResponseData = function(data) { + var self = this; + if (!data) { + this.target.attr('disabled', true); + return; + } -// $(document).ready(function() { -// var $activeFromDate = $('#price_product_schedule_activeFrom_date'); -// var $activeToDate = $('#price_product_schedule_activeTo_date'); -// var $store = $('#price_product_schedule_priceProduct_moneyValue_store_idStore'); -// var $currency = $('#price_product_schedule_priceProduct_moneyValue_currency_idCurrency'); -// $activeFromDate.datepicker({ -// altFormat: "yy-mm-dd", -// dateFormat: 'yy-mm-dd', -// changeMonth: true, -// defaultData: 0, -// }); -// $activeToDate.datepicker({ -// dateFormat: 'yy-mm-dd', -// changeMonth: true, -// defaultData: 0, -// }); -// -// $store.change(function() { -// var data = {}; -// data.idStore = $store.val(); -// $currency.find('option:gt(0)').remove(); -// $.ajax({ -// url: '/currency/currencies-for-store', -// type: 'POST', -// data: data, -// success: function(data) { -// $.each(data.currencies, function(key, currency) { -// $currency.append($('')); -// }); -// $('#active_from_timezone').html(data.timezoneText); -// $('#active_to_timezone').html(data.timezoneText); -// } -// }); -// }); -// }); + this.target.attr('disabled', false); + this.target.find('option:gt(0)').remove(); + $.each(data.currencies, function(key, currency) { + self.target.append($('')); + }); +}; + +module.exports = DependentSelectBox; From dbe3e18ed07d1a5b8767c3bb3296fd0c245fd04f Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Tue, 13 Aug 2019 11:13:17 +0300 Subject: [PATCH 044/304] CC-5896: Make selection of currency choices reusable --- assets/Zed/js/modules/libs/dependent-select-box.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/Zed/js/modules/libs/dependent-select-box.js b/assets/Zed/js/modules/libs/dependent-select-box.js index f53076bb..1296e324 100644 --- a/assets/Zed/js/modules/libs/dependent-select-box.js +++ b/assets/Zed/js/modules/libs/dependent-select-box.js @@ -66,8 +66,8 @@ DependentSelectBox.prototype.setResponseData = function(data) { this.target.attr('disabled', false); this.target.find('option:gt(0)').remove(); - $.each(data.currencies, function(key, currency) { - self.target.append($('')); + $.each(data.currencies, function(key, value) { + self.target.append($('')); }); }; From 3c8362da01b58db91816b8c80ccf375895836b79 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Tue, 13 Aug 2019 11:57:04 +0300 Subject: [PATCH 045/304] CC-5896: Make selection of currency choices reusable --- .../js/modules/libs/dependent-select-box.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/assets/Zed/js/modules/libs/dependent-select-box.js b/assets/Zed/js/modules/libs/dependent-select-box.js index 1296e324..6f3daa09 100644 --- a/assets/Zed/js/modules/libs/dependent-select-box.js +++ b/assets/Zed/js/modules/libs/dependent-select-box.js @@ -10,6 +10,7 @@ function DependentSelectBox( $target, requestUrl, dataKey, + responseData, successCallback ) { this.data = {}; @@ -17,6 +18,7 @@ function DependentSelectBox( this.target = $target; this.requestUrl = requestUrl; this.dataKey = dataKey; + this.responseData = responseData; this.successCallback = successCallback; this.mapEvents(); @@ -58,17 +60,21 @@ DependentSelectBox.prototype.requestData = function() { DependentSelectBox.prototype.setResponseData = function(data) { var self = this; - if (!data) { - this.target.attr('disabled', true); + if (data.length === 0) { + this.clearTargetSelectBox(true); return; } - this.target.attr('disabled', false); - this.target.find('option:gt(0)').remove(); - $.each(data.currencies, function(key, value) { - self.target.append($('')); + this.clearTargetSelectBox(false); + $.each(data[this.responseData.response], function(index, element) { + self.target.append($('')); }); }; +DependentSelectBox.prototype.clearTargetSelectBox = function(isDisabled) { + this.target.attr('disabled', isDisabled); + this.target.find('option:gt(0)').remove(); +}; + module.exports = DependentSelectBox; From e727504b0a3d77d1984b6f3b05ddb422898c1350 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Wed, 14 Aug 2019 13:10:44 +0300 Subject: [PATCH 046/304] CC-3731: Fix code reviews --- assets/Zed/js/modules/libs/dependent-select-box.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/Zed/js/modules/libs/dependent-select-box.js b/assets/Zed/js/modules/libs/dependent-select-box.js index 6f3daa09..32e59739 100644 --- a/assets/Zed/js/modules/libs/dependent-select-box.js +++ b/assets/Zed/js/modules/libs/dependent-select-box.js @@ -28,12 +28,12 @@ DependentSelectBox.prototype.mapEvents = function() { var self = this; this.trigger.on('change', function () { - self.prepareData($(this)); + self.getData($(this)); self.requestData(); }); }; -DependentSelectBox.prototype.prepareData = function(trigger) { +DependentSelectBox.prototype.getData = function(trigger) { if (this.dataKey.length) { this.data[this.dataKey] = trigger.val(); @@ -51,13 +51,13 @@ DependentSelectBox.prototype.requestData = function() { type: 'POST', data: this.data, success: function(data) { - self.setResponseData(data); + self.updateTargetSelectBox(data); self.successCallback ? self.successCallback() : null; } }); }; -DependentSelectBox.prototype.setResponseData = function(data) { +DependentSelectBox.prototype.updateTargetSelectBox = function(data) { var self = this; if (data.length === 0) { From 6a717e939214898cc71e160d79d28d28f3c5b8c8 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Wed, 14 Aug 2019 18:31:05 +0300 Subject: [PATCH 047/304] CC-3731: Fix code reviews --- .../js/modules/libs/dependent-select-box.js | 111 +++++++++--------- 1 file changed, 54 insertions(+), 57 deletions(-) diff --git a/assets/Zed/js/modules/libs/dependent-select-box.js b/assets/Zed/js/modules/libs/dependent-select-box.js index 32e59739..c42fbb67 100644 --- a/assets/Zed/js/modules/libs/dependent-select-box.js +++ b/assets/Zed/js/modules/libs/dependent-select-box.js @@ -5,76 +5,73 @@ 'use strict'; -function DependentSelectBox( - $trigger, - $target, - requestUrl, - dataKey, - responseData, - successCallback -) { +function DependentSelectBox(options) { + $.extend(this, options); + this.data = {}; - this.trigger = $trigger; - this.target = $target; - this.requestUrl = requestUrl; - this.dataKey = dataKey; - this.responseData = responseData; - this.successCallback = successCallback; - - this.mapEvents(); -} -DependentSelectBox.prototype.mapEvents = function() { - var self = this; + this.init = function() { + this.mapEvents(); + }; - this.trigger.on('change', function () { - self.getData($(this)); - self.requestData(); - }); -}; + this.mapEvents = function() { + var self = this; -DependentSelectBox.prototype.getData = function(trigger) { - if (this.dataKey.length) { - this.data[this.dataKey] = trigger.val(); + this.$trigger.on('change', function () { + self.getData($(this)); + self.requestData(); + }); + }; - return; - } + this.getData = function(trigger) { + if (this.dataKey.length) { + this.data[this.dataKey] = trigger.val(); + + return; + } - this.data = trigger.val(); -}; + this.data = trigger.val(); + }; -DependentSelectBox.prototype.requestData = function() { - var self = this; + this.requestData = function() { + var self = this; - $.ajax({ - url: this.requestUrl, - type: 'POST', - data: this.data, - success: function(data) { - self.updateTargetSelectBox(data); - self.successCallback ? self.successCallback() : null; + $.ajax({ + url: this.requestUrl, + type: 'POST', + data: this.data, + success: function(data) { + self.updateTargetSelectBox(data); + self.successCallback ? self.successCallback(data) : null; + } + }); + }; + + this.updateTargetSelectBox = function(data) { + if (data.length === 0) { + this.clearTargetSelectBox(true); + + return; } - }); -}; -DependentSelectBox.prototype.updateTargetSelectBox = function(data) { - var self = this; + this.clearTargetSelectBox(false); + this.fillTargetSelectBox(data); + }; - if (data.length === 0) { - this.clearTargetSelectBox(true); + this.clearTargetSelectBox = function(isDisabled) { + this.$target.attr('disabled', isDisabled); + this.$target.find('option:gt(0)').remove(); + }; - return; - } + this.fillTargetSelectBox = function(data) { + var self = this; - this.clearTargetSelectBox(false); - $.each(data[this.responseData.response], function(index, element) { - self.target.append($('')); - }); -}; + $.each(data[this.responseData.response], function(index, element) { + self.$target.append($('')); + }); + }; -DependentSelectBox.prototype.clearTargetSelectBox = function(isDisabled) { - this.target.attr('disabled', isDisabled); - this.target.find('option:gt(0)').remove(); -}; + this.init(); +} module.exports = DependentSelectBox; From 4be9dce6112b5c5023bea04c6f042abdc1d59516 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Wed, 14 Aug 2019 18:32:52 +0300 Subject: [PATCH 048/304] CC-3731: Fix code reviews --- assets/Zed/js/modules/libs/dependent-select-box.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/js/modules/libs/dependent-select-box.js b/assets/Zed/js/modules/libs/dependent-select-box.js index c42fbb67..093dd5b5 100644 --- a/assets/Zed/js/modules/libs/dependent-select-box.js +++ b/assets/Zed/js/modules/libs/dependent-select-box.js @@ -17,7 +17,7 @@ function DependentSelectBox(options) { this.mapEvents = function() { var self = this; - this.$trigger.on('change', function () { + this.$trigger.on('change', function() { self.getData($(this)); self.requestData(); }); From 9a5d1a0f9728d55fe0873048f9b981fe49849f3f Mon Sep 17 00:00:00 2001 From: Alexey Kravchenko Date: Tue, 20 Aug 2019 12:19:40 +0300 Subject: [PATCH 049/304] cc-4787 add max money value constraint --- .../Constraint/IntegerMoneyConstraint.php | 31 +++++++++++++++++++ .../IntegerMoneyConstraintValidator.php | 14 +++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php create mode 100644 src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraintValidator.php diff --git a/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php new file mode 100644 index 00000000..9ecc2660 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php @@ -0,0 +1,31 @@ +message = sprintf('This value should be less than %d.', (int)(static::MAX_INT_VALUE / 100)); + if ($options === null) { + $options = []; + } + + $options[static::OPTION_VALUE] = static::MAX_INT_VALUE; + + parent::__construct($options); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraintValidator.php b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraintValidator.php new file mode 100644 index 00000000..b981a83b --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraintValidator.php @@ -0,0 +1,14 @@ + Date: Sat, 31 Aug 2019 18:26:45 +0300 Subject: [PATCH 050/304] PS-10212: added filtering by slots count --- .../Gui/Communication/Table/AbstractTable.php | 9 ++++++- .../Table/TableConfiguration.php | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 048dbccc..e93c48f8 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -692,7 +692,14 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $filter, Propel::getConnection()->quote($conditionParameter) ); - $query->where($condition); + + if (!$this->config->getHasSearchableFieldsWithAggregateFunctions()) { + $query->where($condition); + + continue; + } + + $query->having($condition); } $this->filtered = $query->count(); diff --git a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php index 679277d9..b10d5dc3 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php +++ b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php @@ -98,6 +98,11 @@ class TableConfiguration */ protected $ordering = true; + /** + * @var bool + */ + protected $hasSearchableFieldsWithAggregateFunctions = false; + /** * @return array */ @@ -106,6 +111,26 @@ public function getRawColumns() return $this->rawColumns; } + /** + * @return bool + */ + public function getHasSearchableFieldsWithAggregateFunctions(): bool + { + return $this->hasSearchableFieldsWithAggregateFunctions; + } + + /** + * @param bool $hasSearchableFieldsWithAggregateFunctions + * + * @return $this + */ + public function setHasSearchableFieldsWithAggregateFunctions(bool $hasSearchableFieldsWithAggregateFunctions) + { + $this->hasSearchableFieldsWithAggregateFunctions = $hasSearchableFieldsWithAggregateFunctions; + + return $this; + } + /** * @param array $rawColumns * From c4a588952043ef581a0024ba0fb33f743f31868c Mon Sep 17 00:00:00 2001 From: Alexey Kravchenko Date: Mon, 2 Sep 2019 09:35:44 +0300 Subject: [PATCH 051/304] cc-6182 fix IntegerMoneyConstraint --- .../Communication/Form/Constraint/IntegerMoneyConstraint.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php index 9ecc2660..c6c6dbea 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php @@ -11,15 +11,16 @@ class IntegerMoneyConstraint extends LessThan { - protected const MAX_INT_VALUE = 2147483647; + protected const MAX_INT_VALUE = 214748364; protected const OPTION_VALUE = 'value'; + protected const MESSAGE_PATTERN = 'This value should be less than %.2f'; /** * {@inheritdoc} */ public function __construct($options = null) { - $this->message = sprintf('This value should be less than %d.', (int)(static::MAX_INT_VALUE / 100)); + $this->message = sprintf(static::MESSAGE_PATTERN, static::MAX_INT_VALUE / 100); if ($options === null) { $options = []; } From 7636a894d313b7a03c920574d386e562917e7b96 Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Mon, 2 Sep 2019 16:01:51 +0300 Subject: [PATCH 052/304] PS-10212: improved query performance --- .../Gui/Communication/Table/AbstractTable.php | 9 +------ .../Table/TableConfiguration.php | 25 ------------------- 2 files changed, 1 insertion(+), 33 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index e93c48f8..048dbccc 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -692,14 +692,7 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $filter, Propel::getConnection()->quote($conditionParameter) ); - - if (!$this->config->getHasSearchableFieldsWithAggregateFunctions()) { - $query->where($condition); - - continue; - } - - $query->having($condition); + $query->where($condition); } $this->filtered = $query->count(); diff --git a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php index b10d5dc3..679277d9 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php +++ b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php @@ -98,11 +98,6 @@ class TableConfiguration */ protected $ordering = true; - /** - * @var bool - */ - protected $hasSearchableFieldsWithAggregateFunctions = false; - /** * @return array */ @@ -111,26 +106,6 @@ public function getRawColumns() return $this->rawColumns; } - /** - * @return bool - */ - public function getHasSearchableFieldsWithAggregateFunctions(): bool - { - return $this->hasSearchableFieldsWithAggregateFunctions; - } - - /** - * @param bool $hasSearchableFieldsWithAggregateFunctions - * - * @return $this - */ - public function setHasSearchableFieldsWithAggregateFunctions(bool $hasSearchableFieldsWithAggregateFunctions) - { - $this->hasSearchableFieldsWithAggregateFunctions = $hasSearchableFieldsWithAggregateFunctions; - - return $this; - } - /** * @param array $rawColumns * From 91b5db4608a0f563b8cf7b106e20e5f0bc53a75a Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Mon, 2 Sep 2019 15:09:10 +0000 Subject: [PATCH 053/304] Revert "PS-10212: improved query performance" This reverts commit 1f9068d95a39cff31c941be0ff594981f9b30e30. --- .../Gui/Communication/Table/AbstractTable.php | 9 ++++++- .../Table/TableConfiguration.php | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 048dbccc..e93c48f8 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -692,7 +692,14 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $filter, Propel::getConnection()->quote($conditionParameter) ); - $query->where($condition); + + if (!$this->config->getHasSearchableFieldsWithAggregateFunctions()) { + $query->where($condition); + + continue; + } + + $query->having($condition); } $this->filtered = $query->count(); diff --git a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php index 679277d9..b10d5dc3 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php +++ b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php @@ -98,6 +98,11 @@ class TableConfiguration */ protected $ordering = true; + /** + * @var bool + */ + protected $hasSearchableFieldsWithAggregateFunctions = false; + /** * @return array */ @@ -106,6 +111,26 @@ public function getRawColumns() return $this->rawColumns; } + /** + * @return bool + */ + public function getHasSearchableFieldsWithAggregateFunctions(): bool + { + return $this->hasSearchableFieldsWithAggregateFunctions; + } + + /** + * @param bool $hasSearchableFieldsWithAggregateFunctions + * + * @return $this + */ + public function setHasSearchableFieldsWithAggregateFunctions(bool $hasSearchableFieldsWithAggregateFunctions) + { + $this->hasSearchableFieldsWithAggregateFunctions = $hasSearchableFieldsWithAggregateFunctions; + + return $this; + } + /** * @param array $rawColumns * From 8e97d3962d78c4748076c6dad138b4fb6f3b6e1f Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Wed, 4 Sep 2019 12:12:16 +0300 Subject: [PATCH 054/304] ps-10493: fixed broken search --- .../Gui/Communication/Table/AbstractTable.php | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index e93c48f8..da4b0ba5 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -666,18 +666,12 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $query->orderBy($orderColumn, $order[0][self::SORT_BY_DIRECTION]); $searchTerm = $this->getSearchTerm(); - $isFirst = true; - if (mb_strlen($searchTerm[self::PARAMETER_VALUE]) > 0) { $query->setIdentifierQuoting(true); - foreach ($config->getSearchable() as $value) { - if (!$isFirst) { - $query->_or(); - } else { - $isFirst = false; - } + $conditions = []; + foreach ($config->getSearchable() as $value) { $filter = ''; $driverName = Propel::getConnection()->getAttribute(PDO::ATTR_DRIVER_NAME); // @todo fix this in CD-412 @@ -693,15 +687,11 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r Propel::getConnection()->quote($conditionParameter) ); - if (!$this->config->getHasSearchableFieldsWithAggregateFunctions()) { - $query->where($condition); - - continue; - } - - $query->having($condition); + $conditions[] = $condition; } + $query = $this->applyConditions($query, $config, $conditions); + $this->filtered = $query->count(); } else { $this->filtered = $this->total; @@ -725,6 +715,24 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r return $data->toArray(null, false, TableMap::TYPE_COLNAME); } + /** + * @param \Propel\Runtime\ActiveQuery\ModelCriteria $query + * @param \Spryker\Zed\Gui\Communication\Table\TableConfiguration $config + * @param string[] $conditions + * + * @return \Propel\Runtime\ActiveQuery\ModelCriteria + */ + protected function applyConditions(ModelCriteria $query, TableConfiguration $config, array $conditions): ModelCriteria + { + $gluedCondition = implode(' OR ', $conditions); + + if ($config->getHasSearchableFieldsWithAggregateFunctions()) { + return $query->having($gluedCondition); + } + + return $query->where($gluedCondition); + } + /** * @param string $value * From d1ba8bfcef2b6d5e9d7fd26694f91e6adaa50bd0 Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Wed, 4 Sep 2019 13:09:15 +0300 Subject: [PATCH 055/304] ps-10493: amendments after review --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index da4b0ba5..4d1fe9f5 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -17,6 +17,7 @@ use Spryker\Service\UtilText\Model\Url\Url; use Spryker\Zed\Gui\Communication\Form\DeleteForm; use Spryker\Zed\Kernel\Communication\Plugin\Pimple; +use Spryker\Zed\PropelOrm\Business\Runtime\ActiveQuery\Criteria; use Twig\Environment; use Twig\Loader\FilesystemLoader; @@ -724,7 +725,10 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r */ protected function applyConditions(ModelCriteria $query, TableConfiguration $config, array $conditions): ModelCriteria { - $gluedCondition = implode(' OR ', $conditions); + $gluedCondition = implode( + sprintf(' %s ', Criteria::LOGICAL_OR), + $conditions + ); if ($config->getHasSearchableFieldsWithAggregateFunctions()) { return $query->having($gluedCondition); From 5df0ffc13874bcdefbef46cc755a216291aa221e Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Mon, 9 Sep 2019 14:41:00 +0000 Subject: [PATCH 056/304] SC-1927: Custom widget --- src/Spryker/Shared/Gui/GuiConstants.php | 24 ++++++++ .../Plugin/Twig/AssetsPathFunction.php | 8 ++- .../Plugin/Twig/AssetsPathTwigPlugin.php | 61 +++++++++++++++++++ src/Spryker/Zed/Gui/GuiConfig.php | 9 +++ .../Presentation/Layout/iframe-layout.twig | 4 +- .../Zed/Gui/Presentation/Layout/layout.twig | 6 +- 6 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 src/Spryker/Shared/Gui/GuiConstants.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php diff --git a/src/Spryker/Shared/Gui/GuiConstants.php b/src/Spryker/Shared/Gui/GuiConstants.php new file mode 100644 index 00000000..9b5ec639 --- /dev/null +++ b/src/Spryker/Shared/Gui/GuiConstants.php @@ -0,0 +1,24 @@ +getConfig()->getZedAssetsPath() . '/') . $path; }; } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php new file mode 100644 index 00000000..ca97836c --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php @@ -0,0 +1,61 @@ +addFunction($this->getZedAssetsPathFunction()); + + return $twig; + } + + /** + * @return \Twig\TwigFunction + */ + protected function getZedAssetsPathFunction(): TwigFunction + { + return new TwigFunction(static::FUNCTION_NAME_ASSETS_PATH, function (string $path) { + return $this->getZedAssetsPathByName($path); + }); + } + + /** + * @param string $path + * + * @return string + */ + protected function getZedAssetsPathByName(string $path): string + { + return rtrim($this->getConfig()->getZedAssetsPath(), '/') . '/' . $path; + } +} diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php index 2626b7a8..f64524d5 100644 --- a/src/Spryker/Zed/Gui/GuiConfig.php +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -7,6 +7,7 @@ namespace Spryker\Zed\Gui; +use Spryker\Shared\Gui\GuiConstants; use Spryker\Zed\Kernel\AbstractBundleConfig; class GuiConfig extends AbstractBundleConfig @@ -42,4 +43,12 @@ public function getDefaultTemplateFileNames(): array { return static::FORM_DEFAULT_TEMPLATE_FILE_NAMES; } + + /** + * @return string + */ + public function getZedAssetsPath(): string + { + return $this->get(GuiConstants::ZED_ASSETS_PATH, '/assets/'); + } } diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/iframe-layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/iframe-layout.twig index e96e7ffa..0720fb21 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/iframe-layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/iframe-layout.twig @@ -8,7 +8,7 @@ {% block head_title %}{{ title | trans }}{% endblock %} {% block head_css %} - + {% endblock %} @@ -20,7 +20,7 @@ {% block footer_js %} - + {% endblock %} diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index 1e4b6708..708584ff 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -8,7 +8,7 @@ {% block head_title %}{% if title is defined %}{{ title | trans }}{% endif %}{% endblock %} {% block head_css %} - + {% endblock %} @@ -111,10 +111,10 @@ {% block footer_js %} {% block common_js %} - + {% endblock %} {% block init_js %} - + {% endblock %} {% endblock %} From 06d48af57f2fe205d065f3d4fc3da32a30750b51 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 17 Sep 2019 18:39:48 +0200 Subject: [PATCH 057/304] Fix CS. --- .../Zed/Gui/Communication/Table/AbstractTableTest.php | 1 + tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php index 22c67a88..eea416b6 100644 --- a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php +++ b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php @@ -14,6 +14,7 @@ /** * Auto-generated group annotations + * * @group SprykerTest * @group Zed * @group Gui diff --git a/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php b/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php index 18605f86..0fcd281b 100644 --- a/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php +++ b/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php @@ -11,6 +11,7 @@ /** * Inherited Methods + * * @method void wantToTest($text) * @method void wantTo($text) * @method void execute($callable) From 4cecfeaa9ba00ab98f7a4763bc5f2e4b2b75fc8d Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 19 Sep 2019 15:29:44 +0200 Subject: [PATCH 058/304] Fix CS. --- .../Communication/Form/Constraint/IntegerMoneyConstraint.php | 2 +- .../Form/Type/Extension/NoValidateTypeExtension.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php index c6c6dbea..e1f81520 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php @@ -16,7 +16,7 @@ class IntegerMoneyConstraint extends LessThan protected const MESSAGE_PATTERN = 'This value should be less than %.2f'; /** - * {@inheritdoc} + * @inheritdoc */ public function __construct($options = null) { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php index 71838dc4..933f7740 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php @@ -28,6 +28,8 @@ public function buildView(FormView $view, FormInterface $form, array $options) /** * {@inheritdoc} + * + * @return string */ public function getExtendedType() { From 16f3ec6336fb9ec77b6405b7f7efac64d7f21408 Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Fri, 20 Sep 2019 08:29:06 +0000 Subject: [PATCH 059/304] SC-1927: FormApplication Plugin + adjust Gui module twig plugins --- composer.json | 1 + .../Communication/GuiCommunicationFactory.php | 19 ++++ .../Plugin/Form/NoValidateTypeFormPlugin.php | 40 +++++++ .../GuiTwigExtensionServiceProvider.php | 2 + .../Plugin/Twig/AssetsPathFunction.php | 7 +- .../Twig/Buttons/AbstractButtonFunction.php | 3 + .../Twig/Buttons/AbstractButtonTwig.php | 85 +++++++++++++++ .../Action/AbstractActionButtonFunction.php | 3 + .../Action/AbstractActionButtonTwig.php | 15 +++ .../Action/BackActionButtonFunction.php | 3 + .../Action/BackActionButtonTwigPlugin.php | 39 +++++++ .../Action/CreateActionButtonFunction.php | 4 + .../Action/CreateActionButtonTwigPlugin.php | 39 +++++++ .../Action/EditActionButtonFunction.php | 3 + .../Action/EditActionButtonTwigPlugin.php | 39 +++++++ .../Action/RemoveActionButtonFunction.php | 3 + .../Action/RemoveActionButtonTwigPlugin.php | 39 +++++++ .../Action/ViewActionButtonFunction.php | 3 + .../Action/ViewActionButtonTwigPlugin.php | 39 +++++++ .../Twig/Buttons/ButtonGroupFunction.php | 3 + .../Twig/Buttons/ButtonGroupTwigPlugin.php | 88 +++++++++++++++ .../Buttons/Form/SubmitButtonFunction.php | 3 + .../Buttons/Form/SubmitButtonTwigPlugin.php | 58 ++++++++++ .../Buttons/Table/AbstractTableFunction.php | 3 + .../Twig/Buttons/Table/AbstractTableTwig.php | 15 +++ .../Buttons/Table/BackTableButtonFunction.php | 3 + .../Table/BackTableButtonTwigPlugin.php | 39 +++++++ .../Table/CreateTableButtonFunction.php | 3 + .../Table/CreateTableButtonTwigPlugin.php | 39 +++++++ .../Buttons/Table/EditTableButtonFunction.php | 3 + .../Table/EditTableButtonTwigPlugin.php | 39 +++++++ .../Table/RemoveTableButtonFunction.php | 3 + .../Table/RemoveTableButtonTwigPlugin.php | 39 +++++++ .../Buttons/Table/ViewTableButtonFunction.php | 3 + .../Table/ViewTableButtonTwigPlugin.php | 39 +++++++ .../Plugin/Twig/GuiTwigPlugin.php | 53 +++++++++ .../Plugin/Twig/ListGroupFunction.php | 3 + .../Plugin/Twig/ListGroupTwigPlugin.php | 101 ++++++++++++++++++ .../Plugin/Twig/ModalFunction.php | 3 + .../Plugin/Twig/ModalTwigPlugin.php | 75 +++++++++++++ .../Plugin/Twig/PanelFunction.php | 3 + .../Plugin/Twig/PanelTwigPlugin.php | 95 ++++++++++++++++ .../Plugin/Twig/TabsFunction.php | 3 + .../Plugin/Twig/TabsTwigPlugin.php | 58 ++++++++++ .../Plugin/Twig/UrlDecodeFunction.php | 3 + .../Plugin/Twig/UrlDecodeTwigPlugin.php | 51 +++++++++ .../Communication/Plugin/Twig/UrlFunction.php | 3 + .../Plugin/Twig/UrlTwigPlugin.php | 55 ++++++++++ src/Spryker/Zed/Gui/GuiConfig.php | 20 ++++ src/Spryker/Zed/Gui/GuiDependencyProvider.php | 2 + 50 files changed, 1290 insertions(+), 4 deletions(-) create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonTwig.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableTwig.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php diff --git a/composer.json b/composer.json index 0ac28b4f..8eabd612 100644 --- a/composer.json +++ b/composer.json @@ -5,6 +5,7 @@ "license": "proprietary", "require": { "php": ">=7.1", + "spryker/form-extension": "^1.0.0", "spryker/kernel": "^3.30.0", "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index 3c6520df..aedf11ce 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -9,7 +9,10 @@ use Spryker\Shared\Twig\Loader\FilesystemLoader; use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; +use Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension; +use Spryker\Zed\Gui\GuiDependencyProvider; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; +use Symfony\Component\Form\FormTypeExtensionInterface; /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() @@ -23,4 +26,20 @@ public function createFilesystemLoader(): FilesystemLoaderInterface { return new FilesystemLoader($this->getConfig()->getTemplatePaths()); } + + /** + * @return \Symfony\Component\Form\FormTypeExtensionInterface + */ + public function createNoValidateFormTypeExtension(): FormTypeExtensionInterface + { + return new NoValidateTypeExtension(); + } + + /** + * @return \Twig\TwigFunction[] + */ + public function getTwigFilters(): array + { + return $this->getProvidedDependency(GuiDependencyProvider::GUI_TWIG_FILTERS); + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php new file mode 100644 index 00000000..c2445cc2 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php @@ -0,0 +1,40 @@ +addTypeExtension( + $this->getFactory()->createNoValidateFormTypeExtension() + ); + + return $formFactoryBuilder; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index 9d433476..774b6588 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -15,6 +15,8 @@ use Twig\Environment; /** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\GuiTwigPlugin` instead. + * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php index 880539d3..aa0ebadf 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php @@ -8,15 +8,14 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig; use Spryker\Shared\Twig\TwigFunction; -use Spryker\Zed\Kernel\BundleConfigResolverAwareTrait; /** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\AssetsPathTwigPlugin` instead. + * * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class AssetsPathFunction extends TwigFunction { - use BundleConfigResolverAwareTrait; - /** * @return string */ @@ -33,7 +32,7 @@ protected function getFunction() return function ($path) { $path = ltrim($path, '/'); - return rtrim($this->getConfig()->getZedAssetsPath() . '/') . $path; + return '/assets/' . $path; }; } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php index 6d8a8f58..a992d5dd 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php @@ -9,6 +9,9 @@ use Spryker\Shared\Twig\TwigFunction; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\AbstractButtonTwig` instead. + */ abstract class AbstractButtonFunction extends TwigFunction { public const DEFAULT_CSS_CLASSES = 'undefined'; diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php new file mode 100644 index 00000000..fe985fb9 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php @@ -0,0 +1,85 @@ +addFunction(new TwigFunction($this->getFunctionName(), function (string $url, string $title, array $options = []) { + if (!array_key_exists(ButtonUrlGenerator::ICON, $options)) { + $options[ButtonUrlGenerator::ICON] = $this->getIcon(); + } + + if (!array_key_exists(ButtonUrlGenerator::BUTTON_CLASS, $options)) { + $options[ButtonUrlGenerator::BUTTON_CLASS] = $this->getButtonClass(); + } + + if (!array_key_exists(ButtonUrlGenerator::DEFAULT_CSS_CLASSES, $options)) { + $options[ButtonUrlGenerator::DEFAULT_CSS_CLASSES] = static::DEFAULT_CSS_CLASSES; + } + + $button = $this->createButtonUrlGenerator($url, $title, $options); + + return $button->generate(); + })); + + return $twig; + } + + /** + * @param string $url + * @param string $title + * @param array $options + * + * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonUrlGenerator + */ + protected function createButtonUrlGenerator($url, $title, array $options) + { + $button = new ButtonUrlGenerator($url, $title, $options); + + return $button; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php index 0ddf89ca..16cee350 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php @@ -9,6 +9,9 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonFunction; +/** + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\AbstractActionButtonTwig` instead. + */ abstract class AbstractActionButtonFunction extends AbstractButtonFunction { public const DEFAULT_CSS_CLASSES = 'btn-sm btn-outline safe-submit'; diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonTwig.php new file mode 100644 index 00000000..b89fdff4 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonTwig.php @@ -0,0 +1,15 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php index 1d7cb02c..b8afbea0 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php @@ -7,6 +7,10 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; +/** + * Class CreateActionButtonFunction + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonTwigPlugin` instead. + */ class CreateActionButtonFunction extends AbstractActionButtonFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php new file mode 100644 index 00000000..b9d9f308 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php @@ -0,0 +1,39 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php index 67165ae3..49b42a12 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php @@ -7,6 +7,9 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\EditActionButtonTwigPlugin` instead. + */ class EditActionButtonFunction extends AbstractActionButtonFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php new file mode 100644 index 00000000..fa2be6f5 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php @@ -0,0 +1,39 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php index 9604b42b..75fc6547 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php @@ -7,6 +7,9 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\RemoveActionButtonTwigPlugin` instead. + */ class RemoveActionButtonFunction extends AbstractActionButtonFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonTwigPlugin.php new file mode 100644 index 00000000..fdf9ac00 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonTwigPlugin.php @@ -0,0 +1,39 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php index af8df6b7..b647d680 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php @@ -7,6 +7,9 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\ViewActionButtonTwigPlugin` instead. + */ class ViewActionButtonFunction extends AbstractActionButtonFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php new file mode 100644 index 00000000..8dd4c97c --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php @@ -0,0 +1,39 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php index c6ebbf4f..765c6933 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php @@ -9,6 +9,9 @@ use Spryker\Shared\Twig\TwigFunction; +/** + * @deprecated Use '\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupTwigPlugin` instead. + */ class ButtonGroupFunction extends TwigFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php new file mode 100644 index 00000000..0eb4459d --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php @@ -0,0 +1,88 @@ +addFunction($this->getButtonGroupFunction()); + + return $twig; + } + + /** + * @return \Twig\TwigFunction + */ + protected function getButtonGroupFunction(): TwigFunction + { + return new TwigFunction(static::FUNCTION_NAME_GROUP_ACTION_BUTTONS, function (string $buttons, string $title, array $options = []) { + if (!array_key_exists(ButtonGroupUrlGenerator::ICON, $options)) { + $options[ButtonGroupUrlGenerator::ICON] = $this->getDefaultIcon(); + } + + if (!array_key_exists(ButtonGroupUrlGenerator::BUTTON_CLASS, $options)) { + $options[ButtonGroupUrlGenerator::BUTTON_CLASS] = $this->getDefaultButtonClass(); + } + + $button = $this->createButtonUrlGenerator($buttons, $title, $options); + + return $button->generate(); + }); + } + + /** + * @return string + */ + protected function getDefaultButtonClass() + { + return 'btn-view'; + } + + /** + * @return string + */ + protected function getDefaultIcon() + { + return ' '; + } + + /** + * @param array $buttons + * @param string $title + * @param array $options + * + * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupUrlGenerator + */ + protected function createButtonUrlGenerator(array $buttons, $title, array $options) + { + return new ButtonGroupUrlGenerator($buttons, $title, $options); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php index 7db552a7..5fb6dd43 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php @@ -10,6 +10,9 @@ use Spryker\Shared\Twig\TwigFunction; use Twig\Environment; +/** + * @deprecated `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Form\SubmitButtonTwigPlugin` instead. + */ class SubmitButtonFunction extends TwigFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonTwigPlugin.php new file mode 100644 index 00000000..a65ccd63 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonTwigPlugin.php @@ -0,0 +1,58 @@ +addFunction($this->getZedSubmitButtonFunction($twig)); + + return $twig; + } + + /** + * @param \Twig\Environment $twig + * + * @return \Twig\TwigFunction + */ + protected function getZedSubmitButtonFunction(Environment $twig): TwigFunction + { + return new TwigFunction(static::FUNCTION_NAME_SUBMIT_BUTTON, function ($value, array $attr = []) use ($twig) { + return $twig->render( + $this->getConfig()->getSubmitButtonDefaultTemplatePath(), + [ + 'value' => $value, + 'attr' => $attr, + ] + ); + }, ['needs_environment' => true]); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php index 1df0bc88..9499eac4 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php @@ -9,6 +9,9 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonFunction; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\AbstractTableTwig` instead. + */ abstract class AbstractTableFunction extends AbstractButtonFunction { public const DEFAULT_CSS_CLASSES = 'btn-xs btn-outline'; diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableTwig.php new file mode 100644 index 00000000..c07074fd --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableTwig.php @@ -0,0 +1,15 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php index 1decda57..98e3c1d4 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php @@ -7,6 +7,9 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\CreateTableButtonTwigPlugin` instead. + */ class CreateTableButtonFunction extends AbstractTableFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonTwigPlugin.php new file mode 100644 index 00000000..548ebaec --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonTwigPlugin.php @@ -0,0 +1,39 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php index 3e672dea..cea54e4b 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php @@ -7,6 +7,9 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\EditTableButtonTwigPlugin` instead. + */ class EditTableButtonFunction extends AbstractTableFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php new file mode 100644 index 00000000..288994b1 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php @@ -0,0 +1,39 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php index deca4b84..77d7313f 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php @@ -7,6 +7,9 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\RemoveTableButtonTwigPlugin` instead. + */ class RemoveTableButtonFunction extends AbstractTableFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php new file mode 100644 index 00000000..5a53e280 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php @@ -0,0 +1,39 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php index f54610a6..1d3b0f67 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php @@ -7,6 +7,9 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\ViewTableButtonTwigPlugin` instead. + */ class ViewTableButtonFunction extends AbstractTableFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonTwigPlugin.php new file mode 100644 index 00000000..84d9503a --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonTwigPlugin.php @@ -0,0 +1,39 @@ + '; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php new file mode 100644 index 00000000..eda4ee18 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php @@ -0,0 +1,53 @@ +addTwigFilters($twig); + + return $twig; + } + + /** + * @param \Twig\Environment $twig + * + * @return \Twig\Environment + */ + protected function addTwigFilters(Environment $twig): Environment + { + $twigFilters = $this->getFactory()->getTwigFilters(); + + foreach ($twigFilters as $filter) { + $twig->addFilter($filter); + } + + return $twig; + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php index 4459dc92..cc056914 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php @@ -9,6 +9,9 @@ use Spryker\Shared\Twig\TwigFunction; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\ListGroupTwigPlugin` instead. + */ class ListGroupFunction extends TwigFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php new file mode 100644 index 00000000..003e5822 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php @@ -0,0 +1,101 @@ +addFunction($this->getZedListGroupFunction()); + + return $twig; + } + + /** + * @return \Twig\TwigFunction + */ + protected function getZedListGroupFunction(): TwigFunction + { + return new TwigFunction(static::FUNCTION_NAME_LIST_GROUP, function (array $items) { + if (is_array(array_values($items)[0])) { + $html = '
'; + + foreach ($items as $item) { + $class = ''; + $target = ''; + $data = ''; + $extras = ''; + + if (array_key_exists('class', $item)) { + $class = ' ' . $item['class']; + } + + if (array_key_exists('target', $item) && !is_array($item['target'])) { + $target = ' target="' . $target . '"'; + } + + if (array_key_exists('extras', $item) && is_array($item['extras'])) { + foreach ($item['extras'] as $key => $value) { + if (is_array($value)) { + $value = json_encode($value); + } + $extras .= ' ' . $key . '="' . htmlentities($value) . '"'; + } + } + + if (array_key_exists('data', $item) && is_array($item['data'])) { + foreach ($item['data'] as $key => $value) { + if (is_array($value)) { + $value = json_encode($value); + } + $data .= ' data-' . $key . '="' . htmlentities($value); + } + } + + $html .= ''; + $html .= $item['label']; + $html .= ''; + } + + $html .= '
'; + } else { + $html = '
    '; + + foreach ($items as $item) { + $html .= '
  • ' . $item; + } + + $html .= '
'; + } + + return $html; + }); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php index 5d0e7dfa..832596ae 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php @@ -9,6 +9,9 @@ use Spryker\Shared\Twig\TwigFunction; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\ModalTwigPlugin` instead. + */ class ModalFunction extends TwigFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php new file mode 100644 index 00000000..db6fa3b9 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php @@ -0,0 +1,75 @@ +addFunction($this->getZedModalFunction()); + + return $twig; + } + + /** + * @return \Twig\TwigFunction + */ + protected function getZedModalFunction(): TwigFunction + { + return new TwigFunction(static::FUNCTION_NAME_MODAL, function (string $title, string $content, ?string $footer = null, ?array $extraData = null) { + $extras = ''; + + if (is_array($extraData)) { + foreach ($extraData as $key => $value) { + $extras .= ' ' . $key . '="' . htmlentities($value) . '"'; + } + } + + $html = '
'; + $html .= ''; + $html .= '
'; + + return $html; + }); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php index fa77e4ea..ef75c991 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php @@ -9,6 +9,9 @@ use Spryker\Shared\Twig\TwigFunction; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\PanelTwigPlugin` instead. + */ class PanelFunction extends TwigFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php new file mode 100644 index 00000000..7aa61375 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php @@ -0,0 +1,95 @@ +addFunction($this->getZedPanelFunction()); + + return $twig; + } + + /** + * @return \Twig\TwigFunction + */ + protected function getZedPanelFunction(): TwigFunction + { + return new TwigFunction(static::FUNCTION_NAME_PANEL, function (string $title, string $content, ?array $options = null, ?string $footer = null) { + $defaultOptions = [ + 'class' => 'default', + 'id' => false, + 'noWrap' => false, + 'collapsable' => false, + 'collapsed' => false, + ]; + + $options = array_merge($defaultOptions, (array)$options); + + $collapsable = ''; + $id = ''; + + if ($options['collapsable']) { + $collapsable = ' data-collapsable'; + + if ($options['collapsed']) { + $options['class'] .= ' is:collapsed'; + } + } + + if ($options['id']) { + $id = ' id="' . $options['id'] . '"'; + } + + $html = '
'; + + if ($title) { + $html .= '
'; + $html .= '

' . $title . '

'; + $html .= '
'; + } + + if ($options['noWrap']) { + $html .= $content; + } else { + $html .= '
' . $content . '
'; + } + + if ($footer) { + $html .= '
' . $footer . '
'; + } + + $html .= '
'; + + return $html; + }); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php index 7fd67f07..40f401ca 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php @@ -11,6 +11,9 @@ use Spryker\Shared\Twig\TwigFunction; use Twig\Environment; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\TabsTwigPlugin` instead. + */ class TabsFunction extends TwigFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php new file mode 100644 index 00000000..c45e0f2e --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php @@ -0,0 +1,58 @@ +addFunction($this->getTabsFunction($twig)); + + return $twig; + } + + /** + * @param \Twig\Environment $twig + * + * @return \Twig\TwigFunction + */ + protected function getTabsFunction(Environment $twig): TwigFunction + { + $options['needs_environment'] = true; + + return new TwigFunction(static::FUNCTION_NAME_TABS, function (TabsViewTransfer $tabsViewTransfer, array $context) use ($twig) { + $context['tabsViewTransfer'] = $tabsViewTransfer; + + return $twig->render($this->getConfig()->getTabsDefaultTemplatePath(), $context); + }, $options); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php index 055d1b94..1df2d313 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php @@ -9,6 +9,9 @@ use Spryker\Shared\Twig\TwigFunction; +/** + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\UrlDecodeTwigPlugin` instead. + */ class UrlDecodeFunction extends TwigFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php new file mode 100644 index 00000000..4c349c72 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php @@ -0,0 +1,51 @@ +addFunction($this->getUrlDecodeFunction()); + + return $twig; + } + + /** + * @return \Twig\TwigFunction + */ + protected function getUrlDecodeFunction(): TwigFunction + { + return new TwigFunction(static::FUNCTION_NAME_URL_DECODE, function (string $url) { + return urldecode($url); + }); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php index a2523dad..4e247685 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php @@ -10,6 +10,9 @@ use Spryker\Service\UtilText\Model\Url\Url; use Spryker\Shared\Twig\TwigFunction; +/** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\UrlTwigPlugin` instead. + */ class UrlFunction extends TwigFunction { /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php new file mode 100644 index 00000000..2fac3bec --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -0,0 +1,55 @@ +addFunction($this->getUrlFunction()); + + return $twig; + } + + /** + * @return \Twig\TwigFunction + */ + protected function getUrlFunction(): TwigFunction + { + return new TwigFunction(static::FUNCTION_NAME_URL, function ($url, array $query = [], array $options = []) { + $url = Url::generate($url, $query, $options); + $html = $url->buildEscaped(); + + return $html; + }); + } +} diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php index f64524d5..274598cc 100644 --- a/src/Spryker/Zed/Gui/GuiConfig.php +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -18,6 +18,10 @@ class GuiConfig extends AbstractBundleConfig 'bootstrap_3_layout.html.twig', ]; + protected const TABS_DEFAULT_TEMPLATE_PATH = '@Gui/Tabs/tabs.twig'; + + protected const SUBMIT_BUTTON_DEFAULT_TEMPLATE_PATH = '@Gui/Form/button/submit_button.twig'; + /** * @return string */ @@ -51,4 +55,20 @@ public function getZedAssetsPath(): string { return $this->get(GuiConstants::ZED_ASSETS_PATH, '/assets/'); } + + /** + * @return string + */ + public function getTabsDefaultTemplatePath(): string + { + return static::TABS_DEFAULT_TEMPLATE_PATH; + } + + /** + * @return string + */ + public function getSubmitButtonDefaultTemplatePath(): string + { + return static::SUBMIT_BUTTON_DEFAULT_TEMPLATE_PATH; + } } diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index 53328e14..37670619 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -34,6 +34,8 @@ class GuiDependencyProvider extends AbstractBundleDependencyProvider public const GUI_TWIG_FUNCTIONS = 'gui_twig_functions'; public const GUI_TWIG_FILTERS = 'gui_twig_filters'; + public const TWIG_GUI_FUNCTIONS = 'TWIG_GUI_FUNCTIONS'; + /** * @param \Spryker\Zed\Kernel\Container $container * From 3e6783ac64b474eeee1fdfdb317ad7856a5b7eda Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Fri, 20 Sep 2019 10:41:16 +0000 Subject: [PATCH 060/304] SC-1927: Gui module. Adjust inheritdocs --- .../Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php | 4 ++-- .../Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php | 3 +-- .../Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php | 5 +++-- .../Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php index ca97836c..0b2b28f2 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php @@ -22,8 +22,8 @@ class AssetsPathTwigPlugin extends AbstractPlugin implements TwigPluginInterface public const FUNCTION_NAME_ASSETS_PATH = 'assetsPath'; /** - * Specification: - * - Allows to extend Twig with additional function to get Zed assets base url. + * {@inheritdoc} + * - Extends twig with "assetsPath" function to generate assets absolute url. * * @api * diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php index c45e0f2e..49f1c4d5 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php @@ -23,8 +23,7 @@ class TabsTwigPlugin extends AbstractPlugin implements TwigPluginInterface public const FUNCTION_NAME_TABS = 'tabs'; /** - * Specification: - * - Allows to extend Twig with additional function to get Zed assets base url. + * {@inheritDoc} * * @api * diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php index 4c349c72..7dd5189f 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php @@ -22,8 +22,9 @@ class UrlDecodeTwigPlugin extends AbstractPlugin implements TwigPluginInterface public const FUNCTION_NAME_URL_DECODE = 'urldecode'; /** - * Specification: - * - Allows to extend Twig with additional function to encode url. + * {@inheritDoc} + * - Extends twig with "urldecode" function to encode the url. + * - The function returns a string which consist all non-alphanumeric characters except -_. and replace by the percent (%) sign followed by two hex digits and spaces encoded as plus (+) signs. * * @api * diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php index 2fac3bec..a05e179d 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -23,8 +23,8 @@ class UrlTwigPlugin extends AbstractPlugin implements TwigPluginInterface public const FUNCTION_NAME_URL = 'url'; /** - * Specification: - * - Allows to extend Twig with additional url function. + * {@inheritDoc} + * - Extends twig with "url" function to parse and generate URLs based on URL parts. * * @api * From d0ad87859f105f345d48ebf3068aaaafcaf218d7 Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Fri, 20 Sep 2019 12:35:09 +0000 Subject: [PATCH 061/304] SC-1927: Adjust dependencies --- .../Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php index b8afbea0..ccd4c9ae 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php @@ -8,7 +8,6 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * Class CreateActionButtonFunction * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonTwigPlugin` instead. */ class CreateActionButtonFunction extends AbstractActionButtonFunction From 41783e4df6fc7b2f0ca9adca9a88e67fe5f6ae95 Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Fri, 20 Sep 2019 15:03:50 +0000 Subject: [PATCH 062/304] SC-1927: Rm temporary form module --- composer.json | 1 - .../Communication/GuiCommunicationFactory.php | 10 ----- .../Plugin/Form/NoValidateTypeFormPlugin.php | 40 ----------------- .../FormTypeExtensionServiceProvider.php | 43 +++++++++++++++++++ .../Twig/Buttons/AbstractButtonTwig.php | 2 +- .../Action/CreateActionButtonTwigPlugin.php | 2 +- ...TwigPlugin.php => GuiFilterTwigPlugin.php} | 2 +- 7 files changed, 46 insertions(+), 54 deletions(-) delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php rename src/Spryker/Zed/Gui/Communication/Plugin/Twig/{GuiTwigPlugin.php => GuiFilterTwigPlugin.php} (94%) diff --git a/composer.json b/composer.json index 8eabd612..0ac28b4f 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,6 @@ "license": "proprietary", "require": { "php": ">=7.1", - "spryker/form-extension": "^1.0.0", "spryker/kernel": "^3.30.0", "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index aedf11ce..5bcbf709 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -9,10 +9,8 @@ use Spryker\Shared\Twig\Loader\FilesystemLoader; use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; -use Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension; use Spryker\Zed\Gui\GuiDependencyProvider; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; -use Symfony\Component\Form\FormTypeExtensionInterface; /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() @@ -27,14 +25,6 @@ public function createFilesystemLoader(): FilesystemLoaderInterface return new FilesystemLoader($this->getConfig()->getTemplatePaths()); } - /** - * @return \Symfony\Component\Form\FormTypeExtensionInterface - */ - public function createNoValidateFormTypeExtension(): FormTypeExtensionInterface - { - return new NoValidateTypeExtension(); - } - /** * @return \Twig\TwigFunction[] */ diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php deleted file mode 100644 index c2445cc2..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php +++ /dev/null @@ -1,40 +0,0 @@ -addTypeExtension( - $this->getFactory()->createNoValidateFormTypeExtension() - ); - - return $formFactoryBuilder; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php new file mode 100644 index 00000000..e143bb80 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php @@ -0,0 +1,43 @@ +share(function () { + return [ + new NoValidateTypeExtension(), + ]; + }); + } + + /** + * @param \Silex\Application $app + * + * @return void + */ + public function boot(Application $app) + { + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php index fe985fb9..07596f18 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php @@ -48,7 +48,7 @@ abstract protected function getIcon(): string; */ public function extend(Environment $twig, ContainerInterface $container): Environment { - $twig->addFunction(new TwigFunction($this->getFunctionName(), function (string $url, string $title, array $options = []) { + $twig->addFunction(new TwigFunction($this->getFunctionName(), function ($url, $title, $options = []) { if (!array_key_exists(ButtonUrlGenerator::ICON, $options)) { $options[ButtonUrlGenerator::ICON] = $this->getIcon(); } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php index b9d9f308..238fa841 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php @@ -26,7 +26,7 @@ protected function getFunctionName(): string */ protected function getButtonClass(): string { - return 'btn-create'; + return "btn-create"; } /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiFilterTwigPlugin.php similarity index 94% rename from src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php rename to src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiFilterTwigPlugin.php index eda4ee18..1cfd143a 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiFilterTwigPlugin.php @@ -16,7 +16,7 @@ * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ -class GuiTwigPlugin extends AbstractPlugin implements TwigPluginInterface +class GuiFilterTwigPlugin extends AbstractPlugin implements TwigPluginInterface { /** * {@inheritdoc} From c1cd86e772981dff3cb3ab38ac65530a00d1756f Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Mon, 23 Sep 2019 08:58:32 +0000 Subject: [PATCH 063/304] SC-1927: An issue with twig safe html --- .../Communication/GuiCommunicationFactory.php | 27 +++++++++++++++ .../Twig/Buttons/AbstractButtonTwig.php | 34 ++++++++----------- .../Action/CreateActionButtonTwigPlugin.php | 2 +- .../Twig/Buttons/ButtonGroupTwigPlugin.php | 20 +++-------- .../Twig/Buttons/ButtonGroupUrlGenerator.php | 2 +- .../Twig/Buttons/ButtonUrlGenerator.php | 2 +- .../Twig/Buttons/UrlGeneratorInterface.php | 16 +++++++++ 7 files changed, 64 insertions(+), 39 deletions(-) create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/UrlGeneratorInterface.php diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index 5bcbf709..0b3066cc 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -9,6 +9,9 @@ use Spryker\Shared\Twig\Loader\FilesystemLoader; use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupUrlGenerator; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonUrlGenerator; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\UrlGeneratorInterface; use Spryker\Zed\Gui\GuiDependencyProvider; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; @@ -32,4 +35,28 @@ public function getTwigFilters(): array { return $this->getProvidedDependency(GuiDependencyProvider::GUI_TWIG_FILTERS); } + + /** + * @param string $url + * @param string $title + * @param array $options + * + * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\UrlGeneratorInterface + */ + public function createButtonUrlGenerator(string $url, string $title, array $options): UrlGeneratorInterface + { + return new ButtonUrlGenerator($url, $title, $options); + } + + /** + * @param array $buttons + * @param string $title + * @param array $options + * + * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\UrlGeneratorInterface + */ + public function createButtonGroupUrlGenerator(array $buttons, string $title, array $options): UrlGeneratorInterface + { + return new ButtonGroupUrlGenerator($buttons, $title, $options); + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php index 07596f18..6dadd4ed 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php @@ -48,7 +48,17 @@ abstract protected function getIcon(): string; */ public function extend(Environment $twig, ContainerInterface $container): Environment { - $twig->addFunction(new TwigFunction($this->getFunctionName(), function ($url, $title, $options = []) { + $twig->addFunction($this->getButtonGroupFunction()); + + return $twig; + } + + /** + * @return \Twig\TwigFunction + */ + protected function getButtonGroupFunction(): TwigFunction + { + return new TwigFunction($this->getFunctionName(), function ($url, $title, $options = []) { if (!array_key_exists(ButtonUrlGenerator::ICON, $options)) { $options[ButtonUrlGenerator::ICON] = $this->getIcon(); } @@ -61,25 +71,9 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro $options[ButtonUrlGenerator::DEFAULT_CSS_CLASSES] = static::DEFAULT_CSS_CLASSES; } - $button = $this->createButtonUrlGenerator($url, $title, $options); - - return $button->generate(); - })); - - return $twig; - } - - /** - * @param string $url - * @param string $title - * @param array $options - * - * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonUrlGenerator - */ - protected function createButtonUrlGenerator($url, $title, array $options) - { - $button = new ButtonUrlGenerator($url, $title, $options); + $buttonUrlGenerator = $this->getFactory()->createButtonUrlGenerator($url, $title, $options); - return $button; + return $buttonUrlGenerator->generate(); + }, ['is_safe' => ['html']]); } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php index 238fa841..b9d9f308 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php @@ -26,7 +26,7 @@ protected function getFunctionName(): string */ protected function getButtonClass(): string { - return "btn-create"; + return 'btn-create'; } /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php index 0eb4459d..d3b1d59a 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php @@ -43,7 +43,7 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro */ protected function getButtonGroupFunction(): TwigFunction { - return new TwigFunction(static::FUNCTION_NAME_GROUP_ACTION_BUTTONS, function (string $buttons, string $title, array $options = []) { + return new TwigFunction(static::FUNCTION_NAME_GROUP_ACTION_BUTTONS, function (array $buttons, string $title, array $options = []) { if (!array_key_exists(ButtonGroupUrlGenerator::ICON, $options)) { $options[ButtonGroupUrlGenerator::ICON] = $this->getDefaultIcon(); } @@ -52,10 +52,10 @@ protected function getButtonGroupFunction(): TwigFunction $options[ButtonGroupUrlGenerator::BUTTON_CLASS] = $this->getDefaultButtonClass(); } - $button = $this->createButtonUrlGenerator($buttons, $title, $options); + $buttonGroupUrlGenerator = $this->getFactory()->createButtonGroupUrlGenerator($buttons, $title, $options); - return $button->generate(); - }); + return $buttonGroupUrlGenerator->generate(); + }, ['is_safe' => ['html']]); } /** @@ -73,16 +73,4 @@ protected function getDefaultIcon() { return ' '; } - - /** - * @param array $buttons - * @param string $title - * @param array $options - * - * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupUrlGenerator - */ - protected function createButtonUrlGenerator(array $buttons, $title, array $options) - { - return new ButtonGroupUrlGenerator($buttons, $title, $options); - } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupUrlGenerator.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupUrlGenerator.php index a2a67b4e..bbbf60e5 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupUrlGenerator.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupUrlGenerator.php @@ -7,7 +7,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons; -class ButtonGroupUrlGenerator +class ButtonGroupUrlGenerator implements UrlGeneratorInterface { public const BUTTON_CLASS = 'class'; public const ICON = 'icon'; diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonUrlGenerator.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonUrlGenerator.php index 47fee124..a8a06942 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonUrlGenerator.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonUrlGenerator.php @@ -7,7 +7,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons; -class ButtonUrlGenerator +class ButtonUrlGenerator implements UrlGeneratorInterface { public const PARAM_ID = 'id'; public const PARAM_CLASS = 'class'; diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/UrlGeneratorInterface.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/UrlGeneratorInterface.php new file mode 100644 index 00000000..068544a9 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/UrlGeneratorInterface.php @@ -0,0 +1,16 @@ + Date: Mon, 23 Sep 2019 09:42:48 +0000 Subject: [PATCH 064/304] SC-1927: Is save html options --- .../Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php | 7 +++++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php index 003e5822..0736dd36 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php @@ -96,6 +96,6 @@ protected function getZedListGroupFunction(): TwigFunction } return $html; - }); + }, ['is_safe' => ['html']]); } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php index db6fa3b9..f2970d73 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php @@ -70,6 +70,6 @@ protected function getZedModalFunction(): TwigFunction $html .= ''; return $html; - }); + }, ['is_safe' => ['html']]); } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php index 7aa61375..22ffd2c7 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php @@ -90,6 +90,6 @@ protected function getZedPanelFunction(): TwigFunction $html .= ''; return $html; - }); + }, ['is_safe' => ['html']]); } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php index 49f1c4d5..3b420f06 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php @@ -46,9 +46,12 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro */ protected function getTabsFunction(Environment $twig): TwigFunction { - $options['needs_environment'] = true; + $options = [ + 'needs_environment' => true, + 'is_safe' => ['html'], + ]; - return new TwigFunction(static::FUNCTION_NAME_TABS, function (TabsViewTransfer $tabsViewTransfer, array $context) use ($twig) { + return new TwigFunction(static::FUNCTION_NAME_TABS, function (Environment $twig, TabsViewTransfer $tabsViewTransfer, array $context = []) { $context['tabsViewTransfer'] = $tabsViewTransfer; return $twig->render($this->getConfig()->getTabsDefaultTemplatePath(), $context); From cb0d588d8d0eb2690fe5527363dcdf88039ffefc Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Mon, 23 Sep 2019 12:53:40 +0000 Subject: [PATCH 065/304] SC-1927: CR changes, add specification --- .../Communication/GuiCommunicationFactory.php | 29 +------------------ .../GuiTwigExtensionServiceProvider.php | 2 +- .../Twig/Buttons/AbstractButtonTwig.php | 14 ++++++++- .../Twig/Buttons/ButtonGroupTwigPlugin.php | 19 ++++++++++-- .../Buttons/Form/SubmitButtonTwigPlugin.php | 3 +- .../Plugin/Twig/ListGroupTwigPlugin.php | 5 ++-- .../Plugin/Twig/ModalTwigPlugin.php | 5 ++-- .../Plugin/Twig/PanelTwigPlugin.php | 1 + .../Plugin/Twig/TabsTwigPlugin.php | 1 + .../Plugin/Twig/UrlTwigPlugin.php | 2 +- src/Spryker/Zed/Gui/GuiDependencyProvider.php | 2 ++ 11 files changed, 44 insertions(+), 39 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index 0b3066cc..67ccbb57 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -9,9 +9,6 @@ use Spryker\Shared\Twig\Loader\FilesystemLoader; use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; -use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupUrlGenerator; -use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonUrlGenerator; -use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\UrlGeneratorInterface; use Spryker\Zed\Gui\GuiDependencyProvider; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; @@ -29,34 +26,10 @@ public function createFilesystemLoader(): FilesystemLoaderInterface } /** - * @return \Twig\TwigFunction[] + * @return \Twig\TwigFilter[] */ public function getTwigFilters(): array { return $this->getProvidedDependency(GuiDependencyProvider::GUI_TWIG_FILTERS); } - - /** - * @param string $url - * @param string $title - * @param array $options - * - * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\UrlGeneratorInterface - */ - public function createButtonUrlGenerator(string $url, string $title, array $options): UrlGeneratorInterface - { - return new ButtonUrlGenerator($url, $title, $options); - } - - /** - * @param array $buttons - * @param string $title - * @param array $options - * - * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\UrlGeneratorInterface - */ - public function createButtonGroupUrlGenerator(array $buttons, string $title, array $options): UrlGeneratorInterface - { - return new ButtonGroupUrlGenerator($buttons, $title, $options); - } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index 774b6588..5fd0e927 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -15,7 +15,7 @@ use Twig\Environment; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\GuiTwigPlugin` instead. + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\GuiFilterTwigPlugin` instead. * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php index 6dadd4ed..a6e83caf 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php @@ -71,9 +71,21 @@ protected function getButtonGroupFunction(): TwigFunction $options[ButtonUrlGenerator::DEFAULT_CSS_CLASSES] = static::DEFAULT_CSS_CLASSES; } - $buttonUrlGenerator = $this->getFactory()->createButtonUrlGenerator($url, $title, $options); + $buttonUrlGenerator = $this->createButtonUrlGenerator($url, $title, $options); return $buttonUrlGenerator->generate(); }, ['is_safe' => ['html']]); } + + /** + * @param string $url + * @param string $title + * @param array $options + * + * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\UrlGeneratorInterface + */ + protected function createButtonUrlGenerator($url, $title, array $options): UrlGeneratorInterface + { + return new ButtonUrlGenerator($url, $title, $options); + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php index d3b1d59a..5713d2af 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupTwigPlugin.php @@ -23,6 +23,7 @@ class ButtonGroupTwigPlugin extends AbstractPlugin implements TwigPluginInterfac /** * {@inheritDoc} + * - Extends twig with "groupActionButtons" function to generate a group of action buttons. * * @api * @@ -52,16 +53,28 @@ protected function getButtonGroupFunction(): TwigFunction $options[ButtonGroupUrlGenerator::BUTTON_CLASS] = $this->getDefaultButtonClass(); } - $buttonGroupUrlGenerator = $this->getFactory()->createButtonGroupUrlGenerator($buttons, $title, $options); + $buttonGroupUrlGenerator = $this->createButtonGroupUrlGenerator($buttons, $title, $options); return $buttonGroupUrlGenerator->generate(); }, ['is_safe' => ['html']]); } + /** + * @param array $buttons + * @param string $title + * @param array $options + * + * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\UrlGeneratorInterface + */ + protected function createButtonGroupUrlGenerator(array $buttons, string $title, array $options): UrlGeneratorInterface + { + return new ButtonGroupUrlGenerator($buttons, $title, $options); + } + /** * @return string */ - protected function getDefaultButtonClass() + protected function getDefaultButtonClass(): string { return 'btn-view'; } @@ -69,7 +82,7 @@ protected function getDefaultButtonClass() /** * @return string */ - protected function getDefaultIcon() + protected function getDefaultIcon(): string { return ' '; } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonTwigPlugin.php index a65ccd63..a6b68a59 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonTwigPlugin.php @@ -23,6 +23,7 @@ class SubmitButtonTwigPlugin extends AbstractPlugin implements TwigPluginInterfa /** * {@inheritDoc} + * - Extends twig with "submit_button" function to generate a submit button for a form. * * @api * @@ -45,7 +46,7 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro */ protected function getZedSubmitButtonFunction(Environment $twig): TwigFunction { - return new TwigFunction(static::FUNCTION_NAME_SUBMIT_BUTTON, function ($value, array $attr = []) use ($twig) { + return new TwigFunction(static::FUNCTION_NAME_SUBMIT_BUTTON, function (string $value, array $attr = []) use ($twig) { return $twig->render( $this->getConfig()->getSubmitButtonDefaultTemplatePath(), [ diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php index 0736dd36..5e373d51 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php @@ -23,13 +23,14 @@ class ListGroupTwigPlugin extends AbstractPlugin implements TwigPluginInterface /** * {@inheritDoc} + * - Extends twig with "listGroup" function to generate custom list group for displaying a series of content. + * + * @api * * @param \Twig\Environment $twig * @param \Spryker\Service\Container\ContainerInterface $container * * @return \Twig\Environment - * - * @api */ public function extend(Environment $twig, ContainerInterface $container): Environment { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php index f2970d73..e3a33e45 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php @@ -23,13 +23,14 @@ class ModalTwigPlugin extends AbstractPlugin implements TwigPluginInterface /** * {@inheritDoc} + * - Extends twig with "modal" function to add dialogs to your site for lightboxes, user notifications, or completely custom content. + * + * @api * * @param \Twig\Environment $twig * @param \Spryker\Service\Container\ContainerInterface $container * * @return \Twig\Environment - * - * @api */ public function extend(Environment $twig, ContainerInterface $container): Environment { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php index 22ffd2c7..b2b4b85b 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php @@ -23,6 +23,7 @@ class PanelTwigPlugin extends AbstractPlugin implements TwigPluginInterface /** * {@inheritDoc} + * - Extends twig with "panel" function to create bordered box with some padding around it's content. * * @api * diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php index 3b420f06..5105abef 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php @@ -24,6 +24,7 @@ class TabsTwigPlugin extends AbstractPlugin implements TwigPluginInterface /** * {@inheritDoc} + * - Extends twig with "tabs" function to generate tabs upon navs and cards internally. * * @api * diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php index a05e179d..e9943559 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -45,7 +45,7 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro */ protected function getUrlFunction(): TwigFunction { - return new TwigFunction(static::FUNCTION_NAME_URL, function ($url, array $query = [], array $options = []) { + return new TwigFunction(static::FUNCTION_NAME_URL, function (string $url, array $query = [], array $options = []) { $url = Url::generate($url, $query, $options); $html = $url->buildEscaped(); diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index 37670619..4ed03a93 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -78,6 +78,8 @@ protected function addTwigFilter(Container $container) } /** + * @deprecated Use `TwigPlugin` instead. + * * @return \Twig\TwigFunction[] */ protected function getTwigFunctions() From 0203f3400c659daf75f1e28648d879810275f1e0 Mon Sep 17 00:00:00 2001 From: Oleksandr Myrnyi Date: Mon, 23 Sep 2019 16:57:05 +0300 Subject: [PATCH 066/304] SC-1927: Adjust code style --- .../Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php | 2 +- .../Plugin/Twig/Buttons/AbstractButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Action/BackActionButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Action/EditActionButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php | 2 +- .../Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php | 2 +- .../Plugin/Twig/Buttons/Form/SubmitButtonFunction.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php | 2 +- src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php | 2 +- src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php | 2 +- src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php | 2 +- src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php | 2 +- src/Spryker/Zed/Gui/GuiDependencyProvider.php | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index 5fd0e927..abf94089 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -15,7 +15,7 @@ use Twig\Environment; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\GuiFilterTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\GuiFilterTwigPlugin` instead. * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php index aa0ebadf..dbf40d8d 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\AssetsPathTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\AssetsPathTwigPlugin` instead. * * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php index a992d5dd..c934f2d8 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\AbstractButtonTwig` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\AbstractButtonTwig` instead. */ abstract class AbstractButtonFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php index acffa925..96ff9034 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\BackActionButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\BackActionButtonTwigPlugin` instead. */ class BackActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php index ccd4c9ae..710bc597 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonTwigPlugin` instead. */ class CreateActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php index 49b42a12..c2f67c67 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\EditActionButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\EditActionButtonTwigPlugin` instead. */ class EditActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php index 75fc6547..c3ddf4d7 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\RemoveActionButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\RemoveActionButtonTwigPlugin` instead. */ class RemoveActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php index b647d680..b1495cfd 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\ViewActionButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\ViewActionButtonTwigPlugin` instead. */ class ViewActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php index 765c6933..79a68905 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use '\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupTwigPlugin` instead. + * @deprecated Use 'Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupTwigPlugin` instead. */ class ButtonGroupFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php index 5fb6dd43..193ce370 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php @@ -11,7 +11,7 @@ use Twig\Environment; /** - * @deprecated `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Form\SubmitButtonTwigPlugin` instead. + * @deprecated `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Form\SubmitButtonTwigPlugin` instead. */ class SubmitButtonFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php index cc056914..55f45a22 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\ListGroupTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\ListGroupTwigPlugin` instead. */ class ListGroupFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php index 832596ae..189abded 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\ModalTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\ModalTwigPlugin` instead. */ class ModalFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php index ef75c991..f73fc32b 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\PanelTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\PanelTwigPlugin` instead. */ class PanelFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php index 40f401ca..9e2c2877 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php @@ -12,7 +12,7 @@ use Twig\Environment; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\TabsTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\TabsTwigPlugin` instead. */ class TabsFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php index 4e247685..6ba37247 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php @@ -11,7 +11,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\UrlTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\UrlTwigPlugin` instead. */ class UrlFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index 4ed03a93..b058b29a 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -78,7 +78,7 @@ protected function addTwigFilter(Container $container) } /** - * @deprecated Use `TwigPlugin` instead. + * @deprecated Will be removed without replacement. * * @return \Twig\TwigFunction[] */ From 1fda8f01f8ee46a8574153d11b894c87dcbcf8b1 Mon Sep 17 00:00:00 2001 From: Oleksandr Myrnyi Date: Mon, 23 Sep 2019 17:00:24 +0300 Subject: [PATCH 067/304] SC-1927: Adjust code style --- .../Plugin/Twig/Buttons/Table/BackTableButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Table/EditTableButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php index 4024658e..a69c9980 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\BackTableButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\BackTableButtonTwigPlugin` instead. */ class BackTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php index 98e3c1d4..9f233003 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\CreateTableButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\CreateTableButtonTwigPlugin` instead. */ class CreateTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php index cea54e4b..73ae9f52 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\EditTableButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\EditTableButtonTwigPlugin` instead. */ class EditTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php index 77d7313f..24a23f0c 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\RemoveTableButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\RemoveTableButtonTwigPlugin` instead. */ class RemoveTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php index 1d3b0f67..9a7a4842 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\ViewTableButtonTwigPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\ViewTableButtonTwigPlugin` instead. */ class ViewTableButtonFunction extends AbstractTableFunction { From c995f9b1975b022e66766edaad3bfc2845abb4a9 Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Tue, 24 Sep 2019 13:23:54 +0000 Subject: [PATCH 068/304] SC-1927: Adjust templates after merge --- .../Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php | 2 +- src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php index 0b2b28f2..abba907c 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php @@ -46,7 +46,7 @@ protected function getZedAssetsPathFunction(): TwigFunction { return new TwigFunction(static::FUNCTION_NAME_ASSETS_PATH, function (string $path) { return $this->getZedAssetsPathByName($path); - }); + }, ['is_safe' => ['html']]); } /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php index 7dd5189f..eb38d6d4 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeTwigPlugin.php @@ -47,6 +47,6 @@ protected function getUrlDecodeFunction(): TwigFunction { return new TwigFunction(static::FUNCTION_NAME_URL_DECODE, function (string $url) { return urldecode($url); - }); + }, ['is_safe' => ['html']]); } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php index a05e179d..76a06169 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -50,6 +50,6 @@ protected function getUrlFunction(): TwigFunction $html = $url->buildEscaped(); return $html; - }); + }, ['is_safe' => ['html']]); } } From a33602f4917061896108a53215802bf02182beb6 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 24 Sep 2019 17:47:24 +0200 Subject: [PATCH 069/304] Fix XML syntax. --- src/Spryker/Shared/Gui/Transfer/gui.transfer.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml b/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml index 85ccf344..cd93f30e 100644 --- a/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml +++ b/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml @@ -33,7 +33,7 @@ - + @@ -41,10 +41,10 @@ - - - - + + + + From 6638625016513a20779c8f84847641e7a19a6594 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 24 Sep 2019 19:37:34 +0200 Subject: [PATCH 070/304] Fix CS. --- .../Form/Type/Extension/NoValidateTypeExtension.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php index 933f7740..afb0f0eb 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php @@ -17,6 +17,10 @@ class NoValidateTypeExtension extends AbstractTypeExtension /** * {@inheritdoc} * + * @param \Symfony\Component\Form\FormView $view + * @param \Symfony\Component\Form\FormInterface $form + * @param array $options + * * @return void */ public function buildView(FormView $view, FormInterface $form, array $options) From 7b7b262831a477a7322cc0cf1f297428ca8b0c13 Mon Sep 17 00:00:00 2001 From: Dmitry Lymarenko Date: Wed, 25 Sep 2019 15:13:01 +0300 Subject: [PATCH 071/304] PS-10743/PS-10822 Fixed AbstractTable conditions applying; Updated translation --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 4d1fe9f5..b393922f 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -730,6 +730,8 @@ protected function applyConditions(ModelCriteria $query, TableConfiguration $con $conditions ); + $gluedCondition = '(' . $gluedCondition . ')'; + if ($config->getHasSearchableFieldsWithAggregateFunctions()) { return $query->having($gluedCondition); } From 2d13c28b0ae9f251cdaa1f53904b3a914e9d96f8 Mon Sep 17 00:00:00 2001 From: mscherer Date: Wed, 25 Sep 2019 16:45:37 +0200 Subject: [PATCH 072/304] Fix CS. --- .../Communication/Form/Constraint/IntegerMoneyConstraint.php | 2 +- .../Form/Type/Extension/NoValidateTypeExtension.php | 4 ++-- .../Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php index e1f81520..9e559c2d 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php @@ -16,7 +16,7 @@ class IntegerMoneyConstraint extends LessThan protected const MESSAGE_PATTERN = 'This value should be less than %.2f'; /** - * @inheritdoc + * @inheritDoc */ public function __construct($options = null) { diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php index afb0f0eb..a6d35577 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php @@ -15,7 +15,7 @@ class NoValidateTypeExtension extends AbstractTypeExtension { /** - * {@inheritdoc} + * {@inheritDoc} * * @param \Symfony\Component\Form\FormView $view * @param \Symfony\Component\Form\FormInterface $form @@ -31,7 +31,7 @@ public function buildView(FormView $view, FormInterface $form, array $options) } /** - * {@inheritdoc} + * {@inheritDoc} * * @return string */ diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php index 33eadd28..f6d81297 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php @@ -29,7 +29,7 @@ class FormRuntimeLoaderTwigPlugin extends AbstractPlugin implements TwigPluginIn protected const SERVICE_FORM_CSRF_PROVIDER = 'form.csrf_provider'; /** - * {@inheritdoc} + * {@inheritDoc} * * @api * diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php index 5e878972..576e1792 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigLoaderPlugin.php @@ -18,7 +18,7 @@ class GuiTwigLoaderPlugin extends AbstractPlugin implements TwigLoaderPluginInterface { /** - * {@inheritdoc} + * {@inheritDoc} * * @api * From 33eb20c635af8dd5af654e83617597262d61e2d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Mon, 7 Jan 2019 14:38:08 +0000 Subject: [PATCH 073/304] TE-1210 Added new router and used Symfonys default cache for routes. TE-1210 Updated deprecation messages, added description text for deprecation, added aliases for accessing the ChainRouter. TE-1210 Added check for _template beeing set and use it instead of building it. TE-1210 Performance optimizations of the Router. TE-1210 Added option to enable/disable the Router cache. --- src/Spryker/Zed/Gui/Presentation/Table/index.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/index.twig b/src/Spryker/Zed/Gui/Presentation/Table/index.twig index 93b4595a..15d7ec16 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/index.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/index.twig @@ -1,7 +1,7 @@ {% set baseUrl = config.baseUrl is not empty ? config.baseUrl : '/' ~ app.request.get('module') ~ '/' ~ app.request.get('controller') ~ '/' %}
Date: Tue, 11 Jun 2019 11:42:39 +0000 Subject: [PATCH 074/304] TE-1211 Fixed typo. --- src/Spryker/Zed/Gui/Presentation/Table/index.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/index.twig b/src/Spryker/Zed/Gui/Presentation/Table/index.twig index 15d7ec16..93b4595a 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/index.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/index.twig @@ -1,7 +1,7 @@ {% set baseUrl = config.baseUrl is not empty ? config.baseUrl : '/' ~ app.request.get('module') ~ '/' ~ app.request.get('controller') ~ '/' %}
Date: Wed, 12 Jun 2019 11:59:47 +0000 Subject: [PATCH 075/304] TE-1211 Fixed wrong URL's. --- src/Spryker/Zed/Gui/Presentation/Table/index.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/index.twig b/src/Spryker/Zed/Gui/Presentation/Table/index.twig index 93b4595a..7976d309 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/index.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/index.twig @@ -1,7 +1,7 @@ {% set baseUrl = config.baseUrl is not empty ? config.baseUrl : '/' ~ app.request.get('module') ~ '/' ~ app.request.get('controller') ~ '/' %}
Date: Thu, 26 Sep 2019 10:38:13 +0200 Subject: [PATCH 076/304] Raise PHPStan levels. --- phpstan.json | 2 +- phpstan.neon | 1 + src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/phpstan.json b/phpstan.json index fab1ce92..5853d235 100644 --- a/phpstan.json +++ b/phpstan.json @@ -1,3 +1,3 @@ { - "defaultLevel": 3 + "defaultLevel": 5 } diff --git a/phpstan.neon b/phpstan.neon index 1b00e159..0d70fc7e 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,3 +2,4 @@ parameters: ignoreErrors: - '#Function twig_escape_filter not found.#' - '#Class Symfony\\Bridge\\Twig\\Form\\TwigRenderer not found.#' + - '#Parameter \#1 \$attribute of method .+ConnectionInterface::getAttribute\(\) expects string, int given.#' diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 048dbccc..558ff3ac 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -218,6 +218,7 @@ public function loadData(array $data) { $tableData = []; + /** @var array|null $headers */ $headers = $this->config->getHeader(); $safeColumns = $this->config->getRawColumns(); $extraColumns = $this->config->getExtraColumns(); @@ -371,7 +372,7 @@ public function setTableIdentifier($tableIdentifier) */ private function getTwig() { - /** @var \Twig\Environment $twig */ + /** @var \Twig\Environment|null $twig */ $twig = (new Pimple()) ->getApplication()['twig']; @@ -462,7 +463,7 @@ protected function getDefaultSorting(TableConfiguration $config) $availableFields = array_keys($config->getHeader()); $index = array_search($field, $availableFields, true); - if ($index === null) { + if ($index === false) { return $sort; } @@ -487,7 +488,7 @@ protected function createSortingParameters(array $orderParameter) continue; } $sorting[] = [ - self::SORT_BY_COLUMN => $this->getParameter($sortingRules, self::SORT_BY_COLUMN, 0), + self::SORT_BY_COLUMN => $this->getParameter($sortingRules, self::SORT_BY_COLUMN, '0'), self::SORT_BY_DIRECTION => $this->getParameter($sortingRules, self::SORT_BY_DIRECTION, 'asc'), ]; } @@ -680,7 +681,6 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $filter = ''; $driverName = Propel::getConnection()->getAttribute(PDO::ATTR_DRIVER_NAME); - // @todo fix this in CD-412 if ($driverName === 'pgsql') { $filter = '::TEXT'; } From b48a82439af410df84b5040f199ae17de61d17ea Mon Sep 17 00:00:00 2001 From: gechetspr Date: Fri, 27 Sep 2019 13:47:23 +0300 Subject: [PATCH 077/304] TE-963 CR fixes --- ...FormPlugin.php => NoValidateFormTypeExtensionFormPlugin.php} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/Spryker/Zed/Gui/Communication/Plugin/Form/{NoValidateTypeFormPlugin.php => NoValidateFormTypeExtensionFormPlugin.php} (93%) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateFormTypeExtensionFormPlugin.php similarity index 93% rename from src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php rename to src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateFormTypeExtensionFormPlugin.php index c2445cc2..056443f5 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateTypeFormPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateFormTypeExtensionFormPlugin.php @@ -16,7 +16,7 @@ * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ -class NoValidateTypeFormPlugin extends AbstractPlugin implements FormPluginInterface +class NoValidateFormTypeExtensionFormPlugin extends AbstractPlugin implements FormPluginInterface { /** * {@inheritdoc} From e1a52556a3826ddc4f47b4646bd59552a96e24ac Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Mon, 30 Sep 2019 11:38:58 +0000 Subject: [PATCH 078/304] SC-1927: Move twig plugins logic to templates --- .../Twig/Buttons/AbstractButtonTwig.php | 9 ++- .../Action/AbstractActionButtonTwig.php | 15 ---- .../Action/BackActionButtonTwigPlugin.php | 12 +++- .../Action/CreateActionButtonTwigPlugin.php | 12 +++- .../Action/EditActionButtonTwigPlugin.php | 12 +++- .../Action/RemoveActionButtonTwigPlugin.php | 12 +++- .../Action/ViewActionButtonTwigPlugin.php | 12 +++- .../Twig/Buttons/Table/AbstractTableTwig.php | 15 ---- .../Table/BackTableButtonTwigPlugin.php | 12 +++- .../Table/CreateTableButtonTwigPlugin.php | 12 +++- .../Table/EditTableButtonTwigPlugin.php | 12 +++- .../Table/RemoveTableButtonTwigPlugin.php | 12 +++- .../Table/ViewTableButtonTwigPlugin.php | 12 +++- .../Plugin/Twig/ListGroupTwigPlugin.php | 69 +++++-------------- .../Plugin/Twig/ModalTwigPlugin.php | 55 ++++++++------- .../Plugin/Twig/PanelTwigPlugin.php | 53 ++++---------- .../Plugin/Twig/TabsTwigPlugin.php | 7 +- src/Spryker/Zed/Gui/GuiConfig.php | 40 +++++++++++ .../list-group-multidimensional.twig | 24 +++++++ .../Presentation/ListGroup/list-group.twig | 5 ++ .../Zed/Gui/Presentation/Modal/modal.twig | 16 +++++ .../Zed/Gui/Presentation/Panel/panel.twig | 17 +++++ 22 files changed, 279 insertions(+), 166 deletions(-) delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonTwig.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableTwig.php create mode 100644 src/Spryker/Zed/Gui/Presentation/ListGroup/list-group-multidimensional.twig create mode 100644 src/Spryker/Zed/Gui/Presentation/ListGroup/list-group.twig create mode 100644 src/Spryker/Zed/Gui/Presentation/Modal/modal.twig create mode 100644 src/Spryker/Zed/Gui/Presentation/Panel/panel.twig diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php index a6e83caf..2b754e2b 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonTwig.php @@ -19,8 +19,6 @@ */ abstract class AbstractButtonTwig extends AbstractPlugin implements TwigPluginInterface { - protected const DEFAULT_CSS_CLASSES = 'undefined'; - /** * @return string */ @@ -36,6 +34,11 @@ abstract protected function getButtonClass(): string; */ abstract protected function getIcon(): string; + /** + * @return string + */ + abstract protected function getButtonDefaultClass(): string; + /** * {@inheritDoc} * @@ -68,7 +71,7 @@ protected function getButtonGroupFunction(): TwigFunction } if (!array_key_exists(ButtonUrlGenerator::DEFAULT_CSS_CLASSES, $options)) { - $options[ButtonUrlGenerator::DEFAULT_CSS_CLASSES] = static::DEFAULT_CSS_CLASSES; + $options[ButtonUrlGenerator::DEFAULT_CSS_CLASSES] = $this->getButtonDefaultClass(); } $buttonUrlGenerator = $this->createButtonUrlGenerator($url, $title, $options); diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonTwig.php deleted file mode 100644 index b89fdff4..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonTwig.php +++ /dev/null @@ -1,15 +0,0 @@ - '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-sm btn-outline safe-submit'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php index b9d9f308..6ac470d5 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php @@ -7,11 +7,13 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonTwig; + /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() */ -class CreateActionButtonTwigPlugin extends AbstractActionButtonTwig +class CreateActionButtonTwigPlugin extends AbstractButtonTwig { /** * @return string @@ -36,4 +38,12 @@ protected function getIcon(): string { return ' '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-sm btn-outline safe-submit'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php index fa2be6f5..55ccd3b8 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php @@ -7,11 +7,13 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonTwig; + /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() */ -class EditActionButtonTwigPlugin extends AbstractActionButtonTwig +class EditActionButtonTwigPlugin extends AbstractButtonTwig { /** * @return string @@ -36,4 +38,12 @@ protected function getIcon(): string { return ' '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-sm btn-outline safe-submit'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonTwigPlugin.php index fdf9ac00..4ab121b5 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonTwigPlugin.php @@ -7,11 +7,13 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonTwig; + /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() */ -class RemoveActionButtonTwigPlugin extends AbstractActionButtonTwig +class RemoveActionButtonTwigPlugin extends AbstractButtonTwig { /** * @return string @@ -36,4 +38,12 @@ protected function getIcon(): string { return ' '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-sm btn-outline safe-submit'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php index 8dd4c97c..97b088f0 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php @@ -7,11 +7,13 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonTwig; + /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() */ -class ViewActionButtonTwigPlugin extends AbstractActionButtonTwig +class ViewActionButtonTwigPlugin extends AbstractButtonTwig { /** * @return string @@ -36,4 +38,12 @@ protected function getIcon(): string { return ' '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-sm btn-outline safe-submit'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableTwig.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableTwig.php deleted file mode 100644 index c07074fd..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableTwig.php +++ /dev/null @@ -1,15 +0,0 @@ - '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-xs btn-outline'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonTwigPlugin.php index 548ebaec..08f4cb9f 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonTwigPlugin.php @@ -7,11 +7,13 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonTwig; + /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() */ -class CreateTableButtonTwigPlugin extends AbstractTableTwig +class CreateTableButtonTwigPlugin extends AbstractButtonTwig { /** * @return string @@ -36,4 +38,12 @@ protected function getIcon(): string { return ' '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-xs btn-outline'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php index 288994b1..f4916899 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php @@ -7,11 +7,13 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonTwig; + /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() */ -class EditTableButtonTwigPlugin extends AbstractTableTwig +class EditTableButtonTwigPlugin extends AbstractButtonTwig { /** * @return string @@ -36,4 +38,12 @@ protected function getIcon(): string { return ' '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-xs btn-outline'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php index 5a53e280..367b2805 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php @@ -7,11 +7,13 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonTwig; + /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() */ -class RemoveTableButtonTwigPlugin extends AbstractTableTwig +class RemoveTableButtonTwigPlugin extends AbstractButtonTwig { /** * @return string @@ -36,4 +38,12 @@ protected function getIcon(): string { return ' '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-xs btn-outline'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonTwigPlugin.php index 84d9503a..1b13870a 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonTwigPlugin.php @@ -7,11 +7,13 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; +use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonTwig; + /** * @method \Spryker\Zed\Gui\GuiConfig getConfig() * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() */ -class ViewTableButtonTwigPlugin extends AbstractTableTwig +class ViewTableButtonTwigPlugin extends AbstractButtonTwig { /** * @return string @@ -36,4 +38,12 @@ protected function getIcon(): string { return ' '; } + + /** + * @return string + */ + protected function getButtonDefaultClass(): string + { + return 'btn-xs btn-outline'; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php index 5e373d51..c7e6e363 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupTwigPlugin.php @@ -34,69 +34,34 @@ class ListGroupTwigPlugin extends AbstractPlugin implements TwigPluginInterface */ public function extend(Environment $twig, ContainerInterface $container): Environment { - $twig->addFunction($this->getZedListGroupFunction()); + $twig->addFunction($this->getZedListGroupFunction($twig)); return $twig; } /** + * @param \Twig\Environment $twig + * * @return \Twig\TwigFunction */ - protected function getZedListGroupFunction(): TwigFunction + protected function getZedListGroupFunction(Environment $twig): TwigFunction { - return new TwigFunction(static::FUNCTION_NAME_LIST_GROUP, function (array $items) { + return new TwigFunction(static::FUNCTION_NAME_LIST_GROUP, function (array $items) use ($twig) { if (is_array(array_values($items)[0])) { - $html = '
'; - - foreach ($items as $item) { - $class = ''; - $target = ''; - $data = ''; - $extras = ''; - - if (array_key_exists('class', $item)) { - $class = ' ' . $item['class']; - } - - if (array_key_exists('target', $item) && !is_array($item['target'])) { - $target = ' target="' . $target . '"'; - } - - if (array_key_exists('extras', $item) && is_array($item['extras'])) { - foreach ($item['extras'] as $key => $value) { - if (is_array($value)) { - $value = json_encode($value); - } - $extras .= ' ' . $key . '="' . htmlentities($value) . '"'; - } - } - - if (array_key_exists('data', $item) && is_array($item['data'])) { - foreach ($item['data'] as $key => $value) { - if (is_array($value)) { - $value = json_encode($value); - } - $data .= ' data-' . $key . '="' . htmlentities($value); - } - } - - $html .= ''; - $html .= $item['label']; - $html .= ''; - } - - $html .= '
'; - } else { - $html = '
    '; - - foreach ($items as $item) { - $html .= '
  • ' . $item; - } - - $html .= '
'; + return $twig->render( + $this->getConfig()->getDefaultMultiListGroupTemplatePath(), + [ + 'items' => $items, + ] + ); } - return $html; + return $twig->render( + $this->getConfig()->getDefaultListGroupTemplatePath(), + [ + 'items' => $items, + ] + ); }, ['is_safe' => ['html']]); } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php index e3a33e45..ade5afb6 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalTwigPlugin.php @@ -34,43 +34,46 @@ class ModalTwigPlugin extends AbstractPlugin implements TwigPluginInterface */ public function extend(Environment $twig, ContainerInterface $container): Environment { - $twig->addFunction($this->getZedModalFunction()); + $twig->addFunction($this->getZedModalFunction($twig)); return $twig; } /** + * @param \Twig\Environment $twig + * * @return \Twig\TwigFunction */ - protected function getZedModalFunction(): TwigFunction + protected function getZedModalFunction(Environment $twig): TwigFunction { - return new TwigFunction(static::FUNCTION_NAME_MODAL, function (string $title, string $content, ?string $footer = null, ?array $extraData = null) { - $extras = ''; - - if (is_array($extraData)) { - foreach ($extraData as $key => $value) { - $extras .= ' ' . $key . '="' . htmlentities($value) . '"'; - } - } + return new TwigFunction(static::FUNCTION_NAME_MODAL, function (string $title, string $content, ?string $footer = null, ?array $extraData = null) use ($twig) { + return $twig->render( + $this->getConfig()->getDefaultModalTemplatePath(), + [ + 'title' => $title, + 'content' => $content, + 'footer' => $footer, + 'extras' => $this->getExtraData($extraData), + ] + ); + }, ['is_safe' => ['html']]); + } - $html = '
'; - $html .= ''; - $html .= '
'; - - return $html; - }, ['is_safe' => ['html']]); + return $extras; } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php index b2b4b85b..fd29dfd7 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelTwigPlugin.php @@ -34,17 +34,19 @@ class PanelTwigPlugin extends AbstractPlugin implements TwigPluginInterface */ public function extend(Environment $twig, ContainerInterface $container): Environment { - $twig->addFunction($this->getZedPanelFunction()); + $twig->addFunction($this->getZedPanelFunction($twig)); return $twig; } /** + * @param \Twig\Environment $twig + * * @return \Twig\TwigFunction */ - protected function getZedPanelFunction(): TwigFunction + protected function getZedPanelFunction(Environment $twig): TwigFunction { - return new TwigFunction(static::FUNCTION_NAME_PANEL, function (string $title, string $content, ?array $options = null, ?string $footer = null) { + return new TwigFunction(static::FUNCTION_NAME_PANEL, function (string $title, string $content, ?array $options = null, ?string $footer = null) use ($twig) { $defaultOptions = [ 'class' => 'default', 'id' => false, @@ -55,42 +57,15 @@ protected function getZedPanelFunction(): TwigFunction $options = array_merge($defaultOptions, (array)$options); - $collapsable = ''; - $id = ''; - - if ($options['collapsable']) { - $collapsable = ' data-collapsable'; - - if ($options['collapsed']) { - $options['class'] .= ' is:collapsed'; - } - } - - if ($options['id']) { - $id = ' id="' . $options['id'] . '"'; - } - - $html = '
'; - - if ($title) { - $html .= '
'; - $html .= '

' . $title . '

'; - $html .= '
'; - } - - if ($options['noWrap']) { - $html .= $content; - } else { - $html .= '
' . $content . '
'; - } - - if ($footer) { - $html .= '
' . $footer . '
'; - } - - $html .= '
'; - - return $html; + return $twig->render( + $this->getConfig()->getDefaultPanelTemplatePath(), + [ + 'title' => $title, + 'content' => $content, + 'options' => $options, + 'footer' => $footer, + ] + ); }, ['is_safe' => ['html']]); } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php index 5105abef..3f3de137 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsTwigPlugin.php @@ -47,15 +47,10 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro */ protected function getTabsFunction(Environment $twig): TwigFunction { - $options = [ - 'needs_environment' => true, - 'is_safe' => ['html'], - ]; - return new TwigFunction(static::FUNCTION_NAME_TABS, function (Environment $twig, TabsViewTransfer $tabsViewTransfer, array $context = []) { $context['tabsViewTransfer'] = $tabsViewTransfer; return $twig->render($this->getConfig()->getTabsDefaultTemplatePath(), $context); - }, $options); + }, ['needs_environment' => true, 'is_safe' => ['html']]); } } diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php index 274598cc..2055dff9 100644 --- a/src/Spryker/Zed/Gui/GuiConfig.php +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -22,6 +22,14 @@ class GuiConfig extends AbstractBundleConfig protected const SUBMIT_BUTTON_DEFAULT_TEMPLATE_PATH = '@Gui/Form/button/submit_button.twig'; + protected const MODAL_DEFAULT_TEMPLATE_PATH = '@Gui/Modal/modal.twig'; + + protected const PANEL_DEFAULT_TEMPLATE_PATH = '@Gui/Panel/panel.twig'; + + protected const LIST_GROUP_DEFAULT_TEMPLATE_PATH = '@Gui/ListGroup/list-group.twig'; + + protected const LIST_GROUP_MULTI_DEFAULT_TEMPLATE_PATH = '@Gui/ListGroup/list-group-multidimensional.twig'; + /** * @return string */ @@ -71,4 +79,36 @@ public function getSubmitButtonDefaultTemplatePath(): string { return static::SUBMIT_BUTTON_DEFAULT_TEMPLATE_PATH; } + + /** + * @return string + */ + public function getDefaultModalTemplatePath(): string + { + return static::MODAL_DEFAULT_TEMPLATE_PATH; + } + + /** + * @return string + */ + public function getDefaultPanelTemplatePath(): string + { + return static::PANEL_DEFAULT_TEMPLATE_PATH; + } + + /** + * @return string + */ + public function getDefaultListGroupTemplatePath(): string + { + return static::LIST_GROUP_DEFAULT_TEMPLATE_PATH; + } + + /** + * @return string + */ + public function getDefaultMultiListGroupTemplatePath(): string + { + return static::LIST_GROUP_MULTI_DEFAULT_TEMPLATE_PATH; + } } diff --git a/src/Spryker/Zed/Gui/Presentation/ListGroup/list-group-multidimensional.twig b/src/Spryker/Zed/Gui/Presentation/ListGroup/list-group-multidimensional.twig new file mode 100644 index 00000000..96b27751 --- /dev/null +++ b/src/Spryker/Zed/Gui/Presentation/ListGroup/list-group-multidimensional.twig @@ -0,0 +1,24 @@ +
+ {% for item in items %} + {% set className = item.class and item.class is defined ? item.class %} + {% set target = item.target is defined ? item.target %} + {% set extraAttributes = item.extras is defined and item.extras is iterable ? item.extras %} + {% set dataAttributes = item.data is defined and item.data is iterable ? item.data %} + {% if item.href is defined %} + + {{ item.label }} + + {% endif %} + {% endfor %} +
+ +{% macro anchorAttributes(attributes, attributePrefix = '') %} + {% set extras = '' %} + {% for key,value in attributes %} + {% if value is iterable %} + {% set value = value|json_encode() %} + {% endif %} + {% set extras = extras ~ ' ' ~ attributePrefix ~ key ~ '=' ~ value %} + {% endfor %} + {{ extras }} +{% endmacro anchorAttributes %} diff --git a/src/Spryker/Zed/Gui/Presentation/ListGroup/list-group.twig b/src/Spryker/Zed/Gui/Presentation/ListGroup/list-group.twig new file mode 100644 index 00000000..ce592db7 --- /dev/null +++ b/src/Spryker/Zed/Gui/Presentation/ListGroup/list-group.twig @@ -0,0 +1,5 @@ +
+ {% for item in items %} +
  • {{ item }}
  • + {% endfor %} +
    diff --git a/src/Spryker/Zed/Gui/Presentation/Modal/modal.twig b/src/Spryker/Zed/Gui/Presentation/Modal/modal.twig new file mode 100644 index 00000000..a4863bfa --- /dev/null +++ b/src/Spryker/Zed/Gui/Presentation/Modal/modal.twig @@ -0,0 +1,16 @@ +
    + +
    diff --git a/src/Spryker/Zed/Gui/Presentation/Panel/panel.twig b/src/Spryker/Zed/Gui/Presentation/Panel/panel.twig new file mode 100644 index 00000000..c79cd3a6 --- /dev/null +++ b/src/Spryker/Zed/Gui/Presentation/Panel/panel.twig @@ -0,0 +1,17 @@ +
    + {% if title %} +
    +

    {{ title }}

    +
    + {% endif %} + + {% if options.noWrap is defined and options.noWrap %} + {{ content }} + {% else %} +
    {{ content }}
    + {% endif %} + + {% if footer is defined %} +
    {{ footer }}
    + {% endif %} +
    From 0fadad22bf6a0fd0f70e90e785f3ea8b0d9609cb Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Mon, 30 Sep 2019 13:22:15 +0000 Subject: [PATCH 079/304] SC-1917: Add missed translations for DE + code style fixes --- .../Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/GuiFilterTwigPlugin.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php index abba907c..44526189 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathTwigPlugin.php @@ -22,7 +22,7 @@ class AssetsPathTwigPlugin extends AbstractPlugin implements TwigPluginInterface public const FUNCTION_NAME_ASSETS_PATH = 'assetsPath'; /** - * {@inheritdoc} + * {@inheritDoc} * - Extends twig with "assetsPath" function to generate assets absolute url. * * @api diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiFilterTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiFilterTwigPlugin.php index 1cfd143a..9443e4d9 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiFilterTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiFilterTwigPlugin.php @@ -19,7 +19,7 @@ class GuiFilterTwigPlugin extends AbstractPlugin implements TwigPluginInterface { /** - * {@inheritdoc} + * {@inheritDoc} * * @api * From f7b0ee3ae70cc833db0cdc9a93b37ebf1b1fe2d9 Mon Sep 17 00:00:00 2001 From: mscherer Date: Mon, 14 Oct 2019 19:44:50 +0200 Subject: [PATCH 080/304] TE-4264 Fix transfer definitions to include missing singular. --- src/Spryker/Shared/Gui/Transfer/gui.transfer.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml b/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml index cd93f30e..0f7a3f32 100644 --- a/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml +++ b/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml @@ -5,8 +5,8 @@ - - + + From 03880af66d48b451de3b1854847e761e3d683d93 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 15 Oct 2019 15:36:13 +0200 Subject: [PATCH 081/304] TE-4264 Fix transfer definitions to include missing singular. --- src/Spryker/Shared/Gui/Transfer/gui.transfer.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml b/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml index 0f7a3f32..c9ba4632 100644 --- a/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml +++ b/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ - + @@ -43,8 +43,8 @@ - - + + From 7b752a1e6794c20854399821b87afee623cef283 Mon Sep 17 00:00:00 2001 From: gechetspr Date: Mon, 21 Oct 2019 18:30:12 +0300 Subject: [PATCH 082/304] TE-3890 fixed abstract table array access to null and a few tests --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 558ff3ac..76ca47c0 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -666,10 +666,11 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $this->total = $query->count(); $query->orderBy($orderColumn, $order[0][self::SORT_BY_DIRECTION]); $searchTerm = $this->getSearchTerm(); + $searchValue = $searchTerm[static::PARAMETER_VALUE] ?? ''; $isFirst = true; - if (mb_strlen($searchTerm[self::PARAMETER_VALUE]) > 0) { + if (mb_strlen($searchValue) > 0) { $query->setIdentifierQuoting(true); foreach ($config->getSearchable() as $value) { @@ -685,7 +686,7 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $filter = '::TEXT'; } - $conditionParameter = '%' . mb_strtolower($searchTerm[self::PARAMETER_VALUE]) . '%'; + $conditionParameter = '%' . mb_strtolower($searchValue) . '%'; $condition = sprintf( 'LOWER(%s%s) LIKE %s', $value, From d6de9e0cf7ad7c4d076810e41f0384e9b8af221d Mon Sep 17 00:00:00 2001 From: Oleksandr Date: Fri, 25 Oct 2019 11:53:48 +0000 Subject: [PATCH 083/304] SC-1927: AA CR --- src/Spryker/Shared/Gui/GuiConstants.php | 4 ++-- src/Spryker/Zed/Gui/GuiDependencyProvider.php | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Spryker/Shared/Gui/GuiConstants.php b/src/Spryker/Shared/Gui/GuiConstants.php index 9b5ec639..83a7ec40 100644 --- a/src/Spryker/Shared/Gui/GuiConstants.php +++ b/src/Spryker/Shared/Gui/GuiConstants.php @@ -14,11 +14,11 @@ interface GuiConstants { /** * Specification: - * - Returns the base url path to be used to build Zed assets. + * - Returns the base URL path to be used for generating of Zed assets URLs. * * @example '/assets/' * * @api */ - public const ZED_ASSETS_PATH = 'GUI:ZED_ASSETS_PATH'; + public const ZED_ASSETS_BASE_URL = 'GUI:ZED_ASSETS_BASE_URL'; } diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index b058b29a..3e37cf02 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -34,8 +34,6 @@ class GuiDependencyProvider extends AbstractBundleDependencyProvider public const GUI_TWIG_FUNCTIONS = 'gui_twig_functions'; public const GUI_TWIG_FILTERS = 'gui_twig_filters'; - public const TWIG_GUI_FUNCTIONS = 'TWIG_GUI_FUNCTIONS'; - /** * @param \Spryker\Zed\Kernel\Container $container * From c3e906eb7e53572c6a61c6903cef5f79aa98cc54 Mon Sep 17 00:00:00 2001 From: Oleksandr Myrnyi Date: Wed, 30 Oct 2019 14:39:41 +0200 Subject: [PATCH 084/304] SC-1927: CR fixes --- src/Spryker/Zed/Gui/GuiConfig.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php index 2055dff9..469522b1 100644 --- a/src/Spryker/Zed/Gui/GuiConfig.php +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -61,7 +61,7 @@ public function getDefaultTemplateFileNames(): array */ public function getZedAssetsPath(): string { - return $this->get(GuiConstants::ZED_ASSETS_PATH, '/assets/'); + return $this->get(GuiConstants::ZED_ASSETS_BASE_URL, '/assets/'); } /** From d3024b4238501f7d63fdab4ad49edb174f49eec8 Mon Sep 17 00:00:00 2001 From: Yuriy Gerton Date: Fri, 1 Nov 2019 18:11:14 +0200 Subject: [PATCH 085/304] CMS-2953: adjusted FE part --- assets/Zed/sass/_data-tables.scss | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/assets/Zed/sass/_data-tables.scss b/assets/Zed/sass/_data-tables.scss index c331863d..565faf5d 100644 --- a/assets/Zed/sass/_data-tables.scss +++ b/assets/Zed/sass/_data-tables.scss @@ -31,6 +31,24 @@ table.dataTable tbody > tr { border-right: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; } } + + .btn-outline { + &.btn-danger { + color: $btn-danger-bg; + } + + &.btn-create { + color: #108548; + } + + &.btn-view { + color: #1c84c6; + } + + &:hover { + color: #fff; + } + } } } } From 1d97398045ce4d875facd66c828b168668776b07 Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 7 Nov 2019 14:13:09 +0100 Subject: [PATCH 086/304] TE-4398 Prepare for PHPUnit 8. --- .../Zed/Gui/Communication/Table/AbstractTableTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php index eea416b6..9ab7d781 100644 --- a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php +++ b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php @@ -36,7 +36,7 @@ class AbstractTableTest extends Unit /** * @return void */ - public function setUp() + public function setUp(): void { parent::setUp(); From d9aa4fa80b652ff4b4b281c1cdb63545e9e74947 Mon Sep 17 00:00:00 2001 From: gechetspr Date: Mon, 11 Nov 2019 14:38:34 +0200 Subject: [PATCH 087/304] TE-963 deprecated form type service provider --- .../FormTypeExtensionServiceProvider.php | 2 + .../Plugin/Twig/GuiTwigPlugin.php | 68 ------------------- 2 files changed, 2 insertions(+), 68 deletions(-) delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php index e143bb80..4db4753e 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php @@ -13,6 +13,8 @@ use Spryker\Zed\Kernel\Communication\AbstractPlugin; /** + * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Form\NoValidateFormTypeExtensionFormPlugin` instead. + * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php deleted file mode 100644 index 4783b408..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/GuiTwigPlugin.php +++ /dev/null @@ -1,68 +0,0 @@ -addTwigFilters($twig); - $twig = $this->addTwigFunctions($twig); - - return $twig; - } - - /** - * @param \Twig\Environment $twig - * - * @return \Twig\Environment - */ - protected function addTwigFunctions(Environment $twig): Environment - { - $twigFunctions = $this->getFactory()->getTwigFunctions(); - foreach ($twigFunctions as $function) { - $twig->addFunction($function); - } - - return $twig; - } - - /** - * @param \Twig\Environment $twig - * - * @return \Twig\Environment - */ - protected function addTwigFilters(Environment $twig): Environment - { - $twigFilters = $this->getFactory()->getTwigFilters(); - foreach ($twigFilters as $filter) { - $twig->addFilter($filter); - } - - return $twig; - } -} From 943bc878979e4d3403dd9fc1517821b9feab4cbc Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 12 Nov 2019 10:44:47 +0100 Subject: [PATCH 088/304] Fix CS. --- .../Zed/Gui/Communication/Form/Type/AutosuggestType.php | 4 ---- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 3 +-- .../Zed/Gui/Communication/Table/TableConfiguration.php | 4 ++-- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php index b6154dd9..8e02a4a3 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php @@ -22,10 +22,6 @@ class AutosuggestType extends AbstractType public const URL = 'url'; public const PLACEHOLDER = 'placeholder'; - public function __construct() - { - } - /** * @param \Symfony\Component\Form\FormView $view * @param \Symfony\Component\Form\FormInterface $form diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 76ca47c0..8b397a64 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -92,7 +92,7 @@ abstract class AbstractTable /** * @var string|null */ - protected $tableIdentifier = null; + protected $tableIdentifier; /** * @var \Generated\Shared\Transfer\DataTablesTransfer @@ -459,7 +459,6 @@ protected function getDefaultSorting(TableConfiguration $config) $field = key($defaultSortField); $direction = $defaultSortField[$field]; - $index = null; $availableFields = array_keys($config->getHeader()); $index = array_search($field, $availableFields, true); diff --git a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php index 679277d9..4c3707f9 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php +++ b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php @@ -42,7 +42,7 @@ class TableConfiguration * * @var array|null */ - protected $searchableFields = null; + protected $searchableFields; /** * @var array @@ -52,7 +52,7 @@ class TableConfiguration /** * @var array|null */ - protected $defaultSortField = null; + protected $defaultSortField; /** * @deprecated Use $defaultSortField instead. From 8286d914fced52afc165f9e58c9c62df7e7fddfa Mon Sep 17 00:00:00 2001 From: Vasily Rodin Date: Tue, 12 Nov 2019 15:17:31 +0000 Subject: [PATCH 089/304] TE-963 CR and CS fixes --- .../Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php index 4db4753e..ade0f557 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php @@ -13,7 +13,7 @@ use Spryker\Zed\Kernel\Communication\AbstractPlugin; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Form\NoValidateFormTypeExtensionFormPlugin` instead. + * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Form\NoValidateFormTypeExtensionFormPlugin` instead. * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() From ef08826240b352527d3a14969b70505210773508 Mon Sep 17 00:00:00 2001 From: Vasily Rodin Date: Tue, 12 Nov 2019 15:20:18 +0000 Subject: [PATCH 090/304] TE-963 CS Fix --- .../Plugin/Form/NoValidateFormTypeExtensionFormPlugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateFormTypeExtensionFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateFormTypeExtensionFormPlugin.php index 056443f5..33cdd0d2 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateFormTypeExtensionFormPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Form/NoValidateFormTypeExtensionFormPlugin.php @@ -19,7 +19,7 @@ class NoValidateFormTypeExtensionFormPlugin extends AbstractPlugin implements FormPluginInterface { /** - * {@inheritdoc} + * {@inheritDoc} * - Adds `Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension`. * * @api From a16d19aa6f167bd57d00d9c6fb875269bffd1f35 Mon Sep 17 00:00:00 2001 From: mscherer Date: Fri, 1 Nov 2019 12:53:33 +0100 Subject: [PATCH 091/304] TE-4334 PHP72+ for core. TE-4334 raised minimum version of php to 7.2 TE-4334 updated travis file TE-4334 updated travis file TE-4334 Fix travis.yml TE-4334 composer.json update TE-4334 Change updater logic TE-4334 Comment back require updater --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 0ac28b4f..9a8c1986 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "description": "Gui module", "license": "proprietary", "require": { - "php": ">=7.1", + "php": ">=7.2", "spryker/kernel": "^3.30.0", "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", From 3283a8131a7de70e739d1280fffeffd98b23d3eb Mon Sep 17 00:00:00 2001 From: Aleksey Belan Date: Thu, 14 Nov 2019 14:19:08 +0200 Subject: [PATCH 092/304] MP-1157: Implemented breadcrumbs component --- .../js/modules/init-backoffice-components.js | 12 +++++++++ ...ker-zed-gui-backoffice-components.entry.js | 8 ++++++ assets/Zed/package.json | 3 ++- .../Zed/Gui/Presentation/Layout/layout.twig | 16 ++++++++---- .../backward-compatible-breadcrumb.twig | 25 ++++++------------- 5 files changed, 40 insertions(+), 24 deletions(-) create mode 100644 assets/Zed/js/modules/init-backoffice-components.js create mode 100644 assets/Zed/js/spryker-zed-gui-backoffice-components.entry.js diff --git a/assets/Zed/js/modules/init-backoffice-components.js b/assets/Zed/js/modules/init-backoffice-components.js new file mode 100644 index 00000000..054d883c --- /dev/null +++ b/assets/Zed/js/modules/init-backoffice-components.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + */ + +'use strict'; + +import { applyPolyfills, defineCustomElements } from '@spryker/backoffice-ui/backoffice/loader/index.mjs'; + +applyPolyfills().then(() => { + defineCustomElements(window); +}); diff --git a/assets/Zed/js/spryker-zed-gui-backoffice-components.entry.js b/assets/Zed/js/spryker-zed-gui-backoffice-components.entry.js new file mode 100644 index 00000000..6cc145e8 --- /dev/null +++ b/assets/Zed/js/spryker-zed-gui-backoffice-components.entry.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + */ + +'use strict'; + +require('./modules/init-backoffice-components'); diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 048e47be..6ae790c8 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -25,6 +25,7 @@ "pace": "git+https://git@github.com/hubspot/pace#v1.0.2", "select2": "git+https://git@github.com/select2/select2#4.0.2", "summernote": "^0.8.11", - "sweetalert": "~1.1.3" + "sweetalert": "~1.1.3", + "@spryker/backoffice-ui": "^0.1.0" } } diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index 708584ff..bae5a78f 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -11,6 +11,10 @@ {% endblock %} + {% block backoffice_js %} + + {% endblock %} + @@ -61,11 +65,6 @@

    {% block section_title %}{% if title is defined %}{{ title|trans }}{% endif %}{% endblock %}

    - {% if app.twig.getFunction('breadcrumb') != false %} - {% include '@Gui/Partials/breadcrumb.twig' %} - {% else %} - {% include '@Gui/Partials/backward-compatible-breadcrumb.twig' %} - {% endif %}
    @@ -75,6 +74,13 @@ {% endblock %}
    +
    + {% if app.twig.getFunction('breadcrumb') != false %} + {% include '@Gui/Partials/breadcrumb.twig' %} + {% else %} + {% include '@Gui/Partials/backward-compatible-breadcrumb.twig' %} + {% endif %} +
    diff --git a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig index e35196d2..cfbef829 100644 --- a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig +++ b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig @@ -1,20 +1,9 @@ {% if breadcrumbs|length > 0 %} - + {% set breadcrumbsList = breadcrumbs | reduce((accumulator, breadcrumb) => ( + accumulator | merge([{ + 'label': breadcrumb.label | trans, + 'uri': breadcrumb.uri, + }]) + ), []) %} + {% endif %} From 925953320cdc7d5dfad9ecb59b1e92a449900e4b Mon Sep 17 00:00:00 2001 From: Aleksey Belan Date: Thu, 14 Nov 2019 14:53:30 +0200 Subject: [PATCH 093/304] MP-1157: Changed component integration --- assets/Zed/js/modules/init-backoffice-components.js | 12 ------------ .../spryker-zed-gui-backoffice-components.entry.js | 8 -------- assets/Zed/sass/_custom.scss | 9 +++++++++ src/Spryker/Zed/Gui/Presentation/Layout/layout.twig | 8 +++++++- .../Partials/backward-compatible-breadcrumb.twig | 1 + 5 files changed, 17 insertions(+), 21 deletions(-) delete mode 100644 assets/Zed/js/modules/init-backoffice-components.js delete mode 100644 assets/Zed/js/spryker-zed-gui-backoffice-components.entry.js diff --git a/assets/Zed/js/modules/init-backoffice-components.js b/assets/Zed/js/modules/init-backoffice-components.js deleted file mode 100644 index 054d883c..00000000 --- a/assets/Zed/js/modules/init-backoffice-components.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. - */ - -'use strict'; - -import { applyPolyfills, defineCustomElements } from '@spryker/backoffice-ui/backoffice/loader/index.mjs'; - -applyPolyfills().then(() => { - defineCustomElements(window); -}); diff --git a/assets/Zed/js/spryker-zed-gui-backoffice-components.entry.js b/assets/Zed/js/spryker-zed-gui-backoffice-components.entry.js deleted file mode 100644 index 6cc145e8..00000000 --- a/assets/Zed/js/spryker-zed-gui-backoffice-components.entry.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. - */ - -'use strict'; - -require('./modules/init-backoffice-components'); diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index a09acfea..51acd714 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -26,6 +26,15 @@ label.required { } } +.title-action { + padding-top: 20px; +} + +.page-heading { + overflow: hidden; + padding-bottom: 0; +} + /* Login .. */ body.login { .login-spryker-logo { diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index bae5a78f..7414ba5e 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -12,7 +12,13 @@ {% endblock %} {% block backoffice_js %} - + {% endblock %} diff --git a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig index cfbef829..910f7150 100644 --- a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig +++ b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig @@ -5,5 +5,6 @@ 'uri': breadcrumb.uri, }]) ), []) %} + {% endif %} From a7b8730a063d9ddc035df41adfe228004d5f4044 Mon Sep 17 00:00:00 2001 From: Aleksey Belan Date: Thu, 14 Nov 2019 14:58:26 +0200 Subject: [PATCH 094/304] MP-1157: Removed dependency --- assets/Zed/package.json | 3 +-- src/Spryker/Zed/Gui/Presentation/Layout/layout.twig | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 6ae790c8..048e47be 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -25,7 +25,6 @@ "pace": "git+https://git@github.com/hubspot/pace#v1.0.2", "select2": "git+https://git@github.com/select2/select2#4.0.2", "summernote": "^0.8.11", - "sweetalert": "~1.1.3", - "@spryker/backoffice-ui": "^0.1.0" + "sweetalert": "~1.1.3" } } diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index 7414ba5e..9189f457 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -13,7 +13,7 @@ {% block backoffice_js %} + {% endblock %} From 385fc7e6d29a66ecb7b1625ab25d6e6db024e840 Mon Sep 17 00:00:00 2001 From: Aleksey Belan Date: Fri, 15 Nov 2019 14:10:44 +0200 Subject: [PATCH 097/304] MP-1157: Changed module script connection --- src/Spryker/Zed/Gui/Presentation/Layout/layout.twig | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index be0392fb..0d573059 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -13,13 +13,7 @@ {% endblock %} {% block backoffice_js %} - + {% endblock %} From 249028df66bdebea974a1f97494cbfe02a76aaea Mon Sep 17 00:00:00 2001 From: Aleksey Belan Date: Fri, 15 Nov 2019 14:15:01 +0200 Subject: [PATCH 098/304] MP-1157: Removed unnecessary code line --- src/Spryker/Zed/Gui/Presentation/Layout/layout.twig | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index 0d573059..69cfb460 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -4,7 +4,6 @@ - {% block head_title %}{% if title is defined %}{{ title | trans }}{% endif %}{% endblock %} From 51617d4bb316f9bb209bfb19f77119b6f3462038 Mon Sep 17 00:00:00 2001 From: Aleksey Belan Date: Fri, 15 Nov 2019 14:25:12 +0200 Subject: [PATCH 099/304] MP-1157: Removed unnecessary code line --- src/Spryker/Zed/Gui/Presentation/Layout/layout.twig | 5 ----- .../Partials/backward-compatible-breadcrumb.twig | 3 +++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index 69cfb460..595ec120 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -11,11 +11,6 @@ {% endblock %} - {% block backoffice_js %} - - - {% endblock %} - diff --git a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig index 910f7150..24f2cba0 100644 --- a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig +++ b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig @@ -1,4 +1,7 @@ {% if breadcrumbs|length > 0 %} + + + {% set breadcrumbsList = breadcrumbs | reduce((accumulator, breadcrumb) => ( accumulator | merge([{ 'label': breadcrumb.label | trans, From f766fdb346a997b8718e2c5a385d1aacf6215962 Mon Sep 17 00:00:00 2001 From: mscherer Date: Mon, 18 Nov 2019 14:07:35 +0100 Subject: [PATCH 100/304] Fix code smell. --- .../Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php index f6d81297..99786996 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/FormRuntimeLoaderTwigPlugin.php @@ -50,6 +50,7 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro */ protected function getTwigTemplateFileNames(): array { + /** @var \SplFileInfo[] $files */ $files = new FilesystemIterator( $this->getConfig()->getFormResourcesPath(), FilesystemIterator::SKIP_DOTS | FilesystemIterator::KEY_AS_PATHNAME From 71e41fa6bf04f748c9d5a91db53a3b63868328b0 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 19 Nov 2019 15:58:46 +0100 Subject: [PATCH 101/304] Fix CS strict for tests. --- .../Zed/Gui/Communication/Fixture/FooTable.php | 9 +++++---- .../Gui/Communication/Table/AbstractTableTest.php | 8 ++++---- .../Gui/_support/Helper/DataTableActionHelper.php | 14 +++++++------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/tests/SprykerTest/Zed/Gui/Communication/Fixture/FooTable.php b/tests/SprykerTest/Zed/Gui/Communication/Fixture/FooTable.php index 26e29c18..e385279c 100644 --- a/tests/SprykerTest/Zed/Gui/Communication/Fixture/FooTable.php +++ b/tests/SprykerTest/Zed/Gui/Communication/Fixture/FooTable.php @@ -9,6 +9,7 @@ use Spryker\Zed\Gui\Communication\Table\AbstractTable; use Spryker\Zed\Gui\Communication\Table\TableConfiguration; +use Symfony\Component\HttpFoundation\Request; class FooTable extends AbstractTable { @@ -17,7 +18,7 @@ class FooTable extends AbstractTable * * @return \Spryker\Zed\Gui\Communication\Table\TableConfiguration */ - protected function configure(TableConfiguration $config) + protected function configure(TableConfiguration $config): TableConfiguration { return new TableConfiguration(); } @@ -27,7 +28,7 @@ protected function configure(TableConfiguration $config) * * @return array */ - protected function prepareData(TableConfiguration $config) + protected function prepareData(TableConfiguration $config): array { return []; } @@ -37,7 +38,7 @@ protected function prepareData(TableConfiguration $config) * * @return void */ - public function setRequest($request) + public function setRequest(Request $request): void { $this->request = $request; } @@ -45,7 +46,7 @@ public function setRequest($request) /** * @return \Symfony\Component\HttpFoundation\Request */ - public function getRequest() + public function getRequest(): Request { return $this->request; } diff --git a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php index 9ab7d781..535c05c2 100644 --- a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php +++ b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php @@ -49,7 +49,7 @@ public function setUp(): void /** * @return void */ - public function testGetOrdersDefault() + public function testGetOrdersDefault(): void { $config = new TableConfiguration(); $config->setHeader([ @@ -74,7 +74,7 @@ public function testGetOrdersDefault() /** * @return void */ - public function testGetOrdersWithCustomSortField() + public function testGetOrdersWithCustomSortField(): void { $config = new TableConfiguration(); $config->setHeader([ @@ -101,7 +101,7 @@ public function testGetOrdersWithCustomSortField() /** * @return void */ - public function testGetOrdersWithCustomSortFieldAndCustomDirection() + public function testGetOrdersWithCustomSortFieldAndCustomDirection(): void { $config = new TableConfiguration(); $config->setHeader([ @@ -128,7 +128,7 @@ public function testGetOrdersWithCustomSortFieldAndCustomDirection() /** * @return void */ - public function testGetOrdersWithDeprecatedIndexAndDirection() + public function testGetOrdersWithDeprecatedIndexAndDirection(): void { $config = new TableConfiguration(); $config->setHeader([ diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php index fd2edf79..d516a4a9 100644 --- a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php @@ -22,7 +22,7 @@ class DataTableActionHelper extends Module * * @return void */ - public function _beforeSuite($settings = []) + public function _beforeSuite($settings = []): void { $className = $settings['class_name']; if (preg_match('/CommunicationTester/', $className)) { @@ -36,7 +36,7 @@ public function _beforeSuite($settings = []) * * @return void */ - public function clickDataTableEditButton($rowPosition = 1, $gridId = null) + public function clickDataTableEditButton(int $rowPosition = 1, ?string $gridId = null): void { $this->clickButton('Edit', $rowPosition, $gridId); } @@ -47,7 +47,7 @@ public function clickDataTableEditButton($rowPosition = 1, $gridId = null) * * @return void */ - public function clickDataTableViewButton($rowPosition = 1, $gridId = null) + public function clickDataTableViewButton(int $rowPosition = 1, ?string $gridId = null): void { $this->clickButton('View', $rowPosition, $gridId); } @@ -58,7 +58,7 @@ public function clickDataTableViewButton($rowPosition = 1, $gridId = null) * * @return void */ - public function clickDataTableDeleteButton($rowPosition = 1, $gridId = null) + public function clickDataTableDeleteButton(int $rowPosition = 1, ?string $gridId = null): void { $this->clickButton('Delete', $rowPosition, $gridId); } @@ -70,7 +70,7 @@ public function clickDataTableDeleteButton($rowPosition = 1, $gridId = null) * * @return void */ - public function clickDataTableLinkInDropDownOfButton($buttonName, $linkName, $rowPosition = 1) + public function clickDataTableLinkInDropDownOfButton(string $buttonName, string $linkName, int $rowPosition = 1): void { $this->clickButton($buttonName, $rowPosition); $this->getDriver()->click(sprintf( @@ -88,7 +88,7 @@ public function clickDataTableLinkInDropDownOfButton($buttonName, $linkName, $ro * * @return void */ - public function clickDataTableButton($name, $rowPosition = 1, $gridId = null) + public function clickDataTableButton(string $name, int $rowPosition = 1, ?string $gridId = null): void { $this->clickButton($name, $rowPosition, $gridId); } @@ -100,7 +100,7 @@ public function clickDataTableButton($name, $rowPosition = 1, $gridId = null) * * @return void */ - protected function clickButton($name, $rowPosition, $gridId = null) + protected function clickButton(string $name, int $rowPosition, ?string $gridId = null): void { $driver = $this->getDriver(); From 926a7ae5220ea744ca50bda8fbcd5cddd367b0bc Mon Sep 17 00:00:00 2001 From: Aleksey Belan Date: Wed, 4 Dec 2019 11:55:49 +0200 Subject: [PATCH 102/304] MP-1661: Fixed page heading layout visibility --- assets/Zed/sass/_custom.scss | 7 ++++++- .../Partials/backward-compatible-breadcrumb.twig | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 51acd714..800dd30c 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -31,10 +31,15 @@ label.required { } .page-heading { - overflow: hidden; padding-bottom: 0; } +.page-breadcrumbs { + margin: 0 -25px; + padding: 0 25px; + overflow: hidden; +} + /* Login .. */ body.login { .login-spryker-logo { diff --git a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig index 24f2cba0..463a1d6f 100644 --- a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig +++ b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig @@ -9,5 +9,5 @@ }]) ), []) %} - + {% endif %} From 7599f2dbb5da5b728bd432f10f04409b05ff9590 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 17 Dec 2019 16:57:28 +0100 Subject: [PATCH 103/304] Fix meta files --- .editorconfig | 16 ++++++++++++++++ .travis.yml | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 .editorconfig create mode 100644 .travis.yml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..43fecdb3 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +; This file is for unifying the coding style for different editors and IDEs. +; More information at https://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.bat] +end_of_line = crlf + +[composer.json] +indent_size = 2 diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..192ee0e9 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,34 @@ +language: php + +php: + - 7.2 + - 7.4 + +matrix: + fast_finish: true + + include: + - php: 7.2 + env: PREFER_LOWEST=1 + +env: + global: + - APPLICATION_ENV=development + - APPLICATION_STORE=DE + +before_install: + - phpenv config-rm xdebug.ini + +install: + - COMPOSER_MEMORY_LIMIT=-1 composer install --prefer-dist --no-interaction + - if [[ $PREFER_LOWEST == 1 ]]; then COMPOSER_MEMORY_LIMIT=-1 composer update --prefer-dist --no-interaction --prefer-lowest --prefer-stable ; fi + +script: + - find ./src -path src -prune -o -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" ) + +cache: + directories: + - $HOME/.composer/cache/ + +notifications: + email: false From a60ff6454bc44a9ba7d1cd24daae647f4534e520 Mon Sep 17 00:00:00 2001 From: mscherer Date: Wed, 18 Dec 2019 17:44:24 +0100 Subject: [PATCH 104/304] Fix missing cs commands. --- composer.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/composer.json b/composer.json index 68616870..2bd72be2 100644 --- a/composer.json +++ b/composer.json @@ -38,6 +38,10 @@ }, "minimum-stability": "dev", "prefer-stable": true, + "scripts": { + "cs-check": "phpcs -p -s --standard=vendor/spryker/code-sniffer/Spryker/ruleset.xml src/ tests/", + "cs-fix": "phpcbf -p --standard=vendor/spryker/code-sniffer/Spryker/ruleset.xml src/ tests/" + }, "extra": { "branch-alias": { "dev-master": "3.0.x-dev" From dd8c37f98819b678620c7f49eed50ee1adb006e8 Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 19 Dec 2019 12:40:39 +0100 Subject: [PATCH 105/304] Fix require dev dependencies. --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index 2bd72be2..9f8a23f0 100644 --- a/composer.json +++ b/composer.json @@ -16,6 +16,7 @@ }, "require-dev": { "spryker/application": "*", + "spryker/code-sniffer": "*", "spryker/container": "*", "spryker/propel": "*", "spryker/silex": "*", From d59d28f4a2b6f170332366bd79d0be5c58bbe5bd Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 19 Dec 2019 14:39:07 +0100 Subject: [PATCH 106/304] Sync meta files. --- .gitattributes | 8 +++++--- .gitignore | 41 +++++++++++++++++++++++++++++------------ .travis.yml | 5 ++++- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/.gitattributes b/.gitattributes index 83517436..190377b3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,6 @@ +# Define the line ending behavior of the different file extensions # Set the default behavior, in case people don't have core.autocrlf set. -* eol=lf -* text=auto +* text text=auto eol=lf # Denote all files that are truly binary and should not be modified. *.png binary @@ -23,9 +23,11 @@ # Remove files for archives generated using `git archive` codeception.yml export-ignore dependency.json export-ignore +phpstan.json export-ignore +phpstan.neon export-ignore +tooling.yml export-ignore .coveralls.yml export-ignore .travis.yml export-ignore .editorconfig export-ignore .gitattributes export-ignore .gitignore export-ignore -tooling.yml export-ignore diff --git a/.gitignore b/.gitignore index 0d27ebd1..58b3e11f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,36 @@ -# IDEs -/.idea -/.project -/nbproject -/.buildpath -/.settings +# IDE +.idea/ +.project/ +nbproject/ +.buildpath/ +.settings/ *.sublime-* + +# OS +.DS_Store *.AppleDouble *.AppleDB *.AppleDesktop -# OS -.DS_Store +# grunt stuff +.grunt +.sass-cache +/node_modules/ + +# tooling +vendor/ +composer.lock +.phpunit.result.cache + +# built client resources +src/*/Zed/*/Static/Public +src/*/Zed/*/Static/Assets/sprite -/vendor -/composer.lock +# Propel classes +src/*/Zed/*/Persistence/Propel/Base/* +src/*/Zed/*/Persistence/Propel/Map/* -/tests/_output/* -!/tests/_output/.gitkeep +# tests +tests/**/_generated/ +tests/_output/* +!tests/_output/.gitkeep diff --git a/.travis.yml b/.travis.yml index 192ee0e9..184b3e68 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,11 +21,14 @@ before_install: install: - COMPOSER_MEMORY_LIMIT=-1 composer install --prefer-dist --no-interaction - - if [[ $PREFER_LOWEST == 1 ]]; then COMPOSER_MEMORY_LIMIT=-1 composer update --prefer-dist --no-interaction --prefer-lowest --prefer-stable ; fi + - if [[ $PREFER_LOWEST == 1 ]]; then COMPOSER_MEMORY_LIMIT=-1 composer update --prefer-lowest --prefer-stable --prefer-dist --no-interaction ; fi + - if [[ $PREFER_LOWEST == 1 ]]; then COMPOSER_MEMORY_LIMIT=-1 composer require --dev dereuromark/composer-prefer-lowest; fi script: - find ./src -path src -prune -o -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" ) + - if [[ $PREFER_LOWEST == 1 ]]; then vendor/bin/validate-prefer-lowest || true; fi + cache: directories: - $HOME/.composer/cache/ From 490ec7e3881c18ef4df6c2f271a09a3e77855790 Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 19 Dec 2019 17:07:25 +0100 Subject: [PATCH 107/304] Sync README files. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2ca872a8..5d75d0c6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # Gui Module +[![Build Status](https://travis-ci.org/spryker/gui.svg)](https://travis-ci.org/spryker/gui) +[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.2-8892BF.svg)](https://php.net/) Gui provides the main logic for GUI functionality across all modules. From 33ce03882df36be8cdee35e8418a1d555af7f08d Mon Sep 17 00:00:00 2001 From: AntonKhabiuk Date: Thu, 19 Dec 2019 18:57:16 +0200 Subject: [PATCH 108/304] CC-2106 Prepare a prototype of XSS sanitizer --- .../EventListener/SanitizeXssListener.php | 67 +++++++++++++++++ .../Extension/SanitizeXssTypeExtension.php | 71 +++++++++++++++++++ .../Communication/GuiCommunicationFactory.php | 18 +++++ .../SanitizeXssTypeExtensionFormPlugin.php | 38 ++++++++++ .../GuiToUtilSanitizeServiceBridge.php | 36 ++++++++++ .../GuiToUtilSanitizeServiceInterface.php | 20 ++++++ src/Spryker/Zed/Gui/GuiDependencyProvider.php | 20 ++++++ 7 files changed, 270 insertions(+) create mode 100644 src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php create mode 100644 src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php create mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Form/SanitizeXssTypeExtensionFormPlugin.php create mode 100644 src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceBridge.php create mode 100644 src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceInterface.php diff --git a/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php b/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php new file mode 100644 index 00000000..b2f187e2 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php @@ -0,0 +1,67 @@ +utilSanitizeService = $utilSanitizeService; + } + + /** + * @return array + */ + public static function getSubscribedEvents(): array + { + return [ + FormEvents::PRE_SUBMIT => ['sanitizeSubmittedData', 1000], + ]; + } + + /** + * @param \Symfony\Component\Form\FormEvent $event + * + * @return void + */ + public function sanitizeSubmittedData(FormEvent $event): void + { + $data = $event->getData(); + + if (!is_string($data)) { + return; + } + + $event->setData($this->utilSanitizeService->sanitizeXss( + $data, + static::ATTRIBUTES_WHITELIST, + static::HTML_TAGS_WHITELIST + )); + } +} diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php new file mode 100644 index 00000000..5418e4d8 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php @@ -0,0 +1,71 @@ +utilSanitizeService = $utilSanitizeService; + } + + /** + * @return iterable + */ + public function getExtendedTypes(): iterable + { + return [ + TextType::class, + TextareaType::class, + ]; + } + + /** + * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver + * + * @return void + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver + ->setDefined(static::OPTION_SANITIZE_XSS) + ->setDefault(static::OPTION_SANITIZE_XSS, false) + ->setAllowedTypes(static::OPTION_SANITIZE_XSS, 'bool'); + } + + /** + * @param \Symfony\Component\Form\FormBuilderInterface $builder + * @param array $options + * + * @return void + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + if ($options[static::OPTION_SANITIZE_XSS]) { + $builder->addEventSubscriber(new SanitizeXssListener($this->utilSanitizeService)); + } + } +} diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index 0cedf0e0..6bcfa03c 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -10,6 +10,8 @@ use Spryker\Shared\Twig\Loader\FilesystemLoader; use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; use Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension; +use Spryker\Zed\Gui\Communication\Form\Type\Extension\SanitizeXssTypeExtension; +use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface; use Spryker\Zed\Gui\GuiDependencyProvider; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; use Symfony\Component\Form\FormTypeExtensionInterface; @@ -42,4 +44,20 @@ public function createNoValidateFormTypeExtension(): FormTypeExtensionInterface { return new NoValidateTypeExtension(); } + + /** + * @return \Symfony\Component\Form\FormTypeExtensionInterface + */ + public function createSanitizeXssTypeExtension(): FormTypeExtensionInterface + { + return new SanitizeXssTypeExtension($this->getUtilSanitizeService()); + } + + /** + * @return \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface + */ + public function getUtilSanitizeService(): GuiToUtilSanitizeServiceInterface + { + return $this->getProvidedDependency(GuiDependencyProvider::SERVICE_UTIL_SANITIZE); + } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Form/SanitizeXssTypeExtensionFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/SanitizeXssTypeExtensionFormPlugin.php new file mode 100644 index 00000000..77d92008 --- /dev/null +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Form/SanitizeXssTypeExtensionFormPlugin.php @@ -0,0 +1,38 @@ +addTypeExtension($this->getFactory()->createSanitizeXssTypeExtension()); + + return $formFactoryBuilder; + } +} diff --git a/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceBridge.php b/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceBridge.php new file mode 100644 index 00000000..4061ba93 --- /dev/null +++ b/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceBridge.php @@ -0,0 +1,36 @@ +utilSanitizeService = $utilSanitizeService; + } + + /** + * @param string $text + * @param string[] $allowedAttributes + * @param string[] $allowedHtmlTags + * + * @return string + */ + public function sanitizeXss(string $text, array $allowedAttributes = [], array $allowedHtmlTags = []): string + { + return $this->utilSanitizeService->sanitizeXss($text, $allowedAttributes, $allowedHtmlTags); + } +} diff --git a/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceInterface.php b/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceInterface.php new file mode 100644 index 00000000..e49a6c90 --- /dev/null +++ b/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceInterface.php @@ -0,0 +1,20 @@ +addTwigFunctions($container); $container = $this->addTwigFilter($container); + $container = $this->addUtilSanitizeService($container); return $container; } @@ -112,4 +116,20 @@ protected function getTwigFilters() { return []; } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function addUtilSanitizeService(Container $container): Container + { + $container->set(static::SERVICE_UTIL_SANITIZE, function (Container $container) { + return new GuiToUtilSanitizeServiceBridge( + $container->getLocator()->utilSanitize()->service() + ); + }); + + return $container; + } } From e2e2a84fd70a6f2c757e8737f03f733c56395194 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Fri, 20 Dec 2019 13:47:20 +0200 Subject: [PATCH 109/304] PS-11763: Navigation. Not obvious that table rows are clickable. --- assets/Zed/sass/_custom.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 800dd30c..2f71d7c2 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -239,3 +239,8 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { } /* .. Tabs */ +.table-hover { + > tbody > tr:hover { + cursor: pointer; + } +} From b597302eadcb0bd9e93b2c7102a4d73cc1bdf22d Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Fri, 20 Dec 2019 14:13:01 +0200 Subject: [PATCH 110/304] PS-11763: Fix comments after CR --- assets/Zed/sass/_custom.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 2f71d7c2..dd1a7cde 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -240,7 +240,7 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { /* .. Tabs */ .table-hover { - > tbody > tr:hover { + tbody tr:hover { cursor: pointer; } } From e4cbc0ca1679e15525330c45eb8536693307721c Mon Sep 17 00:00:00 2001 From: AntonKhabiuk Date: Mon, 23 Dec 2019 19:00:48 +0200 Subject: [PATCH 111/304] CC-2106 Move xss sanitization to a dedicated module --- .../EventListener/SanitizeXssListener.php | 22 ++++++---------- .../Extension/SanitizeXssTypeExtension.php | 25 ++++++++++++++----- .../Communication/GuiCommunicationFactory.php | 10 +++++--- ... => GuiToUtilSanitizeXssServiceBridge.php} | 14 +++++------ ... GuiToUtilSanitizeXssServiceInterface.php} | 4 +-- src/Spryker/Zed/Gui/GuiDependencyProvider.php | 18 ++++++------- 6 files changed, 51 insertions(+), 42 deletions(-) rename src/Spryker/Zed/Gui/Dependency/Service/{GuiToUtilSanitizeServiceBridge.php => GuiToUtilSanitizeXssServiceBridge.php} (51%) rename src/Spryker/Zed/Gui/Dependency/Service/{GuiToUtilSanitizeServiceInterface.php => GuiToUtilSanitizeXssServiceInterface.php} (84%) diff --git a/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php b/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php index b2f187e2..59d5fdc2 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php +++ b/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php @@ -7,30 +7,23 @@ namespace Spryker\Zed\Gui\Communication\Form\EventListener; -use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface; +use Spryker\Zed\Gui\Communication\Form\Type\Extension\SanitizeXssTypeExtension; +use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; class SanitizeXssListener implements EventSubscriberInterface { - protected const ATTRIBUTES_WHITELIST = [ - 'style', - ]; - - protected const HTML_TAGS_WHITELIST = [ - 'iframe', - ]; - /** - * @var \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface + * @var \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface */ protected $utilSanitizeService; /** - * @param \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface $utilSanitizeService + * @param \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface $utilSanitizeService */ - public function __construct(GuiToUtilSanitizeServiceInterface $utilSanitizeService) + public function __construct(GuiToUtilSanitizeXssServiceInterface $utilSanitizeService) { $this->utilSanitizeService = $utilSanitizeService; } @@ -58,10 +51,11 @@ public function sanitizeSubmittedData(FormEvent $event): void return; } + $formConfig = $event->getForm()->getConfig(); $event->setData($this->utilSanitizeService->sanitizeXss( $data, - static::ATTRIBUTES_WHITELIST, - static::HTML_TAGS_WHITELIST + $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_ATTRIBUTES, []), + $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_HTML_TAGS, []) )); } } diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php index 5418e4d8..a08f4e7e 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php @@ -9,6 +9,7 @@ use Spryker\Zed\Gui\Communication\Form\EventListener\SanitizeXssListener; use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface; +use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\TextType; @@ -18,16 +19,18 @@ class SanitizeXssTypeExtension extends AbstractTypeExtension { public const OPTION_SANITIZE_XSS = 'sanitize_xss'; + public const OPTION_ALLOWED_ATTRIBUTES = 'allowed_attributes'; + public const OPTION_ALLOWED_HTML_TAGS = 'allowed_html_tags'; /** - * @var \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface + * @var \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface */ protected $utilSanitizeService; /** - * @param \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface $utilSanitizeService + * @param \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface $utilSanitizeService */ - public function __construct(GuiToUtilSanitizeServiceInterface $utilSanitizeService) + public function __construct(GuiToUtilSanitizeXssServiceInterface $utilSanitizeService) { $this->utilSanitizeService = $utilSanitizeService; } @@ -51,9 +54,19 @@ public function getExtendedTypes(): iterable public function configureOptions(OptionsResolver $resolver): void { $resolver - ->setDefined(static::OPTION_SANITIZE_XSS) - ->setDefault(static::OPTION_SANITIZE_XSS, false) - ->setAllowedTypes(static::OPTION_SANITIZE_XSS, 'bool'); + ->setDefined([ + static::OPTION_SANITIZE_XSS, + static::OPTION_ALLOWED_ATTRIBUTES, + static::OPTION_ALLOWED_HTML_TAGS, + ]) + ->setDefaults([ + static::OPTION_SANITIZE_XSS => false, + static::OPTION_ALLOWED_ATTRIBUTES => [], + static::OPTION_ALLOWED_HTML_TAGS => [], + ]) + ->setAllowedTypes(static::OPTION_SANITIZE_XSS, 'bool') + ->setAllowedTypes(static::OPTION_ALLOWED_ATTRIBUTES, 'array') + ->setAllowedTypes(static::OPTION_ALLOWED_HTML_TAGS, 'array'); } /** diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index 6bcfa03c..ce92726f 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -12,6 +12,7 @@ use Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension; use Spryker\Zed\Gui\Communication\Form\Type\Extension\SanitizeXssTypeExtension; use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface; +use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface; use Spryker\Zed\Gui\GuiDependencyProvider; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; use Symfony\Component\Form\FormTypeExtensionInterface; @@ -50,14 +51,15 @@ public function createNoValidateFormTypeExtension(): FormTypeExtensionInterface */ public function createSanitizeXssTypeExtension(): FormTypeExtensionInterface { - return new SanitizeXssTypeExtension($this->getUtilSanitizeService()); + return new SanitizeXssTypeExtension($this->getUtilSanitizeXssService()); } /** - * @return \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface + * @return \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface + * @throws \Spryker\Zed\Kernel\Exception\Container\ContainerKeyNotFoundException */ - public function getUtilSanitizeService(): GuiToUtilSanitizeServiceInterface + public function getUtilSanitizeXssService(): GuiToUtilSanitizeXssServiceInterface { - return $this->getProvidedDependency(GuiDependencyProvider::SERVICE_UTIL_SANITIZE); + return $this->getProvidedDependency(GuiDependencyProvider::SERVICE_UTIL_SANITIZE_XSS); } } diff --git a/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceBridge.php b/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeXssServiceBridge.php similarity index 51% rename from src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceBridge.php rename to src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeXssServiceBridge.php index 4061ba93..31af224c 100644 --- a/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceBridge.php +++ b/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeXssServiceBridge.php @@ -7,19 +7,19 @@ namespace Spryker\Zed\Gui\Dependency\Service; -class GuiToUtilSanitizeServiceBridge implements GuiToUtilSanitizeServiceInterface +class GuiToUtilSanitizeXssServiceBridge implements GuiToUtilSanitizeXssServiceInterface { /** - * @var \Spryker\Service\UtilSanitize\UtilSanitizeServiceInterface + * @var \Spryker\Service\UtilSanitizeXss\UtilSanitizeXssServiceInterface */ - protected $utilSanitizeService; + protected $utilSanitizeXssService; /** - * @param \Spryker\Service\UtilSanitize\UtilSanitizeServiceInterface $utilSanitizeService + * @param \Spryker\Service\UtilSanitizeXss\UtilSanitizeXssServiceInterface $utilSanitizeXssService */ - public function __construct($utilSanitizeService) + public function __construct($utilSanitizeXssService) { - $this->utilSanitizeService = $utilSanitizeService; + $this->utilSanitizeXssService = $utilSanitizeXssService; } /** @@ -31,6 +31,6 @@ public function __construct($utilSanitizeService) */ public function sanitizeXss(string $text, array $allowedAttributes = [], array $allowedHtmlTags = []): string { - return $this->utilSanitizeService->sanitizeXss($text, $allowedAttributes, $allowedHtmlTags); + return $this->utilSanitizeXssService->sanitizeXss($text, $allowedAttributes, $allowedHtmlTags); } } diff --git a/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceInterface.php b/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeXssServiceInterface.php similarity index 84% rename from src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceInterface.php rename to src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeXssServiceInterface.php index e49a6c90..496750b9 100644 --- a/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeServiceInterface.php +++ b/src/Spryker/Zed/Gui/Dependency/Service/GuiToUtilSanitizeXssServiceInterface.php @@ -7,12 +7,12 @@ namespace Spryker\Zed\Gui\Dependency\Service; -interface GuiToUtilSanitizeServiceInterface +interface GuiToUtilSanitizeXssServiceInterface { /** * @param string $text * @param string[] $allowedAttributes - * @param array $allowedHtmlTags + * @param string[] $allowedHtmlTags * * @return string */ diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index cc89cca6..5dd34f51 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -24,15 +24,16 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\UrlDecodeFunction; use Spryker\Zed\Gui\Communication\Plugin\Twig\UrlFunction; use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceBridge; +use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceBridge; use Spryker\Zed\Kernel\AbstractBundleDependencyProvider; use Spryker\Zed\Kernel\Container; /** - * @method \Spryker\Zed\Gui\GuiConfig getConfig() + * @method GuiConfig getConfig() */ class GuiDependencyProvider extends AbstractBundleDependencyProvider { - public const SERVICE_UTIL_SANITIZE = 'SERVICE_UTIL_SANITIZE'; + public const SERVICE_UTIL_SANITIZE_XSS = 'SERVICE_UTIL_SANITIZE_XSS'; public const GUI_TWIG_FUNCTIONS = 'gui_twig_functions'; public const GUI_TWIG_FILTERS = 'gui_twig_filters'; @@ -46,7 +47,7 @@ public function provideCommunicationLayerDependencies(Container $container) { $container = $this->addTwigFunctions($container); $container = $this->addTwigFilter($container); - $container = $this->addUtilSanitizeService($container); + $container = $this->addUtilSanitizeXssService($container); return $container; } @@ -116,19 +117,18 @@ protected function getTwigFilters() { return []; } - /** * @param \Spryker\Zed\Kernel\Container $container * * @return \Spryker\Zed\Kernel\Container */ - protected function addUtilSanitizeService(Container $container): Container + protected function addUtilSanitizeXssService(Container $container): Container { - $container->set(static::SERVICE_UTIL_SANITIZE, function (Container $container) { - return new GuiToUtilSanitizeServiceBridge( - $container->getLocator()->utilSanitize()->service() + $container[static::SERVICE_UTIL_SANITIZE_XSS] = function (Container $container) { + return new GuiToUtilSanitizeXssServiceBridge( + $container->getLocator()->utilSanitizeXss()->service() ); - }); + }; return $container; } From f66483a8aa8873d2e3cb9c49a093be91af108a2e Mon Sep 17 00:00:00 2001 From: AntonKhabiuk Date: Tue, 24 Dec 2019 11:30:07 +0200 Subject: [PATCH 112/304] CC-2106 Add tests for service and cleanups --- composer.json | 1 + .../Form/EventListener/SanitizeXssListener.php | 6 ++++++ .../Form/Type/Extension/SanitizeXssTypeExtension.php | 1 - .../Zed/Gui/Communication/GuiCommunicationFactory.php | 2 -- src/Spryker/Zed/Gui/GuiDependencyProvider.php | 4 ++-- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index 68616870..85e761c3 100644 --- a/composer.json +++ b/composer.json @@ -12,6 +12,7 @@ "spryker/twig": "^3.0.0", "spryker/twig-extension": "^1.0.0", "spryker/util-sanitize": "^2.0.0", + "spryker/util-sanitize-xss": "^1.0.0", "spryker/util-text": "^1.1.0" }, "require-dev": { diff --git a/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php b/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php index 59d5fdc2..da22029e 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php +++ b/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php @@ -52,6 +52,12 @@ public function sanitizeSubmittedData(FormEvent $event): void } $formConfig = $event->getForm()->getConfig(); + $data = $this->utilSanitizeService->sanitizeXss( + $data, + $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_ATTRIBUTES, []), + $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_HTML_TAGS, []) + ); + $event->setData($this->utilSanitizeService->sanitizeXss( $data, $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_ATTRIBUTES, []), diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php index a08f4e7e..e4403cdd 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php @@ -8,7 +8,6 @@ namespace Spryker\Zed\Gui\Communication\Form\Type\Extension; use Spryker\Zed\Gui\Communication\Form\EventListener\SanitizeXssListener; -use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface; use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\Extension\Core\Type\TextareaType; diff --git a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php index ce92726f..5f409344 100644 --- a/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php +++ b/src/Spryker/Zed/Gui/Communication/GuiCommunicationFactory.php @@ -11,7 +11,6 @@ use Spryker\Shared\Twig\Loader\FilesystemLoaderInterface; use Spryker\Zed\Gui\Communication\Form\Type\Extension\NoValidateTypeExtension; use Spryker\Zed\Gui\Communication\Form\Type\Extension\SanitizeXssTypeExtension; -use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceInterface; use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface; use Spryker\Zed\Gui\GuiDependencyProvider; use Spryker\Zed\Kernel\Communication\AbstractCommunicationFactory; @@ -56,7 +55,6 @@ public function createSanitizeXssTypeExtension(): FormTypeExtensionInterface /** * @return \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface - * @throws \Spryker\Zed\Kernel\Exception\Container\ContainerKeyNotFoundException */ public function getUtilSanitizeXssService(): GuiToUtilSanitizeXssServiceInterface { diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index 5dd34f51..0f55f6aa 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -23,13 +23,12 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\TabsFunction; use Spryker\Zed\Gui\Communication\Plugin\Twig\UrlDecodeFunction; use Spryker\Zed\Gui\Communication\Plugin\Twig\UrlFunction; -use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeServiceBridge; use Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceBridge; use Spryker\Zed\Kernel\AbstractBundleDependencyProvider; use Spryker\Zed\Kernel\Container; /** - * @method GuiConfig getConfig() + * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ class GuiDependencyProvider extends AbstractBundleDependencyProvider { @@ -117,6 +116,7 @@ protected function getTwigFilters() { return []; } + /** * @param \Spryker\Zed\Kernel\Container $container * From 60f6e619c4b05032a98cbbb6aa129d3222f9711c Mon Sep 17 00:00:00 2001 From: AntonKhabiuk Date: Tue, 24 Dec 2019 12:30:07 +0200 Subject: [PATCH 113/304] CC-2106 Adjust dependency providing --- src/Spryker/Zed/Gui/GuiDependencyProvider.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index 0f55f6aa..87755b95 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -124,11 +124,11 @@ protected function getTwigFilters() */ protected function addUtilSanitizeXssService(Container $container): Container { - $container[static::SERVICE_UTIL_SANITIZE_XSS] = function (Container $container) { + $container->set(static::SERVICE_UTIL_SANITIZE_XSS, function (Container $container) { return new GuiToUtilSanitizeXssServiceBridge( $container->getLocator()->utilSanitizeXss()->service() ); - }; + }); return $container; } From 48c018268a7cb07b1b921357a3f85782b28246a3 Mon Sep 17 00:00:00 2001 From: AntonKhabiuk Date: Tue, 24 Dec 2019 17:02:15 +0200 Subject: [PATCH 114/304] CC-2106 Code cleanups --- .../Form/EventListener/SanitizeXssListener.php | 8 ++++---- .../Form/Type/Extension/SanitizeXssTypeExtension.php | 6 +++--- src/Spryker/Zed/Gui/GuiDependencyProvider.php | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php b/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php index da22029e..391b5bd8 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php +++ b/src/Spryker/Zed/Gui/Communication/Form/EventListener/SanitizeXssListener.php @@ -18,14 +18,14 @@ class SanitizeXssListener implements EventSubscriberInterface /** * @var \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface */ - protected $utilSanitizeService; + protected $utilSanitizeXssService; /** * @param \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface $utilSanitizeService */ public function __construct(GuiToUtilSanitizeXssServiceInterface $utilSanitizeService) { - $this->utilSanitizeService = $utilSanitizeService; + $this->utilSanitizeXssService = $utilSanitizeService; } /** @@ -52,13 +52,13 @@ public function sanitizeSubmittedData(FormEvent $event): void } $formConfig = $event->getForm()->getConfig(); - $data = $this->utilSanitizeService->sanitizeXss( + $data = $this->utilSanitizeXssService->sanitizeXss( $data, $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_ATTRIBUTES, []), $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_HTML_TAGS, []) ); - $event->setData($this->utilSanitizeService->sanitizeXss( + $event->setData($this->utilSanitizeXssService->sanitizeXss( $data, $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_ATTRIBUTES, []), $formConfig->getOption(SanitizeXssTypeExtension::OPTION_ALLOWED_HTML_TAGS, []) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php index e4403cdd..b5729c2d 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php @@ -24,14 +24,14 @@ class SanitizeXssTypeExtension extends AbstractTypeExtension /** * @var \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface */ - protected $utilSanitizeService; + protected $utilSanitizeXssService; /** * @param \Spryker\Zed\Gui\Dependency\Service\GuiToUtilSanitizeXssServiceInterface $utilSanitizeService */ public function __construct(GuiToUtilSanitizeXssServiceInterface $utilSanitizeService) { - $this->utilSanitizeService = $utilSanitizeService; + $this->utilSanitizeXssService = $utilSanitizeService; } /** @@ -77,7 +77,7 @@ public function configureOptions(OptionsResolver $resolver): void public function buildForm(FormBuilderInterface $builder, array $options): void { if ($options[static::OPTION_SANITIZE_XSS]) { - $builder->addEventSubscriber(new SanitizeXssListener($this->utilSanitizeService)); + $builder->addEventSubscriber(new SanitizeXssListener($this->utilSanitizeXssService)); } } } diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index 87755b95..94762252 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -44,6 +44,7 @@ class GuiDependencyProvider extends AbstractBundleDependencyProvider */ public function provideCommunicationLayerDependencies(Container $container) { + $container = parent::provideCommunicationLayerDependencies($container); $container = $this->addTwigFunctions($container); $container = $this->addTwigFilter($container); $container = $this->addUtilSanitizeXssService($container); From 57a864257e20f8cea99028983d99e7c0bb6c2709 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Mon, 6 Jan 2020 11:15:59 +0200 Subject: [PATCH 115/304] CC-7675: Module not found error trying to build Zed FE --- assets/Zed/js/modules/init.js | 12 +++ assets/Zed/sass/_custom.scss | 184 ++++++++++++++++++---------------- 2 files changed, 110 insertions(+), 86 deletions(-) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index 3b9b54e8..ceb6cd83 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -141,6 +141,18 @@ $(document).ready(function() { selectElement.select2(select2InitOptions); }); + $('.more-history').click(function(e){ + e.preventDefault(); + var idProductItem = $(this).data('id'); + var $history = $('#history_details_' + idProductItem); + var $button = $('#history-btn-' + idProductItem); + var isHidden = $history.hasClass('hidden'); + + $history.toggleClass('hidden', !isHidden); + $button.toggleClass('is-hidden', !isHidden); + $button.toggleClass('is-shown', isHidden); + }); + /* Init tabs */ $('.tabs-container').each(function(index, item){ new Tabs(item, dataTable.onTabChange); diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 800dd30c..92486e7f 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -21,9 +21,9 @@ } label.required { - &::after { - content: ' *'; - } + &::after { + content: ' *'; + } } .title-action { @@ -69,84 +69,85 @@ body.login { } } - .forgot { - text-align: center; - font-size: 80%; + .forgot { + text-align: center; + font-size: 80%; - a:hover { - color: #eee; - } - } + a:hover { + color: #eee; + } + } } .svg-commerce { - background-image: $zed-logo; - background-position: 100% 0; + background-image: $zed-logo; + background-position: 100% 0; } .svg-commerce-size { - width: 142px; - height: 11px; + width: 142px; + height: 11px; } .svg-mail { - background-image: $zed-logo; - background-position: 56.74740484429066% 7.746478873239437%; + background-image: $zed-logo; + background-position: 56.74740484429066% 7.746478873239437%; } .svg-mail-size { - width: 17px; - height: 14px; + width: 17px; + height: 14px; } .svg-padlock { - background-image: $zed-logo; - background-position: 56.3573883161512% 17.985611510791365%; + background-image: $zed-logo; + background-position: 56.3573883161512% 17.985611510791365%; } .svg-padlock-size { - width: 15px; - height: 17px; + width: 15px; + height: 17px; } .svg-spryker { - background-image: $zed-logo; - background-position: 0 0; + background-image: $zed-logo; + background-position: 0 0; } .svg-spryker-size { - width: 164px; - height: 156px; + width: 164px; + height: 156px; } .product-title { - position: relative; - padding: 10px 20px 0; + position: relative; + padding: 10px 20px 0; } .product-view { - .product-desc { - padding-top: 0; - .product-image { - width: 150px; - height: 150px; - background: #ccc; - text-align: center; - vertical-align: middle; - line-height: 145px; /* @todo remove when real image is added */ - } - } + .product-desc { + padding-top: 0; + .product-image { + width: 150px; + height: 150px; + background: #ccc; + text-align: center; + vertical-align: middle; + line-height: 145px; /* @todo remove when real image is added */ + } + } } + .element-inline { - display: inline; + display: inline; } .show-scroll { - overflow: scroll !important; + overflow: scroll !important; } .table.nowrap, .nowrap { - white-space: nowrap; + white-space: nowrap; } .note-editor { @@ -159,7 +160,7 @@ body.login { .note-editor *, .note-editor *:before { - color: #444 !important; + color: #444 !important; } /* Zed Navigation .. */ @@ -171,71 +172,82 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { display: none; } } + /* .. Zed Navigation */ .form-inline { - display: inline; + display: inline; } /* Nested panels... */ .ibox.nested { - margin-bottom: 5px; + margin-bottom: 5px; - .ibox-title { - background-color: #f5f5f5; - border: 1px solid #ddd; + .ibox-title { + background-color: #f5f5f5; + border: 1px solid #ddd; - .collapse-link { - color: inherit; + .collapse-link { + color: inherit; + } } - } - .ibox-content { - border: 1px solid #ddd; - } + .ibox-content { + border: 1px solid #ddd; + } } .ibox.error { - .ibox-title { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; - } - .ibox-content { - border-color: #ebccd1; - } - /* Expand panels that contain errors in case they are collapsed */ - &.collapsed { - > .ibox-content { - display: block; - } - } + .ibox-title { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; + } + .ibox-content { + border-color: #ebccd1; + } + /* Expand panels that contain errors in case they are collapsed */ + &.collapsed { + > .ibox-content { + display: block; + } + } } + /* .. Nested panels */ /* Tabs .. */ .tabs-container { - margin-bottom: 20px; - .nav-tabs { - li.error { - a { - color: #a94442 !important; - } - } - li.error:not(.active) { - a { - border-color: #ebccd1; - background-color: #f2dede; - } + margin-bottom: 20px; + .nav-tabs { + li.error { + a { + color: #a94442 !important; + } + } + li.error:not(.active) { + a { + border-color: #ebccd1; + background-color: #f2dede; + } + } } - } } + .tabs-footer { - color: inherit; - border: 1px solid #e7eaec; - border-top: none; - background: #ffffff; - padding: 10px 15px; + color: inherit; + border: 1px solid #e7eaec; + border-top: none; + background: #ffffff; + padding: 10px 15px; } /* .. Tabs */ +.is-hidden .show-less, +.is-shown .show-more { + display: none; +} + +.more-history { + color: #337ab7; +} From 61333e1b5cb21f9256df7560b97208b96295a5f3 Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 9 Jan 2020 14:57:16 +0100 Subject: [PATCH 116/304] Remove actor config. --- codeception.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/codeception.yml b/codeception.yml index 6fcb0bb6..a9e9a0fb 100644 --- a/codeception.yml +++ b/codeception.yml @@ -1,6 +1,4 @@ namespace: Gui -actor: Tester - include: - tests/SprykerTest/Zed/Gui From 42d3c1c7a499ffcd796e42c8ffa12d7486c47b2a Mon Sep 17 00:00:00 2001 From: mscherer Date: Wed, 15 Jan 2020 16:36:06 +0100 Subject: [PATCH 117/304] Remove coverage from root files --- codeception.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/codeception.yml b/codeception.yml index a9e9a0fb..cc36ed70 100644 --- a/codeception.yml +++ b/codeception.yml @@ -14,10 +14,6 @@ settings: colors: true memory_limit: 1024M log: true -coverage: - enabled: true - whitelist: { include: ['src/*'] } - extensions: enabled: - Codeception\Extension\Phantoman From 69eff4fea2f396b9f41db23966649abc7684bcc2 Mon Sep 17 00:00:00 2001 From: Borys Furtuna Date: Thu, 27 Feb 2020 11:48:10 +0000 Subject: [PATCH 118/304] TE-4497: abstract products availability query optimization --- .../Zed/Gui/Communication/Table/AbstractTable.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 4a60522d..4b1c6f16 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -663,7 +663,7 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $orderColumn = $this->getOrderByColumn($query, $config, $order); - $this->total = $query->count(); + $this->total = $this->countTotal($query); $query->orderBy($orderColumn, $order[0][self::SORT_BY_DIRECTION]); $searchTerm = $this->getSearchTerm(); $searchValue = $searchTerm[static::PARAMETER_VALUE] ?? ''; @@ -716,6 +716,16 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r return $data->toArray(null, false, TableMap::TYPE_COLNAME); } + /** + * @param \Propel\Runtime\ActiveQuery\ModelCriteria $query + * + * @return int + */ + protected function countTotal(ModelCriteria $query): int + { + return $query->count(); + } + /** * @param \Propel\Runtime\ActiveQuery\ModelCriteria $query * @param \Spryker\Zed\Gui\Communication\Table\TableConfiguration $config From 13527e459269ce7ff3ee8d054898a7bf53a5b2a5 Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 5 Mar 2020 15:28:25 +0100 Subject: [PATCH 119/304] Fix api docblocks. --- src/Spryker/Zed/Gui/GuiConfig.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php index 469522b1..9bc350f5 100644 --- a/src/Spryker/Zed/Gui/GuiConfig.php +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -31,6 +31,8 @@ class GuiConfig extends AbstractBundleConfig protected const LIST_GROUP_MULTI_DEFAULT_TEMPLATE_PATH = '@Gui/ListGroup/list-group-multidimensional.twig'; /** + * @api + * * @return string */ public function getFormResourcesPath(): string @@ -39,6 +41,8 @@ public function getFormResourcesPath(): string } /** + * @api + * * @return string[] */ public function getTemplatePaths(): array @@ -49,6 +53,8 @@ public function getTemplatePaths(): array } /** + * @api + * * @return string[] */ public function getDefaultTemplateFileNames(): array @@ -57,6 +63,8 @@ public function getDefaultTemplateFileNames(): array } /** + * @api + * * @return string */ public function getZedAssetsPath(): string @@ -65,6 +73,8 @@ public function getZedAssetsPath(): string } /** + * @api + * * @return string */ public function getTabsDefaultTemplatePath(): string @@ -73,6 +83,8 @@ public function getTabsDefaultTemplatePath(): string } /** + * @api + * * @return string */ public function getSubmitButtonDefaultTemplatePath(): string @@ -81,6 +93,8 @@ public function getSubmitButtonDefaultTemplatePath(): string } /** + * @api + * * @return string */ public function getDefaultModalTemplatePath(): string @@ -89,6 +103,8 @@ public function getDefaultModalTemplatePath(): string } /** + * @api + * * @return string */ public function getDefaultPanelTemplatePath(): string @@ -97,6 +113,8 @@ public function getDefaultPanelTemplatePath(): string } /** + * @api + * * @return string */ public function getDefaultListGroupTemplatePath(): string @@ -105,6 +123,8 @@ public function getDefaultListGroupTemplatePath(): string } /** + * @api + * * @return string */ public function getDefaultMultiListGroupTemplatePath(): string From 69c2ceeefecdf0a48693edb67013808da45881ba Mon Sep 17 00:00:00 2001 From: mscherer Date: Fri, 6 Mar 2020 16:16:59 +0100 Subject: [PATCH 120/304] TE-5270 Fix api docblocks. --- .../Plugin/ConstraintsPlugin.php | 94 +++++++++++++++++++ .../SanitizeXssTypeExtensionFormPlugin.php | 1 + 2 files changed, 95 insertions(+) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php index 45f55fa3..0896c896 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ConstraintsPlugin.php @@ -65,6 +65,8 @@ class ConstraintsPlugin extends AbstractPlugin public const MAXIMUM_LENGTH_CONSTRAINT = 255; /** + * {@inheritDoc} + * * @api * * @return array @@ -79,6 +81,8 @@ public function getMandatoryConstraints() } /** + * {@inheritDoc} + * * @api * * @return array @@ -92,6 +96,8 @@ public function getRequiredConstraints() } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -104,6 +110,8 @@ public function createConstraintNotBlank($options = null) } /** + * {@inheritDoc} + * * @api * * @return \Symfony\Component\Validator\Constraints\Blank @@ -114,6 +122,8 @@ public function createConstraintBlank() } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -126,6 +136,8 @@ public function createConstraintNotNull($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -138,6 +150,8 @@ public function createConstraintNull($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -150,6 +164,8 @@ public function createConstraintTrue($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -162,6 +178,8 @@ public function createConstraintFalse($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -174,6 +192,8 @@ public function createConstraintType($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -186,6 +206,8 @@ public function createConstraintEmail($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -198,6 +220,8 @@ public function createConstraintLength($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -210,6 +234,8 @@ public function createConstraintUrl($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -222,6 +248,8 @@ public function createConstraintRegex($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -234,6 +262,8 @@ public function createConstraintIp($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -246,6 +276,8 @@ public function createConstraintUuid($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -258,6 +290,8 @@ public function createConstraintRange($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -270,6 +304,8 @@ public function createConstraintEqualTo($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -282,6 +318,8 @@ public function createConstraintNotEqualTo($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -294,6 +332,8 @@ public function createConstraintIdenticalTo($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -306,6 +346,8 @@ public function createConstraintNotIdenticalTo($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -318,6 +360,8 @@ public function createConstraintLessThan($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -330,6 +374,8 @@ public function createConstraintLessThanOrEqual($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -342,6 +388,8 @@ public function createConstraintGreaterThan($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -354,6 +402,8 @@ public function createConstraintGreaterThanOrEqual($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -366,6 +416,8 @@ public function createConstraintDate($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -378,6 +430,8 @@ public function createConstraintDateTime($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -390,6 +444,8 @@ public function createConstraintTime($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -402,6 +458,8 @@ public function createConstraintChoice($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -414,6 +472,8 @@ public function createConstraintCollection($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -426,6 +486,8 @@ public function createConstraintCount($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -438,6 +500,8 @@ public function createConstraintLanguage($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -450,6 +514,8 @@ public function createConstraintLocale($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -462,6 +528,8 @@ public function createConstraintCountry($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -474,6 +542,8 @@ public function createConstraintFile($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -486,6 +556,8 @@ public function createConstraintImage($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -498,6 +570,8 @@ public function createConstraintCardScheme($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -510,6 +584,8 @@ public function createConstraintCurrency($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -522,6 +598,8 @@ public function createConstraintLuhn($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -534,6 +612,8 @@ public function createConstraintIban($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -546,6 +626,8 @@ public function createConstraintIsbn($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -558,6 +640,8 @@ public function createConstraintIssn($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -570,6 +654,8 @@ public function createConstraintCallback($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -582,6 +668,8 @@ public function createConstraintExpression($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -594,6 +682,8 @@ public function createConstraintAll($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -606,6 +696,8 @@ public function createConstraintUserPassword($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options @@ -618,6 +710,8 @@ public function createConstraintValid($options = null) } /** + * {@inheritDoc} + * * @api * * @param mixed $options diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Form/SanitizeXssTypeExtensionFormPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Form/SanitizeXssTypeExtensionFormPlugin.php index 77d92008..6837ceaf 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Form/SanitizeXssTypeExtensionFormPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Form/SanitizeXssTypeExtensionFormPlugin.php @@ -19,6 +19,7 @@ class SanitizeXssTypeExtensionFormPlugin extends AbstractPlugin implements FormPluginInterface { /** + * {@inheritDoc} * Specification: * - Adds `Spryker\Zed\Gui\Communication\Form\Type\Extension\SanitizeXssTypeExtension`. * From 9979aded7aa113db3f3ebb6fdeaae81e43ea38d0 Mon Sep 17 00:00:00 2001 From: Fedets Maxim Date: Tue, 10 Mar 2020 18:17:06 +0200 Subject: [PATCH 121/304] MR-502: Added spacing under the `Add new user` button --- assets/Zed/sass/_custom.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 59a0e532..2a79897a 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -257,3 +257,7 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { .more-history { color: #337ab7; } + +.spacing-bottom { + margin-bottom: 1em; +} From 2f2bda91c18809440440bb7cf0e711f465cc7cb2 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 3 Apr 2020 15:38:37 +0000 Subject: [PATCH 122/304] chore(git): remove *.ts files from binary list --- .gitattributes | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 190377b3..2a48adb9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -17,7 +17,6 @@ *.mo binary *.pdf binary *.xsd binary -*.ts binary *.exe binary # Remove files for archives generated using `git archive` From ba9ac9d0a729e685513a4cf38309ba84306c9267 Mon Sep 17 00:00:00 2001 From: mscherer Date: Mon, 20 Apr 2020 18:48:47 +0200 Subject: [PATCH 123/304] Prefer simple quotes where possible. --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 4b1c6f16..25aa5151 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -1142,7 +1142,7 @@ protected function addQueryCondition(ModelCriteria $query, array $searchColumns, if (preg_match('/created_at|updated_at/', $searchColumns[$column->getData()])) { $query->where( sprintf( - "(%s >= %s AND %s <= %s)", + '(%s >= %s AND %s <= %s)', $searchColumns[$column->getData()], Propel::getConnection()->quote($this->filterSearchValue($search[self::PARAMETER_VALUE]) . ' 00:00:00'), $searchColumns[$column->getData()], @@ -1159,7 +1159,7 @@ protected function addQueryCondition(ModelCriteria $query, array $searchColumns, } $query->where(sprintf( - "%s = %s", + '%s = %s', $searchColumns[$column->getData()], Propel::getConnection()->quote($value) )); From 2925e660c1fed6705ae78c8fa71ab82ad8e260dd Mon Sep 17 00:00:00 2001 From: "k.kravchenko" Date: Thu, 30 Apr 2020 17:57:06 +0300 Subject: [PATCH 124/304] CC-9139: Fixing tabs javascript logic --- assets/Zed/js/modules/libs/tabs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index 1948de36..c1b460c8 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -58,6 +58,7 @@ Tabs.prototype.listenNavigationButtons = function() { self.navigateElement(); self.showHideNavigationButtons(); }); + self.tabsContainer.find('.btn-tab-next').on('click', function(event) { event.preventDefault(); var element = $(this); @@ -137,8 +138,7 @@ Tabs.prototype.showHideNavigationButtons = function() { Tabs.prototype.navigateElement = function() { var self = this; - - var element = self.tabsContainer.find('li:eq(' + this.currentTabPosition + ') a'); + var element = self.tabsContainer.find('[data-toggle="tab"]:eq(' + this.currentTabPosition + ')'); var hash = element.attr('href'); this.proceedChange(element, hash); From 03fba6880f98303f631f21a693540dba3b48b965 Mon Sep 17 00:00:00 2001 From: mscherer Date: Mon, 4 May 2020 18:17:41 +0200 Subject: [PATCH 125/304] TE-4708 Fix phpstan issues for 0.12 compatibility. --- phpstan.neon | 1 - 1 file changed, 1 deletion(-) diff --git a/phpstan.neon b/phpstan.neon index 0d70fc7e..28ebe510 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,5 +1,4 @@ parameters: ignoreErrors: - '#Function twig_escape_filter not found.#' - - '#Class Symfony\\Bridge\\Twig\\Form\\TwigRenderer not found.#' - '#Parameter \#1 \$attribute of method .+ConnectionInterface::getAttribute\(\) expects string, int given.#' From 35cabbcb3813df2b30edbd1de327fb87d89698c0 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 24 Apr 2020 03:09:40 +0000 Subject: [PATCH 126/304] chore(package): prepare for yarn v2 --- assets/Zed/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 048e47be..743a5e6d 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -21,9 +21,9 @@ "jquery-ui": "~1.12.1", "jstree": "~3.3.3", "metismenu": "~2.0.2", - "nestable": "git+https://git@github.com/ilmente/Nestable#v1.1.1", - "pace": "git+https://git@github.com/hubspot/pace#v1.0.2", - "select2": "git+https://git@github.com/select2/select2#4.0.2", + "nestable": "https://github.com/ilmente/Nestable.git#v1.1.1", + "pace": "https://github.com/hubspot/pace.git#v1.0.2", + "select2": "https://github.com/select2/select2.git#4.0.2", "summernote": "^0.8.11", "sweetalert": "~1.1.3" } From add9ca050463b6d10d76196992ecb5f0c7888f6e Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Fri, 15 May 2020 18:03:39 +0300 Subject: [PATCH 127/304] PS-13426: FE Support product bundles --- assets/Zed/sass/_custom.scss | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 2a79897a..87fb1016 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -261,3 +261,51 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { .spacing-bottom { margin-bottom: 1em; } + +.image-wrap { + height: 60px; + width: 60px; + display: flex; + align-items: center; + justify-content: center; + position: relative; + padding: 2px; + + &::before { + content: ''; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.05); + border-radius: 3px; + } +} + +.product-image { + max-width: 100%; + max-height: 100%; + flex-shrink: 0; +} + +.tax-info { + color: #a1a5a8; + font-size: 12px; +} + +.discounted { + color: #a1a5a8; + font-size: 12px; + text-decoration: line-through; + display: block; +} + +.state-history { + width: 250px; +} + +.sku { + color: #6f7274; + font-size: 12px; +} From a9bc49c2b5a3e38664386a649d398920c7413c26 Mon Sep 17 00:00:00 2001 From: voitov Date: Tue, 19 May 2020 12:12:47 +0300 Subject: [PATCH 128/304] cc-9327 fixed bug --- .../Gui/Communication/Table/AbstractTable.php | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 25aa5151..9e0e37e7 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -18,6 +18,8 @@ use Spryker\Zed\Gui\Communication\Form\DeleteForm; use Spryker\Zed\Kernel\Communication\Plugin\Pimple; use Spryker\Zed\PropelOrm\Business\Runtime\ActiveQuery\Criteria; +use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormInterface; use Twig\Environment; use Twig\Loader\FilesystemLoader; @@ -35,6 +37,8 @@ abstract class AbstractTable public const SORT_BY_DIRECTION = 'dir'; public const URL_ANCHOR = '#'; + public const ENTITY_ID = 'entity_id'; + /** * @var \Symfony\Component\HttpFoundation\Request */ @@ -922,19 +926,39 @@ protected function generateRemoveButton($url, $title, array $options = []) { $formFactory = $this->getFormFactory(); + $name = isset($options[static::ENTITY_ID]) ? 'delete_form' . $options[static::ENTITY_ID] : ''; + $options = [ 'fields' => $options, 'action' => $url, ]; - $form = $formFactory->create(DeleteForm::class, [], $options); - + $form = $this->createDeleteForm($formFactory, $options, $name); $options['form'] = $form->createView(); $options['title'] = $title; return $this->twig->render('delete-form.twig', $options); } + /** + * @param \Symfony\Component\Form\FormFactoryInterface $formFactory + * @param array $options + * @param string $name + * + * @return \Symfony\Component\Form\FormInterface + */ + protected function createDeleteForm( + FormFactoryInterface $formFactory, + array $options, + string $name = '' + ): FormInterface { + if (!$name) { + return $formFactory->create(DeleteForm::class, [], $options); + } + + return $formFactory->createNamed($name, DeleteForm::class, [], $options); + } + /** * @return \Symfony\Component\Form\FormFactoryInterface */ From 6081e2c341e66f8b088a2e1d3d03b1f9542c0e60 Mon Sep 17 00:00:00 2001 From: voitov Date: Tue, 19 May 2020 12:31:52 +0300 Subject: [PATCH 129/304] cc-9327 small fix --- .../Gui/Communication/Table/AbstractTable.php | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 9e0e37e7..872e9c9b 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -924,8 +924,6 @@ protected function generateButtonGroup(array $buttonGroupItems, $title, array $o */ protected function generateRemoveButton($url, $title, array $options = []) { - $formFactory = $this->getFormFactory(); - $name = isset($options[static::ENTITY_ID]) ? 'delete_form' . $options[static::ENTITY_ID] : ''; $options = [ @@ -933,7 +931,7 @@ protected function generateRemoveButton($url, $title, array $options = []) 'action' => $url, ]; - $form = $this->createDeleteForm($formFactory, $options, $name); + $form = $this->createDeleteForm($options, $name); $options['form'] = $form->createView(); $options['title'] = $title; @@ -941,22 +939,18 @@ protected function generateRemoveButton($url, $title, array $options = []) } /** - * @param \Symfony\Component\Form\FormFactoryInterface $formFactory * @param array $options * @param string $name * * @return \Symfony\Component\Form\FormInterface */ - protected function createDeleteForm( - FormFactoryInterface $formFactory, - array $options, - string $name = '' - ): FormInterface { + protected function createDeleteForm(array $options, string $name = ''): FormInterface + { if (!$name) { - return $formFactory->create(DeleteForm::class, [], $options); + return $this->getFormFactory()->create(DeleteForm::class, [], $options); } - return $formFactory->createNamed($name, DeleteForm::class, [], $options); + return $this->getFormFactory()->createNamed($name, DeleteForm::class, [], $options); } /** From d1fc8a0406b174105f50d9bba262227e9d09f234 Mon Sep 17 00:00:00 2001 From: voitov Date: Tue, 19 May 2020 12:41:37 +0300 Subject: [PATCH 130/304] cc-9327 small fix --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 872e9c9b..6c3383d4 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -18,7 +18,6 @@ use Spryker\Zed\Gui\Communication\Form\DeleteForm; use Spryker\Zed\Kernel\Communication\Plugin\Pimple; use Spryker\Zed\PropelOrm\Business\Runtime\ActiveQuery\Criteria; -use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; use Twig\Environment; use Twig\Loader\FilesystemLoader; From 38445baa3bb76e478655d88e3b5ab0b68ef12b85 Mon Sep 17 00:00:00 2001 From: voitov Date: Tue, 19 May 2020 14:28:44 +0300 Subject: [PATCH 131/304] cc-9327 TL CR fixes --- .../Gui/Communication/Table/AbstractTable.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 6c3383d4..c3060251 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -36,7 +36,19 @@ abstract class AbstractTable public const SORT_BY_DIRECTION = 'dir'; public const URL_ANCHOR = '#'; - public const ENTITY_ID = 'entity_id'; + /** + * Defines delete form name suffix allowing to avoid non-unique attributes (e.g. form name or id) for delete forms on one page. + * It is recommended to fill parameter $options in AbstractTable:generateRemoveButton() to avoid non-unique id warning in browser console. + * + * $options parameter example: + * [ + * 'name_suffix' => $id, + * ] + * + */ + public const DELETE_FORM_NAME_SUFFIX = 'name_suffix'; + + protected const DELETE_FORM_NAME = 'delete_form'; /** * @var \Symfony\Component\HttpFoundation\Request @@ -923,7 +935,7 @@ protected function generateButtonGroup(array $buttonGroupItems, $title, array $o */ protected function generateRemoveButton($url, $title, array $options = []) { - $name = isset($options[static::ENTITY_ID]) ? 'delete_form' . $options[static::ENTITY_ID] : ''; + $name = isset($options[static::DELETE_FORM_NAME_SUFFIX]) ? static::DELETE_FORM_NAME . $options[static::DELETE_FORM_NAME_SUFFIX] : ''; $options = [ 'fields' => $options, From 09320ad23ca937c81d12646a5dd00ca963bbc053 Mon Sep 17 00:00:00 2001 From: voitov Date: Tue, 19 May 2020 14:52:41 +0300 Subject: [PATCH 132/304] cc-9327 c:s:s fix --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index c3060251..cae0ec98 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -44,7 +44,6 @@ abstract class AbstractTable * [ * 'name_suffix' => $id, * ] - * */ public const DELETE_FORM_NAME_SUFFIX = 'name_suffix'; From 64bb351924f60f46e265c528ce5803504cf23359 Mon Sep 17 00:00:00 2001 From: voitov Date: Tue, 19 May 2020 14:57:21 +0300 Subject: [PATCH 133/304] cc-9327 fixes --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index cae0ec98..eb8ce58e 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -45,7 +45,7 @@ abstract class AbstractTable * 'name_suffix' => $id, * ] */ - public const DELETE_FORM_NAME_SUFFIX = 'name_suffix'; + protected const DELETE_FORM_NAME_SUFFIX = 'name_suffix'; protected const DELETE_FORM_NAME = 'delete_form'; From 467eff4c5dc604ef695e0e1e0c2ab0297ac4d30a Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 19 May 2020 14:20:34 +0200 Subject: [PATCH 134/304] Refactor deprecations to clickable links. --- .../Plugin/Twig/Inspinia/BackActionButtonFunction.php | 2 +- .../Plugin/Twig/Inspinia/CreateActionButtonFunction.php | 2 +- .../Plugin/Twig/Inspinia/EditActionButtonFunction.php | 2 +- .../Plugin/Twig/Inspinia/ViewActionButtonFunction.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/BackActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/BackActionButtonFunction.php index e3753cd1..a2255d14 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/BackActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/BackActionButtonFunction.php @@ -10,7 +10,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\BackActionButtonFunction as BackActionButton; /** - * @deprecated Use \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\BackActionButtonFunction instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\BackActionButtonFunction} instead. */ class BackActionButtonFunction extends BackActionButton { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/CreateActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/CreateActionButtonFunction.php index e5fb06dd..f615b463 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/CreateActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/CreateActionButtonFunction.php @@ -10,7 +10,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonFunction as CreateActionButton; /** - * @deprecated Use \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonFunction instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonFunction} instead. */ class CreateActionButtonFunction extends CreateActionButton { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/EditActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/EditActionButtonFunction.php index 6b1efcf9..faee0c49 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/EditActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/EditActionButtonFunction.php @@ -10,7 +10,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\EditActionButtonFunction as EditActionButton; /** - * @deprecated Use \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\EditActionButtonFunction instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\EditActionButtonFunction} instead. */ class EditActionButtonFunction extends EditActionButton { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/ViewActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/ViewActionButtonFunction.php index 7d0ec0aa..3d3279da 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/ViewActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/ViewActionButtonFunction.php @@ -10,7 +10,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\ViewActionButtonFunction as ViewActionButton; /** - * @deprecated Use \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\ViewActionButtonFunction instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\ViewActionButtonFunction} instead. */ class ViewActionButtonFunction extends ViewActionButton { From a54a8546ddadb777faeab5575b7e7a9533cf8ff6 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Tue, 19 May 2020 15:50:26 +0300 Subject: [PATCH 135/304] PS-13454: FE change label colors (Return list page) --- assets/Zed/sass/_custom.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 87fb1016..6538f8ae 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -309,3 +309,8 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { color: #6f7274; font-size: 12px; } + +.nav .label, +.ibox .label { + display: inline-block; +} From 439b26f6cf14b2462faf2a2386beb714235f83ec Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 19 May 2020 15:03:42 +0200 Subject: [PATCH 136/304] Refactor deprecations to clickable links. --- src/Spryker/Shared/Gui/Form/AbstractForm.php | 2 +- src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php | 2 +- src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php | 2 +- .../Zed/Gui/Communication/Form/Type/AutosuggestType.php | 4 ++-- .../Zed/Gui/Communication/Form/Type/ParagraphType.php | 2 +- .../Gui/Communication/Form/Type/Select2ComboBoxType.php | 4 ++-- .../Zed/Gui/Communication/Form/Type/SelectType.php | 2 +- .../ServiceProvider/FormTypeExtensionServiceProvider.php | 2 +- .../ServiceProvider/GuiTwigExtensionServiceProvider.php | 4 ++-- .../Gui/Communication/Plugin/Twig/AssetsPathFunction.php | 2 +- .../Plugin/Twig/Buttons/AbstractButtonFunction.php | 2 +- .../Twig/Buttons/Action/AbstractActionButtonFunction.php | 2 +- .../Twig/Buttons/Action/BackActionButtonFunction.php | 2 +- .../Twig/Buttons/Action/CreateActionButtonFunction.php | 2 +- .../Twig/Buttons/Action/EditActionButtonFunction.php | 2 +- .../Twig/Buttons/Action/RemoveActionButtonFunction.php | 2 +- .../Twig/Buttons/Action/ViewActionButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Table/AbstractTableFunction.php | 2 +- .../Plugin/Twig/Buttons/Table/BackTableButtonFunction.php | 2 +- .../Twig/Buttons/Table/CreateTableButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Table/EditTableButtonFunction.php | 2 +- .../Twig/Buttons/Table/RemoveTableButtonFunction.php | 2 +- .../Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php | 2 +- .../Plugin/Twig/Inspinia/AbstractActionButtonFunction.php | 2 +- .../Gui/Communication/Plugin/Twig/ListGroupFunction.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/ModalFunction.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/PanelFunction.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/TabsFunction.php | 2 +- .../Gui/Communication/Plugin/Twig/UrlDecodeFunction.php | 2 +- .../Zed/Gui/Communication/Plugin/Twig/UrlFunction.php | 2 +- .../Zed/Gui/Communication/Table/TableConfiguration.php | 8 ++++---- 31 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/Spryker/Shared/Gui/Form/AbstractForm.php b/src/Spryker/Shared/Gui/Form/AbstractForm.php index c8867eaf..862bfb5f 100644 --- a/src/Spryker/Shared/Gui/Form/AbstractForm.php +++ b/src/Spryker/Shared/Gui/Form/AbstractForm.php @@ -15,7 +15,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @deprecated Use `Spryker\Zed\Kernel\Communication\Form\AbstractType` for Zed and `Spryker\Yves\Kernel\Form\AbstractType` for Yves instead. + * @deprecated Use {@link \Spryker\Zed\Kernel\Communication\Form\AbstractType} for Zed and `Spryker\Yves\Kernel\Form\AbstractType` for Yves instead. */ abstract class AbstractForm implements FormTypeInterface { diff --git a/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php b/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php index 4bdb28c6..d3c959dc 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php @@ -12,7 +12,7 @@ use Spryker\Zed\Kernel\Communication\Plugin\Pimple; /** - * @deprecated Use `Spryker\Zed\Kernel\Communication\Form\AbstractType` for Zed instead. + * @deprecated Use {@link \Spryker\Zed\Kernel\Communication\Form\AbstractType} for Zed instead. */ abstract class AbstractForm extends SharedAbstractForm { diff --git a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php index 45faeb98..7e3bfa91 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php @@ -37,7 +37,7 @@ public function configureOptions(OptionsResolver $resolver) } /** - * @deprecated Use `configureOptions()` instead. + * @deprecated Use {@link configureOptions()} instead. * * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php index 8e02a4a3..1f890b69 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php @@ -49,7 +49,7 @@ public function configureOptions(OptionsResolver $resolver) } /** - * @deprecated Use `configureOptions()` instead. + * @deprecated Use {@link configureOptions()} instead. * * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * @@ -77,7 +77,7 @@ public function getBlockPrefix() } /** - * @deprecated Use `getBlockPrefix()` instead. + * @deprecated Use {@link getBlockPrefix()} instead. * * @return string */ diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php index dcdd5fdf..ce0fa589 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php @@ -59,7 +59,7 @@ public function getBlockPrefix() } /** - * @deprecated Use `getBlockPrefix()` instead. + * @deprecated Use {@link getBlockPrefix()} instead. * * @return string */ diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php index a87702bf..3a141a5d 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php @@ -47,7 +47,7 @@ public function configureOptions(OptionsResolver $resolver) } /** - * @deprecated Use `configureOptions()` instead. + * @deprecated Use {@link configureOptions()} instead. * * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * @@ -75,7 +75,7 @@ public function getBlockPrefix() } /** - * @deprecated Use `getBlockPrefix()` instead. + * @deprecated Use {@link getBlockPrefix()} instead. * * @return string */ diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php index 80799848..c4ec6d8f 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php @@ -49,7 +49,7 @@ public function configureOptions(OptionsResolver $resolver) } /** - * @deprecated Use `configureOptions()` instead. + * @deprecated Use {@link configureOptions()} instead. * * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php index ade0f557..6bc738e9 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php @@ -13,7 +13,7 @@ use Spryker\Zed\Kernel\Communication\AbstractPlugin; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Form\NoValidateFormTypeExtensionFormPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Form\NoValidateFormTypeExtensionFormPlugin} instead. * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index 70597e01..b8ffc52c 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -15,9 +15,9 @@ use Twig\Environment; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\GuiFilterTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\GuiFilterTwigPlugin} instead. * - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\GuiTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\GuiTwigPlugin} instead. * * @method \Spryker\Zed\Gui\Communication\GuiCommunicationFactory getFactory() * @method \Spryker\Zed\Gui\GuiConfig getConfig() diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php index dbf40d8d..33b997ea 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\AssetsPathTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\AssetsPathTwigPlugin} instead. * * @method \Spryker\Zed\Gui\GuiConfig getConfig() */ diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php index c934f2d8..c60877a2 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\AbstractButtonTwig` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\AbstractButtonTwig} instead. */ abstract class AbstractButtonFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php index 16cee350..ddb10a12 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php @@ -10,7 +10,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonFunction; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\AbstractActionButtonTwig` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\AbstractActionButtonTwig} instead. */ abstract class AbstractActionButtonFunction extends AbstractButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php index 96ff9034..71d2b7b4 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\BackActionButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\BackActionButtonTwigPlugin} instead. */ class BackActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php index 710bc597..3f0d17a7 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\CreateActionButtonTwigPlugin} instead. */ class CreateActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php index c2f67c67..cb91d666 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\EditActionButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\EditActionButtonTwigPlugin} instead. */ class EditActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php index c3ddf4d7..0c6c531c 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\RemoveActionButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\RemoveActionButtonTwigPlugin} instead. */ class RemoveActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php index b1495cfd..7e1fae89 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\ViewActionButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\ViewActionButtonTwigPlugin} instead. */ class ViewActionButtonFunction extends AbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php index 9499eac4..db7ded7e 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php @@ -10,7 +10,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\AbstractButtonFunction; /** - * @deprecated Use `\Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\AbstractTableTwig` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\AbstractTableTwig} instead. */ abstract class AbstractTableFunction extends AbstractButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php index a69c9980..80d37294 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\BackTableButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\BackTableButtonTwigPlugin} instead. */ class BackTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php index 9f233003..6b329d1c 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\CreateTableButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\CreateTableButtonTwigPlugin} instead. */ class CreateTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php index 73ae9f52..83ebb00c 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\EditTableButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\EditTableButtonTwigPlugin} instead. */ class EditTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php index 24a23f0c..a26eccc9 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\RemoveTableButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\RemoveTableButtonTwigPlugin} instead. */ class RemoveTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php index 9a7a4842..81831d01 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php @@ -8,7 +8,7 @@ namespace Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\ViewTableButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Table\ViewTableButtonTwigPlugin} instead. */ class ViewTableButtonFunction extends AbstractTableFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php index 56afba0c..2c150670 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php @@ -10,7 +10,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\AbstractActionButtonFunction as TwigAbstractActionButtonFunction; /** - * @deprecated Use Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\AbstractActionButtonFunction instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Action\AbstractActionButtonFunction} instead. */ abstract class AbstractActionButtonFunction extends TwigAbstractActionButtonFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php index 55f45a22..437ea079 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\ListGroupTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\ListGroupTwigPlugin} instead. */ class ListGroupFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php index 189abded..d0ac03b1 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\ModalTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\ModalTwigPlugin} instead. */ class ModalFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php index f73fc32b..2817c342 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\PanelTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\PanelTwigPlugin} instead. */ class PanelFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php index 9e2c2877..6d161d8d 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php @@ -12,7 +12,7 @@ use Twig\Environment; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\TabsTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\TabsTwigPlugin} instead. */ class TabsFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php index 1df2d313..a1eb96ce 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\UrlDecodeTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\UrlDecodeTwigPlugin} instead. */ class UrlDecodeFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php index 6ba37247..9468e089 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php @@ -11,7 +11,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use `Spryker\Zed\Gui\Communication\Plugin\Twig\UrlTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\UrlTwigPlugin} instead. */ class UrlFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php index af613b70..4f040410 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php +++ b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php @@ -321,7 +321,7 @@ public function getDefaultSortField() } /** - * @deprecated Use setDefaultSortField() instead. + * @deprecated Use {@link setDefaultSortField()} instead. * * @param int $columnIndex * @@ -333,7 +333,7 @@ public function setDefaultSortColumnIndex($columnIndex) } /** - * @deprecated Use getDefaultSortField() instead. + * @deprecated Use {@link getDefaultSortField()} instead. * * @return int */ @@ -343,7 +343,7 @@ public function getDefaultSortColumnIndex() } /** - * @deprecated Use setDefaultSortField() instead. + * @deprecated Use {@link setDefaultSortField()} instead. * * @param string $direction * @@ -355,7 +355,7 @@ public function setDefaultSortDirection($direction) } /** - * @deprecated Use getDefaultSortField() instead. + * @deprecated Use {@link getDefaultSortField()} instead. * * @return string */ From b097fae16487d9e7a5be9ff0861d9f56186d906d Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Wed, 20 May 2020 11:59:49 +0300 Subject: [PATCH 137/304] PS-13495: FE refactoring #1 [PS-13398][Kravchenko] --- assets/Zed/sass/_custom.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 6538f8ae..0274ba0a 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -313,4 +313,5 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { .nav .label, .ibox .label { display: inline-block; + vertical-align: top; } From 8f5d2eb25364e99ce0ced1e954a8ed6be5c13054 Mon Sep 17 00:00:00 2001 From: "k.kravchenko" Date: Wed, 20 May 2020 14:38:01 +0300 Subject: [PATCH 138/304] CC-9139: trying to run trevis --- assets/Zed/js/modules/libs/tabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index c1b460c8..e984c619 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -28,7 +28,7 @@ Tabs.prototype.checkErrors = function() { tabHeader.addClass('error'); } else { tabHeader.removeClass('error'); - } + }; }); }; From 0038da87e922b99d1591461e79cae3f6533a69c3 Mon Sep 17 00:00:00 2001 From: "k.kravchenko" Date: Wed, 20 May 2020 14:38:55 +0300 Subject: [PATCH 139/304] CC-9139: trying to run trevis --- assets/Zed/js/modules/libs/tabs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index e984c619..c1b460c8 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -28,7 +28,7 @@ Tabs.prototype.checkErrors = function() { tabHeader.addClass('error'); } else { tabHeader.removeClass('error'); - }; + } }); }; From d165c1555b03276150e40df38e803fea0871a41f Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Tue, 26 May 2020 16:52:36 +0300 Subject: [PATCH 140/304] PS-13527: FE refactoring #1 after TechL review [Gerton] --- assets/Zed/sass/_custom.scss | 57 ---------------------------- assets/Zed/sass/_product-item.scss | 61 ++++++++++++++++++++++++++++++ assets/Zed/sass/main.scss | 2 +- 3 files changed, 62 insertions(+), 58 deletions(-) create mode 100644 assets/Zed/sass/_product-item.scss diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 0274ba0a..af34b397 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -249,67 +249,10 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { } } -.is-hidden .show-less, -.is-shown .show-more { - display: none; -} - -.more-history { - color: #337ab7; -} - .spacing-bottom { margin-bottom: 1em; } -.image-wrap { - height: 60px; - width: 60px; - display: flex; - align-items: center; - justify-content: center; - position: relative; - padding: 2px; - - &::before { - content: ''; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.05); - border-radius: 3px; - } -} - -.product-image { - max-width: 100%; - max-height: 100%; - flex-shrink: 0; -} - -.tax-info { - color: #a1a5a8; - font-size: 12px; -} - -.discounted { - color: #a1a5a8; - font-size: 12px; - text-decoration: line-through; - display: block; -} - -.state-history { - width: 250px; -} - -.sku { - color: #6f7274; - font-size: 12px; -} - .nav .label, .ibox .label { display: inline-block; diff --git a/assets/Zed/sass/_product-item.scss b/assets/Zed/sass/_product-item.scss new file mode 100644 index 00000000..4b5eb7a5 --- /dev/null +++ b/assets/Zed/sass/_product-item.scss @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + */ + +.is-hidden .show-less, +.is-shown .show-more { + display: none; +} + +.more-history { + color: #337ab7; +} + +.image-wrap { + height: 60px; + width: 60px; + display: flex; + align-items: center; + justify-content: center; + position: relative; + padding: 2px; + + &::before { + content: ''; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.05); + border-radius: 3px; + } +} + +.product-image { + max-width: 100%; + max-height: 100%; + flex-shrink: 0; +} + +.tax-info { + color: #a1a5a8; + font-size: 12px; +} + +.discounted { + color: #a1a5a8; + font-size: 12px; + text-decoration: line-through; + display: block; +} + +.state-history { + width: 250px; +} + +.sku { + color: #6f7274; + font-size: 12px; +} diff --git a/assets/Zed/sass/main.scss b/assets/Zed/sass/main.scss index 63315b85..c232f87f 100644 --- a/assets/Zed/sass/main.scss +++ b/assets/Zed/sass/main.scss @@ -30,4 +30,4 @@ @import 'flags'; @import 'data-tables'; @import 'wave-loader'; - +@import 'product-item'; From c3d95a9c25beb5a869056fe0a1278e8b9bebf755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Fri, 29 May 2020 13:08:37 +0000 Subject: [PATCH 141/304] TE-5961 Refactored all ContainerInterface array access to setter. --- src/Spryker/Zed/Gui/GuiDependencyProvider.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Spryker/Zed/Gui/GuiDependencyProvider.php b/src/Spryker/Zed/Gui/GuiDependencyProvider.php index 94762252..5936ace5 100644 --- a/src/Spryker/Zed/Gui/GuiDependencyProvider.php +++ b/src/Spryker/Zed/Gui/GuiDependencyProvider.php @@ -59,9 +59,9 @@ public function provideCommunicationLayerDependencies(Container $container) */ protected function addTwigFunctions(Container $container) { - $container[static::GUI_TWIG_FUNCTIONS] = function () { + $container->set(static::GUI_TWIG_FUNCTIONS, function () { return $this->getTwigFunctions(); - }; + }); return $container; } @@ -73,9 +73,9 @@ protected function addTwigFunctions(Container $container) */ protected function addTwigFilter(Container $container) { - $container[static::GUI_TWIG_FILTERS] = function () { + $container->set(static::GUI_TWIG_FILTERS, function () { return $this->getTwigFilters(); - }; + }); return $container; } From e4aa958ab857f165c0e8a5287876980d629a7b4a Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 2 Jun 2020 16:33:25 +0200 Subject: [PATCH 142/304] Fix PHPStan issues. --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 25aa5151..7d0406e5 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -410,11 +410,11 @@ protected function getTwigRootPath() } /** - * @return mixed + * @return int */ public function getOffset() { - return $this->request->query->get('start', 0); + return $this->request->query->getInt('start', 0); } /** @@ -426,6 +426,7 @@ public function getOrders(TableConfiguration $config) { $defaultSorting = [$this->getDefaultSorting($config)]; + /** @var array|null $orderParameter */ $orderParameter = $this->request->query->get('order'); if (!is_array($orderParameter)) { @@ -772,7 +773,7 @@ public function fetchData() $data = $this->prepareData($this->config); $this->loadData($data); $wrapperArray = [ - 'draw' => $this->request->query->get('draw', 1), + 'draw' => $this->request->query->getInt('draw', 1), 'recordsTotal' => $this->total, 'recordsFiltered' => $this->filtered, 'data' => $this->data, From c327f77d4ddb10e0fb436579c2663b3d5c31d4f8 Mon Sep 17 00:00:00 2001 From: Dmitry Lymarenko Date: Fri, 5 Jun 2020 10:10:01 +0300 Subject: [PATCH 143/304] draft --- data/translation/Zed/de_DE.csv | 2 ++ data/translation/Zed/en_US.csv | 2 ++ 2 files changed, 4 insertions(+) diff --git a/data/translation/Zed/de_DE.csv b/data/translation/Zed/de_DE.csv index 17125065..1f606e71 100644 --- a/data/translation/Zed/de_DE.csv +++ b/data/translation/Zed/de_DE.csv @@ -5,3 +5,5 @@ Next,Weiter Previous,Vorherige "Reset password","Passwort zurücksetzen" Welcome,Willkommen +Settings,Einstellungen +"Log out",Abmelden diff --git a/data/translation/Zed/en_US.csv b/data/translation/Zed/en_US.csv index 63917a8d..d9e04bf3 100644 --- a/data/translation/Zed/en_US.csv +++ b/data/translation/Zed/en_US.csv @@ -5,3 +5,5 @@ Next,Next Previous,Previous "Reset password","Reset password" Welcome,Welcome +Settings,Settings +"Log out","Log out" From 33a2237bb6ea0844a3b65a0b3dd3c8b498266d07 Mon Sep 17 00:00:00 2001 From: Dmitry Lymarenko Date: Fri, 5 Jun 2020 17:46:45 +0300 Subject: [PATCH 144/304] CC-9702/CC-9703/CC-9706 Adjusted Zed translations --- data/translation/Zed/de_DE.csv | 1 + data/translation/Zed/en_US.csv | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/data/translation/Zed/de_DE.csv b/data/translation/Zed/de_DE.csv index 1f606e71..26db0ad2 100644 --- a/data/translation/Zed/de_DE.csv +++ b/data/translation/Zed/de_DE.csv @@ -7,3 +7,4 @@ Previous,Vorherige Welcome,Willkommen Settings,Einstellungen "Log out",Abmelden +Settings,Einstellungen diff --git a/data/translation/Zed/en_US.csv b/data/translation/Zed/en_US.csv index d9e04bf3..bd0abeae 100644 --- a/data/translation/Zed/en_US.csv +++ b/data/translation/Zed/en_US.csv @@ -5,5 +5,5 @@ Next,Next Previous,Previous "Reset password","Reset password" Welcome,Welcome -Settings,Settings "Log out","Log out" +Settings,Settings From ab8f5c07814792c84b9b794cd744f9e071e4612a Mon Sep 17 00:00:00 2001 From: Dmitry Lymarenko Date: Tue, 9 Jun 2020 10:09:35 +0300 Subject: [PATCH 145/304] CC-9702/CC-9703/CC-9706 Fixed translation issues --- data/translation/Zed/de_DE.csv | 1 - data/translation/Zed/en_US.csv | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/data/translation/Zed/de_DE.csv b/data/translation/Zed/de_DE.csv index 26db0ad2..1f606e71 100644 --- a/data/translation/Zed/de_DE.csv +++ b/data/translation/Zed/de_DE.csv @@ -7,4 +7,3 @@ Previous,Vorherige Welcome,Willkommen Settings,Einstellungen "Log out",Abmelden -Settings,Einstellungen diff --git a/data/translation/Zed/en_US.csv b/data/translation/Zed/en_US.csv index bd0abeae..d9e04bf3 100644 --- a/data/translation/Zed/en_US.csv +++ b/data/translation/Zed/en_US.csv @@ -5,5 +5,5 @@ Next,Next Previous,Previous "Reset password","Reset password" Welcome,Welcome -"Log out","Log out" Settings,Settings +"Log out","Log out" From a5675b7fef5d0d3d11aac288a13235d4120d0d53 Mon Sep 17 00:00:00 2001 From: gechetspr Date: Mon, 22 Jun 2020 13:48:17 +0300 Subject: [PATCH 146/304] TE-5976 added csrf protection for table actions --- .../Gui/Communication/Table/AbstractTable.php | 85 +++++++++++++++---- .../Gui/Presentation/Table/button-form.twig | 12 +++ 2 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 src/Spryker/Zed/Gui/Presentation/Table/button-form.twig diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index b8293b93..b9c7c387 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -930,10 +930,11 @@ protected function generateButtonGroup(array $buttonGroupItems, $title, array $o * @param string $url * @param string $title * @param array $options + * @param string $formClassName * * @return string */ - protected function generateRemoveButton($url, $title, array $options = []) + protected function generateRemoveButton($url, $title, array $options = [], string $formClassName = DeleteForm::class) { $name = isset($options[static::DELETE_FORM_NAME_SUFFIX]) ? static::DELETE_FORM_NAME . $options[static::DELETE_FORM_NAME_SUFFIX] : ''; @@ -942,28 +943,13 @@ protected function generateRemoveButton($url, $title, array $options = []) 'action' => $url, ]; - $form = $this->createDeleteForm($options, $name); + $form = $this->createForm($formClassName, $name, $options); $options['form'] = $form->createView(); $options['title'] = $title; return $this->twig->render('delete-form.twig', $options); } - /** - * @param array $options - * @param string $name - * - * @return \Symfony\Component\Form\FormInterface - */ - protected function createDeleteForm(array $options, string $name = ''): FormInterface - { - if (!$name) { - return $this->getFormFactory()->create(DeleteForm::class, [], $options); - } - - return $this->getFormFactory()->createNamed($name, DeleteForm::class, [], $options); - } - /** * @return \Symfony\Component\Form\FormFactoryInterface */ @@ -1001,6 +987,71 @@ protected function generateButton($url, $title, array $defaultOptions, array $cu ]); } + /** + * @param string|\Spryker\Service\UtilText\Model\Url\Url $url + * @param string $title + * @param string $formClassName + * @param array $buttonOptions + * @param array $formOptions + * + * @return string + */ + protected function generateFormButton($url, string $title, string $formClassName, array $buttonOptions = [], array $formOptions = []) + { + $buttonOptions = $this->generateButtonOptions([ + 'class' => 'btn-view', + 'icon' => 'fa-caret-right', + ], $buttonOptions); + + $buttonClass = $this->getButtonClass($buttonOptions); + $buttonParameters = $this->getButtonParameters($buttonOptions); + + $formOptions = array_merge($formOptions, [ + 'action' => $this->buildUrl($url), + 'attr' => ['class' => 'form-inline'], + ]); + + $form = $this->createForm($formClassName, null, $formOptions); + + return $this->getTwig()->render('button-form.twig', [ + 'class' => $buttonClass, + 'title' => $title, + 'icon' => $this->generateButtonIcon($buttonOptions), + 'parameters' => $buttonParameters, + 'form' => $form->createView(), + ]); + } + + /** + * @param string $formClassName + * @param string|null $formName + * @param array $formOptions + * + * @return \Symfony\Component\Form\FormInterface + */ + protected function createForm(string $formClassName, ?string $formName = null, array $formOptions = []): FormInterface + { + if (!$formName) { + return $this->getFormFactory()->create($formClassName, [], $formOptions); + } + + return $this->getFormFactory()->createNamed($formName, $formClassName, [], $formOptions); + } + + /** + * @param array $buttonOptions + * + * @return string + */ + protected function generateButtonIcon(array $buttonOptions): string + { + if (array_key_exists(static::BUTTON_ICON, $buttonOptions) === true && $buttonOptions[static::BUTTON_ICON] !== null) { + return ' '; + } + + return ''; + } + /** * @param \Spryker\Service\UtilText\Model\Url\Url|string $url * diff --git a/src/Spryker/Zed/Gui/Presentation/Table/button-form.twig b/src/Spryker/Zed/Gui/Presentation/Table/button-form.twig new file mode 100644 index 00000000..9ecd125f --- /dev/null +++ b/src/Spryker/Zed/Gui/Presentation/Table/button-form.twig @@ -0,0 +1,12 @@ +{{ form_start(form) }} + {% for field in form %} + {% if field.vars.name != '_token' %} + + {% do field.setRendered %} + {% endif %} + {% endfor %} + {{ form_widget(form) }} + +{{ form_end(form) }} From 8457b75df7805082e50e8217b5b44266f0e0b364 Mon Sep 17 00:00:00 2001 From: gechetspr Date: Tue, 23 Jun 2020 09:58:49 +0300 Subject: [PATCH 147/304] TE-5976 CR fixes --- .../Gui/Communication/Table/AbstractTable.php | 17 +++++++++++++++++ .../Zed/Gui/Presentation/Table/button-form.twig | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index b9c7c387..852ece19 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -950,6 +950,23 @@ protected function generateRemoveButton($url, $title, array $options = [], strin return $this->twig->render('delete-form.twig', $options); } + /** + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Table\AbstractTable::createForm()} instead. + * + * @param array $options + * @param string $name + * + * @return \Symfony\Component\Form\FormInterface + */ + protected function createDeleteForm(array $options, string $name = ''): FormInterface + { + if (!$name) { + return $this->getFormFactory()->create(DeleteForm::class, [], $options); + } + + return $this->getFormFactory()->createNamed($name, DeleteForm::class, [], $options); + } + /** * @return \Symfony\Component\Form\FormFactoryInterface */ diff --git a/src/Spryker/Zed/Gui/Presentation/Table/button-form.twig b/src/Spryker/Zed/Gui/Presentation/Table/button-form.twig index 9ecd125f..66e80080 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/button-form.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/button-form.twig @@ -7,6 +7,6 @@ {% endfor %} {{ form_widget(form) }} {{ form_end(form) }} From 9d2e42d7ed3b6e5c05b037ea599700c905220c1e Mon Sep 17 00:00:00 2001 From: mscherer Date: Fri, 26 Jun 2020 17:06:38 +0200 Subject: [PATCH 148/304] Update Meta files. --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index 2a48adb9..03b625d7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -24,6 +24,7 @@ codeception.yml export-ignore dependency.json export-ignore phpstan.json export-ignore phpstan.neon export-ignore +psalm-report.json export-ignore linguist-generated=true tooling.yml export-ignore .coveralls.yml export-ignore .travis.yml export-ignore From 72fbac897de5730267f6d3a227a32713491e6c6f Mon Sep 17 00:00:00 2001 From: mscherer Date: Fri, 26 Jun 2020 17:23:20 +0200 Subject: [PATCH 149/304] Add report files to allow AA to quickly check dept. --- psalm-report.json | 836 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 836 insertions(+) create mode 100644 psalm-report.json diff --git a/psalm-report.json b/psalm-report.json new file mode 100644 index 00000000..38d50faf --- /dev/null +++ b/psalm-report.json @@ -0,0 +1,836 @@ +{ + "error": [ + { + "severity": "error", + "line_from": 273, + "line_to": 273, + "type": "UndefinedFunction", + "message": "Function Spryker\\Zed\\Gui\\Communication\\Table\\twig_escape_filter does not exist", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " $value = twig_escape_filter(new Environment(new FilesystemLoader()), $value);", + "selected_text": "twig_escape_filter(new Environment(new FilesystemLoader()), $value)", + "error_level": -1, + "shortcode": 21 + } + ], + "warning": [ + { + "severity": "info", + "line_from": 55, + "line_to": 55, + "type": "PossiblyNullArgument", + "message": "Argument 1 of get_class cannot be null, possibly null value provided", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Shared/Gui/Form/AbstractForm.php", + "snippet": " $resolver->setDefault('data_class', get_class($this->getDataClass()));", + "selected_text": "$this->getDataClass()", + "error_level": 3, + "shortcode": 78 + }, + { + "severity": "info", + "line_from": 21, + "line_to": 21, + "type": "MissingParamType", + "message": "Parameter $options has no provided type", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/Constraint/IntegerMoneyConstraint.php", + "snippet": " public function __construct($options = null)", + "selected_text": "$options", + "error_level": 2, + "shortcode": 154 + }, + { + "severity": "info", + "line_from": 56, + "line_to": 56, + "type": "PossiblyUndefinedArrayOffset", + "message": "Possibly undefined array key $options['class']", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php", + "snippet": " $html = '
    ';", + "selected_text": "$options['class']", + "error_level": 3, + "shortcode": 167 + }, + { + "severity": "info", + "line_from": 245, + "line_to": 245, + "type": "PossiblyNullArgument", + "message": "Argument 2 of array_intersect_key cannot be null, possibly null value provided", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " $row = array_intersect_key($row, $headers);", + "selected_text": "$headers", + "error_level": 3, + "shortcode": 78 + }, + { + "severity": "info", + "line_from": 247, + "line_to": 247, + "type": "PossiblyNullArgument", + "message": "Argument 1 of Spryker\\Zed\\Gui\\Communication\\Table\\AbstractTable::reOrderByHeaders cannot be null, possibly null value provided", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " $row = $this->reOrderByHeaders($headers, $row);", + "selected_text": "$headers", + "error_level": 3, + "shortcode": 78 + }, + { + "severity": "info", + "line_from": 693, + "line_to": 693, + "type": "InvalidScalarArgument", + "message": "Argument 1 of Propel\\Runtime\\Connection\\ConnectionInterface::getAttribute expects string, int(16) provided", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " $driverName = Propel::getConnection()->getAttribute(PDO::ATTR_DRIVER_NAME);", + "selected_text": "PDO::ATTR_DRIVER_NAME", + "error_level": 4, + "shortcode": 12 + }, + { + "severity": "info", + "line_from": 731, + "line_to": 731, + "type": "PossiblyInvalidMethodCall", + "message": "Cannot call method on possible array variable $data", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " return $data->toArray(null, false, TableMap::TYPE_COLNAME);", + "selected_text": "toArray", + "error_level": 3, + "shortcode": 113 + }, + { + "severity": "info", + "line_from": 1154, + "line_to": 1154, + "type": "RedundantCondition", + "message": "Found a redundant condition when evaluating $options and trying to reconcile type 'array' to array", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " if (is_array($options)) {", + "selected_text": "is_array($options)", + "error_level": 4, + "shortcode": 122 + }, + { + "severity": "info", + "line_from": 1171, + "line_to": 1171, + "type": "PossiblyNullArrayOffset", + "message": "Cannot access value on variable $searchColumns using possibly null offset int|null", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " if (preg_match('/created_at|updated_at/', $searchColumns[$column->getData()])) {", + "selected_text": "$searchColumns", + "error_level": 3, + "shortcode": 125 + }, + { + "severity": "info", + "line_from": 1175, + "line_to": 1175, + "type": "PossiblyNullArrayOffset", + "message": "Cannot access value on variable $searchColumns using possibly null offset int|null", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " $searchColumns[$column->getData()],", + "selected_text": "$searchColumns", + "error_level": 3, + "shortcode": 125 + }, + { + "severity": "info", + "line_from": 1177, + "line_to": 1177, + "type": "PossiblyNullArrayOffset", + "message": "Cannot access value on variable $searchColumns using possibly null offset int|null", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " $searchColumns[$column->getData()],", + "selected_text": "$searchColumns", + "error_level": 3, + "shortcode": 125 + }, + { + "severity": "info", + "line_from": 1192, + "line_to": 1192, + "type": "PossiblyNullArrayOffset", + "message": "Cannot access value on variable $searchColumns using possibly null offset int|null", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " $searchColumns[$column->getData()],", + "selected_text": "$searchColumns", + "error_level": 3, + "shortcode": 125 + }, + { + "severity": "info", + "line_from": 316, + "line_to": 316, + "type": "InvalidNullableReturnType", + "message": "The declared return type 'array' for Spryker\\Zed\\Gui\\Communication\\Table\\TableConfiguration::getDefaultSortField is not nullable, but 'array|null' contains null", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php", + "snippet": " * @return array", + "selected_text": "array", + "error_level": 5, + "shortcode": 144 + }, + { + "severity": "info", + "line_from": 320, + "line_to": 320, + "type": "NullableReturnStatement", + "message": "The declared return type 'array' for Spryker\\Zed\\Gui\\Communication\\Table\\TableConfiguration::getDefaultSortField is not nullable, but the function returns 'array|null'", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php", + "snippet": " return $this->defaultSortField;", + "selected_text": "$this->defaultSortField", + "error_level": 5, + "shortcode": 139 + }, + { + "severity": "info", + "line_from": 40, + "line_to": 40, + "type": "PossiblyInvalidMethodCall", + "message": "Cannot call method on possible array variable ", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Tabs/AbstractTabs.php", + "snippet": " if ($tabsViewTransfer->getActiveTabName() === null && $tabsViewTransfer->getTabs()->count()) {", + "selected_text": "count", + "error_level": 3, + "shortcode": 113 + }, + { + "severity": "info", + "line_from": 130, + "line_to": 130, + "type": "UndefinedMagicMethod", + "message": "Magic method Spryker\\Shared\\Kernel\\BundleProxy::service does not exist", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " $container->getLocator()->utilSanitizeXss()->service()", + "selected_text": "service", + "error_level": 4, + "shortcode": 219 + } + ], + "deprecation": [ + { + "severity": "info", + "line_from": 17, + "line_to": 17, + "type": "DeprecatedClass", + "message": "Spryker\\Shared\\Gui\\Form\\AbstractForm is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", + "snippet": "abstract class AbstractForm extends SharedAbstractForm", + "selected_text": "SharedAbstractForm", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 25, + "line_to": 25, + "type": "DeprecatedClass", + "message": "Class Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin is marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", + "snippet": " * @var \\Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin", + "selected_text": "\\Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 30, + "line_to": 30, + "type": "DeprecatedClass", + "message": "Class Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin is marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", + "snippet": " * @return \\Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin", + "selected_text": "\\Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 35, + "line_to": 35, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", + "snippet": " $this->constraintsPlugin = new ConstraintsPlugin();", + "selected_text": "new ConstraintsPlugin()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 57, + "line_to": 57, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::offsetGet has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", + "snippet": " $this->request = (new Pimple())->getApplication()['request'];", + "selected_text": "(new Pimple())->getApplication()", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 30, + "line_to": 30, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::offsetSet has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php", + "snippet": " $app['form.type.extensions'] = $app->share(function () {", + "selected_text": "$app", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 30, + "line_to": 30, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::share has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/FormTypeExtensionServiceProvider.php", + "snippet": " $app['form.type.extensions'] = $app->share(function () {", + "selected_text": "share", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 36, + "line_to": 36, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::offsetSet has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php", + "snippet": " $app['twig'] = $app->share(", + "selected_text": "$app", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 36, + "line_to": 36, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::share has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php", + "snippet": " $app['twig'] = $app->share(", + "selected_text": "share", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 105, + "line_to": 105, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::offsetSet has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php", + "snippet": " $app['form.type.extensions'] = $app->share(function () {", + "selected_text": "$app", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 105, + "line_to": 105, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::share has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php", + "snippet": " $app['form.type.extensions'] = $app->share(function () {", + "selected_text": "share", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 15, + "line_to": 15, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\AbstractButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php", + "snippet": "abstract class AbstractActionButtonFunction extends AbstractButtonFunction", + "selected_text": "AbstractButtonFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php", + "snippet": "class BackActionButtonFunction extends AbstractActionButtonFunction", + "selected_text": "AbstractActionButtonFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php", + "snippet": "class CreateActionButtonFunction extends AbstractActionButtonFunction", + "selected_text": "AbstractActionButtonFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php", + "snippet": "class EditActionButtonFunction extends AbstractActionButtonFunction", + "selected_text": "AbstractActionButtonFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php", + "snippet": "class RemoveActionButtonFunction extends AbstractActionButtonFunction", + "selected_text": "AbstractActionButtonFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php", + "snippet": "class ViewActionButtonFunction extends AbstractActionButtonFunction", + "selected_text": "AbstractActionButtonFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 15, + "line_to": 15, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\AbstractButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php", + "snippet": "abstract class AbstractTableFunction extends AbstractButtonFunction", + "selected_text": "AbstractButtonFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php", + "snippet": "class BackTableButtonFunction extends AbstractTableFunction", + "selected_text": "AbstractTableFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php", + "snippet": "class CreateTableButtonFunction extends AbstractTableFunction", + "selected_text": "AbstractTableFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php", + "snippet": "class EditTableButtonFunction extends AbstractTableFunction", + "selected_text": "AbstractTableFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php", + "snippet": "class RemoveTableButtonFunction extends AbstractTableFunction", + "selected_text": "AbstractTableFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 13, + "line_to": 13, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php", + "snippet": "class ViewTableButtonFunction extends AbstractTableFunction", + "selected_text": "AbstractTableFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 15, + "line_to": 15, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php", + "snippet": "abstract class AbstractActionButtonFunction extends TwigAbstractActionButtonFunction", + "selected_text": "TwigAbstractActionButtonFunction", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 15, + "line_to": 15, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\BackActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/BackActionButtonFunction.php", + "snippet": "class BackActionButtonFunction extends BackActionButton", + "selected_text": "BackActionButton", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 15, + "line_to": 15, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\CreateActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/CreateActionButtonFunction.php", + "snippet": "class CreateActionButtonFunction extends CreateActionButton", + "selected_text": "CreateActionButton", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 15, + "line_to": 15, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\EditActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/EditActionButtonFunction.php", + "snippet": "class EditActionButtonFunction extends EditActionButton", + "selected_text": "EditActionButton", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 15, + "line_to": 15, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\ViewActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/ViewActionButtonFunction.php", + "snippet": "class ViewActionButtonFunction extends ViewActionButton", + "selected_text": "ViewActionButton", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 181, + "line_to": 182, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::offsetGet has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " return (new Pimple())\n ->getApplication()['request'];", + "selected_text": "(new Pimple())\n ->getApplication()", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 391, + "line_to": 392, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::offsetGet has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " $twig = (new Pimple())\n ->getApplication()['twig'];", + "selected_text": "(new Pimple())\n ->getApplication()", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 467, + "line_to": 467, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Zed\\Gui\\Communication\\Table\\TableConfiguration::getDefaultSortColumnIndex has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " self::SORT_BY_COLUMN => $config->getDefaultSortColumnIndex(),", + "selected_text": "getDefaultSortColumnIndex", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 468, + "line_to": 468, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Zed\\Gui\\Communication\\Table\\TableConfiguration::getDefaultSortDirection has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " self::SORT_BY_DIRECTION => $config->getDefaultSortDirection(),", + "selected_text": "getDefaultSortDirection", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 972, + "line_to": 972, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Service\\Container\\Container::offsetGet has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " return (new Pimple())->getApplication()['form.factory'];", + "selected_text": "(new Pimple())->getApplication()", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 332, + "line_to": 332, + "type": "DeprecatedProperty", + "message": "Spryker\\Zed\\Gui\\Communication\\Table\\TableConfiguration::$defaultSortColumnIndex is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php", + "snippet": " $this->defaultSortColumnIndex = $columnIndex;", + "selected_text": "$this->defaultSortColumnIndex", + "error_level": 2, + "shortcode": 99 + }, + { + "severity": "info", + "line_from": 354, + "line_to": 354, + "type": "DeprecatedProperty", + "message": "Spryker\\Zed\\Gui\\Communication\\Table\\TableConfiguration::$defaultSortDirection is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php", + "snippet": " $this->defaultSortDirection = $direction;", + "selected_text": "$this->defaultSortDirection", + "error_level": 2, + "shortcode": 99 + }, + { + "severity": "info", + "line_from": 63, + "line_to": 63, + "type": "DeprecatedMethod", + "message": "The method Spryker\\Zed\\Gui\\GuiDependencyProvider::getTwigFunctions has been marked as deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " return $this->getTwigFunctions();", + "selected_text": "getTwigFunctions", + "error_level": 2, + "shortcode": 1 + }, + { + "severity": "info", + "line_from": 91, + "line_to": 91, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\AssetsPathFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new AssetsPathFunction(),", + "selected_text": "new AssetsPathFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 92, + "line_to": 92, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\TabsFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new TabsFunction(),", + "selected_text": "new TabsFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 93, + "line_to": 93, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\UrlFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new UrlFunction(),", + "selected_text": "new UrlFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 94, + "line_to": 94, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\UrlDecodeFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new UrlDecodeFunction(),", + "selected_text": "new UrlDecodeFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 96, + "line_to": 96, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\ButtonGroupFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new ButtonGroupFunction(),", + "selected_text": "new ButtonGroupFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 97, + "line_to": 97, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\BackActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new BackActionButtonFunction(),", + "selected_text": "new BackActionButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 98, + "line_to": 98, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\CreateActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new CreateActionButtonFunction(),", + "selected_text": "new CreateActionButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 99, + "line_to": 99, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\ViewActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new ViewActionButtonFunction(),", + "selected_text": "new ViewActionButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 100, + "line_to": 100, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\EditActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new EditActionButtonFunction(),", + "selected_text": "new EditActionButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 101, + "line_to": 101, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\RemoveActionButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new RemoveActionButtonFunction(),", + "selected_text": "new RemoveActionButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 103, + "line_to": 103, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\EditTableButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new EditTableButtonFunction(),", + "selected_text": "new EditTableButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 104, + "line_to": 104, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\BackTableButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new BackTableButtonFunction(),", + "selected_text": "new BackTableButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 105, + "line_to": 105, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\CreateTableButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new CreateTableButtonFunction(),", + "selected_text": "new CreateTableButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 106, + "line_to": 106, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\ViewTableButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new ViewTableButtonFunction(),", + "selected_text": "new ViewTableButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 107, + "line_to": 107, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\RemoveTableButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new RemoveTableButtonFunction(),", + "selected_text": "new RemoveTableButtonFunction()", + "error_level": 2, + "shortcode": 98 + }, + { + "severity": "info", + "line_from": 109, + "line_to": 109, + "type": "DeprecatedClass", + "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Form\\SubmitButtonFunction is marked deprecated", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", + "snippet": " new SubmitButtonFunction(),", + "selected_text": "new SubmitButtonFunction()", + "error_level": 2, + "shortcode": 98 + } + ] +} \ No newline at end of file From 716edeb50f8ce227cd4cfbf073d89b508b22f439 Mon Sep 17 00:00:00 2001 From: Dmitry Lymarenko Date: Tue, 30 Jun 2020 17:58:46 +0300 Subject: [PATCH 150/304] CC-10084 Updated composer --- src/Spryker/Zed/Gui/Presentation/Layout/layout.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index 595ec120..b0df2259 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -88,7 +88,7 @@
    From aeadd071e255f7bf03c5d4a2f1b8a4724c782cde Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 2 Jul 2020 17:00:42 +0200 Subject: [PATCH 151/304] TE-6865 Fix deprecation messages. --- .../Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php | 2 +- .../Plugin/Twig/Buttons/Form/SubmitButtonFunction.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php index 79a68905..2a6c69ae 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php @@ -10,7 +10,7 @@ use Spryker\Shared\Twig\TwigFunction; /** - * @deprecated Use 'Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupTwigPlugin} instead. */ class ButtonGroupFunction extends TwigFunction { diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php index 193ce370..3115327d 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php @@ -11,7 +11,7 @@ use Twig\Environment; /** - * @deprecated `Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Form\SubmitButtonTwigPlugin` instead. + * @deprecated Use {@link \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\Form\SubmitButtonTwigPlugin} instead. */ class SubmitButtonFunction extends TwigFunction { From 18e75dfb45002600cb74f3216a7777864f2ded8c Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Fri, 3 Jul 2020 17:36:11 +0300 Subject: [PATCH 152/304] CC-10134: Strange effect on Zed menu background by click on Edit Placeholders for demo CMS blocks --- assets/Zed/sass/_custom.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index af34b397..39964026 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -258,3 +258,7 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { display: inline-block; vertical-align: top; } + +.navbar-default .metismenu > li { + background-color: #2f4050; +} From 7820f5eaf0dc9dc268b1400b9f3743d1a0b82611 Mon Sep 17 00:00:00 2001 From: maslov Date: Wed, 8 Jul 2020 15:41:05 +0300 Subject: [PATCH 153/304] CC-10136: Updated dependencies --- assets/Zed/package-lock.json | 111 ++++++++++++----------------------- assets/Zed/package.json | 2 +- 2 files changed, 38 insertions(+), 75 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 4d9a0ca8..7a9f4391 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -25,26 +25,19 @@ "integrity": "sha1-lWpHK9Kw+Uyw9zBoChwzZxzX+6M=" }, "datatables.net": { - "version": "1.10.19", - "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz", - "integrity": "sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA==", + "version": "1.10.21", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.21.tgz", + "integrity": "sha512-/bSZtxmf3GTpYcvEmwZ8q26I1yhSx8qklR2B+s1K8+/51UW/zc2zTYwJMqr/Z+iCYixAc00ildj4g2x0Qamolw==", "requires": { "jquery": ">=1.7" - }, - "dependencies": { - "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" - } } }, "datatables.net-bs": { - "version": "1.10.19", - "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-1.10.19.tgz", - "integrity": "sha512-5gxoI2n+duZP06+4xVC2TtH6zcY369/TRKTZ1DdSgDcDUl4OYQsrXCuaLJmbVzna/5Y5lrMmK7CxgvYgIynICA==", + "version": "1.10.21", + "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-1.10.21.tgz", + "integrity": "sha512-4mpesFXNEkLlQET3IDLclLz95Xit4Kp/jHcOM2X0nc/ijDfO3qJk3ehZ+NSEAkXZDge6ZtY5Zxq2O90ISiIjwQ==", "requires": { - "datatables.net": "1.10.19", + "datatables.net": "1.10.21", "jquery": ">=1.7" } }, @@ -55,13 +48,6 @@ "requires": { "datatables.net": ">=1.10.9", "jquery": ">=1.7" - }, - "dependencies": { - "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" - } } }, "datatables.net-buttons-bs": { @@ -72,59 +58,43 @@ "datatables.net-bs": ">=1.10.9", "datatables.net-buttons": ">=1.0.3", "jquery": ">=1.7" - }, - "dependencies": { - "datatables.net-bs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-2.1.1.tgz", - "integrity": "sha1-cEEIlyiRlJ0JS/RPU9BlTZ/ue84=", - "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" - } - }, - "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" - } } }, "datatables.net-responsive": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.2.3.tgz", - "integrity": "sha512-8D6VtZcyuH3FG0Hn5A4LPZQEOX3+HrRFM7HjpmsQc/nQDBbdeBLkJX4Sh/o1nzFTSneuT1Wh/lYZHVPpjcN+Sw==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.2.5.tgz", + "integrity": "sha512-AuF28BJRQWfke0cwZwgJB5+WHgoDCDAnW59TJWX4JAXYes3iFrJA6mNHWw46Up3bqUJVI2ZxJoKTGpoEHm5hNA==", "requires": { "datatables.net": "^1.10.15", "jquery": ">=1.7" } }, "datatables.net-responsive-bs": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.2.3.tgz", - "integrity": "sha512-tQZiqqjXGlTiRBlBP3lON7ULThiMc0sLh4hT5xLaHRWBniaQkIMNhIzX9RRybWjOEQcHS7LA/ZiwE2S7rYqq9w==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.2.5.tgz", + "integrity": "sha512-O3tIWZUiFtdHm5CkQ9I1vaQBQ74cchOq19JkYzWykkwP5mzW+tKuHINcajxDL5GJo8WXejG9BSNq6ZRK1BQkBw==", "requires": { "datatables.net-bs": "^1.10.15", - "datatables.net-responsive": "2.2.3", + "datatables.net-responsive": "2.2.5", "jquery": ">=1.7" } }, "datatables.net-select": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.3.0.tgz", - "integrity": "sha512-sj72BM+Sx2n9mTHQjPiGMrGUoAVA1PCGmD+vEuAedhlDX1PAHcnqsOnG37eWrpqIsOQR/ZcSuE8IkU7gmiQkew==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.3.1.tgz", + "integrity": "sha512-PeVd/hlAX58QzL0+mGvxnXP7ylLtzZMeAots/uZkQi+6c/KI6JuP8LCJoEMHAsSjQM/BnG7Uw8E1YGOz1tZpQQ==", "requires": { "datatables.net": "^1.10.15", "jquery": ">=1.7" } }, "datatables.net-select-bs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.3.0.tgz", - "integrity": "sha512-MW9mmd2Hw6N6XFfGy0q5W/2XV7gP/CaGCtcReSiBu9McQNGJE2S06NkSfsKl+yoiW9mRQUPnbYa/Af4ykskFqg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.3.1.tgz", + "integrity": "sha512-CbZTZoBjaALftqCHWRrrlVNn2w472vXRsn5myM/wVyVkFh4S8W8QRAkP6jEkfxdmXsXiDidXg03fR5ksVEbebw==", "requires": { "datatables.net-bs": "^1.10.15", - "datatables.net-select": "1.3.0", + "datatables.net-select": "1.3.1", "jquery": ">=1.7" } }, @@ -139,14 +109,14 @@ "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" }, "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" }, "jquery-migrate": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.0.1.tgz", - "integrity": "sha1-FB3jq/5tMBuqpBMLDse5qDmEXnI=" + "integrity": "sha512-NYlhcFnRh4Bv9jvadPlcAKQdVGRE0+TSgFYxQ+ZnCxUUHbwd+SjbOg+Xvu1Oea9mpQJ+2VB1eCfcBORWNQsHaA==" }, "jquery-mousewheel": { "version": "3.1.13", @@ -159,18 +129,11 @@ "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE=" }, "jstree": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.6.tgz", - "integrity": "sha512-60yWq6batzrakamfhJKB/pQsR6E7O27pafHr5p/klEE3rDQjGY0zxV+C8+ljPVw90LmUJyUXEIuNbeQJB2xqcg==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.10.tgz", + "integrity": "sha512-TDhwTy24ZKCVei0gLRxnH5PQuX77nqlG7bhQh+UDTeOxC2xdhDrS1x7YtbjLVlSxmH7USnA/WIeVOGN/m3D0QA==", "requires": { "jquery": ">=1.9.1" - }, - "dependencies": { - "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" - } } }, "metismenu": { @@ -179,25 +142,25 @@ "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, "nestable": { - "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", - "from": "git+https://git@github.com/ilmente/Nestable.git#v1.1.1" + "version": "git+https://github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", + "from": "git+https://github.com/ilmente/Nestable.git#v1.1.1" }, "pace": { - "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", - "from": "git+https://git@github.com/hubspot/pace.git#v1.0.2" + "version": "git+https://github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", + "from": "git+https://github.com/hubspot/pace.git#v1.0.2" }, "select2": { - "version": "git+https://git@github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", - "from": "git+https://git@github.com/select2/select2.git#4.0.2", + "version": "git+https://github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", + "from": "git+https://github.com/select2/select2.git#4.0.2", "requires": { "almond": "~0.3.1", "jquery-mousewheel": "~3.1.13" } }, "summernote": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.11.tgz", - "integrity": "sha512-j+YbSK2ox1RZGeD5E/+6k57bvqhQLxiaazSj9zHBXOJnCuc0LZPSIGwyTlMaAGWpo6FlkXfjGS93hEDkV3zVJw==" + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz", + "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" }, "sweetalert": { "version": "1.1.3", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 743a5e6d..92bc8563 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -16,7 +16,7 @@ "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "font-awesome": "~4.7.0", - "jquery": "~3.4.1", + "jquery": "~3.5.0", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", "jstree": "~3.3.3", From 3dd7e5422cc7f625a952cffe25f4fd9717590078 Mon Sep 17 00:00:00 2001 From: maslov Date: Tue, 21 Jul 2020 14:36:44 +0300 Subject: [PATCH 154/304] CC-10136: increase version of jQuery --- assets/Zed/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 92bc8563..56d18dbe 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -16,7 +16,7 @@ "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "font-awesome": "~4.7.0", - "jquery": "~3.5.0", + "jquery": "~3.5.1", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", "jstree": "~3.3.3", From dbb5895bd66c1e42448241d91aaa4990944fa410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Mon, 9 Dec 2019 08:15:07 +0000 Subject: [PATCH 155/304] TE-4571 Added new ZedBootstrap, extracted FactoryResolverAwareTrait and fixed bug in RouterListenerEventDispatcherPlugin. TE-4571 Make spryker/silex optional in all modules, updated dependency finder to return composer name of probably not installed module. TE-4571 Refactored tests infrastructure for Zed. TE-4571 Introduced ContainerProxy, GlobalContainer and removed Pimple (Plugin) usages. TE-4571 Added new ConsoleBootstrap, added new Zed CLI entry point, refactored Yves ConsoleBootstrap, extracted configuration fo debug mode. TE-4571 Deprecated spryker/silex. TE-4571 Added Elector in console to determine which ConsoleBootstrap to use. TE-4571 Replaced getApplication() calls with Container::get() calls. TE-4571 Updated psalm-report. --- .../Gui/Communication/Form/AbstractForm.php | 11 ++++-- .../Extension/NoValidateTypeExtension.php | 12 +++++++ .../Gui/Communication/Table/AbstractTable.php | 35 +++++++++++++++---- 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php b/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php index d3c959dc..c920da69 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php @@ -8,14 +8,19 @@ namespace Spryker\Zed\Gui\Communication\Form; use Spryker\Shared\Gui\Form\AbstractForm as SharedAbstractForm; +use Spryker\Shared\Kernel\Container\GlobalContainer; use Spryker\Zed\Gui\Communication\Plugin\ConstraintsPlugin; -use Spryker\Zed\Kernel\Communication\Plugin\Pimple; /** * @deprecated Use {@link \Spryker\Zed\Kernel\Communication\Form\AbstractType} for Zed instead. */ abstract class AbstractForm extends SharedAbstractForm { + /** + * @uses \Spryker\Zed\Http\Communication\Plugin\Application\HttpApplicationPlugin::SERVICE_REQUEST_STACK + */ + protected const SERVICE_REQUEST_STACK = 'request_stack'; + /** * @var \Symfony\Component\HttpFoundation\Request */ @@ -54,7 +59,9 @@ public function setRequest($request) protected function getRequest() { if ($this->request === null) { - $this->request = (new Pimple())->getApplication()['request']; + /** @var \Symfony\Component\HttpFoundation\RequestStack $requestStack */ + $requestStack = (new GlobalContainer())->get(static::SERVICE_REQUEST_STACK); + $this->request = $requestStack->getCurrentRequest(); } return $this->request; diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php index a6d35577..6b68e1b6 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php @@ -39,4 +39,16 @@ public function getExtendedType() { return Form::class; } + + /** + * {@inheritDoc} + * + * @phpstan-return class-string<\Symfony\Component\Form\Form>[] + * + * @return string[] + */ + public static function getExtendedTypes(): iterable + { + return [Form::class]; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 852ece19..e10d9857 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -15,8 +15,9 @@ use Propel\Runtime\Propel; use Spryker\Service\UtilSanitize\UtilSanitizeService; use Spryker\Service\UtilText\Model\Url\Url; +use Spryker\Shared\Kernel\Container\GlobalContainer; +use Spryker\Shared\Kernel\Container\GlobalContainerInterface; use Spryker\Zed\Gui\Communication\Form\DeleteForm; -use Spryker\Zed\Kernel\Communication\Plugin\Pimple; use Spryker\Zed\PropelOrm\Business\Runtime\ActiveQuery\Criteria; use Symfony\Component\Form\FormInterface; use Twig\Environment; @@ -36,6 +37,16 @@ abstract class AbstractTable public const SORT_BY_DIRECTION = 'dir'; public const URL_ANCHOR = '#'; + /** + * @uses \Spryker\Zed\Twig\Communication\Plugin\Application\TwigApplicationPlugin::SERVICE_TWIG + */ + public const SERVICE_TWIG = 'twig'; + + /** + * @uses \Spryker\Zed\Form\Communication\Plugin\Application\FormApplicationPlugin::SERVICE_FORM_FACTORY + */ + public const SERVICE_FORM_FACTORY = 'form.factory'; + /** * Defines delete form name suffix allowing to avoid non-unique attributes (e.g. form name or id) for delete forms on one page. * It is recommended to fill parameter $options in AbstractTable:generateRemoveButton() to avoid non-unique id warning in browser console. @@ -178,8 +189,13 @@ protected function init() */ protected function getRequest() { - return (new Pimple()) - ->getApplication()['request']; + $container = $this->getApplicationContainer(); + + if ($container->has('request')) { + return $container->get('request'); + } + + return $container->get('request_stack')->getCurrentRequest(); } /** @@ -388,8 +404,7 @@ public function setTableIdentifier($tableIdentifier) private function getTwig() { /** @var \Twig\Environment|null $twig */ - $twig = (new Pimple()) - ->getApplication()['twig']; + $twig = $this->getApplicationContainer()->get(static::SERVICE_TWIG); if ($twig === null) { throw new LogicException('Twig environment not set up.'); @@ -405,6 +420,14 @@ private function getTwig() return $twig; } + /** + * @return \Spryker\Shared\Kernel\Container\GlobalContainerInterface + */ + protected function getApplicationContainer(): GlobalContainerInterface + { + return new GlobalContainer(); + } + /** * @return string[] */ @@ -972,7 +995,7 @@ protected function createDeleteForm(array $options, string $name = ''): FormInte */ protected function getFormFactory() { - return (new Pimple())->getApplication()['form.factory']; + return $this->getApplicationContainer()->get(static::SERVICE_FORM_FACTORY); } /** From a497cbd410fb3c596bea585b09ed1cead5dbdc94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Thu, 23 Jul 2020 09:27:49 +0000 Subject: [PATCH 156/304] TE-4571 Updated composer constraints. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index fa39bc0b..98d683d4 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "require": { "php": ">=7.2", "spryker/form-extension": "^1.0.0", - "spryker/kernel": "^3.30.0", + "spryker/kernel": "^3.52.0", "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", "spryker/twig": "^3.0.0", From ca5d0afa189ac2d844cdff37f727acd5f99f116a Mon Sep 17 00:00:00 2001 From: galitsky Date: Fri, 24 Jul 2020 17:42:47 +0300 Subject: [PATCH 157/304] TE-7073: getRootNode polyfill --- assets/Zed/js/modules/commons.js | 6 ++++++ assets/Zed/package-lock.json | 17 +++++++++++------ assets/Zed/package.json | 1 + 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index 140e844b..a591fae9 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -8,6 +8,12 @@ // polyfill for Promise() // extend webpack 2 support on IE11 and PhantomJS require('es6-promise/auto'); +const getRootNode = require('get-root-node-polyfill'); +const isImplemented = require('get-root-node-polyfill/is-implemented'); + +if (!isImplemented()) { + Node.prototype.getRootNode = getRootNode; +} // external dependencies require('jquery'); diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 4d9a0ca8..74094355 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -138,6 +138,11 @@ "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" }, + "get-root-node-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-root-node-polyfill/-/get-root-node-polyfill-1.0.0.tgz", + "integrity": "sha512-AzucsG1DdepagLF8tkxfjUqn3cCQ63MgH/tBWwPSy0BIDt8iLFZYDwnTxA08d+zdgL8l2dkPdZDe+Qkd+RMl9Q==" + }, "jquery": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", @@ -179,16 +184,16 @@ "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, "nestable": { - "version": "git+https://git@github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", - "from": "git+https://git@github.com/ilmente/Nestable.git#v1.1.1" + "version": "git+https://github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", + "from": "git+https://github.com/ilmente/Nestable.git#v1.1.1" }, "pace": { - "version": "git+https://git@github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", - "from": "git+https://git@github.com/hubspot/pace.git#v1.0.2" + "version": "git+https://github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", + "from": "git+https://github.com/hubspot/pace.git#v1.0.2" }, "select2": { - "version": "git+https://git@github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", - "from": "git+https://git@github.com/select2/select2.git#4.0.2", + "version": "git+https://github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", + "from": "git+https://github.com/select2/select2.git#4.0.2", "requires": { "almond": "~0.3.1", "jquery-mousewheel": "~3.1.13" diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 743a5e6d..00705797 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -16,6 +16,7 @@ "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "font-awesome": "~4.7.0", + "get-root-node-polyfill": "^1.0.0", "jquery": "~3.4.1", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", From 8f8a9ec2d9d533604c5da704d5af82aad5128f6e Mon Sep 17 00:00:00 2001 From: gechetspr Date: Wed, 29 Jul 2020 20:14:04 +0300 Subject: [PATCH 158/304] Removed ignored propel errors --- phpstan.neon | 1 - 1 file changed, 1 deletion(-) diff --git a/phpstan.neon b/phpstan.neon index 28ebe510..3390d717 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,4 +1,3 @@ parameters: ignoreErrors: - '#Function twig_escape_filter not found.#' - - '#Parameter \#1 \$attribute of method .+ConnectionInterface::getAttribute\(\) expects string, int given.#' From 5d842f14c1be21cff535c2fbd8c196b108581390 Mon Sep 17 00:00:00 2001 From: Eugene Galitsky Date: Mon, 3 Aug 2020 10:44:58 +0300 Subject: [PATCH 159/304] Update Bundles/Gui/assets/Zed/package.json Co-authored-by: Alexander Kovalenko --- assets/Zed/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 00705797..56f309a5 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -16,7 +16,7 @@ "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "font-awesome": "~4.7.0", - "get-root-node-polyfill": "^1.0.0", + "get-root-node-polyfill": "~1.0.0", "jquery": "~3.4.1", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", From 1a4b651e0df8026c2ce3c50988765c9f07cb81c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Tue, 28 Jul 2020 09:52:28 +0000 Subject: [PATCH 160/304] TE-7003 Added BC funcionality. --- .../Form/Type/Extension/SanitizeXssTypeExtension.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php index b5729c2d..0fd90be2 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php @@ -45,6 +45,14 @@ public function getExtendedTypes(): iterable ]; } + /** + * @return string + */ + public function getExtendedType(): string + { + return TextType::class; + } + /** * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver * From 2f33e8282c53f1e2e6fe17bf7e67548502764744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Wed, 29 Jul 2020 08:04:17 +0000 Subject: [PATCH 161/304] TE-7003 Fixed some constraints, ignored error patterns. --- .../Form/Type/Extension/SanitizeXssTypeExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php index 0fd90be2..6b96b721 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php @@ -50,7 +50,7 @@ public function getExtendedTypes(): iterable */ public function getExtendedType(): string { - return TextType::class; + return TextareaType::class; } /** From 56d94b09285b1039480bfe51f8fe70c31d4f3c56 Mon Sep 17 00:00:00 2001 From: gechetspr Date: Fri, 7 Aug 2020 15:54:43 +0300 Subject: [PATCH 162/304] TE-5394 ajusted code to be compatible with twig v3 --- .../Plugin/Twig/AssetsPathFunction.php | 38 --------- .../Twig/Buttons/AbstractButtonFunction.php | 66 -------------- .../Action/AbstractActionButtonFunction.php | 18 ---- .../Action/BackActionButtonFunction.php | 38 --------- .../Action/CreateActionButtonFunction.php | 38 --------- .../Action/EditActionButtonFunction.php | 38 --------- .../Action/RemoveActionButtonFunction.php | 38 --------- .../Action/ViewActionButtonFunction.php | 38 --------- .../Twig/Buttons/ButtonGroupFunction.php | 72 ---------------- .../Buttons/Form/SubmitButtonFunction.php | 52 ------------ .../Buttons/Table/AbstractTableFunction.php | 18 ---- .../Buttons/Table/BackTableButtonFunction.php | 38 --------- .../Table/CreateTableButtonFunction.php | 38 --------- .../Buttons/Table/EditTableButtonFunction.php | 38 --------- .../Table/RemoveTableButtonFunction.php | 38 --------- .../Buttons/Table/ViewTableButtonFunction.php | 38 --------- .../Plugin/Twig/ListGroupFunction.php | 85 ------------------- .../Plugin/Twig/ModalFunction.php | 58 ------------- .../Plugin/Twig/PanelFunction.php | 79 ----------------- .../Plugin/Twig/TabsFunction.php | 60 ------------- .../Plugin/Twig/UrlDecodeFunction.php | 34 -------- .../Communication/Plugin/Twig/UrlFunction.php | 38 --------- .../Form/Theme/form-row-with-help-block.twig | 4 +- .../Presentation/Partials/wave-loader.twig | 4 +- 24 files changed, 4 insertions(+), 1002 deletions(-) delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/AbstractButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlFunction.php diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php deleted file mode 100644 index 33b997ea..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/AssetsPathFunction.php +++ /dev/null @@ -1,38 +0,0 @@ -getIcon(); - } - - if (!array_key_exists(ButtonUrlGenerator::BUTTON_CLASS, $options)) { - $options[ButtonUrlGenerator::BUTTON_CLASS] = $this->getButtonClass(); - } - - if (!array_key_exists(ButtonUrlGenerator::DEFAULT_CSS_CLASSES, $options)) { - $options[ButtonUrlGenerator::DEFAULT_CSS_CLASSES] = static::DEFAULT_CSS_CLASSES; - } - - $button = $this->createButtonUrlGenerator($url, $title, $options); - - return $button->generate(); - }; - } - - /** - * @param string $url - * @param string $title - * @param array $options - * - * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonUrlGenerator - */ - protected function createButtonUrlGenerator($url, $title, array $options) - { - $button = new ButtonUrlGenerator($url, $title, $options); - - return $button; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php deleted file mode 100644 index ddb10a12..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php +++ /dev/null @@ -1,18 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'backActionButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php deleted file mode 100644 index 3f0d17a7..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php +++ /dev/null @@ -1,38 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'createActionButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php deleted file mode 100644 index cb91d666..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php +++ /dev/null @@ -1,38 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'editActionButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php deleted file mode 100644 index 0c6c531c..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php +++ /dev/null @@ -1,38 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'removeActionButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php deleted file mode 100644 index 7e1fae89..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php +++ /dev/null @@ -1,38 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'viewActionButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php deleted file mode 100644 index 2a6c69ae..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/ButtonGroupFunction.php +++ /dev/null @@ -1,72 +0,0 @@ -getDefaultIcon(); - } - - if (!array_key_exists(ButtonGroupUrlGenerator::BUTTON_CLASS, $options)) { - $options[ButtonGroupUrlGenerator::BUTTON_CLASS] = $this->getDefaultButtonClass(); - } - - $button = $this->createButtonUrlGenerator($buttons, $title, $options); - - return $button->generate(); - }; - } - - /** - * @return string - */ - protected function getDefaultButtonClass() - { - return 'btn-view'; - } - - /** - * @return string - */ - protected function getDefaultIcon() - { - return ' '; - } - - /** - * @param array $buttons - * @param string $title - * @param array $options - * - * @return \Spryker\Zed\Gui\Communication\Plugin\Twig\Buttons\ButtonGroupUrlGenerator - */ - protected function createButtonUrlGenerator(array $buttons, $title, array $options) - { - return new ButtonGroupUrlGenerator($buttons, $title, $options); - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'groupActionButtons'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php deleted file mode 100644 index 3115327d..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Form/SubmitButtonFunction.php +++ /dev/null @@ -1,52 +0,0 @@ -render( - '@Gui/Form/button/submit_button.twig', - [ - 'value' => $value, - 'attr' => $attr, - ] - ); - }; - } - - /** - * @return array - */ - protected function getOptions() - { - $options = parent::getOptions(); - $options['needs_environment'] = true; - - return $options; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php deleted file mode 100644 index db7ded7e..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php +++ /dev/null @@ -1,18 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'backTableButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php deleted file mode 100644 index 6b329d1c..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php +++ /dev/null @@ -1,38 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'createTableButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php deleted file mode 100644 index 83ebb00c..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php +++ /dev/null @@ -1,38 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'editTableButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php deleted file mode 100644 index a26eccc9..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php +++ /dev/null @@ -1,38 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'removeTableButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php deleted file mode 100644 index 81831d01..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php +++ /dev/null @@ -1,38 +0,0 @@ - '; - } - - /** - * @return string - */ - protected function getFunctionName() - { - return 'viewTableButton'; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php deleted file mode 100644 index 437ea079..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ListGroupFunction.php +++ /dev/null @@ -1,85 +0,0 @@ -'; - - foreach ($items as $item) { - $class = ''; - $target = ''; - $data = ''; - $extras = ''; - - if (array_key_exists('class', $item)) { - $class = ' ' . $item['class']; - } - - if (array_key_exists('target', $item) && !is_array($item['target'])) { - $target = ' target="' . $target . '"'; - } - - if (array_key_exists('extras', $item) && is_array($item['extras'])) { - foreach ($item['extras'] as $key => $value) { - if (is_array($value)) { - $value = json_encode($value); - } - $extras .= ' ' . $key . '="' . htmlentities($value) . '"'; - } - } - - if (array_key_exists('data', $item) && is_array($item['data'])) { - foreach ($item['data'] as $key => $value) { - if (is_array($value)) { - $value = json_encode($value); - } - $data .= ' data-' . $key . '="' . htmlentities($value); - } - } - - $html .= ''; - $html .= $item['label']; - $html .= ''; - } - - $html .= ''; - } else { - $html = '
      '; - - foreach ($items as $item) { - $html .= '
    • ' . $item; - } - - $html .= '
    '; - } - - return $html; - }; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php deleted file mode 100644 index d0ac03b1..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/ModalFunction.php +++ /dev/null @@ -1,58 +0,0 @@ - $value) { - $extras .= ' ' . $key . '="' . htmlentities($value) . '"'; - } - } - - $html = '
    '; - $html .= ''; - $html .= '
    '; - - return $html; - }; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php deleted file mode 100644 index 2817c342..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php +++ /dev/null @@ -1,79 +0,0 @@ - 'default', - 'id' => false, - 'noWrap' => false, - 'collapsable' => false, - 'collapsed' => false, - ]; - - $options = array_merge($defaultOptions, (array)$options); - - $collapsable = ''; - $id = ''; - - if ($options['collapsable']) { - $collapsable = ' data-collapsable'; - - if ($options['collapsed']) { - $options['class'] .= ' is:collapsed'; - } - } - - if ($options['id']) { - $id = ' id="' . $options['id'] . '"'; - } - - $html = '
    '; - - if ($title) { - $html .= '
    '; - $html .= '

    ' . $title . '

    '; - $html .= '
    '; - } - - if ($options['noWrap']) { - $html .= $content; - } else { - $html .= '
    ' . $content . '
    '; - } - - if ($footer) { - $html .= '
    ' . $footer . '
    '; - } - - $html .= '
    '; - - return $html; - }; - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php deleted file mode 100644 index 6d161d8d..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/TabsFunction.php +++ /dev/null @@ -1,60 +0,0 @@ -render('@Gui/Tabs/tabs.twig', $context); - } -} diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php deleted file mode 100644 index a1eb96ce..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlDecodeFunction.php +++ /dev/null @@ -1,34 +0,0 @@ -buildEscaped(); - - return $html; - }; - } -} diff --git a/src/Spryker/Zed/Gui/Presentation/Form/Theme/form-row-with-help-block.twig b/src/Spryker/Zed/Gui/Presentation/Form/Theme/form-row-with-help-block.twig index 70f29fbf..13fb6f9c 100644 --- a/src/Spryker/Zed/Gui/Presentation/Form/Theme/form-row-with-help-block.twig +++ b/src/Spryker/Zed/Gui/Presentation/Form/Theme/form-row-with-help-block.twig @@ -1,5 +1,5 @@ {% block form_row %} - {% spaceless %} + {% apply spaceless %} {{ form_label(form) }} {{ form_widget(form) }} {% for attrname,attrvalue in attr %} @@ -8,5 +8,5 @@ {% endif %} {% endfor %} {{ form_errors(form) }} - {% endspaceless %} + {% endapply %} {% endblock form_row %} diff --git a/src/Spryker/Zed/Gui/Presentation/Partials/wave-loader.twig b/src/Spryker/Zed/Gui/Presentation/Partials/wave-loader.twig index eac4f2dd..9ef0b763 100644 --- a/src/Spryker/Zed/Gui/Presentation/Partials/wave-loader.twig +++ b/src/Spryker/Zed/Gui/Presentation/Partials/wave-loader.twig @@ -6,9 +6,9 @@ {% endfor %} - {% spaceless %} + {% apply spaceless %}
    - {% endspaceless %} + {% endapply %}
    From 5bbc090ccc479120265a754690ded43bf6541d10 Mon Sep 17 00:00:00 2001 From: Dima Aseev Date: Mon, 10 Aug 2020 16:19:09 +0300 Subject: [PATCH 163/304] TE-7073: Added phantomjs-polyfill to dev-dependencies. --- assets/Zed/package-lock.json | 6 ++++++ assets/Zed/package.json | 3 +++ 2 files changed, 9 insertions(+) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 74094355..21b4d3bd 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -191,6 +191,12 @@ "version": "git+https://github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", "from": "git+https://github.com/hubspot/pace.git#v1.0.2" }, + "phantomjs-polyfill": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/phantomjs-polyfill/-/phantomjs-polyfill-0.0.2.tgz", + "integrity": "sha1-jGpxY+m8j9n/2+fWBctTUvn7iR4=", + "dev": true + }, "select2": { "version": "git+https://github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", "from": "git+https://github.com/select2/select2.git#4.0.2", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 56f309a5..bcdd785b 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -27,5 +27,8 @@ "select2": "https://github.com/select2/select2.git#4.0.2", "summernote": "^0.8.11", "sweetalert": "~1.1.3" + }, + "devDependencies": { + "phantomjs-polyfill": "0.0.2" } } From 483c6547fb3e9a05bbd01bff607d114fdb2641d0 Mon Sep 17 00:00:00 2001 From: Dima Aseev Date: Mon, 10 Aug 2020 16:30:56 +0300 Subject: [PATCH 164/304] TE-7073: Reset changes. --- assets/Zed/js/modules/commons.js | 3 +-- assets/Zed/package-lock.json | 6 ------ assets/Zed/package.json | 3 --- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index a591fae9..0b14ca04 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -8,11 +8,10 @@ // polyfill for Promise() // extend webpack 2 support on IE11 and PhantomJS require('es6-promise/auto'); -const getRootNode = require('get-root-node-polyfill'); const isImplemented = require('get-root-node-polyfill/is-implemented'); if (!isImplemented()) { - Node.prototype.getRootNode = getRootNode; + Node.prototype.getRootNode = require('get-root-node-polyfill'); } // external dependencies diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 21b4d3bd..74094355 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -191,12 +191,6 @@ "version": "git+https://github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", "from": "git+https://github.com/hubspot/pace.git#v1.0.2" }, - "phantomjs-polyfill": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/phantomjs-polyfill/-/phantomjs-polyfill-0.0.2.tgz", - "integrity": "sha1-jGpxY+m8j9n/2+fWBctTUvn7iR4=", - "dev": true - }, "select2": { "version": "git+https://github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", "from": "git+https://github.com/select2/select2.git#4.0.2", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index bcdd785b..56f309a5 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -27,8 +27,5 @@ "select2": "https://github.com/select2/select2.git#4.0.2", "summernote": "^0.8.11", "sweetalert": "~1.1.3" - }, - "devDependencies": { - "phantomjs-polyfill": "0.0.2" } } From a21513fb94df790b9d1e37586be5e98fcc022cc1 Mon Sep 17 00:00:00 2001 From: galitsky Date: Mon, 10 Aug 2020 17:04:29 +0300 Subject: [PATCH 165/304] TE-7073: fix getRootNode --- assets/Zed/js/modules/commons.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index 0b14ca04..f781ab21 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -8,10 +8,13 @@ // polyfill for Promise() // extend webpack 2 support on IE11 and PhantomJS require('es6-promise/auto'); -const isImplemented = require('get-root-node-polyfill/is-implemented'); -if (!isImplemented()) { - Node.prototype.getRootNode = require('get-root-node-polyfill'); +if (!Object.prototype.hasOwnProperty.call(Node.prototype, 'getRootNode')) { + Node.prototype.getRootNode = function(opt) { + var composed = typeof opt === 'object' && Boolean(opt.composed); + + return composed ? getShadowIncludingRoot(this) : getRoot(this); + }; } // external dependencies From 57cc5f6b6e713f3154e698ecc0629d363fe18654 Mon Sep 17 00:00:00 2001 From: Dima Aseev Date: Mon, 10 Aug 2020 18:14:22 +0300 Subject: [PATCH 166/304] TE-7073: Revert js changes, check travis tests. --- assets/Zed/js/modules/commons.js | 8 -------- assets/Zed/package-lock.json | 5 ----- assets/Zed/package.json | 1 - 3 files changed, 14 deletions(-) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index f781ab21..140e844b 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -9,14 +9,6 @@ // extend webpack 2 support on IE11 and PhantomJS require('es6-promise/auto'); -if (!Object.prototype.hasOwnProperty.call(Node.prototype, 'getRootNode')) { - Node.prototype.getRootNode = function(opt) { - var composed = typeof opt === 'object' && Boolean(opt.composed); - - return composed ? getShadowIncludingRoot(this) : getRoot(this); - }; -} - // external dependencies require('jquery'); require('jquery-migrate/dist/jquery-migrate.min'); diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 74094355..0857979f 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -138,11 +138,6 @@ "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" }, - "get-root-node-polyfill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-root-node-polyfill/-/get-root-node-polyfill-1.0.0.tgz", - "integrity": "sha512-AzucsG1DdepagLF8tkxfjUqn3cCQ63MgH/tBWwPSy0BIDt8iLFZYDwnTxA08d+zdgL8l2dkPdZDe+Qkd+RMl9Q==" - }, "jquery": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 56f309a5..743a5e6d 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -16,7 +16,6 @@ "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "font-awesome": "~4.7.0", - "get-root-node-polyfill": "~1.0.0", "jquery": "~3.4.1", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", From 47ad13708c5d207ad247d15bae935d4ed2fd76a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Mon, 10 Aug 2020 19:36:40 +0200 Subject: [PATCH 167/304] TE-7168 /master remove deprecation bootstrap configuration in codeception yml (#7447) * Removed deprecated settings: bootstrap configuration. * TE-7168 removed whitelist setting. --- codeception.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/codeception.yml b/codeception.yml index cc36ed70..66de119f 100644 --- a/codeception.yml +++ b/codeception.yml @@ -1,7 +1,6 @@ namespace: Gui include: - tests/SprykerTest/Zed/Gui - paths: tests: tests log: tests/_output @@ -9,14 +8,10 @@ paths: support: tests/_support envs: tests/_envs settings: - bootstrap: _bootstrap.php suite_class: \PHPUnit\Framework\TestSuite colors: true memory_limit: 1024M log: true extensions: - enabled: - - Codeception\Extension\Phantoman - config: - Codeception\Extension\Phantoman: - suites: ['Presentation'] + enabled: [Codeception\Extension\Phantoman] + config: { Codeception\Extension\Phantoman: { suites: [Presentation] } } From 507e9091f6ebc467cd1012f6cc00bcf93e46356b Mon Sep 17 00:00:00 2001 From: gechetspr Date: Tue, 11 Aug 2020 09:46:19 +0300 Subject: [PATCH 168/304] TE-5394 updated dependency --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 98d683d4..0e3edca7 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ "spryker/kernel": "^3.52.0", "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", - "spryker/twig": "^3.0.0", + "spryker/twig": "^3.0.0 || ^4.0.0", "spryker/twig-extension": "^1.0.0", "spryker/util-sanitize": "^2.0.0", "spryker/util-sanitize-xss": "^1.0.0", From 63081cc81ff4786e60c2c5908d50dd93741d7d08 Mon Sep 17 00:00:00 2001 From: galitsky Date: Tue, 11 Aug 2020 14:27:36 +0300 Subject: [PATCH 169/304] TE-7073: getRootNode revert --- assets/Zed/js/modules/commons.js | 7 +++++++ assets/Zed/package-lock.json | 5 +++++ assets/Zed/package.json | 1 + 3 files changed, 13 insertions(+) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index 140e844b..f3d0f071 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -9,6 +9,13 @@ // extend webpack 2 support on IE11 and PhantomJS require('es6-promise/auto'); +var getRootNode = require('get-root-node-polyfill'); +var isImplemented = require('get-root-node-polyfill/is-implemented'); + +if (!isImplemented()) { + Node.prototype.getRootNode = getRootNode; +} + // external dependencies require('jquery'); require('jquery-migrate/dist/jquery-migrate.min'); diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 0857979f..74094355 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -138,6 +138,11 @@ "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" }, + "get-root-node-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-root-node-polyfill/-/get-root-node-polyfill-1.0.0.tgz", + "integrity": "sha512-AzucsG1DdepagLF8tkxfjUqn3cCQ63MgH/tBWwPSy0BIDt8iLFZYDwnTxA08d+zdgL8l2dkPdZDe+Qkd+RMl9Q==" + }, "jquery": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 743a5e6d..00705797 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -16,6 +16,7 @@ "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "font-awesome": "~4.7.0", + "get-root-node-polyfill": "^1.0.0", "jquery": "~3.4.1", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", From 329275485a4c4c1cf385927f909ac160e1465999 Mon Sep 17 00:00:00 2001 From: galitsky Date: Tue, 11 Aug 2020 16:11:09 +0300 Subject: [PATCH 170/304] TE-7073: code styles --- assets/Zed/js/modules/commons.js | 3 +-- assets/Zed/package.json | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index f3d0f071..8b83514c 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -9,11 +9,10 @@ // extend webpack 2 support on IE11 and PhantomJS require('es6-promise/auto'); -var getRootNode = require('get-root-node-polyfill'); var isImplemented = require('get-root-node-polyfill/is-implemented'); if (!isImplemented()) { - Node.prototype.getRootNode = getRootNode; + Node.prototype.getRootNode = require('get-root-node-polyfill'); } // external dependencies diff --git a/assets/Zed/package.json b/assets/Zed/package.json index b4e05f80..fa6f4eac 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -16,7 +16,7 @@ "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "font-awesome": "~4.7.0", - "get-root-node-polyfill": "^1.0.0", + "get-root-node-polyfill": "~1.0.0", "jquery": "~3.5.1", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", From 9d07f66ec7ddab56176acccb1a08326925b733c7 Mon Sep 17 00:00:00 2001 From: gechetspr Date: Thu, 13 Aug 2020 10:15:31 +0300 Subject: [PATCH 171/304] TE-5394 fixed filters issues --- composer.json | 2 +- .../Inspinia/AbstractActionButtonFunction.php | 17 ------ .../Inspinia/BackActionButtonFunction.php | 17 ------ .../Inspinia/CreateActionButtonFunction.php | 17 ------ .../Inspinia/EditActionButtonFunction.php | 17 ------ .../Inspinia/ViewActionButtonFunction.php | 17 ------ src/Spryker/Zed/Gui/GuiDependencyProvider.php | 61 ------------------- 7 files changed, 1 insertion(+), 147 deletions(-) delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/BackActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/CreateActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/EditActionButtonFunction.php delete mode 100644 src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/ViewActionButtonFunction.php diff --git a/composer.json b/composer.json index 0e3edca7..98d683d4 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ "spryker/kernel": "^3.52.0", "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", - "spryker/twig": "^3.0.0 || ^4.0.0", + "spryker/twig": "^3.0.0", "spryker/twig-extension": "^1.0.0", "spryker/util-sanitize": "^2.0.0", "spryker/util-sanitize-xss": "^1.0.0", diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php deleted file mode 100644 index 2c150670..00000000 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php +++ /dev/null @@ -1,17 +0,0 @@ -addTwigFunctions($container); $container = $this->addTwigFilter($container); $container = $this->addUtilSanitizeXssService($container); return $container; } - /** - * @param \Spryker\Zed\Kernel\Container $container - * - * @return \Spryker\Zed\Kernel\Container - */ - protected function addTwigFunctions(Container $container) - { - $container->set(static::GUI_TWIG_FUNCTIONS, function () { - return $this->getTwigFunctions(); - }); - - return $container; - } - /** * @param \Spryker\Zed\Kernel\Container $container * @@ -80,36 +49,6 @@ protected function addTwigFilter(Container $container) return $container; } - /** - * @deprecated Will be removed without replacement. - * - * @return \Twig\TwigFunction[] - */ - protected function getTwigFunctions() - { - return [ - new AssetsPathFunction(), - new TabsFunction(), - new UrlFunction(), - new UrlDecodeFunction(), - // navigation buttons - new ButtonGroupFunction(), - new BackActionButtonFunction(), - new CreateActionButtonFunction(), - new ViewActionButtonFunction(), - new EditActionButtonFunction(), - new RemoveActionButtonFunction(), - // table row buttons - new EditTableButtonFunction(), - new BackTableButtonFunction(), - new CreateTableButtonFunction(), - new ViewTableButtonFunction(), - new RemoveTableButtonFunction(), - // Form buttons - new SubmitButtonFunction(), - ]; - } - /** * @return \Twig\TwigFilter[] */ From 832cb13bbc905e362c16f7019432fad93084ce0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Wed, 5 Aug 2020 10:07:17 +0000 Subject: [PATCH 172/304] TE-7001 Merged things together. --- .../Form/Type/Extension/SanitizeXssTypeExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php index b5729c2d..542daf4b 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/SanitizeXssTypeExtension.php @@ -37,7 +37,7 @@ public function __construct(GuiToUtilSanitizeXssServiceInterface $utilSanitizeSe /** * @return iterable */ - public function getExtendedTypes(): iterable + public static function getExtendedTypes(): iterable { return [ TextType::class, From 2ba4f144242ba51743803a9856bbb2869344749c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Fri, 7 Aug 2020 11:48:24 +0000 Subject: [PATCH 173/304] TE-7001 Removed tests that can't work with new test infrastructure, replaced BCryptPasswordEncoder with NativePasswordEncoder. --- .../Gui/_support/Helper/TwigPluginHelper.php | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php new file mode 100644 index 00000000..972cf69d --- /dev/null +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php @@ -0,0 +1,66 @@ +getTwigHelper() + ->addTwigPlugin(new AssetsPathTwigPlugin()) + ->addTwigPlugin(new BackActionButtonTwigPlugin()) + ->addTwigPlugin(new CreateActionButtonTwigPlugin()) + ->addTwigPlugin(new EditActionButtonTwigPlugin()) + ->addTwigPlugin(new RemoveActionButtonTwigPlugin()) + ->addTwigPlugin(new ViewActionButtonTwigPlugin()) + ->addTwigPlugin(new ButtonGroupTwigPlugin()) + ->addTwigPlugin(new SubmitButtonTwigPlugin()) + ->addTwigPlugin(new BackTableButtonTwigPlugin()) + ->addTwigPlugin(new CreateTableButtonTwigPlugin()) + ->addTwigPlugin(new EditTableButtonTwigPlugin()) + ->addTwigPlugin(new RemoveTableButtonTwigPlugin()) + ->addTwigPlugin(new ViewTableButtonTwigPlugin()) + ->addTwigPlugin(new GuiFilterTwigPlugin()) + ->addTwigPlugin(new TabsTwigPlugin()) + ->addTwigPlugin(new UrlDecodeTwigPlugin()) + ->addTwigPlugin(new UrlTwigPlugin()) + ->addTwigPlugin(new FormRuntimeLoaderTwigPlugin()); + + $this->getTwigHelper()->addLoaderPlugin(new GuiTwigLoaderPlugin()); + } +} From 39ec94f0537f64ef0fe308e0de7462363a10e5bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Fri, 7 Aug 2020 14:14:18 +0000 Subject: [PATCH 174/304] TE-7001 Removed tests that can't work with new test infrastructure, replaced BCryptPasswordEncoder with NativePasswordEncoder, refactored test classes. --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index e10d9857..f6d3b163 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -464,7 +464,7 @@ public function getOrders(TableConfiguration $config) $defaultSorting = [$this->getDefaultSorting($config)]; /** @var array|null $orderParameter */ - $orderParameter = $this->request->query->get('order'); + $orderParameter = $this->request->query->all('order'); if (!is_array($orderParameter)) { return $defaultSorting; From 2346898a7caeece163c14e1b385bfdd584f50206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Fri, 7 Aug 2020 15:07:15 +0000 Subject: [PATCH 175/304] TE-7001 Cast Url to string in Tables. --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index f6d3b163..22061720 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -963,7 +963,7 @@ protected function generateRemoveButton($url, $title, array $options = [], strin $options = [ 'fields' => $options, - 'action' => $url, + 'action' => (string)$url, ]; $form = $this->createForm($formClassName, $name, $options); From 312a6149d04ae4bed351ba789c8153f646e61b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Tue, 11 Aug 2020 12:14:22 +0000 Subject: [PATCH 176/304] TE-7001 Updated constraints. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 98d683d4..8d3936c8 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ "spryker/form-extension": "^1.0.0", "spryker/kernel": "^3.52.0", "spryker/propel-orm": "^1.0.0", - "spryker/symfony": "^3.0.0", + "spryker/symfony": "^3.0.0 || ^4.0.0", "spryker/twig": "^3.0.0", "spryker/twig-extension": "^1.0.0", "spryker/util-sanitize": "^2.0.0", From 4b36051e0f7cd2385bfefb3b558e1a1fe92d17de Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 18 Aug 2020 13:29:11 +0200 Subject: [PATCH 177/304] Fix CS --- tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php b/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php index 0fcd281b..f67e631b 100644 --- a/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php +++ b/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php @@ -21,7 +21,7 @@ * @method void am($role) * @method void lookForwardTo($achieveValue) * @method void comment($description) - * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL) + * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = null) * * @SuppressWarnings(PHPMD) */ From 02afa3b8ff26945f50f3b8849b8699708048d277 Mon Sep 17 00:00:00 2001 From: mscherer Date: Wed, 26 Aug 2020 13:22:32 +0200 Subject: [PATCH 178/304] Fix CS for tester. --- .../SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php b/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php index f67e631b..faddd1cb 100644 --- a/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php +++ b/tests/SprykerTest/Zed/Gui/_support/GuiCommunicationTester.php @@ -10,8 +10,6 @@ use Codeception\Actor; /** - * Inherited Methods - * * @method void wantToTest($text) * @method void wantTo($text) * @method void execute($callable) @@ -28,8 +26,4 @@ class GuiCommunicationTester extends Actor { use _generated\GuiCommunicationTesterActions; - - /** - * Define custom actions here - */ } From 7bd270fdbacfaab93de9e8e771e94378b70eeedc Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Wed, 26 Aug 2020 19:03:47 +0300 Subject: [PATCH 179/304] CC-10785 Fixed screen jumping by click on tabs --- assets/Zed/js/modules/libs/tabs.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index c1b460c8..a7882a20 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -93,8 +93,10 @@ Tabs.prototype.changeTabsOnClick = function() { var self = this; self.tabUrls.on('click', function(event) { event.preventDefault(); + var selectedElement = $(this); var hash = selectedElement.attr('href'); + console.log(selectedElement); var position = 0; var positionChanged = false; @@ -115,7 +117,12 @@ Tabs.prototype.changeTabsOnClick = function() { }; Tabs.prototype.activateTab = function(element, hash) { - window.location.hash = hash; + if (window.history.pushState) { + window.history.pushState(null, null, hash); + } else { + window.location.hash = hash; + } + element.tab('show'); this.onTabChange(element.attr('href')); From f36b4de59ead0edf60c6e16cf7d60f1dadde6cc8 Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Wed, 26 Aug 2020 19:05:48 +0300 Subject: [PATCH 180/304] CC-10785 Fixed screen jumping by click on tabs --- assets/Zed/js/modules/libs/tabs.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index a7882a20..754d4c29 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -93,10 +93,8 @@ Tabs.prototype.changeTabsOnClick = function() { var self = this; self.tabUrls.on('click', function(event) { event.preventDefault(); - var selectedElement = $(this); var hash = selectedElement.attr('href'); - console.log(selectedElement); var position = 0; var positionChanged = false; From 6df8617b1013428aa68b74643399c6f7f219a7ab Mon Sep 17 00:00:00 2001 From: "danil.moroz" Date: Thu, 27 Aug 2020 11:58:23 +0300 Subject: [PATCH 181/304] CC-10785 Refactoring after CR --- assets/Zed/js/modules/libs/tabs.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index 754d4c29..c149d432 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -115,14 +115,8 @@ Tabs.prototype.changeTabsOnClick = function() { }; Tabs.prototype.activateTab = function(element, hash) { - if (window.history.pushState) { - window.history.pushState(null, null, hash); - } else { - window.location.hash = hash; - } - + window.history.pushState(null, null, hash); element.tab('show'); - this.onTabChange(element.attr('href')); }; From c00cc7bed9f8fa8b61025431e056606d2fcdff99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Wed, 2 Sep 2020 08:34:47 +0000 Subject: [PATCH 182/304] TE-7001 Fixed ProductManagementTests, fixed access to Request::query(). --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 22061720..c9dc7a88 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -555,7 +555,7 @@ protected function getParameter(array $dataArray, $key, $defaultValue) */ public function getSearchTerm() { - return $this->request->query->get('search', null); + return $this->request->query->has('search') ? $this->request->query->all('search') : null; } /** From 91c445b839376de0bf6a0a36d5bcab211d1b74b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Fri, 4 Sep 2020 09:06:16 +0000 Subject: [PATCH 183/304] TE-7001 Fixed PHPStan issues. --- phpstan.neon | 6 ++- .../Gui/Communication/Table/AbstractTable.php | 50 +++++++++++++++++-- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 3390d717..2deebde2 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,3 +1,7 @@ parameters: + reportUnmatchedIgnoredErrors: false ignoreErrors: - - '#Function twig_escape_filter not found.#' + - '#Function twig_escape_filter not found.#' + - '#Method .+ParameterBag::all\(\) invoked with 1 parameter, 0 required.#' + - '#Method .+AbstractTable::getOrderParameter\(\) should return array|null but returns string|null#' + - '#Method .+AbstractTable::getSearchParameter\(\) should return array|null but returns string|null#' diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index c9dc7a88..3a0b9386 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -20,6 +20,7 @@ use Spryker\Zed\Gui\Communication\Form\DeleteForm; use Spryker\Zed\PropelOrm\Business\Runtime\ActiveQuery\Criteria; use Symfony\Component\Form\FormInterface; +use Symfony\Component\HttpFoundation\File\UploadedFile; use Twig\Environment; use Twig\Loader\FilesystemLoader; @@ -463,8 +464,7 @@ public function getOrders(TableConfiguration $config) { $defaultSorting = [$this->getDefaultSorting($config)]; - /** @var array|null $orderParameter */ - $orderParameter = $this->request->query->all('order'); + $orderParameter = $this->getOrderParameter(); if (!is_array($orderParameter)) { return $defaultSorting; @@ -479,6 +479,34 @@ public function getOrders(TableConfiguration $config) return $sorting; } + /** + * @return array|null + */ + protected function getOrderParameter(): ?array + { + if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { + return $this->request->query->all('order'); + } + + return $this->request->query->get('order'); + } + + /** + * Retrieving non-string values using InputBag::get() was deprecated in symfony/http-foundation:5.1 + * Using the InputBag::all() method with an argument was introduced in symfony/http-foundation:5.0 + * + * The method UploadedFile::getClientSize() was removed in symfony/http-foundation:5.0. + * + * To find which way to use we check for the existence of the UploadedFile::getClientSize(), when the method does + * not exist we have symfony/http-foundation:5.0 or higher installed. + * + * @return bool + */ + protected function isSymfonyHttpFoundationVersion5OrHigher(): bool + { + return !method_exists(UploadedFile::class, 'getClientSize'); + } + /** * @param \Spryker\Zed\Gui\Communication\Table\TableConfiguration $config * @@ -555,7 +583,23 @@ protected function getParameter(array $dataArray, $key, $defaultValue) */ public function getSearchTerm() { - return $this->request->query->has('search') ? $this->request->query->all('search') : null; + if (!$this->request->query->has('search')) { + return null; + } + + return $this->getSearchParameter(); + } + + /** + * @return array + */ + protected function getSearchParameter(): array + { + if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { + return $this->request->query->all('search'); + } + + return $this->request->query->get('search'); } /** From ee9b7a063265206c4e7e0f8c2af2f4a1e398167c Mon Sep 17 00:00:00 2001 From: Asaulenko Pavel Date: Fri, 4 Sep 2020 15:54:12 +0300 Subject: [PATCH 184/304] TE-7347 Removed Silex service providers from tests --- .../Gui/_support/Helper/TwigPluginHelper.php | 66 +++++++++++++++++++ tests/SprykerTest/Zed/Gui/codeception.yml | 10 +-- 2 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php new file mode 100644 index 00000000..972cf69d --- /dev/null +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php @@ -0,0 +1,66 @@ +getTwigHelper() + ->addTwigPlugin(new AssetsPathTwigPlugin()) + ->addTwigPlugin(new BackActionButtonTwigPlugin()) + ->addTwigPlugin(new CreateActionButtonTwigPlugin()) + ->addTwigPlugin(new EditActionButtonTwigPlugin()) + ->addTwigPlugin(new RemoveActionButtonTwigPlugin()) + ->addTwigPlugin(new ViewActionButtonTwigPlugin()) + ->addTwigPlugin(new ButtonGroupTwigPlugin()) + ->addTwigPlugin(new SubmitButtonTwigPlugin()) + ->addTwigPlugin(new BackTableButtonTwigPlugin()) + ->addTwigPlugin(new CreateTableButtonTwigPlugin()) + ->addTwigPlugin(new EditTableButtonTwigPlugin()) + ->addTwigPlugin(new RemoveTableButtonTwigPlugin()) + ->addTwigPlugin(new ViewTableButtonTwigPlugin()) + ->addTwigPlugin(new GuiFilterTwigPlugin()) + ->addTwigPlugin(new TabsTwigPlugin()) + ->addTwigPlugin(new UrlDecodeTwigPlugin()) + ->addTwigPlugin(new UrlTwigPlugin()) + ->addTwigPlugin(new FormRuntimeLoaderTwigPlugin()); + + $this->getTwigHelper()->addLoaderPlugin(new GuiTwigLoaderPlugin()); + } +} diff --git a/tests/SprykerTest/Zed/Gui/codeception.yml b/tests/SprykerTest/Zed/Gui/codeception.yml index 9f2fbcc0..53a98245 100644 --- a/tests/SprykerTest/Zed/Gui/codeception.yml +++ b/tests/SprykerTest/Zed/Gui/codeception.yml @@ -19,12 +19,4 @@ suites: enabled: - Asserts - \SprykerTest\Shared\Testify\Helper\Environment - - \SprykerTest\Shared\Testify\Helper\ConfigHelper - - \SprykerTest\Shared\Testify\Helper\LocatorHelper - - \SprykerTest\Shared\Testify\Helper\DependencyHelper - - \SprykerTest\Shared\Propel\Helper\TransactionHelper - - \SprykerTest\Shared\Application\Helper\ZedHelper: - - \SprykerTest\Shared\Testify\Helper\ZedControllerTable: - depends: \SprykerTest\Shared\Testify\Helper\ZedBootstrap - - \SprykerTest\Shared\Testify\Helper\ZedBootstrap: - depends: \SprykerTest\Shared\Testify\Helper\BundleConfig + - \SprykerTest\Service\Container\Helper\ContainerHelper From 98b70098c5a77f79eb846892458ab14a2335416e Mon Sep 17 00:00:00 2001 From: Asaulenko Pavel Date: Wed, 9 Sep 2020 11:20:41 +0300 Subject: [PATCH 185/304] TE-7272 Adjusted some tests configuration; updated dependencies --- tests/SprykerTest/Zed/Gui/codeception.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/SprykerTest/Zed/Gui/codeception.yml b/tests/SprykerTest/Zed/Gui/codeception.yml index 53a98245..ea92143d 100644 --- a/tests/SprykerTest/Zed/Gui/codeception.yml +++ b/tests/SprykerTest/Zed/Gui/codeception.yml @@ -19,4 +19,8 @@ suites: enabled: - Asserts - \SprykerTest\Shared\Testify\Helper\Environment - - \SprykerTest\Service\Container\Helper\ContainerHelper + - \SprykerTest\Shared\Testify\Helper\ConfigHelper + - \SprykerTest\Shared\Testify\Helper\LocatorHelper + - \SprykerTest\Shared\Testify\Helper\DependencyHelper + - \SprykerTest\Shared\Propel\Helper\TransactionHelper + - \SprykerTest\Shared\Application\Helper\ZedHelper From aa4da2058691fd7518c78a266f2ecc904c30bee4 Mon Sep 17 00:00:00 2001 From: Asaulenko Pavel Date: Thu, 10 Sep 2020 14:41:21 +0300 Subject: [PATCH 186/304] TE-7272 Renamed TwigPluginHelper to GuiTwigPluginHelper --- .../Helper/{TwigPluginHelper.php => GuiTwigPluginHelper.php} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename tests/SprykerTest/Zed/Gui/_support/Helper/{TwigPluginHelper.php => GuiTwigPluginHelper.php} (98%) diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/GuiTwigPluginHelper.php similarity index 98% rename from tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php rename to tests/SprykerTest/Zed/Gui/_support/Helper/GuiTwigPluginHelper.php index 972cf69d..5631f367 100644 --- a/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/GuiTwigPluginHelper.php @@ -30,7 +30,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\UrlTwigPlugin; use SprykerTest\Zed\Twig\Helper\TwigHelperTrait; -class TwigPluginHelper extends Module +class GuiTwigPluginHelper extends Module { use TwigHelperTrait; From f399c100f7550f8faf521de775d6c655f4e30202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Fri, 11 Sep 2020 07:29:43 +0000 Subject: [PATCH 187/304] TE-7001 Renamed TwigPluginHelper to GuiTwigPluginHelper. --- .../Helper/{TwigPluginHelper.php => GuiTwigPluginHelper.php} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename tests/SprykerTest/Zed/Gui/_support/Helper/{TwigPluginHelper.php => GuiTwigPluginHelper.php} (98%) diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/GuiTwigPluginHelper.php similarity index 98% rename from tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php rename to tests/SprykerTest/Zed/Gui/_support/Helper/GuiTwigPluginHelper.php index 972cf69d..5631f367 100644 --- a/tests/SprykerTest/Zed/Gui/_support/Helper/TwigPluginHelper.php +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/GuiTwigPluginHelper.php @@ -30,7 +30,7 @@ use Spryker\Zed\Gui\Communication\Plugin\Twig\UrlTwigPlugin; use SprykerTest\Zed\Twig\Helper\TwigHelperTrait; -class TwigPluginHelper extends Module +class GuiTwigPluginHelper extends Module { use TwigHelperTrait; From 7d5d859749759cc7c948642fe02d66320524756f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Tue, 15 Sep 2020 13:29:28 +0000 Subject: [PATCH 188/304] TE-7001 Reverted composer.json constraint for spryker/symfony. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 8d3936c8..98d683d4 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ "spryker/form-extension": "^1.0.0", "spryker/kernel": "^3.52.0", "spryker/propel-orm": "^1.0.0", - "spryker/symfony": "^3.0.0 || ^4.0.0", + "spryker/symfony": "^3.0.0", "spryker/twig": "^3.0.0", "spryker/twig-extension": "^1.0.0", "spryker/util-sanitize": "^2.0.0", From 530fd748351396d0509b37e22dcf20f98b4a2c1a Mon Sep 17 00:00:00 2001 From: Bezpiatov Date: Wed, 16 Sep 2020 18:20:22 +0300 Subject: [PATCH 189/304] TE-7283 fixed CmsGui tests --- .../Zed/Gui/_support/Helper/DataTableActionHelper.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php index d516a4a9..3283839c 100644 --- a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php @@ -74,9 +74,7 @@ public function clickDataTableLinkInDropDownOfButton(string $buttonName, string { $this->clickButton($buttonName, $rowPosition); $this->getDriver()->click(sprintf( - '(//tr[@role="row"]//button[contains(., "%s")])[%s]/following::ul[1]//a[contains(., "%s")]', - $buttonName, - $rowPosition, + '//body/ul[@class="dropdown-menu"][1]//following::li/a[contains(., "%s")]', $linkName )); } From 11c7e15ccbe5e88aa5bcede163dafc5ad8065727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Mon, 21 Sep 2020 10:45:34 +0000 Subject: [PATCH 190/304] TE-7001 Fixed tests. --- src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig b/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig index 5c2bc61a..5e06b45b 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig @@ -1,8 +1,9 @@ {{ form_start(form) }} {% for field in form %} {% if field.vars.name != '_token' %} - - {% do field.setRendered %} + {% if not field.isRendered %} + + {% endif %} {% endif %} {% endfor %} {{ form_widget(form) }} From 8aaac8d651a4cb1d485bcadbdf6fe6a72c1cc580 Mon Sep 17 00:00:00 2001 From: mscherer Date: Thu, 24 Sep 2020 16:11:58 +0200 Subject: [PATCH 191/304] Set PHPStan levels higher where possible. --- phpstan.json | 4 ++-- phpstan.neon | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/phpstan.json b/phpstan.json index 5853d235..cca5ff36 100644 --- a/phpstan.json +++ b/phpstan.json @@ -1,3 +1,3 @@ { - "defaultLevel": 5 -} + "defaultLevel": 6 +} \ No newline at end of file diff --git a/phpstan.neon b/phpstan.neon index 3390d717..1c51a435 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,3 +1,4 @@ parameters: + checkMissingIterableValueType: false ignoreErrors: - - '#Function twig_escape_filter not found.#' + - '#Function twig_escape_filter not found.#' From d163cd3e493d89e7ec1dab0fe3dd1cd005306577 Mon Sep 17 00:00:00 2001 From: Bezpiatov Date: Tue, 6 Oct 2020 12:05:32 +0300 Subject: [PATCH 192/304] TE-7283 Removed Phantoman dependencies from all modules --- codeception.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/codeception.yml b/codeception.yml index 66de119f..568908dd 100644 --- a/codeception.yml +++ b/codeception.yml @@ -13,5 +13,5 @@ settings: memory_limit: 1024M log: true extensions: - enabled: [Codeception\Extension\Phantoman] - config: { Codeception\Extension\Phantoman: { suites: [Presentation] } } + enabled: [SprykerTest\Shared\Testify\Helper\WebDriverHelper] + config: { SprykerTest\Shared\Testify\Helper\WebDriverHelper: { suites: [Presentation] } } From da1bf5b4213a1ee834a3ee53a1639b1b12e74418 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 13 Oct 2020 11:58:55 +0200 Subject: [PATCH 193/304] Fix up more deprecation texts. --- src/Spryker/Shared/Gui/Form/AbstractForm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Shared/Gui/Form/AbstractForm.php b/src/Spryker/Shared/Gui/Form/AbstractForm.php index 862bfb5f..7422c98c 100644 --- a/src/Spryker/Shared/Gui/Form/AbstractForm.php +++ b/src/Spryker/Shared/Gui/Form/AbstractForm.php @@ -15,7 +15,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @deprecated Use {@link \Spryker\Zed\Kernel\Communication\Form\AbstractType} for Zed and `Spryker\Yves\Kernel\Form\AbstractType` for Yves instead. + * @deprecated Use {@link \Spryker\Zed\Kernel\Communication\Form\AbstractType} for Zed and {@link \Spryker\Yves\Kernel\Form\AbstractType} for Yves instead. */ abstract class AbstractForm implements FormTypeInterface { From 95f8ea0c8c641d6037786d314e56af4ba825da09 Mon Sep 17 00:00:00 2001 From: Bezpiatov Date: Wed, 14 Oct 2020 19:14:11 +0300 Subject: [PATCH 194/304] TE-7745 PhantomJS BC issue fix --- .../Gui/_support/Helper/DataTableActionHelper.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php index 3283839c..d46b75ec 100644 --- a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php @@ -73,10 +73,20 @@ public function clickDataTableDeleteButton(int $rowPosition = 1, ?string $gridId public function clickDataTableLinkInDropDownOfButton(string $buttonName, string $linkName, int $rowPosition = 1): void { $this->clickButton($buttonName, $rowPosition); - $this->getDriver()->click(sprintf( + + $elementNew = sprintf( '//body/ul[@class="dropdown-menu"][1]//following::li/a[contains(., "%s")]', $linkName - )); + ); + + $elementOld = sprintf( + '(//tr[@role="row"]//button[contains(., "%s")])[%s]/following::ul[1]//a[contains(., "%s")]', + $buttonName, + $rowPosition, + $linkName + ); + + $this->getDriver()->click(sprintf('%s | %s', $elementNew, $elementOld)); } /** From 7b0bc090733c8dea479da1d931bd33301b98497f Mon Sep 17 00:00:00 2001 From: Bezpiatov Date: Thu, 15 Oct 2020 17:36:45 +0300 Subject: [PATCH 195/304] TE-7745 added new method in BrowserHelper --- .../Zed/Gui/_support/Helper/DataTableActionHelper.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php index d46b75ec..40c1fbe3 100644 --- a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php @@ -74,19 +74,19 @@ public function clickDataTableLinkInDropDownOfButton(string $buttonName, string { $this->clickButton($buttonName, $rowPosition); - $elementNew = sprintf( + $elementInRoot = sprintf( '//body/ul[@class="dropdown-menu"][1]//following::li/a[contains(., "%s")]', $linkName ); - $elementOld = sprintf( + $elementInList = sprintf( '(//tr[@role="row"]//button[contains(., "%s")])[%s]/following::ul[1]//a[contains(., "%s")]', $buttonName, $rowPosition, $linkName ); - $this->getDriver()->click(sprintf('%s | %s', $elementNew, $elementOld)); + $this->getDriver()->click(sprintf('%s | %s', $elementInRoot, $elementInList)); } /** From 42efbcb22586bba2672809b3d77ffbc2e73e0107 Mon Sep 17 00:00:00 2001 From: mscherer Date: Mon, 26 Oct 2020 11:50:44 +0100 Subject: [PATCH 196/304] Update psalm report. --- psalm-report.json | 640 +++++++++------------------------------------- 1 file changed, 122 insertions(+), 518 deletions(-) diff --git a/psalm-report.json b/psalm-report.json index 38d50faf..f05d392d 100644 --- a/psalm-report.json +++ b/psalm-report.json @@ -2,8 +2,8 @@ "error": [ { "severity": "error", - "line_from": 273, - "line_to": 273, + "line_from": 290, + "line_to": 290, "type": "UndefinedFunction", "message": "Function Spryker\\Zed\\Gui\\Communication\\Table\\twig_escape_filter does not exist", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -11,6 +11,54 @@ "selected_text": "twig_escape_filter(new Environment(new FilesystemLoader()), $value)", "error_level": -1, "shortcode": 21 + }, + { + "severity": "error", + "line_from": 483, + "line_to": 483, + "type": "InvalidReturnType", + "message": "The declared return type 'array|null' for Spryker\\Zed\\Gui\\Communication\\Table\\AbstractTable::getOrderParameter is incorrect, got 'array|null|string'", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " * @return array|null", + "selected_text": "array|null", + "error_level": 6, + "shortcode": 11 + }, + { + "severity": "error", + "line_from": 491, + "line_to": 491, + "type": "InvalidReturnStatement", + "message": "The inferred type 'null|string' does not match the declared return type 'array|null' for Spryker\\Zed\\Gui\\Communication\\Table\\AbstractTable::getOrderParameter", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " return $this->request->query->get('order');", + "selected_text": "$this->request->query->get('order')", + "error_level": 6, + "shortcode": 128 + }, + { + "severity": "error", + "line_from": 594, + "line_to": 594, + "type": "InvalidReturnType", + "message": "The declared return type 'array' for Spryker\\Zed\\Gui\\Communication\\Table\\AbstractTable::getSearchParameter is incorrect, got 'array|null|string'", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " * @return array", + "selected_text": "array", + "error_level": 6, + "shortcode": 11 + }, + { + "severity": "error", + "line_from": 602, + "line_to": 602, + "type": "InvalidReturnStatement", + "message": "The inferred type 'null|string' does not match the declared return type 'array' for Spryker\\Zed\\Gui\\Communication\\Table\\AbstractTable::getSearchParameter", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", + "snippet": " return $this->request->query->get('search');", + "selected_text": "$this->request->query->get('search')", + "error_level": 6, + "shortcode": 128 } ], "warning": [ @@ -26,6 +74,42 @@ "error_level": 3, "shortcode": 78 }, + { + "severity": "info", + "line_from": 57, + "line_to": 57, + "type": "InvalidNullableReturnType", + "message": "The declared return type 'Symfony\\Component\\HttpFoundation\\Request' for Spryker\\Zed\\Gui\\Communication\\Form\\AbstractForm::getRequest is not nullable, but 'Symfony\\Component\\HttpFoundation\\Request|null' contains null", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", + "snippet": " * @return \\Symfony\\Component\\HttpFoundation\\Request", + "selected_text": "\\Symfony\\Component\\HttpFoundation\\Request", + "error_level": 5, + "shortcode": 144 + }, + { + "severity": "info", + "line_from": 64, + "line_to": 64, + "type": "PossiblyNullPropertyAssignmentValue", + "message": "$this->request with non-nullable declared type 'Symfony\\Component\\HttpFoundation\\Request' cannot be assigned nullable type 'Symfony\\Component\\HttpFoundation\\Request|null'", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", + "snippet": " $this->request = $requestStack->getCurrentRequest();", + "selected_text": "$requestStack->getCurrentRequest()", + "error_level": 3, + "shortcode": 148 + }, + { + "severity": "info", + "line_from": 67, + "line_to": 67, + "type": "NullableReturnStatement", + "message": "The declared return type 'Symfony\\Component\\HttpFoundation\\Request' for Spryker\\Zed\\Gui\\Communication\\Form\\AbstractForm::getRequest is not nullable, but the function returns 'Symfony\\Component\\HttpFoundation\\Request|null'", + "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", + "snippet": " return $this->request;", + "selected_text": "$this->request", + "error_level": 5, + "shortcode": 139 + }, { "severity": "info", "line_from": 21, @@ -40,20 +124,8 @@ }, { "severity": "info", - "line_from": 56, - "line_to": 56, - "type": "PossiblyUndefinedArrayOffset", - "message": "Possibly undefined array key $options['class']", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/PanelFunction.php", - "snippet": " $html = '
    ';", - "selected_text": "$options['class']", - "error_level": 3, - "shortcode": 167 - }, - { - "severity": "info", - "line_from": 245, - "line_to": 245, + "line_from": 262, + "line_to": 262, "type": "PossiblyNullArgument", "message": "Argument 2 of array_intersect_key cannot be null, possibly null value provided", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -64,8 +136,8 @@ }, { "severity": "info", - "line_from": 247, - "line_to": 247, + "line_from": 264, + "line_to": 264, "type": "PossiblyNullArgument", "message": "Argument 1 of Spryker\\Zed\\Gui\\Communication\\Table\\AbstractTable::reOrderByHeaders cannot be null, possibly null value provided", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -76,22 +148,22 @@ }, { "severity": "info", - "line_from": 693, - "line_to": 693, - "type": "InvalidScalarArgument", - "message": "Argument 1 of Propel\\Runtime\\Connection\\ConnectionInterface::getAttribute expects string, int(16) provided", + "line_from": 602, + "line_to": 602, + "type": "NullableReturnStatement", + "message": "The declared return type 'array' for Spryker\\Zed\\Gui\\Communication\\Table\\AbstractTable::getSearchParameter is not nullable, but the function returns 'null|string'", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", - "snippet": " $driverName = Propel::getConnection()->getAttribute(PDO::ATTR_DRIVER_NAME);", - "selected_text": "PDO::ATTR_DRIVER_NAME", - "error_level": 4, - "shortcode": 12 + "snippet": " return $this->request->query->get('search');", + "selected_text": "$this->request->query->get('search')", + "error_level": 5, + "shortcode": 139 }, { "severity": "info", - "line_from": 731, - "line_to": 731, + "line_from": 798, + "line_to": 798, "type": "PossiblyInvalidMethodCall", - "message": "Cannot call method on possible array variable $data", + "message": "Cannot call method on possible array variable $data", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", "snippet": " return $data->toArray(null, false, TableMap::TYPE_COLNAME);", "selected_text": "toArray", @@ -100,8 +172,8 @@ }, { "severity": "info", - "line_from": 1154, - "line_to": 1154, + "line_from": 1289, + "line_to": 1289, "type": "RedundantCondition", "message": "Found a redundant condition when evaluating $options and trying to reconcile type 'array' to array", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -112,8 +184,8 @@ }, { "severity": "info", - "line_from": 1171, - "line_to": 1171, + "line_from": 1306, + "line_to": 1306, "type": "PossiblyNullArrayOffset", "message": "Cannot access value on variable $searchColumns using possibly null offset int|null", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -124,8 +196,8 @@ }, { "severity": "info", - "line_from": 1175, - "line_to": 1175, + "line_from": 1310, + "line_to": 1310, "type": "PossiblyNullArrayOffset", "message": "Cannot access value on variable $searchColumns using possibly null offset int|null", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -136,8 +208,8 @@ }, { "severity": "info", - "line_from": 1177, - "line_to": 1177, + "line_from": 1312, + "line_to": 1312, "type": "PossiblyNullArrayOffset", "message": "Cannot access value on variable $searchColumns using possibly null offset int|null", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -148,8 +220,8 @@ }, { "severity": "info", - "line_from": 1192, - "line_to": 1192, + "line_from": 1327, + "line_to": 1327, "type": "PossiblyNullArrayOffset", "message": "Cannot access value on variable $searchColumns using possibly null offset int|null", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -193,18 +265,6 @@ "selected_text": "count", "error_level": 3, "shortcode": 113 - }, - { - "severity": "info", - "line_from": 130, - "line_to": 130, - "type": "UndefinedMagicMethod", - "message": "Magic method Spryker\\Shared\\Kernel\\BundleProxy::service does not exist", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " $container->getLocator()->utilSanitizeXss()->service()", - "selected_text": "service", - "error_level": 4, - "shortcode": 219 } ], "deprecation": [ @@ -222,8 +282,8 @@ }, { "severity": "info", - "line_from": 25, - "line_to": 25, + "line_from": 30, + "line_to": 30, "type": "DeprecatedClass", "message": "Class Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin is marked as deprecated", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", @@ -234,8 +294,8 @@ }, { "severity": "info", - "line_from": 30, - "line_to": 30, + "line_from": 35, + "line_to": 35, "type": "DeprecatedClass", "message": "Class Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin is marked as deprecated", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", @@ -246,8 +306,8 @@ }, { "severity": "info", - "line_from": 35, - "line_to": 35, + "line_from": 40, + "line_to": 40, "type": "DeprecatedClass", "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\ConstraintsPlugin is marked deprecated", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", @@ -256,18 +316,6 @@ "error_level": 2, "shortcode": 98 }, - { - "severity": "info", - "line_from": 57, - "line_to": 57, - "type": "DeprecatedMethod", - "message": "The method Spryker\\Service\\Container\\Container::offsetGet has been marked as deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Form/AbstractForm.php", - "snippet": " $this->request = (new Pimple())->getApplication()['request'];", - "selected_text": "(new Pimple())->getApplication()", - "error_level": 2, - "shortcode": 1 - }, { "severity": "info", "line_from": 30, @@ -342,236 +390,8 @@ }, { "severity": "info", - "line_from": 15, - "line_to": 15, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\AbstractButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/AbstractActionButtonFunction.php", - "snippet": "abstract class AbstractActionButtonFunction extends AbstractButtonFunction", - "selected_text": "AbstractButtonFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonFunction.php", - "snippet": "class BackActionButtonFunction extends AbstractActionButtonFunction", - "selected_text": "AbstractActionButtonFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonFunction.php", - "snippet": "class CreateActionButtonFunction extends AbstractActionButtonFunction", - "selected_text": "AbstractActionButtonFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonFunction.php", - "snippet": "class EditActionButtonFunction extends AbstractActionButtonFunction", - "selected_text": "AbstractActionButtonFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/RemoveActionButtonFunction.php", - "snippet": "class RemoveActionButtonFunction extends AbstractActionButtonFunction", - "selected_text": "AbstractActionButtonFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonFunction.php", - "snippet": "class ViewActionButtonFunction extends AbstractActionButtonFunction", - "selected_text": "AbstractActionButtonFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 15, - "line_to": 15, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\AbstractButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/AbstractTableFunction.php", - "snippet": "abstract class AbstractTableFunction extends AbstractButtonFunction", - "selected_text": "AbstractButtonFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonFunction.php", - "snippet": "class BackTableButtonFunction extends AbstractTableFunction", - "selected_text": "AbstractTableFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/CreateTableButtonFunction.php", - "snippet": "class CreateTableButtonFunction extends AbstractTableFunction", - "selected_text": "AbstractTableFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonFunction.php", - "snippet": "class EditTableButtonFunction extends AbstractTableFunction", - "selected_text": "AbstractTableFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonFunction.php", - "snippet": "class RemoveTableButtonFunction extends AbstractTableFunction", - "selected_text": "AbstractTableFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 13, - "line_to": 13, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\AbstractTableFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/ViewTableButtonFunction.php", - "snippet": "class ViewTableButtonFunction extends AbstractTableFunction", - "selected_text": "AbstractTableFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 15, - "line_to": 15, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\AbstractActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/AbstractActionButtonFunction.php", - "snippet": "abstract class AbstractActionButtonFunction extends TwigAbstractActionButtonFunction", - "selected_text": "TwigAbstractActionButtonFunction", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 15, - "line_to": 15, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\BackActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/BackActionButtonFunction.php", - "snippet": "class BackActionButtonFunction extends BackActionButton", - "selected_text": "BackActionButton", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 15, - "line_to": 15, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\CreateActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/CreateActionButtonFunction.php", - "snippet": "class CreateActionButtonFunction extends CreateActionButton", - "selected_text": "CreateActionButton", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 15, - "line_to": 15, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\EditActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/EditActionButtonFunction.php", - "snippet": "class EditActionButtonFunction extends EditActionButton", - "selected_text": "EditActionButton", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 15, - "line_to": 15, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\ViewActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Inspinia/ViewActionButtonFunction.php", - "snippet": "class ViewActionButtonFunction extends ViewActionButton", - "selected_text": "ViewActionButton", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 181, - "line_to": 182, - "type": "DeprecatedMethod", - "message": "The method Spryker\\Service\\Container\\Container::offsetGet has been marked as deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", - "snippet": " return (new Pimple())\n ->getApplication()['request'];", - "selected_text": "(new Pimple())\n ->getApplication()", - "error_level": 2, - "shortcode": 1 - }, - { - "severity": "info", - "line_from": 391, - "line_to": 392, - "type": "DeprecatedMethod", - "message": "The method Spryker\\Service\\Container\\Container::offsetGet has been marked as deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", - "snippet": " $twig = (new Pimple())\n ->getApplication()['twig'];", - "selected_text": "(new Pimple())\n ->getApplication()", - "error_level": 2, - "shortcode": 1 - }, - { - "severity": "info", - "line_from": 467, - "line_to": 467, + "line_from": 518, + "line_to": 518, "type": "DeprecatedMethod", "message": "The method Spryker\\Zed\\Gui\\Communication\\Table\\TableConfiguration::getDefaultSortColumnIndex has been marked as deprecated", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -582,8 +402,8 @@ }, { "severity": "info", - "line_from": 468, - "line_to": 468, + "line_from": 519, + "line_to": 519, "type": "DeprecatedMethod", "message": "The method Spryker\\Zed\\Gui\\Communication\\Table\\TableConfiguration::getDefaultSortDirection has been marked as deprecated", "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", @@ -592,18 +412,6 @@ "error_level": 2, "shortcode": 1 }, - { - "severity": "info", - "line_from": 972, - "line_to": 972, - "type": "DeprecatedMethod", - "message": "The method Spryker\\Service\\Container\\Container::offsetGet has been marked as deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php", - "snippet": " return (new Pimple())->getApplication()['form.factory'];", - "selected_text": "(new Pimple())->getApplication()", - "error_level": 2, - "shortcode": 1 - }, { "severity": "info", "line_from": 332, @@ -627,210 +435,6 @@ "selected_text": "$this->defaultSortDirection", "error_level": 2, "shortcode": 99 - }, - { - "severity": "info", - "line_from": 63, - "line_to": 63, - "type": "DeprecatedMethod", - "message": "The method Spryker\\Zed\\Gui\\GuiDependencyProvider::getTwigFunctions has been marked as deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " return $this->getTwigFunctions();", - "selected_text": "getTwigFunctions", - "error_level": 2, - "shortcode": 1 - }, - { - "severity": "info", - "line_from": 91, - "line_to": 91, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\AssetsPathFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new AssetsPathFunction(),", - "selected_text": "new AssetsPathFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 92, - "line_to": 92, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\TabsFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new TabsFunction(),", - "selected_text": "new TabsFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 93, - "line_to": 93, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\UrlFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new UrlFunction(),", - "selected_text": "new UrlFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 94, - "line_to": 94, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\UrlDecodeFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new UrlDecodeFunction(),", - "selected_text": "new UrlDecodeFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 96, - "line_to": 96, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\ButtonGroupFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new ButtonGroupFunction(),", - "selected_text": "new ButtonGroupFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 97, - "line_to": 97, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\BackActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new BackActionButtonFunction(),", - "selected_text": "new BackActionButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 98, - "line_to": 98, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\CreateActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new CreateActionButtonFunction(),", - "selected_text": "new CreateActionButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 99, - "line_to": 99, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\ViewActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new ViewActionButtonFunction(),", - "selected_text": "new ViewActionButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 100, - "line_to": 100, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\EditActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new EditActionButtonFunction(),", - "selected_text": "new EditActionButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 101, - "line_to": 101, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Action\\RemoveActionButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new RemoveActionButtonFunction(),", - "selected_text": "new RemoveActionButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 103, - "line_to": 103, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\EditTableButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new EditTableButtonFunction(),", - "selected_text": "new EditTableButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 104, - "line_to": 104, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\BackTableButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new BackTableButtonFunction(),", - "selected_text": "new BackTableButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 105, - "line_to": 105, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\CreateTableButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new CreateTableButtonFunction(),", - "selected_text": "new CreateTableButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 106, - "line_to": 106, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\ViewTableButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new ViewTableButtonFunction(),", - "selected_text": "new ViewTableButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 107, - "line_to": 107, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Table\\RemoveTableButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new RemoveTableButtonFunction(),", - "selected_text": "new RemoveTableButtonFunction()", - "error_level": 2, - "shortcode": 98 - }, - { - "severity": "info", - "line_from": 109, - "line_to": 109, - "type": "DeprecatedClass", - "message": "Spryker\\Zed\\Gui\\Communication\\Plugin\\Twig\\Buttons\\Form\\SubmitButtonFunction is marked deprecated", - "file_name": "vendor/spryker/spryker/Bundles/Gui/src/Spryker/Zed/Gui/GuiDependencyProvider.php", - "snippet": " new SubmitButtonFunction(),", - "selected_text": "new SubmitButtonFunction()", - "error_level": 2, - "shortcode": 98 } ] -} \ No newline at end of file +} From 071b8eb56c96dcac8fd98933f514a69efc34fb83 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 27 Oct 2020 11:00:56 +0100 Subject: [PATCH 197/304] TE-7661 Upgrade to PHP 7.3+ --- .travis.yml | 4 ++-- composer.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 184b3e68..dfc12b55 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,14 @@ language: php php: - - 7.2 + - 7.3 - 7.4 matrix: fast_finish: true include: - - php: 7.2 + - php: 7.3 env: PREFER_LOWEST=1 env: diff --git a/composer.json b/composer.json index 98d683d4..0071543b 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "description": "Gui module", "license": "proprietary", "require": { - "php": ">=7.2", + "php": ">=7.3", "spryker/form-extension": "^1.0.0", "spryker/kernel": "^3.52.0", "spryker/propel-orm": "^1.0.0", From 2ddd43cd0c064936a685e8c8927201302d5029b5 Mon Sep 17 00:00:00 2001 From: mscherer Date: Tue, 27 Oct 2020 12:32:54 +0100 Subject: [PATCH 198/304] TE-7661 Upgrade to PHP 7.3+ --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5d75d0c6..9c557d87 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Gui Module [![Build Status](https://travis-ci.org/spryker/gui.svg)](https://travis-ci.org/spryker/gui) -[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.2-8892BF.svg)](https://php.net/) +[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.3-8892BF.svg)](https://php.net/) Gui provides the main logic for GUI functionality across all modules. From 618092e3503fa7f6237d72194222c05e8fc76041 Mon Sep 17 00:00:00 2001 From: mscherer Date: Fri, 20 Nov 2020 11:34:41 +0100 Subject: [PATCH 199/304] Sync meta files --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitattributes b/.gitattributes index 03b625d7..2be6c6c9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,6 +2,8 @@ # Set the default behavior, in case people don't have core.autocrlf set. * text text=auto eol=lf +*.php diff=php + # Denote all files that are truly binary and should not be modified. *.png binary *.jpg binary From 734536963d80af2beb039262a63276fe89c3950d Mon Sep 17 00:00:00 2001 From: Dimitriy Kravchenko Date: Tue, 1 Dec 2020 17:15:42 +0200 Subject: [PATCH 200/304] TE-8018 generate web profiler url fix --- .../Plugin/Twig/UrlTwigPlugin.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php index b9f8e6cb..bea845e1 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -35,17 +35,29 @@ class UrlTwigPlugin extends AbstractPlugin implements TwigPluginInterface */ public function extend(Environment $twig, ContainerInterface $container): Environment { - $twig->addFunction($this->getUrlFunction()); + $twig->addFunction($this->getUrlFunction($container)); return $twig; } /** + * @param \Spryker\Service\Container\ContainerInterface $container + * * @return \Twig\TwigFunction */ - protected function getUrlFunction(): TwigFunction + protected function getUrlFunction(ContainerInterface $container): TwigFunction { - return new TwigFunction(static::FUNCTION_NAME_URL, function (string $url, array $query = [], array $options = []) { + return new TwigFunction(static::FUNCTION_NAME_URL, function (string $url, array $query = [], array $options = []) use ($container) { + if ($url === '_wdt' || strpos($url, '_profile') !== false) { + /** @var \Symfony\Cmf\Component\Routing\ChainRouter $globalUrlGenerator */ + $globalUrlGenerator = $container->get('url_generator'); + $url = $globalUrlGenerator->generate($url, $query); + + $charset = mb_internal_encoding() ?: 'UTF-8'; + + return htmlspecialchars($url, ENT_QUOTES | ENT_SUBSTITUTE, $charset); + } + $url = Url::generate($url, $query, $options); $html = $url->buildEscaped(); From e106327f72950cae1ad40764a41cd270f6ef92b0 Mon Sep 17 00:00:00 2001 From: Dimitriy Kravchenko Date: Wed, 2 Dec 2020 10:38:45 +0200 Subject: [PATCH 201/304] TE-8018 review fix --- .../Communication/Plugin/Twig/UrlTwigPlugin.php | 14 +++++++++++++- src/Spryker/Zed/Gui/GuiConfig.php | 12 ++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php index bea845e1..238586b7 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -48,7 +48,7 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro protected function getUrlFunction(ContainerInterface $container): TwigFunction { return new TwigFunction(static::FUNCTION_NAME_URL, function (string $url, array $query = [], array $options = []) use ($container) { - if ($url === '_wdt' || strpos($url, '_profile') !== false) { + if ($this->isGlobalUrlGeneratorNeed($url)) { /** @var \Symfony\Cmf\Component\Routing\ChainRouter $globalUrlGenerator */ $globalUrlGenerator = $container->get('url_generator'); $url = $globalUrlGenerator->generate($url, $query); @@ -64,4 +64,16 @@ protected function getUrlFunction(ContainerInterface $container): TwigFunction return $html; }, ['is_safe' => ['html']]); } + + /** + * @param string $url + * + * @return bool + */ + protected function isGlobalUrlGeneratorNeed(string $url): bool + { + $regex = $this->getConfig()->getUrlsForGlobalGeneratorPattern(); + + return preg_match($regex, $url); + } } diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php index 9bc350f5..b438b8ee 100644 --- a/src/Spryker/Zed/Gui/GuiConfig.php +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -30,6 +30,8 @@ class GuiConfig extends AbstractBundleConfig protected const LIST_GROUP_MULTI_DEFAULT_TEMPLATE_PATH = '@Gui/ListGroup/list-group-multidimensional.twig'; + protected const URLS_FOR_GLOBAL_URL_GENERATOR_PATTERN = '/^_wdt$|_profile/im'; + /** * @api * @@ -131,4 +133,14 @@ public function getDefaultMultiListGroupTemplatePath(): string { return static::LIST_GROUP_MULTI_DEFAULT_TEMPLATE_PATH; } + + /** + * @api + * + * @return string + */ + public function getUrlsForGlobalGeneratorPattern(): string + { + return static::URLS_FOR_GLOBAL_URL_GENERATOR_PATTERN; + } } From d85ee6cc66b8780e0caec8716b5cdaf4f9622f25 Mon Sep 17 00:00:00 2001 From: Dimitriy Kravchenko Date: Thu, 3 Dec 2020 09:41:19 +0200 Subject: [PATCH 202/304] TE-8018 review fix --- .../Communication/Plugin/Twig/UrlTwigPlugin.php | 14 +++++++++----- src/Spryker/Zed/Gui/GuiConfig.php | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php index 238586b7..fe3aa375 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -22,6 +22,10 @@ class UrlTwigPlugin extends AbstractPlugin implements TwigPluginInterface { public const FUNCTION_NAME_URL = 'url'; + protected const DEFAULT_ENCODING = 'UTF-8'; + + protected const URL_GENERATOR_SERVICE = 'url_generator'; + /** * {@inheritDoc} * - Extends twig with "url" function to parse and generate URLs based on URL parts. @@ -48,12 +52,12 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro protected function getUrlFunction(ContainerInterface $container): TwigFunction { return new TwigFunction(static::FUNCTION_NAME_URL, function (string $url, array $query = [], array $options = []) use ($container) { - if ($this->isGlobalUrlGeneratorNeed($url)) { + if ($this->isUrlMatchingGlobalPattern($url)) { /** @var \Symfony\Cmf\Component\Routing\ChainRouter $globalUrlGenerator */ - $globalUrlGenerator = $container->get('url_generator'); + $globalUrlGenerator = $container->get(static::URL_GENERATOR_SERVICE); $url = $globalUrlGenerator->generate($url, $query); - $charset = mb_internal_encoding() ?: 'UTF-8'; + $charset = mb_internal_encoding() ?: static::DEFAULT_ENCODING; return htmlspecialchars($url, ENT_QUOTES | ENT_SUBSTITUTE, $charset); } @@ -70,9 +74,9 @@ protected function getUrlFunction(ContainerInterface $container): TwigFunction * * @return bool */ - protected function isGlobalUrlGeneratorNeed(string $url): bool + protected function isUrlMatchingGlobalPattern(string $url): bool { - $regex = $this->getConfig()->getUrlsForGlobalGeneratorPattern(); + $regex = $this->getConfig()->getRegexPatternForGlobalUrls(); return preg_match($regex, $url); } diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php index b438b8ee..b79f9c62 100644 --- a/src/Spryker/Zed/Gui/GuiConfig.php +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -139,7 +139,7 @@ public function getDefaultMultiListGroupTemplatePath(): string * * @return string */ - public function getUrlsForGlobalGeneratorPattern(): string + public function getRegexPatternForGlobalUrls(): string { return static::URLS_FOR_GLOBAL_URL_GENERATOR_PATTERN; } From 3872b5b8ab066ba7a2074f19487e797fcb5a4a52 Mon Sep 17 00:00:00 2001 From: Dimitriy Kravchenko Date: Tue, 8 Dec 2020 09:35:24 +0200 Subject: [PATCH 203/304] TE-8018 change url generator service (review fix) --- .../Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php index fe3aa375..acd1bca9 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -24,7 +24,10 @@ class UrlTwigPlugin extends AbstractPlugin implements TwigPluginInterface protected const DEFAULT_ENCODING = 'UTF-8'; - protected const URL_GENERATOR_SERVICE = 'url_generator'; + /** + * @uses \Spryker\Zed\Router\Communication\Plugin\Application\RouterApplicationPlugin::SERVICE_ROUTER + */ + protected const URL_GENERATOR_SERVICE = 'routers'; /** * {@inheritDoc} From b14d0bb14d16ef6787a6649fe42a4d0e085ef6fb Mon Sep 17 00:00:00 2001 From: mscherer Date: Wed, 9 Dec 2020 19:10:03 +0100 Subject: [PATCH 204/304] Fix CS. --- .../Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php index b8ffc52c..e28c3d38 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/ServiceProvider/GuiTwigExtensionServiceProvider.php @@ -35,7 +35,6 @@ public function register(Application $app) $app['twig'] = $app->share( $app->extend('twig', function (Environment $twig) { - $this->registerTwigFunctions($twig); $this->registerTwigFilters($twig); From 6a7d7ff99016fcb0a58088e21bfda4a2c6f1722c Mon Sep 17 00:00:00 2001 From: Dimitriy Kravchenko Date: Mon, 14 Dec 2020 10:06:18 +0200 Subject: [PATCH 205/304] TE-8018 always use service router (review fix) --- .../Plugin/Twig/UrlTwigPlugin.php | 33 +++++++------------ src/Spryker/Zed/Gui/GuiConfig.php | 12 ------- 2 files changed, 12 insertions(+), 33 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php index acd1bca9..0707c8c0 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/UrlTwigPlugin.php @@ -11,6 +11,7 @@ use Spryker\Service\UtilText\Model\Url\Url; use Spryker\Shared\TwigExtension\Dependency\Plugin\TwigPluginInterface; use Spryker\Zed\Kernel\Communication\AbstractPlugin; +use Symfony\Component\Routing\Exception\RouteNotFoundException; use Twig\Environment; use Twig\TwigFunction; @@ -27,7 +28,7 @@ class UrlTwigPlugin extends AbstractPlugin implements TwigPluginInterface /** * @uses \Spryker\Zed\Router\Communication\Plugin\Application\RouterApplicationPlugin::SERVICE_ROUTER */ - protected const URL_GENERATOR_SERVICE = 'routers'; + protected const SERVICE_ROUTER = 'routers'; /** * {@inheritDoc} @@ -55,32 +56,22 @@ public function extend(Environment $twig, ContainerInterface $container): Enviro protected function getUrlFunction(ContainerInterface $container): TwigFunction { return new TwigFunction(static::FUNCTION_NAME_URL, function (string $url, array $query = [], array $options = []) use ($container) { - if ($this->isUrlMatchingGlobalPattern($url)) { - /** @var \Symfony\Cmf\Component\Routing\ChainRouter $globalUrlGenerator */ - $globalUrlGenerator = $container->get(static::URL_GENERATOR_SERVICE); - $url = $globalUrlGenerator->generate($url, $query); + try { + if ($container->has(static::SERVICE_ROUTER)) { + /** @var \Symfony\Cmf\Component\Routing\ChainRouter $router */ + $router = $container->get(static::SERVICE_ROUTER); + $url = $router->generate($url, $query); - $charset = mb_internal_encoding() ?: static::DEFAULT_ENCODING; + $charset = mb_internal_encoding() ?: static::DEFAULT_ENCODING; - return htmlspecialchars($url, ENT_QUOTES | ENT_SUBSTITUTE, $charset); + return htmlspecialchars($url, ENT_QUOTES | ENT_SUBSTITUTE, $charset); + } + } catch (RouteNotFoundException $exception) { } $url = Url::generate($url, $query, $options); - $html = $url->buildEscaped(); - return $html; + return $url->buildEscaped(); }, ['is_safe' => ['html']]); } - - /** - * @param string $url - * - * @return bool - */ - protected function isUrlMatchingGlobalPattern(string $url): bool - { - $regex = $this->getConfig()->getRegexPatternForGlobalUrls(); - - return preg_match($regex, $url); - } } diff --git a/src/Spryker/Zed/Gui/GuiConfig.php b/src/Spryker/Zed/Gui/GuiConfig.php index b79f9c62..9bc350f5 100644 --- a/src/Spryker/Zed/Gui/GuiConfig.php +++ b/src/Spryker/Zed/Gui/GuiConfig.php @@ -30,8 +30,6 @@ class GuiConfig extends AbstractBundleConfig protected const LIST_GROUP_MULTI_DEFAULT_TEMPLATE_PATH = '@Gui/ListGroup/list-group-multidimensional.twig'; - protected const URLS_FOR_GLOBAL_URL_GENERATOR_PATTERN = '/^_wdt$|_profile/im'; - /** * @api * @@ -133,14 +131,4 @@ public function getDefaultMultiListGroupTemplatePath(): string { return static::LIST_GROUP_MULTI_DEFAULT_TEMPLATE_PATH; } - - /** - * @api - * - * @return string - */ - public function getRegexPatternForGlobalUrls(): string - { - return static::URLS_FOR_GLOBAL_URL_GENERATOR_PATTERN; - } } From 397bd8f28b3a24836fc26d62e2be31161babaabc Mon Sep 17 00:00:00 2001 From: Andrey Maslov <37797323+andrew-maslov@users.noreply.github.com> Date: Tue, 22 Dec 2020 22:04:50 +0200 Subject: [PATCH 206/304] TE-7414 Execute formatter on whole project (#7650) * TE-7291: formatted files according to prettier config * TE-7414: fixed code style according to formatter * TE-7414: fixed formatting * TE-7414: executed formatter * TE-7414: Executed formatter for new files * TE-7402 Execute format check in CI (#7746) * TE-7402: added checks to travis * TE-7414: test commit * TE-7414: test commit * TE-7414: updated prettierignor * TE-7414: updated ignore files for travis * TE-7402: added codelyzer package * TE-7402: added additional modules * TE-7402: updated travis config --- assets/Automation/zed.antelope.js | 61 +- assets/Inspinia/css/style.css | 8669 +++++++++-------- assets/Inspinia/inspinia-helpers.js | 53 +- assets/Inspinia/inspinia.js | 95 +- assets/Zed/js/modules/editor.js | 24 +- assets/Zed/js/modules/init.js | 70 +- assets/Zed/js/modules/legacy/SprykerAjax.js | 25 +- .../js/modules/legacy/SprykerAjaxCallbacks.js | 10 +- assets/Zed/js/modules/legacy/SprykerAlert.js | 45 +- assets/Zed/js/modules/legacy/fixHeight.js | 24 +- assets/Zed/js/modules/libs/data-table.js | 25 +- .../js/modules/libs/dependent-select-box.js | 32 +- assets/Zed/js/modules/libs/i18n/af.json | 44 +- assets/Zed/js/modules/libs/i18n/am.json | 28 +- assets/Zed/js/modules/libs/i18n/ar.json | 42 +- assets/Zed/js/modules/libs/i18n/be.json | 40 +- assets/Zed/js/modules/libs/i18n/bg.json | 30 +- assets/Zed/js/modules/libs/i18n/ca.json | 30 +- assets/Zed/js/modules/libs/i18n/cs.json | 42 +- assets/Zed/js/modules/libs/i18n/cy.json | 44 +- assets/Zed/js/modules/libs/i18n/da.json | 30 +- assets/Zed/js/modules/libs/i18n/de.json | 80 +- assets/Zed/js/modules/libs/i18n/el.json | 50 +- assets/Zed/js/modules/libs/i18n/en.json | 44 +- assets/Zed/js/modules/libs/i18n/eo.json | 42 +- assets/Zed/js/modules/libs/i18n/es.json | 52 +- assets/Zed/js/modules/libs/i18n/et.json | 28 +- assets/Zed/js/modules/libs/i18n/eu.json | 46 +- assets/Zed/js/modules/libs/i18n/fa.json | 42 +- assets/Zed/js/modules/libs/i18n/fi.json | 74 +- assets/Zed/js/modules/libs/i18n/fil.json | 30 +- assets/Zed/js/modules/libs/i18n/fr.json | 54 +- assets/Zed/js/modules/libs/i18n/ga.json | 30 +- assets/Zed/js/modules/libs/i18n/gl.json | 46 +- assets/Zed/js/modules/libs/i18n/gu.json | 44 +- assets/Zed/js/modules/libs/i18n/hi.json | 30 +- assets/Zed/js/modules/libs/i18n/hr.json | 32 +- assets/Zed/js/modules/libs/i18n/hu.json | 78 +- assets/Zed/js/modules/libs/i18n/hy.json | 44 +- assets/Zed/js/modules/libs/i18n/id.json | 32 +- assets/Zed/js/modules/libs/i18n/is.json | 44 +- assets/Zed/js/modules/libs/i18n/it.json | 44 +- assets/Zed/js/modules/libs/i18n/iw.json | 26 +- assets/Zed/js/modules/libs/i18n/ja.json | 44 +- assets/Zed/js/modules/libs/i18n/ka.json | 42 +- assets/Zed/js/modules/libs/i18n/kk.json | 42 +- assets/Zed/js/modules/libs/i18n/km.json | 28 +- assets/Zed/js/modules/libs/i18n/ko.json | 44 +- assets/Zed/js/modules/libs/i18n/lt.json | 26 +- assets/Zed/js/modules/libs/i18n/lv.json | 40 +- assets/Zed/js/modules/libs/i18n/mk.json | 34 +- assets/Zed/js/modules/libs/i18n/mn.json | 42 +- assets/Zed/js/modules/libs/i18n/ms.json | 42 +- assets/Zed/js/modules/libs/i18n/ne.json | 44 +- assets/Zed/js/modules/libs/i18n/nl.json | 2 +- assets/Zed/js/modules/libs/i18n/pl.json | 40 +- assets/Zed/js/modules/libs/i18n/ps.json | 44 +- assets/Zed/js/modules/libs/i18n/pt.json | 40 +- assets/Zed/js/modules/libs/i18n/ro.json | 30 +- assets/Zed/js/modules/libs/i18n/ru.json | 40 +- assets/Zed/js/modules/libs/i18n/si.json | 44 +- assets/Zed/js/modules/libs/i18n/sk.json | 42 +- assets/Zed/js/modules/libs/i18n/sl.json | 44 +- assets/Zed/js/modules/libs/i18n/sq.json | 44 +- assets/Zed/js/modules/libs/i18n/sr.json | 42 +- assets/Zed/js/modules/libs/i18n/sv.json | 42 +- assets/Zed/js/modules/libs/i18n/sw.json | 44 +- assets/Zed/js/modules/libs/i18n/ta.json | 44 +- assets/Zed/js/modules/libs/i18n/th.json | 32 +- assets/Zed/js/modules/libs/i18n/tr.json | 58 +- assets/Zed/js/modules/libs/i18n/uk.json | 38 +- assets/Zed/js/modules/libs/i18n/ur.json | 30 +- assets/Zed/js/modules/libs/i18n/uz.json | 42 +- assets/Zed/js/modules/libs/i18n/vi.json | 30 +- assets/Zed/js/modules/libs/i18n/zh.json | 44 +- assets/Zed/js/modules/libs/ibox.js | 4 +- assets/Zed/js/modules/libs/safe-checks.js | 16 +- assets/Zed/js/modules/libs/tabs.js | 38 +- .../modules/libs/translation-copy-fields.js | 25 +- .../Zed/js/spryker-zed-gui-commons.entry.js | 4 +- assets/Zed/package.json | 58 +- assets/Zed/sass/_action-buttons.scss | 70 +- assets/Zed/sass/_custom.scss | 3 +- assets/Zed/sass/_data-tables.scss | 87 +- assets/Zed/sass/_flags.scss | 456 +- assets/Zed/sass/_inspinia.scss | 21 +- assets/Zed/sass/_wave-loader.scss | 4 +- phpstan.json | 2 +- 88 files changed, 6245 insertions(+), 6242 deletions(-) diff --git a/assets/Automation/zed.antelope.js b/assets/Automation/zed.antelope.js index 0a3de306..ebdd3881 100644 --- a/assets/Automation/zed.antelope.js +++ b/assets/Automation/zed.antelope.js @@ -22,33 +22,38 @@ let config = { alias: { ZedGui: `${guiFolder}/assets/Zed/js/modules/commons`, ZedGuiEditorConfiguration: `${guiFolder}/assets/Zed/js/modules/editor`, - ZedGuiModules: `${guiFolder}/assets/Zed/js/modules` - } + ZedGuiModules: `${guiFolder}/assets/Zed/js/modules`, + }, }, resolveLoader: { - root: antelope.paths.loaders + root: antelope.paths.loaders, }, output: { path: path.join(cwd, './public/Zed'), - filename: 'assets/js/[name].js' + filename: 'assets/js/[name].js', }, module: { - loaders: [{ - test: /\.css\??(\d*\w*=?\.?)+$/i, - loader: ExtractTextPlugin.extract('style', 'css') - }, { - test: /\.scss$/i, - loader: ExtractTextPlugin.extract('style', 'css!resolve-url!sass?sourceMap') - }, { - test: /\.(ttf|woff2?|eot)\??(\d*\w*=?\.?)+$/i, - loader: 'file?name=/assets/fonts/[name].[ext]' - }, { - test: /\.(jpe?g|png|gif|svg)\??(\d*\w*=?\.?)+$/i, - loader: 'file?name=/assets/img/[name].[ext]' - }] + loaders: [ + { + test: /\.css\??(\d*\w*=?\.?)+$/i, + loader: ExtractTextPlugin.extract('style', 'css'), + }, + { + test: /\.scss$/i, + loader: ExtractTextPlugin.extract('style', 'css!resolve-url!sass?sourceMap'), + }, + { + test: /\.(ttf|woff2?|eot)\??(\d*\w*=?\.?)+$/i, + loader: 'file?name=/assets/fonts/[name].[ext]', + }, + { + test: /\.(jpe?g|png|gif|svg)\??(\d*\w*=?\.?)+$/i, + loader: 'file?name=/assets/img/[name].[ext]', + }, + ], }, sassLoader: { - includePaths: antelope.paths.loaders + includePaths: antelope.paths.loaders, }, plugins: [ new webpack.optimize.CommonsChunkPlugin('spryker-zed-gui-commons', 'assets/js/spryker-zed-gui-commons.js'), @@ -59,27 +64,27 @@ let config = { // legacy provider SprykerAjax: `${guiFolder}/assets/Zed/js/modules/legacy/SprykerAjax`, SprykerAjaxCallbacks: `${guiFolder}/assets/Zed/js/modules/legacy/SprykerAjaxCallbacks`, - SprykerAlert: `${guiFolder}/assets/Zed/js/modules/legacy/SprykerAlert` + SprykerAlert: `${guiFolder}/assets/Zed/js/modules/legacy/SprykerAlert`, }), new ExtractTextPlugin('assets/css/[name].css', { - allChunks: true + allChunks: true, }), new webpack.DefinePlugin({ PRODUCTION: antelope.options.production, DEV: !antelope.options.production, WATCH: antelope.options.watch, - 'require.specified': 'require.resolve' - }) + 'require.specified': 'require.resolve', + }), ], watchOptions: { aggregateTimeout: 300, - poll: 1000 + poll: 1000, }, progress: true, failOnError: false, devtool: 'sourceMap', debug: antelope.options.debug, - watch: antelope.options.watch + watch: antelope.options.watch, }; if (antelope.options.production) { @@ -88,12 +93,12 @@ if (antelope.options.production) { comments: false, sourceMap: false, compress: { - warnings: false + warnings: false, }, mangle: { - except: ['$', 'exports', 'require'] - } - }) + except: ['$', 'exports', 'require'], + }, + }), ]); } diff --git a/assets/Inspinia/css/style.css b/assets/Inspinia/css/style.css index 605d82f7..aacd03b4 100755 --- a/assets/Inspinia/css/style.css +++ b/assets/Inspinia/css/style.css @@ -5,655 +5,655 @@ * INSPINIA - Responsive Admin Theme * version 2.7.1 */ - + h1, h2, h3, h4, h5, h6 { - font-weight: 100; + font-weight: 100; } h1 { - font-size: 30px; + font-size: 30px; } h2 { - font-size: 24px; + font-size: 24px; } h3 { - font-size: 16px; + font-size: 16px; } h4 { - font-size: 14px; + font-size: 14px; } h5 { - font-size: 12px; + font-size: 12px; } h6 { - font-size: 10px; + font-size: 10px; } h3, h4, h5 { - margin-top: 5px; - font-weight: 600; + margin-top: 5px; + font-weight: 600; } .nav > li > a { - color: #a7b1c2; - font-weight: 600; - padding: 14px 20px 14px 25px; + color: #a7b1c2; + font-weight: 600; + padding: 14px 20px 14px 25px; } .nav.navbar-right > li > a { - color: #999c9e; + color: #999c9e; } .nav > li.active > a { - color: #ffffff; + color: #ffffff; } .navbar-default .nav > li > a:hover, .navbar-default .nav > li > a:focus { - background-color: #293846; - color: white; + background-color: #293846; + color: white; } .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { - background: #fff; + background: #fff; } .nav.navbar-top-links > li > a:hover, .nav.navbar-top-links > li > a:focus { - background-color: transparent; + background-color: transparent; } .nav > li > a i { - margin-right: 6px; + margin-right: 6px; } .navbar { - border: 0; + border: 0; } .navbar-default { - background-color: transparent; - border-color: #2f4050; + background-color: transparent; + border-color: #2f4050; } .navbar-top-links li { - display: inline-block; + display: inline-block; } .navbar-top-links li:last-child { - margin-right: 40px; + margin-right: 40px; } .body-small .navbar-top-links li:last-child { - margin-right: 0; + margin-right: 0; } .navbar-top-links li a { - padding: 20px 10px; - min-height: 50px; + padding: 20px 10px; + min-height: 50px; } .dropdown-menu { - border: medium none; - border-radius: 3px; - box-shadow: 0 0 3px rgba(86, 96, 117, 0.7); - display: none; - float: left; - font-size: 12px; - left: 0; - list-style: none outside none; - padding: 0; - position: absolute; - text-shadow: none; - top: 100%; - z-index: 1000; + border: medium none; + border-radius: 3px; + box-shadow: 0 0 3px rgba(86, 96, 117, 0.7); + display: none; + float: left; + font-size: 12px; + left: 0; + list-style: none outside none; + padding: 0; + position: absolute; + text-shadow: none; + top: 100%; + z-index: 1000; } .dropdown-menu > li > a { - border-radius: 3px; - color: inherit; - line-height: 25px; - margin: 4px; - text-align: left; - font-weight: normal; + border-radius: 3px; + color: inherit; + line-height: 25px; + margin: 4px; + text-align: left; + font-weight: normal; } .dropdown-menu > .active > a, .dropdown-menu > .active > a:focus, .dropdown-menu > .active > a:hover { - color: #fff; - text-decoration: none; - background-color: #1ab394; - outline: 0; + color: #fff; + text-decoration: none; + background-color: #1ab394; + outline: 0; } .dropdown-menu > li > a.font-bold { - font-weight: 600; + font-weight: 600; } .navbar-top-links .dropdown-menu li { - display: block; + display: block; } .navbar-top-links .dropdown-menu li:last-child { - margin-right: 0; + margin-right: 0; } .navbar-top-links .dropdown-menu li a { - padding: 3px 20px; - min-height: 0; + padding: 3px 20px; + min-height: 0; } .navbar-top-links .dropdown-menu li a div { - white-space: normal; + white-space: normal; } .navbar-top-links .dropdown-messages, .navbar-top-links .dropdown-tasks, .navbar-top-links .dropdown-alerts { - width: 310px; - min-width: 0; + width: 310px; + min-width: 0; } .navbar-top-links .dropdown-messages { - margin-left: 5px; + margin-left: 5px; } .navbar-top-links .dropdown-tasks { - margin-left: -59px; + margin-left: -59px; } .navbar-top-links .dropdown-alerts { - margin-left: -123px; + margin-left: -123px; } .navbar-top-links .dropdown-user { - right: 0; - left: auto; + right: 0; + left: auto; } .dropdown-messages, .dropdown-alerts { - padding: 10px 10px 10px 10px; + padding: 10px 10px 10px 10px; } .dropdown-messages li a, .dropdown-alerts li a { - font-size: 12px; + font-size: 12px; } .dropdown-messages li em, .dropdown-alerts li em { - font-size: 10px; + font-size: 10px; } .nav.navbar-top-links .dropdown-alerts a { - font-size: 12px; + font-size: 12px; } .nav-header { - padding: 33px 25px; - background-color: #2f4050; - background-image: url("../img/patterns/header-profile.png"); + padding: 33px 25px; + background-color: #2f4050; + background-image: url('../img/patterns/header-profile.png'); } .pace-done .nav-header { - transition: all 0.4s; + transition: all 0.4s; } ul.nav-second-level { - background: #293846; + background: #293846; } .nav > li.active { - border-left: 4px solid #19aa8d; - background: #293846; + border-left: 4px solid #19aa8d; + background: #293846; } .nav.nav-second-level > li.active { - border: none; + border: none; } .nav.nav-second-level.collapse[style] { - height: auto !important; + height: auto !important; } .nav-header a { - color: #DFE4ED; + color: #dfe4ed; } .nav-header .text-muted { - color: #8095a8; + color: #8095a8; } .minimalize-styl-2 { - padding: 4px 12px; - margin: 14px 5px 5px 20px; - font-size: 14px; - float: left; + padding: 4px 12px; + margin: 14px 5px 5px 20px; + font-size: 14px; + float: left; } .navbar-form-custom { - float: left; - height: 50px; - padding: 0; - width: 200px; - display: block; + float: left; + height: 50px; + padding: 0; + width: 200px; + display: block; } .navbar-form-custom .form-group { - margin-bottom: 0; + margin-bottom: 0; } .nav.navbar-top-links a { - font-size: 14px; + font-size: 14px; } .navbar-form-custom .form-control { - background: none repeat scroll 0 0 rgba(0, 0, 0, 0); - border: medium none; - font-size: 14px; - height: 60px; - margin: 0; - z-index: 2000; + background: none repeat scroll 0 0 rgba(0, 0, 0, 0); + border: medium none; + font-size: 14px; + height: 60px; + margin: 0; + z-index: 2000; } .count-info .label { - line-height: 12px; - padding: 2px 5px; - position: absolute; - right: 6px; - top: 12px; + line-height: 12px; + padding: 2px 5px; + position: absolute; + right: 6px; + top: 12px; } .arrow { - float: right; + float: right; } .fa.arrow:before { - content: "\f104"; + content: '\f104'; } .active > a > .fa.arrow:before { - content: "\f107"; + content: '\f107'; } .nav-second-level li, .nav-third-level li { - border-bottom: none !important; + border-bottom: none !important; } .nav-second-level li a { - padding: 7px 10px 7px 10px; - padding-left: 52px; + padding: 7px 10px 7px 10px; + padding-left: 52px; } .nav-third-level li a { - padding-left: 62px; + padding-left: 62px; } .nav-second-level li:last-child { - margin-bottom: 10px; + margin-bottom: 10px; } body:not(.fixed-sidebar):not(.canvas-menu).mini-navbar .nav li:hover > .nav-second-level, .mini-navbar .nav li:focus > .nav-second-level { - display: block; - border-radius: 0 2px 2px 0; - min-width: 140px; - height: auto; + display: block; + border-radius: 0 2px 2px 0; + min-width: 140px; + height: auto; } body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { - font-size: 12px; - border-radius: 3px; + font-size: 12px; + border-radius: 3px; } .fixed-nav .slimScrollDiv #side-menu { - padding-bottom: 60px; + padding-bottom: 60px; } .mini-navbar .nav-second-level li a { - padding: 10px 10px 10px 15px; + padding: 10px 10px 10px 15px; } .mini-navbar .nav .nav-second-level { - position: absolute; - left: 70px; - top: 0; - background-color: #2f4050; - padding: 10px 10px 10px 10px; - font-size: 12px; + position: absolute; + left: 70px; + top: 0; + background-color: #2f4050; + padding: 10px 10px 10px 10px; + font-size: 12px; } .canvas-menu.mini-navbar .nav-second-level { - background: #293846; + background: #293846; } .mini-navbar li.active .nav-second-level { - left: 65px; + left: 65px; } .navbar-default .special_link a { - background: #1ab394; - color: white; + background: #1ab394; + color: white; } .navbar-default .special_link a:hover { - background: #17987e !important; - color: white; + background: #17987e !important; + color: white; } .navbar-default .special_link a span.label { - background: #fff; - color: #1ab394; + background: #fff; + color: #1ab394; } .navbar-default .landing_link a { - background: #1cc09f; - color: white; + background: #1cc09f; + color: white; } .navbar-default .landing_link a:hover { - background: #1ab394 !important; - color: white; + background: #1ab394 !important; + color: white; } .navbar-default .landing_link a span.label { - background: #fff; - color: #1cc09f; + background: #fff; + color: #1cc09f; } .logo-element { - text-align: center; - font-size: 18px; - font-weight: 600; - color: white; - display: none; - padding: 18px 0; + text-align: center; + font-size: 18px; + font-weight: 600; + color: white; + display: none; + padding: 18px 0; } .pace-done .navbar-static-side, .pace-done .nav-header, .pace-done li.active, .pace-done #page-wrapper, .pace-done .footer { - -webkit-transition: all 0.4s; - -moz-transition: all 0.4s; - -o-transition: all 0.4s; - transition: all 0.4s; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; } .navbar-fixed-top { - background: #fff; - transition-duration: 0.4s; - border-bottom: 1px solid #e7eaec !important; - z-index: 2030; + background: #fff; + transition-duration: 0.4s; + border-bottom: 1px solid #e7eaec !important; + z-index: 2030; } .navbar-fixed-top, .navbar-static-top { - background: #f3f3f4; + background: #f3f3f4; } .fixed-nav #wrapper { - margin-top: 0; + margin-top: 0; } .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - -moz-border-bottom-colors: none; - -moz-border-left-colors: none; - -moz-border-right-colors: none; - -moz-border-top-colors: none; - background: none; - border-color: #dddddd #dddddd rgba(0, 0, 0, 0); - border-bottom: #f3f3f4; - border-image: none; - border-style: solid; - border-width: 1px; - color: #555555; - cursor: default; + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + background: none; + border-color: #dddddd #dddddd rgba(0, 0, 0, 0); + border-bottom: #f3f3f4; + border-image: none; + border-style: solid; + border-width: 1px; + color: #555555; + cursor: default; } .nav.nav-tabs li { - background: none; - border: none; + background: none; + border: none; } body.fixed-nav #wrapper .navbar-static-side, body.fixed-nav #wrapper #page-wrapper { - margin-top: 60px; + margin-top: 60px; } body.top-navigation.fixed-nav #wrapper #page-wrapper { - margin-top: 0; + margin-top: 0; } body.fixed-nav.fixed-nav-basic .navbar-fixed-top { - left: 220px; + left: 220px; } body.fixed-nav.fixed-nav-basic.mini-navbar .navbar-fixed-top { - left: 70px; + left: 70px; } body.fixed-nav.fixed-nav-basic.fixed-sidebar.mini-navbar .navbar-fixed-top { - left: 0; + left: 0; } body.fixed-nav.fixed-nav-basic #wrapper .navbar-static-side { - margin-top: 0; + margin-top: 0; } body.fixed-nav.fixed-nav-basic.body-small .navbar-fixed-top { - left: 0; + left: 0; } body.fixed-nav.fixed-nav-basic.fixed-sidebar.mini-navbar.body-small .navbar-fixed-top { - left: 220px; + left: 220px; } .fixed-nav .minimalize-styl-2 { - margin: 14px 5px 5px 15px; + margin: 14px 5px 5px 15px; } .body-small .navbar-fixed-top { - margin-left: 0; + margin-left: 0; } body.mini-navbar .navbar-static-side { - width: 70px; + width: 70px; } body.mini-navbar .profile-element, body.mini-navbar .nav-label, body.mini-navbar .navbar-default .nav li a span { - display: none; + display: none; } body.canvas-menu .profile-element { - display: block; + display: block; } body:not(.fixed-sidebar):not(.canvas-menu).mini-navbar .nav-second-level { - display: none; + display: none; } body.mini-navbar .navbar-default .nav > li > a { - font-size: 16px; + font-size: 16px; } body.mini-navbar .logo-element { - display: block; + display: block; } body.canvas-menu .logo-element { - display: none; + display: none; } body.mini-navbar .nav-header { - padding: 0; - background-color: #1ab394; + padding: 0; + background-color: #1ab394; } body.canvas-menu .nav-header { - padding: 33px 25px; + padding: 33px 25px; } body.mini-navbar #page-wrapper { - margin: 0 0 0 70px; + margin: 0 0 0 70px; } body.fixed-sidebar.mini-navbar .footer, body.canvas-menu.mini-navbar .footer { - margin: 0 0 0 0 !important; + margin: 0 0 0 0 !important; } body.canvas-menu.mini-navbar #page-wrapper, body.canvas-menu.mini-navbar .footer { - margin: 0 0 0 0; + margin: 0 0 0 0; } body.fixed-sidebar .navbar-static-side, body.canvas-menu .navbar-static-side { - position: fixed; - width: 220px; - z-index: 2001; - height: 100%; + position: fixed; + width: 220px; + z-index: 2001; + height: 100%; } body.fixed-sidebar.mini-navbar .navbar-static-side { - width: 0; + width: 0; } body.fixed-sidebar.mini-navbar #page-wrapper { - margin: 0 0 0 0; + margin: 0 0 0 0; } body.body-small.fixed-sidebar.mini-navbar #page-wrapper { - margin: 0 0 0 220px; + margin: 0 0 0 220px; } body.body-small.fixed-sidebar.mini-navbar .navbar-static-side { - width: 220px; + width: 220px; } .fixed-sidebar.mini-navbar .nav li:focus > .nav-second-level, .canvas-menu.mini-navbar .nav li:focus > .nav-second-level { - display: block; - height: auto; + display: block; + height: auto; } body.fixed-sidebar.mini-navbar .navbar-default .nav > li > .nav-second-level li a { - font-size: 12px; - border-radius: 3px; + font-size: 12px; + border-radius: 3px; } body.canvas-menu.mini-navbar .navbar-default .nav > li > .nav-second-level li a { - font-size: 13px; - border-radius: 3px; + font-size: 13px; + border-radius: 3px; } .fixed-sidebar.mini-navbar .nav-second-level li a, .canvas-menu.mini-navbar .nav-second-level li a { - padding: 10px 10px 10px 15px; + padding: 10px 10px 10px 15px; } .fixed-sidebar.mini-navbar .nav-second-level, .canvas-menu.mini-navbar .nav-second-level { - position: relative; - padding: 0; - font-size: 13px; + position: relative; + padding: 0; + font-size: 13px; } .fixed-sidebar.mini-navbar li.active .nav-second-level, .canvas-menu.mini-navbar li.active .nav-second-level { - left: 0; + left: 0; } body.fixed-sidebar.mini-navbar .navbar-default .nav > li > a, body.canvas-menu.mini-navbar .navbar-default .nav > li > a { - font-size: 13px; + font-size: 13px; } body.fixed-sidebar.mini-navbar .nav-label, body.fixed-sidebar.mini-navbar .navbar-default .nav li a span, body.canvas-menu.mini-navbar .nav-label, body.canvas-menu.mini-navbar .navbar-default .nav li a span { - display: inline; + display: inline; } body.canvas-menu.mini-navbar .navbar-default .nav li .profile-element a span { - display: block; + display: block; } .canvas-menu.mini-navbar .nav-second-level li a, .fixed-sidebar.mini-navbar .nav-second-level li a { - padding: 7px 10px 7px 52px; + padding: 7px 10px 7px 52px; } .fixed-sidebar.mini-navbar .nav-second-level, .canvas-menu.mini-navbar .nav-second-level { - left: 0; + left: 0; } body.canvas-menu nav.navbar-static-side { - z-index: 2001; - background: #2f4050; - height: 100%; - position: fixed; - display: none; + z-index: 2001; + background: #2f4050; + height: 100%; + position: fixed; + display: none; } body.canvas-menu.mini-navbar nav.navbar-static-side { - display: block; - width: 220px; + display: block; + width: 220px; } .top-navigation #page-wrapper { - margin-left: 0; + margin-left: 0; } .top-navigation .navbar-nav .dropdown-menu > .active > a { - background: white; - color: #1ab394; - font-weight: bold; + background: white; + color: #1ab394; + font-weight: bold; } .white-bg .navbar-fixed-top, .white-bg .navbar-static-top { - background: #fff; + background: #fff; } .top-navigation .navbar { - margin-bottom: 0; + margin-bottom: 0; } .top-navigation .nav > li > a { - padding: 15px 20px; - color: #676a6c; + padding: 15px 20px; + color: #676a6c; } .top-navigation .nav > li a:hover, .top-navigation .nav > li a:focus { - background: #fff; - color: #1ab394; + background: #fff; + color: #1ab394; } .top-navigation .navbar .nav > li.active { - background: #fff; - border: none; + background: #fff; + border: none; } .top-navigation .nav > li.active > a { - color: #1ab394; + color: #1ab394; } .top-navigation .navbar-right { - margin-right: 10px; + margin-right: 10px; } .top-navigation .navbar-nav .dropdown-menu { - box-shadow: none; - border: 1px solid #e7eaec; + box-shadow: none; + border: 1px solid #e7eaec; } .top-navigation .dropdown-menu > li > a { - margin: 0; - padding: 7px 20px; + margin: 0; + padding: 7px 20px; } .navbar .dropdown-menu { - margin-top: 0; + margin-top: 0; } .top-navigation .navbar-brand { - background: #1ab394; - color: #fff; - padding: 15px 25px; + background: #1ab394; + color: #fff; + padding: 15px 25px; } .top-navigation .navbar-top-links li:last-child { - margin-right: 0; + margin-right: 0; } .top-navigation.mini-navbar #page-wrapper, .top-navigation.body-small.fixed-sidebar.mini-navbar #page-wrapper, .mini-navbar .top-navigation #page-wrapper, .body-small.fixed-sidebar.mini-navbar .top-navigation #page-wrapper, .canvas-menu #page-wrapper { - margin: 0; + margin: 0; } .top-navigation.fixed-nav #wrapper, .fixed-nav #wrapper.top-navigation { - margin-top: 50px; + margin-top: 50px; } .top-navigation .footer.fixed { - margin-left: 0 !important; + margin-left: 0 !important; } .top-navigation .wrapper.wrapper-content { - padding: 40px; + padding: 40px; } .top-navigation.body-small .wrapper.wrapper-content, .body-small .top-navigation .wrapper.wrapper-content { - padding: 40px 0 40px 0; + padding: 40px 0 40px 0; } .navbar-toggle { - background-color: #1ab394; - color: #fff; - padding: 6px 12px; - font-size: 14px; + background-color: #1ab394; + color: #fff; + padding: 6px 12px; + font-size: 14px; } .top-navigation .navbar-nav .open .dropdown-menu > li > a, .top-navigation .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 10px 15px 10px 20px; + padding: 10px 15px 10px 20px; } @media (max-width: 768px) { - .top-navigation .navbar-header { - display: block; - float: none; - } + .top-navigation .navbar-header { + display: block; + float: none; + } } .menu-visible-lg, .menu-visible-md { - display: none !important; + display: none !important; } @media (min-width: 1200px) { - .menu-visible-lg { - display: block !important; - } + .menu-visible-lg { + display: block !important; + } } @media (min-width: 992px) { - .menu-visible-md { - display: block !important; - } + .menu-visible-md { + display: block !important; + } } @media (max-width: 767px) { - .menu-visible-md { - display: block !important; - } - .menu-visible-lg { - display: block !important; - } + .menu-visible-md { + display: block !important; + } + .menu-visible-lg { + display: block !important; + } } .btn { - border-radius: 3px; + border-radius: 3px; } .float-e-margins .btn { - margin-bottom: 5px; + margin-bottom: 5px; } .btn-w-m { - min-width: 120px; + min-width: 120px; } .btn-primary.btn-outline { - color: #1ab394; + color: #1ab394; } .btn-success.btn-outline { - color: #1c84c6; + color: #1c84c6; } .btn-info.btn-outline { - color: #23c6c8; + color: #23c6c8; } .btn-warning.btn-outline { - color: #f8ac59; + color: #f8ac59; } .btn-danger.btn-outline { - color: #ed5565; + color: #ed5565; } .btn-primary.btn-outline:hover, .btn-success.btn-outline:hover, .btn-info.btn-outline:hover, .btn-warning.btn-outline:hover, .btn-danger.btn-outline:hover { - color: #fff; + color: #fff; } .btn-primary { - background-color: #1ab394; - border-color: #1ab394; - color: #FFFFFF; + background-color: #1ab394; + border-color: #1ab394; + color: #ffffff; } .btn-primary:hover, .btn-primary:focus, @@ -664,14 +664,14 @@ body.canvas-menu.mini-navbar nav.navbar-static-side { .btn-primary:active:hover, .btn-primary.active:hover, .btn-primary.active:focus { - background-color: #18a689; - border-color: #18a689; - color: #FFFFFF; + background-color: #18a689; + border-color: #18a689; + color: #ffffff; } .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { - background-image: none; + background-image: none; } .btn-primary.disabled, .btn-primary.disabled:hover, @@ -688,13 +688,13 @@ fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active { - background-color: #1dc5a3; - border-color: #1dc5a3; + background-color: #1dc5a3; + border-color: #1dc5a3; } .btn-success { - background-color: #1c84c6; - border-color: #1c84c6; - color: #FFFFFF; + background-color: #1c84c6; + border-color: #1c84c6; + color: #ffffff; } .btn-success:hover, .btn-success:focus, @@ -705,14 +705,14 @@ fieldset[disabled] .btn-primary.active { .btn-success:active:hover, .btn-success.active:hover, .btn-success.active:focus { - background-color: #1a7bb9; - border-color: #1a7bb9; - color: #FFFFFF; + background-color: #1a7bb9; + border-color: #1a7bb9; + color: #ffffff; } .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { - background-image: none; + background-image: none; } .btn-success.disabled, .btn-success.disabled:hover, @@ -729,13 +729,13 @@ fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active { - background-color: #1f90d8; - border-color: #1f90d8; + background-color: #1f90d8; + border-color: #1f90d8; } .btn-info { - background-color: #23c6c8; - border-color: #23c6c8; - color: #FFFFFF; + background-color: #23c6c8; + border-color: #23c6c8; + color: #ffffff; } .btn-info:hover, .btn-info:focus, @@ -746,14 +746,14 @@ fieldset[disabled] .btn-success.active { .btn-info:active:hover, .btn-info.active:hover, .btn-info.active:focus { - background-color: #21b9bb; - border-color: #21b9bb; - color: #FFFFFF; + background-color: #21b9bb; + border-color: #21b9bb; + color: #ffffff; } .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { - background-image: none; + background-image: none; } .btn-info.disabled, .btn-info.disabled:hover, @@ -770,13 +770,13 @@ fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active { - background-color: #26d7d9; - border-color: #26d7d9; + background-color: #26d7d9; + border-color: #26d7d9; } .btn-default { - color: inherit; - background: white; - border: 1px solid #e7eaec; + color: inherit; + background: white; + border: 1px solid #e7eaec; } .btn-default:hover, .btn-default:focus, @@ -787,13 +787,13 @@ fieldset[disabled] .btn-info.active { .btn-default:active:hover, .btn-default.active:hover, .btn-default.active:focus { - color: inherit; - border: 1px solid #d2d2d2; + color: inherit; + border: 1px solid #d2d2d2; } .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset; } .btn-default.disabled, .btn-default.disabled:hover, @@ -810,12 +810,12 @@ fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active { - color: #cacaca; + color: #cacaca; } .btn-warning { - background-color: #f8ac59; - border-color: #f8ac59; - color: #FFFFFF; + background-color: #f8ac59; + border-color: #f8ac59; + color: #ffffff; } .btn-warning:hover, .btn-warning:focus, @@ -826,14 +826,14 @@ fieldset[disabled] .btn-default.active { .btn-warning:active:hover, .btn-warning.active:hover, .btn-warning.active:focus { - background-color: #f7a54a; - border-color: #f7a54a; - color: #FFFFFF; + background-color: #f7a54a; + border-color: #f7a54a; + color: #ffffff; } .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { - background-image: none; + background-image: none; } .btn-warning.disabled, .btn-warning.disabled:hover, @@ -850,13 +850,13 @@ fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active { - background-color: #f9b66d; - border-color: #f9b66d; + background-color: #f9b66d; + border-color: #f9b66d; } .btn-danger { - background-color: #ed5565; - border-color: #ed5565; - color: #FFFFFF; + background-color: #ed5565; + border-color: #ed5565; + color: #ffffff; } .btn-danger:hover, .btn-danger:focus, @@ -867,14 +867,14 @@ fieldset[disabled] .btn-warning.active { .btn-danger:active:hover, .btn-danger.active:hover, .btn-danger.active:focus { - background-color: #ec4758; - border-color: #ec4758; - color: #FFFFFF; + background-color: #ec4758; + border-color: #ec4758; + color: #ffffff; } .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { - background-image: none; + background-image: none; } .btn-danger.disabled, .btn-danger.disabled:hover, @@ -891,24 +891,24 @@ fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active { - background-color: #ef6776; - border-color: #ef6776; + background-color: #ef6776; + border-color: #ef6776; } .btn-link { - color: inherit; + color: inherit; } .btn-link:hover, .btn-link:focus, .btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link { - color: #1ab394; - text-decoration: none; + color: #1ab394; + text-decoration: none; } .btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link { - background-image: none; + background-image: none; } .btn-link.disabled, .btn-link.disabled:hover, @@ -925,12 +925,12 @@ fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:active, fieldset[disabled] .btn-link.active { - color: #cacaca; + color: #cacaca; } .btn-white { - color: inherit; - background: white; - border: 1px solid #e7eaec; + color: inherit; + background: white; + border: 1px solid #e7eaec; } .btn-white:hover, .btn-white:focus, @@ -941,17 +941,17 @@ fieldset[disabled] .btn-link.active { .btn-white:active:hover, .btn-white.active:hover, .btn-white.active:focus { - color: inherit; - border: 1px solid #d2d2d2; + color: inherit; + border: 1px solid #d2d2d2; } .btn-white:active, .btn-white.active { - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset; } .btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white { - background-image: none; + background-image: none; } .btn-white.disabled, .btn-white.disabled:hover, @@ -968,7 +968,7 @@ fieldset[disabled] .btn-white:hover, fieldset[disabled] .btn-white:focus, fieldset[disabled] .btn-white:active, fieldset[disabled] .btn-white.active { - color: #cacaca; + color: #cacaca; } .form-control, .form-control:focus, @@ -984,269 +984,269 @@ fieldset[disabled] .btn-white.active { .popover, .progress, .progress-bar { - box-shadow: none; + box-shadow: none; } .btn-outline { - color: inherit; - background-color: transparent; - transition: all .5s; + color: inherit; + background-color: transparent; + transition: all 0.5s; } .btn-rounded { - border-radius: 50px; + border-radius: 50px; } .btn-large-dim { - width: 90px; - height: 90px; - font-size: 42px; + width: 90px; + height: 90px; + font-size: 42px; } button.dim { - display: inline-block; - text-decoration: none; - text-transform: uppercase; - text-align: center; - padding-top: 6px; - margin-right: 10px; - position: relative; - cursor: pointer; - border-radius: 5px; - font-weight: 600; - margin-bottom: 20px !important; + display: inline-block; + text-decoration: none; + text-transform: uppercase; + text-align: center; + padding-top: 6px; + margin-right: 10px; + position: relative; + cursor: pointer; + border-radius: 5px; + font-weight: 600; + margin-bottom: 20px !important; } button.dim:active { - top: 3px; + top: 3px; } button.btn-primary.dim { - box-shadow: inset 0 0 0 #16987e, 0 5px 0 0 #16987e, 0 10px 5px #999999; + box-shadow: inset 0 0 0 #16987e, 0 5px 0 0 #16987e, 0 10px 5px #999999; } button.btn-primary.dim:active { - box-shadow: inset 0 0 0 #16987e, 0 2px 0 0 #16987e, 0 5px 3px #999999; + box-shadow: inset 0 0 0 #16987e, 0 2px 0 0 #16987e, 0 5px 3px #999999; } button.btn-default.dim { - box-shadow: inset 0 0 0 #b3b3b3, 0 5px 0 0 #b3b3b3, 0 10px 5px #999999; + box-shadow: inset 0 0 0 #b3b3b3, 0 5px 0 0 #b3b3b3, 0 10px 5px #999999; } button.btn-default.dim:active { - box-shadow: inset 0 0 0 #b3b3b3, 0 2px 0 0 #b3b3b3, 0 5px 3px #999999; + box-shadow: inset 0 0 0 #b3b3b3, 0 2px 0 0 #b3b3b3, 0 5px 3px #999999; } button.btn-warning.dim { - box-shadow: inset 0 0 0 #f79d3c, 0 5px 0 0 #f79d3c, 0 10px 5px #999999; + box-shadow: inset 0 0 0 #f79d3c, 0 5px 0 0 #f79d3c, 0 10px 5px #999999; } button.btn-warning.dim:active { - box-shadow: inset 0 0 0 #f79d3c, 0 2px 0 0 #f79d3c, 0 5px 3px #999999; + box-shadow: inset 0 0 0 #f79d3c, 0 2px 0 0 #f79d3c, 0 5px 3px #999999; } button.btn-info.dim { - box-shadow: inset 0 0 0 #1eacae, 0 5px 0 0 #1eacae, 0 10px 5px #999999; + box-shadow: inset 0 0 0 #1eacae, 0 5px 0 0 #1eacae, 0 10px 5px #999999; } button.btn-info.dim:active { - box-shadow: inset 0 0 0 #1eacae, 0 2px 0 0 #1eacae, 0 5px 3px #999999; + box-shadow: inset 0 0 0 #1eacae, 0 2px 0 0 #1eacae, 0 5px 3px #999999; } button.btn-success.dim { - box-shadow: inset 0 0 0 #1872ab, 0 5px 0 0 #1872ab, 0 10px 5px #999999; + box-shadow: inset 0 0 0 #1872ab, 0 5px 0 0 #1872ab, 0 10px 5px #999999; } button.btn-success.dim:active { - box-shadow: inset 0 0 0 #1872ab, 0 2px 0 0 #1872ab, 0 5px 3px #999999; + box-shadow: inset 0 0 0 #1872ab, 0 2px 0 0 #1872ab, 0 5px 3px #999999; } button.btn-danger.dim { - box-shadow: inset 0 0 0 #ea394c, 0 5px 0 0 #ea394c, 0 10px 5px #999999; + box-shadow: inset 0 0 0 #ea394c, 0 5px 0 0 #ea394c, 0 10px 5px #999999; } button.btn-danger.dim:active { - box-shadow: inset 0 0 0 #ea394c, 0 2px 0 0 #ea394c, 0 5px 3px #999999; + box-shadow: inset 0 0 0 #ea394c, 0 2px 0 0 #ea394c, 0 5px 3px #999999; } button.dim:before { - font-size: 50px; - line-height: 1em; - font-weight: normal; - color: #fff; - display: block; - padding-top: 10px; + font-size: 50px; + line-height: 1em; + font-weight: normal; + color: #fff; + display: block; + padding-top: 10px; } button.dim:active:before { - top: 7px; - font-size: 50px; + top: 7px; + font-size: 50px; } .btn:focus { - outline: none !important; + outline: none !important; } .label { - background-color: #d1dade; - color: #5e5e5e; - font-family: 'Lato', 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-weight: 600; - padding: 3px 8px; - text-shadow: none; + background-color: #d1dade; + color: #5e5e5e; + font-family: 'Lato', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 600; + padding: 3px 8px; + text-shadow: none; } .nav .label, .ibox .label { - font-size: 10px; + font-size: 10px; } .badge { - background-color: #d1dade; - color: #5e5e5e; - font-family: 'Lato', 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 11px; - font-weight: 600; - padding-bottom: 4px; - padding-left: 6px; - padding-right: 6px; - text-shadow: none; + background-color: #d1dade; + color: #5e5e5e; + font-family: 'Lato', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 11px; + font-weight: 600; + padding-bottom: 4px; + padding-left: 6px; + padding-right: 6px; + text-shadow: none; } .label-primary, .badge-primary { - background-color: #1ab394; - color: #FFFFFF; + background-color: #1ab394; + color: #ffffff; } .label-success, .badge-success { - background-color: #1c84c6; - color: #FFFFFF; + background-color: #1c84c6; + color: #ffffff; } .label-warning, .badge-warning { - background-color: #f8ac59; - color: #FFFFFF; + background-color: #f8ac59; + color: #ffffff; } .label-warning-light, .badge-warning-light { - background-color: #f8ac59; - color: #ffffff; + background-color: #f8ac59; + color: #ffffff; } .label-danger, .badge-danger { - background-color: #ed5565; - color: #FFFFFF; + background-color: #ed5565; + color: #ffffff; } .label-info, .badge-info { - background-color: #23c6c8; - color: #FFFFFF; + background-color: #23c6c8; + color: #ffffff; } .label-inverse, .badge-inverse { - background-color: #262626; - color: #FFFFFF; + background-color: #262626; + color: #ffffff; } .label-white, .badge-white { - background-color: #FFFFFF; - color: #5E5E5E; + background-color: #ffffff; + color: #5e5e5e; } .label-white, .badge-disable { - background-color: #2A2E36; - color: #8B91A0; + background-color: #2a2e36; + color: #8b91a0; } /* TOOGLE SWICH */ .onoffswitch { - position: relative; - width: 64px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; + position: relative; + width: 64px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; } .onoffswitch-checkbox { - display: none; + display: none; } .onoffswitch-label { - display: block; - overflow: hidden; - cursor: pointer; - border: 2px solid #1ab394; - border-radius: 2px; + display: block; + overflow: hidden; + cursor: pointer; + border: 2px solid #1ab394; + border-radius: 2px; } .onoffswitch-inner { - width: 200%; - margin-left: -100%; - -moz-transition: margin 0.3s ease-in 0s; - -webkit-transition: margin 0.3s ease-in 0s; - -o-transition: margin 0.3s ease-in 0s; - transition: margin 0.3s ease-in 0s; + width: 200%; + margin-left: -100%; + -moz-transition: margin 0.3s ease-in 0s; + -webkit-transition: margin 0.3s ease-in 0s; + -o-transition: margin 0.3s ease-in 0s; + transition: margin 0.3s ease-in 0s; } .onoffswitch-inner:before, .onoffswitch-inner:after { - float: left; - width: 50%; - height: 20px; - padding: 0; - line-height: 20px; - font-size: 12px; - color: white; - font-family: Trebuchet, Arial, sans-serif; - font-weight: bold; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; + float: left; + width: 50%; + height: 20px; + padding: 0; + line-height: 20px; + font-size: 12px; + color: white; + font-family: Trebuchet, Arial, sans-serif; + font-weight: bold; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; } .onoffswitch-inner:before { - content: "ON"; - padding-left: 10px; - background-color: #1ab394; - color: #FFFFFF; + content: 'ON'; + padding-left: 10px; + background-color: #1ab394; + color: #ffffff; } .onoffswitch-inner:after { - content: "OFF"; - padding-right: 10px; - background-color: #FFFFFF; - color: #999999; - text-align: right; + content: 'OFF'; + padding-right: 10px; + background-color: #ffffff; + color: #999999; + text-align: right; } .onoffswitch-switch { - width: 20px; - margin: 0; - background: #FFFFFF; - border: 2px solid #1ab394; - border-radius: 2px; - position: absolute; - top: 0; - bottom: 0; - right: 44px; - -moz-transition: all 0.3s ease-in 0s; - -webkit-transition: all 0.3s ease-in 0s; - -o-transition: all 0.3s ease-in 0s; - transition: all 0.3s ease-in 0s; + width: 20px; + margin: 0; + background: #ffffff; + border: 2px solid #1ab394; + border-radius: 2px; + position: absolute; + top: 0; + bottom: 0; + right: 44px; + -moz-transition: all 0.3s ease-in 0s; + -webkit-transition: all 0.3s ease-in 0s; + -o-transition: all 0.3s ease-in 0s; + transition: all 0.3s ease-in 0s; } .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { - margin-left: 0; + margin-left: 0; } .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { - right: 0; + right: 0; } .onoffswitch-checkbox:disabled + .onoffswitch-label .onoffswitch-inner:before { - background-color: #919191; + background-color: #919191; } .onoffswitch-checkbox:disabled + .onoffswitch-label, .onoffswitch-checkbox:disabled + .onoffswitch-label .onoffswitch-switch { - border-color: #919191; + border-color: #919191; } /* CHOSEN PLUGIN */ .chosen-container-single .chosen-single { - background: #ffffff; - box-shadow: none; - -moz-box-sizing: border-box; - border-radius: 2px; - cursor: text; - height: auto !important; - margin: 0; - min-height: 30px; - overflow: hidden; - padding: 4px 12px; - position: relative; - width: 100%; + background: #ffffff; + box-shadow: none; + -moz-box-sizing: border-box; + border-radius: 2px; + cursor: text; + height: auto !important; + margin: 0; + min-height: 30px; + overflow: hidden; + padding: 4px 12px; + position: relative; + width: 100%; } .chosen-container-multi .chosen-choices li.search-choice { - background: #f1f1f1; - border: 1px solid #e5e6e7; - border-radius: 2px; - box-shadow: none; - color: #333333; - cursor: default; - line-height: 13px; - margin: 3px 0 3px 5px; - padding: 3px 20px 3px 5px; - position: relative; + background: #f1f1f1; + border: 1px solid #e5e6e7; + border-radius: 2px; + box-shadow: none; + color: #333333; + cursor: default; + line-height: 13px; + margin: 3px 0 3px 5px; + padding: 3px 20px 3px 5px; + position: relative; } /* Tags Input Plugin */ .bootstrap-tagsinput { - border: 1px solid #e5e6e7; - box-shadow: none; + border: 1px solid #e5e6e7; + box-shadow: none; } /* PAGINATIN */ .pagination > .active > a, @@ -1255,379 +1255,379 @@ button.dim:active:before { .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { - background-color: #f4f4f4; - border-color: #DDDDDD; - color: inherit; - cursor: default; - z-index: 2; + background-color: #f4f4f4; + border-color: #dddddd; + color: inherit; + cursor: default; + z-index: 2; } .pagination > li > a, .pagination > li > span { - background-color: #FFFFFF; - border: 1px solid #DDDDDD; - color: inherit; - float: left; - line-height: 1.42857; - margin-left: -1px; - padding: 4px 10px; - position: relative; - text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + color: inherit; + float: left; + line-height: 1.42857; + margin-left: -1px; + padding: 4px 10px; + position: relative; + text-decoration: none; } /* TOOLTIPS */ .tooltip-inner { - background-color: #2F4050; + background-color: #2f4050; } .tooltip.top .tooltip-arrow { - border-top-color: #2F4050; + border-top-color: #2f4050; } .tooltip.right .tooltip-arrow { - border-right-color: #2F4050; + border-right-color: #2f4050; } .tooltip.bottom .tooltip-arrow { - border-bottom-color: #2F4050; + border-bottom-color: #2f4050; } .tooltip.left .tooltip-arrow { - border-left-color: #2F4050; + border-left-color: #2f4050; } /* EASY PIE CHART*/ .easypiechart { - position: relative; - text-align: center; + position: relative; + text-align: center; } .easypiechart .h2 { - margin-left: 10px; - margin-top: 10px; - display: inline-block; + margin-left: 10px; + margin-top: 10px; + display: inline-block; } .easypiechart canvas { - top: 0; - left: 0; + top: 0; + left: 0; } .easypiechart .easypie-text { - line-height: 1; - position: absolute; - top: 33px; - width: 100%; - z-index: 1; + line-height: 1; + position: absolute; + top: 33px; + width: 100%; + z-index: 1; } .easypiechart img { - margin-top: -4px; + margin-top: -4px; } .jqstooltip { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; } /* FULLCALENDAR */ .fc-state-default { - background-color: #ffffff; - background-image: none; - background-repeat: repeat-x; - box-shadow: none; - color: #333333; - text-shadow: none; + background-color: #ffffff; + background-image: none; + background-repeat: repeat-x; + box-shadow: none; + color: #333333; + text-shadow: none; } .fc-state-default { - border: 1px solid; + border: 1px solid; } .fc-button { - color: inherit; - border: 1px solid #e7eaec; - cursor: pointer; - display: inline-block; - height: 1.9em; - line-height: 1.9em; - overflow: hidden; - padding: 0 0.6em; - position: relative; - white-space: nowrap; + color: inherit; + border: 1px solid #e7eaec; + cursor: pointer; + display: inline-block; + height: 1.9em; + line-height: 1.9em; + overflow: hidden; + padding: 0 0.6em; + position: relative; + white-space: nowrap; } .fc-state-active { - background-color: #1ab394; - border-color: #1ab394; - color: #ffffff; + background-color: #1ab394; + border-color: #1ab394; + color: #ffffff; } .fc-header-title h2 { - font-size: 16px; - font-weight: 600; - color: inherit; + font-size: 16px; + font-weight: 600; + color: inherit; } .fc-content .fc-widget-header, .fc-content .fc-widget-content { - border-color: #e7eaec; - font-weight: normal; + border-color: #e7eaec; + font-weight: normal; } .fc-border-separate tbody { - background-color: #F8F8F8; + background-color: #f8f8f8; } .fc-state-highlight { - background: none repeat scroll 0 0 #FCF8E3; + background: none repeat scroll 0 0 #fcf8e3; } .external-event { - padding: 5px 10px; - border-radius: 2px; - cursor: pointer; - margin-bottom: 5px; + padding: 5px 10px; + border-radius: 2px; + cursor: pointer; + margin-bottom: 5px; } .fc-ltr .fc-event-hori.fc-event-end, .fc-rtl .fc-event-hori.fc-event-start { - border-radius: 2px; + border-radius: 2px; } .fc-event, .fc-agenda .fc-event-time, .fc-event a { - padding: 4px 6px; - background-color: #1ab394; - /* background color */ - border-color: #1ab394; - /* border color */ + padding: 4px 6px; + background-color: #1ab394; + /* background color */ + border-color: #1ab394; + /* border color */ } .fc-event-time, .fc-event-title { - color: #717171; - padding: 0 1px; + color: #717171; + padding: 0 1px; } .ui-calendar .fc-event-time, .ui-calendar .fc-event-title { - color: #fff; + color: #fff; } /* Chat */ .chat-activity-list .chat-element { - border-bottom: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; } .chat-element:first-child { - margin-top: 0; + margin-top: 0; } .chat-element { - padding-bottom: 15px; + padding-bottom: 15px; } .chat-element, .chat-element .media { - margin-top: 15px; + margin-top: 15px; } .chat-element, .media-body { - overflow: hidden; + overflow: hidden; } .chat-element .media-body { - display: block; - width: auto; + display: block; + width: auto; } .chat-element > .pull-left { - margin-right: 10px; + margin-right: 10px; } .chat-element img.img-circle, .dropdown-messages-box img.img-circle { - width: 38px; - height: 38px; + width: 38px; + height: 38px; } .chat-element .well { - border: 1px solid #e7eaec; - box-shadow: none; - margin-top: 10px; - margin-bottom: 5px; - padding: 10px 20px; - font-size: 11px; - line-height: 16px; + border: 1px solid #e7eaec; + box-shadow: none; + margin-top: 10px; + margin-bottom: 5px; + padding: 10px 20px; + font-size: 11px; + line-height: 16px; } .chat-element .actions { - margin-top: 10px; + margin-top: 10px; } .chat-element .photos { - margin: 10px 0; + margin: 10px 0; } .right.chat-element > .pull-right { - margin-left: 10px; + margin-left: 10px; } .chat-photo { - max-height: 180px; - border-radius: 4px; - overflow: hidden; - margin-right: 10px; - margin-bottom: 10px; + max-height: 180px; + border-radius: 4px; + overflow: hidden; + margin-right: 10px; + margin-bottom: 10px; } .chat { - margin: 0; - padding: 0; - list-style: none; + margin: 0; + padding: 0; + list-style: none; } .chat li { - margin-bottom: 10px; - padding-bottom: 5px; - border-bottom: 1px dotted #B3A9A9; + margin-bottom: 10px; + padding-bottom: 5px; + border-bottom: 1px dotted #b3a9a9; } .chat li.left .chat-body { - margin-left: 60px; + margin-left: 60px; } .chat li.right .chat-body { - margin-right: 60px; + margin-right: 60px; } .chat li .chat-body p { - margin: 0; - color: #777777; + margin: 0; + color: #777777; } .panel .slidedown .glyphicon, .chat .glyphicon { - margin-right: 5px; + margin-right: 5px; } .chat-panel .panel-body { - height: 350px; - overflow-y: scroll; + height: 350px; + overflow-y: scroll; } /* LIST GROUP */ a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus { - background-color: #1ab394; - border-color: #1ab394; - color: #FFFFFF; - z-index: 2; + background-color: #1ab394; + border-color: #1ab394; + color: #ffffff; + z-index: 2; } .list-group-item-heading { - margin-top: 10px; + margin-top: 10px; } .list-group-item-text { - margin: 0 0 10px; - color: inherit; - font-size: 12px; - line-height: inherit; + margin: 0 0 10px; + color: inherit; + font-size: 12px; + line-height: inherit; } .no-padding .list-group-item { - border-left: none; - border-right: none; - border-bottom: none; + border-left: none; + border-right: none; + border-bottom: none; } .no-padding .list-group-item:first-child { - border-left: none; - border-right: none; - border-bottom: none; - border-top: none; + border-left: none; + border-right: none; + border-bottom: none; + border-top: none; } .no-padding .list-group { - margin-bottom: 0; + margin-bottom: 0; } .list-group-item { - background-color: inherit; - border: 1px solid #e7eaec; - display: block; - margin-bottom: -1px; - padding: 10px 15px; - position: relative; + background-color: inherit; + border: 1px solid #e7eaec; + display: block; + margin-bottom: -1px; + padding: 10px 15px; + position: relative; } .elements-list .list-group-item { - border-left: none; - border-right: none; - padding: 15px 25px; + border-left: none; + border-right: none; + padding: 15px 25px; } .elements-list .list-group-item:first-child { - border-left: none; - border-right: none; - border-top: none !important; + border-left: none; + border-right: none; + border-top: none !important; } .elements-list .list-group { - margin-bottom: 0; + margin-bottom: 0; } .elements-list a { - color: inherit; + color: inherit; } .elements-list .list-group-item.active, .elements-list .list-group-item:hover { - background: #f3f3f4; - color: inherit; - border-color: #e7eaec; - border-radius: 0; + background: #f3f3f4; + color: inherit; + border-color: #e7eaec; + border-radius: 0; } .elements-list li.active { - transition: none; + transition: none; } .element-detail-box { - padding: 25px; + padding: 25px; } /* FLOT CHART */ .flot-chart { - display: block; - height: 200px; + display: block; + height: 200px; } .widget .flot-chart.dashboard-chart { - display: block; - height: 120px; - margin-top: 40px; + display: block; + height: 120px; + margin-top: 40px; } .flot-chart.dashboard-chart { - display: block; - height: 180px; - margin-top: 40px; + display: block; + height: 180px; + margin-top: 40px; } .flot-chart-content { - width: 100%; - height: 100%; + width: 100%; + height: 100%; } .flot-chart-pie-content { - width: 200px; - height: 200px; - margin: auto; + width: 200px; + height: 200px; + margin: auto; } .jqstooltip { - position: absolute; - display: block; - left: 0; - top: 0; - visibility: hidden; - background: #2b303a; - background-color: rgba(43, 48, 58, 0.8); - color: white; - text-align: left; - white-space: nowrap; - z-index: 10000; - padding: 5px 5px 5px 5px; - min-height: 22px; - border-radius: 3px; + position: absolute; + display: block; + left: 0; + top: 0; + visibility: hidden; + background: #2b303a; + background-color: rgba(43, 48, 58, 0.8); + color: white; + text-align: left; + white-space: nowrap; + z-index: 10000; + padding: 5px 5px 5px 5px; + min-height: 22px; + border-radius: 3px; } .jqsfield { - color: white; - text-align: left; + color: white; + text-align: left; } .fh-150 { - height: 150px; + height: 150px; } .fh-200 { - height: 200px; + height: 200px; } .h-150 { - min-height: 150px; + min-height: 150px; } .h-200 { - min-height: 200px; + min-height: 200px; } .h-300 { - min-height: 300px; + min-height: 300px; } .w-150 { - min-width: 150px; + min-width: 150px; } .w-200 { - min-width: 200px; + min-width: 200px; } .w-300 { - min-width: 300px; + min-width: 300px; } .legendLabel { - padding-left: 5px; + padding-left: 5px; } .stat-list li:first-child { - margin-top: 0; + margin-top: 0; } .stat-list { - list-style: none; - padding: 0; - margin: 0; + list-style: none; + padding: 0; + margin: 0; } .stat-percent { - float: right; + float: right; } .stat-list li { - margin-top: 15px; - position: relative; + margin-top: 15px; + position: relative; } /* DATATABLES */ table.dataTable thead .sorting, @@ -1635,2024 +1635,2035 @@ table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { - background: transparent; + background: transparent; } .dataTables_wrapper { - padding-bottom: 30px; + padding-bottom: 30px; } .dataTables_length { - float: left; + float: left; } .dataTables_filter label { - margin-right: 5px; + margin-right: 5px; } .html5buttons { - float: right; + float: right; } .html5buttons a { - border: 1px solid #e7eaec; - background: #fff; - color: #676a6c; - box-shadow: none; - padding: 6px 8px; - font-size: 12px; + border: 1px solid #e7eaec; + background: #fff; + color: #676a6c; + box-shadow: none; + padding: 6px 8px; + font-size: 12px; } .html5buttons a:hover, .html5buttons a:focus:active { - background-color: #eee; - color: inherit; - border-color: #d2d2d2; + background-color: #eee; + color: inherit; + border-color: #d2d2d2; } div.dt-button-info { - z-index: 100; + z-index: 100; } @media (max-width: 768px) { - .html5buttons { - float: none; - margin-top: 10px; - } - .dataTables_length { - float: none; - } + .html5buttons { + float: none; + margin-top: 10px; + } + .dataTables_length { + float: none; + } } /* CIRCLE */ .img-circle { - border-radius: 50%; + border-radius: 50%; } .btn-circle { - width: 30px; - height: 30px; - padding: 6px 0; - border-radius: 15px; - text-align: center; - font-size: 12px; - line-height: 1.428571429; + width: 30px; + height: 30px; + padding: 6px 0; + border-radius: 15px; + text-align: center; + font-size: 12px; + line-height: 1.428571429; } .btn-circle.btn-lg { - width: 50px; - height: 50px; - padding: 10px 16px; - border-radius: 25px; - font-size: 18px; - line-height: 1.33; + width: 50px; + height: 50px; + padding: 10px 16px; + border-radius: 25px; + font-size: 18px; + line-height: 1.33; } .btn-circle.btn-xl { - width: 70px; - height: 70px; - padding: 10px 16px; - border-radius: 35px; - font-size: 24px; - line-height: 1.33; -} -.show-grid [class^="col-"] { - padding-top: 10px; - padding-bottom: 10px; - border: 1px solid #ddd; - background-color: #eee !important; + width: 70px; + height: 70px; + padding: 10px 16px; + border-radius: 35px; + font-size: 24px; + line-height: 1.33; +} +.show-grid [class^='col-'] { + padding-top: 10px; + padding-bottom: 10px; + border: 1px solid #ddd; + background-color: #eee !important; } .show-grid { - margin: 15px 0; + margin: 15px 0; } /* ANIMATION */ .css-animation-box h1 { - font-size: 44px; + font-size: 44px; } .animation-efect-links a { - padding: 4px 6px; - font-size: 12px; + padding: 4px 6px; + font-size: 12px; } #animation_box { - background-color: #f9f8f8; - border-radius: 16px; - width: 80%; - margin: 0 auto; - padding-top: 80px; + background-color: #f9f8f8; + border-radius: 16px; + width: 80%; + margin: 0 auto; + padding-top: 80px; } .animation-text-box { - position: absolute; - margin-top: 40px; - left: 50%; - margin-left: -100px; - width: 200px; + position: absolute; + margin-top: 40px; + left: 50%; + margin-left: -100px; + width: 200px; } .animation-text-info { - position: absolute; - margin-top: -60px; - left: 50%; - margin-left: -100px; - width: 200px; - font-size: 10px; + position: absolute; + margin-top: -60px; + left: 50%; + margin-left: -100px; + width: 200px; + font-size: 10px; } .animation-text-box h2 { - font-size: 54px; - font-weight: 600; - margin-bottom: 5px; + font-size: 54px; + font-weight: 600; + margin-bottom: 5px; } .animation-text-box p { - font-size: 12px; - text-transform: uppercase; + font-size: 12px; + text-transform: uppercase; } /* PEACE */ .pace { - -webkit-pointer-events: none; - pointer-events: none; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; + -webkit-pointer-events: none; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } .pace-inactive { - display: none; + display: none; } .pace .pace-progress { - background: #1ab394; - position: fixed; - z-index: 2040; - top: 0; - right: 100%; - width: 100%; - height: 2px; + background: #1ab394; + position: fixed; + z-index: 2040; + top: 0; + right: 100%; + width: 100%; + height: 2px; } .pace-inactive { - display: none; + display: none; } /* WIDGETS */ .widget { - border-radius: 5px; - padding: 15px 20px; - margin-bottom: 10px; - margin-top: 10px; + border-radius: 5px; + padding: 15px 20px; + margin-bottom: 10px; + margin-top: 10px; } .widget.style1 h2 { - font-size: 30px; + font-size: 30px; } .widget h2, .widget h3 { - margin-top: 5px; - margin-bottom: 0; + margin-top: 5px; + margin-bottom: 0; } .widget-text-box { - padding: 20px; - border: 1px solid #e7eaec; - background: #ffffff; + padding: 20px; + border: 1px solid #e7eaec; + background: #ffffff; } .widget-head-color-box { - border-radius: 5px 5px 0 0; - margin-top: 10px; + border-radius: 5px 5px 0 0; + margin-top: 10px; } .widget .flot-chart { - height: 100px; + height: 100px; } .vertical-align div { - display: inline-block; - vertical-align: middle; + display: inline-block; + vertical-align: middle; } .vertical-align h2, .vertical-align h3 { - margin: 0; + margin: 0; } .todo-list { - list-style: none outside none; - margin: 0; - padding: 0; - font-size: 14px; + list-style: none outside none; + margin: 0; + padding: 0; + font-size: 14px; } .todo-list.small-list { - font-size: 12px; + font-size: 12px; } .todo-list.small-list > li { - background: #f3f3f4; - border-left: none; - border-right: none; - border-radius: 4px; - color: inherit; - margin-bottom: 2px; - padding: 6px 6px 6px 12px; + background: #f3f3f4; + border-left: none; + border-right: none; + border-radius: 4px; + color: inherit; + margin-bottom: 2px; + padding: 6px 6px 6px 12px; } .todo-list.small-list .btn-xs, .todo-list.small-list .btn-group-xs > .btn { - border-radius: 5px; - font-size: 10px; - line-height: 1.5; - padding: 1px 2px 1px 5px; + border-radius: 5px; + font-size: 10px; + line-height: 1.5; + padding: 1px 2px 1px 5px; } .todo-list > li { - background: #f3f3f4; - border-left: 6px solid #e7eaec; - border-right: 6px solid #e7eaec; - border-radius: 4px; - color: inherit; - margin-bottom: 2px; - padding: 10px; + background: #f3f3f4; + border-left: 6px solid #e7eaec; + border-right: 6px solid #e7eaec; + border-radius: 4px; + color: inherit; + margin-bottom: 2px; + padding: 10px; } .todo-list .handle { - cursor: move; - display: inline-block; - font-size: 16px; - margin: 0 5px; + cursor: move; + display: inline-block; + font-size: 16px; + margin: 0 5px; } .todo-list > li .label { - font-size: 9px; - margin-left: 10px; + font-size: 9px; + margin-left: 10px; } .check-link { - font-size: 16px; + font-size: 16px; } .todo-completed { - text-decoration: line-through; + text-decoration: line-through; } .geo-statistic h1 { - font-size: 36px; - margin-bottom: 0; + font-size: 36px; + margin-bottom: 0; } .glyphicon.fa { - font-family: "FontAwesome"; + font-family: 'FontAwesome'; } /* INPUTS */ .inline { - display: inline-block !important; + display: inline-block !important; } .input-s-sm { - width: 120px; + width: 120px; } .input-s { - width: 200px; + width: 200px; } .input-s-lg { - width: 250px; + width: 250px; } .i-checks { - padding-left: 0; + padding-left: 0; } .form-control, .single-line { - background-color: #FFFFFF; - background-image: none; - border: 1px solid #e5e6e7; - border-radius: 1px; - color: inherit; - display: block; - padding: 6px 12px; - transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; - width: 100%; + background-color: #ffffff; + background-image: none; + border: 1px solid #e5e6e7; + border-radius: 1px; + color: inherit; + display: block; + padding: 6px 12px; + transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; + width: 100%; } .form-control:focus, .single-line:focus { - border-color: #1ab394; + border-color: #1ab394; } .has-success .form-control, .has-success .form-control:focus { - border-color: #1ab394; + border-color: #1ab394; } .has-warning .form-control, .has-warning .form-control:focus { - border-color: #f8ac59; + border-color: #f8ac59; } .has-error .form-control, .has-error .form-control:focus { - border-color: #ed5565; + border-color: #ed5565; } .has-success .control-label { - color: #1ab394; + color: #1ab394; } .has-warning .control-label { - color: #f8ac59; + color: #f8ac59; } .has-error .control-label { - color: #ed5565; + color: #ed5565; } .input-group-addon { - background-color: #fff; - border: 1px solid #E5E6E7; - border-radius: 1px; - color: inherit; - font-size: 14px; - font-weight: 400; - line-height: 1; - padding: 6px 12px; - text-align: center; + background-color: #fff; + border: 1px solid #e5e6e7; + border-radius: 1px; + color: inherit; + font-size: 14px; + font-weight: 400; + line-height: 1; + padding: 6px 12px; + text-align: center; } .spinner-buttons.input-group-btn .btn-xs { - line-height: 1.13; + line-height: 1.13; } .spinner-buttons.input-group-btn { - width: 20%; + width: 20%; } .noUi-connect { - background: none repeat scroll 0 0 #1ab394; - box-shadow: none; + background: none repeat scroll 0 0 #1ab394; + box-shadow: none; } .slider_red .noUi-connect { - background: none repeat scroll 0 0 #ed5565; - box-shadow: none; + background: none repeat scroll 0 0 #ed5565; + box-shadow: none; } /* UI Sortable */ .ui-sortable .ibox-title { - cursor: move; + cursor: move; } .ui-sortable-placeholder { - border: 1px dashed #cecece !important; - visibility: visible !important; - background: #e7eaec; + border: 1px dashed #cecece !important; + visibility: visible !important; + background: #e7eaec; } .ibox.ui-sortable-placeholder { - margin: 0 0 23px !important; + margin: 0 0 23px !important; } /* SWITCHES */ .onoffswitch { - position: relative; - width: 54px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; + position: relative; + width: 54px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; } .onoffswitch-checkbox { - display: none; + display: none; } .onoffswitch-label { - display: block; - overflow: hidden; - cursor: pointer; - border: 2px solid #1AB394; - border-radius: 3px; + display: block; + overflow: hidden; + cursor: pointer; + border: 2px solid #1ab394; + border-radius: 3px; } .onoffswitch-inner { - display: block; - width: 200%; - margin-left: -100%; - -moz-transition: margin 0.3s ease-in 0s; - -webkit-transition: margin 0.3s ease-in 0s; - -o-transition: margin 0.3s ease-in 0s; - transition: margin 0.3s ease-in 0s; + display: block; + width: 200%; + margin-left: -100%; + -moz-transition: margin 0.3s ease-in 0s; + -webkit-transition: margin 0.3s ease-in 0s; + -o-transition: margin 0.3s ease-in 0s; + transition: margin 0.3s ease-in 0s; } .onoffswitch-inner:before, .onoffswitch-inner:after { - display: block; - float: left; - width: 50%; - height: 16px; - padding: 0; - line-height: 16px; - font-size: 10px; - color: white; - font-family: Trebuchet, Arial, sans-serif; - font-weight: bold; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; + display: block; + float: left; + width: 50%; + height: 16px; + padding: 0; + line-height: 16px; + font-size: 10px; + color: white; + font-family: Trebuchet, Arial, sans-serif; + font-weight: bold; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; } .onoffswitch-inner:before { - content: "ON"; - padding-left: 7px; - background-color: #1AB394; - color: #FFFFFF; + content: 'ON'; + padding-left: 7px; + background-color: #1ab394; + color: #ffffff; } .onoffswitch-inner:after { - content: "OFF"; - padding-right: 7px; - background-color: #FFFFFF; - color: #919191; - text-align: right; + content: 'OFF'; + padding-right: 7px; + background-color: #ffffff; + color: #919191; + text-align: right; } .onoffswitch-switch { - display: block; - width: 18px; - margin: 0; - background: #FFFFFF; - border: 2px solid #1AB394; - border-radius: 3px; - position: absolute; - top: 0; - bottom: 0; - right: 36px; - -moz-transition: all 0.3s ease-in 0s; - -webkit-transition: all 0.3s ease-in 0s; - -o-transition: all 0.3s ease-in 0s; - transition: all 0.3s ease-in 0s; -} -.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { - margin-left: 0; -} + display: block; + width: 18px; + margin: 0; + background: #ffffff; + border: 2px solid #1ab394; + border-radius: 3px; + position: absolute; + top: 0; + bottom: 0; + right: 36px; + -moz-transition: all 0.3s ease-in 0s; + -webkit-transition: all 0.3s ease-in 0s; + -o-transition: all 0.3s ease-in 0s; + transition: all 0.3s ease-in 0s; +} +.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { + margin-left: 0; +} .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { - right: 0; + right: 0; } /* jqGrid */ .ui-jqgrid { - -moz-box-sizing: content-box; + -moz-box-sizing: content-box; } .ui-jqgrid-btable { - border-collapse: separate; + border-collapse: separate; } .ui-jqgrid-htable { - border-collapse: separate; + border-collapse: separate; } .ui-jqgrid-titlebar { - height: 40px; - line-height: 15px; - color: #676a6c; - background-color: #F9F9F9; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + height: 40px; + line-height: 15px; + color: #676a6c; + background-color: #f9f9f9; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .ui-jqgrid .ui-jqgrid-title { - float: left; - margin: 1.1em 1em 0.2em; + float: left; + margin: 1.1em 1em 0.2em; } .ui-jqgrid .ui-jqgrid-titlebar { - position: relative; - border-left: 0 solid; - border-right: 0 solid; - border-top: 0 solid; + position: relative; + border-left: 0 solid; + border-right: 0 solid; + border-top: 0 solid; } .ui-widget-header { - background: none; - background-image: none; - background-color: #f5f5f6; - text-transform: uppercase; - border-top-left-radius: 0; - border-top-right-radius: 0; + background: none; + background-image: none; + background-color: #f5f5f6; + text-transform: uppercase; + border-top-left-radius: 0; + border-top-right-radius: 0; } .ui-jqgrid tr.ui-row-ltr td { - border-right-color: inherit; - border-right-style: solid; - border-right-width: 1px; - text-align: left; - border-color: #DDDDDD; - background-color: inherit; -} -.ui-search-toolbar input[type="text"] { - font-size: 12px; - height: 15px; - border: 1px solid #CCCCCC; - border-radius: 0; + border-right-color: inherit; + border-right-style: solid; + border-right-width: 1px; + text-align: left; + border-color: #dddddd; + background-color: inherit; +} +.ui-search-toolbar input[type='text'] { + font-size: 12px; + height: 15px; + border: 1px solid #cccccc; + border-radius: 0; } .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { - background: #F9F9F9; - border: 1px solid #DDDDDD; - line-height: 15px; - font-weight: bold; - color: #676a6c; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background: #f9f9f9; + border: 1px solid #dddddd; + line-height: 15px; + font-weight: bold; + color: #676a6c; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .ui-widget-content { - box-sizing: content-box; + box-sizing: content-box; } .ui-icon-triangle-1-n { - background-position: 1px -16px; + background-position: 1px -16px; } .ui-jqgrid tr.ui-search-toolbar th { - border-top-width: 0 !important; - border-top-color: inherit !important; - border-top-style: ridge !important; + border-top-width: 0 !important; + border-top-color: inherit !important; + border-top-style: ridge !important; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { - background: #f5f5f5; - border-collapse: separate; + background: #f5f5f5; + border-collapse: separate; } .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { - background: #f2fbff; + background: #f2fbff; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { - border: 1px solid #dddddd; - background: #ffffff; - font-weight: normal; - color: #212121; + border: 1px solid #dddddd; + background: #ffffff; + font-weight: normal; + color: #212121; } .ui-jqgrid .ui-pg-input { - font-size: inherit; - width: 50px; - border: 1px solid #CCCCCC; - height: 15px; + font-size: inherit; + width: 50px; + border: 1px solid #cccccc; + height: 15px; } .ui-jqgrid .ui-pg-selbox { - display: block; - font-size: 1em; - height: 25px; - line-height: 18px; - margin: 0; - width: auto; + display: block; + font-size: 1em; + height: 25px; + line-height: 18px; + margin: 0; + width: auto; } .ui-jqgrid .ui-pager-control { - position: relative; + position: relative; } .ui-jqgrid .ui-jqgrid-pager { - height: 32px; - position: relative; + height: 32px; + position: relative; } .ui-pg-table .navtable .ui-corner-all { - border-radius: 0; + border-radius: 0; } .ui-jqgrid .ui-pg-button:hover { - padding: 1px; - border: 0; + padding: 1px; + border: 0; } .ui-jqgrid .loading { - position: absolute; - top: 45%; - left: 45%; - width: auto; - height: auto; - z-index: 101; - padding: 6px; - margin: 5px; - text-align: center; - font-weight: bold; - display: none; - border-width: 2px !important; - font-size: 11px; + position: absolute; + top: 45%; + left: 45%; + width: auto; + height: auto; + z-index: 101; + padding: 6px; + margin: 5px; + text-align: center; + font-weight: bold; + display: none; + border-width: 2px !important; + font-size: 11px; } .ui-jqgrid .form-control { - height: 10px; - width: auto; - display: inline; - padding: 10px 12px; + height: 10px; + width: auto; + display: inline; + padding: 10px 12px; } .ui-jqgrid-pager { - height: 32px; + height: 32px; } .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { - border-top-left-radius: 0; + border-top-left-radius: 0; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { - border-top-right-radius: 0; + border-top-right-radius: 0; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { - border-bottom-left-radius: 0; + border-bottom-left-radius: 0; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { - border-bottom-right-radius: 0; + border-bottom-right-radius: 0; } .ui-widget-content { - border: 1px solid #ddd; + border: 1px solid #ddd; } .ui-jqgrid .ui-jqgrid-titlebar { - padding: 0; + padding: 0; } .ui-jqgrid .ui-jqgrid-titlebar { - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #ddd; } .ui-jqgrid tr.jqgrow td { - padding: 6px; + padding: 6px; } .ui-jqdialog .ui-jqdialog-titlebar { - padding: 10px 10px; + padding: 10px 10px; } .ui-jqdialog .ui-jqdialog-title { - float: none !important; + float: none !important; } .ui-jqdialog > .ui-resizable-se { - position: absolute; + position: absolute; } /* Nestable list */ .dd { - position: relative; - display: block; - margin: 0; - padding: 0; - list-style: none; - font-size: 13px; - line-height: 20px; + position: relative; + display: block; + margin: 0; + padding: 0; + list-style: none; + font-size: 13px; + line-height: 20px; } .dd-list { - display: block; - position: relative; - margin: 0; - padding: 0; - list-style: none; + display: block; + position: relative; + margin: 0; + padding: 0; + list-style: none; } .dd-list .dd-list { - padding-left: 30px; + padding-left: 30px; } .dd-collapsed .dd-list { - display: none; + display: none; } .dd-item, .dd-empty, .dd-placeholder { - display: block; - position: relative; - margin: 0; - padding: 0; - min-height: 20px; - font-size: 13px; - line-height: 20px; + display: block; + position: relative; + margin: 0; + padding: 0; + min-height: 20px; + font-size: 13px; + line-height: 20px; } .dd-handle { - display: block; - margin: 5px 0; - padding: 5px 10px; - color: #333; - text-decoration: none; - border: 1px solid #e7eaec; - background: #f5f5f5; - -webkit-border-radius: 3px; - border-radius: 3px; - box-sizing: border-box; - -moz-box-sizing: border-box; + display: block; + margin: 5px 0; + padding: 5px 10px; + color: #333; + text-decoration: none; + border: 1px solid #e7eaec; + background: #f5f5f5; + -webkit-border-radius: 3px; + border-radius: 3px; + box-sizing: border-box; + -moz-box-sizing: border-box; } .dd-handle span { - font-weight: bold; + font-weight: bold; } .dd-handle:hover { - background: #f0f0f0; - cursor: pointer; - font-weight: bold; + background: #f0f0f0; + cursor: pointer; + font-weight: bold; } .dd-item > button { - display: block; - position: relative; - cursor: pointer; - float: left; - width: 25px; - height: 20px; - margin: 5px 0; - padding: 0; - text-indent: 100%; - white-space: nowrap; - overflow: hidden; - border: 0; - background: transparent; - font-size: 12px; - line-height: 1; - text-align: center; - font-weight: bold; + display: block; + position: relative; + cursor: pointer; + float: left; + width: 25px; + height: 20px; + margin: 5px 0; + padding: 0; + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + border: 0; + background: transparent; + font-size: 12px; + line-height: 1; + text-align: center; + font-weight: bold; } .dd-item > button:before { - content: '+'; - display: block; - position: absolute; - width: 100%; - text-align: center; - text-indent: 0; + content: '+'; + display: block; + position: absolute; + width: 100%; + text-align: center; + text-indent: 0; } -.dd-item > button[data-action="collapse"]:before { - content: '-'; +.dd-item > button[data-action='collapse']:before { + content: '-'; } #nestable2 .dd-item > button { - font-family: FontAwesome; - height: 34px; - width: 33px; - color: #c1c1c1; + font-family: FontAwesome; + height: 34px; + width: 33px; + color: #c1c1c1; } #nestable2 .dd-item > button:before { - content: "\f067"; + content: '\f067'; } -#nestable2 .dd-item > button[data-action="collapse"]:before { - content: "\f068"; +#nestable2 .dd-item > button[data-action='collapse']:before { + content: '\f068'; } .dd-placeholder, .dd-empty { - margin: 5px 0; - padding: 0; - min-height: 30px; - background: #f2fbff; - border: 1px dashed #b6bcbf; - box-sizing: border-box; - -moz-box-sizing: border-box; + margin: 5px 0; + padding: 0; + min-height: 30px; + background: #f2fbff; + border: 1px dashed #b6bcbf; + box-sizing: border-box; + -moz-box-sizing: border-box; } .dd-empty { - border: 1px dashed #bbb; - min-height: 100px; - background-color: #e5e5e5; - background-image: -webkit-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff), -webkit-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff); - background-image: -moz-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff), -moz-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff); - background-image: linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff), linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff); - background-size: 60px 60px; - background-position: 0 0, 30px 30px; + border: 1px dashed #bbb; + min-height: 100px; + background-color: #e5e5e5; + background-image: -webkit-linear-gradient( + 45deg, + #ffffff 25%, + transparent 25%, + transparent 75%, + #ffffff 75%, + #ffffff + ), + -webkit-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff); + background-image: -moz-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff), + -moz-linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff); + background-image: linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff), + linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%, #ffffff); + background-size: 60px 60px; + background-position: 0 0, 30px 30px; } .dd-dragel { - position: absolute; - z-index: 9999; - pointer-events: none; + position: absolute; + z-index: 9999; + pointer-events: none; } .dd-dragel > .dd-item .dd-handle { - margin-top: 0; + margin-top: 0; } .dd-dragel .dd-handle { - -webkit-box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1); - box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1); + -webkit-box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1); + box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1); } /** * Nestable Extras */ .nestable-lists { - display: block; - clear: both; - padding: 30px 0; - width: 100%; - border: 0; - border-top: 2px solid #ddd; - border-bottom: 2px solid #ddd; + display: block; + clear: both; + padding: 30px 0; + width: 100%; + border: 0; + border-top: 2px solid #ddd; + border-bottom: 2px solid #ddd; } #nestable-menu { - padding: 0; - margin: 10px 0 20px 0; + padding: 0; + margin: 10px 0 20px 0; } #nestable-output, #nestable2-output { - width: 100%; - font-size: 0.75em; - line-height: 1.333333em; - font-family: 'Lato', 'Lucida grande', 'Lucida sans unicode', 'Helvetica', 'Arial', sans-serif; - padding: 5px; - box-sizing: border-box; - -moz-box-sizing: border-box; + width: 100%; + font-size: 0.75em; + line-height: 1.333333em; + font-family: 'Lato', 'Lucida grande', 'Lucida sans unicode', 'Helvetica', 'Arial', sans-serif; + padding: 5px; + box-sizing: border-box; + -moz-box-sizing: border-box; } #nestable2 .dd-handle { - color: inherit; - border: 1px dashed #e7eaec; - background: #f3f3f4; - padding: 10px; + color: inherit; + border: 1px dashed #e7eaec; + background: #f3f3f4; + padding: 10px; } #nestable2 span.label { - margin-right: 10px; + margin-right: 10px; } #nestable-output, #nestable2-output { - font-size: 12px; - padding: 25px; - box-sizing: border-box; - -moz-box-sizing: border-box; + font-size: 12px; + padding: 25px; + box-sizing: border-box; + -moz-box-sizing: border-box; } /* CodeMirror */ .CodeMirror { - border: 1px solid #eee; - height: auto; + border: 1px solid #eee; + height: auto; } .CodeMirror-scroll { - overflow-y: hidden; - overflow-x: auto; + overflow-y: hidden; + overflow-x: auto; } /* Google Maps */ .google-map { - height: 300px; + height: 300px; } /* Validation */ label.error { - color: #cc5965; - display: inline-block; - margin-left: 5px; + color: #cc5965; + display: inline-block; + margin-left: 5px; } .form-control.error { - border: 1px dotted #cc5965; + border: 1px dotted #cc5965; } /* ngGrid */ .gridStyle { - border: 1px solid #d4d4d4; - width: 100%; - height: 400px; + border: 1px solid #d4d4d4; + width: 100%; + height: 400px; } .gridStyle2 { - border: 1px solid #d4d4d4; - width: 500px; - height: 300px; + border: 1px solid #d4d4d4; + width: 500px; + height: 300px; } .ngH eaderCell { - border-right: none; - border-bottom: 1px solid #e7eaec; + border-right: none; + border-bottom: 1px solid #e7eaec; } .ngCell { - border-right: none; + border-right: none; } .ngTopPanel { - background: #F5F5F6; + background: #f5f5f6; } .ngRow.even { - background: #f9f9f9; + background: #f9f9f9; } .ngRow.selected { - background: #EBF2F1; + background: #ebf2f1; } .ngRow { - border-bottom: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; } .ngCell { - background-color: transparent; + background-color: transparent; } .ngHeaderCell { - border-right: none; + border-right: none; } /* Toastr custom style */ #toast-container > .toast { - background-image: none !important; + background-image: none !important; } #toast-container > .toast:before { - position: fixed; - font-family: FontAwesome; - font-size: 24px; - line-height: 24px; - float: left; - color: #FFF; - padding-right: 0.5em; - margin: auto 0.5em auto -1.5em; + position: fixed; + font-family: FontAwesome; + font-size: 24px; + line-height: 24px; + float: left; + color: #fff; + padding-right: 0.5em; + margin: auto 0.5em auto -1.5em; } #toast-container > .toast-warning:before { - content: "\f0e7"; + content: '\f0e7'; } #toast-container > .toast-error:before { - content: "\f071"; + content: '\f071'; } #toast-container > .toast-info:before { - content: "\f005"; + content: '\f005'; } #toast-container > .toast-success:before { - content: "\f00C"; + content: '\f00C'; } #toast-container > div { - -moz-box-shadow: 0 0 3px #999; - -webkit-box-shadow: 0 0 3px #999; - box-shadow: 0 0 3px #999; - opacity: .9; - -ms-filter: alpha(opacity=90); - filter: alpha(opacity=90); + -moz-box-shadow: 0 0 3px #999; + -webkit-box-shadow: 0 0 3px #999; + box-shadow: 0 0 3px #999; + opacity: 0.9; + -ms-filter: alpha(opacity=90); + filter: alpha(opacity=90); } #toast-container > :hover { - -moz-box-shadow: 0 0 4px #999; - -webkit-box-shadow: 0 0 4px #999; - box-shadow: 0 0 4px #999; - opacity: 1; - -ms-filter: alpha(opacity=100); - filter: alpha(opacity=100); - cursor: pointer; + -moz-box-shadow: 0 0 4px #999; + -webkit-box-shadow: 0 0 4px #999; + box-shadow: 0 0 4px #999; + opacity: 1; + -ms-filter: alpha(opacity=100); + filter: alpha(opacity=100); + cursor: pointer; } .toast { - background-color: #1ab394; + background-color: #1ab394; } .toast-success { - background-color: #1ab394; + background-color: #1ab394; } .toast-error { - background-color: #ed5565; + background-color: #ed5565; } .toast-info { - background-color: #23c6c8; + background-color: #23c6c8; } .toast-warning { - background-color: #f8ac59; + background-color: #f8ac59; } .toast-top-full-width { - margin-top: 20px; + margin-top: 20px; } .toast-bottom-full-width { - margin-bottom: 20px; + margin-bottom: 20px; } /* Notifie */ .cg-notify-message.inspinia-notify { - background: #fff; - padding: 0; - box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2); - border: none; - margin-top: 30px; - color: inherit; + background: #fff; + padding: 0; + box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2); + border: none; + margin-top: 30px; + color: inherit; } .inspinia-notify.alert-warning { - border-left: 6px solid #f8ac59; + border-left: 6px solid #f8ac59; } .inspinia-notify.alert-success { - border-left: 6px solid #1c84c6; + border-left: 6px solid #1c84c6; } .inspinia-notify.alert-danger { - border-left: 6px solid #ed5565; + border-left: 6px solid #ed5565; } .inspinia-notify.alert-info { - border-left: 6px solid #1ab394; + border-left: 6px solid #1ab394; } /* Image cropper style */ .img-container, .img-preview { - overflow: hidden; - text-align: center; - width: 100%; + overflow: hidden; + text-align: center; + width: 100%; } .img-preview-sm { - height: 130px; - width: 200px; + height: 130px; + width: 200px; } /* Forum styles */ .forum-post-container .media { - margin: 10px 10px 10px 10px; - padding: 20px 10px 20px 10px; - border-bottom: 1px solid #f1f1f1; + margin: 10px 10px 10px 10px; + padding: 20px 10px 20px 10px; + border-bottom: 1px solid #f1f1f1; } .forum-avatar { - float: left; - margin-right: 20px; - text-align: center; - width: 110px; + float: left; + margin-right: 20px; + text-align: center; + width: 110px; } .forum-avatar .img-circle { - height: 48px; - width: 48px; + height: 48px; + width: 48px; } .author-info { - color: #676a6c; - font-size: 11px; - margin-top: 5px; - text-align: center; + color: #676a6c; + font-size: 11px; + margin-top: 5px; + text-align: center; } .forum-post-info { - padding: 9px 12px 6px 12px; - background: #f9f9f9; - border: 1px solid #f1f1f1; + padding: 9px 12px 6px 12px; + background: #f9f9f9; + border: 1px solid #f1f1f1; } .media-body > .media { - background: #f9f9f9; - border-radius: 3px; - border: 1px solid #f1f1f1; + background: #f9f9f9; + border-radius: 3px; + border: 1px solid #f1f1f1; } .forum-post-container .media-body .photos { - margin: 10px 0; + margin: 10px 0; } .forum-photo { - max-width: 140px; - border-radius: 3px; + max-width: 140px; + border-radius: 3px; } .media-body > .media .forum-avatar { - width: 70px; - margin-right: 10px; + width: 70px; + margin-right: 10px; } .media-body > .media .forum-avatar .img-circle { - height: 38px; - width: 38px; + height: 38px; + width: 38px; } .mid-icon { - font-size: 66px; + font-size: 66px; } .forum-item { - margin: 10px 0; - padding: 10px 0 20px; - border-bottom: 1px solid #f1f1f1; + margin: 10px 0; + padding: 10px 0 20px; + border-bottom: 1px solid #f1f1f1; } .views-number { - font-size: 24px; - line-height: 18px; - font-weight: 400; + font-size: 24px; + line-height: 18px; + font-weight: 400; } .forum-container, .forum-post-container { - padding: 30px !important; + padding: 30px !important; } .forum-item small { - color: #999; + color: #999; } .forum-item .forum-sub-title { - color: #999; - margin-left: 50px; + color: #999; + margin-left: 50px; } .forum-title { - margin: 15px 0 15px 0; + margin: 15px 0 15px 0; } .forum-info { - text-align: center; + text-align: center; } .forum-desc { - color: #999; + color: #999; } .forum-icon { - float: left; - width: 30px; - margin-right: 20px; - text-align: center; + float: left; + width: 30px; + margin-right: 20px; + text-align: center; } a.forum-item-title { - color: inherit; - display: block; - font-size: 18px; - font-weight: 600; + color: inherit; + display: block; + font-size: 18px; + font-weight: 600; } a.forum-item-title:hover { - color: inherit; + color: inherit; } .forum-icon .fa { - font-size: 30px; - margin-top: 8px; - color: #9b9b9b; + font-size: 30px; + margin-top: 8px; + color: #9b9b9b; } .forum-item.active .fa { - color: #1ab394; + color: #1ab394; } .forum-item.active a.forum-item-title { - color: #1ab394; + color: #1ab394; } @media (max-width: 992px) { - .forum-info { - margin: 15px 0 10px 0; - /* Comment this is you want to show forum info in small devices */ - display: none; - } - .forum-desc { - float: none !important; - } + .forum-info { + margin: 15px 0 10px 0; + /* Comment this is you want to show forum info in small devices */ + display: none; + } + .forum-desc { + float: none !important; + } } /* New Timeline style */ .vertical-container { - /* this class is used to give a max-width to the element it is applied to, and center it horizontally when it reaches that max-width */ - width: 90%; - max-width: 1170px; - margin: 0 auto; + /* this class is used to give a max-width to the element it is applied to, and center it horizontally when it reaches that max-width */ + width: 90%; + max-width: 1170px; + margin: 0 auto; } .vertical-container::after { - /* clearfix */ - content: ''; - display: table; - clear: both; + /* clearfix */ + content: ''; + display: table; + clear: both; } #vertical-timeline { - position: relative; - padding: 0; - margin-top: 2em; - margin-bottom: 2em; + position: relative; + padding: 0; + margin-top: 2em; + margin-bottom: 2em; } #vertical-timeline::before { - content: ''; - position: absolute; - top: 0; - left: 18px; - height: 100%; - width: 4px; - background: #f1f1f1; + content: ''; + position: absolute; + top: 0; + left: 18px; + height: 100%; + width: 4px; + background: #f1f1f1; } .vertical-timeline-content .btn { - float: right; + float: right; } #vertical-timeline.light-timeline:before { - background: #e7eaec; + background: #e7eaec; } .dark-timeline .vertical-timeline-content:before { - border-color: transparent #f5f5f5 transparent transparent; + border-color: transparent #f5f5f5 transparent transparent; } .dark-timeline.center-orientation .vertical-timeline-content:before { - border-color: transparent transparent transparent #f5f5f5; + border-color: transparent transparent transparent #f5f5f5; } .dark-timeline .vertical-timeline-block:nth-child(2n) .vertical-timeline-content:before, .dark-timeline.center-orientation .vertical-timeline-block:nth-child(2n) .vertical-timeline-content:before { - border-color: transparent #f5f5f5 transparent transparent; + border-color: transparent #f5f5f5 transparent transparent; } .dark-timeline .vertical-timeline-content, .dark-timeline.center-orientation .vertical-timeline-content { - background: #f5f5f5; + background: #f5f5f5; } @media only screen and (min-width: 1170px) { - #vertical-timeline.center-orientation { - margin-top: 3em; - margin-bottom: 3em; - } - #vertical-timeline.center-orientation:before { - left: 50%; - margin-left: -2px; - } + #vertical-timeline.center-orientation { + margin-top: 3em; + margin-bottom: 3em; + } + #vertical-timeline.center-orientation:before { + left: 50%; + margin-left: -2px; + } } @media only screen and (max-width: 1170px) { - .center-orientation.dark-timeline .vertical-timeline-content:before { - border-color: transparent #f5f5f5 transparent transparent; - } + .center-orientation.dark-timeline .vertical-timeline-content:before { + border-color: transparent #f5f5f5 transparent transparent; + } } .vertical-timeline-block { - position: relative; - margin: 2em 0; + position: relative; + margin: 2em 0; } .vertical-timeline-block:after { - content: ""; - display: table; - clear: both; + content: ''; + display: table; + clear: both; } .vertical-timeline-block:first-child { - margin-top: 0; + margin-top: 0; } .vertical-timeline-block:last-child { - margin-bottom: 0; + margin-bottom: 0; } @media only screen and (min-width: 1170px) { - .center-orientation .vertical-timeline-block { - margin: 4em 0; - } - .center-orientation .vertical-timeline-block:first-child { - margin-top: 0; - } - .center-orientation .vertical-timeline-block:last-child { - margin-bottom: 0; - } + .center-orientation .vertical-timeline-block { + margin: 4em 0; + } + .center-orientation .vertical-timeline-block:first-child { + margin-top: 0; + } + .center-orientation .vertical-timeline-block:last-child { + margin-bottom: 0; + } } .vertical-timeline-icon { - position: absolute; - top: 0; - left: 0; - width: 40px; - height: 40px; - border-radius: 50%; - font-size: 16px; - border: 3px solid #f1f1f1; - text-align: center; + position: absolute; + top: 0; + left: 0; + width: 40px; + height: 40px; + border-radius: 50%; + font-size: 16px; + border: 3px solid #f1f1f1; + text-align: center; } .vertical-timeline-icon i { - display: block; - width: 24px; - height: 24px; - position: relative; - left: 50%; - top: 50%; - margin-left: -12px; - margin-top: -9px; -} -@media only screen and (min-width: 1170px) { - .center-orientation .vertical-timeline-icon { - width: 50px; - height: 50px; + display: block; + width: 24px; + height: 24px; + position: relative; left: 50%; - margin-left: -25px; - -webkit-transform: translateZ(0); - -webkit-backface-visibility: hidden; - font-size: 19px; - } - .center-orientation .vertical-timeline-icon i { + top: 50%; margin-left: -12px; - margin-top: -10px; - } - .center-orientation .cssanimations .vertical-timeline-icon.is-hidden { - visibility: hidden; - } + margin-top: -9px; +} +@media only screen and (min-width: 1170px) { + .center-orientation .vertical-timeline-icon { + width: 50px; + height: 50px; + left: 50%; + margin-left: -25px; + -webkit-transform: translateZ(0); + -webkit-backface-visibility: hidden; + font-size: 19px; + } + .center-orientation .vertical-timeline-icon i { + margin-left: -12px; + margin-top: -10px; + } + .center-orientation .cssanimations .vertical-timeline-icon.is-hidden { + visibility: hidden; + } } .vertical-timeline-content { - position: relative; - margin-left: 60px; - background: white; - border-radius: 0.25em; - padding: 1em; + position: relative; + margin-left: 60px; + background: white; + border-radius: 0.25em; + padding: 1em; } .vertical-timeline-content:after { - content: ""; - display: table; - clear: both; + content: ''; + display: table; + clear: both; } .vertical-timeline-content h2 { - font-weight: 400; - margin-top: 4px; + font-weight: 400; + margin-top: 4px; } .vertical-timeline-content p { - margin: 1em 0; - line-height: 1.6; + margin: 1em 0; + line-height: 1.6; } .vertical-timeline-content .vertical-date { - float: left; - font-weight: 500; + float: left; + font-weight: 500; } .vertical-date small { - color: #1ab394; - font-weight: 400; + color: #1ab394; + font-weight: 400; } .vertical-timeline-content::before { - content: ''; - position: absolute; - top: 16px; - right: 100%; - height: 0; - width: 0; - border: 7px solid transparent; - border-right: 7px solid white; + content: ''; + position: absolute; + top: 16px; + right: 100%; + height: 0; + width: 0; + border: 7px solid transparent; + border-right: 7px solid white; } @media only screen and (min-width: 768px) { - .vertical-timeline-content h2 { - font-size: 18px; - } - .vertical-timeline-content p { - font-size: 13px; - } + .vertical-timeline-content h2 { + font-size: 18px; + } + .vertical-timeline-content p { + font-size: 13px; + } } @media only screen and (min-width: 1170px) { - .center-orientation .vertical-timeline-content { - margin-left: 0; - padding: 1.6em; - width: 45%; - } - .center-orientation .vertical-timeline-content::before { - top: 24px; - left: 100%; - border-color: transparent; - border-left-color: white; - } - .center-orientation .vertical-timeline-content .btn { - float: left; - } - .center-orientation .vertical-timeline-content .vertical-date { - position: absolute; - width: 100%; - left: 122%; - top: 2px; - font-size: 14px; - } - .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content { - float: right; - } - .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content::before { - top: 24px; - left: auto; - right: 100%; - border-color: transparent; - border-right-color: white; - } - .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .btn { - float: right; - } - .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .vertical-date { - left: auto; - right: 122%; - text-align: right; - } - .center-orientation .cssanimations .vertical-timeline-content.is-hidden { - visibility: hidden; - } + .center-orientation .vertical-timeline-content { + margin-left: 0; + padding: 1.6em; + width: 45%; + } + .center-orientation .vertical-timeline-content::before { + top: 24px; + left: 100%; + border-color: transparent; + border-left-color: white; + } + .center-orientation .vertical-timeline-content .btn { + float: left; + } + .center-orientation .vertical-timeline-content .vertical-date { + position: absolute; + width: 100%; + left: 122%; + top: 2px; + font-size: 14px; + } + .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content { + float: right; + } + .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content::before { + top: 24px; + left: auto; + right: 100%; + border-color: transparent; + border-right-color: white; + } + .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .btn { + float: right; + } + .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .vertical-date { + left: auto; + right: 122%; + text-align: right; + } + .center-orientation .cssanimations .vertical-timeline-content.is-hidden { + visibility: hidden; + } } /* Tabs */ .tabs-container .panel-body { - background: #fff; - border: 1px solid #e7eaec; - border-radius: 2px; - padding: 20px; - position: relative; + background: #fff; + border: 1px solid #e7eaec; + border-radius: 2px; + padding: 20px; + position: relative; } .tabs-container .nav-tabs > li.active > a, .tabs-container .nav-tabs > li.active > a:hover, .tabs-container .nav-tabs > li.active > a:focus { - border: 1px solid #e7eaec; - border-bottom-color: transparent; - background-color: #fff; + border: 1px solid #e7eaec; + border-bottom-color: transparent; + background-color: #fff; } .tabs-container .nav-tabs > li { - float: left; - margin-bottom: -1px; + float: left; + margin-bottom: -1px; } .tabs-container .tab-pane .panel-body { - border-top: none; + border-top: none; } .tabs-container .nav-tabs > li.active > a, .tabs-container .nav-tabs > li.active > a:hover, .tabs-container .nav-tabs > li.active > a:focus { - border: 1px solid #e7eaec; - border-bottom-color: transparent; + border: 1px solid #e7eaec; + border-bottom-color: transparent; } .tabs-container .nav-tabs { - border-bottom: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; } .tabs-container .tab-pane .panel-body { - border-top: none; + border-top: none; } .tabs-container .tabs-left .tab-pane .panel-body, .tabs-container .tabs-right .tab-pane .panel-body { - border-top: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; } .tabs-container .nav-tabs > li a:hover { - background: transparent; - border-color: transparent; + background: transparent; + border-color: transparent; } .tabs-container .tabs-below > .nav-tabs, .tabs-container .tabs-right > .nav-tabs, .tabs-container .tabs-left > .nav-tabs { - border-bottom: 0; + border-bottom: 0; } .tabs-container .tabs-left .panel-body { - position: static; + position: static; } .tabs-container .tabs-left > .nav-tabs, .tabs-container .tabs-right > .nav-tabs { - width: 20%; + width: 20%; } .tabs-container .tabs-left .panel-body { - width: 80%; - margin-left: 20%; + width: 80%; + margin-left: 20%; } .tabs-container .tabs-right .panel-body { - width: 80%; - margin-right: 20%; + width: 80%; + margin-right: 20%; } .tabs-container .tab-content > .tab-pane, .tabs-container .pill-content > .pill-pane { - display: none; + display: none; } .tabs-container .tab-content > .active, .tabs-container .pill-content > .active { - display: block; + display: block; } .tabs-container .tabs-below > .nav-tabs { - border-top: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; } .tabs-container .tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; + margin-top: -1px; + margin-bottom: 0; } .tabs-container .tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; } .tabs-container .tabs-below > .nav-tabs > li > a:hover, .tabs-container .tabs-below > .nav-tabs > li > a:focus { - border-top-color: #e7eaec; - border-bottom-color: transparent; + border-top-color: #e7eaec; + border-bottom-color: transparent; } .tabs-container .tabs-left > .nav-tabs > li, .tabs-container .tabs-right > .nav-tabs > li { - float: none; + float: none; } .tabs-container .tabs-left > .nav-tabs > li > a, .tabs-container .tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; } .tabs-container .tabs-left > .nav-tabs { - float: left; - margin-right: 19px; + float: left; + margin-right: 19px; } .tabs-container .tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; } .tabs-container .tabs-left > .nav-tabs .active > a, .tabs-container .tabs-left > .nav-tabs .active > a:hover, .tabs-container .tabs-left > .nav-tabs .active > a:focus { - border-color: #e7eaec transparent #e7eaec #e7eaec; + border-color: #e7eaec transparent #e7eaec #e7eaec; } .tabs-container .tabs-right > .nav-tabs { - float: right; - margin-left: 19px; + float: right; + margin-left: 19px; } .tabs-container .tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; } .tabs-container .tabs-right > .nav-tabs .active > a, .tabs-container .tabs-right > .nav-tabs .active > a:hover, .tabs-container .tabs-right > .nav-tabs .active > a:focus { - border-color: #e7eaec #e7eaec #e7eaec transparent; - z-index: 1; + border-color: #e7eaec #e7eaec #e7eaec transparent; + z-index: 1; } @media (max-width: 767px) { - .tabs-container .nav-tabs > li { - float: none !important; - } - .tabs-container .nav-tabs > li.active > a { - border-bottom: 1px solid #e7eaec !important; - margin: 0; - } + .tabs-container .nav-tabs > li { + float: none !important; + } + .tabs-container .nav-tabs > li.active > a { + border-bottom: 1px solid #e7eaec !important; + margin: 0; + } } /* jsvectormap */ .jvectormap-container { - width: 100%; - height: 100%; - position: relative; - overflow: hidden; + width: 100%; + height: 100%; + position: relative; + overflow: hidden; } .jvectormap-tip { - position: absolute; - display: none; - border: solid 1px #CDCDCD; - border-radius: 3px; - background: #292929; - color: white; - font-family: sans-serif, Verdana; - font-size: smaller; - padding: 5px; + position: absolute; + display: none; + border: solid 1px #cdcdcd; + border-radius: 3px; + background: #292929; + color: white; + font-family: sans-serif, Verdana; + font-size: smaller; + padding: 5px; } .jvectormap-zoomin, .jvectormap-zoomout, .jvectormap-goback { - position: absolute; - left: 10px; - border-radius: 3px; - background: #1ab394; - padding: 3px; - color: white; - cursor: pointer; - line-height: 10px; - text-align: center; - box-sizing: content-box; + position: absolute; + left: 10px; + border-radius: 3px; + background: #1ab394; + padding: 3px; + color: white; + cursor: pointer; + line-height: 10px; + text-align: center; + box-sizing: content-box; } .jvectormap-zoomin, .jvectormap-zoomout { - width: 10px; - height: 10px; + width: 10px; + height: 10px; } .jvectormap-zoomin { - top: 10px; + top: 10px; } .jvectormap-zoomout { - top: 30px; + top: 30px; } .jvectormap-goback { - bottom: 10px; - z-index: 1000; - padding: 6px; + bottom: 10px; + z-index: 1000; + padding: 6px; } .jvectormap-spinner { - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - background: center no-repeat url(data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==); + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: center no-repeat + url(data:image/gif;base64,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); } .jvectormap-legend-title { - font-weight: bold; - font-size: 14px; - text-align: center; + font-weight: bold; + font-size: 14px; + text-align: center; } .jvectormap-legend-cnt { - position: absolute; + position: absolute; } .jvectormap-legend-cnt-h { - bottom: 0; - right: 0; + bottom: 0; + right: 0; } .jvectormap-legend-cnt-v { - top: 0; - right: 0; + top: 0; + right: 0; } .jvectormap-legend { - background: black; - color: white; - border-radius: 3px; + background: black; + color: white; + border-radius: 3px; } .jvectormap-legend-cnt-h .jvectormap-legend { - float: left; - margin: 0 10px 10px 0; - padding: 3px 3px 1px 3px; + float: left; + margin: 0 10px 10px 0; + padding: 3px 3px 1px 3px; } .jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick { - float: left; + float: left; } .jvectormap-legend-cnt-v .jvectormap-legend { - margin: 10px 10px 0 0; - padding: 3px; + margin: 10px 10px 0 0; + padding: 3px; } .jvectormap-legend-cnt-h .jvectormap-legend-tick { - width: 40px; + width: 40px; } .jvectormap-legend-cnt-h .jvectormap-legend-tick-sample { - height: 15px; + height: 15px; } .jvectormap-legend-cnt-v .jvectormap-legend-tick-sample { - height: 20px; - width: 20px; - display: inline-block; - vertical-align: middle; + height: 20px; + width: 20px; + display: inline-block; + vertical-align: middle; } .jvectormap-legend-tick-text { - font-size: 12px; + font-size: 12px; } .jvectormap-legend-cnt-h .jvectormap-legend-tick-text { - text-align: center; + text-align: center; } .jvectormap-legend-cnt-v .jvectormap-legend-tick-text { - display: inline-block; - vertical-align: middle; - line-height: 20px; - padding-left: 3px; + display: inline-block; + vertical-align: middle; + line-height: 20px; + padding-left: 3px; } /*Slick Carousel */ .slick-prev:before, .slick-next:before { - color: #1ab394 !important; + color: #1ab394 !important; } /* Payments */ .payment-card { - background: #ffffff; - padding: 20px; - margin-bottom: 25px; - border: 1px solid #e7eaec; + background: #ffffff; + padding: 20px; + margin-bottom: 25px; + border: 1px solid #e7eaec; } .payment-icon-big { - font-size: 60px; - color: #d1dade; + font-size: 60px; + color: #d1dade; } .payments-method.panel-group .panel + .panel { - margin-top: -1px; + margin-top: -1px; } .payments-method .panel-heading { - padding: 15px; + padding: 15px; } .payments-method .panel { - border-radius: 0; + border-radius: 0; } .payments-method .panel-heading h5 { - margin-bottom: 5px; + margin-bottom: 5px; } .payments-method .panel-heading i { - font-size: 26px; + font-size: 26px; } /* Select2 custom styles */ .select2-container--default .select2-selection--single, .select2-container--default .select2-selection--multiple { - border-color: #e7eaec; + border-color: #e7eaec; } .select2-container--default.select2-container--focus .select2-selection--single, .select2-container--default.select2-container--focus .select2-selection--multiple { - border-color: #1ab394; + border-color: #1ab394; } .select2-container--default .select2-results__option--highlighted[aria-selected] { - background-color: #1ab394; + background-color: #1ab394; } .select2-container--default .select2-search--dropdown .select2-search__field { - border-color: #e7eaec; + border-color: #e7eaec; } .select2-dropdown { - border-color: #e7eaec; + border-color: #e7eaec; } .select2-dropdown input:focus { - outline: none; + outline: none; } .select2-selection { - outline: none; + outline: none; } .ui-select-container.ui-select-bootstrap .ui-select-choices-row.active > a { - background-color: #1ab394; + background-color: #1ab394; } /* Tour */ .tour-tour .btn.btn-default { - background-color: #ffffff; - border: 1px solid #d2d2d2; - color: inherit; + background-color: #ffffff; + border: 1px solid #d2d2d2; + color: inherit; } .tour-step-backdrop { - z-index: 2101; + z-index: 2101; } .tour-backdrop { - z-index: 2100; - opacity: .7; + z-index: 2100; + opacity: 0.7; } -.popover[class*=tour-] { - z-index: 2100; +.popover[class*='tour-'] { + z-index: 2100; } body.tour-open .animated { - animation-fill-mode: initial; + animation-fill-mode: initial; } /* Resizable */ .resizable-panels .ibox { - clear: none; - margin: 10px; - float: left; - overflow: hidden; - min-height: 150px; - min-width: 150px; + clear: none; + margin: 10px; + float: left; + overflow: hidden; + min-height: 150px; + min-width: 150px; } .resizable-panels .ibox .ibox-content { - height: calc(100% - 49px); + height: calc(100% - 49px); } .ui-resizable-helper { - background: rgba(211, 211, 211, 0.4); + background: rgba(211, 211, 211, 0.4); } /* Wizard step fix */ .wizard > .content > .body { - position: relative; + position: relative; } /* PDF js style */ .pdf-toolbar { - max-width: 600px; - margin: 0 auto; + max-width: 600px; + margin: 0 auto; } /* Dropzone */ .dropzone { - min-height: 140px; - border: 1px dashed #1ab394; - background: white; - padding: 20px 20px; + min-height: 140px; + border: 1px dashed #1ab394; + background: white; + padding: 20px 20px; } .dropzone .dz-message { - font-size: 16px; + font-size: 16px; } /* Activity stream */ .stream { - position: relative; - padding: 10px 0; + position: relative; + padding: 10px 0; } .stream:first-child .stream-badge:before { - top: 10px; + top: 10px; } .stream:last-child .stream-badge:before { - height: 30px; + height: 30px; } .stream .stream-badge { - width: 50px; + width: 50px; } .stream .stream-badge i { - border: 1px solid #e7eaec; - border-radius: 50%; - padding: 6px; - color: #808486; - position: absolute; - background-color: #ffffff; - left: 8px; + border: 1px solid #e7eaec; + border-radius: 50%; + padding: 6px; + color: #808486; + position: absolute; + background-color: #ffffff; + left: 8px; } .stream .stream-badge i.fa-circle { - color: #ced0d1; + color: #ced0d1; } .stream .stream-badge i.bg-success { - color: #ffffff; - background-color: #1c84c6; - border-color: #1c84c6; + color: #ffffff; + background-color: #1c84c6; + border-color: #1c84c6; } .stream .stream-badge i.bg-primary { - color: #ffffff; - background-color: #1ab394; - border-color: #1ab394; + color: #ffffff; + background-color: #1ab394; + border-color: #1ab394; } .stream .stream-badge i.bg-warning { - color: #ffffff; - background-color: #f8ac59; - border-color: #f8ac59; + color: #ffffff; + background-color: #f8ac59; + border-color: #f8ac59; } .stream .stream-badge i.bg-info { - color: #ffffff; - background-color: #23c6c8; - border-color: #23c6c8; + color: #ffffff; + background-color: #23c6c8; + border-color: #23c6c8; } .stream .stream-badge i.bg-danger { - color: #ffffff; - background-color: #ed5565; - border-color: #ed5565; + color: #ffffff; + background-color: #ed5565; + border-color: #ed5565; } .stream .stream-badge:before { - content: ''; - width: 1px; - background-color: #e7eaec; - position: absolute; - top: 0; - bottom: 0; - left: 20px; + content: ''; + width: 1px; + background-color: #e7eaec; + position: absolute; + top: 0; + bottom: 0; + left: 20px; } .stream .stream-info { - font-size: 12px; - margin-bottom: 5px; + font-size: 12px; + margin-bottom: 5px; } .stream .stream-info img { - border-radius: 50%; - width: 18px; - height: 18px; - margin-right: 2px; - margin-top: -4px; + border-radius: 50%; + width: 18px; + height: 18px; + margin-right: 2px; + margin-top: -4px; } .stream .stream-info .date { - color: #9a9d9f; - font-size: 80%; + color: #9a9d9f; + font-size: 80%; } .stream .stream-panel { - margin-left: 55px; + margin-left: 55px; } .stream-small { - margin: 10px 0; + margin: 10px 0; } .stream-small .label { - padding: 2px 6px; - margin-right: 2px; + padding: 2px 6px; + margin-right: 2px; } .sidebar-panel { - width: 220px; - background: #ebebed; - padding: 10px 20px; - position: absolute; - right: 0; + width: 220px; + background: #ebebed; + padding: 10px 20px; + position: absolute; + right: 0; } .sidebar-panel .feed-element img.img-circle { - width: 32px; - height: 32px; + width: 32px; + height: 32px; } .sidebar-panel .feed-element, .media-body, .sidebar-panel p { - font-size: 12px; + font-size: 12px; } .sidebar-panel .feed-element { - margin-top: 20px; - padding-bottom: 0; + margin-top: 20px; + padding-bottom: 0; } .sidebar-panel .list-group { - margin-bottom: 10px; + margin-bottom: 10px; } .sidebar-panel .list-group .list-group-item { - padding: 5px 0; - font-size: 12px; - border: 0; + padding: 5px 0; + font-size: 12px; + border: 0; } .sidebar-content .wrapper, .wrapper.sidebar-content { - padding-right: 230px !important; + padding-right: 230px !important; } .body-small .sidebar-content .wrapper, .body-small .wrapper.sidebar-content { - padding-right: 20px !important; + padding-right: 20px !important; } #right-sidebar { - background-color: #fff; - border-left: 1px solid #e7eaec; - border-top: 1px solid #e7eaec; - overflow: hidden; - position: fixed; - top: 60px; - width: 260px !important; - z-index: 1009; - bottom: 0; - right: -260px; + background-color: #fff; + border-left: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + overflow: hidden; + position: fixed; + top: 60px; + width: 260px !important; + z-index: 1009; + bottom: 0; + right: -260px; } #right-sidebar.sidebar-open { - right: 0; + right: 0; } #right-sidebar.sidebar-open.sidebar-top { - top: 0; - border-top: none; + top: 0; + border-top: none; } .sidebar-container ul.nav-tabs { - border: none; + border: none; } .sidebar-container ul.nav-tabs.navs-4 li { - width: 25%; + width: 25%; } .sidebar-container ul.nav-tabs.navs-3 li { - width: 33.3333%; + width: 33.3333%; } .sidebar-container ul.nav-tabs.navs-2 li { - width: 50%; + width: 50%; } .sidebar-container ul.nav-tabs li { - border: none; + border: none; } .sidebar-container ul.nav-tabs li a { - border: none; - padding: 12px 10px; - margin: 0; - border-radius: 0; - background: #2f4050; - color: #fff; - text-align: center; - border-right: 1px solid #334556; + border: none; + padding: 12px 10px; + margin: 0; + border-radius: 0; + background: #2f4050; + color: #fff; + text-align: center; + border-right: 1px solid #334556; } .sidebar-container ul.nav-tabs li.active a { - border: none; - background: #f9f9f9; - color: #676a6c; - font-weight: bold; + border: none; + background: #f9f9f9; + color: #676a6c; + font-weight: bold; } .sidebar-container .nav-tabs > li.active > a:hover, .sidebar-container .nav-tabs > li.active > a:focus { - border: none; + border: none; } .sidebar-container ul.sidebar-list { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } .sidebar-container ul.sidebar-list li { - border-bottom: 1px solid #e7eaec; - padding: 15px 20px; - list-style: none; - font-size: 12px; + border-bottom: 1px solid #e7eaec; + padding: 15px 20px; + list-style: none; + font-size: 12px; } -.sidebar-container .sidebar-message:nth-child(2n+2) { - background: #f9f9f9; +.sidebar-container .sidebar-message:nth-child(2n + 2) { + background: #f9f9f9; } .sidebar-container ul.sidebar-list li a { - text-decoration: none; - color: inherit; + text-decoration: none; + color: inherit; } .sidebar-container .sidebar-content { - padding: 15px 20px; - font-size: 12px; + padding: 15px 20px; + font-size: 12px; } .sidebar-container .sidebar-title { - background: #f9f9f9; - padding: 20px; - border-bottom: 1px solid #e7eaec; + background: #f9f9f9; + padding: 20px; + border-bottom: 1px solid #e7eaec; } .sidebar-container .sidebar-title h3 { - margin-bottom: 3px; - padding-left: 2px; + margin-bottom: 3px; + padding-left: 2px; } .sidebar-container .tab-content h4 { - margin-bottom: 5px; + margin-bottom: 5px; } .sidebar-container .sidebar-message > a > .pull-left { - margin-right: 10px; + margin-right: 10px; } .sidebar-container .sidebar-message > a { - text-decoration: none; - color: inherit; + text-decoration: none; + color: inherit; } .sidebar-container .sidebar-message { - padding: 15px 20px; + padding: 15px 20px; } .sidebar-container .sidebar-message .media-body { - display: block; - width: auto; + display: block; + width: auto; } .sidebar-container .sidebar-message .message-avatar { - height: 38px; - width: 38px; - border-radius: 50%; + height: 38px; + width: 38px; + border-radius: 50%; } .sidebar-container .setings-item { - padding: 15px 20px; - border-bottom: 1px solid #e7eaec; + padding: 15px 20px; + border-bottom: 1px solid #e7eaec; } body { - font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif; - background-color: #2f4050; - font-size: 13px; - color: #676a6c; - overflow-x: hidden; + font-family: 'Lato', 'Helvetica Neue', Helvetica, Arial, sans-serif; + background-color: #2f4050; + font-size: 13px; + color: #676a6c; + overflow-x: hidden; } html, body { - height: 100%; + height: 100%; } body.full-height-layout #wrapper, body.full-height-layout #page-wrapper { - height: 100%; + height: 100%; } #page-wrapper { - min-height: auto; + min-height: auto; } body.boxed-layout { - background: url('../img/patterns/shattered.png'); + background: url('../img/patterns/shattered.png'); } body.boxed-layout #wrapper { - background-color: #2f4050; - max-width: 1200px; - margin: 0 auto; - -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75); - -moz-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75); - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75); + background-color: #2f4050; + max-width: 1200px; + margin: 0 auto; + -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75); + -moz-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75); + box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75); } .top-navigation.boxed-layout #wrapper, .boxed-layout #wrapper.top-navigation { - max-width: 1300px !important; + max-width: 1300px !important; } .block { - display: block; + display: block; } .clear { - display: block; - overflow: hidden; + display: block; + overflow: hidden; } a { - cursor: pointer; + cursor: pointer; } a:hover, a:focus { - text-decoration: none; + text-decoration: none; } .border-bottom { - border-bottom: 1px solid #e7eaec !important; + border-bottom: 1px solid #e7eaec !important; } .font-bold { - font-weight: 600; + font-weight: 600; } .font-normal { - font-weight: 400; + font-weight: 400; } .text-uppercase { - text-transform: uppercase; + text-transform: uppercase; } .font-italic { - font-style: italic; + font-style: italic; } .b-r { - border-right: 1px solid #e7eaec; + border-right: 1px solid #e7eaec; } .hr-line-dashed { - border-top: 1px dashed #e7eaec; - color: #ffffff; - background-color: #ffffff; - height: 1px; - margin: 20px 0; + border-top: 1px dashed #e7eaec; + color: #ffffff; + background-color: #ffffff; + height: 1px; + margin: 20px 0; } .hr-line-solid { - border-bottom: 1px solid #e7eaec; - background-color: rgba(0, 0, 0, 0); - border-style: solid !important; - margin-top: 15px; - margin-bottom: 15px; + border-bottom: 1px solid #e7eaec; + background-color: rgba(0, 0, 0, 0); + border-style: solid !important; + margin-top: 15px; + margin-bottom: 15px; } video { - width: 100% !important; - height: auto !important; + width: 100% !important; + height: auto !important; } /* GALLERY */ .gallery > .row > div { - margin-bottom: 15px; + margin-bottom: 15px; } .fancybox img { - margin-bottom: 5px; - /* Only for demo */ - width: 24%; + margin-bottom: 5px; + /* Only for demo */ + width: 24%; } /* Summernote text editor */ .note-editor { - height: auto !important; + height: auto !important; } .note-editor.fullscreen { - z-index: 2050; + z-index: 2050; } .note-editor.note-frame.fullscreen { - z-index: 2020; + z-index: 2020; } .note-editor.note-frame .note-editing-area .note-editable { - color: #676a6c; - padding: 15px; + color: #676a6c; + padding: 15px; } .note-editor.note-frame { - border: none; + border: none; } .note-editor.panel { - margin-bottom: 0; + margin-bottom: 0; } /* MODAL */ .modal-content { - background-clip: padding-box; - background-color: #FFFFFF; - border: 1px solid rgba(0, 0, 0, 0); - border-radius: 4px; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); - outline: 0 none; - position: relative; + background-clip: padding-box; + background-color: #ffffff; + border: 1px solid rgba(0, 0, 0, 0); + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + outline: 0 none; + position: relative; } .modal-dialog { - z-index: 2200; + z-index: 2200; } .modal-body { - padding: 20px 30px 30px 30px; + padding: 20px 30px 30px 30px; } .inmodal .modal-body { - background: #f8fafb; + background: #f8fafb; } .inmodal .modal-header { - padding: 30px 15px; - text-align: center; + padding: 30px 15px; + text-align: center; } .animated.modal.fade .modal-dialog { - -webkit-transform: none; - -ms-transform: none; - -o-transform: none; - transform: none; + -webkit-transform: none; + -ms-transform: none; + -o-transform: none; + transform: none; } .inmodal .modal-title { - font-size: 26px; + font-size: 26px; } .inmodal .modal-icon { - font-size: 84px; - color: #e2e3e3; + font-size: 84px; + color: #e2e3e3; } .modal-footer { - margin-top: 0; + margin-top: 0; } /* WRAPPERS */ #wrapper { - width: 100%; - overflow-x: hidden; + width: 100%; + overflow-x: hidden; } .wrapper { - padding: 0 20px; + padding: 0 20px; } .wrapper-content { - padding: 20px 10px 40px; + padding: 20px 10px 40px; } #page-wrapper { - padding: 0 15px; - min-height: 568px; - position: relative !important; + padding: 0 15px; + min-height: 568px; + position: relative !important; } @media (min-width: 768px) { - #page-wrapper { - position: inherit; - margin: 0 0 0 240px; - min-height: 2002px; - } + #page-wrapper { + position: inherit; + margin: 0 0 0 240px; + min-height: 2002px; + } } .title-action { - text-align: right; - padding-top: 30px; + text-align: right; + padding-top: 30px; } .ibox-content h1, .ibox-content h2, @@ -3664,79 +3675,79 @@ video { .ibox-title h3, .ibox-title h4, .ibox-title h5 { - margin-top: 5px; + margin-top: 5px; } ul.unstyled, ol.unstyled { - list-style: none outside none; - margin-left: 0; + list-style: none outside none; + margin-left: 0; } .big-icon { - font-size: 160px !important; - color: #e5e6e7; + font-size: 160px !important; + color: #e5e6e7; } /* FOOTER */ .footer { - background: none repeat scroll 0 0 white; - border-top: 1px solid #e7eaec; - bottom: 0; - left: 0; - padding: 10px 20px; - position: absolute; - right: 0; + background: none repeat scroll 0 0 white; + border-top: 1px solid #e7eaec; + bottom: 0; + left: 0; + padding: 10px 20px; + position: absolute; + right: 0; } .footer.fixed_full { - position: fixed; - bottom: 0; - left: 0; - right: 0; - z-index: 1000; - padding: 10px 20px; - background: white; - border-top: 1px solid #e7eaec; + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 1000; + padding: 10px 20px; + background: white; + border-top: 1px solid #e7eaec; } .footer.fixed { - position: fixed; - bottom: 0; - left: 0; - right: 0; - z-index: 1000; - padding: 10px 20px; - background: white; - border-top: 1px solid #e7eaec; - margin-left: 220px; + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 1000; + padding: 10px 20px; + background: white; + border-top: 1px solid #e7eaec; + margin-left: 220px; } body.mini-navbar .footer.fixed, body.body-small.mini-navbar .footer.fixed { - margin: 0 0 0 70px; + margin: 0 0 0 70px; } body.mini-navbar.canvas-menu .footer.fixed, body.canvas-menu .footer.fixed { - margin: 0 !important; + margin: 0 !important; } body.fixed-sidebar.body-small.mini-navbar .footer.fixed { - margin: 0 0 0 220px; + margin: 0 0 0 220px; } body.body-small .footer.fixed { - margin-left: 0; + margin-left: 0; } /* PANELS */ .page-heading { - border-top: 0; - padding: 0 10px 20px 10px; + border-top: 0; + padding: 0 10px 20px 10px; } .panel-heading h1, .panel-heading h2 { - margin-bottom: 5px; + margin-bottom: 5px; } /* TABLES */ .table-bordered { - border: 1px solid #EBEBEB; + border: 1px solid #ebebeb; } .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { - background-color: #F5F5F6; - border-bottom-width: 1px; + background-color: #f5f5f6; + border-bottom-width: 1px; } .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, @@ -3744,11 +3755,11 @@ body.body-small .footer.fixed { .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { - border: 1px solid #e7e7e7; + border: 1px solid #e7e7e7; } .table > thead > tr > th { - border-bottom: 1px solid #DDDDDD; - vertical-align: bottom; + border-bottom: 1px solid #dddddd; + vertical-align: bottom; } .table > thead > tr > th, .table > tbody > tr > th, @@ -3756,432 +3767,432 @@ body.body-small .footer.fixed { .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { - border-top: 1px solid #e7eaec; - line-height: 1.42857; - padding: 8px; - vertical-align: top; + border-top: 1px solid #e7eaec; + line-height: 1.42857; + padding: 8px; + vertical-align: top; } /* PANELS */ .panel.blank-panel { - background: none; - margin: 0; + background: none; + margin: 0; } .blank-panel .panel-heading { - padding-bottom: 0; + padding-bottom: 0; } .nav-tabs > li > a { - color: #A7B1C2; - font-weight: 600; - padding: 10px 20px 10px 25px; + color: #a7b1c2; + font-weight: 600; + padding: 10px 20px 10px 25px; } .nav-tabs > li > a:hover, .nav-tabs > li > a:focus { - background-color: #e6e6e6; - color: #676a6c; + background-color: #e6e6e6; + color: #676a6c; } .ui-tab .tab-content { - padding: 20px 0; + padding: 20px 0; } /* GLOBAL */ .no-padding { - padding: 0 !important; + padding: 0 !important; } .no-borders { - border: none !important; + border: none !important; } .no-margins { - margin: 0 !important; + margin: 0 !important; } .no-top-border { - border-top: 0 !important; + border-top: 0 !important; } .ibox-content.text-box { - padding-bottom: 0; - padding-top: 15px; + padding-bottom: 0; + padding-top: 15px; } .border-left-right { - border-left: 1px solid #e7eaec; - border-right: 1px solid #e7eaec; + border-left: 1px solid #e7eaec; + border-right: 1px solid #e7eaec; } .border-top-bottom { - border-top: 1px solid #e7eaec; - border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; } .border-left { - border-left: 1px solid #e7eaec; + border-left: 1px solid #e7eaec; } .border-right { - border-right: 1px solid #e7eaec; + border-right: 1px solid #e7eaec; } .border-top { - border-top: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; } .border-bottom { - border-bottom: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; } .border-size-sm { - border-width: 3px; + border-width: 3px; } .border-size-md { - border-width: 6px; + border-width: 6px; } .border-size-lg { - border-width: 9px; + border-width: 9px; } .border-size-xl { - border-width: 12px; + border-width: 12px; } .full-width { - width: 100% !important; + width: 100% !important; } .link-block { - font-size: 12px; - padding: 10px; + font-size: 12px; + padding: 10px; } .nav.navbar-top-links .link-block a { - font-size: 12px; + font-size: 12px; } .link-block a { - font-size: 10px; - color: inherit; + font-size: 10px; + color: inherit; } body.mini-navbar .branding { - display: none; + display: none; } img.circle-border { - border: 6px solid #FFFFFF; - border-radius: 50%; + border: 6px solid #ffffff; + border-radius: 50%; } .branding { - float: left; - color: #FFFFFF; - font-size: 18px; - font-weight: 600; - padding: 17px 20px; - text-align: center; - background-color: #1ab394; + float: left; + color: #ffffff; + font-size: 18px; + font-weight: 600; + padding: 17px 20px; + text-align: center; + background-color: #1ab394; } .login-panel { - margin-top: 25%; + margin-top: 25%; } .icons-box h3 { - margin-top: 10px; - margin-bottom: 10px; + margin-top: 10px; + margin-bottom: 10px; } .icons-box .infont a i { - font-size: 25px; - display: block; - color: #676a6c; + font-size: 25px; + display: block; + color: #676a6c; } .icons-box .infont a { - color: #a6a8a9; + color: #a6a8a9; } .icons-box .infont a { - padding: 10px; - margin: 1px; - display: block; + padding: 10px; + margin: 1px; + display: block; } .ui-draggable .ibox-title { - cursor: move; + cursor: move; } .breadcrumb { - background-color: #ffffff; - padding: 0; - margin-bottom: 0; + background-color: #ffffff; + padding: 0; + margin-bottom: 0; } .breadcrumb > li a { - color: inherit; + color: inherit; } .breadcrumb > .active { - color: inherit; + color: inherit; } code { - background-color: #F9F2F4; - border-radius: 4px; - color: #ca4440; - font-size: 90%; - padding: 2px 4px; - white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; + color: #ca4440; + font-size: 90%; + padding: 2px 4px; + white-space: nowrap; } .ibox { - clear: both; - margin-bottom: 25px; - margin-top: 0; - padding: 0; + clear: both; + margin-bottom: 25px; + margin-top: 0; + padding: 0; } .ibox.collapsed .ibox-content { - display: none; + display: none; } .ibox.collapsed .fa.fa-chevron-up:before { - content: "\f078"; + content: '\f078'; } .ibox.collapsed .fa.fa-chevron-down:before { - content: "\f077"; + content: '\f077'; } .ibox:after, .ibox:before { - display: table; + display: table; } .ibox-title { - -moz-border-bottom-colors: none; - -moz-border-left-colors: none; - -moz-border-right-colors: none; - -moz-border-top-colors: none; - background-color: #ffffff; - border-color: #e7eaec; - border-image: none; - border-style: solid solid none; - border-width: 2px 0 0; - color: inherit; - margin-bottom: 0; - padding: 15px 15px 7px; - min-height: 48px; + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + background-color: #ffffff; + border-color: #e7eaec; + border-image: none; + border-style: solid solid none; + border-width: 2px 0 0; + color: inherit; + margin-bottom: 0; + padding: 15px 15px 7px; + min-height: 48px; } .ibox-content { - background-color: #ffffff; - color: inherit; - padding: 15px 20px 20px 20px; - border-color: #e7eaec; - border-image: none; - border-style: solid solid none; - border-width: 1px 0; + background-color: #ffffff; + color: inherit; + padding: 15px 20px 20px 20px; + border-color: #e7eaec; + border-image: none; + border-style: solid solid none; + border-width: 1px 0; } .ibox-footer { - color: inherit; - border-top: 1px solid #e7eaec; - font-size: 90%; - background: #ffffff; - padding: 10px 15px; + color: inherit; + border-top: 1px solid #e7eaec; + font-size: 90%; + background: #ffffff; + padding: 10px 15px; } table.table-mail tr td { - padding: 12px; + padding: 12px; } .table-mail .check-mail { - padding-left: 20px; + padding-left: 20px; } .table-mail .mail-date { - padding-right: 20px; + padding-right: 20px; } .star-mail, .check-mail { - width: 40px; + width: 40px; } .unread td a, .unread td { - font-weight: 600; - color: inherit; + font-weight: 600; + color: inherit; } .read td a, .read td { - font-weight: normal; - color: inherit; + font-weight: normal; + color: inherit; } .unread td { - background-color: #f9f8f8; + background-color: #f9f8f8; } .ibox-content { - clear: both; + clear: both; } .ibox-heading { - background-color: #f3f6fb; - border-bottom: none; + background-color: #f3f6fb; + border-bottom: none; } .ibox-heading h3 { - font-weight: 200; - font-size: 24px; + font-weight: 200; + font-size: 24px; } .ibox-title h5 { - display: inline-block; - font-size: 14px; - margin: 0 0 7px; - padding: 0; - text-overflow: ellipsis; - float: left; + display: inline-block; + font-size: 14px; + margin: 0 0 7px; + padding: 0; + text-overflow: ellipsis; + float: left; } .ibox-title .label { - float: left; - margin-left: 4px; + float: left; + margin-left: 4px; } .ibox-tools { - display: block; - float: none; - margin-top: 0; - position: relative; - padding: 0; - text-align: right; + display: block; + float: none; + margin-top: 0; + position: relative; + padding: 0; + text-align: right; } .ibox-tools a { - cursor: pointer; - margin-left: 5px; - color: #c4c4c4; + cursor: pointer; + margin-left: 5px; + color: #c4c4c4; } .ibox-tools a.btn-primary { - color: #fff; + color: #fff; } .ibox-tools .dropdown-menu > li > a { - padding: 4px 10px; - font-size: 12px; + padding: 4px 10px; + font-size: 12px; } .ibox .ibox-tools.open > .dropdown-menu { - left: auto; - right: 0; + left: auto; + right: 0; } /* BACKGROUNDS */ .gray-bg, .bg-muted { - background-color: #f3f3f4; + background-color: #f3f3f4; } .white-bg { - background-color: #ffffff; + background-color: #ffffff; } .blue-bg, .bg-success { - background-color: #1c84c6; - color: #ffffff; + background-color: #1c84c6; + color: #ffffff; } .navy-bg, .bg-primary { - background-color: #1ab394; - color: #ffffff; + background-color: #1ab394; + color: #ffffff; } .lazur-bg, .bg-info { - background-color: #23c6c8; - color: #ffffff; + background-color: #23c6c8; + color: #ffffff; } .yellow-bg, .bg-warning { - background-color: #f8ac59; - color: #ffffff; + background-color: #f8ac59; + color: #ffffff; } .red-bg, .bg-danger { - background-color: #ed5565; - color: #ffffff; + background-color: #ed5565; + color: #ffffff; } .black-bg { - background-color: #262626; + background-color: #262626; } .panel-primary { - border-color: #1ab394; + border-color: #1ab394; } .panel-primary > .panel-heading { - background-color: #1ab394; - border-color: #1ab394; + background-color: #1ab394; + border-color: #1ab394; } .panel-success { - border-color: #1c84c6; + border-color: #1c84c6; } .panel-success > .panel-heading { - background-color: #1c84c6; - border-color: #1c84c6; - color: #ffffff; + background-color: #1c84c6; + border-color: #1c84c6; + color: #ffffff; } .panel-info { - border-color: #23c6c8; + border-color: #23c6c8; } .panel-info > .panel-heading { - background-color: #23c6c8; - border-color: #23c6c8; - color: #ffffff; + background-color: #23c6c8; + border-color: #23c6c8; + color: #ffffff; } .panel-warning { - border-color: #f8ac59; + border-color: #f8ac59; } .panel-warning > .panel-heading { - background-color: #f8ac59; - border-color: #f8ac59; - color: #ffffff; + background-color: #f8ac59; + border-color: #f8ac59; + color: #ffffff; } .panel-danger { - border-color: #ed5565; + border-color: #ed5565; } .panel-danger > .panel-heading { - background-color: #ed5565; - border-color: #ed5565; - color: #ffffff; + background-color: #ed5565; + border-color: #ed5565; + color: #ffffff; } .progress-bar { - background-color: #1ab394; + background-color: #1ab394; } .progress-small, .progress-small .progress-bar { - height: 10px; + height: 10px; } .progress-small, .progress-mini { - margin-top: 5px; + margin-top: 5px; } .progress-mini, .progress-mini .progress-bar { - height: 5px; - margin-bottom: 0; + height: 5px; + margin-bottom: 0; } .progress-bar-navy-light { - background-color: #3dc7ab; + background-color: #3dc7ab; } .progress-bar-success { - background-color: #1c84c6; + background-color: #1c84c6; } .progress-bar-info { - background-color: #23c6c8; + background-color: #23c6c8; } .progress-bar-warning { - background-color: #f8ac59; + background-color: #f8ac59; } .progress-bar-danger { - background-color: #ed5565; + background-color: #ed5565; } .panel-title { - font-size: inherit; + font-size: inherit; } .jumbotron { - border-radius: 6px; - padding: 40px; + border-radius: 6px; + padding: 40px; } .jumbotron h1 { - margin-top: 0; + margin-top: 0; } /* COLORS */ .text-navy { - color: #1ab394; + color: #1ab394; } .text-primary { - color: inherit; + color: inherit; } .text-success { - color: #1c84c6; + color: #1c84c6; } .text-info { - color: #23c6c8; + color: #23c6c8; } .text-warning { - color: #f8ac59; + color: #f8ac59; } .text-danger { - color: #ed5565; + color: #ed5565; } .text-muted { - color: #888888; + color: #888888; } .text-white { - color: #ffffff; + color: #ffffff; } .simple_tag { - background-color: #f3f3f4; - border: 1px solid #e7eaec; - border-radius: 2px; - color: inherit; - font-size: 10px; - margin-right: 5px; - margin-top: 5px; - padding: 5px 12px; - display: inline-block; + background-color: #f3f3f4; + border: 1px solid #e7eaec; + border-radius: 2px; + color: inherit; + font-size: 10px; + margin-right: 5px; + margin-top: 5px; + padding: 5px 12px; + display: inline-block; } .img-shadow { - -webkit-box-shadow: 0 0 3px 0 #919191; - -moz-box-shadow: 0 0 3px 0 #919191; - box-shadow: 0 0 3px 0 #919191; + -webkit-box-shadow: 0 0 3px 0 #919191; + -moz-box-shadow: 0 0 3px 0 #919191; + box-shadow: 0 0 3px 0 #919191; } /* For handle diferent bg color in AngularJS version */ .dashboards\.dashboard_2 nav.navbar, @@ -4193,7 +4204,7 @@ table.table-mail tr td { .metrics nav.navbar, .metrics\.index nav.navbar, .dashboards\.dashboard_5 nav.navbar { - background: #fff; + background: #fff; } /* For handle diferent bg color in MVC version */ .Dashboard_2 .navbar.navbar-static-top, @@ -4204,1622 +4215,1622 @@ table.table-mail tr td { .Inbox .navbar.navbar-static-top, .Metrics .navbar.navbar-static-top, .Dashboard_5 .navbar.navbar-static-top { - background: #fff; + background: #fff; } a.close-canvas-menu { - position: absolute; - top: 10px; - right: 15px; - z-index: 1011; - color: #a7b1c2; + position: absolute; + top: 10px; + right: 15px; + z-index: 1011; + color: #a7b1c2; } a.close-canvas-menu:hover { - color: #fff; + color: #fff; } .close-canvas-menu { - display: none; + display: none; } .canvas-menu .close-canvas-menu { - display: block; + display: block; } .light-navbar .navbar.navbar-static-top { - background-color: #ffffff; + background-color: #ffffff; } /* FULL HEIGHT */ .full-height { - height: 100%; + height: 100%; } .fh-breadcrumb { - height: calc(100% - 196px); - margin: 0 -15px; - position: relative; + height: calc(100% - 196px); + margin: 0 -15px; + position: relative; } .fh-no-breadcrumb { - height: calc(100% - 99px); - margin: 0 -15px; - position: relative; + height: calc(100% - 99px); + margin: 0 -15px; + position: relative; } .fh-column { - background: #fff; - height: 100%; - width: 240px; - float: left; + background: #fff; + height: 100%; + width: 240px; + float: left; } .modal-backdrop { - z-index: 2040 !important; + z-index: 2040 !important; } .modal { - z-index: 2050 !important; + z-index: 2050 !important; } .spiner-example { - height: 200px; - padding-top: 70px; + height: 200px; + padding-top: 70px; } /* MARGINS & PADDINGS */ .p-xxs { - padding: 5px; + padding: 5px; } .p-xs { - padding: 10px; + padding: 10px; } .p-sm { - padding: 15px; + padding: 15px; } .p-m { - padding: 20px; + padding: 20px; } .p-md { - padding: 25px; + padding: 25px; } .p-lg { - padding: 30px; + padding: 30px; } .p-xl { - padding: 40px; + padding: 40px; } .p-w-xs { - padding: 0 10px; + padding: 0 10px; } .p-w-sm { - padding: 0 15px; + padding: 0 15px; } .p-w-m { - padding: 0 20px; + padding: 0 20px; } .p-w-md { - padding: 0 25px; + padding: 0 25px; } .p-w-lg { - padding: 0 30px; + padding: 0 30px; } .p-w-xl { - padding: 0 40px; + padding: 0 40px; } .p-h-xs { - padding: 10px 0; + padding: 10px 0; } .p-h-sm { - padding: 15px 0; + padding: 15px 0; } .p-h-m { - padding: 20px 0; + padding: 20px 0; } .p-h-md { - padding: 25px 0; + padding: 25px 0; } .p-h-lg { - padding: 30px 0; + padding: 30px 0; } .p-h-xl { - padding: 40px 0; + padding: 40px 0; } .m-xxs { - margin: 2px 4px; + margin: 2px 4px; } .m { - margin: 15px; + margin: 15px; } .m-xs { - margin: 5px; + margin: 5px; } .m-sm { - margin: 10px; + margin: 10px; } .m-md { - margin: 20px; + margin: 20px; } .m-lg { - margin: 30px; + margin: 30px; } .m-xl { - margin: 50px; + margin: 50px; } .m-n { - margin: 0 !important; + margin: 0 !important; } .m-l-none { - margin-left: 0; + margin-left: 0; } .m-l-xs { - margin-left: 5px; + margin-left: 5px; } .m-l-sm { - margin-left: 10px; + margin-left: 10px; } .m-l { - margin-left: 15px; + margin-left: 15px; } .m-l-md { - margin-left: 20px; + margin-left: 20px; } .m-l-lg { - margin-left: 30px; + margin-left: 30px; } .m-l-xl { - margin-left: 40px; + margin-left: 40px; } .m-l-n-xxs { - margin-left: -1px; + margin-left: -1px; } .m-l-n-xs { - margin-left: -5px; + margin-left: -5px; } .m-l-n-sm { - margin-left: -10px; + margin-left: -10px; } .m-l-n { - margin-left: -15px; + margin-left: -15px; } .m-l-n-md { - margin-left: -20px; + margin-left: -20px; } .m-l-n-lg { - margin-left: -30px; + margin-left: -30px; } .m-l-n-xl { - margin-left: -40px; + margin-left: -40px; } .m-t-none { - margin-top: 0; + margin-top: 0; } .m-t-xxs { - margin-top: 1px; + margin-top: 1px; } .m-t-xs { - margin-top: 5px; + margin-top: 5px; } .m-t-sm { - margin-top: 10px; + margin-top: 10px; } .m-t { - margin-top: 15px; + margin-top: 15px; } .m-t-md { - margin-top: 20px; + margin-top: 20px; } .m-t-lg { - margin-top: 30px; + margin-top: 30px; } .m-t-xl { - margin-top: 40px; + margin-top: 40px; } .m-t-n-xxs { - margin-top: -1px; + margin-top: -1px; } .m-t-n-xs { - margin-top: -5px; + margin-top: -5px; } .m-t-n-sm { - margin-top: -10px; + margin-top: -10px; } .m-t-n { - margin-top: -15px; + margin-top: -15px; } .m-t-n-md { - margin-top: -20px; + margin-top: -20px; } .m-t-n-lg { - margin-top: -30px; + margin-top: -30px; } .m-t-n-xl { - margin-top: -40px; + margin-top: -40px; } .m-r-none { - margin-right: 0; + margin-right: 0; } .m-r-xxs { - margin-right: 1px; + margin-right: 1px; } .m-r-xs { - margin-right: 5px; + margin-right: 5px; } .m-r-sm { - margin-right: 10px; + margin-right: 10px; } .m-r { - margin-right: 15px; + margin-right: 15px; } .m-r-md { - margin-right: 20px; + margin-right: 20px; } .m-r-lg { - margin-right: 30px; + margin-right: 30px; } .m-r-xl { - margin-right: 40px; + margin-right: 40px; } .m-r-n-xxs { - margin-right: -1px; + margin-right: -1px; } .m-r-n-xs { - margin-right: -5px; + margin-right: -5px; } .m-r-n-sm { - margin-right: -10px; + margin-right: -10px; } .m-r-n { - margin-right: -15px; + margin-right: -15px; } .m-r-n-md { - margin-right: -20px; + margin-right: -20px; } .m-r-n-lg { - margin-right: -30px; + margin-right: -30px; } .m-r-n-xl { - margin-right: -40px; + margin-right: -40px; } .m-b-none { - margin-bottom: 0; + margin-bottom: 0; } .m-b-xxs { - margin-bottom: 1px; + margin-bottom: 1px; } .m-b-xs { - margin-bottom: 5px; + margin-bottom: 5px; } .m-b-sm { - margin-bottom: 10px; + margin-bottom: 10px; } .m-b { - margin-bottom: 15px; + margin-bottom: 15px; } .m-b-md { - margin-bottom: 20px; + margin-bottom: 20px; } .m-b-lg { - margin-bottom: 30px; + margin-bottom: 30px; } .m-b-xl { - margin-bottom: 40px; + margin-bottom: 40px; } .m-b-n-xxs { - margin-bottom: -1px; + margin-bottom: -1px; } .m-b-n-xs { - margin-bottom: -5px; + margin-bottom: -5px; } .m-b-n-sm { - margin-bottom: -10px; + margin-bottom: -10px; } .m-b-n { - margin-bottom: -15px; + margin-bottom: -15px; } .m-b-n-md { - margin-bottom: -20px; + margin-bottom: -20px; } .m-b-n-lg { - margin-bottom: -30px; + margin-bottom: -30px; } .m-b-n-xl { - margin-bottom: -40px; + margin-bottom: -40px; } .space-15 { - margin: 15px 0; + margin: 15px 0; } .space-20 { - margin: 20px 0; + margin: 20px 0; } .space-25 { - margin: 25px 0; + margin: 25px 0; } .space-30 { - margin: 30px 0; + margin: 30px 0; } .img-sm { - width: 32px; - height: 32px; + width: 32px; + height: 32px; } .img-md { - width: 64px; - height: 64px; + width: 64px; + height: 64px; } .img-lg { - width: 96px; - height: 96px; + width: 96px; + height: 96px; } .b-r-xs { - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; } .b-r-sm { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; } .b-r-md { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; } .b-r-lg { - -webkit-border-radius: 12px; - -moz-border-radius: 12px; - border-radius: 12px; + -webkit-border-radius: 12px; + -moz-border-radius: 12px; + border-radius: 12px; } .b-r-xl { - -webkit-border-radius: 24px; - -moz-border-radius: 24px; - border-radius: 24px; + -webkit-border-radius: 24px; + -moz-border-radius: 24px; + border-radius: 24px; } .fullscreen-ibox-mode .animated { - animation: none; + animation: none; } body.fullscreen-ibox-mode { - overflow-y: hidden; + overflow-y: hidden; } .ibox.fullscreen { - z-index: 2030; - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - overflow: auto; - margin-bottom: 0; + z-index: 2030; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: auto; + margin-bottom: 0; } .ibox.fullscreen .collapse-link { - display: none; + display: none; } .ibox.fullscreen .ibox-content { - min-height: calc(100% - 48px); + min-height: calc(100% - 48px); } body.modal-open { - padding-right: inherit !important; + padding-right: inherit !important; } body.modal-open .wrapper-content.animated { - -webkit-animation: none; - -ms-animation-nam: none; - animation: none; + -webkit-animation: none; + -ms-animation-nam: none; + animation: none; } body.modal-open .animated { - animation-fill-mode: initial; - z-index: inherit; + animation-fill-mode: initial; + z-index: inherit; } /* Show profile dropdown on fixed sidebar */ body.mini-navbar.fixed-sidebar .profile-element, .block { - display: block !important; + display: block !important; } body.mini-navbar.fixed-sidebar .nav-header { - padding: 33px 25px; + padding: 33px 25px; } body.mini-navbar.fixed-sidebar .logo-element { - display: none; + display: none; } .fullscreen-video .animated { - animation: none; + animation: none; } /* SEARCH PAGE */ .search-form { - margin-top: 10px; + margin-top: 10px; } .search-result h3 { - margin-bottom: 0; - color: #1E0FBE; + margin-bottom: 0; + color: #1e0fbe; } .search-result .search-link { - color: #006621; + color: #006621; } .search-result p { - font-size: 12px; - margin-top: 5px; + font-size: 12px; + margin-top: 5px; } /* CONTACTS */ .contact-box { - background-color: #ffffff; - border: 1px solid #e7eaec; - padding: 20px; - margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid #e7eaec; + padding: 20px; + margin-bottom: 20px; } .contact-box > a { - color: inherit; + color: inherit; } .contact-box.center-version { - border: 1px solid #e7eaec; - padding: 0; + border: 1px solid #e7eaec; + padding: 0; } .contact-box.center-version > a { - display: block; - background-color: #ffffff; - padding: 20px; - text-align: center; + display: block; + background-color: #ffffff; + padding: 20px; + text-align: center; } .contact-box.center-version > a img { - width: 80px; - height: 80px; - margin-top: 10px; - margin-bottom: 10px; + width: 80px; + height: 80px; + margin-top: 10px; + margin-bottom: 10px; } .contact-box.center-version address { - margin-bottom: 0; + margin-bottom: 0; } .contact-box .contact-box-footer { - text-align: center; - background-color: #ffffff; - border-top: 1px solid #e7eaec; - padding: 15px 20px; + text-align: center; + background-color: #ffffff; + border-top: 1px solid #e7eaec; + padding: 15px 20px; } /* INVOICE */ .invoice-table tbody > tr > td:last-child, .invoice-table tbody > tr > td:nth-child(4), .invoice-table tbody > tr > td:nth-child(3), .invoice-table tbody > tr > td:nth-child(2) { - text-align: right; + text-align: right; } .invoice-table thead > tr > th:last-child, .invoice-table thead > tr > th:nth-child(4), .invoice-table thead > tr > th:nth-child(3), .invoice-table thead > tr > th:nth-child(2) { - text-align: right; + text-align: right; } .invoice-total > tbody > tr > td:first-child { - text-align: right; + text-align: right; } .invoice-total > tbody > tr > td { - border: 0 none; + border: 0 none; } .invoice-total > tbody > tr > td:last-child { - border-bottom: 1px solid #DDDDDD; - text-align: right; - width: 15%; + border-bottom: 1px solid #dddddd; + text-align: right; + width: 15%; } /* ERROR & LOGIN & LOCKSCREEN*/ .middle-box { - max-width: 400px; - z-index: 100; - margin: 0 auto; - padding-top: 40px; + max-width: 400px; + z-index: 100; + margin: 0 auto; + padding-top: 40px; } .lockscreen.middle-box { - width: 200px; - padding-top: 110px; + width: 200px; + padding-top: 110px; } .loginscreen.middle-box { - width: 300px; + width: 300px; } .loginColumns { - max-width: 800px; - margin: 0 auto; - padding: 100px 20px 20px 20px; + max-width: 800px; + margin: 0 auto; + padding: 100px 20px 20px 20px; } .passwordBox { - max-width: 460px; - margin: 0 auto; - padding: 100px 20px 20px 20px; + max-width: 460px; + margin: 0 auto; + padding: 100px 20px 20px 20px; } .logo-name { - color: #e6e6e6; - font-size: 180px; - font-weight: 800; - letter-spacing: -10px; - margin-bottom: 0; + color: #e6e6e6; + font-size: 180px; + font-weight: 800; + letter-spacing: -10px; + margin-bottom: 0; } .middle-box h1 { - font-size: 170px; + font-size: 170px; } .wrapper .middle-box { - margin-top: 140px; + margin-top: 140px; } .lock-word { - z-index: 10; - position: absolute; - top: 110px; - left: 50%; - margin-left: -470px; + z-index: 10; + position: absolute; + top: 110px; + left: 50%; + margin-left: -470px; } .lock-word span { - font-size: 100px; - font-weight: 600; - color: #e9e9e9; - display: inline-block; + font-size: 100px; + font-weight: 600; + color: #e9e9e9; + display: inline-block; } .lock-word .first-word { - margin-right: 160px; + margin-right: 160px; } /* DASBOARD */ .dashboard-header { - border-top: 0; - padding: 20px 20px 20px 20px; + border-top: 0; + padding: 20px 20px 20px 20px; } .dashboard-header h2 { - margin-top: 10px; - font-size: 26px; + margin-top: 10px; + font-size: 26px; } .fist-item { - border-top: none !important; + border-top: none !important; } .statistic-box { - margin-top: 40px; + margin-top: 40px; } .dashboard-header .list-group-item span.label { - margin-right: 10px; + margin-right: 10px; } .list-group.clear-list .list-group-item { - border-top: 1px solid #e7eaec; - border-bottom: 0; - border-right: 0; - border-left: 0; - padding: 10px 0; + border-top: 1px solid #e7eaec; + border-bottom: 0; + border-right: 0; + border-left: 0; + padding: 10px 0; } ul.clear-list:first-child { - border-top: none !important; + border-top: none !important; } /* Intimeline */ .timeline-item .date i { - position: absolute; - top: 0; - right: 0; - padding: 5px; - width: 30px; - text-align: center; - border-top: 1px solid #e7eaec; - border-bottom: 1px solid #e7eaec; - border-left: 1px solid #e7eaec; - background: #f8f8f8; + position: absolute; + top: 0; + right: 0; + padding: 5px; + width: 30px; + text-align: center; + border-top: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; + border-left: 1px solid #e7eaec; + background: #f8f8f8; } .timeline-item .date { - text-align: right; - width: 110px; - position: relative; - padding-top: 30px; + text-align: right; + width: 110px; + position: relative; + padding-top: 30px; } .timeline-item .content { - border-left: 1px solid #e7eaec; - border-top: 1px solid #e7eaec; - padding-top: 10px; - min-height: 100px; + border-left: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + padding-top: 10px; + min-height: 100px; } .timeline-item .content:hover { - background: #f6f6f6; + background: #f6f6f6; } /* PIN BOARD */ ul.notes li, ul.tag-list li { - list-style: none; + list-style: none; } ul.notes li h4 { - margin-top: 20px; - font-size: 16px; + margin-top: 20px; + font-size: 16px; } ul.notes li div { - text-decoration: none; - color: #000; - background: #ffc; - display: block; - height: 140px; - width: 140px; - padding: 1em; - position: relative; + text-decoration: none; + color: #000; + background: #ffc; + display: block; + height: 140px; + width: 140px; + padding: 1em; + position: relative; } ul.notes li div small { - position: absolute; - top: 5px; - right: 5px; - font-size: 10px; + position: absolute; + top: 5px; + right: 5px; + font-size: 10px; } ul.notes li div a { - position: absolute; - right: 10px; - bottom: 10px; - color: inherit; + position: absolute; + right: 10px; + bottom: 10px; + color: inherit; } ul.notes li { - margin: 10px 40px 50px 0; - float: left; + margin: 10px 40px 50px 0; + float: left; } ul.notes li div p { - font-size: 12px; + font-size: 12px; } ul.notes li div { - text-decoration: none; - color: #000; - background: #ffc; - display: block; - height: 140px; - width: 140px; - padding: 1em; - /* Firefox */ - -moz-box-shadow: 5px 5px 2px #212121; - /* Safari+Chrome */ - -webkit-box-shadow: 5px 5px 2px rgba(33, 33, 33, 0.7); - /* Opera */ - box-shadow: 5px 5px 2px rgba(33, 33, 33, 0.7); + text-decoration: none; + color: #000; + background: #ffc; + display: block; + height: 140px; + width: 140px; + padding: 1em; + /* Firefox */ + -moz-box-shadow: 5px 5px 2px #212121; + /* Safari+Chrome */ + -webkit-box-shadow: 5px 5px 2px rgba(33, 33, 33, 0.7); + /* Opera */ + box-shadow: 5px 5px 2px rgba(33, 33, 33, 0.7); } ul.notes li div { - -webkit-transform: rotate(-6deg); - -o-transform: rotate(-6deg); - -moz-transform: rotate(-6deg); - -ms-transform: rotate(-6deg); + -webkit-transform: rotate(-6deg); + -o-transform: rotate(-6deg); + -moz-transform: rotate(-6deg); + -ms-transform: rotate(-6deg); } ul.notes li:nth-child(even) div { - -o-transform: rotate(4deg); - -webkit-transform: rotate(4deg); - -moz-transform: rotate(4deg); - -ms-transform: rotate(4deg); - position: relative; - top: 5px; + -o-transform: rotate(4deg); + -webkit-transform: rotate(4deg); + -moz-transform: rotate(4deg); + -ms-transform: rotate(4deg); + position: relative; + top: 5px; } ul.notes li:nth-child(3n) div { - -o-transform: rotate(-3deg); - -webkit-transform: rotate(-3deg); - -moz-transform: rotate(-3deg); - -ms-transform: rotate(-3deg); - position: relative; - top: -5px; + -o-transform: rotate(-3deg); + -webkit-transform: rotate(-3deg); + -moz-transform: rotate(-3deg); + -ms-transform: rotate(-3deg); + position: relative; + top: -5px; } ul.notes li:nth-child(5n) div { - -o-transform: rotate(5deg); - -webkit-transform: rotate(5deg); - -moz-transform: rotate(5deg); - -ms-transform: rotate(5deg); - position: relative; - top: -10px; + -o-transform: rotate(5deg); + -webkit-transform: rotate(5deg); + -moz-transform: rotate(5deg); + -ms-transform: rotate(5deg); + position: relative; + top: -10px; } ul.notes li div:hover, ul.notes li div:focus { - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - -o-transform: scale(1.1); - -ms-transform: scale(1.1); - position: relative; - z-index: 5; + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -o-transform: scale(1.1); + -ms-transform: scale(1.1); + position: relative; + z-index: 5; } ul.notes li div { - text-decoration: none; - color: #000; - background: #ffc; - display: block; - height: 210px; - width: 210px; - padding: 1em; - -moz-box-shadow: 5px 5px 7px #212121; - -webkit-box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7); - box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7); - -moz-transition: -moz-transform 0.15s linear; - -o-transition: -o-transform 0.15s linear; - -webkit-transition: -webkit-transform 0.15s linear; + text-decoration: none; + color: #000; + background: #ffc; + display: block; + height: 210px; + width: 210px; + padding: 1em; + -moz-box-shadow: 5px 5px 7px #212121; + -webkit-box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7); + box-shadow: 5px 5px 7px rgba(33, 33, 33, 0.7); + -moz-transition: -moz-transform 0.15s linear; + -o-transition: -o-transform 0.15s linear; + -webkit-transition: -webkit-transform 0.15s linear; } /* FILE MANAGER */ .file-box { - float: left; - width: 220px; + float: left; + width: 220px; } .file-manager h5 { - text-transform: uppercase; + text-transform: uppercase; } .file-manager { - list-style: none outside none; - margin: 0; - padding: 0; + list-style: none outside none; + margin: 0; + padding: 0; } .folder-list li a { - color: #666666; - display: block; - padding: 5px 0; + color: #666666; + display: block; + padding: 5px 0; } .folder-list li { - border-bottom: 1px solid #e7eaec; - display: block; + border-bottom: 1px solid #e7eaec; + display: block; } .folder-list li i { - margin-right: 8px; - color: #3d4d5d; + margin-right: 8px; + color: #3d4d5d; } .category-list li a { - color: #666666; - display: block; - padding: 5px 0; + color: #666666; + display: block; + padding: 5px 0; } .category-list li { - display: block; + display: block; } .category-list li i { - margin-right: 8px; - color: #3d4d5d; + margin-right: 8px; + color: #3d4d5d; } .category-list li a .text-navy { - color: #1ab394; + color: #1ab394; } .category-list li a .text-primary { - color: #1c84c6; + color: #1c84c6; } .category-list li a .text-info { - color: #23c6c8; + color: #23c6c8; } .category-list li a .text-danger { - color: #EF5352; + color: #ef5352; } .category-list li a .text-warning { - color: #F8AC59; + color: #f8ac59; } .file-manager h5.tag-title { - margin-top: 20px; + margin-top: 20px; } .tag-list li { - float: left; + float: left; } .tag-list li a { - font-size: 10px; - background-color: #f3f3f4; - padding: 5px 12px; - color: inherit; - border-radius: 2px; - border: 1px solid #e7eaec; - margin-right: 5px; - margin-top: 5px; - display: block; + font-size: 10px; + background-color: #f3f3f4; + padding: 5px 12px; + color: inherit; + border-radius: 2px; + border: 1px solid #e7eaec; + margin-right: 5px; + margin-top: 5px; + display: block; } .file { - border: 1px solid #e7eaec; - padding: 0; - background-color: #ffffff; - position: relative; - margin-bottom: 20px; - margin-right: 20px; + border: 1px solid #e7eaec; + padding: 0; + background-color: #ffffff; + position: relative; + margin-bottom: 20px; + margin-right: 20px; } .file-manager .hr-line-dashed { - margin: 15px 0; + margin: 15px 0; } .file .icon, .file .image { - height: 100px; - overflow: hidden; + height: 100px; + overflow: hidden; } .file .icon { - padding: 15px 10px; - text-align: center; + padding: 15px 10px; + text-align: center; } .file-control { - color: inherit; - font-size: 11px; - margin-right: 10px; + color: inherit; + font-size: 11px; + margin-right: 10px; } .file-control.active { - text-decoration: underline; + text-decoration: underline; } .file .icon i { - font-size: 70px; - color: #dadada; + font-size: 70px; + color: #dadada; } .file .file-name { - padding: 10px; - background-color: #f8f8f8; - border-top: 1px solid #e7eaec; + padding: 10px; + background-color: #f8f8f8; + border-top: 1px solid #e7eaec; } .file-name small { - color: #676a6c; + color: #676a6c; } .corner { - position: absolute; - display: inline-block; - width: 0; - height: 0; - line-height: 0; - border: 0.6em solid transparent; - border-right: 0.6em solid #f1f1f1; - border-bottom: 0.6em solid #f1f1f1; - right: 0em; - bottom: 0em; + position: absolute; + display: inline-block; + width: 0; + height: 0; + line-height: 0; + border: 0.6em solid transparent; + border-right: 0.6em solid #f1f1f1; + border-bottom: 0.6em solid #f1f1f1; + right: 0em; + bottom: 0em; } a.compose-mail { - padding: 8px 10px; + padding: 8px 10px; } .mail-search { - max-width: 300px; + max-width: 300px; } /* PROFILE */ .profile-content { - border-top: none !important; + border-top: none !important; } .profile-stats { - margin-right: 10px; + margin-right: 10px; } .profile-image { - width: 120px; - float: left; + width: 120px; + float: left; } .profile-image img { - width: 96px; - height: 96px; + width: 96px; + height: 96px; } .profile-info { - margin-left: 120px; + margin-left: 120px; } .feed-activity-list .feed-element { - border-bottom: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; } .feed-element:first-child { - margin-top: 0; + margin-top: 0; } .feed-element { - padding-bottom: 15px; + padding-bottom: 15px; } .feed-element, .feed-element .media { - margin-top: 15px; + margin-top: 15px; } .feed-element, .media-body { - overflow: hidden; + overflow: hidden; } .feed-element > .pull-left { - margin-right: 10px; + margin-right: 10px; } .feed-element img.img-circle, .dropdown-messages-box img.img-circle { - width: 38px; - height: 38px; + width: 38px; + height: 38px; } .feed-element .well { - border: 1px solid #e7eaec; - box-shadow: none; - margin-top: 10px; - margin-bottom: 5px; - padding: 10px 20px; - font-size: 11px; - line-height: 16px; + border: 1px solid #e7eaec; + box-shadow: none; + margin-top: 10px; + margin-bottom: 5px; + padding: 10px 20px; + font-size: 11px; + line-height: 16px; } .feed-element .actions { - margin-top: 10px; + margin-top: 10px; } .feed-element .photos { - margin: 10px 0; + margin: 10px 0; } .feed-photo { - max-height: 180px; - border-radius: 4px; - overflow: hidden; - margin-right: 10px; - margin-bottom: 10px; + max-height: 180px; + border-radius: 4px; + overflow: hidden; + margin-right: 10px; + margin-bottom: 10px; } .file-list li { - padding: 5px 10px; - font-size: 11px; - border-radius: 2px; - border: 1px solid #e7eaec; - margin-bottom: 5px; + padding: 5px 10px; + font-size: 11px; + border-radius: 2px; + border: 1px solid #e7eaec; + margin-bottom: 5px; } .file-list li a { - color: inherit; + color: inherit; } .file-list li a:hover { - color: #1ab394; + color: #1ab394; } .user-friends img { - width: 42px; - height: 42px; - margin-bottom: 5px; - margin-right: 5px; + width: 42px; + height: 42px; + margin-bottom: 5px; + margin-right: 5px; } /* MAILBOX */ .mail-box { - background-color: #ffffff; - border: 1px solid #e7eaec; - border-top: 0; - padding: 0; - margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid #e7eaec; + border-top: 0; + padding: 0; + margin-bottom: 20px; } .mail-box-header { - background-color: #ffffff; - border: 1px solid #e7eaec; - border-bottom: 0; - padding: 30px 20px 20px 20px; + background-color: #ffffff; + border: 1px solid #e7eaec; + border-bottom: 0; + padding: 30px 20px 20px 20px; } .mail-box-header h2 { - margin-top: 0; + margin-top: 0; } .mailbox-content .tag-list li a { - background: #ffffff; + background: #ffffff; } .mail-body { - border-top: 1px solid #e7eaec; - padding: 20px; + border-top: 1px solid #e7eaec; + padding: 20px; } .mail-text { - border-top: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; } .mail-text .note-toolbar { - padding: 10px 15px; + padding: 10px 15px; } .mail-body .form-group { - margin-bottom: 5px; + margin-bottom: 5px; } .mail-text .note-editor .note-toolbar { - background-color: #F9F8F8; + background-color: #f9f8f8; } .mail-attachment { - border-top: 1px solid #e7eaec; - padding: 20px; - font-size: 12px; + border-top: 1px solid #e7eaec; + padding: 20px; + font-size: 12px; } .mailbox-content { - background: none; - border: none; - padding: 10px; + background: none; + border: none; + padding: 10px; } .mail-ontact { - width: 23%; + width: 23%; } /* PROJECTS */ .project-people, .project-actions { - text-align: right; - vertical-align: middle; + text-align: right; + vertical-align: middle; } dd.project-people { - text-align: left; - margin-top: 5px; + text-align: left; + margin-top: 5px; } .project-people img { - width: 32px; - height: 32px; + width: 32px; + height: 32px; } .project-title a { - font-size: 14px; - color: #676a6c; - font-weight: 600; + font-size: 14px; + color: #676a6c; + font-weight: 600; } .project-list table tr td { - border-top: none; - border-bottom: 1px solid #e7eaec; - padding: 15px 10px; - vertical-align: middle; + border-top: none; + border-bottom: 1px solid #e7eaec; + padding: 15px 10px; + vertical-align: middle; } .project-manager .tag-list li a { - font-size: 10px; - background-color: white; - padding: 5px 12px; - color: inherit; - border-radius: 2px; - border: 1px solid #e7eaec; - margin-right: 5px; - margin-top: 5px; - display: block; + font-size: 10px; + background-color: white; + padding: 5px 12px; + color: inherit; + border-radius: 2px; + border: 1px solid #e7eaec; + margin-right: 5px; + margin-top: 5px; + display: block; } .project-files li a { - font-size: 11px; - color: #676a6c; - margin-left: 10px; - line-height: 22px; + font-size: 11px; + color: #676a6c; + margin-left: 10px; + line-height: 22px; } /* FAQ */ .faq-item { - padding: 20px; - margin-bottom: 2px; - background: #fff; + padding: 20px; + margin-bottom: 2px; + background: #fff; } .faq-question { - font-size: 18px; - font-weight: 600; - color: #1ab394; - display: block; + font-size: 18px; + font-weight: 600; + color: #1ab394; + display: block; } .faq-question:hover { - color: #179d82; + color: #179d82; } .faq-answer { - margin-top: 10px; - background: #f3f3f4; - border: 1px solid #e7eaec; - border-radius: 3px; - padding: 15px; + margin-top: 10px; + background: #f3f3f4; + border: 1px solid #e7eaec; + border-radius: 3px; + padding: 15px; } .faq-item .tag-item { - background: #f3f3f4; - padding: 2px 6px; - font-size: 10px; - text-transform: uppercase; + background: #f3f3f4; + padding: 2px 6px; + font-size: 10px; + text-transform: uppercase; } /* Chat view */ .message-input { - height: 90px !important; + height: 90px !important; } .chat-avatar { - width: 36px; - height: 36px; - float: left; - margin-right: 10px; + width: 36px; + height: 36px; + float: left; + margin-right: 10px; } .chat-user-name { - padding: 10px; + padding: 10px; } .chat-user { - padding: 8px 10px; - border-bottom: 1px solid #e7eaec; + padding: 8px 10px; + border-bottom: 1px solid #e7eaec; } .chat-user a { - color: inherit; + color: inherit; } .chat-view { - z-index: 20012; + z-index: 20012; } .chat-users, .chat-statistic { - margin-left: -30px; + margin-left: -30px; } @media (max-width: 992px) { - .chat-users, - .chat-statistic { - margin-left: 0; - } + .chat-users, + .chat-statistic { + margin-left: 0; + } } .chat-view .ibox-content { - padding: 0; + padding: 0; } .chat-message { - padding: 10px 20px; + padding: 10px 20px; } .message-avatar { - height: 48px; - width: 48px; - border: 1px solid #e7eaec; - border-radius: 4px; - margin-top: 1px; + height: 48px; + width: 48px; + border: 1px solid #e7eaec; + border-radius: 4px; + margin-top: 1px; } .chat-discussion .chat-message.left .message-avatar { - float: left; - margin-right: 10px; + float: left; + margin-right: 10px; } .chat-discussion .chat-message.right .message-avatar { - float: right; - margin-left: 10px; + float: right; + margin-left: 10px; } .message { - background-color: #fff; - border: 1px solid #e7eaec; - text-align: left; - display: block; - padding: 10px 20px; - position: relative; - border-radius: 4px; + background-color: #fff; + border: 1px solid #e7eaec; + text-align: left; + display: block; + padding: 10px 20px; + position: relative; + border-radius: 4px; } .chat-discussion .chat-message.left .message-date { - float: right; + float: right; } .chat-discussion .chat-message.right .message-date { - float: left; + float: left; } .chat-discussion .chat-message.left .message { - text-align: left; - margin-left: 55px; + text-align: left; + margin-left: 55px; } .chat-discussion .chat-message.right .message { - text-align: right; - margin-right: 55px; + text-align: right; + margin-right: 55px; } .message-date { - font-size: 10px; - color: #888888; + font-size: 10px; + color: #888888; } .message-content { - display: block; + display: block; } .chat-discussion { - background: #eee; - padding: 15px; - height: 400px; - overflow-y: auto; + background: #eee; + padding: 15px; + height: 400px; + overflow-y: auto; } .chat-users { - overflow-y: auto; - height: 400px; + overflow-y: auto; + height: 400px; } .chat-message-form .form-group { - margin-bottom: 0; + margin-bottom: 0; } /* jsTree */ .jstree-open > .jstree-anchor > .fa-folder:before { - content: "\f07c"; + content: '\f07c'; } .jstree-default .jstree-icon.none { - width: 0; + width: 0; } /* CLIENTS */ .clients-list { - margin-top: 20px; + margin-top: 20px; } .clients-list .tab-pane { - position: relative; - height: 600px; + position: relative; + height: 600px; } .client-detail { - position: relative; - height: 620px; + position: relative; + height: 620px; } .clients-list table tr td { - height: 46px; - vertical-align: middle; - border: none; + height: 46px; + vertical-align: middle; + border: none; } .client-link { - font-weight: 600; - color: inherit; + font-weight: 600; + color: inherit; } .client-link:hover { - color: inherit; + color: inherit; } .client-avatar { - width: 42px; + width: 42px; } .client-avatar img { - width: 28px; - height: 28px; - border-radius: 50%; + width: 28px; + height: 28px; + border-radius: 50%; } .contact-type { - width: 20px; - color: #c1c3c4; + width: 20px; + color: #c1c3c4; } .client-status { - text-align: left; + text-align: left; } .client-detail .vertical-timeline-content p { - margin: 0; + margin: 0; } .client-detail .vertical-timeline-icon.gray-bg { - color: #a7aaab; + color: #a7aaab; } .clients-list .nav-tabs > li.active > a, .clients-list .nav-tabs > li.active > a:hover, .clients-list .nav-tabs > li.active > a:focus { - border-bottom: 1px solid #fff; + border-bottom: 1px solid #fff; } /* BLOG ARTICLE */ .blog h2 { - font-weight: 700; + font-weight: 700; } .blog h5 { - margin: 0 0 5px 0; + margin: 0 0 5px 0; } .blog .btn { - margin: 0 0 5px 0; + margin: 0 0 5px 0; } .article h1 { - font-size: 48px; - font-weight: 700; - color: #2F4050; + font-size: 48px; + font-weight: 700; + color: #2f4050; } .article p { - font-size: 15px; - line-height: 26px; + font-size: 15px; + line-height: 26px; } .article-title { - text-align: center; - margin: 40px 0 100px 0; + text-align: center; + margin: 40px 0 100px 0; } .article .ibox-content { - padding: 40px; + padding: 40px; } /* ISSUE TRACKER */ .issue-tracker .btn-link { - color: #1ab394; + color: #1ab394; } table.issue-tracker tbody tr td { - vertical-align: middle; - height: 50px; + vertical-align: middle; + height: 50px; } .issue-info { - width: 50%; + width: 50%; } .issue-info a { - font-weight: 600; - color: #676a6c; + font-weight: 600; + color: #676a6c; } .issue-info small { - display: block; + display: block; } /* TEAMS */ .team-members { - margin: 10px 0; + margin: 10px 0; } .team-members img.img-circle { - width: 42px; - height: 42px; - margin-bottom: 5px; + width: 42px; + height: 42px; + margin-bottom: 5px; } /* AGILE BOARD */ .sortable-list { - padding: 10px 0; + padding: 10px 0; } .agile-list { - list-style: none; - margin: 0; + list-style: none; + margin: 0; } .agile-list li { - background: #FAFAFB; - border: 1px solid #e7eaec; - margin: 0 0 10px 0; - padding: 10px; - border-radius: 2px; + background: #fafafb; + border: 1px solid #e7eaec; + margin: 0 0 10px 0; + padding: 10px; + border-radius: 2px; } .agile-list li:hover { - cursor: pointer; - background: #fff; + cursor: pointer; + background: #fff; } .agile-list li.warning-element { - border-left: 3px solid #f8ac59; + border-left: 3px solid #f8ac59; } .agile-list li.danger-element { - border-left: 3px solid #ed5565; + border-left: 3px solid #ed5565; } .agile-list li.info-element { - border-left: 3px solid #1c84c6; + border-left: 3px solid #1c84c6; } .agile-list li.success-element { - border-left: 3px solid #1ab394; + border-left: 3px solid #1ab394; } .agile-detail { - margin-top: 5px; - font-size: 12px; + margin-top: 5px; + font-size: 12px; } /* DIFF */ ins { - background-color: #c6ffc6; - text-decoration: none; + background-color: #c6ffc6; + text-decoration: none; } del { - background-color: #ffc6c6; + background-color: #ffc6c6; } /* E-commerce */ .product-box { - padding: 0; - border: 1px solid #e7eaec; + padding: 0; + border: 1px solid #e7eaec; } .product-box:hover, .product-box.active { - border: 1px solid transparent; - -webkit-box-shadow: 0 3px 7px 0 #a8a8a8; - -moz-box-shadow: 0 3px 7px 0 #a8a8a8; - box-shadow: 0 3px 7px 0 #a8a8a8; + border: 1px solid transparent; + -webkit-box-shadow: 0 3px 7px 0 #a8a8a8; + -moz-box-shadow: 0 3px 7px 0 #a8a8a8; + box-shadow: 0 3px 7px 0 #a8a8a8; } .product-imitation { - text-align: center; - padding: 90px 0; - background-color: #f8f8f9; - color: #bebec3; - font-weight: 600; + text-align: center; + padding: 90px 0; + background-color: #f8f8f9; + color: #bebec3; + font-weight: 600; } .cart-product-imitation { - text-align: center; - padding-top: 30px; - height: 80px; - width: 80px; - background-color: #f8f8f9; + text-align: center; + padding-top: 30px; + height: 80px; + width: 80px; + background-color: #f8f8f9; } .product-imitation.xl { - padding: 120px 0; + padding: 120px 0; } .product-desc { - padding: 20px; - position: relative; + padding: 20px; + position: relative; } .ecommerce .tag-list { - padding: 0; + padding: 0; } .ecommerce .fa-star { - color: #d1dade; + color: #d1dade; } .ecommerce .fa-star.active { - color: #f8ac59; + color: #f8ac59; } .ecommerce .note-editor { - border: 1px solid #e7eaec; + border: 1px solid #e7eaec; } table.shoping-cart-table { - margin-bottom: 0; + margin-bottom: 0; } table.shoping-cart-table tr td { - border: none; - text-align: right; + border: none; + text-align: right; } table.shoping-cart-table tr td.desc, table.shoping-cart-table tr td:first-child { - text-align: left; + text-align: left; } table.shoping-cart-table tr td:last-child { - width: 80px; + width: 80px; } .product-name { - font-size: 16px; - font-weight: 600; - color: #676a6c; - display: block; - margin: 2px 0 5px 0; + font-size: 16px; + font-weight: 600; + color: #676a6c; + display: block; + margin: 2px 0 5px 0; } .product-name:hover, .product-name:focus { - color: #1ab394; + color: #1ab394; } .product-price { - font-size: 14px; - font-weight: 600; - color: #ffffff; - background-color: #1ab394; - padding: 6px 12px; - position: absolute; - top: -32px; - right: 0; + font-size: 14px; + font-weight: 600; + color: #ffffff; + background-color: #1ab394; + padding: 6px 12px; + position: absolute; + top: -32px; + right: 0; } .product-detail .ibox-content { - padding: 30px 30px 50px 30px; + padding: 30px 30px 50px 30px; } .image-imitation { - background-color: #f8f8f9; - text-align: center; - padding: 200px 0; + background-color: #f8f8f9; + text-align: center; + padding: 200px 0; } .product-main-price small { - font-size: 10px; + font-size: 10px; } .product-images { - margin: 0 20px; + margin: 0 20px; } /* Social feed */ .social-feed-separated .social-feed-box { - margin-left: 62px; + margin-left: 62px; } .social-feed-separated .social-avatar { - float: left; - padding: 0; + float: left; + padding: 0; } .social-feed-separated .social-avatar img { - width: 52px; - height: 52px; - border: 1px solid #e7eaec; + width: 52px; + height: 52px; + border: 1px solid #e7eaec; } .social-feed-separated .social-feed-box .social-avatar { - padding: 15px 15px 0 15px; - float: none; + padding: 15px 15px 0 15px; + float: none; } .social-feed-box { - /*padding: 15px;*/ - border: 1px solid #e7eaec; - background: #fff; - margin-bottom: 15px; + /*padding: 15px;*/ + border: 1px solid #e7eaec; + background: #fff; + margin-bottom: 15px; } .article .social-feed-box { - margin-bottom: 0; - border-bottom: none; + margin-bottom: 0; + border-bottom: none; } .article .social-feed-box:last-child { - margin-bottom: 0; - border-bottom: 1px solid #e7eaec; + margin-bottom: 0; + border-bottom: 1px solid #e7eaec; } .article .social-feed-box p { - font-size: 13px; - line-height: 18px; + font-size: 13px; + line-height: 18px; } .social-action { - margin: 15px; + margin: 15px; } .social-avatar { - padding: 15px 15px 0 15px; + padding: 15px 15px 0 15px; } .social-comment .social-comment { - margin-left: 45px; + margin-left: 45px; } .social-avatar img { - height: 40px; - width: 40px; - margin-right: 10px; + height: 40px; + width: 40px; + margin-right: 10px; } .social-avatar .media-body a { - font-size: 14px; - display: block; + font-size: 14px; + display: block; } .social-body { - padding: 15px; + padding: 15px; } .social-body img { - margin-bottom: 10px; + margin-bottom: 10px; } .social-footer { - border-top: 1px solid #e7eaec; - padding: 10px 15px; - background: #f9f9f9; + border-top: 1px solid #e7eaec; + padding: 10px 15px; + background: #f9f9f9; } .social-footer .social-comment img { - width: 32px; - margin-right: 10px; + width: 32px; + margin-right: 10px; } .social-comment:first-child { - margin-top: 0; + margin-top: 0; } .social-comment { - margin-top: 15px; + margin-top: 15px; } .social-comment textarea { - font-size: 12px; + font-size: 12px; } /* Vote list */ .vote-item { - padding: 20px 25px; - background: #ffffff; - border-top: 1px solid #e7eaec; + padding: 20px 25px; + background: #ffffff; + border-top: 1px solid #e7eaec; } .vote-item:last-child { - border-bottom: 1px solid #e7eaec; + border-bottom: 1px solid #e7eaec; } .vote-item:hover { - background: #fbfbfb; + background: #fbfbfb; } .vote-actions { - float: left; - width: 30px; - margin-right: 15px; - text-align: center; + float: left; + width: 30px; + margin-right: 15px; + text-align: center; } .vote-actions a { - color: #1ab394; - font-weight: 600; + color: #1ab394; + font-weight: 600; } .vote-actions { - font-weight: 600; + font-weight: 600; } .vote-title { - display: block; - color: inherit; - font-size: 18px; - font-weight: 600; - margin-top: 5px; - margin-bottom: 2px; + display: block; + color: inherit; + font-size: 18px; + font-weight: 600; + margin-top: 5px; + margin-bottom: 2px; } .vote-title:hover, .vote-title:focus { - color: inherit; + color: inherit; } .vote-info, .vote-title { - margin-left: 45px; + margin-left: 45px; } .vote-info, .vote-info a { - color: #b4b6b8; - font-size: 12px; + color: #b4b6b8; + font-size: 12px; } .vote-info a { - margin-right: 10px; + margin-right: 10px; } .vote-info a:hover { - color: #1ab394; + color: #1ab394; } .vote-icon { - text-align: right; - font-size: 38px; - display: block; - color: #e8e9ea; + text-align: right; + font-size: 38px; + display: block; + color: #e8e9ea; } .vote-icon.active { - color: #1ab394; + color: #1ab394; } body.body-small .vote-icon { - display: none; + display: none; } .lightBoxGallery { - text-align: center; + text-align: center; } .lightBoxGallery img { - margin: 5px; + margin: 5px; } #small-chat { - position: fixed; - bottom: 20px; - right: 20px; - z-index: 100; + position: fixed; + bottom: 20px; + right: 20px; + z-index: 100; } #small-chat .badge { - position: absolute; - top: -3px; - right: -4px; + position: absolute; + top: -3px; + right: -4px; } .open-small-chat { - height: 38px; - width: 38px; - display: block; - background: #1ab394; - padding: 9px 8px; - text-align: center; - color: #fff; - border-radius: 50%; + height: 38px; + width: 38px; + display: block; + background: #1ab394; + padding: 9px 8px; + text-align: center; + color: #fff; + border-radius: 50%; } .open-small-chat:hover { - color: white; - background: #1ab394; + color: white; + background: #1ab394; } .small-chat-box { - display: none; - position: fixed; - bottom: 20px; - right: 75px; - background: #fff; - border: 1px solid #e7eaec; - width: 230px; - height: 320px; - border-radius: 4px; + display: none; + position: fixed; + bottom: 20px; + right: 75px; + background: #fff; + border: 1px solid #e7eaec; + width: 230px; + height: 320px; + border-radius: 4px; } .small-chat-box.ng-small-chat { - display: block; + display: block; } .body-small .small-chat-box { - bottom: 70px; - right: 20px; + bottom: 70px; + right: 20px; } .small-chat-box.active { - display: block; + display: block; } .small-chat-box .heading { - background: #2f4050; - padding: 8px 15px; - font-weight: bold; - color: #fff; + background: #2f4050; + padding: 8px 15px; + font-weight: bold; + color: #fff; } .small-chat-box .chat-date { - opacity: 0.6; - font-size: 10px; - font-weight: normal; + opacity: 0.6; + font-size: 10px; + font-weight: normal; } .small-chat-box .content { - padding: 15px 15px; + padding: 15px 15px; } .small-chat-box .content .author-name { - font-weight: bold; - margin-bottom: 3px; - font-size: 11px; + font-weight: bold; + margin-bottom: 3px; + font-size: 11px; } .small-chat-box .content > div { - padding-bottom: 20px; + padding-bottom: 20px; } .small-chat-box .content .chat-message { - padding: 5px 10px; - border-radius: 6px; - font-size: 11px; - line-height: 14px; - max-width: 80%; - background: #f3f3f4; - margin-bottom: 10px; + padding: 5px 10px; + border-radius: 6px; + font-size: 11px; + line-height: 14px; + max-width: 80%; + background: #f3f3f4; + margin-bottom: 10px; } .small-chat-box .content .chat-message.active { - background: #1ab394; - color: #fff; + background: #1ab394; + color: #fff; } .small-chat-box .content .left { - text-align: left; - clear: both; + text-align: left; + clear: both; } .small-chat-box .content .left .chat-message { - float: left; + float: left; } .small-chat-box .content .right { - text-align: right; - clear: both; + text-align: right; + clear: both; } .small-chat-box .content .right .chat-message { - float: right; + float: right; } .small-chat-box .form-chat { - padding: 10px 10px; + padding: 10px 10px; } /* * metismenu - v2.0.2 @@ -5831,70 +5842,70 @@ body.body-small .vote-icon { */ .metismenu .plus-minus, .metismenu .plus-times { - float: right; + float: right; } .metismenu .arrow { - float: right; - line-height: 1.42857; + float: right; + line-height: 1.42857; } .metismenu .glyphicon.arrow:before { - content: "\e079"; + content: '\e079'; } .metismenu .active > a > .glyphicon.arrow:before { - content: "\e114"; + content: '\e114'; } .metismenu .fa.arrow:before { - content: "\f104"; + content: '\f104'; } .metismenu .active > a > .fa.arrow:before { - content: "\f107"; + content: '\f107'; } .metismenu .ion.arrow:before { - content: "\f3d2"; + content: '\f3d2'; } .metismenu .active > a > .ion.arrow:before { - content: "\f3d0"; + content: '\f3d0'; } .metismenu .fa.plus-minus:before, .metismenu .fa.plus-times:before { - content: "\f067"; + content: '\f067'; } .metismenu .active > a > .fa.plus-times { - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } .metismenu .active > a > .fa.plus-minus:before { - content: "\f068"; + content: '\f068'; } .metismenu .collapse { - display: none; + display: none; } .metismenu .collapse.in { - display: block; + display: block; } .metismenu .collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-property: height, visibility; + transition-property: height, visibility; } .mini-navbar .metismenu .collapse { - opacity: 0; + opacity: 0; } .mini-navbar .metismenu .collapse.in { - opacity: 1; + opacity: 1; } .mini-navbar .metismenu .collapse a { - display: none; + display: none; } .mini-navbar .metismenu .collapse.in a { - display: block; + display: block; } /* * Usage: @@ -5903,40 +5914,40 @@ body.body-small .vote-icon { * */ .sk-spinner-rotating-plane.sk-spinner { - width: 30px; - height: 30px; - background-color: #1ab394; - margin: 0 auto; - -webkit-animation: sk-rotatePlane 1.2s infinite ease-in-out; - animation: sk-rotatePlane 1.2s infinite ease-in-out; + width: 30px; + height: 30px; + background-color: #1ab394; + margin: 0 auto; + -webkit-animation: sk-rotatePlane 1.2s infinite ease-in-out; + animation: sk-rotatePlane 1.2s infinite ease-in-out; } @-webkit-keyframes sk-rotatePlane { - 0% { - -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg); - transform: perspective(120px) rotateX(0deg) rotateY(0deg); - } - 50% { - -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); - transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); - } - 100% { - -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); - transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); - } + 0% { + -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg); + transform: perspective(120px) rotateX(0deg) rotateY(0deg); + } + 50% { + -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); + transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); + } + 100% { + -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); + transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); + } } @keyframes sk-rotatePlane { - 0% { - -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg); - transform: perspective(120px) rotateX(0deg) rotateY(0deg); - } - 50% { - -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); - transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); - } - 100% { - -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); - transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); - } + 0% { + -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg); + transform: perspective(120px) rotateX(0deg) rotateY(0deg); + } + 50% { + -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); + transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); + } + 100% { + -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); + transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); + } } /* * Usage: @@ -5948,49 +5959,49 @@ body.body-small .vote-icon { * */ .sk-spinner-double-bounce.sk-spinner { - width: 40px; - height: 40px; - position: relative; - margin: 0 auto; + width: 40px; + height: 40px; + position: relative; + margin: 0 auto; } .sk-spinner-double-bounce .sk-double-bounce1, .sk-spinner-double-bounce .sk-double-bounce2 { - width: 100%; - height: 100%; - border-radius: 50%; - background-color: #1ab394; - opacity: 0.6; - position: absolute; - top: 0; - left: 0; - -webkit-animation: sk-doubleBounce 2s infinite ease-in-out; - animation: sk-doubleBounce 2s infinite ease-in-out; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #1ab394; + opacity: 0.6; + position: absolute; + top: 0; + left: 0; + -webkit-animation: sk-doubleBounce 2s infinite ease-in-out; + animation: sk-doubleBounce 2s infinite ease-in-out; } .sk-spinner-double-bounce .sk-double-bounce2 { - -webkit-animation-delay: -1s; - animation-delay: -1s; + -webkit-animation-delay: -1s; + animation-delay: -1s; } @-webkit-keyframes sk-doubleBounce { - 0%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 50% { - -webkit-transform: scale(1); - transform: scale(1); - } + 0%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } } @keyframes sk-doubleBounce { - 0%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 50% { - -webkit-transform: scale(1); - transform: scale(1); - } + 0%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } } /* * Usage: @@ -6005,59 +6016,59 @@ body.body-small .vote-icon { * */ .sk-spinner-wave.sk-spinner { - margin: 0 auto; - width: 50px; - height: 30px; - text-align: center; - font-size: 10px; + margin: 0 auto; + width: 50px; + height: 30px; + text-align: center; + font-size: 10px; } .sk-spinner-wave div { - background-color: #1ab394; - height: 100%; - width: 6px; - display: inline-block; - -webkit-animation: sk-waveStretchDelay 1.2s infinite ease-in-out; - animation: sk-waveStretchDelay 1.2s infinite ease-in-out; + background-color: #1ab394; + height: 100%; + width: 6px; + display: inline-block; + -webkit-animation: sk-waveStretchDelay 1.2s infinite ease-in-out; + animation: sk-waveStretchDelay 1.2s infinite ease-in-out; } .sk-spinner-wave .sk-rect2 { - -webkit-animation-delay: -1.1s; - animation-delay: -1.1s; + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; } .sk-spinner-wave .sk-rect3 { - -webkit-animation-delay: -1s; - animation-delay: -1s; + -webkit-animation-delay: -1s; + animation-delay: -1s; } .sk-spinner-wave .sk-rect4 { - -webkit-animation-delay: -0.9s; - animation-delay: -0.9s; + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; } .sk-spinner-wave .sk-rect5 { - -webkit-animation-delay: -0.8s; - animation-delay: -0.8s; + -webkit-animation-delay: -0.8s; + animation-delay: -0.8s; } @-webkit-keyframes sk-waveStretchDelay { - 0%, - 40%, - 100% { - -webkit-transform: scaleY(0.4); - transform: scaleY(0.4); - } - 20% { - -webkit-transform: scaleY(1); - transform: scaleY(1); - } + 0%, + 40%, + 100% { + -webkit-transform: scaleY(0.4); + transform: scaleY(0.4); + } + 20% { + -webkit-transform: scaleY(1); + transform: scaleY(1); + } } @keyframes sk-waveStretchDelay { - 0%, - 40%, - 100% { - -webkit-transform: scaleY(0.4); - transform: scaleY(0.4); - } - 20% { - -webkit-transform: scaleY(1); - transform: scaleY(1); - } + 0%, + 40%, + 100% { + -webkit-transform: scaleY(0.4); + transform: scaleY(0.4); + } + 20% { + -webkit-transform: scaleY(1); + transform: scaleY(1); + } } /* * Usage: @@ -6069,71 +6080,71 @@ body.body-small .vote-icon { * */ .sk-spinner-wandering-cubes.sk-spinner { - margin: 0 auto; - width: 32px; - height: 32px; - position: relative; + margin: 0 auto; + width: 32px; + height: 32px; + position: relative; } .sk-spinner-wandering-cubes .sk-cube1, .sk-spinner-wandering-cubes .sk-cube2 { - background-color: #1ab394; - width: 10px; - height: 10px; - position: absolute; - top: 0; - left: 0; - -webkit-animation: sk-wanderingCubeMove 1.8s infinite ease-in-out; - animation: sk-wanderingCubeMove 1.8s infinite ease-in-out; + background-color: #1ab394; + width: 10px; + height: 10px; + position: absolute; + top: 0; + left: 0; + -webkit-animation: sk-wanderingCubeMove 1.8s infinite ease-in-out; + animation: sk-wanderingCubeMove 1.8s infinite ease-in-out; } .sk-spinner-wandering-cubes .sk-cube2 { - -webkit-animation-delay: -0.9s; - animation-delay: -0.9s; + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; } @-webkit-keyframes sk-wanderingCubeMove { - 25% { - -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5); - transform: translateX(42px) rotate(-90deg) scale(0.5); - } - 50% { - /* Hack to make FF rotate in the right direction */ - -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg); - transform: translateX(42px) translateY(42px) rotate(-179deg); - } - 50.1% { - -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg); - transform: translateX(42px) translateY(42px) rotate(-180deg); - } - 75% { - -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); - transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); - } - 100% { - -webkit-transform: rotate(-360deg); - transform: rotate(-360deg); - } + 25% { + -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5); + transform: translateX(42px) rotate(-90deg) scale(0.5); + } + 50% { + /* Hack to make FF rotate in the right direction */ + -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg); + transform: translateX(42px) translateY(42px) rotate(-179deg); + } + 50.1% { + -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg); + transform: translateX(42px) translateY(42px) rotate(-180deg); + } + 75% { + -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); + transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); + } + 100% { + -webkit-transform: rotate(-360deg); + transform: rotate(-360deg); + } } @keyframes sk-wanderingCubeMove { - 25% { - -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5); - transform: translateX(42px) rotate(-90deg) scale(0.5); - } - 50% { - /* Hack to make FF rotate in the right direction */ - -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg); - transform: translateX(42px) translateY(42px) rotate(-179deg); - } - 50.1% { - -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg); - transform: translateX(42px) translateY(42px) rotate(-180deg); - } - 75% { - -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); - transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); - } - 100% { - -webkit-transform: rotate(-360deg); - transform: rotate(-360deg); - } + 25% { + -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5); + transform: translateX(42px) rotate(-90deg) scale(0.5); + } + 50% { + /* Hack to make FF rotate in the right direction */ + -webkit-transform: translateX(42px) translateY(42px) rotate(-179deg); + transform: translateX(42px) translateY(42px) rotate(-179deg); + } + 50.1% { + -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg); + transform: translateX(42px) translateY(42px) rotate(-180deg); + } + 75% { + -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); + transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5); + } + 100% { + -webkit-transform: rotate(-360deg); + transform: rotate(-360deg); + } } /* * Usage: @@ -6142,35 +6153,35 @@ body.body-small .vote-icon { * */ .sk-spinner-pulse.sk-spinner { - width: 40px; - height: 40px; - margin: 0 auto; - background-color: #1ab394; - border-radius: 100%; - -webkit-animation: sk-pulseScaleOut 1s infinite ease-in-out; - animation: sk-pulseScaleOut 1s infinite ease-in-out; + width: 40px; + height: 40px; + margin: 0 auto; + background-color: #1ab394; + border-radius: 100%; + -webkit-animation: sk-pulseScaleOut 1s infinite ease-in-out; + animation: sk-pulseScaleOut 1s infinite ease-in-out; } @-webkit-keyframes sk-pulseScaleOut { - 0% { - -webkit-transform: scale(0); - transform: scale(0); - } - 100% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0; - } + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 0; + } } @keyframes sk-pulseScaleOut { - 0% { - -webkit-transform: scale(0); - transform: scale(0); - } - 100% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 0; - } + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 0; + } } /* * Usage: @@ -6182,65 +6193,65 @@ body.body-small .vote-icon { * */ .sk-spinner-chasing-dots.sk-spinner { - margin: 0 auto; - width: 40px; - height: 40px; - position: relative; - text-align: center; - -webkit-animation: sk-chasingDotsRotate 2s infinite linear; - animation: sk-chasingDotsRotate 2s infinite linear; + margin: 0 auto; + width: 40px; + height: 40px; + position: relative; + text-align: center; + -webkit-animation: sk-chasingDotsRotate 2s infinite linear; + animation: sk-chasingDotsRotate 2s infinite linear; } .sk-spinner-chasing-dots .sk-dot1, .sk-spinner-chasing-dots .sk-dot2 { - width: 60%; - height: 60%; - display: inline-block; - position: absolute; - top: 0; - background-color: #1ab394; - border-radius: 100%; - -webkit-animation: sk-chasingDotsBounce 2s infinite ease-in-out; - animation: sk-chasingDotsBounce 2s infinite ease-in-out; + width: 60%; + height: 60%; + display: inline-block; + position: absolute; + top: 0; + background-color: #1ab394; + border-radius: 100%; + -webkit-animation: sk-chasingDotsBounce 2s infinite ease-in-out; + animation: sk-chasingDotsBounce 2s infinite ease-in-out; } .sk-spinner-chasing-dots .sk-dot2 { - top: auto; - bottom: 0; - -webkit-animation-delay: -1s; - animation-delay: -1s; + top: auto; + bottom: 0; + -webkit-animation-delay: -1s; + animation-delay: -1s; } @-webkit-keyframes sk-chasingDotsRotate { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } } @keyframes sk-chasingDotsRotate { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } } @-webkit-keyframes sk-chasingDotsBounce { - 0%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 50% { - -webkit-transform: scale(1); - transform: scale(1); - } + 0%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } } @keyframes sk-chasingDotsBounce { - 0%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 50% { - -webkit-transform: scale(1); - transform: scale(1); - } + 0%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + -webkit-transform: scale(1); + transform: scale(1); + } } /* * Usage: @@ -6253,53 +6264,53 @@ body.body-small .vote-icon { * */ .sk-spinner-three-bounce.sk-spinner { - margin: 0 auto; - width: 70px; - text-align: center; + margin: 0 auto; + width: 70px; + text-align: center; } .sk-spinner-three-bounce div { - width: 18px; - height: 18px; - background-color: #1ab394; - border-radius: 100%; - display: inline-block; - -webkit-animation: sk-threeBounceDelay 1.4s infinite ease-in-out; - animation: sk-threeBounceDelay 1.4s infinite ease-in-out; - /* Prevent first frame from flickering when animation starts */ - -webkit-animation-fill-mode: both; - animation-fill-mode: both; + width: 18px; + height: 18px; + background-color: #1ab394; + border-radius: 100%; + display: inline-block; + -webkit-animation: sk-threeBounceDelay 1.4s infinite ease-in-out; + animation: sk-threeBounceDelay 1.4s infinite ease-in-out; + /* Prevent first frame from flickering when animation starts */ + -webkit-animation-fill-mode: both; + animation-fill-mode: both; } .sk-spinner-three-bounce .sk-bounce1 { - -webkit-animation-delay: -0.32s; - animation-delay: -0.32s; + -webkit-animation-delay: -0.32s; + animation-delay: -0.32s; } .sk-spinner-three-bounce .sk-bounce2 { - -webkit-animation-delay: -0.16s; - animation-delay: -0.16s; + -webkit-animation-delay: -0.16s; + animation-delay: -0.16s; } @-webkit-keyframes sk-threeBounceDelay { - 0%, - 80%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 40% { - -webkit-transform: scale(1); - transform: scale(1); - } + 0%, + 80%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } } @keyframes sk-threeBounceDelay { - 0%, - 80%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 40% { - -webkit-transform: scale(1); - transform: scale(1); - } + 0%, + 80%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } } /* * Usage: @@ -6321,154 +6332,154 @@ body.body-small .vote-icon { * */ .sk-spinner-circle.sk-spinner { - margin: 0 auto; - width: 22px; - height: 22px; - position: relative; + margin: 0 auto; + width: 22px; + height: 22px; + position: relative; } .sk-spinner-circle .sk-circle { - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; } .sk-spinner-circle .sk-circle:before { - content: ''; - display: block; - margin: 0 auto; - width: 20%; - height: 20%; - background-color: #1ab394; - border-radius: 100%; - -webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out; - animation: sk-circleBounceDelay 1.2s infinite ease-in-out; - /* Prevent first frame from flickering when animation starts */ - -webkit-animation-fill-mode: both; - animation-fill-mode: both; + content: ''; + display: block; + margin: 0 auto; + width: 20%; + height: 20%; + background-color: #1ab394; + border-radius: 100%; + -webkit-animation: sk-circleBounceDelay 1.2s infinite ease-in-out; + animation: sk-circleBounceDelay 1.2s infinite ease-in-out; + /* Prevent first frame from flickering when animation starts */ + -webkit-animation-fill-mode: both; + animation-fill-mode: both; } .sk-spinner-circle .sk-circle2 { - -webkit-transform: rotate(30deg); - -ms-transform: rotate(30deg); - transform: rotate(30deg); + -webkit-transform: rotate(30deg); + -ms-transform: rotate(30deg); + transform: rotate(30deg); } .sk-spinner-circle .sk-circle3 { - -webkit-transform: rotate(60deg); - -ms-transform: rotate(60deg); - transform: rotate(60deg); + -webkit-transform: rotate(60deg); + -ms-transform: rotate(60deg); + transform: rotate(60deg); } .sk-spinner-circle .sk-circle4 { - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); } .sk-spinner-circle .sk-circle5 { - -webkit-transform: rotate(120deg); - -ms-transform: rotate(120deg); - transform: rotate(120deg); + -webkit-transform: rotate(120deg); + -ms-transform: rotate(120deg); + transform: rotate(120deg); } .sk-spinner-circle .sk-circle6 { - -webkit-transform: rotate(150deg); - -ms-transform: rotate(150deg); - transform: rotate(150deg); + -webkit-transform: rotate(150deg); + -ms-transform: rotate(150deg); + transform: rotate(150deg); } .sk-spinner-circle .sk-circle7 { - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); } .sk-spinner-circle .sk-circle8 { - -webkit-transform: rotate(210deg); - -ms-transform: rotate(210deg); - transform: rotate(210deg); + -webkit-transform: rotate(210deg); + -ms-transform: rotate(210deg); + transform: rotate(210deg); } .sk-spinner-circle .sk-circle9 { - -webkit-transform: rotate(240deg); - -ms-transform: rotate(240deg); - transform: rotate(240deg); + -webkit-transform: rotate(240deg); + -ms-transform: rotate(240deg); + transform: rotate(240deg); } .sk-spinner-circle .sk-circle10 { - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); } .sk-spinner-circle .sk-circle11 { - -webkit-transform: rotate(300deg); - -ms-transform: rotate(300deg); - transform: rotate(300deg); + -webkit-transform: rotate(300deg); + -ms-transform: rotate(300deg); + transform: rotate(300deg); } .sk-spinner-circle .sk-circle12 { - -webkit-transform: rotate(330deg); - -ms-transform: rotate(330deg); - transform: rotate(330deg); + -webkit-transform: rotate(330deg); + -ms-transform: rotate(330deg); + transform: rotate(330deg); } .sk-spinner-circle .sk-circle2:before { - -webkit-animation-delay: -1.1s; - animation-delay: -1.1s; + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; } .sk-spinner-circle .sk-circle3:before { - -webkit-animation-delay: -1s; - animation-delay: -1s; + -webkit-animation-delay: -1s; + animation-delay: -1s; } .sk-spinner-circle .sk-circle4:before { - -webkit-animation-delay: -0.9s; - animation-delay: -0.9s; + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; } .sk-spinner-circle .sk-circle5:before { - -webkit-animation-delay: -0.8s; - animation-delay: -0.8s; + -webkit-animation-delay: -0.8s; + animation-delay: -0.8s; } .sk-spinner-circle .sk-circle6:before { - -webkit-animation-delay: -0.7s; - animation-delay: -0.7s; + -webkit-animation-delay: -0.7s; + animation-delay: -0.7s; } .sk-spinner-circle .sk-circle7:before { - -webkit-animation-delay: -0.6s; - animation-delay: -0.6s; + -webkit-animation-delay: -0.6s; + animation-delay: -0.6s; } .sk-spinner-circle .sk-circle8:before { - -webkit-animation-delay: -0.5s; - animation-delay: -0.5s; + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; } .sk-spinner-circle .sk-circle9:before { - -webkit-animation-delay: -0.4s; - animation-delay: -0.4s; + -webkit-animation-delay: -0.4s; + animation-delay: -0.4s; } .sk-spinner-circle .sk-circle10:before { - -webkit-animation-delay: -0.3s; - animation-delay: -0.3s; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; } .sk-spinner-circle .sk-circle11:before { - -webkit-animation-delay: -0.2s; - animation-delay: -0.2s; + -webkit-animation-delay: -0.2s; + animation-delay: -0.2s; } .sk-spinner-circle .sk-circle12:before { - -webkit-animation-delay: -0.1s; - animation-delay: -0.1s; + -webkit-animation-delay: -0.1s; + animation-delay: -0.1s; } @-webkit-keyframes sk-circleBounceDelay { - 0%, - 80%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 40% { - -webkit-transform: scale(1); - transform: scale(1); - } + 0%, + 80%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } } @keyframes sk-circleBounceDelay { - 0%, - 80%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 40% { - -webkit-transform: scale(1); - transform: scale(1); - } + 0%, + 80%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } } /* * Usage: @@ -6487,7 +6498,7 @@ body.body-small .vote-icon { * */ .sk-spinner-cube-grid { - /* + /* * Spinner positions * 1 2 3 * 4 5 6 @@ -6495,77 +6506,77 @@ body.body-small .vote-icon { */ } .sk-spinner-cube-grid.sk-spinner { - width: 30px; - height: 30px; - margin: 0 auto; + width: 30px; + height: 30px; + margin: 0 auto; } .sk-spinner-cube-grid .sk-cube { - width: 33%; - height: 33%; - background-color: #1ab394; - float: left; - -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; - animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; + width: 33%; + height: 33%; + background-color: #1ab394; + float: left; + -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; + animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; } .sk-spinner-cube-grid .sk-cube:nth-child(1) { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; } .sk-spinner-cube-grid .sk-cube:nth-child(2) { - -webkit-animation-delay: 0.3s; - animation-delay: 0.3s; + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; } .sk-spinner-cube-grid .sk-cube:nth-child(3) { - -webkit-animation-delay: 0.4s; - animation-delay: 0.4s; + -webkit-animation-delay: 0.4s; + animation-delay: 0.4s; } .sk-spinner-cube-grid .sk-cube:nth-child(4) { - -webkit-animation-delay: 0.1s; - animation-delay: 0.1s; + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; } .sk-spinner-cube-grid .sk-cube:nth-child(5) { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; } .sk-spinner-cube-grid .sk-cube:nth-child(6) { - -webkit-animation-delay: 0.3s; - animation-delay: 0.3s; + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; } .sk-spinner-cube-grid .sk-cube:nth-child(7) { - -webkit-animation-delay: 0s; - animation-delay: 0s; + -webkit-animation-delay: 0s; + animation-delay: 0s; } .sk-spinner-cube-grid .sk-cube:nth-child(8) { - -webkit-animation-delay: 0.1s; - animation-delay: 0.1s; + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; } .sk-spinner-cube-grid .sk-cube:nth-child(9) { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; } @-webkit-keyframes sk-cubeGridScaleDelay { - 0%, - 70%, - 100% { - -webkit-transform: scale3D(1, 1, 1); - transform: scale3D(1, 1, 1); - } - 35% { - -webkit-transform: scale3D(0, 0, 1); - transform: scale3D(0, 0, 1); - } + 0%, + 70%, + 100% { + -webkit-transform: scale3D(1, 1, 1); + transform: scale3D(1, 1, 1); + } + 35% { + -webkit-transform: scale3D(0, 0, 1); + transform: scale3D(0, 0, 1); + } } @keyframes sk-cubeGridScaleDelay { - 0%, - 70%, - 100% { - -webkit-transform: scale3D(1, 1, 1); - transform: scale3D(1, 1, 1); - } - 35% { - -webkit-transform: scale3D(0, 0, 1); - transform: scale3D(0, 0, 1); - } + 0%, + 70%, + 100% { + -webkit-transform: scale3D(1, 1, 1); + transform: scale3D(1, 1, 1); + } + 35% { + -webkit-transform: scale3D(0, 0, 1); + transform: scale3D(0, 0, 1); + } } /* * Usage: @@ -6576,44 +6587,44 @@ body.body-small .vote-icon { * */ .sk-spinner-wordpress.sk-spinner { - background-color: #1ab394; - width: 30px; - height: 30px; - border-radius: 30px; - position: relative; - margin: 0 auto; - -webkit-animation: sk-innerCircle 1s linear infinite; - animation: sk-innerCircle 1s linear infinite; + background-color: #1ab394; + width: 30px; + height: 30px; + border-radius: 30px; + position: relative; + margin: 0 auto; + -webkit-animation: sk-innerCircle 1s linear infinite; + animation: sk-innerCircle 1s linear infinite; } .sk-spinner-wordpress .sk-inner-circle { - display: block; - background-color: #fff; - width: 8px; - height: 8px; - position: absolute; - border-radius: 8px; - top: 5px; - left: 5px; + display: block; + background-color: #fff; + width: 8px; + height: 8px; + position: absolute; + border-radius: 8px; + top: 5px; + left: 5px; } @-webkit-keyframes sk-innerCircle { - 0% { - -webkit-transform: rotate(0); - transform: rotate(0); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } } @keyframes sk-innerCircle { - 0% { - -webkit-transform: rotate(0); - transform: rotate(0); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } } /* * Usage: @@ -6635,173 +6646,173 @@ body.body-small .vote-icon { * */ .sk-spinner-fading-circle.sk-spinner { - margin: 0 auto; - width: 22px; - height: 22px; - position: relative; + margin: 0 auto; + width: 22px; + height: 22px; + position: relative; } .sk-spinner-fading-circle .sk-circle { - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; } .sk-spinner-fading-circle .sk-circle:before { - content: ''; - display: block; - margin: 0 auto; - width: 18%; - height: 18%; - background-color: #1ab394; - border-radius: 100%; - -webkit-animation: sk-circleFadeDelay 1.2s infinite ease-in-out; - animation: sk-circleFadeDelay 1.2s infinite ease-in-out; - /* Prevent first frame from flickering when animation starts */ - -webkit-animation-fill-mode: both; - animation-fill-mode: both; + content: ''; + display: block; + margin: 0 auto; + width: 18%; + height: 18%; + background-color: #1ab394; + border-radius: 100%; + -webkit-animation: sk-circleFadeDelay 1.2s infinite ease-in-out; + animation: sk-circleFadeDelay 1.2s infinite ease-in-out; + /* Prevent first frame from flickering when animation starts */ + -webkit-animation-fill-mode: both; + animation-fill-mode: both; } .sk-spinner-fading-circle .sk-circle2 { - -webkit-transform: rotate(30deg); - -ms-transform: rotate(30deg); - transform: rotate(30deg); + -webkit-transform: rotate(30deg); + -ms-transform: rotate(30deg); + transform: rotate(30deg); } .sk-spinner-fading-circle .sk-circle3 { - -webkit-transform: rotate(60deg); - -ms-transform: rotate(60deg); - transform: rotate(60deg); + -webkit-transform: rotate(60deg); + -ms-transform: rotate(60deg); + transform: rotate(60deg); } .sk-spinner-fading-circle .sk-circle4 { - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); } .sk-spinner-fading-circle .sk-circle5 { - -webkit-transform: rotate(120deg); - -ms-transform: rotate(120deg); - transform: rotate(120deg); + -webkit-transform: rotate(120deg); + -ms-transform: rotate(120deg); + transform: rotate(120deg); } .sk-spinner-fading-circle .sk-circle6 { - -webkit-transform: rotate(150deg); - -ms-transform: rotate(150deg); - transform: rotate(150deg); + -webkit-transform: rotate(150deg); + -ms-transform: rotate(150deg); + transform: rotate(150deg); } .sk-spinner-fading-circle .sk-circle7 { - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); } .sk-spinner-fading-circle .sk-circle8 { - -webkit-transform: rotate(210deg); - -ms-transform: rotate(210deg); - transform: rotate(210deg); + -webkit-transform: rotate(210deg); + -ms-transform: rotate(210deg); + transform: rotate(210deg); } .sk-spinner-fading-circle .sk-circle9 { - -webkit-transform: rotate(240deg); - -ms-transform: rotate(240deg); - transform: rotate(240deg); + -webkit-transform: rotate(240deg); + -ms-transform: rotate(240deg); + transform: rotate(240deg); } .sk-spinner-fading-circle .sk-circle10 { - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); } .sk-spinner-fading-circle .sk-circle11 { - -webkit-transform: rotate(300deg); - -ms-transform: rotate(300deg); - transform: rotate(300deg); + -webkit-transform: rotate(300deg); + -ms-transform: rotate(300deg); + transform: rotate(300deg); } .sk-spinner-fading-circle .sk-circle12 { - -webkit-transform: rotate(330deg); - -ms-transform: rotate(330deg); - transform: rotate(330deg); + -webkit-transform: rotate(330deg); + -ms-transform: rotate(330deg); + transform: rotate(330deg); } .sk-spinner-fading-circle .sk-circle2:before { - -webkit-animation-delay: -1.1s; - animation-delay: -1.1s; + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; } .sk-spinner-fading-circle .sk-circle3:before { - -webkit-animation-delay: -1s; - animation-delay: -1s; + -webkit-animation-delay: -1s; + animation-delay: -1s; } .sk-spinner-fading-circle .sk-circle4:before { - -webkit-animation-delay: -0.9s; - animation-delay: -0.9s; + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; } .sk-spinner-fading-circle .sk-circle5:before { - -webkit-animation-delay: -0.8s; - animation-delay: -0.8s; + -webkit-animation-delay: -0.8s; + animation-delay: -0.8s; } .sk-spinner-fading-circle .sk-circle6:before { - -webkit-animation-delay: -0.7s; - animation-delay: -0.7s; + -webkit-animation-delay: -0.7s; + animation-delay: -0.7s; } .sk-spinner-fading-circle .sk-circle7:before { - -webkit-animation-delay: -0.6s; - animation-delay: -0.6s; + -webkit-animation-delay: -0.6s; + animation-delay: -0.6s; } .sk-spinner-fading-circle .sk-circle8:before { - -webkit-animation-delay: -0.5s; - animation-delay: -0.5s; + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; } .sk-spinner-fading-circle .sk-circle9:before { - -webkit-animation-delay: -0.4s; - animation-delay: -0.4s; + -webkit-animation-delay: -0.4s; + animation-delay: -0.4s; } .sk-spinner-fading-circle .sk-circle10:before { - -webkit-animation-delay: -0.3s; - animation-delay: -0.3s; + -webkit-animation-delay: -0.3s; + animation-delay: -0.3s; } .sk-spinner-fading-circle .sk-circle11:before { - -webkit-animation-delay: -0.2s; - animation-delay: -0.2s; + -webkit-animation-delay: -0.2s; + animation-delay: -0.2s; } .sk-spinner-fading-circle .sk-circle12:before { - -webkit-animation-delay: -0.1s; - animation-delay: -0.1s; + -webkit-animation-delay: -0.1s; + animation-delay: -0.1s; } @-webkit-keyframes sk-circleFadeDelay { - 0%, - 39%, - 100% { - opacity: 0; - } - 40% { - opacity: 1; - } + 0%, + 39%, + 100% { + opacity: 0; + } + 40% { + opacity: 1; + } } @keyframes sk-circleFadeDelay { - 0%, - 39%, - 100% { - opacity: 0; - } - 40% { - opacity: 1; - } + 0%, + 39%, + 100% { + opacity: 0; + } + 40% { + opacity: 1; + } } .ibox-content > .sk-spinner { - display: none; + display: none; } .ibox-content.sk-loading { - position: relative; + position: relative; } .ibox-content.sk-loading:after { - content: ''; - background-color: rgba(255, 255, 255, 0.7); - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; + content: ''; + background-color: rgba(255, 255, 255, 0.7); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; } .ibox-content.sk-loading > .sk-spinner { - display: block; - position: absolute; - top: 40%; - left: 0; - right: 0; - z-index: 2000; + display: block; + position: absolute; + top: 40%; + left: 0; + right: 0; + z-index: 2000; } /* * @@ -6814,480 +6825,480 @@ body.body-small .vote-icon { /* PACE PLUGIN -------------------------------------------------- */ .landing-page.pace .pace-progress { - background: #fff; - position: fixed; - z-index: 2000; - top: 0; - left: 0; - height: 2px; - -webkit-transition: width 1s; - -moz-transition: width 1s; - -o-transition: width 1s; - transition: width 1s; + background: #fff; + position: fixed; + z-index: 2000; + top: 0; + left: 0; + height: 2px; + -webkit-transition: width 1s; + -moz-transition: width 1s; + -o-transition: width 1s; + transition: width 1s; } .pace-inactive { - display: none; + display: none; } body.landing-page { - color: #676a6c; - font-family: 'Lato', helvetica, arial, sans-serif; - background-color: #fff; + color: #676a6c; + font-family: 'Lato', helvetica, arial, sans-serif; + background-color: #fff; } .landing-page { - /* CUSTOMIZE THE NAVBAR + /* CUSTOMIZE THE NAVBAR -------------------------------------------------- */ - /* Flip around the padding for proper display in narrow viewports */ - /* BACKGROUNDS SLIDER + /* Flip around the padding for proper display in narrow viewports */ + /* BACKGROUNDS SLIDER -------------------------------------------------- */ - /* CUSTOMIZE THE CAROUSEL + /* CUSTOMIZE THE CAROUSEL -------------------------------------------------- */ - /* Carousel base class */ - /* Since positioning the image, we need to help out the caption */ - /* Declare heights because of positioning of img element */ - /* Sections + /* Carousel base class */ + /* Since positioning the image, we need to help out the caption */ + /* Declare heights because of positioning of img element */ + /* Sections ------------------------- */ - /* Buttons - only primary custom button + /* Buttons - only primary custom button ------------------------- */ - /* RESPONSIVE CSS + /* RESPONSIVE CSS -------------------------------------------------- */ } .landing-page .container { - overflow: hidden; + overflow: hidden; } .landing-page span.navy { - color: #1ab394; + color: #1ab394; } .landing-page p.text-color { - color: #676a6c; + color: #676a6c; } .landing-page a.navy-link { - color: #1ab394; - text-decoration: none; + color: #1ab394; + text-decoration: none; } .landing-page a.navy-link:hover { - color: #179d82; + color: #179d82; } .landing-page section p { - color: #aeaeae; - font-size: 13px; + color: #aeaeae; + font-size: 13px; } .landing-page address { - font-size: 13px; + font-size: 13px; } .landing-page h1 { - margin-top: 10px; - font-size: 30px; - font-weight: 200; + margin-top: 10px; + font-size: 30px; + font-weight: 200; } .landing-page .navy-line { - width: 60px; - height: 1px; - margin: 60px auto 0; - border-bottom: 2px solid #1ab394; + width: 60px; + height: 1px; + margin: 60px auto 0; + border-bottom: 2px solid #1ab394; } .landing-page .navbar-wrapper { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 200; + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 200; } .landing-page .navbar-wrapper > .container { - padding-right: 0; - padding-left: 0; + padding-right: 0; + padding-left: 0; } .landing-page .navbar-wrapper .navbar { - padding-right: 15px; - padding-left: 15px; + padding-right: 15px; + padding-left: 15px; } .landing-page .navbar-default.navbar-scroll { - background-color: #fff; - border-color: #fff; - padding: 15px 0; + background-color: #fff; + border-color: #fff; + padding: 15px 0; } .landing-page .navbar-default { - background-color: transparent; - border-color: transparent; - transition: all 0.3s ease-in-out 0s; + background-color: transparent; + border-color: transparent; + transition: all 0.3s ease-in-out 0s; } .landing-page .navbar-default .nav li a { - color: #fff; - font-family: 'Lato', helvetica, arial, sans-serif; - font-weight: 700; - letter-spacing: 1px; - text-transform: uppercase; - font-size: 14px; + color: #fff; + font-family: 'Lato', helvetica, arial, sans-serif; + font-weight: 700; + letter-spacing: 1px; + text-transform: uppercase; + font-size: 14px; } .landing-page .navbar-nav > li > a { - padding-top: 25px; - border-top: 6px solid transparent; + padding-top: 25px; + border-top: 6px solid transparent; } .landing-page .navbar-default .navbar-nav > .active > a, .landing-page .navbar-default .navbar-nav > .active > a:hover { - background: transparent; - color: #fff; - border-top: 6px solid #1ab394; + background: transparent; + color: #fff; + border-top: 6px solid #1ab394; } .landing-page .navbar-default .navbar-nav > li > a:hover, .landing-page .navbar-default .navbar-nav > li > a:focus { - color: #1ab394; - background: inherit; + color: #1ab394; + background: inherit; } .landing-page .navbar-default .navbar-nav > .active > a:focus { - background: transparent; - color: #fff; + background: transparent; + color: #fff; } .landing-page .navbar-default .navbar-nav > .active > a:focus { - background: transparent; - color: #ffffff; + background: transparent; + color: #ffffff; } .landing-page .navbar-default.navbar-scroll .navbar-nav > .active > a:focus { - background: transparent; - color: inherit; + background: transparent; + color: inherit; } .landing-page .navbar-default .navbar-brand:hover, .landing-page .navbar-default .navbar-brand:focus { - background: #179d82; - color: #fff; + background: #179d82; + color: #fff; } .landing-page .navbar-default .navbar-brand { - color: #fff; - height: auto; - display: block; - font-size: 14px; - background: #1ab394; - padding: 15px 20px 15px 20px; - border-radius: 0 0 5px 5px; - font-weight: 700; - transition: all 0.3s ease-in-out 0s; + color: #fff; + height: auto; + display: block; + font-size: 14px; + background: #1ab394; + padding: 15px 20px 15px 20px; + border-radius: 0 0 5px 5px; + font-weight: 700; + transition: all 0.3s ease-in-out 0s; } .landing-page .navbar-scroll.navbar-default .nav li a { - color: #676a6c; + color: #676a6c; } .landing-page .navbar-scroll.navbar-default .nav li a:hover { - color: #1ab394; + color: #1ab394; } .landing-page .navbar-wrapper .navbar.navbar-scroll { - padding-top: 0; - padding-bottom: 5px; - border-bottom: 1px solid #e7eaec; - border-radius: 0; + padding-top: 0; + padding-bottom: 5px; + border-bottom: 1px solid #e7eaec; + border-radius: 0; } .landing-page .nav > li.active { - border: none; - background: inherit; + border: none; + background: inherit; } .landing-page .nav > li > a { - padding: 25px 10px 15px 10px; + padding: 25px 10px 15px 10px; } .landing-page .navbar-scroll .navbar-nav > li > a { - padding: 20px 10px; + padding: 20px 10px; } .landing-page .navbar-default .navbar-nav > .active > a, .landing-page .navbar-default .navbar-nav > .active > a:hover { - border-top: 6px solid #1ab394; + border-top: 6px solid #1ab394; } .landing-page .navbar-fixed-top { - border: none !important; + border: none !important; } .landing-page .navbar-fixed-top.navbar-scroll { - border-bottom: 1px solid #e7eaec !important; + border-bottom: 1px solid #e7eaec !important; } .landing-page .navbar.navbar-scroll .navbar-brand { - margin-top: 15px; - border-radius: 5px; - font-size: 12px; - padding: 10px; - height: auto; + margin-top: 15px; + border-radius: 5px; + font-size: 12px; + padding: 10px; + height: auto; } .landing-page .header-back { - height: 470px; - width: 100%; + height: 470px; + width: 100%; } .landing-page .carousel { - height: 470px; + height: 470px; } .landing-page .carousel-caption { - z-index: 10; + z-index: 10; } .landing-page .carousel .item { - height: 470px; - background-color: #777; + height: 470px; + background-color: #777; } .landing-page .carousel-inner > .item > img { - position: absolute; - top: 0; - left: 0; - min-width: 100%; - height: 470px; + position: absolute; + top: 0; + left: 0; + min-width: 100%; + height: 470px; } .landing-page .carousel-fade .carousel-inner .item { - opacity: 0; - -webkit-transition-property: opacity; - transition-property: opacity; + opacity: 0; + -webkit-transition-property: opacity; + transition-property: opacity; } .landing-page .carousel-fade .carousel-inner .active { - opacity: 1; + opacity: 1; } .landing-page .carousel-fade .carousel-inner .active.left, .landing-page .carousel-fade .carousel-inner .active.right { - left: 0; - opacity: 0; - z-index: 1; + left: 0; + opacity: 0; + z-index: 1; } .landing-page .carousel-fade .carousel-inner .next.left, .landing-page .carousel-fade .carousel-inner .prev.right { - opacity: 1; + opacity: 1; } .landing-page .carousel-fade .carousel-control { - z-index: 2; + z-index: 2; } .landing-page .carousel-control.left, .landing-page .carousel-control.right { - background: none; + background: none; } .landing-page .carousel-control { - width: 6%; + width: 6%; } .landing-page .carousel-inner .container { - position: relative; - overflow: visible; + position: relative; + overflow: visible; } .landing-page .carousel-inner { - overflow: visible; + overflow: visible; } .landing-page .carousel-caption { - position: absolute; - top: 100px; - left: 0; - bottom: auto; - right: auto; - text-align: left; + position: absolute; + top: 100px; + left: 0; + bottom: auto; + right: auto; + text-align: left; } .landing-page .carousel-caption { - position: absolute; - top: 100px; - left: 0; - bottom: auto; - right: auto; - text-align: left; + position: absolute; + top: 100px; + left: 0; + bottom: auto; + right: auto; + text-align: left; } .landing-page .carousel-caption.blank { - top: 140px; + top: 140px; } .landing-page .carousel-image { - position: absolute; - right: 10px; - top: 150px; + position: absolute; + right: 10px; + top: 150px; } .landing-page .carousel-indicators { - padding-right: 60px; + padding-right: 60px; } .landing-page .carousel-caption h1 { - font-weight: 700; - font-size: 38px; - text-transform: uppercase; - text-shadow: none; - letter-spacing: -1.5px; + font-weight: 700; + font-size: 38px; + text-transform: uppercase; + text-shadow: none; + letter-spacing: -1.5px; } .landing-page .carousel-caption p { - font-weight: 700; - text-transform: uppercase; - text-shadow: none; + font-weight: 700; + text-transform: uppercase; + text-shadow: none; } .landing-page .caption-link { - color: #fff; - margin-left: 10px; - text-transform: capitalize; - font-weight: 400; + color: #fff; + margin-left: 10px; + text-transform: capitalize; + font-weight: 400; } .landing-page .caption-link:hover { - text-decoration: none; - color: inherit; + text-decoration: none; + color: inherit; } .landing-page .services { - padding-top: 60px; + padding-top: 60px; } .landing-page .services h2 { - font-size: 20px; - letter-spacing: -1px; - font-weight: 600; - text-transform: uppercase; + font-size: 20px; + letter-spacing: -1px; + font-weight: 600; + text-transform: uppercase; } .landing-page .features-block { - margin-top: 40px; + margin-top: 40px; } .landing-page .features-text { - margin-top: 40px; + margin-top: 40px; } .landing-page .features small { - color: #1ab394; + color: #1ab394; } .landing-page .features h2 { - font-size: 18px; - margin-top: 5px; + font-size: 18px; + margin-top: 5px; } .landing-page .features-text-alone { - margin: 40px 0; + margin: 40px 0; } .landing-page .features-text-alone h1 { - font-weight: 200; + font-weight: 200; } .landing-page .features-icon { - color: #1ab394; - font-size: 40px; + color: #1ab394; + font-size: 40px; } .landing-page .navy-section { - margin-top: 60px; - background: #1ab394; - color: #fff; - padding: 20px 0; + margin-top: 60px; + background: #1ab394; + color: #fff; + padding: 20px 0; } .landing-page .gray-section { - background: #f4f4f4; - margin-top: 60px; + background: #f4f4f4; + margin-top: 60px; } .landing-page .team-member { - text-align: center; + text-align: center; } .landing-page .team-member img { - margin: auto; + margin: auto; } .landing-page .social-icon a { - background: #1ab394; - color: #fff; - padding: 4px 8px; - height: 28px; - width: 28px; - display: block; - border-radius: 50px; + background: #1ab394; + color: #fff; + padding: 4px 8px; + height: 28px; + width: 28px; + display: block; + border-radius: 50px; } .landing-page .social-icon a:hover { - background: #179d82; + background: #179d82; } .landing-page .img-small { - height: 88px; - width: 88px; + height: 88px; + width: 88px; } .landing-page .pricing-plan { - margin: 20px 30px 0 30px; - border-radius: 4px; + margin: 20px 30px 0 30px; + border-radius: 4px; } .landing-page .pricing-plan.selected { - transform: scale(1.1); - background: #f4f4f4; + transform: scale(1.1); + background: #f4f4f4; } .landing-page .pricing-plan li { - padding: 10px 16px; - border-top: 1px solid #e7eaec; - text-align: center; - color: #aeaeae; + padding: 10px 16px; + border-top: 1px solid #e7eaec; + text-align: center; + color: #aeaeae; } .landing-page .pricing-plan .pricing-price span { - font-weight: 700; - color: #1ab394; + font-weight: 700; + color: #1ab394; } .landing-page li.pricing-desc { - font-size: 13px; - border-top: none; - padding: 20px 16px; + font-size: 13px; + border-top: none; + padding: 20px 16px; } .landing-page li.pricing-title { - background: #1ab394; - color: #fff; - padding: 10px; - border-radius: 4px 4px 0 0; - font-size: 22px; - font-weight: 600; + background: #1ab394; + color: #fff; + padding: 10px; + border-radius: 4px 4px 0 0; + font-size: 22px; + font-weight: 600; } .landing-page .testimonials { - padding-top: 80px; - padding-bottom: 90px; - background-color: #1ab394; + padding-top: 80px; + padding-bottom: 90px; + background-color: #1ab394; } .landing-page .big-icon { - font-size: 56px !important; + font-size: 56px !important; } .landing-page .features .big-icon { - color: #1ab394 !important; + color: #1ab394 !important; } .landing-page .contact { - background-position: 50% 50%; - background-repeat: no-repeat; - margin-top: 60px; + background-position: 50% 50%; + background-repeat: no-repeat; + margin-top: 60px; } .landing-page section.timeline { - padding-bottom: 30px; + padding-bottom: 30px; } .landing-page section.comments { - padding-bottom: 80px; + padding-bottom: 80px; } .landing-page .comments-avatar { - margin-top: 25px; - margin-left: 22px; - margin-bottom: 25px; + margin-top: 25px; + margin-left: 22px; + margin-bottom: 25px; } .landing-page .comments-avatar .commens-name { - font-weight: 600; - font-size: 14px; + font-weight: 600; + font-size: 14px; } .landing-page .comments-avatar img { - width: 42px; - height: 42px; - border-radius: 50%; - margin-right: 10px; + width: 42px; + height: 42px; + border-radius: 50%; + margin-right: 10px; } .landing-page .bubble { - position: relative; - height: 120px; - padding: 20px; - background: #FFFFFF; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; - font-style: italic; - font-size: 14px; + position: relative; + height: 120px; + padding: 20px; + background: #ffffff; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + font-style: italic; + font-size: 14px; } .landing-page .bubble:after { - content: ''; - position: absolute; - border-style: solid; - border-width: 15px 14px 0; - border-color: #FFFFFF transparent; - display: block; - width: 0; - z-index: 1; - bottom: -15px; - left: 30px; + content: ''; + position: absolute; + border-style: solid; + border-width: 15px 14px 0; + border-color: #ffffff transparent; + display: block; + width: 0; + z-index: 1; + bottom: -15px; + left: 30px; } .landing-page .btn-primary.btn-outline:hover, .landing-page .btn-success.btn-outline:hover, .landing-page .btn-info.btn-outline:hover, .landing-page .btn-warning.btn-outline:hover, .landing-page .btn-danger.btn-outline:hover { - color: #fff; + color: #fff; } .landing-page .btn-primary { - background-color: #1ab394; - border-color: #1ab394; - color: #FFFFFF; - font-size: 14px; - padding: 10px 20px; - font-weight: 600; + background-color: #1ab394; + border-color: #1ab394; + color: #ffffff; + font-size: 14px; + padding: 10px 20px; + font-weight: 600; } .landing-page .btn-primary:hover, .landing-page .btn-primary:focus, .landing-page .btn-primary:active, .landing-page .btn-primary.active, .landing-page .open .dropdown-toggle.btn-primary { - background-color: #179d82; - border-color: #179d82; - color: #FFFFFF; + background-color: #179d82; + border-color: #179d82; + color: #ffffff; } .landing-page .btn-primary:active, .landing-page .btn-primary.active, .landing-page .open .dropdown-toggle.btn-primary { - background-image: none; + background-image: none; } .landing-page .btn-primary.disabled, .landing-page .btn-primary.disabled:hover, @@ -7304,338 +7315,338 @@ body.landing-page { .landing-page fieldset[disabled] .btn-primary:focus, .landing-page fieldset[disabled] .btn-primary:active, .landing-page fieldset[disabled] .btn-primary.active { - background-color: #1dc5a3; - border-color: #1dc5a3; + background-color: #1dc5a3; + border-color: #1dc5a3; } @media (min-width: 768px) { - .landing-page { - /* Navbar positioning foo */ - /* The navbar becomes detached from the top, so we round the corners */ - /* Bump up size of carousel content */ - } - .landing-page .navbar-wrapper { - margin-top: 20px; - } - .landing-page .navbar-wrapper .container { - padding-right: 15px; - padding-left: 15px; - } - .landing-page .navbar-wrapper .navbar { - padding-right: 0; - padding-left: 0; - } - .landing-page .navbar-wrapper .navbar { - border-radius: 4px; - } - .landing-page .carousel-caption p { - margin-bottom: 20px; - font-size: 14px; - line-height: 1.4; - } - .landing-page .featurette-heading { - font-size: 50px; - } + .landing-page { + /* Navbar positioning foo */ + /* The navbar becomes detached from the top, so we round the corners */ + /* Bump up size of carousel content */ + } + .landing-page .navbar-wrapper { + margin-top: 20px; + } + .landing-page .navbar-wrapper .container { + padding-right: 15px; + padding-left: 15px; + } + .landing-page .navbar-wrapper .navbar { + padding-right: 0; + padding-left: 0; + } + .landing-page .navbar-wrapper .navbar { + border-radius: 4px; + } + .landing-page .carousel-caption p { + margin-bottom: 20px; + font-size: 14px; + line-height: 1.4; + } + .landing-page .featurette-heading { + font-size: 50px; + } } @media (max-width: 992px) { - .landing-page .carousel-image { - display: none; - } + .landing-page .carousel-image { + display: none; + } } @media (max-width: 768px) { - .landing-page .carousel-caption, - .landing-page .carousel-caption.blank { - left: 5%; - top: 80px; - } - .landing-page .carousel-caption h1 { - font-size: 28px; - } - .landing-page .navbar.navbar-scroll .navbar-brand { - margin-top: 6px; - } - .landing-page .navbar-default { - background-color: #fff; - border-color: #fff; - padding: 15px 0; - } - .landing-page .navbar-default .navbar-nav > .active > a:focus { - background: transparent; - color: inherit; - } - .landing-page .navbar-default .nav li a { - color: #676a6c; - } - .landing-page .navbar-default .nav li a:hover { - color: #1ab394; - } - .landing-page .navbar-wrapper .navbar { - padding-top: 0; - padding-bottom: 5px; - border-bottom: 1px solid #e7eaec; - border-radius: 0; - } - .landing-page .nav > li > a { - padding: 25px 10px 15px 10px; - } - .landing-page .navbar-nav > li > a { - padding: 20px 10px; - } - .landing-page .navbar .navbar-brand { - margin-top: 6px; - border-radius: 5px; - font-size: 12px; - padding: 10px; - height: auto; - } - .landing-page .navbar-wrapper .navbar { - padding-left: 15px; - padding-right: 5px; - } - .landing-page .navbar-default .navbar-nav > .active > a, - .landing-page .navbar-default .navbar-nav > .active > a:hover { - color: inherit; - } - .landing-page .carousel-control { - display: none; - } + .landing-page .carousel-caption, + .landing-page .carousel-caption.blank { + left: 5%; + top: 80px; + } + .landing-page .carousel-caption h1 { + font-size: 28px; + } + .landing-page .navbar.navbar-scroll .navbar-brand { + margin-top: 6px; + } + .landing-page .navbar-default { + background-color: #fff; + border-color: #fff; + padding: 15px 0; + } + .landing-page .navbar-default .navbar-nav > .active > a:focus { + background: transparent; + color: inherit; + } + .landing-page .navbar-default .nav li a { + color: #676a6c; + } + .landing-page .navbar-default .nav li a:hover { + color: #1ab394; + } + .landing-page .navbar-wrapper .navbar { + padding-top: 0; + padding-bottom: 5px; + border-bottom: 1px solid #e7eaec; + border-radius: 0; + } + .landing-page .nav > li > a { + padding: 25px 10px 15px 10px; + } + .landing-page .navbar-nav > li > a { + padding: 20px 10px; + } + .landing-page .navbar .navbar-brand { + margin-top: 6px; + border-radius: 5px; + font-size: 12px; + padding: 10px; + height: auto; + } + .landing-page .navbar-wrapper .navbar { + padding-left: 15px; + padding-right: 5px; + } + .landing-page .navbar-default .navbar-nav > .active > a, + .landing-page .navbar-default .navbar-nav > .active > a:hover { + color: inherit; + } + .landing-page .carousel-control { + display: none; + } } @media (min-width: 992px) { - .landing-page .featurette-heading { - margin-top: 120px; - } + .landing-page .featurette-heading { + margin-top: 120px; + } } @media (max-width: 768px) { - .landing-page .navbar .navbar-header { - display: block; - float: none; - } - .landing-page .navbar .navbar-header .navbar-toggle { - background-color: #ffffff; - padding: 9px 10px; - border: none; - } + .landing-page .navbar .navbar-header { + display: block; + float: none; + } + .landing-page .navbar .navbar-header .navbar-toggle { + background-color: #ffffff; + padding: 9px 10px; + border: none; + } } body.rtls { - /* Theme config */ + /* Theme config */ } body.rtls #page-wrapper { - margin: 0 220px 0 0; + margin: 0 220px 0 0; } body.rtls .nav-second-level li a { - padding: 7px 35px 7px 10px; + padding: 7px 35px 7px 10px; } body.rtls .ibox-title h5 { - float: right; + float: right; } body.rtls .pull-right { - float: left !important; + float: left !important; } body.rtls .pull-left { - float: right !important; + float: right !important; } body.rtls .ibox-tools { - float: left; + float: left; } body.rtls .stat-percent { - float: left; + float: left; } body.rtls .navbar-right { - float: left !important; + float: left !important; } body.rtls .navbar-top-links li:last-child { - margin-left: 40px; - margin-right: 0; + margin-left: 40px; + margin-right: 0; } body.rtls .minimalize-styl-2 { - float: right; - margin: 14px 20px 5px 5px; + float: right; + margin: 14px 20px 5px 5px; } body.rtls .feed-element > .pull-left { - margin-left: 10px; - margin-right: 0; + margin-left: 10px; + margin-right: 0; } body.rtls .timeline-item .date { - text-align: left; + text-align: left; } body.rtls .timeline-item .date i { - left: 0; - right: auto; + left: 0; + right: auto; } body.rtls .timeline-item .content { - border-right: 1px solid #e7eaec; - border-left: none; + border-right: 1px solid #e7eaec; + border-left: none; } body.rtls .theme-config { - left: 0; - right: auto; + left: 0; + right: auto; } body.rtls .spin-icon { - border-radius: 0 20px 20px 0; + border-radius: 0 20px 20px 0; } body.rtls .toast-close-button { - float: left; + float: left; } body.rtls #toast-container > .toast:before { - margin: auto -1.5em auto 0.5em; + margin: auto -1.5em auto 0.5em; } body.rtls #toast-container > div { - padding: 15px 50px 15px 15px; + padding: 15px 50px 15px 15px; } body.rtls .center-orientation .vertical-timeline-icon i { - margin-left: 0; - margin-right: -12px; + margin-left: 0; + margin-right: -12px; } body.rtls .vertical-timeline-icon i { - right: 50%; - left: auto; - margin-left: auto; - margin-right: -12px; + right: 50%; + left: auto; + margin-left: auto; + margin-right: -12px; } body.rtls .file-box { - float: right; + float: right; } body.rtls ul.notes li { - float: right; + float: right; } body.rtls .chat-users, body.rtls .chat-statistic { - margin-right: -30px; - margin-left: auto; + margin-right: -30px; + margin-left: auto; } body.rtls .dropdown-menu > li > a { - text-align: right; + text-align: right; } body.rtls .b-r { - border-left: 1px solid #e7eaec; - border-right: none; + border-left: 1px solid #e7eaec; + border-right: none; } body.rtls .dd-list .dd-list { - padding-right: 30px; - padding-left: 0; + padding-right: 30px; + padding-left: 0; } body.rtls .dd-item > button { - float: right; + float: right; } body.rtls .theme-config-box { - margin-left: -220px; - margin-right: 0; + margin-left: -220px; + margin-right: 0; } body.rtls .theme-config-box.show { - margin-left: 0; - margin-right: 0; + margin-left: 0; + margin-right: 0; } body.rtls .spin-icon { - right: 0; - left: auto; + right: 0; + left: auto; } body.rtls .skin-settings { - margin-right: 40px; - margin-left: 0; + margin-right: 40px; + margin-left: 0; } body.rtls .skin-settings { - direction: ltr; + direction: ltr; } body.rtls .footer.fixed { - margin-right: 220px; - margin-left: 0; + margin-right: 220px; + margin-left: 0; } @media (max-width: 992px) { - body.rtls .chat-users, - body.rtls .chat-statistic { - margin-right: 0; - } + body.rtls .chat-users, + body.rtls .chat-statistic { + margin-right: 0; + } } body.rtls.mini-navbar .footer.fixed, body.body-small.mini-navbar .footer.fixed { - margin: 0 70px 0 0; + margin: 0 70px 0 0; } body.rtls.mini-navbar.fixed-sidebar .footer.fixed, body.body-small.mini-navbar .footer.fixed { - margin: 0 0 0 0; + margin: 0 0 0 0; } body.rtls.top-navigation .navbar-toggle { - float: right; - margin-left: 15px; - margin-right: 15px; + float: right; + margin-left: 15px; + margin-right: 15px; } .body-small.rtls.top-navigation .navbar-header { - float: none; + float: none; } body.rtls.top-navigation #page-wrapper { - margin: 0; + margin: 0; } body.rtls.mini-navbar #page-wrapper { - margin: 0 70px 0 0; + margin: 0 70px 0 0; } body.rtls.mini-navbar.fixed-sidebar #page-wrapper { - margin: 0 0 0 0; + margin: 0 0 0 0; } body.rtls.body-small.fixed-sidebar.mini-navbar #page-wrapper { - margin: 0 220px 0 0; + margin: 0 220px 0 0; } body.rtls.body-small.fixed-sidebar.mini-navbar .navbar-static-side { - width: 220px; + width: 220px; } .body-small.rtls .navbar-fixed-top { - margin-right: 0; + margin-right: 0; } .body-small.rtls .navbar-header { - float: right; + float: right; } body.rtls .navbar-top-links li:last-child { - margin-left: 20px; + margin-left: 20px; } body.rtls .top-navigation #page-wrapper, body.rtls.mini-navbar .top-navigation #page-wrapper, body.rtls.mini-navbar.top-navigation #page-wrapper { - margin: 0; + margin: 0; } body.rtls .top-navigation .footer.fixed, body.rtls.top-navigation .footer.fixed { - margin: 0; + margin: 0; } @media (max-width: 768px) { - body.rtls .navbar-top-links li:last-child { - margin-left: 20px; - } - .body-small.rtls #page-wrapper { - position: inherit; - margin: 0 0 0 0; - min-height: 1000px; - } - .body-small.rtls .navbar-static-side { - display: none; - z-index: 2001; - position: absolute; - width: 70px; - } - .body-small.rtls.mini-navbar .navbar-static-side { - display: block; - } - .rtls.fixed-sidebar.body-small .navbar-static-side { - display: none; - z-index: 2001; - position: fixed; - width: 220px; - } - .rtls.fixed-sidebar.body-small.mini-navbar .navbar-static-side { - display: block; - } + body.rtls .navbar-top-links li:last-child { + margin-left: 20px; + } + .body-small.rtls #page-wrapper { + position: inherit; + margin: 0 0 0 0; + min-height: 1000px; + } + .body-small.rtls .navbar-static-side { + display: none; + z-index: 2001; + position: absolute; + width: 70px; + } + .body-small.rtls.mini-navbar .navbar-static-side { + display: block; + } + .rtls.fixed-sidebar.body-small .navbar-static-side { + display: none; + z-index: 2001; + position: fixed; + width: 220px; + } + .rtls.fixed-sidebar.body-small.mini-navbar .navbar-static-side { + display: block; + } } .rtls .ltr-support { - direction: ltr; + direction: ltr; } .rtls.mini-navbar .nav-second-level, .rtls.mini-navbar li.active .nav-second-level { - left: auto; - right: 70px; + left: auto; + right: 70px; } .rtls #right-sidebar { - left: -260px; - right: auto; + left: -260px; + right: auto; } .rtls #right-sidebar.sidebar-open { - left: 0; + left: 0; } /* * @@ -7644,95 +7655,95 @@ body.rtls.top-navigation .footer.fixed { * */ .theme-config { - position: absolute; - top: 90px; - right: 0; - overflow: hidden; + position: absolute; + top: 90px; + right: 0; + overflow: hidden; } .theme-config-box { - margin-right: -220px; - position: relative; - z-index: 2000; - transition-duration: 0.8s; + margin-right: -220px; + position: relative; + z-index: 2000; + transition-duration: 0.8s; } .theme-config-box.show { - margin-right: 0; + margin-right: 0; } .spin-icon { - background: #1ab394; - position: absolute; - padding: 7px 10px 7px 13px; - border-radius: 20px 0 0 20px; - font-size: 16px; - top: 0; - left: 0; - width: 40px; - color: #fff; - cursor: pointer; + background: #1ab394; + position: absolute; + padding: 7px 10px 7px 13px; + border-radius: 20px 0 0 20px; + font-size: 16px; + top: 0; + left: 0; + width: 40px; + color: #fff; + cursor: pointer; } .skin-settings { - width: 220px; - margin-left: 40px; - background: #f3f3f4; + width: 220px; + margin-left: 40px; + background: #f3f3f4; } .skin-settings .title { - background: #efefef; - text-align: center; - text-transform: uppercase; - font-weight: 600; - display: block; - padding: 10px 15px; - font-size: 12px; + background: #efefef; + text-align: center; + text-transform: uppercase; + font-weight: 600; + display: block; + padding: 10px 15px; + font-size: 12px; } .setings-item { - padding: 10px 30px; + padding: 10px 30px; } .setings-item.skin { - text-align: center; + text-align: center; } .setings-item .switch { - float: right; + float: right; } .skin-name a { - text-transform: uppercase; + text-transform: uppercase; } .setings-item a { - color: #fff; + color: #fff; } .default-skin, .blue-skin, .ultra-skin, .yellow-skin { - text-align: center; + text-align: center; } .default-skin { - font-weight: 600; - background: #283A49; + font-weight: 600; + background: #283a49; } .default-skin:hover { - background: #1e2e3d; + background: #1e2e3d; } .blue-skin { - font-weight: 600; - background: url("../img/patterns/header-profile-skin-1.png") repeat scroll 0 0; + font-weight: 600; + background: url('../img/patterns/header-profile-skin-1.png') repeat scroll 0 0; } .blue-skin:hover { - background: #0d8ddb; + background: #0d8ddb; } .yellow-skin { - font-weight: 600; - background: url("../img/patterns/header-profile-skin-3.png") repeat scroll 0 100%; + font-weight: 600; + background: url('../img/patterns/header-profile-skin-3.png') repeat scroll 0 100%; } .yellow-skin:hover { - background: #ce8735; + background: #ce8735; } .ultra-skin { - padding: 20px 10px; - font-weight: 600; - background: url("../img/patterns/3.png") repeat scroll 0 0; + padding: 20px 10px; + font-weight: 600; + background: url('../img/patterns/3.png') repeat scroll 0 0; } .ultra-skin:hover { - background: url("../img/patterns/4.png") repeat scroll 0 0; + background: url('../img/patterns/4.png') repeat scroll 0 0; } /* * @@ -7741,104 +7752,104 @@ body.rtls.top-navigation .footer.fixed { * */ .skin-1 .minimalize-styl-2 { - margin: 14px 5px 5px 30px; + margin: 14px 5px 5px 30px; } .skin-1 .navbar-top-links li:last-child { - margin-right: 30px; + margin-right: 30px; } .skin-1.fixed-nav .minimalize-styl-2 { - margin: 14px 5px 5px 15px; + margin: 14px 5px 5px 15px; } .skin-1 .spin-icon { - background: #0e9aef !important; + background: #0e9aef !important; } .skin-1 .nav-header { - background-color: #0e9aef; - background-image: url('../img/patterns/header-profile-skin-1.png'); + background-color: #0e9aef; + background-image: url('../img/patterns/header-profile-skin-1.png'); } .skin-1.mini-navbar .nav-second-level { - background: #3e495f; + background: #3e495f; } .skin-1 .breadcrumb { - background: transparent; + background: transparent; } .skin-1 .page-heading { - border: none; + border: none; } .skin-1 .nav > li.active { - background: #3a4459; + background: #3a4459; } .skin-1 .nav > li > a { - color: #9ea6b9; + color: #9ea6b9; } .skin-1 ul.nav-second-level { - background-color: inherit; + background-color: inherit; } .skin-1 .nav > li.active > a { - color: #fff; + color: #fff; } .skin-1 .navbar-minimalize { - background: #0e9aef; - border-color: #0e9aef; + background: #0e9aef; + border-color: #0e9aef; } body.skin-1 { - background: #3e495f; + background: #3e495f; } .skin-1 .navbar-static-top { - background: #ffffff; + background: #ffffff; } .skin-1 .dashboard-header { - background: transparent; - border-bottom: none !important; - border-top: none; - padding: 20px 30px 10px 30px; + background: transparent; + border-bottom: none !important; + border-top: none; + padding: 20px 30px 10px 30px; } .fixed-nav.skin-1 .navbar-fixed-top { - background: #fff; + background: #fff; } .skin-1 .wrapper-content { - padding: 30px 15px; + padding: 30px 15px; } .skin-1 #page-wrapper { - background: #f4f6fa; + background: #f4f6fa; } .skin-1 .ibox-title, .skin-1 .ibox-content { - border-width: 1px; + border-width: 1px; } .skin-1 .ibox-content:last-child { - border-style: solid solid solid solid; + border-style: solid solid solid solid; } .skin-1 .nav > li.active { - border: none; + border: none; } .skin-1 .nav-header { - padding: 35px 25px 25px 25px; + padding: 35px 25px 25px 25px; } .skin-1 .nav-header a.dropdown-toggle { - color: #fff; - margin-top: 10px; + color: #fff; + margin-top: 10px; } .skin-1 .nav-header a.dropdown-toggle .text-muted { - color: #fff; - opacity: 0.8; + color: #fff; + opacity: 0.8; } .skin-1 .profile-element { - text-align: center; + text-align: center; } .skin-1 .img-circle { - border-radius: 5px; + border-radius: 5px; } .skin-1 .navbar-default .nav > li > a:hover, .skin-1 .navbar-default .nav > li > a:focus { - background: #3a4459; - color: #fff; + background: #3a4459; + color: #fff; } .skin-1 .nav.nav-tabs > li.active > a { - color: #555; + color: #555; } .skin-1 .nav.nav-tabs > li.active { - background: transparent; + background: transparent; } /* * @@ -7847,148 +7858,148 @@ body.skin-1 { * */ body.skin-2 { - color: #565758 !important; + color: #565758 !important; } .skin-2 .minimalize-styl-2 { - margin: 14px 5px 5px 25px; + margin: 14px 5px 5px 25px; } .skin-2 .navbar-top-links li:last-child { - margin-right: 25px; + margin-right: 25px; } .skin-2 .spin-icon { - background: #23c6c8 !important; + background: #23c6c8 !important; } .skin-2 .nav-header { - background-color: #23c6c8; - background-image: url('../img/patterns/header-profile-skin-2.png'); + background-color: #23c6c8; + background-image: url('../img/patterns/header-profile-skin-2.png'); } .skin-2.mini-navbar .nav-second-level { - background: #ededed; + background: #ededed; } .skin-2 .breadcrumb { - background: transparent; + background: transparent; } .skin-2.fixed-nav .minimalize-styl-2 { - margin: 14px 5px 5px 15px; + margin: 14px 5px 5px 15px; } .skin-2 .page-heading { - border: none; - background: rgba(255, 255, 255, 0.7); + border: none; + background: rgba(255, 255, 255, 0.7); } .skin-2 ul.nav-second-level { - background-color: inherit; + background-color: inherit; } .skin-2 .nav > li.active { - background: #e0e0e0; + background: #e0e0e0; } .skin-2 .logo-element { - padding: 17px 0; + padding: 17px 0; } .skin-2 .nav > li > a, .skin-2 .welcome-message { - color: #edf6ff; + color: #edf6ff; } .skin-2 #top-search::-moz-placeholder { - color: #edf6ff; - opacity: 0.5; + color: #edf6ff; + opacity: 0.5; } .skin-2 #side-menu > li > a, .skin-2 .nav.nav-second-level > li > a { - color: #586b7d; + color: #586b7d; } .skin-2 .nav > li.active > a { - color: #213a53; + color: #213a53; } .skin-2.mini-navbar .nav-header { - background: #213a53; + background: #213a53; } .skin-2 .navbar-minimalize { - background: #23c6c8; - border-color: #23c6c8; + background: #23c6c8; + border-color: #23c6c8; } .skin-2 .border-bottom { - border-bottom: none !important; + border-bottom: none !important; } .skin-2 #top-search { - color: #fff; + color: #fff; } body.skin-2 #wrapper { - background-color: #ededed; + background-color: #ededed; } .skin-2 .navbar-static-top { - background: #213a53; + background: #213a53; } .fixed-nav.skin-2 .navbar-fixed-top { - background: #213a53; - border-bottom: none !important; + background: #213a53; + border-bottom: none !important; } .skin-2 .nav-header { - padding: 30px 25px 30px 25px; + padding: 30px 25px 30px 25px; } .skin-2 .dashboard-header { - background: rgba(255, 255, 255, 0.4); - border-bottom: none !important; - border-top: none; - padding: 20px 30px 20px 30px; + background: rgba(255, 255, 255, 0.4); + border-bottom: none !important; + border-top: none; + padding: 20px 30px 20px 30px; } .skin-2 .wrapper-content { - padding: 30px 15px; + padding: 30px 15px; } .skin-2 .dashoard-1 .wrapper-content { - padding: 0 30px 25px 30px; + padding: 0 30px 25px 30px; } .skin-2 .ibox-title { - background: rgba(255, 255, 255, 0.7); - border: none; - margin-bottom: 1px; + background: rgba(255, 255, 255, 0.7); + border: none; + margin-bottom: 1px; } .skin-2 .ibox-content { - background: rgba(255, 255, 255, 0.4); - border: none !important; + background: rgba(255, 255, 255, 0.4); + border: none !important; } .skin-2 #page-wrapper { - background: #f6f6f6; - background: -webkit-radial-gradient(center, ellipse cover, #f6f6f6 20%, #d5d5d5 100%); - background: -o-radial-gradient(center, ellipse cover, #f6f6f6 20%, #d5d5d5 100%); - background: -ms-radial-gradient(center, ellipse cover, #f6f6f6 20%, #d5d5d5 100%); - background: radial-gradient(ellipse at center, #f6f6f6 20%, #d5d5d5 100%); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#f6f6f6, endColorstr=#d5d5d5)"; + background: #f6f6f6; + background: -webkit-radial-gradient(center, ellipse cover, #f6f6f6 20%, #d5d5d5 100%); + background: -o-radial-gradient(center, ellipse cover, #f6f6f6 20%, #d5d5d5 100%); + background: -ms-radial-gradient(center, ellipse cover, #f6f6f6 20%, #d5d5d5 100%); + background: radial-gradient(ellipse at center, #f6f6f6 20%, #d5d5d5 100%); + -ms-filter: 'progid:DXImageTransform.Microsoft.gradient(startColorstr=#f6f6f6, endColorstr=#d5d5d5)'; } .skin-2 .ibox-title, .skin-2 .ibox-content { - border-width: 1px; + border-width: 1px; } .skin-2 .ibox-content:last-child { - border-style: solid solid solid solid; + border-style: solid solid solid solid; } .skin-2 .nav > li.active { - border: none; + border: none; } .skin-2 .nav-header a.dropdown-toggle { - color: #edf6ff; - margin-top: 10px; + color: #edf6ff; + margin-top: 10px; } .skin-2 .nav-header a.dropdown-toggle .text-muted { - color: #edf6ff; - opacity: 0.8; + color: #edf6ff; + opacity: 0.8; } .skin-2 .img-circle { - border-radius: 10px; + border-radius: 10px; } .skin-2 .nav.navbar-top-links > li > a:hover, .skin-2 .nav.navbar-top-links > li > a:focus { - background: #1a2d41; + background: #1a2d41; } .skin-2 .navbar-default .nav > li > a:hover, .skin-2 .navbar-default .nav > li > a:focus { - background: #e0e0e0; - color: #213a53; + background: #e0e0e0; + color: #213a53; } .skin-2 .nav.nav-tabs > li.active > a { - color: #555; + color: #555; } .skin-2 .nav.nav-tabs > li.active { - background: transparent; + background: transparent; } /* * @@ -7997,540 +8008,540 @@ body.skin-2 #wrapper { * */ .skin-3 .minimalize-styl-2 { - margin: 14px 5px 5px 30px; + margin: 14px 5px 5px 30px; } .skin-3 .navbar-top-links li:last-child { - margin-right: 30px; + margin-right: 30px; } .skin-3.fixed-nav .minimalize-styl-2 { - margin: 14px 5px 5px 15px; + margin: 14px 5px 5px 15px; } .skin-3 .spin-icon { - background: #ecba52 !important; + background: #ecba52 !important; } body.boxed-layout.skin-3 #wrapper { - background: #3e2c42; + background: #3e2c42; } .skin-3 .nav-header { - background-color: #ecba52; - background-image: url('../img/patterns/header-profile-skin-3.png'); + background-color: #ecba52; + background-image: url('../img/patterns/header-profile-skin-3.png'); } .skin-3.mini-navbar .nav-second-level { - background: #3e2c42; + background: #3e2c42; } .skin-3 .breadcrumb { - background: transparent; + background: transparent; } .skin-3 .page-heading { - border: none; + border: none; } .skin-3 ul.nav-second-level { - background-color: inherit; + background-color: inherit; } .skin-3 .nav > li.active { - background: #38283c; + background: #38283c; } .fixed-nav.skin-3 .navbar-fixed-top { - background: #fff; + background: #fff; } .skin-3 .nav > li > a { - color: #948b96; + color: #948b96; } .skin-3 .nav > li.active > a { - color: #fff; + color: #fff; } .skin-3 .navbar-minimalize { - background: #ecba52; - border-color: #ecba52; + background: #ecba52; + border-color: #ecba52; } body.skin-3 { - background: #3e2c42; + background: #3e2c42; } .skin-3 .navbar-static-top { - background: #ffffff; + background: #ffffff; } .skin-3 .dashboard-header { - background: transparent; - border-bottom: none !important; - border-top: none; - padding: 20px 30px 10px 30px; + background: transparent; + border-bottom: none !important; + border-top: none; + padding: 20px 30px 10px 30px; } .skin-3 .wrapper-content { - padding: 30px 15px; + padding: 30px 15px; } .skin-3 #page-wrapper { - background: #f4f6fa; + background: #f4f6fa; } .skin-3 .ibox-title, .skin-3 .ibox-content { - border-width: 1px; + border-width: 1px; } .skin-3 .ibox-content:last-child { - border-style: solid solid solid solid; + border-style: solid solid solid solid; } .skin-3 .nav > li.active { - border: none; + border: none; } .skin-3 .nav-header { - padding: 35px 25px 25px 25px; + padding: 35px 25px 25px 25px; } .skin-3 .nav-header a.dropdown-toggle { - color: #fff; - margin-top: 10px; + color: #fff; + margin-top: 10px; } .skin-3 .nav-header a.dropdown-toggle .text-muted { - color: #fff; - opacity: 0.8; + color: #fff; + opacity: 0.8; } .skin-3 .profile-element { - text-align: center; + text-align: center; } .skin-3 .img-circle { - border-radius: 5px; + border-radius: 5px; } .skin-3 .navbar-default .nav > li > a:hover, .skin-3 .navbar-default .nav > li > a:focus { - background: #38283c; - color: #fff; + background: #38283c; + color: #fff; } .skin-3 .nav.nav-tabs > li.active > a { - color: #555; + color: #555; } .skin-3 .nav.nav-tabs > li.active { - background: transparent; + background: transparent; } body.md-skin { - background-color: #ffffff; + background-color: #ffffff; } .md-skin .nav-header { - background: url("../img/patterns/4.png") no-repeat; + background: url('../img/patterns/4.png') no-repeat; } .md-skin ul.nav-second-level { - background-color: inherit; + background-color: inherit; } .md-skin .font-bold { - font-weight: 500; + font-weight: 500; } .md-skin .wrapper-content { - padding: 30px 20px 40px; + padding: 30px 20px 40px; } @media (max-width: 768px) { - .md-skin .wrapper-content { - padding: 30px 0 40px; - } + .md-skin .wrapper-content { + padding: 30px 0 40px; + } } .md-skin .page-heading { - border-bottom: none !important; - border-top: 0; - padding: 0 10px 20px 10px; - box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.34), 0 0 6px 0 rgba(0, 0, 0, 0.14); + border-bottom: none !important; + border-top: 0; + padding: 0 10px 20px 10px; + box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.34), 0 0 6px 0 rgba(0, 0, 0, 0.14); } .md-skin .full-height-layout .page-heading { - border-bottom: 1px solid #e7eaec !important; + border-bottom: 1px solid #e7eaec !important; } .md-skin .ibox { - clear: both; - margin-bottom: 25px; - margin-top: 0; - padding: 0; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + clear: both; + margin-bottom: 25px; + margin-top: 0; + padding: 0; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } .md-skin .ibox.border-bottom { - border-bottom: none !important; + border-bottom: none !important; } .md-skin .ibox-title, .md-skin .ibox-content { - border-style: none; + border-style: none; } .md-skin .ibox-title h5 { - font-size: 16px; - font-weight: 400; + font-size: 16px; + font-weight: 400; } .md-skin a.close-canvas-menu { - color: #ffffff; + color: #ffffff; } .md-skin .welcome-message { - color: #ffffff; - font-weight: 300; + color: #ffffff; + font-weight: 300; } .md-skin #top-search::-moz-placeholder { - color: #ffffff; + color: #ffffff; } .md-skin #top-search::-webkit-input-placeholder { - color: #ffffff; + color: #ffffff; } .md-skin .landing-page.navbar-default.navbar-scroll { - background-color: #fff !important; + background-color: #fff !important; } .md-skin .landing-page.navbar-default { - background-color: transparent !important; - box-shadow: none; + background-color: transparent !important; + box-shadow: none; } .md-skin .nav > li > a { - color: #676a6c; - padding: 14px 20px 14px 25px; + color: #676a6c; + padding: 14px 20px 14px 25px; } .md-skin .nav.navbar-right > li > a { - color: #ffffff; + color: #ffffff; } .md-skin .nav > li.active > a { - color: #5b5d5f; - font-weight: 700; + color: #5b5d5f; + font-weight: 700; } .md-skin .navbar-default .nav > li > a:hover, .md-skin .navbar-default .nav > li > a:focus { - font-weight: 700; - color: #5b5d5f; + font-weight: 700; + color: #5b5d5f; } .md-skin .nav .open > a, .md-skin .nav .open > a:hover, .md-skin .nav .open > a:focus { - background: #1ab394; + background: #1ab394; } .md-skin .navbar-top-links li { - display: inline-table; + display: inline-table; } .md-skin .navbar-top-links .dropdown-menu li { - display: block; + display: block; } .md-skin .pace-done .nav-header { - transition: all 0.4s; + transition: all 0.4s; } .md-skin .nav > li.active { - background: #f8f8f9; + background: #f8f8f9; } .md-skin .nav-second-level li a { - padding: 7px 10px 7px 52px; + padding: 7px 10px 7px 52px; } .md-skin .nav-third-level li a { - padding-left: 62px; + padding-left: 62px; } .md-skin .navbar-top-links li a { - padding: 20px 10px; - min-height: 50px; + padding: 20px 10px; + min-height: 50px; } .md-skin .nav > li > a { - font-weight: 400; + font-weight: 400; } .md-skin .navbar-static-side .nav > li > a:focus, .md-skin .navbar-static-side .nav > li > a:hover { - background-color: inherit; + background-color: inherit; } .md-skin .navbar-top-links .dropdown-menu li a { - padding: 3px 20px; - min-height: inherit; + padding: 3px 20px; + min-height: inherit; } .md-skin .nav-header .navbar-fixed-top a { - color: #ffffff; + color: #ffffff; } .md-skin .nav-header .text-muted { - color: #ffffff; + color: #ffffff; } .md-skin .navbar-form-custom .form-control { - font-weight: 300; + font-weight: 300; } .md-skin .mini-navbar .nav-second-level { - background-color: inherit; + background-color: inherit; } .md-skin .mini-navbar li.active .nav-second-level { - left: 65px; + left: 65px; } .md-skin .canvas-menu.mini-navbar .nav-second-level { - background: inherit; + background: inherit; } .md-skin .pace-done .navbar-static-side, .md-skin .pace-done .nav-header, .md-skin .pace-done li.active, .md-skin .pace-done #page-wrapper, .md-skin .pace-done .footer { - -webkit-transition: all 0.4s; - -moz-transition: all 0.4s; - -o-transition: all 0.4s; - transition: all 0.4s; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -o-transition: all 0.4s; + transition: all 0.4s; } .md-skin .navbar-fixed-top { - background: #fff; - transition-duration: 0.4s; - z-index: 2030; - border-bottom: none !important; + background: #fff; + transition-duration: 0.4s; + z-index: 2030; + border-bottom: none !important; } .md-skin .navbar-fixed-top, .md-skin .navbar-static-top { - background-color: #1ab394 !important; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + background-color: #1ab394 !important; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } .md-skin .navbar-static-side { - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } .md-skin #right-sidebar { - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - border: none; - z-index: 900; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border: none; + z-index: 900; } .md-skin .white-bg .navbar-fixed-top, .md-skin .white-bg .navbar-static-top { - background: #fff !important; + background: #fff !important; } .md-skin .contact-box { - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - border: none; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border: none; } .md-skin .dashboard-header { - border-bottom: none !important; - border-top: 0; - padding: 20px 20px 20px 20px; - margin: 30px 20px 0 20px; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border-bottom: none !important; + border-top: 0; + padding: 20px 20px 20px 20px; + margin: 30px 20px 0 20px; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } @media (max-width: 768px) { - .md-skin .dashboard-header { - margin: 20px 0 0 0; - } + .md-skin .dashboard-header { + margin: 20px 0 0 0; + } } .md-skin ul.notes li div { - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } .md-skin .file { - border: none; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border: none; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } .md-skin .mail-box { - background-color: #ffffff; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - padding: 0; - margin-bottom: 20px; - border: none; + background-color: #ffffff; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + padding: 0; + margin-bottom: 20px; + border: none; } .md-skin .mail-box-header { - border: none; - background-color: #ffffff; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); - padding: 30px 20px 20px 20px; + border: none; + background-color: #ffffff; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + padding: 30px 20px 20px 20px; } .md-skin .mailbox-content { - border: none; - padding: 20px; - background: #ffffff; + border: none; + padding: 20px; + background: #ffffff; } .md-skin .social-feed-box { - border: none; - background: #fff; - margin-bottom: 15px; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + border: none; + background: #fff; + margin-bottom: 15px; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } .md-skin.landing-page .navbar-default { - background-color: transparent !important; - border-color: transparent; - transition: all 0.3s ease-in-out 0s; - box-shadow: none; + background-color: transparent !important; + border-color: transparent; + transition: all 0.3s ease-in-out 0s; + box-shadow: none; } .md-skin.landing-page .navbar-default.navbar-scroll, .md-skin.landing-page.body-small .navbar-default { - background-color: #ffffff !important; + background-color: #ffffff !important; } .md-skin.landing-page .nav > li.active { - background: inherit; + background: inherit; } .md-skin.landing-page .navbar-scroll .navbar-nav > li > a { - padding: 20px 10px; + padding: 20px 10px; } .md-skin.landing-page .nav > li > a { - padding: 25px 10px 15px 10px; + padding: 25px 10px 15px 10px; } .md-skin.landing-page .navbar-default .navbar-nav > li > a:hover, .md-skin.landing-page .navbar-default .navbar-nav > li > a:focus { - background: inherit; - color: #1ab394; + background: inherit; + color: #1ab394; } .md-skin.landing-page.body-small .nav.navbar-right > li > a { - color: #676a6c; + color: #676a6c; } .md-skin .landing_link a, .md-skin .special_link a { - color: #ffffff !important; + color: #ffffff !important; } .md-skin.canvas-menu.mini-navbar .nav-second-level { - background: #f8f8f9; + background: #f8f8f9; } .md-skin.mini-navbar .nav-second-level { - background-color: #ffffff; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + background-color: #ffffff; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } .md-skin.mini-navbar .nav-second-level li a { - padding-left: 0; + padding-left: 0; } .md-skin.mini-navbar.fixed-sidebar .nav-second-level li a { - padding-left: 52px; + padding-left: 52px; } .md-skin.top-navigation .nav.navbar-right > li > a { - padding: 15px 20px; - color: #676a6c; + padding: 15px 20px; + color: #676a6c; } .md-skin.top-navigation .nav > li a:hover, .md-skin .top-navigation .nav > li a:focus, .md-skin.top-navigation .nav .open > a, .md-skin.top-navigation .nav .open > a:hover, .md-skin.top-navigation .nav .open > a:focus { - color: #1ab394; - background: #ffffff; + color: #1ab394; + background: #ffffff; } .md-skin.top-navigation .nav > li.active a { - color: #1ab394; - background: #ffffff; + color: #1ab394; + background: #ffffff; } .md-skin.fixed-nav #side-menu { - background-color: #fff; + background-color: #fff; } .md-skin.fixed-nav #wrapper.top-navigation #page-wrapper { - margin-top: 0; + margin-top: 0; } .md-skin.fixed-sidebar.mini-navbar .navbar-static-side { - width: 0; + width: 0; } .md-skin.fixed-sidebar.mini-navbar #page-wrapper { - margin: 0 0 0 0; + margin: 0 0 0 0; } .md-skin.body-small.fixed-sidebar.mini-navbar #page-wrapper { - margin: 0 0 0 0; + margin: 0 0 0 0; } .md-skin.body-small.fixed-sidebar.mini-navbar .navbar-static-side { - width: 220px; - background-color: #ffffff; + width: 220px; + background-color: #ffffff; } .md-skin.boxed-layout #wrapper { - background-color: #ffffff; + background-color: #ffffff; } .md-skin.canvas-menu nav.navbar-static-side { - z-index: 2001; - background: #ffffff; - height: 100%; - position: fixed; - display: none; + z-index: 2001; + background: #ffffff; + height: 100%; + position: fixed; + display: none; } @media (min-width: 768px) { - #page-wrapper { - position: inherit; - margin: 0 0 0 220px; - min-height: 100vh; - } - .navbar-static-side { - z-index: 2001; - position: absolute; - width: 220px; - } - .navbar-top-links .dropdown-messages, - .navbar-top-links .dropdown-tasks, - .navbar-top-links .dropdown-alerts { - margin-left: auto; - } + #page-wrapper { + position: inherit; + margin: 0 0 0 220px; + min-height: 100vh; + } + .navbar-static-side { + z-index: 2001; + position: absolute; + width: 220px; + } + .navbar-top-links .dropdown-messages, + .navbar-top-links .dropdown-tasks, + .navbar-top-links .dropdown-alerts { + margin-left: auto; + } } @media (max-width: 768px) { - #page-wrapper { - position: inherit; - margin: 0 0 0 0; - min-height: 100vh; - } - .body-small .navbar-static-side { - display: none; - z-index: 2001; - position: absolute; - width: 70px; - } - .body-small.mini-navbar .navbar-static-side { - display: block; - } - .lock-word { - display: none; - } - .navbar-form-custom { - display: none; - } - .navbar-header { - display: inline; - float: left; - } - .sidebar-panel { - z-index: 2; - position: relative; - width: auto; - min-height: 100% !important; - } - .sidebar-content .wrapper { - padding-right: 0; - z-index: 1; - } - .fixed-sidebar.body-small .navbar-static-side { - display: none; - z-index: 2001; - position: fixed; - width: 220px; - } - .fixed-sidebar.body-small.mini-navbar .navbar-static-side { - display: block; - } - .ibox-tools { - float: none; - text-align: right; - display: block; - } - .navbar-static-side { - display: none; - } - body:not(.mini-navbar) { - -webkit-transition: background-color 500ms linear; - -moz-transition: background-color 500ms linear; - -o-transition: background-color 500ms linear; - -ms-transition: background-color 500ms linear; - transition: background-color 500ms linear; - background-color: #f3f3f4; - } + #page-wrapper { + position: inherit; + margin: 0 0 0 0; + min-height: 100vh; + } + .body-small .navbar-static-side { + display: none; + z-index: 2001; + position: absolute; + width: 70px; + } + .body-small.mini-navbar .navbar-static-side { + display: block; + } + .lock-word { + display: none; + } + .navbar-form-custom { + display: none; + } + .navbar-header { + display: inline; + float: left; + } + .sidebar-panel { + z-index: 2; + position: relative; + width: auto; + min-height: 100% !important; + } + .sidebar-content .wrapper { + padding-right: 0; + z-index: 1; + } + .fixed-sidebar.body-small .navbar-static-side { + display: none; + z-index: 2001; + position: fixed; + width: 220px; + } + .fixed-sidebar.body-small.mini-navbar .navbar-static-side { + display: block; + } + .ibox-tools { + float: none; + text-align: right; + display: block; + } + .navbar-static-side { + display: none; + } + body:not(.mini-navbar) { + -webkit-transition: background-color 500ms linear; + -moz-transition: background-color 500ms linear; + -o-transition: background-color 500ms linear; + -ms-transition: background-color 500ms linear; + transition: background-color 500ms linear; + background-color: #f3f3f4; + } } @media (max-width: 350px) { - .timeline-item .date { - text-align: left; - width: 110px; - position: relative; - padding-top: 30px; - } - .timeline-item .date i { - position: absolute; - top: 0; - left: 15px; - padding: 5px; - width: 30px; - text-align: center; - border: 1px solid #e7eaec; - background: #f8f8f8; - } - .timeline-item .content { - border-left: none; - border-top: 1px solid #e7eaec; - padding-top: 10px; - min-height: 100px; - } - .nav.navbar-top-links li.dropdown { - display: none; - } - .ibox-tools { - float: none; - text-align: left; - display: inline-block; - } + .timeline-item .date { + text-align: left; + width: 110px; + position: relative; + padding-top: 30px; + } + .timeline-item .date i { + position: absolute; + top: 0; + left: 15px; + padding: 5px; + width: 30px; + text-align: center; + border: 1px solid #e7eaec; + background: #f8f8f8; + } + .timeline-item .content { + border-left: none; + border-top: 1px solid #e7eaec; + padding-top: 10px; + min-height: 100px; + } + .nav.navbar-top-links li.dropdown { + display: none; + } + .ibox-tools { + float: none; + text-align: left; + display: inline-block; + } } /* Only demo */ @media (max-width: 1000px) { - .welcome-message { - display: none; - } + .welcome-message { + display: none; + } } @media print { - nav.navbar-static-side { - display: none; - } - body { - overflow: visible !important; - } - #page-wrapper { - margin: 0; - } + nav.navbar-static-side { + display: none; + } + body { + overflow: visible !important; + } + #page-wrapper { + margin: 0; + } } diff --git a/assets/Inspinia/inspinia-helpers.js b/assets/Inspinia/inspinia-helpers.js index c5eeecd1..9d7d0315 100644 --- a/assets/Inspinia/inspinia-helpers.js +++ b/assets/Inspinia/inspinia-helpers.js @@ -1,12 +1,12 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ 'use strict'; function removeStyleAttribute(elementId) { - setTimeout(function() { + setTimeout(function () { $(elementId).removeAttr('style'); }, 500); } @@ -17,55 +17,56 @@ function sideMenuFadeIn() { module.exports = { // Full height of sidebar - fix_height: function() { - var heightWithoutNavbar = $("body > #wrapper").height() - 61; - $(".sidebard-panel").css("min-height", heightWithoutNavbar + "px"); + fix_height: function () { + var heightWithoutNavbar = $('body > #wrapper').height() - 61; + $('.sidebard-panel').css('min-height', heightWithoutNavbar + 'px'); var navbarHeigh = $('nav.navbar-default').height(); var wrapperHeigh = $('#page-wrapper').height(); if (navbarHeigh > wrapperHeigh) { - $('#page-wrapper').css("min-height", navbarHeigh + "px"); + $('#page-wrapper').css('min-height', navbarHeigh + 'px'); } if (navbarHeigh < wrapperHeigh) { - $('#page-wrapper').css("min-height", $(window).height() + "px"); + $('#page-wrapper').css('min-height', $(window).height() + 'px'); } if ($('body').hasClass('fixed-nav')) { - $('#page-wrapper').css("min-height", $(window).height() - 60 + "px"); + $('#page-wrapper').css('min-height', $(window).height() - 60 + 'px'); } }, - fixBodyClassByResolution: function() { + fixBodyClassByResolution: function () { if ($(document).width() < 769) { - $('body').addClass('body-small') + $('body').addClass('body-small'); } else { - $('body').removeClass('body-small') + $('body').removeClass('body-small'); } }, // check if browser support HTML5 local storage - localStorageSupport: function() { - return (('localStorage' in window) && window['localStorage'] !== null) + localStorageSupport: function () { + return 'localStorage' in window && window['localStorage'] !== null; }, // For demo purpose - animation css script - animationHover: function(element, animation) { + animationHover: function (element, animation) { element = $(element); element.hover( - function() { + function () { element.addClass('animated ' + animation); }, - function() { + function () { //wait for animation to finish before removing classes - window.setTimeout(function() { + window.setTimeout(function () { element.removeClass('animated ' + animation); }, 2000); - }); + }, + ); }, - SmoothlyMenu: function() { + SmoothlyMenu: function () { if (!$('body').hasClass('mini-navbar') || $('body').hasClass('body-small')) { // Hide menu in order to smoothly turn on when maximize menu $('#side-menu').hide(); @@ -82,18 +83,18 @@ module.exports = { }, // Dragable panels - WinMove: function() { - var element = "[class*=col]"; - var handle = ".ibox-title"; - var connect = "[class*=col]"; + WinMove: function () { + var element = '[class*=col]'; + var handle = '.ibox-title'; + var connect = '[class*=col]'; $(element) .sortable({ handle: handle, connectWith: connect, tolerance: 'pointer', forcePlaceholderSize: true, - opacity: 0.8 + opacity: 0.8, }) .disableSelection(); - } + }, }; diff --git a/assets/Inspinia/inspinia.js b/assets/Inspinia/inspinia.js index 27a367c3..825bd8da 100755 --- a/assets/Inspinia/inspinia.js +++ b/assets/Inspinia/inspinia.js @@ -1,18 +1,17 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. * * INSPINIA - Responsive Admin Theme * version 2.7.1 */ $(document).ready(function () { - // Add body-small class if window less than 768px if ($(this).width() < 769) { - $('body').addClass('body-small') + $('body').addClass('body-small'); } else { - $('body').removeClass('body-small') + $('body').removeClass('body-small'); } // MetisMenu @@ -52,7 +51,7 @@ $(document).ready(function () { // Close menu in canvas mode $('.close-canvas-menu').on('click', function () { - $("body").toggleClass("mini-navbar"); + $('body').toggleClass('mini-navbar'); SmoothlyMenu(); }); @@ -86,42 +85,39 @@ $(document).ready(function () { // Minimalize menu $('.navbar-minimalize').on('click', function (event) { event.preventDefault(); - $("body").toggleClass("mini-navbar"); + $('body').toggleClass('mini-navbar'); SmoothlyMenu(); - }); // Tooltips demo $('.tooltip-demo').tooltip({ - selector: "[data-toggle=tooltip]", - container: "body" + selector: '[data-toggle=tooltip]', + container: 'body', }); - // Full height of sidebar function fix_height() { - var heightWithoutNavbar = $("body > #wrapper").height() - 61; - $(".sidebar-panel").css("min-height", heightWithoutNavbar + "px"); + var heightWithoutNavbar = $('body > #wrapper').height() - 61; + $('.sidebar-panel').css('min-height', heightWithoutNavbar + 'px'); var navbarheight = $('nav.navbar-default').height(); var wrapperHeight = $('#page-wrapper').height(); if (navbarheight > wrapperHeight) { - $('#page-wrapper').css("min-height", navbarheight + "px"); + $('#page-wrapper').css('min-height', navbarheight + 'px'); } if (navbarheight < wrapperHeight) { - $('#page-wrapper').css("min-height", $(window).height() + "px"); + $('#page-wrapper').css('min-height', $(window).height() + 'px'); } if ($('body').hasClass('fixed-nav')) { if (navbarheight > wrapperHeight) { - $('#page-wrapper').css("min-height", navbarheight + "px"); + $('#page-wrapper').css('min-height', navbarheight + 'px'); } else { - $('#page-wrapper').css("min-height", $(window).height() - 60 + "px"); + $('#page-wrapper').css('min-height', $(window).height() - 60 + 'px'); } } - } fix_height(); @@ -135,23 +131,21 @@ $(document).ready(function () { } }); - $(window).bind("load resize scroll", function () { - if (!$("body").hasClass('body-small')) { + $(window).bind('load resize scroll', function () { + if (!$('body').hasClass('body-small')) { fix_height(); } }); - $("[data-toggle=popover]") - .popover(); + $('[data-toggle=popover]').popover(); }); - // Minimalize menu when screen is less than 768px -$(window).bind("resize", function () { +$(window).bind('resize', function () { if ($(this).width() < 769) { - $('body').addClass('body-small') + $('body').addClass('body-small'); } else { - $('body').removeClass('body-small') + $('body').removeClass('body-small'); } }); @@ -159,12 +153,11 @@ $(window).bind("resize", function () { // Set proper body class and plugins based on user configuration $(document).ready(function () { if (localStorageSupport()) { - - var collapse = localStorage.getItem("collapse_menu"); - var fixedsidebar = localStorage.getItem("fixedsidebar"); - var fixednavbar = localStorage.getItem("fixednavbar"); - var boxedlayout = localStorage.getItem("boxedlayout"); - var fixedfooter = localStorage.getItem("fixedfooter"); + var collapse = localStorage.getItem('collapse_menu'); + var fixedsidebar = localStorage.getItem('fixedsidebar'); + var fixednavbar = localStorage.getItem('fixednavbar'); + var boxedlayout = localStorage.getItem('boxedlayout'); + var fixedfooter = localStorage.getItem('fixedfooter'); var body = $('body'); @@ -177,12 +170,11 @@ $(document).ready(function () { if (!body.hasClass('body-small')) { body.addClass('mini-navbar'); } - } } if (fixednavbar == 'on') { - $(".navbar-static-top").removeClass('navbar-static-top').addClass('navbar-fixed-top'); + $('.navbar-static-top').removeClass('navbar-static-top').addClass('navbar-fixed-top'); body.addClass('fixed-nav'); } @@ -191,14 +183,14 @@ $(document).ready(function () { } if (fixedfooter == 'on') { - $(".footer").addClass('fixed'); + $('.footer').addClass('fixed'); } } }); // check if browser support HTML5 local storage function localStorageSupport() { - return (('localStorage' in window) && window['localStorage'] !== null) + return 'localStorage' in window && window['localStorage'] !== null; } // For demo purpose - animation css script @@ -213,7 +205,8 @@ function animationHover(element, animation) { window.setTimeout(function () { element.removeClass('animated ' + animation); }, 2000); - }); + }, + ); } function SmoothlyMenu() { @@ -221,16 +214,14 @@ function SmoothlyMenu() { // Hide menu in order to smoothly turn on when maximize menu $('#side-menu').hide(); // For smoothly turn on menu - setTimeout( - function () { - $('#side-menu').fadeIn(400); - }, 200); + setTimeout(function () { + $('#side-menu').fadeIn(400); + }, 200); } else if ($('body').hasClass('fixed-sidebar')) { $('#side-menu').hide(); - setTimeout( - function () { - $('#side-menu').fadeIn(400); - }, 100); + setTimeout(function () { + $('#side-menu').fadeIn(400); + }, 100); } else { // Remove all inline style from jquery fadeIn function to reset menu state $('#side-menu').removeAttr('style'); @@ -239,18 +230,16 @@ function SmoothlyMenu() { // Dragable panels function WinMove() { - var element = "[class*=col]"; - var handle = ".ibox-title"; - var connect = "[class*=col]"; - $(element).sortable( - { + var element = '[class*=col]'; + var handle = '.ibox-title'; + var connect = '[class*=col]'; + $(element) + .sortable({ handle: handle, connectWith: connect, tolerance: 'pointer', forcePlaceholderSize: true, - opacity: 0.8 + opacity: 0.8, }) .disableSelection(); } - - diff --git a/assets/Zed/js/modules/editor.js b/assets/Zed/js/modules/editor.js index c6b5c8f1..27eb00e9 100644 --- a/assets/Zed/js/modules/editor.js +++ b/assets/Zed/js/modules/editor.js @@ -6,10 +6,10 @@ 'use strict'; module.exports = { - getGlobalConfig: function(configName) { - return Boolean(configName && - window.editorConfiguration && - window.editorConfiguration[configName]) ? window.editorConfiguration[configName] : null; + getGlobalConfig: function (configName) { + return Boolean(configName && window.editorConfiguration && window.editorConfiguration[configName]) + ? window.editorConfiguration[configName] + : null; }, mergeConfigs: function (baseConfig, newConfig) { for (var property in newConfig) { @@ -38,11 +38,11 @@ module.exports = { return baseConfig; }, - getConfig: function(content) { - content = content || ''; + getConfig: function (content) { + content = content || ''; return { - height: 300, + height: 300, maxHeight: 600, inputText: content, focus: true, @@ -54,14 +54,14 @@ module.exports = { ['para', ['ul', 'ol', 'paragraph']], ['insert', ['picture', 'link', 'video', 'table', 'hr']], ['misc', ['undo', 'redo', 'codeview']], - ['custom', []] - ] + ['custom', []], + ], }; - } + }, }; if (!Array.prototype.findIndex) { - Array.prototype.findIndex = function(predicate) { + Array.prototype.findIndex = function (predicate) { if (this === null) { throw new TypeError('Array.prototype.findIndex called on null or undefined'); } @@ -85,7 +85,7 @@ if (!Array.prototype.findIndex) { var updateToolbarOptions = function (baseConfig, newConfig) { newConfig.toolbar.forEach(function (newToolbarOption) { - var existingOptionIndex = baseConfig.toolbar.findIndex(function(defaultToolbarOption) { + var existingOptionIndex = baseConfig.toolbar.findIndex(function (defaultToolbarOption) { return newToolbarOption[0] === defaultToolbarOption[0]; }); diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index ceb6cd83..097aa6bc 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -12,32 +12,30 @@ var Ibox = require('./libs/ibox'); var dataTable = require('./libs/data-table'); var safeChecks = require('./libs/safe-checks'); -var dataTablesSearchDelay = function() { +var dataTablesSearchDelay = function () { var dataTablesWrapper = $('.dataTables_wrapper'); - dataTablesWrapper.each(function(index, wrapper) { + dataTablesWrapper.each(function (index, wrapper) { var searchInput = $(wrapper).find('input[type="search"]'); var dataTable = $(wrapper).find('.gui-table-data'); var dataTableApi = dataTable.dataTable().api(); var timeOutId = 0; - if(searchInput.length && dataTable.length) { - searchInput - .unbind() - .bind("input", function(e) { + if (searchInput.length && dataTable.length) { + searchInput.unbind().bind('input', function (e) { var self = this; clearTimeout(timeOutId); - timeOutId = setTimeout(function() { + timeOutId = setTimeout(function () { dataTableApi.search(self.value).draw(); }, 1000); return; }); } }); -} +}; -var editorInit = function() { - $('.html-editor').each(function() { +var editorInit = function () { + $('.html-editor').each(function () { var $textarea = $(this); var textareaConfigName = $textarea.data('editor-config'); @@ -51,7 +49,7 @@ var editorInit = function() { }); }; -$(document).ready(function() { +$(document).ready(function () { // editor editorInit(); @@ -59,19 +57,15 @@ $(document).ready(function() { dataTable.setTableErrorMode('none'); /* Draw data tables */ - $('.gui-table-data') - .on('error.dt', dataTable.onError) - .dataTable(dataTable.defaultConfiguration); + $('.gui-table-data').on('error.dt', dataTable.onError).dataTable(dataTable.defaultConfiguration); /* Draw data tables without search */ - $('.gui-table-data-no-search') - .on('error.dt', dataTable.onError) - .dataTable(dataTable.noSearchConfiguration); + $('.gui-table-data-no-search').on('error.dt', dataTable.onError).dataTable(dataTable.noSearchConfiguration); /* All elements with the same class will have the same height */ $('.fix-height').sprykerFixHeight(); - $('.spryker-form-autocomplete').each(function(key, value) { + $('.spryker-form-autocomplete').each(function (key, value) { var autoCompletedField = $(value); if (autoCompletedField.data('url') === 'undefined') { return; @@ -83,32 +77,32 @@ $(document).ready(function() { autoCompletedField.autocomplete({ source: autoCompletedField.data('url'), - minLength: 3 + minLength: 3, }); }); $('.table-dependency tr').hover( - function(){ + function () { $(this).addClass('warning'); }, - function(){ + function () { $(this).removeClass('warning'); - } + }, ); $('.table-dependency .btn-xs').hover( - function(){ + function () { $(this).removeClass('btn-default'); $(this).addClass('btn-primary'); }, - function(){ + function () { $(this).addClass('btn-default'); $(this).removeClass('btn-primary'); - } + }, ); $('.dropdown-toggle').dropdown(); - $('.spryker-form-select2combobox').each(function(index, element) { + $('.spryker-form-select2combobox').each(function (index, element) { var select2InitOptions = {}; var selectElement = $(element); @@ -119,29 +113,33 @@ $(document).ready(function() { dataType: 'json', delay: 500, cache: true, - data: function(params) { + data: function (params) { params.page = params.page || 1; return params; - } + }, }, - minimumInputLength: 3 + minimumInputLength: 3, }; - selectElement.on('select2:unselecting', function(e) { + selectElement.on('select2:unselecting', function (e) { var idSelected = e.params.args.data.id; var selectedValues = selectElement.val(); - selectElement.val(selectedValues.filter(function(value) { - return value !== ('' + idSelected); - })).trigger('change'); + selectElement + .val( + selectedValues.filter(function (value) { + return value !== '' + idSelected; + }), + ) + .trigger('change'); }); } selectElement.select2(select2InitOptions); }); - $('.more-history').click(function(e){ + $('.more-history').click(function (e) { e.preventDefault(); var idProductItem = $(this).data('id'); var $history = $('#history_details_' + idProductItem); @@ -154,7 +152,7 @@ $(document).ready(function() { }); /* Init tabs */ - $('.tabs-container').each(function(index, item){ + $('.tabs-container').each(function (index, item) { new Tabs(item, dataTable.onTabChange); }); @@ -168,6 +166,6 @@ $(document).ready(function() { safeChecks.addSafeDatetimeCheck(); }); -$(window).on('load', function() { +$(window).on('load', function () { dataTablesSearchDelay(); }); diff --git a/assets/Zed/js/modules/legacy/SprykerAjax.js b/assets/Zed/js/modules/legacy/SprykerAjax.js index 994bc896..2aa15201 100644 --- a/assets/Zed/js/modules/legacy/SprykerAjax.js +++ b/assets/Zed/js/modules/legacy/SprykerAjax.js @@ -1,13 +1,13 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ 'use strict'; var SprykerAjaxCallbacks = require('./SprykerAjaxCallbacks'); -module.exports = new function() { +module.exports = new (function () { var self = this; /** if ajax url is null, the action will be in the same page */ @@ -19,7 +19,7 @@ module.exports = new function() { * @param newUrl * @returns {SprykerAjax} */ - self.setUrl = function(newUrl){ + self.setUrl = function (newUrl) { self.url = newUrl; return self; }; @@ -28,20 +28,19 @@ module.exports = new function() { * @param newDataType * @returns {SprykerAjax} */ - self.setDataType = function(newDataType){ + self.setDataType = function (newDataType) { self.dataType = newDataType; return self; }; - self.ajaxSubmit = function(options, callbackFunction, parameters, isGet) { - var callType = (!!isGet) ? 'get' : 'post'; + self.ajaxSubmit = function (options, callbackFunction, parameters, isGet) { + var callType = !!isGet ? 'get' : 'post'; return $.ajax({ url: this.url, type: callType, dataType: this.dataType, - data: options - }) - .done(function(response){ + data: options, + }).done(function (response) { if (typeof callbackFunction === 'function') { return callbackFunction(response, parameters); } else if (typeof callbackFunction === 'string') { @@ -53,10 +52,10 @@ module.exports = new function() { }; /* change active */ - self.changeActiveStatus = function(elementId) { + self.changeActiveStatus = function (elementId) { var options = { - id: elementId + id: elementId, }; self.ajaxSubmit(options, 'changeStatusMarkInGrid'); }; -}; +})(); diff --git a/assets/Zed/js/modules/legacy/SprykerAjaxCallbacks.js b/assets/Zed/js/modules/legacy/SprykerAjaxCallbacks.js index 93028966..95c25073 100644 --- a/assets/Zed/js/modules/legacy/SprykerAjaxCallbacks.js +++ b/assets/Zed/js/modules/legacy/SprykerAjaxCallbacks.js @@ -1,11 +1,11 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ 'use strict'; -module.exports = new function() { +module.exports = new (function () { var self = this; /* HTML success code */ @@ -23,11 +23,11 @@ module.exports = new function() { * * @param ajaxResponse */ - self.changeStatusMarkInGrid = function(ajaxResponse){ + self.changeStatusMarkInGrid = function (ajaxResponse) { if (ajaxResponse.code == self.codeSuccess) { $('#active-' + ajaxResponse.id).prop('checked', ajaxResponse.newStatus); } else { self.alerter.error(ajaxResponse.message); } }; -}; +})(); diff --git a/assets/Zed/js/modules/legacy/SprykerAlert.js b/assets/Zed/js/modules/legacy/SprykerAlert.js index ca5749da..2f81f89a 100644 --- a/assets/Zed/js/modules/legacy/SprykerAlert.js +++ b/assets/Zed/js/modules/legacy/SprykerAlert.js @@ -1,63 +1,58 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ 'use strict'; -module.exports = new function() { +module.exports = new (function () { var self = this; - self.init = function(){ + self.init = function () { self.clean(); }; - self.success = function(message){ + self.success = function (message) { var data = { - "message": message, - "title": "Success" + message: message, + title: 'Success', }; self.clangeClass('alert-success'); self.displayAlert(data); }; - self.error = function(message) { + self.error = function (message) { var data = { - "message": message, - "title": "Error" + message: message, + title: 'Error', }; self.clangeClass('alert-danger'); self.displayAlert(data); }; - self.info = function(message){ + self.info = function (message) { return self.custom(message); }; - self.custom = function(message, title){ + self.custom = function (message, title) { var data = { - "message": message, - "title": title || "Info" + message: message, + title: title || 'Info', }; self.clangeClass('alert-info'); self.displayAlert(data); }; - self.clean = function() { - $('#modal-content').removeClass([ - 'alert-success', - 'alert-danger', - 'alert-info', - 'alert-warning' - ]); + self.clean = function () { + $('#modal-content').removeClass(['alert-success', 'alert-danger', 'alert-info', 'alert-warning']); $('#modal-title').html(''); $('#modal-body').html(''); }; - self.clangeClass = function(className){ + self.clangeClass = function (className) { self.clean(); $('#modal-content').addClass(className); }; - self.displayAlert = function(options){ + self.displayAlert = function (options) { $('#modal-title').html(options.title); $('#modal-body').html(options.message); self.show(); }; - self.show = function(){ + self.show = function () { $('#modal-alert').modal('show'); }; self.init(); -}; +})(); diff --git a/assets/Zed/js/modules/legacy/fixHeight.js b/assets/Zed/js/modules/legacy/fixHeight.js index 48d93013..a21307a8 100644 --- a/assets/Zed/js/modules/legacy/fixHeight.js +++ b/assets/Zed/js/modules/legacy/fixHeight.js @@ -1,36 +1,36 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ 'use strict'; -(function($){ - $.fn.sprykerFixHeight = function(){ +(function ($) { + $.fn.sprykerFixHeight = function () { var self = this; var maxHeight = 0; - self.getFullHeight = function(element) { + self.getFullHeight = function (element) { return element.outerHeight(); }; - self.calculateElementCoreHeight = function(element){ + self.calculateElementCoreHeight = function (element) { return parseInt(maxHeight - self.getElementExtraHeight(element)); }; - self.getElementExtraHeight = function(element){ + self.getElementExtraHeight = function (element) { return self.getFullHeight(element) - element.height(); }; - self.changeHeight = function(element){ - element.each(function(){ + self.changeHeight = function (element) { + element.each(function () { var newHeight = self.calculateElementCoreHeight($(this)); $(this).height(newHeight + 'px'); }); }; - self.calculateHeight = function(element){ - element.each(function(){ + self.calculateHeight = function (element) { + element.each(function () { var elementHeight = self.getFullHeight($(this)); if (elementHeight > maxHeight) { maxHeight = elementHeight; @@ -41,4 +41,4 @@ self.calculateHeight(self); }; -}(jQuery)); +})(jQuery); diff --git a/assets/Zed/js/modules/libs/data-table.js b/assets/Zed/js/modules/libs/data-table.js index b6bad9fe..e384b949 100644 --- a/assets/Zed/js/modules/libs/data-table.js +++ b/assets/Zed/js/modules/libs/data-table.js @@ -1,38 +1,37 @@ 'use strict'; function getLocale() { - var locale = document.documentElement.dataset.applicationLocale - if (typeof(locale) === 'string') { - + var locale = document.documentElement.dataset.applicationLocale; + if (typeof locale === 'string') { return locale.split('_')[0].split('-')[0]; } return 'en'; } function getTranslation(locale) { - return require('./i18n/' + locale + '.json') + return require('./i18n/' + locale + '.json'); } -var locale = getLocale() +var locale = getLocale(); var defaultConfiguration = { scrollX: 'auto', autoWidth: false, - language: getTranslation(locale) + language: getTranslation(locale), }; var noSearchConfiguration = { bFilter: false, bInfo: false, scrollX: 'auto', - autoWidth: false + autoWidth: false, }; function setTableErrorMode(errorMode) { $.fn.dataTable.ext.errMode = errorMode || 'none'; } -function onTabChange (tabId) { +function onTabChange(tabId) { var $tab = $(tabId); var $dataTables = $tab.find('.gui-table-data, .gui-table-data-no-search'); @@ -41,7 +40,7 @@ function onTabChange (tabId) { } } -function onError (e, settings, techNote, message) { +function onError(e, settings, techNote, message) { var debugMessage = ''; if (DEV) { @@ -50,9 +49,11 @@ function onError (e, settings, techNote, message) { window.sweetAlert({ title: 'Error', - text: 'Something went wrong. Please refresh the page or try again later.' + debugMessage, + text: + 'Something went wrong. Please refresh the page or try again later.' + + debugMessage, html: true, - type: 'error' + type: 'error', }); } @@ -61,5 +62,5 @@ module.exports = { noSearchConfiguration: noSearchConfiguration, setTableErrorMode: setTableErrorMode, onTabChange: onTabChange, - onError: onError + onError: onError, }; diff --git a/assets/Zed/js/modules/libs/dependent-select-box.js b/assets/Zed/js/modules/libs/dependent-select-box.js index 093dd5b5..4f653917 100644 --- a/assets/Zed/js/modules/libs/dependent-select-box.js +++ b/assets/Zed/js/modules/libs/dependent-select-box.js @@ -10,20 +10,20 @@ function DependentSelectBox(options) { this.data = {}; - this.init = function() { + this.init = function () { this.mapEvents(); }; - this.mapEvents = function() { + this.mapEvents = function () { var self = this; - this.$trigger.on('change', function() { + this.$trigger.on('change', function () { self.getData($(this)); self.requestData(); }); }; - this.getData = function(trigger) { + this.getData = function (trigger) { if (this.dataKey.length) { this.data[this.dataKey] = trigger.val(); @@ -33,21 +33,21 @@ function DependentSelectBox(options) { this.data = trigger.val(); }; - this.requestData = function() { + this.requestData = function () { var self = this; $.ajax({ url: this.requestUrl, type: 'POST', data: this.data, - success: function(data) { + success: function (data) { self.updateTargetSelectBox(data); self.successCallback ? self.successCallback(data) : null; - } + }, }); }; - this.updateTargetSelectBox = function(data) { + this.updateTargetSelectBox = function (data) { if (data.length === 0) { this.clearTargetSelectBox(true); @@ -58,16 +58,24 @@ function DependentSelectBox(options) { this.fillTargetSelectBox(data); }; - this.clearTargetSelectBox = function(isDisabled) { + this.clearTargetSelectBox = function (isDisabled) { this.$target.attr('disabled', isDisabled); this.$target.find('option:gt(0)').remove(); }; - this.fillTargetSelectBox = function(data) { + this.fillTargetSelectBox = function (data) { var self = this; - $.each(data[this.responseData.response], function(index, element) { - self.$target.append($('')); + $.each(data[this.responseData.response], function (index, element) { + self.$target.append( + $( + '', + ), + ); }); }; diff --git a/assets/Zed/js/modules/libs/i18n/af.json b/assets/Zed/js/modules/libs/i18n/af.json index 236666b5..c1be3411 100644 --- a/assets/Zed/js/modules/libs/i18n/af.json +++ b/assets/Zed/js/modules/libs/i18n/af.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Geen data beskikbaar in tabel", - "sInfo": "uitstalling _START_ to _END_ of _TOTAL_ inskrywings", - "sInfoEmpty": "uitstalling 0 to 0 of 0 inskrywings", - "sInfoFiltered": "(gefiltreer uit _MAX_ totaal inskrywings)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "uitstal _MENU_ inskrywings", - "sLoadingRecords": "laai...", - "sProcessing": "verwerking...", - "sSearch": "soektog:", - "sZeroRecords": "Geen treffers gevind", - "oPaginate": { - "sFirst": "eerste", - "sLast": "laaste", - "sNext": "volgende", - "sPrevious": "vorige" - }, - "oAria": { - "sSortAscending": ": aktiveer kolom stygende te sorteer", - "sSortDescending": ": aktiveer kolom orde te sorteer" - } -} \ No newline at end of file + "sEmptyTable": "Geen data beskikbaar in tabel", + "sInfo": "uitstalling _START_ to _END_ of _TOTAL_ inskrywings", + "sInfoEmpty": "uitstalling 0 to 0 of 0 inskrywings", + "sInfoFiltered": "(gefiltreer uit _MAX_ totaal inskrywings)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "uitstal _MENU_ inskrywings", + "sLoadingRecords": "laai...", + "sProcessing": "verwerking...", + "sSearch": "soektog:", + "sZeroRecords": "Geen treffers gevind", + "oPaginate": { + "sFirst": "eerste", + "sLast": "laaste", + "sNext": "volgende", + "sPrevious": "vorige" + }, + "oAria": { + "sSortAscending": ": aktiveer kolom stygende te sorteer", + "sSortDescending": ": aktiveer kolom orde te sorteer" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/am.json b/assets/Zed/js/modules/libs/i18n/am.json index 73d66c47..9a65b710 100644 --- a/assets/Zed/js/modules/libs/i18n/am.json +++ b/assets/Zed/js/modules/libs/i18n/am.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "ባዶ ሰንጠረዥ", - "sInfo": "ከጠቅላላው _TOTAL_ ዝርዝሮች ውስጥ ከ _START_ እስከ _END_ ያሉት ዝርዝር", - "sInfoEmpty": "ከጠቅላላው 0 ዝርዝሮች ውስጥ ከ 0 እስከ 0 ያሉት ዝርዝር", - "sInfoFiltered": "(ከጠቅላላው _MAX_ የተመረጡ ዝርዝሮች)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "የዝርዝሮች ብዛት _MENU_", + "sEmptyTable": "ባዶ ሰንጠረዥ", + "sInfo": "ከጠቅላላው _TOTAL_ ዝርዝሮች ውስጥ ከ _START_ እስከ _END_ ያሉት ዝርዝር", + "sInfoEmpty": "ከጠቅላላው 0 ዝርዝሮች ውስጥ ከ 0 እስከ 0 ያሉት ዝርዝር", + "sInfoFiltered": "(ከጠቅላላው _MAX_ የተመረጡ ዝርዝሮች)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "የዝርዝሮች ብዛት _MENU_", "sLoadingRecords": "በማቅረብ ላይ...", - "sProcessing": "በማቀናበር ላይ...", - "sSearch": "ፈልግ:", - "sZeroRecords": "ከሚፈለገው ጋር የሚሚሳሰል ዝርዝር አልተገኘም", + "sProcessing": "በማቀናበር ላይ...", + "sSearch": "ፈልግ:", + "sZeroRecords": "ከሚፈለገው ጋር የሚሚሳሰል ዝርዝር አልተገኘም", "oPaginate": { - "sFirst": "መጀመሪያ", - "sLast": "መጨረሻ", - "sNext": "ቀጣዩ", + "sFirst": "መጀመሪያ", + "sLast": "መጨረሻ", + "sNext": "ቀጣዩ", "sPrevious": "የበፊቱ" }, "oAria": { - "sSortAscending": ": ከመጀመሪያ ወደ መጨረሻ(ወጪ) አደራደር", + "sSortAscending": ": ከመጀመሪያ ወደ መጨረሻ(ወጪ) አደራደር", "sSortDescending": ": ከመጨረሻ ወደ መጀመሪያ(ወራጅ) አደራደር" } } diff --git a/assets/Zed/js/modules/libs/i18n/ar.json b/assets/Zed/js/modules/libs/i18n/ar.json index bab31b5e..74ca8649 100644 --- a/assets/Zed/js/modules/libs/i18n/ar.json +++ b/assets/Zed/js/modules/libs/i18n/ar.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "ليست هناك بيانات متاحة في الجدول", - "sLoadingRecords": "جارٍ التحميل...", - "sProcessing": "جارٍ التحميل...", - "sLengthMenu": "أظهر _MENU_ مدخلات", - "sZeroRecords": "لم يعثر على أية سجلات", - "sInfo": "إظهار _START_ إلى _END_ من أصل _TOTAL_ مدخل", - "sInfoEmpty": "يعرض 0 إلى 0 من أصل 0 سجل", - "sInfoFiltered": "(منتقاة من مجموع _MAX_ مُدخل)", - "sInfoPostFix": "", - "sSearch": "ابحث:", - "sUrl": "", - "oPaginate": { - "sFirst": "الأول", - "sPrevious": "السابق", - "sNext": "التالي", - "sLast": "الأخير" - }, - "oAria": { - "sSortAscending": ": تفعيل لترتيب العمود تصاعدياً", - "sSortDescending": ": تفعيل لترتيب العمود تنازلياً" - } + "sEmptyTable": "ليست هناك بيانات متاحة في الجدول", + "sLoadingRecords": "جارٍ التحميل...", + "sProcessing": "جارٍ التحميل...", + "sLengthMenu": "أظهر _MENU_ مدخلات", + "sZeroRecords": "لم يعثر على أية سجلات", + "sInfo": "إظهار _START_ إلى _END_ من أصل _TOTAL_ مدخل", + "sInfoEmpty": "يعرض 0 إلى 0 من أصل 0 سجل", + "sInfoFiltered": "(منتقاة من مجموع _MAX_ مُدخل)", + "sInfoPostFix": "", + "sSearch": "ابحث:", + "sUrl": "", + "oPaginate": { + "sFirst": "الأول", + "sPrevious": "السابق", + "sNext": "التالي", + "sLast": "الأخير" + }, + "oAria": { + "sSortAscending": ": تفعيل لترتيب العمود تصاعدياً", + "sSortDescending": ": تفعيل لترتيب العمود تنازلياً" + } } diff --git a/assets/Zed/js/modules/libs/i18n/be.json b/assets/Zed/js/modules/libs/i18n/be.json index 98a49810..5b28ff84 100644 --- a/assets/Zed/js/modules/libs/i18n/be.json +++ b/assets/Zed/js/modules/libs/i18n/be.json @@ -1,21 +1,21 @@ { - "sProcessing": "Пачакайце...", - "sLengthMenu": "Паказваць _MENU_ запісаў", - "sZeroRecords": "Запісы адсутнічаюць.", - "sInfo": "Запісы з _START_ па _END_ з _TOTAL_ запісаў", - "sInfoEmpty": "Запісы з 0 па 0 з 0 запісаў", - "sInfoFiltered": "(адфільтравана з _MAX_ запісаў)", - "sInfoPostFix": "", - "sSearch": "Пошук:", - "sUrl": "", - "oPaginate": { - "sFirst": "Першая", - "sPrevious": "Папярэдняя", - "sNext": "Наступная", - "sLast": "Апошняя" - }, - "oAria": { - "sSortAscending": ": актываваць для сартавання слупка па ўзрастанні", - "sSortDescending": ": актываваць для сартавання слупка па змяншэнні" - } -} \ No newline at end of file + "sProcessing": "Пачакайце...", + "sLengthMenu": "Паказваць _MENU_ запісаў", + "sZeroRecords": "Запісы адсутнічаюць.", + "sInfo": "Запісы з _START_ па _END_ з _TOTAL_ запісаў", + "sInfoEmpty": "Запісы з 0 па 0 з 0 запісаў", + "sInfoFiltered": "(адфільтравана з _MAX_ запісаў)", + "sInfoPostFix": "", + "sSearch": "Пошук:", + "sUrl": "", + "oPaginate": { + "sFirst": "Першая", + "sPrevious": "Папярэдняя", + "sNext": "Наступная", + "sLast": "Апошняя" + }, + "oAria": { + "sSortAscending": ": актываваць для сартавання слупка па ўзрастанні", + "sSortDescending": ": актываваць для сартавання слупка па змяншэнні" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/bg.json b/assets/Zed/js/modules/libs/i18n/bg.json index 908b8107..6ddf37d9 100644 --- a/assets/Zed/js/modules/libs/i18n/bg.json +++ b/assets/Zed/js/modules/libs/i18n/bg.json @@ -1,17 +1,17 @@ { - "sProcessing": "Обработка на резултатите...", - "sLengthMenu": "Показване на _MENU_ резултата", - "sZeroRecords": "Няма намерени резултати", - "sInfo": "Показване на резултати от _START_ до _END_ от общо _TOTAL_", - "sInfoEmpty": "Показване на резултати от 0 до 0 от общо 0", - "sInfoFiltered": "(филтрирани от общо _MAX_ резултата)", - "sInfoPostFix": "", - "sSearch": "Търсене:", - "sUrl": "", - "oPaginate": { - "sFirst": "Първа", - "sPrevious": "Предишна", - "sNext": "Следваща", - "sLast": "Последна" - } + "sProcessing": "Обработка на резултатите...", + "sLengthMenu": "Показване на _MENU_ резултата", + "sZeroRecords": "Няма намерени резултати", + "sInfo": "Показване на резултати от _START_ до _END_ от общо _TOTAL_", + "sInfoEmpty": "Показване на резултати от 0 до 0 от общо 0", + "sInfoFiltered": "(филтрирани от общо _MAX_ резултата)", + "sInfoPostFix": "", + "sSearch": "Търсене:", + "sUrl": "", + "oPaginate": { + "sFirst": "Първа", + "sPrevious": "Предишна", + "sNext": "Следваща", + "sLast": "Последна" + } } diff --git a/assets/Zed/js/modules/libs/i18n/ca.json b/assets/Zed/js/modules/libs/i18n/ca.json index 4a75503d..bf9b8945 100644 --- a/assets/Zed/js/modules/libs/i18n/ca.json +++ b/assets/Zed/js/modules/libs/i18n/ca.json @@ -1,17 +1,17 @@ { - "sProcessing": "Processant...", - "sLengthMenu": "Mostra _MENU_ registres", - "sZeroRecords": "No s'han trobat registres.", - "sInfo": "Mostrant de _START_ a _END_ de _TOTAL_ registres", - "sInfoEmpty": "Mostrant de 0 a 0 de 0 registres", - "sInfoFiltered": "(filtrat de _MAX_ total registres)", - "sInfoPostFix": "", - "sSearch": "Filtrar:", - "sUrl": "", - "oPaginate": { - "sFirst": "Primer", - "sPrevious": "Anterior", - "sNext": "Següent", - "sLast": "Últim" - } + "sProcessing": "Processant...", + "sLengthMenu": "Mostra _MENU_ registres", + "sZeroRecords": "No s'han trobat registres.", + "sInfo": "Mostrant de _START_ a _END_ de _TOTAL_ registres", + "sInfoEmpty": "Mostrant de 0 a 0 de 0 registres", + "sInfoFiltered": "(filtrat de _MAX_ total registres)", + "sInfoPostFix": "", + "sSearch": "Filtrar:", + "sUrl": "", + "oPaginate": { + "sFirst": "Primer", + "sPrevious": "Anterior", + "sNext": "Següent", + "sLast": "Últim" + } } diff --git a/assets/Zed/js/modules/libs/i18n/cs.json b/assets/Zed/js/modules/libs/i18n/cs.json index cfcfc0fb..75f42ec1 100644 --- a/assets/Zed/js/modules/libs/i18n/cs.json +++ b/assets/Zed/js/modules/libs/i18n/cs.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Tabulka neobsahuje žádná data", - "sInfo": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů", - "sInfoEmpty": "Zobrazuji 0 až 0 z 0 záznamů", - "sInfoFiltered": "(filtrováno z celkem _MAX_ záznamů)", - "sInfoPostFix": "", - "sInfoThousands": " ", - "sLengthMenu": "Zobraz záznamů _MENU_", - "sLoadingRecords": "Načítám...", - "sProcessing": "Provádím...", - "sSearch": "Hledat:", - "sZeroRecords": "Žádné záznamy nebyly nalezeny", - "oPaginate": { - "sFirst": "První", - "sLast": "Poslední", - "sNext": "Další", - "sPrevious": "Předchozí" - }, - "oAria": { - "sSortAscending": ": aktivujte pro řazení sloupce vzestupně", - "sSortDescending": ": aktivujte pro řazení sloupce sestupně" - } + "sEmptyTable": "Tabulka neobsahuje žádná data", + "sInfo": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů", + "sInfoEmpty": "Zobrazuji 0 až 0 z 0 záznamů", + "sInfoFiltered": "(filtrováno z celkem _MAX_ záznamů)", + "sInfoPostFix": "", + "sInfoThousands": " ", + "sLengthMenu": "Zobraz záznamů _MENU_", + "sLoadingRecords": "Načítám...", + "sProcessing": "Provádím...", + "sSearch": "Hledat:", + "sZeroRecords": "Žádné záznamy nebyly nalezeny", + "oPaginate": { + "sFirst": "První", + "sLast": "Poslední", + "sNext": "Další", + "sPrevious": "Předchozí" + }, + "oAria": { + "sSortAscending": ": aktivujte pro řazení sloupce vzestupně", + "sSortDescending": ": aktivujte pro řazení sloupce sestupně" + } } diff --git a/assets/Zed/js/modules/libs/i18n/cy.json b/assets/Zed/js/modules/libs/i18n/cy.json index b846b686..03dfcf09 100644 --- a/assets/Zed/js/modules/libs/i18n/cy.json +++ b/assets/Zed/js/modules/libs/i18n/cy.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Dim data ar gael yn y tabl", - "sInfo": "Dangos _START_ i _END_ o _TOTAL_ cofnod", - "sInfoEmpty": "Dangos 0 i 0 o 0 cofnod", - "sInfoFiltered": "(wedi hidlo o gyfanswm o _MAX_ cofnod)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Dangos _MENU_ cofnod", - "sLoadingRecords": "Wrthi'n llwytho...", - "sProcessing": "Wrthi'n prosesu...", - "sSearch": "Chwilio:", - "sZeroRecords": "Heb ddod o hyd i gofnodion sy'n cyfateb", - "oPaginate": { - "sFirst": "Cyntaf", - "sLast": "Olaf", - "sNext": "Nesaf", - "sPrevious": "Blaenorol" - }, - "oAria": { - "sSortAscending": ": rhoi ar waith i drefnu colofnau o'r lleiaf i'r mwyaf", - "sSortDescending": ": rhoi ar waith i drefnu colofnau o'r mwyaf i'r lleiaf" - } -} \ No newline at end of file + "sEmptyTable": "Dim data ar gael yn y tabl", + "sInfo": "Dangos _START_ i _END_ o _TOTAL_ cofnod", + "sInfoEmpty": "Dangos 0 i 0 o 0 cofnod", + "sInfoFiltered": "(wedi hidlo o gyfanswm o _MAX_ cofnod)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Dangos _MENU_ cofnod", + "sLoadingRecords": "Wrthi'n llwytho...", + "sProcessing": "Wrthi'n prosesu...", + "sSearch": "Chwilio:", + "sZeroRecords": "Heb ddod o hyd i gofnodion sy'n cyfateb", + "oPaginate": { + "sFirst": "Cyntaf", + "sLast": "Olaf", + "sNext": "Nesaf", + "sPrevious": "Blaenorol" + }, + "oAria": { + "sSortAscending": ": rhoi ar waith i drefnu colofnau o'r lleiaf i'r mwyaf", + "sSortDescending": ": rhoi ar waith i drefnu colofnau o'r mwyaf i'r lleiaf" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/da.json b/assets/Zed/js/modules/libs/i18n/da.json index 909f39c3..5732720a 100644 --- a/assets/Zed/js/modules/libs/i18n/da.json +++ b/assets/Zed/js/modules/libs/i18n/da.json @@ -1,17 +1,17 @@ { - "sProcessing": "Henter...", - "sLengthMenu": "Vis _MENU_ linjer", - "sZeroRecords": "Ingen linjer matcher søgningen", - "sInfo": "Viser _START_ til _END_ af _TOTAL_ linjer", - "sInfoEmpty": "Viser 0 til 0 af 0 linjer", - "sInfoFiltered": "(filtreret fra _MAX_ linjer)", - "sInfoPostFix": "", - "sSearch": "Søg:", - "sUrl": "", - "oPaginate": { - "sFirst": "Første", - "sPrevious": "Forrige", - "sNext": "Næste", - "sLast": "Sidste" - } + "sProcessing": "Henter...", + "sLengthMenu": "Vis _MENU_ linjer", + "sZeroRecords": "Ingen linjer matcher søgningen", + "sInfo": "Viser _START_ til _END_ af _TOTAL_ linjer", + "sInfoEmpty": "Viser 0 til 0 af 0 linjer", + "sInfoFiltered": "(filtreret fra _MAX_ linjer)", + "sInfoPostFix": "", + "sSearch": "Søg:", + "sUrl": "", + "oPaginate": { + "sFirst": "Første", + "sPrevious": "Forrige", + "sNext": "Næste", + "sLast": "Sidste" + } } diff --git a/assets/Zed/js/modules/libs/i18n/de.json b/assets/Zed/js/modules/libs/i18n/de.json index b109b7d7..bd2fe542 100644 --- a/assets/Zed/js/modules/libs/i18n/de.json +++ b/assets/Zed/js/modules/libs/i18n/de.json @@ -1,41 +1,41 @@ - { - "sEmptyTable": "Keine Daten in der Tabelle vorhanden", - "sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen", - "sInfoEmpty": "Keine Daten vorhanden", - "sInfoFiltered": "(gefiltert von _MAX_ Einträgen)", - "sInfoPostFix": "", - "sInfoThousands": ".", - "sLengthMenu": "_MENU_ Einträge anzeigen", - "sLoadingRecords": "Wird geladen ..", - "sProcessing": "Bitte warten ..", - "sSearch": "Suchen", - "sZeroRecords": "Keine Einträge vorhanden", - "oPaginate": { - "sFirst": "Erste", - "sPrevious": "Zurück", - "sNext": "Nächste", - "sLast": "Letzte" - }, - "oAria": { - "sSortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren", - "sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren" - }, - "select": { - "rows": { - "_": "%d Zeilen ausgewählt", - "0": "", - "1": "1 Zeile ausgewählt" - } - }, - "buttons": { - "print": "Drucken", - "colvis": "Spalten", - "copy": "Kopieren", - "copyTitle": "In Zwischenablage kopieren", - "copyKeys": "Taste ctrl oder \u2318 + C um Tabelle
    in Zwischenspeicher zu kopieren.

    Um abzubrechen die Nachricht anklicken oder Escape drücken.", - "copySuccess": { - "_": "%d Zeilen kopiert", - "1": "1 Zeile kopiert" - } - } +{ + "sEmptyTable": "Keine Daten in der Tabelle vorhanden", + "sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen", + "sInfoEmpty": "Keine Daten vorhanden", + "sInfoFiltered": "(gefiltert von _MAX_ Einträgen)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "_MENU_ Einträge anzeigen", + "sLoadingRecords": "Wird geladen ..", + "sProcessing": "Bitte warten ..", + "sSearch": "Suchen", + "sZeroRecords": "Keine Einträge vorhanden", + "oPaginate": { + "sFirst": "Erste", + "sPrevious": "Zurück", + "sNext": "Nächste", + "sLast": "Letzte" + }, + "oAria": { + "sSortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren", + "sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren" + }, + "select": { + "rows": { + "_": "%d Zeilen ausgewählt", + "0": "", + "1": "1 Zeile ausgewählt" + } + }, + "buttons": { + "print": "Drucken", + "colvis": "Spalten", + "copy": "Kopieren", + "copyTitle": "In Zwischenablage kopieren", + "copyKeys": "Taste ctrl oder \u2318 + C um Tabelle
    in Zwischenspeicher zu kopieren.

    Um abzubrechen die Nachricht anklicken oder Escape drücken.", + "copySuccess": { + "_": "%d Zeilen kopiert", + "1": "1 Zeile kopiert" + } + } } diff --git a/assets/Zed/js/modules/libs/i18n/el.json b/assets/Zed/js/modules/libs/i18n/el.json index 7e8d9cf2..1f3f41e5 100644 --- a/assets/Zed/js/modules/libs/i18n/el.json +++ b/assets/Zed/js/modules/libs/i18n/el.json @@ -1,27 +1,27 @@ { - "sDecimal": ",", - "sEmptyTable": "Δεν υπάρχουν δεδομένα στον πίνακα", - "sInfo": "Εμφανίζονται _START_ έως _END_ από _TOTAL_ εγγραφές", - "sInfoEmpty": "Εμφανίζονται 0 έως 0 από 0 εγγραφές", - "sInfoFiltered": "(φιλτραρισμένες από _MAX_ συνολικά εγγραφές)", - "sInfoPostFix": "", - "sInfoThousands": ".", - "sLengthMenu": "Δείξε _MENU_ εγγραφές", - "sLoadingRecords": "Φόρτωση...", - "sProcessing": "Επεξεργασία...", - "sSearch": "Αναζήτηση:", - "sSearchPlaceholder": "Αναζήτηση", - "sThousands": ".", - "sUrl": "", - "sZeroRecords": "Δεν βρέθηκαν εγγραφές που να ταιριάζουν", - "oPaginate": { - "sFirst": "Πρώτη", - "sPrevious": "Προηγούμενη", - "sNext": "Επόμενη", - "sLast": "Τελευταία" - }, - "oAria": { - "sSortAscending": ": ενεργοποιήστε για αύξουσα ταξινόμηση της στήλης", - "sSortDescending": ": ενεργοποιήστε για φθίνουσα ταξινόμηση της στήλης" - } + "sDecimal": ",", + "sEmptyTable": "Δεν υπάρχουν δεδομένα στον πίνακα", + "sInfo": "Εμφανίζονται _START_ έως _END_ από _TOTAL_ εγγραφές", + "sInfoEmpty": "Εμφανίζονται 0 έως 0 από 0 εγγραφές", + "sInfoFiltered": "(φιλτραρισμένες από _MAX_ συνολικά εγγραφές)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "Δείξε _MENU_ εγγραφές", + "sLoadingRecords": "Φόρτωση...", + "sProcessing": "Επεξεργασία...", + "sSearch": "Αναζήτηση:", + "sSearchPlaceholder": "Αναζήτηση", + "sThousands": ".", + "sUrl": "", + "sZeroRecords": "Δεν βρέθηκαν εγγραφές που να ταιριάζουν", + "oPaginate": { + "sFirst": "Πρώτη", + "sPrevious": "Προηγούμενη", + "sNext": "Επόμενη", + "sLast": "Τελευταία" + }, + "oAria": { + "sSortAscending": ": ενεργοποιήστε για αύξουσα ταξινόμηση της στήλης", + "sSortDescending": ": ενεργοποιήστε για φθίνουσα ταξινόμηση της στήλης" + } } diff --git a/assets/Zed/js/modules/libs/i18n/en.json b/assets/Zed/js/modules/libs/i18n/en.json index ddc11ae4..259f9ead 100644 --- a/assets/Zed/js/modules/libs/i18n/en.json +++ b/assets/Zed/js/modules/libs/i18n/en.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "No data available in table", - "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries", - "sInfoEmpty": "Showing 0 to 0 of 0 entries", - "sInfoFiltered": "(filtered from _MAX_ total entries)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Show _MENU_ entries", - "sLoadingRecords": "Loading...", - "sProcessing": "Processing...", - "sSearch": "Search:", - "sZeroRecords": "No matching records found", - "oPaginate": { - "sFirst": "First", - "sLast": "Last", - "sNext": "Next", - "sPrevious": "Previous" - }, - "oAria": { - "sSortAscending": ": activate to sort column ascending", - "sSortDescending": ": activate to sort column descending" - } -} \ No newline at end of file + "sEmptyTable": "No data available in table", + "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries", + "sInfoEmpty": "Showing 0 to 0 of 0 entries", + "sInfoFiltered": "(filtered from _MAX_ total entries)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Show _MENU_ entries", + "sLoadingRecords": "Loading...", + "sProcessing": "Processing...", + "sSearch": "Search:", + "sZeroRecords": "No matching records found", + "oPaginate": { + "sFirst": "First", + "sLast": "Last", + "sNext": "Next", + "sPrevious": "Previous" + }, + "oAria": { + "sSortAscending": ": activate to sort column ascending", + "sSortDescending": ": activate to sort column descending" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/eo.json b/assets/Zed/js/modules/libs/i18n/eo.json index f6a64c49..5cf90a95 100644 --- a/assets/Zed/js/modules/libs/i18n/eo.json +++ b/assets/Zed/js/modules/libs/i18n/eo.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Neniuj datumoj en tabelo", - "sInfo": "Montras _START_ ĝis _END_ el _TOTAL_ vicoj", - "sInfoEmpty": "Montras 0 ĝis 0 el 0 vicoj", - "sInfoFiltered": "(filtrita el entute _MAX_ vicoj)", - "sInfoPostFix": "", - "sInfoThousands": ".", - "sLengthMenu": "Montri _MENU_ vicojn", - "sLoadingRecords": "Ŝarĝas ...", - "sProcessing": "Pretigas ...", - "sSearch": "Serĉi:", - "sZeroRecords": "Neniuj rezultoj trovitaj", - "oPaginate": { - "sFirst": "Unua", - "sLast": "Lasta", - "sNext": "Venonta", - "sPrevious": "Antaŭa" - }, - "oAria": { - "sSortAscending": ": aktivigi por filtri kolumnon kreskante", - "sSortDescending": ": aktivigi por filtri kolumnon malkreskante" - } + "sEmptyTable": "Neniuj datumoj en tabelo", + "sInfo": "Montras _START_ ĝis _END_ el _TOTAL_ vicoj", + "sInfoEmpty": "Montras 0 ĝis 0 el 0 vicoj", + "sInfoFiltered": "(filtrita el entute _MAX_ vicoj)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "Montri _MENU_ vicojn", + "sLoadingRecords": "Ŝarĝas ...", + "sProcessing": "Pretigas ...", + "sSearch": "Serĉi:", + "sZeroRecords": "Neniuj rezultoj trovitaj", + "oPaginate": { + "sFirst": "Unua", + "sLast": "Lasta", + "sNext": "Venonta", + "sPrevious": "Antaŭa" + }, + "oAria": { + "sSortAscending": ": aktivigi por filtri kolumnon kreskante", + "sSortDescending": ": aktivigi por filtri kolumnon malkreskante" + } } diff --git a/assets/Zed/js/modules/libs/i18n/es.json b/assets/Zed/js/modules/libs/i18n/es.json index 53f80974..30c5ed08 100644 --- a/assets/Zed/js/modules/libs/i18n/es.json +++ b/assets/Zed/js/modules/libs/i18n/es.json @@ -1,28 +1,28 @@ { - "sProcessing": "Procesando...", - "sLengthMenu": "Mostrar _MENU_ registros", - "sZeroRecords": "No se encontraron resultados", - "sEmptyTable": "Ningún dato disponible en esta tabla =(", - "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros", - "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros", - "sInfoFiltered": "(filtrado de un total de _MAX_ registros)", - "sInfoPostFix": "", - "sSearch": "Buscar:", - "sUrl": "", - "sInfoThousands": ",", - "sLoadingRecords": "Cargando...", - "oPaginate": { - "sFirst": "Primero", - "sLast": "Último", - "sNext": "Siguiente", - "sPrevious": "Anterior" - }, - "oAria": { - "sSortAscending": ": Activar para ordenar la columna de manera ascendente", - "sSortDescending": ": Activar para ordenar la columna de manera descendente" - }, - "buttons": { - "copy": "Copiar", - "colvis": "Visibilidad" - } + "sProcessing": "Procesando...", + "sLengthMenu": "Mostrar _MENU_ registros", + "sZeroRecords": "No se encontraron resultados", + "sEmptyTable": "Ningún dato disponible en esta tabla =(", + "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros", + "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros", + "sInfoFiltered": "(filtrado de un total de _MAX_ registros)", + "sInfoPostFix": "", + "sSearch": "Buscar:", + "sUrl": "", + "sInfoThousands": ",", + "sLoadingRecords": "Cargando...", + "oPaginate": { + "sFirst": "Primero", + "sLast": "Último", + "sNext": "Siguiente", + "sPrevious": "Anterior" + }, + "oAria": { + "sSortAscending": ": Activar para ordenar la columna de manera ascendente", + "sSortDescending": ": Activar para ordenar la columna de manera descendente" + }, + "buttons": { + "copy": "Copiar", + "colvis": "Visibilidad" + } } diff --git a/assets/Zed/js/modules/libs/i18n/et.json b/assets/Zed/js/modules/libs/i18n/et.json index 5ee3ffd9..9c149695 100644 --- a/assets/Zed/js/modules/libs/i18n/et.json +++ b/assets/Zed/js/modules/libs/i18n/et.json @@ -1,16 +1,16 @@ { - "sProcessing": "Palun oodake, koostan kuvamiseks nimekirja!", - "sLengthMenu": "Näita kirjeid _MENU_ kaupa", - "sZeroRecords": "Otsitavat vastet ei leitud.", - "sInfo": "Kuvatud: _TOTAL_ kirjet (_START_-_END_)", - "sInfoEmpty": "Otsinguvasteid ei leitud", - "sInfoFiltered": " - filteeritud _MAX_ kirje seast.", - "sInfoPostFix": "Kõik kuvatud kirjed põhinevad reaalsetel tulemustel.", - "sSearch": "Otsi kõikide tulemuste seast:", - "oPaginate": { - "sFirst": "Algus", - "sPrevious": "Eelmine", - "sNext": "Järgmine", - "sLast": "Viimane" - } + "sProcessing": "Palun oodake, koostan kuvamiseks nimekirja!", + "sLengthMenu": "Näita kirjeid _MENU_ kaupa", + "sZeroRecords": "Otsitavat vastet ei leitud.", + "sInfo": "Kuvatud: _TOTAL_ kirjet (_START_-_END_)", + "sInfoEmpty": "Otsinguvasteid ei leitud", + "sInfoFiltered": " - filteeritud _MAX_ kirje seast.", + "sInfoPostFix": "Kõik kuvatud kirjed põhinevad reaalsetel tulemustel.", + "sSearch": "Otsi kõikide tulemuste seast:", + "oPaginate": { + "sFirst": "Algus", + "sPrevious": "Eelmine", + "sNext": "Järgmine", + "sLast": "Viimane" + } } diff --git a/assets/Zed/js/modules/libs/i18n/eu.json b/assets/Zed/js/modules/libs/i18n/eu.json index 19ceadb4..cef2d570 100644 --- a/assets/Zed/js/modules/libs/i18n/eu.json +++ b/assets/Zed/js/modules/libs/i18n/eu.json @@ -1,24 +1,24 @@ { - "sProcessing": "Prozesatzen...", - "sLengthMenu": "Erakutsi _MENU_ erregistro", - "sZeroRecords": "Ez da emaitzarik aurkitu", - "sEmptyTable": "Taula hontan ez dago inongo datu erabilgarririk", - "sInfo": "_START_ -etik _END_ -erako erregistroak erakusten, guztira _TOTAL_ erregistro", - "sInfoEmpty": "0tik 0rako erregistroak erakusten, guztira 0 erregistro", - "sInfoFiltered": "(guztira _MAX_ erregistro iragazten)", - "sInfoPostFix": "", - "sSearch": "Aurkitu:", - "sUrl": "", - "sInfoThousands": ",", - "sLoadingRecords": "Abiarazten...", - "oPaginate": { - "sFirst": "Lehena", - "sLast": "Azkena", - "sNext": "Hurrengoa", - "sPrevious": "Aurrekoa" - }, - "oAria": { - "sSortAscending": ": Zutabea goranzko eran ordenatzeko aktibatu ", - "sSortDescending": ": Zutabea beheranzko eran ordenatzeko aktibatu" - } -} \ No newline at end of file + "sProcessing": "Prozesatzen...", + "sLengthMenu": "Erakutsi _MENU_ erregistro", + "sZeroRecords": "Ez da emaitzarik aurkitu", + "sEmptyTable": "Taula hontan ez dago inongo datu erabilgarririk", + "sInfo": "_START_ -etik _END_ -erako erregistroak erakusten, guztira _TOTAL_ erregistro", + "sInfoEmpty": "0tik 0rako erregistroak erakusten, guztira 0 erregistro", + "sInfoFiltered": "(guztira _MAX_ erregistro iragazten)", + "sInfoPostFix": "", + "sSearch": "Aurkitu:", + "sUrl": "", + "sInfoThousands": ",", + "sLoadingRecords": "Abiarazten...", + "oPaginate": { + "sFirst": "Lehena", + "sLast": "Azkena", + "sNext": "Hurrengoa", + "sPrevious": "Aurrekoa" + }, + "oAria": { + "sSortAscending": ": Zutabea goranzko eran ordenatzeko aktibatu ", + "sSortDescending": ": Zutabea beheranzko eran ordenatzeko aktibatu" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/fa.json b/assets/Zed/js/modules/libs/i18n/fa.json index 41a59bb7..af440bbc 100644 --- a/assets/Zed/js/modules/libs/i18n/fa.json +++ b/assets/Zed/js/modules/libs/i18n/fa.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "هیچ داده ای در جدول وجود ندارد", - "sInfo": "نمایش _START_ تا _END_ از _TOTAL_ رکورد", - "sInfoEmpty": "نمایش 0 تا 0 از 0 رکورد", - "sInfoFiltered": "(فیلتر شده از _MAX_ رکورد)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "نمایش _MENU_ رکورد", - "sLoadingRecords": "در حال بارگزاری...", - "sProcessing": "در حال پردازش...", - "sSearch": "جستجو:", - "sZeroRecords": "رکوردی با این مشخصات پیدا نشد", - "oPaginate": { - "sFirst": "ابتدا", - "sLast": "انتها", - "sNext": "بعدی", - "sPrevious": "قبلی" - }, - "oAria": { - "sSortAscending": ": فعال سازی نمایش به صورت صعودی", - "sSortDescending": ": فعال سازی نمایش به صورت نزولی" - } + "sEmptyTable": "هیچ داده ای در جدول وجود ندارد", + "sInfo": "نمایش _START_ تا _END_ از _TOTAL_ رکورد", + "sInfoEmpty": "نمایش 0 تا 0 از 0 رکورد", + "sInfoFiltered": "(فیلتر شده از _MAX_ رکورد)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "نمایش _MENU_ رکورد", + "sLoadingRecords": "در حال بارگزاری...", + "sProcessing": "در حال پردازش...", + "sSearch": "جستجو:", + "sZeroRecords": "رکوردی با این مشخصات پیدا نشد", + "oPaginate": { + "sFirst": "ابتدا", + "sLast": "انتها", + "sNext": "بعدی", + "sPrevious": "قبلی" + }, + "oAria": { + "sSortAscending": ": فعال سازی نمایش به صورت صعودی", + "sSortDescending": ": فعال سازی نمایش به صورت نزولی" + } } diff --git a/assets/Zed/js/modules/libs/i18n/fi.json b/assets/Zed/js/modules/libs/i18n/fi.json index 40f1152f..e348065f 100644 --- a/assets/Zed/js/modules/libs/i18n/fi.json +++ b/assets/Zed/js/modules/libs/i18n/fi.json @@ -1,39 +1,39 @@ { - "sEmptyTable": "Ei näytettäviä tuloksia.", - "sInfo": "Näytetään rivit _START_ - _END_ (yhteensä _TOTAL_ )", - "sInfoEmpty": "Näytetään 0 - 0 (yhteensä 0)", - "sInfoFiltered": "(suodatettu _MAX_ tuloksen joukosta)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Näytä kerralla _MENU_ riviä", - "sLoadingRecords": "Ladataan...", - "sProcessing": "Hetkinen...", - "sSearch": "Etsi:", - "sZeroRecords": "Tietoja ei löytynyt", - "oPaginate": { - "sFirst": "Ensimmäinen", - "sLast": "Viimeinen", - "sNext": "Seuraava", - "sPrevious": "Edellinen" - }, - "oAria": { - "sSortAscending": ": lajittele sarake nousevasti", - "sSortDescending": ": lajittele sarake laskevasti" - }, - "select": { - "rows": { - "_": "Valittuna %d riviä", - "0": "Klikkaa riviä valitaksesi sen", - "1": "Valittuna vain yksi rivi" - } - }, - "buttons": { - "copy": "Kopioi", - "copySuccess": { - "1": "Yksi rivi kopioitu leikepöydälle", - "_": "%d riviä kopioitu leikepöydälle" - }, - "copyTitle": "Kopioi leikepöydälle", - "copyKeys": "Paina ctrl tai \u2318 + C kopioidaksesi taulukon arvot
    leikepöydälle.

    Peruuttaaksesi klikkaa tähän tai Esc." - } + "sEmptyTable": "Ei näytettäviä tuloksia.", + "sInfo": "Näytetään rivit _START_ - _END_ (yhteensä _TOTAL_ )", + "sInfoEmpty": "Näytetään 0 - 0 (yhteensä 0)", + "sInfoFiltered": "(suodatettu _MAX_ tuloksen joukosta)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Näytä kerralla _MENU_ riviä", + "sLoadingRecords": "Ladataan...", + "sProcessing": "Hetkinen...", + "sSearch": "Etsi:", + "sZeroRecords": "Tietoja ei löytynyt", + "oPaginate": { + "sFirst": "Ensimmäinen", + "sLast": "Viimeinen", + "sNext": "Seuraava", + "sPrevious": "Edellinen" + }, + "oAria": { + "sSortAscending": ": lajittele sarake nousevasti", + "sSortDescending": ": lajittele sarake laskevasti" + }, + "select": { + "rows": { + "_": "Valittuna %d riviä", + "0": "Klikkaa riviä valitaksesi sen", + "1": "Valittuna vain yksi rivi" + } + }, + "buttons": { + "copy": "Kopioi", + "copySuccess": { + "1": "Yksi rivi kopioitu leikepöydälle", + "_": "%d riviä kopioitu leikepöydälle" + }, + "copyTitle": "Kopioi leikepöydälle", + "copyKeys": "Paina ctrl tai \u2318 + C kopioidaksesi taulukon arvot
    leikepöydälle.

    Peruuttaaksesi klikkaa tähän tai Esc." + } } diff --git a/assets/Zed/js/modules/libs/i18n/fil.json b/assets/Zed/js/modules/libs/i18n/fil.json index 39d53f44..d293b8e0 100644 --- a/assets/Zed/js/modules/libs/i18n/fil.json +++ b/assets/Zed/js/modules/libs/i18n/fil.json @@ -1,17 +1,17 @@ { - "sProcessing": "Pagproseso...", - "sLengthMenu": "Ipakita _MENU_ entries", - "sZeroRecords": "Walang katugmang mga talaan na natagpuan", - "sInfo": "Ipinapakita ang _START_ sa _END_ ng _TOTAL_ entries", - "sInfoEmpty": "Ipinapakita ang 0-0 ng 0 entries", - "sInfoFiltered": "(na-filter mula _MAX_ kabuuang entries)", - "sInfoPostFix": "", - "sSearch": "Paghahanap:", - "sUrl": "", - "oPaginate": { - "sFirst": "Unang", - "sPrevious": "Nakaraan", - "sNext": "Susunod", - "sLast": "Huli" - } + "sProcessing": "Pagproseso...", + "sLengthMenu": "Ipakita _MENU_ entries", + "sZeroRecords": "Walang katugmang mga talaan na natagpuan", + "sInfo": "Ipinapakita ang _START_ sa _END_ ng _TOTAL_ entries", + "sInfoEmpty": "Ipinapakita ang 0-0 ng 0 entries", + "sInfoFiltered": "(na-filter mula _MAX_ kabuuang entries)", + "sInfoPostFix": "", + "sSearch": "Paghahanap:", + "sUrl": "", + "oPaginate": { + "sFirst": "Unang", + "sPrevious": "Nakaraan", + "sNext": "Susunod", + "sLast": "Huli" + } } diff --git a/assets/Zed/js/modules/libs/i18n/fr.json b/assets/Zed/js/modules/libs/i18n/fr.json index 211b2274..a8bfca26 100644 --- a/assets/Zed/js/modules/libs/i18n/fr.json +++ b/assets/Zed/js/modules/libs/i18n/fr.json @@ -1,29 +1,29 @@ { - "sProcessing": "Traitement en cours...", - "sSearch": "Rechercher :", - "sLengthMenu": "Afficher _MENU_ éléments", - "sInfo": "Affichage de l'élément _START_ à _END_ sur _TOTAL_ éléments", - "sInfoEmpty": "Affichage de l'élément 0 à 0 sur 0 élément", - "sInfoFiltered": "(filtré de _MAX_ éléments au total)", - "sInfoPostFix": "", - "sLoadingRecords": "Chargement en cours...", - "sZeroRecords": "Aucun élément à afficher", - "sEmptyTable": "Aucune donnée disponible dans le tableau", - "oPaginate": { - "sFirst": "Premier", - "sPrevious": "Précédent", - "sNext": "Suivant", - "sLast": "Dernier" - }, - "oAria": { - "sSortAscending": ": activer pour trier la colonne par ordre croissant", - "sSortDescending": ": activer pour trier la colonne par ordre décroissant" - }, - "select": { - "rows": { - "_": "%d lignes sélectionnées", - "0": "Aucune ligne sélectionnée", - "1": "1 ligne sélectionnée" - } - } + "sProcessing": "Traitement en cours...", + "sSearch": "Rechercher :", + "sLengthMenu": "Afficher _MENU_ éléments", + "sInfo": "Affichage de l'élément _START_ à _END_ sur _TOTAL_ éléments", + "sInfoEmpty": "Affichage de l'élément 0 à 0 sur 0 élément", + "sInfoFiltered": "(filtré de _MAX_ éléments au total)", + "sInfoPostFix": "", + "sLoadingRecords": "Chargement en cours...", + "sZeroRecords": "Aucun élément à afficher", + "sEmptyTable": "Aucune donnée disponible dans le tableau", + "oPaginate": { + "sFirst": "Premier", + "sPrevious": "Précédent", + "sNext": "Suivant", + "sLast": "Dernier" + }, + "oAria": { + "sSortAscending": ": activer pour trier la colonne par ordre croissant", + "sSortDescending": ": activer pour trier la colonne par ordre décroissant" + }, + "select": { + "rows": { + "_": "%d lignes sélectionnées", + "0": "Aucune ligne sélectionnée", + "1": "1 ligne sélectionnée" + } + } } diff --git a/assets/Zed/js/modules/libs/i18n/ga.json b/assets/Zed/js/modules/libs/i18n/ga.json index 6b7db0de..24d0a170 100644 --- a/assets/Zed/js/modules/libs/i18n/ga.json +++ b/assets/Zed/js/modules/libs/i18n/ga.json @@ -1,17 +1,17 @@ { - "sProcessing": "Próiseáil...", - "sLengthMenu": "Taispeáin iontrálacha _MENU_", - "sZeroRecords": "Gan aon taifead meaitseáil aimsithe", - "sInfo": "_START_ Showing a _END_ na n-iontrálacha _TOTAL_", - "sInfoEmpty": "Showing 0-0 na n-iontrálacha 0", - "sInfoFiltered": "(scagtha ó _MAX_ iontrálacha iomlán)", - "sInfoPostFix": "", - "sSearch": "Cuardaigh:", - "sUrl": "", - "oPaginate": { - "sFirst": "An Chéad", - "sPrevious": "Roimhe Seo", - "sNext": "Ar Aghaidh", - "sLast": "Last" - } + "sProcessing": "Próiseáil...", + "sLengthMenu": "Taispeáin iontrálacha _MENU_", + "sZeroRecords": "Gan aon taifead meaitseáil aimsithe", + "sInfo": "_START_ Showing a _END_ na n-iontrálacha _TOTAL_", + "sInfoEmpty": "Showing 0-0 na n-iontrálacha 0", + "sInfoFiltered": "(scagtha ó _MAX_ iontrálacha iomlán)", + "sInfoPostFix": "", + "sSearch": "Cuardaigh:", + "sUrl": "", + "oPaginate": { + "sFirst": "An Chéad", + "sPrevious": "Roimhe Seo", + "sNext": "Ar Aghaidh", + "sLast": "Last" + } } diff --git a/assets/Zed/js/modules/libs/i18n/gl.json b/assets/Zed/js/modules/libs/i18n/gl.json index 5f409837..b6a81bd0 100644 --- a/assets/Zed/js/modules/libs/i18n/gl.json +++ b/assets/Zed/js/modules/libs/i18n/gl.json @@ -1,24 +1,24 @@ { - "sProcessing": "Procesando...", - "sLengthMenu": "Mostrar _MENU_ rexistros", - "sZeroRecords": "Non se atoparon resultados", - "sEmptyTable": "Ningún dato dispoñible nesta táboa", - "sInfo": "Mostrando rexistros do _START_ ao _END_ dun total de _TOTAL_ rexistros", - "sInfoEmpty": "Mostrando rexistros do 0 ao 0 dun total de 0 rexistros", - "sInfoFiltered": "(filtrado dun total de _MAX_ rexistros)", - "sInfoPostFix": "", - "sSearch": "Buscar:", - "sUrl": "", - "sInfoThousands": ",", - "sLoadingRecords": "Cargando...", - "oPaginate": { - "sFirst": "Primeiro", - "sLast": "Último", - "sNext": "Seguinte", - "sPrevious": "Anterior" - }, - "oAria": { - "sSortAscending": ": Activar para ordenar a columna de maneira ascendente", - "sSortDescending": ": Activar para ordenar a columna de maneira descendente" - } -} \ No newline at end of file + "sProcessing": "Procesando...", + "sLengthMenu": "Mostrar _MENU_ rexistros", + "sZeroRecords": "Non se atoparon resultados", + "sEmptyTable": "Ningún dato dispoñible nesta táboa", + "sInfo": "Mostrando rexistros do _START_ ao _END_ dun total de _TOTAL_ rexistros", + "sInfoEmpty": "Mostrando rexistros do 0 ao 0 dun total de 0 rexistros", + "sInfoFiltered": "(filtrado dun total de _MAX_ rexistros)", + "sInfoPostFix": "", + "sSearch": "Buscar:", + "sUrl": "", + "sInfoThousands": ",", + "sLoadingRecords": "Cargando...", + "oPaginate": { + "sFirst": "Primeiro", + "sLast": "Último", + "sNext": "Seguinte", + "sPrevious": "Anterior" + }, + "oAria": { + "sSortAscending": ": Activar para ordenar a columna de maneira ascendente", + "sSortDescending": ": Activar para ordenar a columna de maneira descendente" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/gu.json b/assets/Zed/js/modules/libs/i18n/gu.json index cadb8d10..0b8da073 100644 --- a/assets/Zed/js/modules/libs/i18n/gu.json +++ b/assets/Zed/js/modules/libs/i18n/gu.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "કોષ્ટકમાં કોઈ ડેટા ઉપલબ્ધ નથી", - "sInfo": "કુલ_પ્રવેશો_અંત_પ્રારંભ_દર્શાવે_છે", - "sInfoEmpty": "0 પ્રવેશો 0 0 બતાવી રહ્યું છે", - "sInfoFiltered": "(_MAX_ કુલ પ્રવેશો માંથી ફિલ્ટર)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "બતાવો _MENU_ પ્રવેશો", - "sLoadingRecords": "લોડ કરી રહ્યું છે ...", - "sProcessing": "પ્રક્રિયા ...", - "sSearch": "શોધો:", - "sZeroRecords": "કોઈ મેળ ખાતા રેકોર્ડ મળી", - "oPaginate": { - "sFirst": "પ્રથમ", - "sLast": "અંતિમ", - "sNext": "આગામી", - "sPrevious": "ગત" - }, - "oAria": { - "sSortAscending": ": સ્તંભ ચડતા ક્રમમાં ગોઠવવા માટે સક્રિય", - "sSortDescending": ": કૉલમ ઉતરતા ક્રમમાં ગોઠવવા માટે સક્રિય" - } -} \ No newline at end of file + "sEmptyTable": "કોષ્ટકમાં કોઈ ડેટા ઉપલબ્ધ નથી", + "sInfo": "કુલ_પ્રવેશો_અંત_પ્રારંભ_દર્શાવે_છે", + "sInfoEmpty": "0 પ્રવેશો 0 0 બતાવી રહ્યું છે", + "sInfoFiltered": "(_MAX_ કુલ પ્રવેશો માંથી ફિલ્ટર)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "બતાવો _MENU_ પ્રવેશો", + "sLoadingRecords": "લોડ કરી રહ્યું છે ...", + "sProcessing": "પ્રક્રિયા ...", + "sSearch": "શોધો:", + "sZeroRecords": "કોઈ મેળ ખાતા રેકોર્ડ મળી", + "oPaginate": { + "sFirst": "પ્રથમ", + "sLast": "અંતિમ", + "sNext": "આગામી", + "sPrevious": "ગત" + }, + "oAria": { + "sSortAscending": ": સ્તંભ ચડતા ક્રમમાં ગોઠવવા માટે સક્રિય", + "sSortDescending": ": કૉલમ ઉતરતા ક્રમમાં ગોઠવવા માટે સક્રિય" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/hi.json b/assets/Zed/js/modules/libs/i18n/hi.json index f9dcfa3c..81de0dd0 100644 --- a/assets/Zed/js/modules/libs/i18n/hi.json +++ b/assets/Zed/js/modules/libs/i18n/hi.json @@ -1,17 +1,17 @@ { - "sProcessing": "प्रगति पे हैं ...", - "sLengthMenu": " _MENU_ प्रविष्टियां दिखाएं ", - "sZeroRecords": "रिकॉर्ड्स का मेल नहीं मिला", - "sInfo": "_START_ to _END_ of _TOTAL_ प्रविष्टियां दिखा रहे हैं", - "sInfoEmpty": "0 में से 0 से 0 प्रविष्टियां दिखा रहे हैं", - "sInfoFiltered": "(_MAX_ कुल प्रविष्टियों में से छठा हुआ)", - "sInfoPostFix": "", - "sSearch": "खोजें:", - "sUrl": "", - "oPaginate": { - "sFirst": "प्रथम", - "sPrevious": "पिछला", - "sNext": "अगला", - "sLast": "अंतिम" - } + "sProcessing": "प्रगति पे हैं ...", + "sLengthMenu": " _MENU_ प्रविष्टियां दिखाएं ", + "sZeroRecords": "रिकॉर्ड्स का मेल नहीं मिला", + "sInfo": "_START_ to _END_ of _TOTAL_ प्रविष्टियां दिखा रहे हैं", + "sInfoEmpty": "0 में से 0 से 0 प्रविष्टियां दिखा रहे हैं", + "sInfoFiltered": "(_MAX_ कुल प्रविष्टियों में से छठा हुआ)", + "sInfoPostFix": "", + "sSearch": "खोजें:", + "sUrl": "", + "oPaginate": { + "sFirst": "प्रथम", + "sPrevious": "पिछला", + "sNext": "अगला", + "sLast": "अंतिम" + } } diff --git a/assets/Zed/js/modules/libs/i18n/hr.json b/assets/Zed/js/modules/libs/i18n/hr.json index f5691170..b81b41fa 100644 --- a/assets/Zed/js/modules/libs/i18n/hr.json +++ b/assets/Zed/js/modules/libs/i18n/hr.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Nema podataka u tablici", - "sInfo": "Prikazano _START_ do _END_ od _TOTAL_ rezultata", - "sInfoEmpty": "Prikazano 0 do 0 od 0 rezultata", - "sInfoFiltered": "(filtrirano iz _MAX_ ukupnih rezultata)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Prikaži _MENU_ rezultata po stranici", - "sLoadingRecords": "Dohvaćam...", - "sProcessing": "Obrađujem...", - "sSearch": "Pretraži:", - "sZeroRecords": "Ništa nije pronađeno", + "sEmptyTable": "Nema podataka u tablici", + "sInfo": "Prikazano _START_ do _END_ od _TOTAL_ rezultata", + "sInfoEmpty": "Prikazano 0 do 0 od 0 rezultata", + "sInfoFiltered": "(filtrirano iz _MAX_ ukupnih rezultata)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Prikaži _MENU_ rezultata po stranici", + "sLoadingRecords": "Dohvaćam...", + "sProcessing": "Obrađujem...", + "sSearch": "Pretraži:", + "sZeroRecords": "Ništa nije pronađeno", "oPaginate": { - "sFirst": "Prva", - "sPrevious": "Nazad", - "sNext": "Naprijed", - "sLast": "Zadnja" + "sFirst": "Prva", + "sPrevious": "Nazad", + "sNext": "Naprijed", + "sLast": "Zadnja" }, "oAria": { - "sSortAscending": ": aktiviraj za rastući poredak", + "sSortAscending": ": aktiviraj za rastući poredak", "sSortDescending": ": aktiviraj za padajući poredak" } } diff --git a/assets/Zed/js/modules/libs/i18n/hu.json b/assets/Zed/js/modules/libs/i18n/hu.json index d0e48a10..ddce0fd0 100644 --- a/assets/Zed/js/modules/libs/i18n/hu.json +++ b/assets/Zed/js/modules/libs/i18n/hu.json @@ -1,40 +1,40 @@ { - "sEmptyTable": "Nincs rendelkezésre álló adat", - "sInfo": "Találatok: _START_ - _END_ Összesen: _TOTAL_", - "sInfoEmpty": "Nulla találat", - "sInfoFiltered": "(_MAX_ összes rekord közül szűrve)", - "sInfoPostFix": "", - "sInfoThousands": " ", - "sLengthMenu": "_MENU_ találat oldalanként", - "sLoadingRecords": "Betöltés...", - "sProcessing": "Feldolgozás...", - "sSearch": "Keresés:", - "sZeroRecords": "Nincs a keresésnek megfelelő találat", - "oPaginate": { - "sFirst": "Első", - "sPrevious": "Előző", - "sNext": "Következő", - "sLast": "Utolsó" - }, - "oAria": { - "sSortAscending": ": aktiválja a növekvő rendezéshez", - "sSortDescending": ": aktiválja a csökkenő rendezéshez" - }, - "select": { - "rows": { - "_": "%d sor kiválasztva", - "0": "", - "1": "1 sor kiválasztva" - } - }, - "buttons": { - "print": "Nyomtatás", - "colvis": "Oszlopok", - "copy": "Másolás", - "copyTitle": "Vágólapra másolás", - "copySuccess": { - "_": "%d sor másolva", - "1": "1 sor másolva" - } - } -} \ No newline at end of file + "sEmptyTable": "Nincs rendelkezésre álló adat", + "sInfo": "Találatok: _START_ - _END_ Összesen: _TOTAL_", + "sInfoEmpty": "Nulla találat", + "sInfoFiltered": "(_MAX_ összes rekord közül szűrve)", + "sInfoPostFix": "", + "sInfoThousands": " ", + "sLengthMenu": "_MENU_ találat oldalanként", + "sLoadingRecords": "Betöltés...", + "sProcessing": "Feldolgozás...", + "sSearch": "Keresés:", + "sZeroRecords": "Nincs a keresésnek megfelelő találat", + "oPaginate": { + "sFirst": "Első", + "sPrevious": "Előző", + "sNext": "Következő", + "sLast": "Utolsó" + }, + "oAria": { + "sSortAscending": ": aktiválja a növekvő rendezéshez", + "sSortDescending": ": aktiválja a csökkenő rendezéshez" + }, + "select": { + "rows": { + "_": "%d sor kiválasztva", + "0": "", + "1": "1 sor kiválasztva" + } + }, + "buttons": { + "print": "Nyomtatás", + "colvis": "Oszlopok", + "copy": "Másolás", + "copyTitle": "Vágólapra másolás", + "copySuccess": { + "_": "%d sor másolva", + "1": "1 sor másolva" + } + } +} diff --git a/assets/Zed/js/modules/libs/i18n/hy.json b/assets/Zed/js/modules/libs/i18n/hy.json index 8887f606..69d40852 100644 --- a/assets/Zed/js/modules/libs/i18n/hy.json +++ b/assets/Zed/js/modules/libs/i18n/hy.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Տվյալները բացակայում են", - "sProcessing": "Կատարվում է...", - "sInfoThousands": ",", - "sLengthMenu": "Ցուցադրել _MENU_ արդյունքներ մեկ էջում", - "sLoadingRecords": "Բեռնվում է ...", - "sZeroRecords": "Հարցմանը համապատասխանող արդյունքներ չկան", - "sInfo": "Ցուցադրված են _START_-ից _END_ արդյունքները ընդհանուր _TOTAL_-ից", - "sInfoEmpty": "Արդյունքներ գտնված չեն", - "sInfoFiltered": "(ֆիլտրվել է ընդհանուր _MAX_ արդյունքներից)", - "sInfoPostFix": "", - "sSearch": "Փնտրել", - "oPaginate": { - "sFirst": "Առաջին էջ", - "sPrevious": "Նախորդ էջ", - "sNext": "Հաջորդ էջ", - "sLast": "Վերջին էջ" - }, - "oAria": { - "sSortAscending": ": ակտիվացրեք աճման կարգով դասավորելու համար", - "sSortDescending": ": ակտիվացրեք նվազման կարգով դասավորելու համար" - } -} \ No newline at end of file + "sEmptyTable": "Տվյալները բացակայում են", + "sProcessing": "Կատարվում է...", + "sInfoThousands": ",", + "sLengthMenu": "Ցուցադրել _MENU_ արդյունքներ մեկ էջում", + "sLoadingRecords": "Բեռնվում է ...", + "sZeroRecords": "Հարցմանը համապատասխանող արդյունքներ չկան", + "sInfo": "Ցուցադրված են _START_-ից _END_ արդյունքները ընդհանուր _TOTAL_-ից", + "sInfoEmpty": "Արդյունքներ գտնված չեն", + "sInfoFiltered": "(ֆիլտրվել է ընդհանուր _MAX_ արդյունքներից)", + "sInfoPostFix": "", + "sSearch": "Փնտրել", + "oPaginate": { + "sFirst": "Առաջին էջ", + "sPrevious": "Նախորդ էջ", + "sNext": "Հաջորդ էջ", + "sLast": "Վերջին էջ" + }, + "oAria": { + "sSortAscending": ": ակտիվացրեք աճման կարգով դասավորելու համար", + "sSortDescending": ": ակտիվացրեք նվազման կարգով դասավորելու համար" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/id.json b/assets/Zed/js/modules/libs/i18n/id.json index 7391afc2..abbd41a5 100644 --- a/assets/Zed/js/modules/libs/i18n/id.json +++ b/assets/Zed/js/modules/libs/i18n/id.json @@ -1,18 +1,18 @@ { - "sEmptyTable": "Tidak ada data yang tersedia pada tabel ini", - "sProcessing": "Sedang memproses...", - "sLengthMenu": "Tampilkan _MENU_ entri", - "sZeroRecords": "Tidak ditemukan data yang sesuai", - "sInfo": "Menampilkan _START_ sampai _END_ dari _TOTAL_ entri", - "sInfoEmpty": "Menampilkan 0 sampai 0 dari 0 entri", - "sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)", - "sInfoPostFix": "", - "sSearch": "Cari:", - "sUrl": "", - "oPaginate": { - "sFirst": "Pertama", - "sPrevious": "Sebelumnya", - "sNext": "Selanjutnya", - "sLast": "Terakhir" - } + "sEmptyTable": "Tidak ada data yang tersedia pada tabel ini", + "sProcessing": "Sedang memproses...", + "sLengthMenu": "Tampilkan _MENU_ entri", + "sZeroRecords": "Tidak ditemukan data yang sesuai", + "sInfo": "Menampilkan _START_ sampai _END_ dari _TOTAL_ entri", + "sInfoEmpty": "Menampilkan 0 sampai 0 dari 0 entri", + "sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)", + "sInfoPostFix": "", + "sSearch": "Cari:", + "sUrl": "", + "oPaginate": { + "sFirst": "Pertama", + "sPrevious": "Sebelumnya", + "sNext": "Selanjutnya", + "sLast": "Terakhir" + } } diff --git a/assets/Zed/js/modules/libs/i18n/is.json b/assets/Zed/js/modules/libs/i18n/is.json index 09b40fff..61067e71 100644 --- a/assets/Zed/js/modules/libs/i18n/is.json +++ b/assets/Zed/js/modules/libs/i18n/is.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Engin gögn eru í þessari töflu", - "sInfo": "Sýni _START_ til _END_ af _TOTAL_ færslum", - "sInfoEmpty": "Sýni 0 til 0 af 0 færslum", - "sInfoFiltered": "(síað út frá _MAX_ færslum)", - "sInfoPostFix": "", - "sInfoThousands": ".", - "sLengthMenu": "Sýna _MENU_ færslur", - "sLoadingRecords": "Hleð...", - "sProcessing": "Úrvinnsla...", - "sSearch": "Leita:", - "sZeroRecords": "Engar færslur fundust", - "oPaginate": { - "sFirst": "Fyrsta", - "sLast": "Síðasta", - "sNext": "Næsta", - "sPrevious": "Fyrri" - }, - "oAria": { - "sSortAscending": ": virkja til að raða dálki í hækkandi röð", - "sSortDescending": ": virkja til að raða dálki lækkandi í röð" - } -} \ No newline at end of file + "sEmptyTable": "Engin gögn eru í þessari töflu", + "sInfo": "Sýni _START_ til _END_ af _TOTAL_ færslum", + "sInfoEmpty": "Sýni 0 til 0 af 0 færslum", + "sInfoFiltered": "(síað út frá _MAX_ færslum)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "Sýna _MENU_ færslur", + "sLoadingRecords": "Hleð...", + "sProcessing": "Úrvinnsla...", + "sSearch": "Leita:", + "sZeroRecords": "Engar færslur fundust", + "oPaginate": { + "sFirst": "Fyrsta", + "sLast": "Síðasta", + "sNext": "Næsta", + "sPrevious": "Fyrri" + }, + "oAria": { + "sSortAscending": ": virkja til að raða dálki í hækkandi röð", + "sSortDescending": ": virkja til að raða dálki lækkandi í röð" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/it.json b/assets/Zed/js/modules/libs/i18n/it.json index d3640e78..d778aad9 100644 --- a/assets/Zed/js/modules/libs/i18n/it.json +++ b/assets/Zed/js/modules/libs/i18n/it.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Nessun dato presente nella tabella", - "sInfo": "Vista da _START_ a _END_ di _TOTAL_ elementi", - "sInfoEmpty": "Vista da 0 a 0 di 0 elementi", - "sInfoFiltered": "(filtrati da _MAX_ elementi totali)", - "sInfoPostFix": "", - "sInfoThousands": ".", - "sLengthMenu": "Visualizza _MENU_ elementi", - "sLoadingRecords": "Caricamento...", - "sProcessing": "Elaborazione...", - "sSearch": "Cerca:", - "sZeroRecords": "La ricerca non ha portato alcun risultato.", - "oPaginate": { - "sFirst": "Inizio", - "sPrevious": "Precedente", - "sNext": "Successivo", - "sLast": "Fine" - }, - "oAria": { - "sSortAscending": ": attiva per ordinare la colonna in ordine crescente", - "sSortDescending": ": attiva per ordinare la colonna in ordine decrescente" - } -} \ No newline at end of file + "sEmptyTable": "Nessun dato presente nella tabella", + "sInfo": "Vista da _START_ a _END_ di _TOTAL_ elementi", + "sInfoEmpty": "Vista da 0 a 0 di 0 elementi", + "sInfoFiltered": "(filtrati da _MAX_ elementi totali)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "Visualizza _MENU_ elementi", + "sLoadingRecords": "Caricamento...", + "sProcessing": "Elaborazione...", + "sSearch": "Cerca:", + "sZeroRecords": "La ricerca non ha portato alcun risultato.", + "oPaginate": { + "sFirst": "Inizio", + "sPrevious": "Precedente", + "sNext": "Successivo", + "sLast": "Fine" + }, + "oAria": { + "sSortAscending": ": attiva per ordinare la colonna in ordine crescente", + "sSortDescending": ": attiva per ordinare la colonna in ordine decrescente" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/iw.json b/assets/Zed/js/modules/libs/i18n/iw.json index e016485e..1e2a71d7 100644 --- a/assets/Zed/js/modules/libs/i18n/iw.json +++ b/assets/Zed/js/modules/libs/i18n/iw.json @@ -1,18 +1,18 @@ { - "processing": "מעבד...", - "lengthMenu": "הצג _MENU_ פריטים", - "zeroRecords": "לא נמצאו רשומות מתאימות", - "emptyTable": "לא נמצאו רשומות מתאימות", - "info": "_START_ עד _END_ מתוך _TOTAL_ רשומות" , - "infoEmpty": "0 עד 0 מתוך 0 רשומות", + "processing": "מעבד...", + "lengthMenu": "הצג _MENU_ פריטים", + "zeroRecords": "לא נמצאו רשומות מתאימות", + "emptyTable": "לא נמצאו רשומות מתאימות", + "info": "_START_ עד _END_ מתוך _TOTAL_ רשומות", + "infoEmpty": "0 עד 0 מתוך 0 רשומות", "infoFiltered": "(מסונן מסך _MAX_ רשומות)", - "infoPostFix": "", - "search": "חפש:", - "url": "", + "infoPostFix": "", + "search": "חפש:", + "url": "", "paginate": { - "first": "ראשון", + "first": "ראשון", "previous": "קודם", - "next": "הבא", - "last": "אחרון" + "next": "הבא", + "last": "אחרון" } -} \ No newline at end of file +} diff --git a/assets/Zed/js/modules/libs/i18n/ja.json b/assets/Zed/js/modules/libs/i18n/ja.json index 76feabe1..9774cb32 100644 --- a/assets/Zed/js/modules/libs/i18n/ja.json +++ b/assets/Zed/js/modules/libs/i18n/ja.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "テーブルにデータがありません", - "sInfo": " _TOTAL_ 件中 _START_ から _END_ まで表示", - "sInfoEmpty": " 0 件中 0 から 0 まで表示", - "sInfoFiltered": "(全 _MAX_ 件より抽出)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "_MENU_ 件表示", - "sLoadingRecords": "読み込み中...", - "sProcessing": "処理中...", - "sSearch": "検索:", - "sZeroRecords": "一致するレコードがありません", - "oPaginate": { - "sFirst": "先頭", - "sLast": "最終", - "sNext": "次", - "sPrevious": "前" - }, - "oAria": { - "sSortAscending": ": 列を昇順に並べ替えるにはアクティブにする", - "sSortDescending": ": 列を降順に並べ替えるにはアクティブにする" - } -} \ No newline at end of file + "sEmptyTable": "テーブルにデータがありません", + "sInfo": " _TOTAL_ 件中 _START_ から _END_ まで表示", + "sInfoEmpty": " 0 件中 0 から 0 まで表示", + "sInfoFiltered": "(全 _MAX_ 件より抽出)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "_MENU_ 件表示", + "sLoadingRecords": "読み込み中...", + "sProcessing": "処理中...", + "sSearch": "検索:", + "sZeroRecords": "一致するレコードがありません", + "oPaginate": { + "sFirst": "先頭", + "sLast": "最終", + "sNext": "次", + "sPrevious": "前" + }, + "oAria": { + "sSortAscending": ": 列を昇順に並べ替えるにはアクティブにする", + "sSortDescending": ": 列を降順に並べ替えるにはアクティブにする" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/ka.json b/assets/Zed/js/modules/libs/i18n/ka.json index 1d491b34..0ac69338 100644 --- a/assets/Zed/js/modules/libs/i18n/ka.json +++ b/assets/Zed/js/modules/libs/i18n/ka.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "ცხრილში არ არის მონაცემები", - "sInfo": "ნაჩვენებია ჩანაწერები _START_–დან _END_–მდე, _TOTAL_ ჩანაწერიდან", - "sInfoEmpty": "ნაჩვენებია ჩანაწერები 0–დან 0–მდე, 0 ჩანაწერიდან", - "sInfoFiltered": "(გაფილტრული შედეგი _MAX_ ჩანაწერიდან)", - "sInfoPostFix": "", - "sInfoThousands": ".", - "sLengthMenu": "აჩვენე _MENU_ ჩანაწერი", - "sLoadingRecords": "იტვირთება...", - "sProcessing": "მუშავდება...", - "sSearch": "ძიება:", - "sZeroRecords": "არაფერი მოიძებნა", - "oPaginate": { - "sFirst": "პირველი", - "sLast": "ბოლო", - "sNext": "შემდეგი", - "sPrevious": "წინა" - }, - "oAria": { - "sSortAscending": ": სვეტის დალაგება ზრდის მიხედვით", - "sSortDescending": ": სვეტის დალაგება კლების მიხედვით" - } + "sEmptyTable": "ცხრილში არ არის მონაცემები", + "sInfo": "ნაჩვენებია ჩანაწერები _START_–დან _END_–მდე, _TOTAL_ ჩანაწერიდან", + "sInfoEmpty": "ნაჩვენებია ჩანაწერები 0–დან 0–მდე, 0 ჩანაწერიდან", + "sInfoFiltered": "(გაფილტრული შედეგი _MAX_ ჩანაწერიდან)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "აჩვენე _MENU_ ჩანაწერი", + "sLoadingRecords": "იტვირთება...", + "sProcessing": "მუშავდება...", + "sSearch": "ძიება:", + "sZeroRecords": "არაფერი მოიძებნა", + "oPaginate": { + "sFirst": "პირველი", + "sLast": "ბოლო", + "sNext": "შემდეგი", + "sPrevious": "წინა" + }, + "oAria": { + "sSortAscending": ": სვეტის დალაგება ზრდის მიხედვით", + "sSortDescending": ": სვეტის დალაგება კლების მიხედვით" + } } diff --git a/assets/Zed/js/modules/libs/i18n/kk.json b/assets/Zed/js/modules/libs/i18n/kk.json index 4ac6951f..44b8b6bc 100644 --- a/assets/Zed/js/modules/libs/i18n/kk.json +++ b/assets/Zed/js/modules/libs/i18n/kk.json @@ -1,22 +1,22 @@ { - "processing": "Күте тұрыңыз...", - "search": "Іздеу:", - "lengthMenu": "Жазбалар _MENU_ көрсету", - "info": "_TOTAL_ жазбалары бойынша _START_ бастап _END_ дейінгі жазбалар", - "infoEmpty": "0 жазбалары бойынша 0 бастап 0 дейінгі жазбалар", - "infoFiltered": "(_MAX_ жазбасынан сұрыпталды)", - "infoPostFix": "", - "loadingRecords": "Жазбалар жүктемесі...", - "zeroRecords": "Жазбалар жоқ", - "emptyTable": "Кестеде деректер жоқ", - "paginate": { - "first": "Бірінші", - "previous": "Алдыңғысы", - "next": "Келесі", - "last": "Соңғы" - }, - "aria": { - "sortAscending": ": өсімі бойынша бағанды сұрыптау үшін активациялау", - "sortDescending": ": кемуі бойынша бағанды сұрыптау үшін активациялау" - } -} \ No newline at end of file + "processing": "Күте тұрыңыз...", + "search": "Іздеу:", + "lengthMenu": "Жазбалар _MENU_ көрсету", + "info": "_TOTAL_ жазбалары бойынша _START_ бастап _END_ дейінгі жазбалар", + "infoEmpty": "0 жазбалары бойынша 0 бастап 0 дейінгі жазбалар", + "infoFiltered": "(_MAX_ жазбасынан сұрыпталды)", + "infoPostFix": "", + "loadingRecords": "Жазбалар жүктемесі...", + "zeroRecords": "Жазбалар жоқ", + "emptyTable": "Кестеде деректер жоқ", + "paginate": { + "first": "Бірінші", + "previous": "Алдыңғысы", + "next": "Келесі", + "last": "Соңғы" + }, + "aria": { + "sortAscending": ": өсімі бойынша бағанды сұрыптау үшін активациялау", + "sortDescending": ": кемуі бойынша бағанды сұрыптау үшін активациялау" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/km.json b/assets/Zed/js/modules/libs/i18n/km.json index a98f8378..e6bbfa63 100644 --- a/assets/Zed/js/modules/libs/i18n/km.json +++ b/assets/Zed/js/modules/libs/i18n/km.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "មិនមានទិន្នន័យក្នុងតារាងនេះទេ", - "sInfo": "បង្ហាញជួរទី _START_ ដល់ទី _END_ ក្នុងចំណោម _TOTAL_ ជួរ", - "sInfoEmpty": "បង្ហាញជួរទី 0 ដល់ទី 0 ក្នុងចំណោម 0 ជួរ", - "sInfoFiltered": "(បានចម្រាញ់ចេញពីទិន្នន័យសរុប _MAX_ ជួរ)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "បង្ហាញ _MENU_ ជួរ", + "sEmptyTable": "មិនមានទិន្នន័យក្នុងតារាងនេះទេ", + "sInfo": "បង្ហាញជួរទី _START_ ដល់ទី _END_ ក្នុងចំណោម _TOTAL_ ជួរ", + "sInfoEmpty": "បង្ហាញជួរទី 0 ដល់ទី 0 ក្នុងចំណោម 0 ជួរ", + "sInfoFiltered": "(បានចម្រាញ់ចេញពីទិន្នន័យសរុប _MAX_ ជួរ)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "បង្ហាញ _MENU_ ជួរ", "sLoadingRecords": "កំពុងផ្ទុក...", - "sProcessing": "កំពុងដំណើរការ...", - "sSearch": "ស្វែងរក:", - "sZeroRecords": "មិនមានទិន្នន័យត្រូវតាមលក្ខខណ្ឌស្វែងរកទេ", + "sProcessing": "កំពុងដំណើរការ...", + "sSearch": "ស្វែងរក:", + "sZeroRecords": "មិនមានទិន្នន័យត្រូវតាមលក្ខខណ្ឌស្វែងរកទេ", "oPaginate": { - "sFirst": "ដំបូងគេ", - "sLast": "ចុងក្រោយ", - "sNext": "បន្ទាប់", + "sFirst": "ដំបូងគេ", + "sLast": "ចុងក្រោយ", + "sNext": "បន្ទាប់", "sPrevious": "ក្រោយ" }, "oAria": { - "sSortAscending": ": ចុចដើម្បីរៀបជួរឈរនេះតាមលំដាប់ឡើង", + "sSortAscending": ": ចុចដើម្បីរៀបជួរឈរនេះតាមលំដាប់ឡើង", "sSortDescending": ": ចុចដើម្បីរៀបជួរឈរនេះតាមលំដាប់ចុះ" } } diff --git a/assets/Zed/js/modules/libs/i18n/ko.json b/assets/Zed/js/modules/libs/i18n/ko.json index b9b23721..bfc6d0f6 100644 --- a/assets/Zed/js/modules/libs/i18n/ko.json +++ b/assets/Zed/js/modules/libs/i18n/ko.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "데이터가 없습니다", - "sInfo": "_START_ - _END_ / _TOTAL_", - "sInfoEmpty": "0 - 0 / 0", - "sInfoFiltered": "(총 _MAX_ 개)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "페이지당 줄수 _MENU_", - "sLoadingRecords": "읽는중...", - "sProcessing": "처리중...", - "sSearch": "검색:", - "sZeroRecords": "검색 결과가 없습니다", - "oPaginate": { - "sFirst": "처음", - "sLast": "마지막", - "sNext": "다음", - "sPrevious": "이전" - }, - "oAria": { - "sSortAscending": ": 오름차순 정렬", - "sSortDescending": ": 내림차순 정렬" - } -} \ No newline at end of file + "sEmptyTable": "데이터가 없습니다", + "sInfo": "_START_ - _END_ / _TOTAL_", + "sInfoEmpty": "0 - 0 / 0", + "sInfoFiltered": "(총 _MAX_ 개)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "페이지당 줄수 _MENU_", + "sLoadingRecords": "읽는중...", + "sProcessing": "처리중...", + "sSearch": "검색:", + "sZeroRecords": "검색 결과가 없습니다", + "oPaginate": { + "sFirst": "처음", + "sLast": "마지막", + "sNext": "다음", + "sPrevious": "이전" + }, + "oAria": { + "sSortAscending": ": 오름차순 정렬", + "sSortDescending": ": 내림차순 정렬" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/lt.json b/assets/Zed/js/modules/libs/i18n/lt.json index 3c12f545..6e1d57a2 100644 --- a/assets/Zed/js/modules/libs/i18n/lt.json +++ b/assets/Zed/js/modules/libs/i18n/lt.json @@ -1,17 +1,17 @@ { - "sEmptyTable": "Lentelėje nėra duomenų", - "sInfo": "Rodomi įrašai nuo _START_ iki _END_ iš _TOTAL_ įrašų", - "sInfoEmpty": "Rodomi įrašai nuo 0 iki 0 iš 0", - "sInfoFiltered": "(atrinkta iš _MAX_ įrašų)", - "sInfoPostFix": "", - "sInfoThousands": " ", - "sLengthMenu": "Rodyti _MENU_ įrašus", - "sLoadingRecords": "Įkeliama...", - "sProcessing": "Apdorojama...", - "sSearch": "Ieškoti:", - "sThousands": " ", - "sUrl": "", - "sZeroRecords": "Įrašų nerasta", + "sEmptyTable": "Lentelėje nėra duomenų", + "sInfo": "Rodomi įrašai nuo _START_ iki _END_ iš _TOTAL_ įrašų", + "sInfoEmpty": "Rodomi įrašai nuo 0 iki 0 iš 0", + "sInfoFiltered": "(atrinkta iš _MAX_ įrašų)", + "sInfoPostFix": "", + "sInfoThousands": " ", + "sLengthMenu": "Rodyti _MENU_ įrašus", + "sLoadingRecords": "Įkeliama...", + "sProcessing": "Apdorojama...", + "sSearch": "Ieškoti:", + "sThousands": " ", + "sUrl": "", + "sZeroRecords": "Įrašų nerasta", "oPaginate": { "sFirst": "Pirmas", diff --git a/assets/Zed/js/modules/libs/i18n/lv.json b/assets/Zed/js/modules/libs/i18n/lv.json index a3785203..568f6fc7 100644 --- a/assets/Zed/js/modules/libs/i18n/lv.json +++ b/assets/Zed/js/modules/libs/i18n/lv.json @@ -1,22 +1,22 @@ { - "processing": "Uzgaidiet ...", - "search": "Meklēt:", - "lengthMenu": "Rādīt _MENU_ ierakstus", - "info": "Parādīti _START_ līdz _END_ no _TOTAL_ ierakstiem", - "infoEmpty": "Nav ierakstu", - "infoFiltered": "(atlasīts no pavisam _MAX_ ierakstiem)", - "infoPostFix": "", - "loadingRecords": "Notiek ielāde ...", - "zeroRecords": "Nav atrasti vaicājumam atbilstoši ieraksti", - "emptyTable": "Tabulā nav datu", - "paginate": { - "first": "Pirmā", - "previous": "Iepriekšējā", - "next": "Nākošā", - "last": "Pēdējā" - }, - "aria": { - "sortAscending": ": aktivizēt kolonnu, lai kārtotu augoši", - "sortDescending": ": aktivizēt kolonnu, lai kārtotu dilstoši" - } + "processing": "Uzgaidiet ...", + "search": "Meklēt:", + "lengthMenu": "Rādīt _MENU_ ierakstus", + "info": "Parādīti _START_ līdz _END_ no _TOTAL_ ierakstiem", + "infoEmpty": "Nav ierakstu", + "infoFiltered": "(atlasīts no pavisam _MAX_ ierakstiem)", + "infoPostFix": "", + "loadingRecords": "Notiek ielāde ...", + "zeroRecords": "Nav atrasti vaicājumam atbilstoši ieraksti", + "emptyTable": "Tabulā nav datu", + "paginate": { + "first": "Pirmā", + "previous": "Iepriekšējā", + "next": "Nākošā", + "last": "Pēdējā" + }, + "aria": { + "sortAscending": ": aktivizēt kolonnu, lai kārtotu augoši", + "sortDescending": ": aktivizēt kolonnu, lai kārtotu dilstoši" + } } diff --git a/assets/Zed/js/modules/libs/i18n/mk.json b/assets/Zed/js/modules/libs/i18n/mk.json index 03b6f546..52c71119 100644 --- a/assets/Zed/js/modules/libs/i18n/mk.json +++ b/assets/Zed/js/modules/libs/i18n/mk.json @@ -1,19 +1,19 @@ { - "sProcessing": "Процесирање...", - "sLengthMenu": "Прикажи _MENU_ записи", - "sZeroRecords": "Не се пронајдени записи", - "sEmptyTable": "Нема податоци во табелата", - "sLoadingRecords": "Вчитување...", - "sInfo": "Прикажани _START_ до _END_ од _TOTAL_ записи", - "sInfoEmpty": "Прикажани 0 до 0 од 0 записи", - "sInfoFiltered": "(филтрирано од вкупно _MAX_ записи)", - "sInfoPostFix": "", - "sSearch": "Барај", - "sUrl": "", - "oPaginate": { - "sFirst": "Почетна", - "sPrevious": "Претходна", - "sNext": "Следна", - "sLast": "Последна" - } + "sProcessing": "Процесирање...", + "sLengthMenu": "Прикажи _MENU_ записи", + "sZeroRecords": "Не се пронајдени записи", + "sEmptyTable": "Нема податоци во табелата", + "sLoadingRecords": "Вчитување...", + "sInfo": "Прикажани _START_ до _END_ од _TOTAL_ записи", + "sInfoEmpty": "Прикажани 0 до 0 од 0 записи", + "sInfoFiltered": "(филтрирано од вкупно _MAX_ записи)", + "sInfoPostFix": "", + "sSearch": "Барај", + "sUrl": "", + "oPaginate": { + "sFirst": "Почетна", + "sPrevious": "Претходна", + "sNext": "Следна", + "sLast": "Последна" + } } diff --git a/assets/Zed/js/modules/libs/i18n/mn.json b/assets/Zed/js/modules/libs/i18n/mn.json index 7cebbe3e..7879f998 100644 --- a/assets/Zed/js/modules/libs/i18n/mn.json +++ b/assets/Zed/js/modules/libs/i18n/mn.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Хүснэгт хоосон байна", - "sInfo": "Нийт _TOTAL_ бичлэгээс _START_ - _END_ харуулж байна", - "sInfoEmpty": "Тохирох үр дүн алга", - "sInfoFiltered": "(нийт _MAX_ бичлэгээс шүүв)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Дэлгэцэд _MENU_ бичлэг харуулна", - "sLoadingRecords": "Ачааллаж байна...", - "sProcessing": "Боловсруулж байна...", - "sSearch": "Хайлт:", - "sZeroRecords": "Тохирох бичлэг олдсонгүй", - "oPaginate": { - "sFirst": "Эхнийх", - "sLast": "Сүүлийнх", - "sNext": "Өмнөх", - "sPrevious": "Дараах" - }, - "oAria": { - "sSortAscending": ": цагаан толгойн дарааллаар эрэмбэлэх", - "sSortDescending": ": цагаан толгойн эсрэг дарааллаар эрэмбэлэх" - } + "sEmptyTable": "Хүснэгт хоосон байна", + "sInfo": "Нийт _TOTAL_ бичлэгээс _START_ - _END_ харуулж байна", + "sInfoEmpty": "Тохирох үр дүн алга", + "sInfoFiltered": "(нийт _MAX_ бичлэгээс шүүв)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Дэлгэцэд _MENU_ бичлэг харуулна", + "sLoadingRecords": "Ачааллаж байна...", + "sProcessing": "Боловсруулж байна...", + "sSearch": "Хайлт:", + "sZeroRecords": "Тохирох бичлэг олдсонгүй", + "oPaginate": { + "sFirst": "Эхнийх", + "sLast": "Сүүлийнх", + "sNext": "Өмнөх", + "sPrevious": "Дараах" + }, + "oAria": { + "sSortAscending": ": цагаан толгойн дарааллаар эрэмбэлэх", + "sSortDescending": ": цагаан толгойн эсрэг дарааллаар эрэмбэлэх" + } } diff --git a/assets/Zed/js/modules/libs/i18n/ms.json b/assets/Zed/js/modules/libs/i18n/ms.json index 8d0a6144..a2bd610f 100644 --- a/assets/Zed/js/modules/libs/i18n/ms.json +++ b/assets/Zed/js/modules/libs/i18n/ms.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Tiada data", - "sInfo": "Paparan dari _START_ hingga _END_ dari _TOTAL_ rekod", - "sInfoEmpty": "Paparan 0 hingga 0 dari 0 rekod", - "sInfoFiltered": "(Ditapis dari jumlah _MAX_ rekod)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Papar _MENU_ rekod", - "sLoadingRecords": "Diproses...", - "sProcessing": "Sedang diproses...", - "sSearch": "Carian:", - "sZeroRecords": "Tiada padanan rekod yang dijumpai.", - "oPaginate": { - "sFirst": "Pertama", - "sPrevious": "Sebelum", - "sNext": "Kemudian", - "sLast": "Akhir" - }, - "oAria": { - "sSortAscending": ": diaktifkan kepada susunan lajur menaik", - "sSortDescending": ": diaktifkan kepada susunan lajur menurun" - } + "sEmptyTable": "Tiada data", + "sInfo": "Paparan dari _START_ hingga _END_ dari _TOTAL_ rekod", + "sInfoEmpty": "Paparan 0 hingga 0 dari 0 rekod", + "sInfoFiltered": "(Ditapis dari jumlah _MAX_ rekod)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Papar _MENU_ rekod", + "sLoadingRecords": "Diproses...", + "sProcessing": "Sedang diproses...", + "sSearch": "Carian:", + "sZeroRecords": "Tiada padanan rekod yang dijumpai.", + "oPaginate": { + "sFirst": "Pertama", + "sPrevious": "Sebelum", + "sNext": "Kemudian", + "sLast": "Akhir" + }, + "oAria": { + "sSortAscending": ": diaktifkan kepada susunan lajur menaik", + "sSortDescending": ": diaktifkan kepada susunan lajur menurun" + } } diff --git a/assets/Zed/js/modules/libs/i18n/ne.json b/assets/Zed/js/modules/libs/i18n/ne.json index 4bfb0aba..76f260d6 100644 --- a/assets/Zed/js/modules/libs/i18n/ne.json +++ b/assets/Zed/js/modules/libs/i18n/ne.json @@ -1,24 +1,24 @@ { - "sEmptyTable": "टेबलमा डाटा उपलब्ध भएन", - "sInfo": "_TOTAL_ रेकर्ड मध्य _START_ देखि _END_ रेकर्ड देखाउंदै", - "sInfoEmpty": "0 मध्य 0 देखि 0 रेकर्ड देखाउंदै", - "sInfoFiltered": "(_MAX_ कुल रेकर्डबाट छनौट गरिएको)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": " _MENU_ रेकर्ड देखाउने ", - "sLoadingRecords": "लोड हुँदैछ...", - "sProcessing": "प्रगति हुदैंछ ...", - "sSearch": "खोजी:", - "sUrl": "", - "sZeroRecords": "कुनै मिल्ने रेकर्ड फेला परेन", - "oPaginate": { - "sFirst": "प्रथम", - "sPrevious": "पछिल्लो", - "sNext": "अघिल्लो", - "sLast": "अन्तिम" - }, - "oAria": { - "sSortAscending": ": अगाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने", - "sSortDescending": ": पछाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने" - } + "sEmptyTable": "टेबलमा डाटा उपलब्ध भएन", + "sInfo": "_TOTAL_ रेकर्ड मध्य _START_ देखि _END_ रेकर्ड देखाउंदै", + "sInfoEmpty": "0 मध्य 0 देखि 0 रेकर्ड देखाउंदै", + "sInfoFiltered": "(_MAX_ कुल रेकर्डबाट छनौट गरिएको)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": " _MENU_ रेकर्ड देखाउने ", + "sLoadingRecords": "लोड हुँदैछ...", + "sProcessing": "प्रगति हुदैंछ ...", + "sSearch": "खोजी:", + "sUrl": "", + "sZeroRecords": "कुनै मिल्ने रेकर्ड फेला परेन", + "oPaginate": { + "sFirst": "प्रथम", + "sPrevious": "पछिल्लो", + "sNext": "अघिल्लो", + "sLast": "अन्तिम" + }, + "oAria": { + "sSortAscending": ": अगाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने", + "sSortDescending": ": पछाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने" + } } diff --git a/assets/Zed/js/modules/libs/i18n/nl.json b/assets/Zed/js/modules/libs/i18n/nl.json index add259bf..52e5dd2c 100644 --- a/assets/Zed/js/modules/libs/i18n/nl.json +++ b/assets/Zed/js/modules/libs/i18n/nl.json @@ -17,7 +17,7 @@ "sPrevious": "Vorige" }, "oAria": { - "sSortAscending": ": activeer om kolom oplopend te sorteren", + "sSortAscending": ": activeer om kolom oplopend te sorteren", "sSortDescending": ": activeer om kolom aflopend te sorteren" } } diff --git a/assets/Zed/js/modules/libs/i18n/pl.json b/assets/Zed/js/modules/libs/i18n/pl.json index 109f8160..5a2363d3 100644 --- a/assets/Zed/js/modules/libs/i18n/pl.json +++ b/assets/Zed/js/modules/libs/i18n/pl.json @@ -1,22 +1,22 @@ { - "processing": "Przetwarzanie...", - "search": "Szukaj:", - "lengthMenu": "Pokaż _MENU_ pozycji", - "info": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie", - "infoEmpty": "Pozycji 0 z 0 dostępnych", - "infoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)", - "infoPostFix": "", - "loadingRecords": "Wczytywanie...", - "zeroRecords": "Nie znaleziono pasujących pozycji", - "emptyTable": "Brak danych", - "paginate": { - "first": "Pierwsza", - "previous": "Poprzednia", - "next": "Następna", - "last": "Ostatnia" - }, - "aria": { - "sortAscending": ": aktywuj, by posortować kolumnę rosnąco", - "sortDescending": ": aktywuj, by posortować kolumnę malejąco" - } + "processing": "Przetwarzanie...", + "search": "Szukaj:", + "lengthMenu": "Pokaż _MENU_ pozycji", + "info": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie", + "infoEmpty": "Pozycji 0 z 0 dostępnych", + "infoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)", + "infoPostFix": "", + "loadingRecords": "Wczytywanie...", + "zeroRecords": "Nie znaleziono pasujących pozycji", + "emptyTable": "Brak danych", + "paginate": { + "first": "Pierwsza", + "previous": "Poprzednia", + "next": "Następna", + "last": "Ostatnia" + }, + "aria": { + "sortAscending": ": aktywuj, by posortować kolumnę rosnąco", + "sortDescending": ": aktywuj, by posortować kolumnę malejąco" + } } diff --git a/assets/Zed/js/modules/libs/i18n/ps.json b/assets/Zed/js/modules/libs/i18n/ps.json index d3635543..fee80623 100644 --- a/assets/Zed/js/modules/libs/i18n/ps.json +++ b/assets/Zed/js/modules/libs/i18n/ps.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "جدول خالي دی", - "sInfo": "د _START_ څخه تر _END_ پوري، له ټولو _TOTAL_ څخه", - "sInfoEmpty": "د 0 څخه تر 0 پوري، له ټولو 0 څخه", - "sInfoFiltered": "(لټول سوي له ټولو _MAX_ څخه)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "_MENU_ کتاره وښايه", - "sLoadingRecords": "منتظر اوسئ...", - "sProcessing": "منتظر اوسئ...", - "sSearch": "لټون:", - "sZeroRecords": "د لټون مطابق معلومات و نه موندل سول", - "oPaginate": { - "sFirst": "لومړۍ", - "sLast": "وروستۍ", - "sNext": "بله", - "sPrevious": "شاته" - }, - "oAria": { - "sSortAscending": ": په صعودي ډول مرتبول", - "sSortDescending": ": په نزولي ډول مرتبول" - } -} \ No newline at end of file + "sEmptyTable": "جدول خالي دی", + "sInfo": "د _START_ څخه تر _END_ پوري، له ټولو _TOTAL_ څخه", + "sInfoEmpty": "د 0 څخه تر 0 پوري، له ټولو 0 څخه", + "sInfoFiltered": "(لټول سوي له ټولو _MAX_ څخه)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "_MENU_ کتاره وښايه", + "sLoadingRecords": "منتظر اوسئ...", + "sProcessing": "منتظر اوسئ...", + "sSearch": "لټون:", + "sZeroRecords": "د لټون مطابق معلومات و نه موندل سول", + "oPaginate": { + "sFirst": "لومړۍ", + "sLast": "وروستۍ", + "sNext": "بله", + "sPrevious": "شاته" + }, + "oAria": { + "sSortAscending": ": په صعودي ډول مرتبول", + "sSortDescending": ": په نزولي ډول مرتبول" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/pt.json b/assets/Zed/js/modules/libs/i18n/pt.json index c1fe48ea..279cd4be 100644 --- a/assets/Zed/js/modules/libs/i18n/pt.json +++ b/assets/Zed/js/modules/libs/i18n/pt.json @@ -1,22 +1,22 @@ { - "sEmptyTable": "Não foi encontrado nenhum registo", - "sProcessing": "A carregar...", - "sLengthMenu": "Mostrar _MENU_ registos", - "sZeroRecords": "Não foram encontrados resultados", - "sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registos", - "sInfoEmpty": "Mostrando de 0 até 0 de 0 registos", - "sInfoFiltered": "(filtrado de _MAX_ registos no total)", - "sInfoPostFix": "", - "sSearch": "Procurar:", - "sUrl": "", - "oPaginate": { - "sFirst": "Primeiro", - "sPrevious": "Anterior", - "sNext": "Seguinte", - "sLast": "Último" - }, - "oAria": { - "sSortAscending": ": Ordenar colunas de forma ascendente", - "sSortDescending": ": Ordenar colunas de forma descendente" - } + "sEmptyTable": "Não foi encontrado nenhum registo", + "sProcessing": "A carregar...", + "sLengthMenu": "Mostrar _MENU_ registos", + "sZeroRecords": "Não foram encontrados resultados", + "sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registos", + "sInfoEmpty": "Mostrando de 0 até 0 de 0 registos", + "sInfoFiltered": "(filtrado de _MAX_ registos no total)", + "sInfoPostFix": "", + "sSearch": "Procurar:", + "sUrl": "", + "oPaginate": { + "sFirst": "Primeiro", + "sPrevious": "Anterior", + "sNext": "Seguinte", + "sLast": "Último" + }, + "oAria": { + "sSortAscending": ": Ordenar colunas de forma ascendente", + "sSortDescending": ": Ordenar colunas de forma descendente" + } } diff --git a/assets/Zed/js/modules/libs/i18n/ro.json b/assets/Zed/js/modules/libs/i18n/ro.json index c437f5c8..b761ca6b 100644 --- a/assets/Zed/js/modules/libs/i18n/ro.json +++ b/assets/Zed/js/modules/libs/i18n/ro.json @@ -1,17 +1,17 @@ { - "sProcessing": "Procesează...", - "sLengthMenu": "Afișează _MENU_ înregistrări pe pagină", - "sZeroRecords": "Nu am găsit nimic - ne pare rău", - "sInfo": "Afișate de la _START_ la _END_ din _TOTAL_ înregistrări", - "sInfoEmpty": "Afișate de la 0 la 0 din 0 înregistrări", - "sInfoFiltered": "(filtrate dintr-un total de _MAX_ înregistrări)", - "sInfoPostFix": "", - "sSearch": "Caută:", - "sUrl": "", - "oPaginate": { - "sFirst": "Prima", - "sPrevious": "Precedenta", - "sNext": "Următoarea", - "sLast": "Ultima" - } + "sProcessing": "Procesează...", + "sLengthMenu": "Afișează _MENU_ înregistrări pe pagină", + "sZeroRecords": "Nu am găsit nimic - ne pare rău", + "sInfo": "Afișate de la _START_ la _END_ din _TOTAL_ înregistrări", + "sInfoEmpty": "Afișate de la 0 la 0 din 0 înregistrări", + "sInfoFiltered": "(filtrate dintr-un total de _MAX_ înregistrări)", + "sInfoPostFix": "", + "sSearch": "Caută:", + "sUrl": "", + "oPaginate": { + "sFirst": "Prima", + "sPrevious": "Precedenta", + "sNext": "Următoarea", + "sLast": "Ultima" + } } diff --git a/assets/Zed/js/modules/libs/i18n/ru.json b/assets/Zed/js/modules/libs/i18n/ru.json index 77bf3900..7265464e 100644 --- a/assets/Zed/js/modules/libs/i18n/ru.json +++ b/assets/Zed/js/modules/libs/i18n/ru.json @@ -1,22 +1,22 @@ { - "processing": "Подождите...", - "search": "Поиск:", - "lengthMenu": "Показать _MENU_ записей", - "info": "Записи с _START_ до _END_ из _TOTAL_ записей", - "infoEmpty": "Записи с 0 до 0 из 0 записей", - "infoFiltered": "(отфильтровано из _MAX_ записей)", - "infoPostFix": "", - "loadingRecords": "Загрузка записей...", - "zeroRecords": "Записи отсутствуют.", - "emptyTable": "В таблице отсутствуют данные", - "paginate": { - "first": "Первая", - "previous": "Предыдущая", - "next": "Следующая", - "last": "Последняя" - }, - "aria": { - "sortAscending": ": активировать для сортировки столбца по возрастанию", - "sortDescending": ": активировать для сортировки столбца по убыванию" - } + "processing": "Подождите...", + "search": "Поиск:", + "lengthMenu": "Показать _MENU_ записей", + "info": "Записи с _START_ до _END_ из _TOTAL_ записей", + "infoEmpty": "Записи с 0 до 0 из 0 записей", + "infoFiltered": "(отфильтровано из _MAX_ записей)", + "infoPostFix": "", + "loadingRecords": "Загрузка записей...", + "zeroRecords": "Записи отсутствуют.", + "emptyTable": "В таблице отсутствуют данные", + "paginate": { + "first": "Первая", + "previous": "Предыдущая", + "next": "Следующая", + "last": "Последняя" + }, + "aria": { + "sortAscending": ": активировать для сортировки столбца по возрастанию", + "sortDescending": ": активировать для сортировки столбца по убыванию" + } } diff --git a/assets/Zed/js/modules/libs/i18n/si.json b/assets/Zed/js/modules/libs/i18n/si.json index 645a2978..fd30cc9c 100644 --- a/assets/Zed/js/modules/libs/i18n/si.json +++ b/assets/Zed/js/modules/libs/i18n/si.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "වගුවේ දත්ත කිසිවක් නොමැත", - "sInfo": "_TOTAL_ න් _START_ සිට _END_ දක්වා", - "sInfoEmpty": "0 න් 0 සිට 0 දක්වා", - "sInfoFiltered": "(_MAX_ න් තෝරාගත් )", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "_MENU_ ක් පෙන්වන්න", - "sLoadingRecords": "පූරණය වෙමින් පවතී...", - "sProcessing": "සැකසෙමින් පවතී...", - "sSearch": "සොයන්න :", - "sZeroRecords": "ගැලපෙන වාර්තා නොමැත.", - "oPaginate": { - "sFirst": "පළමු", - "sLast": "අන්තිම", - "sNext": "ඊළග", - "sPrevious": "පසුගිය" - }, - "oAria": { - "sSortAscending": ": තීරුව ආරෝහනව තෝරන්න", - "sSortDescending": ": තීරුව අවරෝහනව තෝරන්න" - } -} \ No newline at end of file + "sEmptyTable": "වගුවේ දත්ත කිසිවක් නොමැත", + "sInfo": "_TOTAL_ න් _START_ සිට _END_ දක්වා", + "sInfoEmpty": "0 න් 0 සිට 0 දක්වා", + "sInfoFiltered": "(_MAX_ න් තෝරාගත් )", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "_MENU_ ක් පෙන්වන්න", + "sLoadingRecords": "පූරණය වෙමින් පවතී...", + "sProcessing": "සැකසෙමින් පවතී...", + "sSearch": "සොයන්න :", + "sZeroRecords": "ගැලපෙන වාර්තා නොමැත.", + "oPaginate": { + "sFirst": "පළමු", + "sLast": "අන්තිම", + "sNext": "ඊළග", + "sPrevious": "පසුගිය" + }, + "oAria": { + "sSortAscending": ": තීරුව ආරෝහනව තෝරන්න", + "sSortDescending": ": තීරුව අවරෝහනව තෝරන්න" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/sk.json b/assets/Zed/js/modules/libs/i18n/sk.json index 47bbcc9d..c43b49de 100644 --- a/assets/Zed/js/modules/libs/i18n/sk.json +++ b/assets/Zed/js/modules/libs/i18n/sk.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Nie sú k dispozícii žiadne dáta", - "sInfo": "Záznamy _START_ až _END_ z celkom _TOTAL_", - "sInfoEmpty": "Záznamy 0 až 0 z celkom 0 ", - "sInfoFiltered": "(vyfiltrované spomedzi _MAX_ záznamov)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Zobraz _MENU_ záznamov", - "sLoadingRecords": "Načítavam...", - "sProcessing": "Spracúvam...", - "sSearch": "Hľadať:", - "sZeroRecords": "Nenašli sa žiadne vyhovujúce záznamy", - "oPaginate": { - "sFirst": "Prvá", - "sLast": "Posledná", - "sNext": "Nasledujúca", - "sPrevious": "Predchádzajúca" - }, - "oAria": { - "sSortAscending": ": aktivujte na zoradenie stĺpca vzostupne", - "sSortDescending": ": aktivujte na zoradenie stĺpca zostupne" - } + "sEmptyTable": "Nie sú k dispozícii žiadne dáta", + "sInfo": "Záznamy _START_ až _END_ z celkom _TOTAL_", + "sInfoEmpty": "Záznamy 0 až 0 z celkom 0 ", + "sInfoFiltered": "(vyfiltrované spomedzi _MAX_ záznamov)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Zobraz _MENU_ záznamov", + "sLoadingRecords": "Načítavam...", + "sProcessing": "Spracúvam...", + "sSearch": "Hľadať:", + "sZeroRecords": "Nenašli sa žiadne vyhovujúce záznamy", + "oPaginate": { + "sFirst": "Prvá", + "sLast": "Posledná", + "sNext": "Nasledujúca", + "sPrevious": "Predchádzajúca" + }, + "oAria": { + "sSortAscending": ": aktivujte na zoradenie stĺpca vzostupne", + "sSortDescending": ": aktivujte na zoradenie stĺpca zostupne" + } } diff --git a/assets/Zed/js/modules/libs/i18n/sl.json b/assets/Zed/js/modules/libs/i18n/sl.json index b47689aa..dbd6c165 100644 --- a/assets/Zed/js/modules/libs/i18n/sl.json +++ b/assets/Zed/js/modules/libs/i18n/sl.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Nobenih podatkov ni na voljo", - "sInfo": "Prikazujem _START_ do _END_ od _TOTAL_ zapisov", - "sInfoEmpty": "Prikazujem 0 do 0 od 0 zapisov", - "sInfoFiltered": "(filtrirano od _MAX_ vseh zapisov)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Prikaži _MENU_ zapisov", - "sLoadingRecords": "Nalagam...", - "sProcessing": "Obdelujem...", - "sSearch": "Išči:", - "sZeroRecords": "Nobeden zapis ne ustreza", - "oPaginate": { - "sFirst": "Prvi", - "sLast": "Zadnji", - "sNext": "Nasl.", - "sPrevious": "Pred." - }, - "oAria": { - "sSortAscending": ": vključite za naraščujoči sort", - "sSortDescending": ": vključite za padajoči sort" - } -} \ No newline at end of file + "sEmptyTable": "Nobenih podatkov ni na voljo", + "sInfo": "Prikazujem _START_ do _END_ od _TOTAL_ zapisov", + "sInfoEmpty": "Prikazujem 0 do 0 od 0 zapisov", + "sInfoFiltered": "(filtrirano od _MAX_ vseh zapisov)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Prikaži _MENU_ zapisov", + "sLoadingRecords": "Nalagam...", + "sProcessing": "Obdelujem...", + "sSearch": "Išči:", + "sZeroRecords": "Nobeden zapis ne ustreza", + "oPaginate": { + "sFirst": "Prvi", + "sLast": "Zadnji", + "sNext": "Nasl.", + "sPrevious": "Pred." + }, + "oAria": { + "sSortAscending": ": vključite za naraščujoči sort", + "sSortDescending": ": vključite za padajoči sort" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/sq.json b/assets/Zed/js/modules/libs/i18n/sq.json index 5ebea4ea..4fcf7b05 100644 --- a/assets/Zed/js/modules/libs/i18n/sq.json +++ b/assets/Zed/js/modules/libs/i18n/sq.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Nuk ka asnjë të dhënë në tabele", - "sInfo": "Duke treguar _START_ deri _END_ prej _TOTAL_ reshtave", - "sInfoEmpty": "Duke treguar 0 deri 0 prej 0 reshtave", - "sInfoFiltered": "(të filtruara nga gjithësej _MAX_ reshtave)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Shiko _MENU_ reshta", - "sLoadingRecords": "Duke punuar...", - "sProcessing": "Duke procesuar...", - "sSearch": "Kërkoni:", - "sZeroRecords": "Asnjë e dhënë nuk u gjet", - "oPaginate": { - "sFirst": "E para", - "sLast": "E Fundit", - "sNext": "Tjetra", - "sPrevious": "E Kaluara" - }, - "oAria": { - "sSortAscending": ": aktivizo për të sortuar kolumnin me vlera në ngritje", - "sSortDescending": ": aktivizo për të sortuar kolumnin me vlera në zbritje" - } -} \ No newline at end of file + "sEmptyTable": "Nuk ka asnjë të dhënë në tabele", + "sInfo": "Duke treguar _START_ deri _END_ prej _TOTAL_ reshtave", + "sInfoEmpty": "Duke treguar 0 deri 0 prej 0 reshtave", + "sInfoFiltered": "(të filtruara nga gjithësej _MAX_ reshtave)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Shiko _MENU_ reshta", + "sLoadingRecords": "Duke punuar...", + "sProcessing": "Duke procesuar...", + "sSearch": "Kërkoni:", + "sZeroRecords": "Asnjë e dhënë nuk u gjet", + "oPaginate": { + "sFirst": "E para", + "sLast": "E Fundit", + "sNext": "Tjetra", + "sPrevious": "E Kaluara" + }, + "oAria": { + "sSortAscending": ": aktivizo për të sortuar kolumnin me vlera në ngritje", + "sSortDescending": ": aktivizo për të sortuar kolumnin me vlera në zbritje" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/sr.json b/assets/Zed/js/modules/libs/i18n/sr.json index b8f06f72..224c5348 100644 --- a/assets/Zed/js/modules/libs/i18n/sr.json +++ b/assets/Zed/js/modules/libs/i18n/sr.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Нема података у табели", - "sInfo": "Приказ _START_ до _END_ од укупно _TOTAL_ записа", - "sInfoEmpty": "Приказ 0 до 0 од укупно 0 записа", - "sInfoFiltered": "(филтрирано од укупно _MAX_ записа)", - "sInfoPostFix": "", - "sInfoThousands": ".", - "sLengthMenu": "Прикажи _MENU_ записа", - "sLoadingRecords": "Учитавање...", - "sProcessing": "Обрада...", - "sSearch": "Претрага:", - "sZeroRecords": "Нису пронађени одговарајући записи", - "oPaginate": { - "sFirst": "Почетна", - "sLast": "Последња", - "sNext": "Следећа", - "sPrevious": "Предходна" - }, - "oAria": { - "sSortAscending": ": активирајте да сортирате колону узлазно", - "sSortDescending": ": активирајте да сортирате колону силазно" - } + "sEmptyTable": "Нема података у табели", + "sInfo": "Приказ _START_ до _END_ од укупно _TOTAL_ записа", + "sInfoEmpty": "Приказ 0 до 0 од укупно 0 записа", + "sInfoFiltered": "(филтрирано од укупно _MAX_ записа)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "Прикажи _MENU_ записа", + "sLoadingRecords": "Учитавање...", + "sProcessing": "Обрада...", + "sSearch": "Претрага:", + "sZeroRecords": "Нису пронађени одговарајући записи", + "oPaginate": { + "sFirst": "Почетна", + "sLast": "Последња", + "sNext": "Следећа", + "sPrevious": "Предходна" + }, + "oAria": { + "sSortAscending": ": активирајте да сортирате колону узлазно", + "sSortDescending": ": активирајте да сортирате колону силазно" + } } diff --git a/assets/Zed/js/modules/libs/i18n/sv.json b/assets/Zed/js/modules/libs/i18n/sv.json index e480f8ac..2ad0bd74 100644 --- a/assets/Zed/js/modules/libs/i18n/sv.json +++ b/assets/Zed/js/modules/libs/i18n/sv.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Tabellen innehåller ingen data", - "sInfo": "Visar _START_ till _END_ av totalt _TOTAL_ rader", - "sInfoEmpty": "Visar 0 till 0 av totalt 0 rader", - "sInfoFiltered": "(filtrerade från totalt _MAX_ rader)", - "sInfoPostFix": "", - "sInfoThousands": " ", - "sLengthMenu": "Visa _MENU_ rader", - "sLoadingRecords": "Laddar...", - "sProcessing": "Bearbetar...", - "sSearch": "Sök:", - "sZeroRecords": "Hittade inga matchande resultat", - "oPaginate": { - "sFirst": "Första", - "sLast": "Sista", - "sNext": "Nästa", - "sPrevious": "Föregående" - }, - "oAria": { - "sSortAscending": ": aktivera för att sortera kolumnen i stigande ordning", - "sSortDescending": ": aktivera för att sortera kolumnen i fallande ordning" - } + "sEmptyTable": "Tabellen innehåller ingen data", + "sInfo": "Visar _START_ till _END_ av totalt _TOTAL_ rader", + "sInfoEmpty": "Visar 0 till 0 av totalt 0 rader", + "sInfoFiltered": "(filtrerade från totalt _MAX_ rader)", + "sInfoPostFix": "", + "sInfoThousands": " ", + "sLengthMenu": "Visa _MENU_ rader", + "sLoadingRecords": "Laddar...", + "sProcessing": "Bearbetar...", + "sSearch": "Sök:", + "sZeroRecords": "Hittade inga matchande resultat", + "oPaginate": { + "sFirst": "Första", + "sLast": "Sista", + "sNext": "Nästa", + "sPrevious": "Föregående" + }, + "oAria": { + "sSortAscending": ": aktivera för att sortera kolumnen i stigande ordning", + "sSortDescending": ": aktivera för att sortera kolumnen i fallande ordning" + } } diff --git a/assets/Zed/js/modules/libs/i18n/sw.json b/assets/Zed/js/modules/libs/i18n/sw.json index 1435c912..fc651152 100644 --- a/assets/Zed/js/modules/libs/i18n/sw.json +++ b/assets/Zed/js/modules/libs/i18n/sw.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "Hakuna data iliyo patikana", - "sInfo": "Inaonyesha _START_ mpaka _END_ ya matokeo _TOTAL_", - "sInfoEmpty": "Inaonyesha 0 hadi 0 ya matokeo 0", - "sInfoFiltered": "(uschujo kutoka matokeo idadi _MAX_)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "Onyesha _MENU_ matokeo", - "sLoadingRecords": "Inapakia...", - "sProcessing": "Processing...", - "sSearch": "Tafuta:", - "sZeroRecords": "Rekodi vinavyolingana haziku patikana", - "oPaginate": { - "sFirst": "Mwanzo", - "sLast": "Mwisho", - "sNext": "Ijayo", - "sPrevious": "Kabla" - }, - "oAria": { - "sSortAscending": ": seti kulainisha sanjari kwa mtindo wa upandaji", - "sSortDescending": ": seti kulainisha sanjari kwa mtindo wa mteremko" - } -} \ No newline at end of file + "sEmptyTable": "Hakuna data iliyo patikana", + "sInfo": "Inaonyesha _START_ mpaka _END_ ya matokeo _TOTAL_", + "sInfoEmpty": "Inaonyesha 0 hadi 0 ya matokeo 0", + "sInfoFiltered": "(uschujo kutoka matokeo idadi _MAX_)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "Onyesha _MENU_ matokeo", + "sLoadingRecords": "Inapakia...", + "sProcessing": "Processing...", + "sSearch": "Tafuta:", + "sZeroRecords": "Rekodi vinavyolingana haziku patikana", + "oPaginate": { + "sFirst": "Mwanzo", + "sLast": "Mwisho", + "sNext": "Ijayo", + "sPrevious": "Kabla" + }, + "oAria": { + "sSortAscending": ": seti kulainisha sanjari kwa mtindo wa upandaji", + "sSortDescending": ": seti kulainisha sanjari kwa mtindo wa mteremko" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/ta.json b/assets/Zed/js/modules/libs/i18n/ta.json index 40f5aa68..5cf6c67f 100644 --- a/assets/Zed/js/modules/libs/i18n/ta.json +++ b/assets/Zed/js/modules/libs/i18n/ta.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "அட்டவணையில் தரவு கிடைக்கவில்லை", - "sInfo": "உள்ளீடுகளை் _START_ முதல _END_ உள்ள _TOTAL_ காட்டும்", - "sInfoEmpty": "0 உள்ளீடுகளை 0 0 காட்டும்", - "sInfoFiltered": "(_MAX_ மொத்த உள்ளீடுகளை இருந்து வடிகட்டி)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "_MENU_ காண்பி", - "sLoadingRecords": "ஏற்றுகிறது ...", - "sProcessing": "செயலாக்க ...", - "sSearch": "தேடல்:", - "sZeroRecords": "பொருத்தமான பதிவுகள் இல்லை", - "oPaginate": { - "sFirst": "முதல்", - "sLast": "இறுதி", - "sNext": "அடுத்து", - "sPrevious": "முந்தைய" - }, - "oAria": { - "sSortAscending": ": நிரலை ஏறுவரிசையில் வரிசைப்படுத்த செயல்படுத்த", - "sSortDescending": ": நிரலை இறங்கு வரிசைப்படுத்த செயல்படுத்த" - } -} \ No newline at end of file + "sEmptyTable": "அட்டவணையில் தரவு கிடைக்கவில்லை", + "sInfo": "உள்ளீடுகளை் _START_ முதல _END_ உள்ள _TOTAL_ காட்டும்", + "sInfoEmpty": "0 உள்ளீடுகளை 0 0 காட்டும்", + "sInfoFiltered": "(_MAX_ மொத்த உள்ளீடுகளை இருந்து வடிகட்டி)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "_MENU_ காண்பி", + "sLoadingRecords": "ஏற்றுகிறது ...", + "sProcessing": "செயலாக்க ...", + "sSearch": "தேடல்:", + "sZeroRecords": "பொருத்தமான பதிவுகள் இல்லை", + "oPaginate": { + "sFirst": "முதல்", + "sLast": "இறுதி", + "sNext": "அடுத்து", + "sPrevious": "முந்தைய" + }, + "oAria": { + "sSortAscending": ": நிரலை ஏறுவரிசையில் வரிசைப்படுத்த செயல்படுத்த", + "sSortDescending": ": நிரலை இறங்கு வரிசைப்படுத்த செயல்படுத்த" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/th.json b/assets/Zed/js/modules/libs/i18n/th.json index 3f454587..52b0d362 100644 --- a/assets/Zed/js/modules/libs/i18n/th.json +++ b/assets/Zed/js/modules/libs/i18n/th.json @@ -1,23 +1,23 @@ { - "sEmptyTable": "ไม่มีข้อมูลในตาราง", - "sInfo": "แสดง _START_ ถึง _END_ จาก _TOTAL_ แถว", - "sInfoEmpty": "แสดง 0 ถึง 0 จาก 0 แถว", - "sInfoFiltered": "(กรองข้อมูล _MAX_ ทุกแถว)", - "sInfoPostFix": "", - "sInfoThousands": ",", - "sLengthMenu": "แสดง _MENU_ แถว", + "sEmptyTable": "ไม่มีข้อมูลในตาราง", + "sInfo": "แสดง _START_ ถึง _END_ จาก _TOTAL_ แถว", + "sInfoEmpty": "แสดง 0 ถึง 0 จาก 0 แถว", + "sInfoFiltered": "(กรองข้อมูล _MAX_ ทุกแถว)", + "sInfoPostFix": "", + "sInfoThousands": ",", + "sLengthMenu": "แสดง _MENU_ แถว", "sLoadingRecords": "กำลังโหลดข้อมูล...", - "sProcessing": "กำลังดำเนินการ...", - "sSearch": "ค้นหา: ", - "sZeroRecords": "ไม่พบข้อมูล", + "sProcessing": "กำลังดำเนินการ...", + "sSearch": "ค้นหา: ", + "sZeroRecords": "ไม่พบข้อมูล", "oPaginate": { - "sFirst": "หน้าแรก", - "sPrevious": "ก่อนหน้า", - "sNext": "ถัดไป", - "sLast": "หน้าสุดท้าย" + "sFirst": "หน้าแรก", + "sPrevious": "ก่อนหน้า", + "sNext": "ถัดไป", + "sLast": "หน้าสุดท้าย" }, "oAria": { - "sSortAscending": ": เปิดใช้งานการเรียงข้อมูลจากน้อยไปมาก", - "sSortDescending": ": เปิดใช้งานการเรียงข้อมูลจากมากไปน้อย" + "sSortAscending": ": เปิดใช้งานการเรียงข้อมูลจากน้อยไปมาก", + "sSortDescending": ": เปิดใช้งานการเรียงข้อมูลจากมากไปน้อย" } } diff --git a/assets/Zed/js/modules/libs/i18n/tr.json b/assets/Zed/js/modules/libs/i18n/tr.json index 91cae981..fab79917 100644 --- a/assets/Zed/js/modules/libs/i18n/tr.json +++ b/assets/Zed/js/modules/libs/i18n/tr.json @@ -1,31 +1,31 @@ { - "sDecimal": ",", - "sEmptyTable": "Tabloda herhangi bir veri mevcut değil", - "sInfo": "_TOTAL_ kayıttan _START_ - _END_ arasındaki kayıtlar gösteriliyor", - "sInfoEmpty": "Kayıt yok", - "sInfoFiltered": "(_MAX_ kayıt içerisinden bulunan)", - "sInfoPostFix": "", - "sInfoThousands": ".", - "sLengthMenu": "Sayfada _MENU_ kayıt göster", - "sLoadingRecords": "Yükleniyor...", - "sProcessing": "İşleniyor...", - "sSearch": "Ara:", - "sZeroRecords": "Eşleşen kayıt bulunamadı", - "oPaginate": { - "sFirst": "İlk", - "sLast": "Son", - "sNext": "Sonraki", - "sPrevious": "Önceki" - }, - "oAria": { - "sSortAscending": ": artan sütun sıralamasını aktifleştir", - "sSortDescending": ": azalan sütun sıralamasını aktifleştir" - }, - "select": { - "rows": { - "_": "%d kayıt seçildi", - "0": "", - "1": "1 kayıt seçildi" - } - } + "sDecimal": ",", + "sEmptyTable": "Tabloda herhangi bir veri mevcut değil", + "sInfo": "_TOTAL_ kayıttan _START_ - _END_ arasındaki kayıtlar gösteriliyor", + "sInfoEmpty": "Kayıt yok", + "sInfoFiltered": "(_MAX_ kayıt içerisinden bulunan)", + "sInfoPostFix": "", + "sInfoThousands": ".", + "sLengthMenu": "Sayfada _MENU_ kayıt göster", + "sLoadingRecords": "Yükleniyor...", + "sProcessing": "İşleniyor...", + "sSearch": "Ara:", + "sZeroRecords": "Eşleşen kayıt bulunamadı", + "oPaginate": { + "sFirst": "İlk", + "sLast": "Son", + "sNext": "Sonraki", + "sPrevious": "Önceki" + }, + "oAria": { + "sSortAscending": ": artan sütun sıralamasını aktifleştir", + "sSortDescending": ": azalan sütun sıralamasını aktifleştir" + }, + "select": { + "rows": { + "_": "%d kayıt seçildi", + "0": "", + "1": "1 kayıt seçildi" + } + } } diff --git a/assets/Zed/js/modules/libs/i18n/uk.json b/assets/Zed/js/modules/libs/i18n/uk.json index 3054a7e1..2048c7c0 100644 --- a/assets/Zed/js/modules/libs/i18n/uk.json +++ b/assets/Zed/js/modules/libs/i18n/uk.json @@ -1,21 +1,21 @@ { - "sProcessing": "Зачекайте...", - "sLengthMenu": "Показати _MENU_ записів", - "sZeroRecords": "Записи відсутні.", - "sInfo": "Записи з _START_ по _END_ із _TOTAL_ записів", - "sInfoEmpty": "Записи з 0 по 0 із 0 записів", - "sInfoFiltered": "(відфільтровано з _MAX_ записів)", - "sInfoPostFix": "", - "sSearch": "Пошук:", - "sUrl": "", - "oPaginate": { - "sFirst": "Перша", - "sPrevious": "Попередня", - "sNext": "Наступна", - "sLast": "Остання" - }, - "oAria": { - "sSortAscending": ": активувати для сортування стовпців за зростанням", - "sSortDescending": ": активувати для сортування стовпців за спаданням" - } + "sProcessing": "Зачекайте...", + "sLengthMenu": "Показати _MENU_ записів", + "sZeroRecords": "Записи відсутні.", + "sInfo": "Записи з _START_ по _END_ із _TOTAL_ записів", + "sInfoEmpty": "Записи з 0 по 0 із 0 записів", + "sInfoFiltered": "(відфільтровано з _MAX_ записів)", + "sInfoPostFix": "", + "sSearch": "Пошук:", + "sUrl": "", + "oPaginate": { + "sFirst": "Перша", + "sPrevious": "Попередня", + "sNext": "Наступна", + "sLast": "Остання" + }, + "oAria": { + "sSortAscending": ": активувати для сортування стовпців за зростанням", + "sSortDescending": ": активувати для сортування стовпців за спаданням" + } } diff --git a/assets/Zed/js/modules/libs/i18n/ur.json b/assets/Zed/js/modules/libs/i18n/ur.json index bab49ee8..dd31ec77 100644 --- a/assets/Zed/js/modules/libs/i18n/ur.json +++ b/assets/Zed/js/modules/libs/i18n/ur.json @@ -1,17 +1,17 @@ { - "sProcessing": "ہے جاري عملدرامد...", - "sLengthMenu": "دکہائين شقيں کي (_MENU_) فہرست", - "sZeroRecords": "ملے نہيں مفروضات جلتے ملتے کوئ", - "sInfo": "فہرست کي تک _END_ سے _START_ سے ميں _TOTAL_ فہرست پوري ہے نظر پيش", - "sInfoEmpty": "فہرست کي تک 0 سے 0 سے ميں 0 قل ہے نظر پيشّ", - "sInfoFiltered": "(فہرست ہوئ چھني سے ميں _MAX_ قل)", - "sInfoPostFix": "", - "sSearch": "کرو تلاش:", - "sUrl": "", - "oPaginate": { - "sFirst": "پہلا", - "sPrevious": "پچہلا", - "sNext": "اگلا", - "sLast": "آخري" - } + "sProcessing": "ہے جاري عملدرامد...", + "sLengthMenu": "دکہائين شقيں کي (_MENU_) فہرست", + "sZeroRecords": "ملے نہيں مفروضات جلتے ملتے کوئ", + "sInfo": "فہرست کي تک _END_ سے _START_ سے ميں _TOTAL_ فہرست پوري ہے نظر پيش", + "sInfoEmpty": "فہرست کي تک 0 سے 0 سے ميں 0 قل ہے نظر پيشّ", + "sInfoFiltered": "(فہرست ہوئ چھني سے ميں _MAX_ قل)", + "sInfoPostFix": "", + "sSearch": "کرو تلاش:", + "sUrl": "", + "oPaginate": { + "sFirst": "پہلا", + "sPrevious": "پچہلا", + "sNext": "اگلا", + "sLast": "آخري" + } } diff --git a/assets/Zed/js/modules/libs/i18n/uz.json b/assets/Zed/js/modules/libs/i18n/uz.json index 9458af80..ea4722e7 100644 --- a/assets/Zed/js/modules/libs/i18n/uz.json +++ b/assets/Zed/js/modules/libs/i18n/uz.json @@ -1,22 +1,22 @@ { - "sEmptyTable": "Ma'lumot yo'q", - "sInfo": "Umumiy _TOTAL_ yozuvlarlardan _START_ dan _END_ gachasi ko'rsatilmoqda", - "sInfoEmpty": "Umumiy 0 yozuvlardan 0 dan 0 gachasi ko'rsatilmoqda", - "sInfoFiltered": "(_MAX_ yozuvlardan filtrlandi)", - "sInfoPostFix": "", - "sLengthMenu": "_MENU_ ta yozuvlarni ko'rsat", - "sLoadingRecords": "Yozuvlar yuklanmoqda...", - "sProcessing": "Ishlayapman...", - "sSearch": "Izlash:", - "sZeroRecords": "Ma'lumot yo'q.", - "oPaginate": { - "sFirst": "Birinchi", - "sPrevious": "Avvalgi", - "sNext": "Keyingi", - "sLast": "Son'ggi" - }, - "oAria": { - "sSortAscending": ": to'g'ri tartiblash", - "sSortDescending": ": teskari tartiblash" - } -} \ No newline at end of file + "sEmptyTable": "Ma'lumot yo'q", + "sInfo": "Umumiy _TOTAL_ yozuvlarlardan _START_ dan _END_ gachasi ko'rsatilmoqda", + "sInfoEmpty": "Umumiy 0 yozuvlardan 0 dan 0 gachasi ko'rsatilmoqda", + "sInfoFiltered": "(_MAX_ yozuvlardan filtrlandi)", + "sInfoPostFix": "", + "sLengthMenu": "_MENU_ ta yozuvlarni ko'rsat", + "sLoadingRecords": "Yozuvlar yuklanmoqda...", + "sProcessing": "Ishlayapman...", + "sSearch": "Izlash:", + "sZeroRecords": "Ma'lumot yo'q.", + "oPaginate": { + "sFirst": "Birinchi", + "sPrevious": "Avvalgi", + "sNext": "Keyingi", + "sLast": "Son'ggi" + }, + "oAria": { + "sSortAscending": ": to'g'ri tartiblash", + "sSortDescending": ": teskari tartiblash" + } +} diff --git a/assets/Zed/js/modules/libs/i18n/vi.json b/assets/Zed/js/modules/libs/i18n/vi.json index e087b5c9..4a8a79b5 100644 --- a/assets/Zed/js/modules/libs/i18n/vi.json +++ b/assets/Zed/js/modules/libs/i18n/vi.json @@ -1,17 +1,17 @@ { - "sProcessing": "Đang xử lý...", - "sLengthMenu": "Xem _MENU_ mục", - "sZeroRecords": "Không tìm thấy dòng nào phù hợp", - "sInfo": "Đang xem _START_ đến _END_ trong tổng số _TOTAL_ mục", - "sInfoEmpty": "Đang xem 0 đến 0 trong tổng số 0 mục", - "sInfoFiltered": "(được lọc từ _MAX_ mục)", - "sInfoPostFix": "", - "sSearch": "Tìm:", - "sUrl": "", - "oPaginate": { - "sFirst": "Đầu", - "sPrevious": "Trước", - "sNext": "Tiếp", - "sLast": "Cuối" - } + "sProcessing": "Đang xử lý...", + "sLengthMenu": "Xem _MENU_ mục", + "sZeroRecords": "Không tìm thấy dòng nào phù hợp", + "sInfo": "Đang xem _START_ đến _END_ trong tổng số _TOTAL_ mục", + "sInfoEmpty": "Đang xem 0 đến 0 trong tổng số 0 mục", + "sInfoFiltered": "(được lọc từ _MAX_ mục)", + "sInfoPostFix": "", + "sSearch": "Tìm:", + "sUrl": "", + "oPaginate": { + "sFirst": "Đầu", + "sPrevious": "Trước", + "sNext": "Tiếp", + "sLast": "Cuối" + } } diff --git a/assets/Zed/js/modules/libs/i18n/zh.json b/assets/Zed/js/modules/libs/i18n/zh.json index 9f847ef5..ae6cc6cd 100644 --- a/assets/Zed/js/modules/libs/i18n/zh.json +++ b/assets/Zed/js/modules/libs/i18n/zh.json @@ -1,24 +1,24 @@ { - "sProcessing": "处理中...", - "sLengthMenu": "显示 _MENU_ 项结果", - "sZeroRecords": "没有匹配结果", - "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项", - "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项", - "sInfoFiltered": "(由 _MAX_ 项结果过滤)", - "sInfoPostFix": "", - "sSearch": "搜索:", - "sUrl": "", - "sEmptyTable": "表中数据为空", - "sLoadingRecords": "载入中...", - "sInfoThousands": ",", - "oPaginate": { - "sFirst": "首页", - "sPrevious": "上页", - "sNext": "下页", - "sLast": "末页" - }, - "oAria": { - "sSortAscending": ": 以升序排列此列", - "sSortDescending": ": 以降序排列此列" - } + "sProcessing": "处理中...", + "sLengthMenu": "显示 _MENU_ 项结果", + "sZeroRecords": "没有匹配结果", + "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项", + "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项", + "sInfoFiltered": "(由 _MAX_ 项结果过滤)", + "sInfoPostFix": "", + "sSearch": "搜索:", + "sUrl": "", + "sEmptyTable": "表中数据为空", + "sLoadingRecords": "载入中...", + "sInfoThousands": ",", + "oPaginate": { + "sFirst": "首页", + "sPrevious": "上页", + "sNext": "下页", + "sLast": "末页" + }, + "oAria": { + "sSortAscending": ": 以升序排列此列", + "sSortDescending": ": 以降序排列此列" + } } diff --git a/assets/Zed/js/modules/libs/ibox.js b/assets/Zed/js/modules/libs/ibox.js index cade0040..143b7b28 100644 --- a/assets/Zed/js/modules/libs/ibox.js +++ b/assets/Zed/js/modules/libs/ibox.js @@ -6,10 +6,10 @@ function Ibox() { this.checkErrors(); } -Ibox.prototype.checkErrors = function() { +Ibox.prototype.checkErrors = function () { var self = this; - $(self.selector + '[data-auto-errors="true"]').each(function(i, element) { + $(self.selector + '[data-auto-errors="true"]').each(function (i, element) { var hasError = $(element).find('.has-error').length; if (hasError) { diff --git a/assets/Zed/js/modules/libs/safe-checks.js b/assets/Zed/js/modules/libs/safe-checks.js index e133aa2f..23075a82 100644 --- a/assets/Zed/js/modules/libs/safe-checks.js +++ b/assets/Zed/js/modules/libs/safe-checks.js @@ -1,20 +1,18 @@ 'use strict'; var safeSubmitSelector = '.safe-submit'; -var safeDatetimeSelector = '.safe-datetime[type=date], .safe-datetime[type=datetime], .safe-datetime[type=datetime-local]'; +var safeDatetimeSelector = + '.safe-datetime[type=date], .safe-datetime[type=datetime], .safe-datetime[type=datetime-local]'; /* Prevent .save-submit items to be pressed twice */ -function addSafeSubmitCheck() { +function addSafeSubmitCheck() { $('body').on('click', safeSubmitSelector, function () { var $item = $(this); var $forms = $item.parents('form'); var isValid = true; function disableTrigger() { - $item - .prop('disabled', true) - .addClass('disabled') - .off('click'); + $item.prop('disabled', true).addClass('disabled').off('click'); } if ($forms.length > 0) { @@ -30,7 +28,7 @@ function addSafeSubmitCheck() { } /* Prevent .save-datetime inputs to show native datepickers */ -function addSafeDatetimeCheck() { +function addSafeDatetimeCheck() { $('body').on('click', safeDatetimeSelector, function (e) { function disableNativeWindow() { e.preventDefault(); @@ -44,5 +42,5 @@ function addSafeDatetimeCheck() { module.exports = { addSafeSubmitCheck: addSafeSubmitCheck, - addSafeDatetimeCheck: addSafeDatetimeCheck -} + addSafeDatetimeCheck: addSafeDatetimeCheck, +}; diff --git a/assets/Zed/js/modules/libs/tabs.js b/assets/Zed/js/modules/libs/tabs.js index c149d432..5a36d606 100644 --- a/assets/Zed/js/modules/libs/tabs.js +++ b/assets/Zed/js/modules/libs/tabs.js @@ -7,20 +7,20 @@ function Tabs(selector, onTabChange) { this.currentUrlHash = window.location.hash; this.tabsContainer = $(selector); this.tabUrls = this.tabsContainer.find('.nav li a'); - this.onTabChange = onTabChange || function(){}; + this.onTabChange = onTabChange || function () {}; this.checkErrors(); this.setNavigation(); } -Tabs.prototype.checkErrors = function() { +Tabs.prototype.checkErrors = function () { var self = this; if (self.tabsContainer.data('autoErrors') !== true) { return; } - self.tabsContainer.find('.tab-content .tab-pane').each(function(i, tab) { + self.tabsContainer.find('.tab-content .tab-pane').each(function (i, tab) { var hasError = $(tab).find('.has-error, .alert-danger').length; var tabHeader = self.tabsContainer.find('.nav-tabs li[data-tab-content-id="' + tab.id + '"]'); @@ -32,7 +32,7 @@ Tabs.prototype.checkErrors = function() { }); }; -Tabs.prototype.setNavigation = function() { +Tabs.prototype.setNavigation = function () { var self = this; if (self.tabsContainer.data('isNavigable') !== true) { @@ -45,9 +45,9 @@ Tabs.prototype.setNavigation = function() { this.listenNavigationButtons(); }; -Tabs.prototype.listenNavigationButtons = function() { +Tabs.prototype.listenNavigationButtons = function () { var self = this; - self.tabsContainer.find('.btn-tab-previous').on('click', function(event) { + self.tabsContainer.find('.btn-tab-previous').on('click', function (event) { event.preventDefault(); var element = $(this); var hash = element.attr('hash'); @@ -59,7 +59,7 @@ Tabs.prototype.listenNavigationButtons = function() { self.showHideNavigationButtons(); }); - self.tabsContainer.find('.btn-tab-next').on('click', function(event) { + self.tabsContainer.find('.btn-tab-next').on('click', function (event) { event.preventDefault(); var element = $(this); var hash = element.attr('href'); @@ -72,11 +72,11 @@ Tabs.prototype.listenNavigationButtons = function() { }); }; -Tabs.prototype.checkActivatedTab = function() { +Tabs.prototype.checkActivatedTab = function () { var self = this; var position = 0; var positionChanged = false; - self.tabUrls.each(function() { + self.tabUrls.each(function () { var element = $(this); if (positionChanged === false && element.attr('href') === self.currentUrlHash) { self.currentTabPosition = position; @@ -85,13 +85,13 @@ Tabs.prototype.checkActivatedTab = function() { self.activateTab(element, self.currentUrlHash); self.showHideNavigationButtons(); } - position++ + position++; }); }; -Tabs.prototype.changeTabsOnClick = function() { +Tabs.prototype.changeTabsOnClick = function () { var self = this; - self.tabUrls.on('click', function(event) { + self.tabUrls.on('click', function (event) { event.preventDefault(); var selectedElement = $(this); var hash = selectedElement.attr('href'); @@ -99,7 +99,7 @@ Tabs.prototype.changeTabsOnClick = function() { var position = 0; var positionChanged = false; - self.tabUrls.each(function() { + self.tabUrls.each(function () { var element = $(this); if (positionChanged === false && element.attr('href') === selectedElement.attr('href')) { self.currentTabPosition = position; @@ -109,24 +109,24 @@ Tabs.prototype.changeTabsOnClick = function() { self.activateTab(element, self.currentUrlHash); self.showHideNavigationButtons(); } - position++ + position++; }); }); }; -Tabs.prototype.activateTab = function(element, hash) { +Tabs.prototype.activateTab = function (element, hash) { window.history.pushState(null, null, hash); element.tab('show'); this.onTabChange(element.attr('href')); }; -Tabs.prototype.showHideNavigationButtons = function() { +Tabs.prototype.showHideNavigationButtons = function () { var self = this; if (self.currentTabPosition === 0) { self.tabsContainer.find('.btn-tab-previous').addClass('hidden'); self.tabsContainer.find('.btn-tab-next').removeClass('hidden'); - } else if (self.currentTabPosition === (self.tabUrls.length - 1)) { + } else if (self.currentTabPosition === self.tabUrls.length - 1) { self.tabsContainer.find('.btn-tab-previous').removeClass('hidden'); self.tabsContainer.find('.btn-tab-next').addClass('hidden'); } else { @@ -135,7 +135,7 @@ Tabs.prototype.showHideNavigationButtons = function() { } }; -Tabs.prototype.navigateElement = function() { +Tabs.prototype.navigateElement = function () { var self = this; var element = self.tabsContainer.find('[data-toggle="tab"]:eq(' + this.currentTabPosition + ')'); var hash = element.attr('href'); @@ -143,7 +143,7 @@ Tabs.prototype.navigateElement = function() { this.proceedChange(element, hash); }; -Tabs.prototype.proceedChange = function(element, hash) { +Tabs.prototype.proceedChange = function (element, hash) { this.activateTab(element, hash); this.checkActivatedTab(); }; diff --git a/assets/Zed/js/modules/libs/translation-copy-fields.js b/assets/Zed/js/modules/libs/translation-copy-fields.js index a7615bc7..7ba72147 100644 --- a/assets/Zed/js/modules/libs/translation-copy-fields.js +++ b/assets/Zed/js/modules/libs/translation-copy-fields.js @@ -16,17 +16,19 @@ function TranslationCopyFields() { /** * Add copy buttons for fields that has the necessary data attribute */ -TranslationCopyFields.prototype.addCopyButtons = function() { +TranslationCopyFields.prototype.addCopyButtons = function () { var self = this; - $('input[' + this.translationDataAttributeName + ']').each(function(i, field) { - var copyButton = $(''); + $('input[' + this.translationDataAttributeName + ']').each(function (i, field) { + var copyButton = $( + '', + ); if ($(field).parent().hasClass('input-group')) { return; } - copyButton.on('click', function() { + copyButton.on('click', function () { self.copy($(this), field); }); @@ -42,20 +44,17 @@ TranslationCopyFields.prototype.addCopyButtons = function() { * @param button * @param field */ -TranslationCopyFields.prototype.copy = function(button, field) { +TranslationCopyFields.prototype.copy = function (button, field) { var self = this; - var selector = 'input[' + self.translationDataAttributeName + '="' + $(field).data(self.translationDataAttribute) + '"]'; + var selector = + 'input[' + self.translationDataAttributeName + '="' + $(field).data(self.translationDataAttribute) + '"]'; $(selector).val(field.value); - button.find('span') - .removeClass('fa-copy') - .addClass('fa-check'); + button.find('span').removeClass('fa-copy').addClass('fa-check'); - setTimeout(function() { - button.find('span') - .addClass('fa-copy') - .removeClass('fa-check'); + setTimeout(function () { + button.find('span').addClass('fa-copy').removeClass('fa-check'); }, 1000); }; diff --git a/assets/Zed/js/spryker-zed-gui-commons.entry.js b/assets/Zed/js/spryker-zed-gui-commons.entry.js index 229c551e..617259ad 100644 --- a/assets/Zed/js/spryker-zed-gui-commons.entry.js +++ b/assets/Zed/js/spryker-zed-gui-commons.entry.js @@ -1,6 +1,6 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ 'use strict'; diff --git a/assets/Zed/package.json b/assets/Zed/package.json index fa6f4eac..f424fba9 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -1,31 +1,31 @@ { - "private": true, - "name": "spryker-zed-gui", - "version": "1.0.0", - "dependencies": { - "animate.css": "~3.5.1", - "bootstrap-sass": "~3.4.1", - "codemirror": "~5.12.0", - "datatables.net": "~1.10.13", - "datatables.net-bs": "~1.10.10", - "datatables.net-buttons": "~1.2.3", - "datatables.net-buttons-bs": "~1.2.3", - "datatables.net-responsive": "~2.2.3", - "datatables.net-responsive-bs": "~2.2.3", - "datatables.net-select": "~1.3.0", - "datatables.net-select-bs": "~1.3.0", - "es6-promise": "~4.0.5", - "font-awesome": "~4.7.0", - "get-root-node-polyfill": "~1.0.0", - "jquery": "~3.5.1", - "jquery-migrate": "~3.0.0", - "jquery-ui": "~1.12.1", - "jstree": "~3.3.3", - "metismenu": "~2.0.2", - "nestable": "https://github.com/ilmente/Nestable.git#v1.1.1", - "pace": "https://github.com/hubspot/pace.git#v1.0.2", - "select2": "https://github.com/select2/select2.git#4.0.2", - "summernote": "^0.8.11", - "sweetalert": "~1.1.3" - } + "private": true, + "name": "spryker-zed-gui", + "version": "1.0.0", + "dependencies": { + "animate.css": "~3.5.1", + "bootstrap-sass": "~3.4.1", + "codemirror": "~5.12.0", + "datatables.net": "~1.10.13", + "datatables.net-bs": "~1.10.10", + "datatables.net-buttons": "~1.2.3", + "datatables.net-buttons-bs": "~1.2.3", + "datatables.net-responsive": "~2.2.3", + "datatables.net-responsive-bs": "~2.2.3", + "datatables.net-select": "~1.3.0", + "datatables.net-select-bs": "~1.3.0", + "es6-promise": "~4.0.5", + "font-awesome": "~4.7.0", + "get-root-node-polyfill": "~1.0.0", + "jquery": "~3.5.1", + "jquery-migrate": "~3.0.0", + "jquery-ui": "~1.12.1", + "jstree": "~3.3.3", + "metismenu": "~2.0.2", + "nestable": "https://github.com/ilmente/Nestable.git#v1.1.1", + "pace": "https://github.com/hubspot/pace.git#v1.0.2", + "select2": "https://github.com/select2/select2.git#4.0.2", + "summernote": "^0.8.11", + "sweetalert": "~1.1.3" + } } diff --git a/assets/Zed/sass/_action-buttons.scss b/assets/Zed/sass/_action-buttons.scss index 45dbb66d..4195cc1c 100644 --- a/assets/Zed/sass/_action-buttons.scss +++ b/assets/Zed/sass/_action-buttons.scss @@ -1,53 +1,53 @@ -@mixin coloredButton($backgroundColor, $color, $hoverColor:'') { - background-color: $backgroundColor; - border-color: $backgroundColor; - color: $color; - - &.btn-outline { - background: transparent; - color: $backgroundColor; - - &:hover { - background-color: $backgroundColor; - border-color: $backgroundColor; - @if $hoverColor == '' { - color: $color; - } @else { - color: $hoverColor; - } +@mixin coloredButton($backgroundColor, $color, $hoverColor: '') { + background-color: $backgroundColor; + border-color: $backgroundColor; + color: $color; + + &.btn-outline { + background: transparent; + color: $backgroundColor; + + &:hover { + background-color: $backgroundColor; + border-color: $backgroundColor; + @if $hoverColor == '' { + color: $color; + } @else { + color: $hoverColor; + } + } } - } } .btn-back { - background-color: #c2c2c2; - border-color: #c2c2c2; - color: #fff; - - &.btn-outline { - background: transparent; - color: #a2a2a2; - - &:hover { - background-color: #c2c2c2; - border-color: #c2c2c2; - color: #fff; + background-color: #c2c2c2; + border-color: #c2c2c2; + color: #fff; + + &.btn-outline { + background: transparent; + color: #a2a2a2; + + &:hover { + background-color: #c2c2c2; + border-color: #c2c2c2; + color: #fff; + } } - } } .btn-view { - @include coloredButton(#1c84c6, #ffffff); + @include coloredButton(#1c84c6, #ffffff); } .btn-edit { - @include coloredButton(#d18d21, #ffffff); + @include coloredButton(#d18d21, #ffffff); } .btn-create { - @include coloredButton(#108548, #ffffff); + @include coloredButton(#108548, #ffffff); } .btn-remove { - @include coloredButton(#ed5565, #ffffff); + @include coloredButton(#ed5565, #ffffff); } diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 39964026..48fc1ac4 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -146,7 +146,8 @@ body.login { overflow: scroll !important; } -.table.nowrap, .nowrap { +.table.nowrap, +.nowrap { white-space: nowrap; } diff --git a/assets/Zed/sass/_data-tables.scss b/assets/Zed/sass/_data-tables.scss index 565faf5d..3e577ba6 100644 --- a/assets/Zed/sass/_data-tables.scss +++ b/assets/Zed/sass/_data-tables.scss @@ -1,55 +1,54 @@ -$data-table-selected-row-bg-color: rgba(#0088cc, .15); +$data-table-selected-row-bg-color: rgba(#0088cc, 0.15); $data-table-selected-row-border-size: 1px; $data-table-selected-row-border-color: rgba(#0088cc, 1); .dataTables_scrollHeadInner { - width: 100% !important; - - & > .table { width: 100% !important; - } + + & > .table { + width: 100% !important; + } } table.dataTable tbody > tr { - &, - &:first-child { - &.selected, - & > .selected { - background-color: $data-table-selected-row-bg-color; - color: inherit; - - & > td { - border-right-color: $data-table-selected-row-bg-color; - border-top: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; - border-bottom: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; - - &:first-child { - border-left: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; - } - - &:last-child { - border-right: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; - } - } - - .btn-outline { - &.btn-danger { - color: $btn-danger-bg; + &, + &:first-child { + &.selected, + & > .selected { + background-color: $data-table-selected-row-bg-color; + color: inherit; + + & > td { + border-right-color: $data-table-selected-row-bg-color; + border-top: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; + border-bottom: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; + + &:first-child { + border-left: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; + } + + &:last-child { + border-right: $data-table-selected-row-border-size solid $data-table-selected-row-border-color; + } + } + + .btn-outline { + &.btn-danger { + color: $btn-danger-bg; + } + + &.btn-create { + color: #108548; + } + + &.btn-view { + color: #1c84c6; + } + + &:hover { + color: #fff; + } + } } - - &.btn-create { - color: #108548; - } - - &.btn-view { - color: #1c84c6; - } - - &:hover { - color: #fff; - } - } } - } } - diff --git a/assets/Zed/sass/_flags.scss b/assets/Zed/sass/_flags.scss index 94399a53..f1fed481 100644 --- a/assets/Zed/sass/_flags.scss +++ b/assets/Zed/sass/_flags.scss @@ -1,894 +1,894 @@ .flag { - display: inline-block; - width: 16px; - height: 16px; - background: url('../img/flags-16x16.png') no-repeat; + display: inline-block; + width: 16px; + height: 16px; + background: url('../img/flags-16x16.png') no-repeat; } -span.flag, i.flag { - vertical-align: text-bottom; +span.flag, +i.flag { + vertical-align: text-bottom; } - .flag.flag-gw { - background-position: -96px -80px; + background-position: -96px -80px; } .flag.flag-gu { - background-position: -80px -80px; + background-position: -80px -80px; } .flag.flag-gt { - background-position: -64px -80px; + background-position: -64px -80px; } .flag.flag-gr { - background-position: -48px -80px; + background-position: -48px -80px; } .flag.flag-gq { - background-position: -32px -80px; + background-position: -32px -80px; } .flag.flag-gp { - background-position: -16px -80px; + background-position: -16px -80px; } .flag.flag-gy { - background-position: -112px -80px; + background-position: -112px -80px; } .flag.flag-gg { - background-position: -160px -64px; + background-position: -160px -64px; } .flag.flag-ge { - background-position: -144px -64px; + background-position: -144px -64px; } .flag.flag-gd { - background-position: -128px -64px; + background-position: -128px -64px; } .flag.flag-gb { - background-position: -112px -64px; + background-position: -112px -64px; } .flag.flag-ga { - background-position: -96px -64px; + background-position: -96px -64px; } .flag.flag-gn { - background-position: 0 -80px; + background-position: 0 -80px; } .flag.flag-gm { - background-position: -224px -64px; + background-position: -224px -64px; } .flag.flag-gl { - background-position: -208px -64px; + background-position: -208px -64px; } .flag.flag-gi { - background-position: -192px -64px; + background-position: -192px -64px; } .flag.flag-gh { - background-position: -176px -64px; + background-position: -176px -64px; } .flag.flag-lb { - background-position: -128px -112px; + background-position: -128px -112px; } .flag.flag-lc { - background-position: -144px -112px; + background-position: -144px -112px; } .flag.flag-la { - background-position: -112px -112px; + background-position: -112px -112px; } .flag.flag-tv { - background-position: -96px -208px; + background-position: -96px -208px; } .flag.flag-tw { - background-position: -112px -208px; + background-position: -112px -208px; } .flag.flag-tt { - background-position: -80px -208px; + background-position: -80px -208px; } .flag.flag-tr { - background-position: -64px -208px; + background-position: -64px -208px; } .flag.flag-lk { - background-position: -176px -112px; + background-position: -176px -112px; } .flag.flag-li { - background-position: -160px -112px; + background-position: -160px -112px; } .flag.flag-lv { - background-position: -16px -128px; + background-position: -16px -128px; } .flag.flag-to { - background-position: -48px -208px; + background-position: -48px -208px; } .flag.flag-lt { - background-position: -224px -112px; + background-position: -224px -112px; } .flag.flag-lu { - background-position: 0 -128px; + background-position: 0 -128px; } .flag.flag-lr { - background-position: -192px -112px; + background-position: -192px -112px; } .flag.flag-ls { - background-position: -208px -112px; + background-position: -208px -112px; } .flag.flag-th { - background-position: -208px -192px; + background-position: -208px -192px; } .flag.flag-tg { - background-position: -192px -192px; + background-position: -192px -192px; } .flag.flag-td { - background-position: -176px -192px; + background-position: -176px -192px; } .flag.flag-tc { - background-position: -160px -192px; + background-position: -160px -192px; } .flag.flag-ly { - background-position: -32px -128px; + background-position: -32px -128px; } .flag.flag-do { - background-position: -112px -48px; + background-position: -112px -48px; } .flag.flag-dm { - background-position: -96px -48px; + background-position: -96px -48px; } .flag.flag-dj { - background-position: -64px -48px; + background-position: -64px -48px; } .flag.flag-dk { - background-position: -80px -48px; + background-position: -80px -48px; } .flag.flag-de { - background-position: -48px -48px; + background-position: -48px -48px; } .flag.flag-ye { - background-position: -112px -224px; + background-position: -112px -224px; } .flag.flag-dz { - background-position: -128px -48px; + background-position: -128px -48px; } .flag.flag-uy { - background-position: -192px -208px; + background-position: -192px -208px; } .flag.flag-vu { - background-position: -80px -224px; + background-position: -80px -224px; } .flag.flag-qa { - background-position: -32px -176px; + background-position: -32px -176px; } .flag.flag-tm { - background-position: -16px -208px; + background-position: -16px -208px; } .flag.flag-eh { - background-position: -192px -48px; + background-position: -192px -48px; } .flag.flag-ee { - background-position: -160px -48px; + background-position: -160px -48px; } .flag.flag-eg { - background-position: -176px -48px; + background-position: -176px -48px; } .flag.flag-za { - background-position: -128px -224px; + background-position: -128px -224px; } .flag.flag-ec { - background-position: -144px -48px; + background-position: -144px -48px; } .flag.flag-us { - background-position: -176px -208px; + background-position: -176px -208px; } .flag.flag-et { - background-position: 0 -64px; + background-position: 0 -64px; } .flag.flag-zw { - background-position: -160px -224px; + background-position: -160px -224px; } .flag.flag-es { - background-position: -224px -48px; + background-position: -224px -48px; } .flag.flag-er { - background-position: -208px -48px; + background-position: -208px -48px; } .flag.flag-ru { - background-position: -96px -176px; + background-position: -96px -176px; } .flag.flag-rw { - background-position: -112px -176px; + background-position: -112px -176px; } .flag.flag-rs { - background-position: -80px -176px; + background-position: -80px -176px; } .flag.flag-re { - background-position: -48px -176px; + background-position: -48px -176px; } .flag.flag-it { - background-position: -96px -96px; + background-position: -96px -96px; } .flag.flag-ro { - background-position: -64px -176px; + background-position: -64px -176px; } .flag.flag-tz { - background-position: -128px -208px; + background-position: -128px -208px; } .flag.flag-bd { - background-position: -32px -16px; + background-position: -32px -16px; } .flag.flag-be { - background-position: -48px -16px; + background-position: -48px -16px; } .flag.flag-bf { - background-position: -64px -16px; + background-position: -64px -16px; } .flag.flag-bg { - background-position: -80px -16px; + background-position: -80px -16px; } .flag.flag-vg { - background-position: -32px -224px; + background-position: -32px -224px; } .flag.flag-ba { - background-position: 0 -16px; + background-position: 0 -16px; } .flag.flag-bb { - background-position: -16px -16px; + background-position: -16px -16px; } .flag.flag-bm { - background-position: -128px -16px; + background-position: -128px -16px; } .flag.flag-bn { - background-position: -144px -16px; + background-position: -144px -16px; } .flag.flag-bo { - background-position: -160px -16px; + background-position: -160px -16px; } .flag.flag-bh { - background-position: -96px -16px; + background-position: -96px -16px; } .flag.flag-bj { - background-position: -112px -16px; + background-position: -112px -16px; } .flag.flag-bt { - background-position: -208px -16px; + background-position: -208px -16px; } .flag.flag-jm { - background-position: -128px -96px; + background-position: -128px -96px; } .flag.flag-bw { - background-position: -224px -16px; + background-position: -224px -16px; } .flag.flag-ws { - background-position: -96px -224px; + background-position: -96px -224px; } .flag.flag-br { - background-position: -176px -16px; + background-position: -176px -16px; } .flag.flag-bs { - background-position: -192px -16px; + background-position: -192px -16px; } .flag.flag-je { - background-position: -112px -96px; + background-position: -112px -96px; } .flag.flag-by { - background-position: 0 -32px; + background-position: 0 -32px; } .flag.flag-bz { - background-position: -16px -32px; + background-position: -16px -32px; } .flag.flag-tn { - background-position: -32px -208px; + background-position: -32px -208px; } .flag.flag-om { - background-position: -64px -160px; + background-position: -64px -160px; } .flag.flag-zm { - background-position: -144px -224px; + background-position: -144px -224px; } .flag.flag-ua { - background-position: -144px -208px; + background-position: -144px -208px; } .flag.flag-jo { - background-position: -144px -96px; + background-position: -144px -96px; } .flag.flag-mz { - background-position: -128px -144px; + background-position: -128px -144px; } .flag.flag-ck { - background-position: -128px -32px; + background-position: -128px -32px; } .flag.flag-ci { - background-position: -112px -32px; + background-position: -112px -32px; } .flag.flag-ch { - background-position: -96px -32px; + background-position: -96px -32px; } .flag.flag-co { - background-position: -192px -32px; + background-position: -192px -32px; } .flag.flag-cn { - background-position: -176px -32px; + background-position: -176px -32px; } .flag.flag-cm { - background-position: -160px -32px; + background-position: -160px -32px; } .flag.flag-cl { - background-position: -144px -32px; + background-position: -144px -32px; } .flag.flag-ca { - background-position: -32px -32px; + background-position: -32px -32px; } .flag.flag-cg { - background-position: -80px -32px; + background-position: -80px -32px; } .flag.flag-cf { - background-position: -64px -32px; + background-position: -64px -32px; } .flag.flag-cd { - background-position: -48px -32px; + background-position: -48px -32px; } .flag.flag-cz { - background-position: -32px -48px; + background-position: -32px -48px; } .flag.flag-cy { - background-position: -16px -48px; + background-position: -16px -48px; } .flag.flag-vc { - background-position: 0 -224px; + background-position: 0 -224px; } .flag.flag-cr { - background-position: -208px -32px; + background-position: -208px -32px; } .flag.flag-cv { - background-position: 0 -48px; + background-position: 0 -48px; } .flag.flag-cu { - background-position: -224px -32px; + background-position: -224px -32px; } .flag.flag-ve { - background-position: -16px -224px; + background-position: -16px -224px; } .flag.flag-pr { - background-position: -192px -160px; + background-position: -192px -160px; } .flag.flag-ps { - background-position: -208px -160px; + background-position: -208px -160px; } .flag.flag-pw { - background-position: 0 -176px; + background-position: 0 -176px; } .flag.flag-pt { - background-position: -224px -160px; + background-position: -224px -160px; } .flag.flag-py { - background-position: -16px -176px; + background-position: -16px -176px; } .flag.flag-tl { - background-position: 0 -208px; + background-position: 0 -208px; } .flag.flag-iq { - background-position: -48px -96px; + background-position: -48px -96px; } .flag.flag-pa { - background-position: -80px -160px; + background-position: -80px -160px; } .flag.flag-pf { - background-position: -112px -160px; + background-position: -112px -160px; } .flag.flag-pg { - background-position: -128px -160px; + background-position: -128px -160px; } .flag.flag-pe { - background-position: -96px -160px; + background-position: -96px -160px; } .flag.flag-pk { - background-position: -160px -160px; + background-position: -160px -160px; } .flag.flag-ph { - background-position: -144px -160px; + background-position: -144px -160px; } .flag.flag-pl { - background-position: -176px -160px; + background-position: -176px -160px; } .flag.flag-hr { - background-position: -160px -80px; + background-position: -160px -80px; } .flag.flag-ht { - background-position: -176px -80px; + background-position: -176px -80px; } .flag.flag-hu { - background-position: -192px -80px; + background-position: -192px -80px; } .flag.flag-hk { - background-position: -128px -80px; + background-position: -128px -80px; } .flag.flag-hn { - background-position: -144px -80px; + background-position: -144px -80px; } .flag.flag-vn { - background-position: -64px -224px; + background-position: -64px -224px; } .flag.flag-jp { - background-position: -160px -96px; + background-position: -160px -96px; } .flag.flag-me { - background-position: -96px -128px; + background-position: -96px -128px; } .flag.flag-md { - background-position: -80px -128px; + background-position: -80px -128px; } .flag.flag-mg { - background-position: -112px -128px; + background-position: -112px -128px; } .flag.flag-ma { - background-position: -48px -128px; + background-position: -48px -128px; } .flag.flag-mc { - background-position: -64px -128px; + background-position: -64px -128px; } .flag.flag-uz { - background-position: -208px -208px; + background-position: -208px -208px; } .flag.flag-mm { - background-position: -176px -128px; + background-position: -176px -128px; } .flag.flag-ml { - background-position: -160px -128px; + background-position: -160px -128px; } .flag.flag-mo { - background-position: -208px -128px; + background-position: -208px -128px; } .flag.flag-mn { - background-position: -192px -128px; + background-position: -192px -128px; } .flag.flag-mh { - background-position: -128px -128px; + background-position: -128px -128px; } .flag.flag-mk { - background-position: -144px -128px; + background-position: -144px -128px; } .flag.flag-mu { - background-position: -48px -144px; + background-position: -48px -144px; } .flag.flag-mt { - background-position: -32px -144px; + background-position: -32px -144px; } .flag.flag-mw { - background-position: -80px -144px; + background-position: -80px -144px; } .flag.flag-mv { - background-position: -64px -144px; + background-position: -64px -144px; } .flag.flag-mq { - background-position: -224px -128px; + background-position: -224px -128px; } .flag.flag-ms { - background-position: -16px -144px; + background-position: -16px -144px; } .flag.flag-mr { - background-position: 0 -144px; + background-position: 0 -144px; } .flag.flag-im { - background-position: -16px -96px; + background-position: -16px -96px; } .flag.flag-ug { - background-position: -160px -208px; + background-position: -160px -208px; } .flag.flag-my { - background-position: -112px -144px; + background-position: -112px -144px; } .flag.flag-mx { - background-position: -96px -144px; + background-position: -96px -144px; } .flag.flag-il { - background-position: 0 -96px; + background-position: 0 -96px; } .flag.flag-va { - background-position: -224px -208px; + background-position: -224px -208px; } .flag.flag-sa { - background-position: -128px -176px; + background-position: -128px -176px; } .flag.flag-ae { - background-position: -16px 0; + background-position: -16px 0; } .flag.flag-ad { - background-position: 0 0; + background-position: 0 0; } .flag.flag-ag { - background-position: -48px 0; + background-position: -48px 0; } .flag.flag-af { - background-position: -32px 0; + background-position: -32px 0; } .flag.flag-ai { - background-position: -64px 0; + background-position: -64px 0; } .flag.flag-vi { - background-position: -48px -224px; + background-position: -48px -224px; } .flag.flag-is { - background-position: -80px -96px; + background-position: -80px -96px; } .flag.flag-ir { - background-position: -64px -96px; + background-position: -64px -96px; } .flag.flag-am { - background-position: -96px 0; + background-position: -96px 0; } .flag.flag-al { - background-position: -80px 0; + background-position: -80px 0; } .flag.flag-ao { - background-position: -128px 0; + background-position: -128px 0; } .flag.flag-an { - background-position: -112px 0; + background-position: -112px 0; } .flag.flag-as { - background-position: -160px 0; + background-position: -160px 0; } .flag.flag-ar { - background-position: -144px 0; + background-position: -144px 0; } .flag.flag-au { - background-position: -192px 0; + background-position: -192px 0; } .flag.flag-at { - background-position: -176px 0; + background-position: -176px 0; } .flag.flag-aw { - background-position: -208px 0; + background-position: -208px 0; } .flag.flag-in { - background-position: -32px -96px; + background-position: -32px -96px; } .flag.flag-az { - background-position: -224px 0; + background-position: -224px 0; } .flag.flag-ie { - background-position: -224px -80px; + background-position: -224px -80px; } .flag.flag-id { - background-position: -208px -80px; + background-position: -208px -80px; } .flag.flag-ni { - background-position: -208px -144px; + background-position: -208px -144px; } .flag.flag-nl { - background-position: -224px -144px; + background-position: -224px -144px; } .flag.flag-no { - background-position: 0 -160px; + background-position: 0 -160px; } .flag.flag-na { - background-position: -144px -144px; + background-position: -144px -144px; } .flag.flag-nc { - background-position: -160px -144px; + background-position: -160px -144px; } .flag.flag-ne { - background-position: -176px -144px; + background-position: -176px -144px; } .flag.flag-ng { - background-position: -192px -144px; + background-position: -192px -144px; } .flag.flag-nz { - background-position: -48px -160px; + background-position: -48px -160px; } .flag.flag-np { - background-position: -16px -160px; + background-position: -16px -160px; } .flag.flag-so { - background-position: -64px -192px; + background-position: -64px -192px; } .flag.flag-nr { - background-position: -32px -160px; + background-position: -32px -160px; } .flag.flag-fr { - background-position: -80px -64px; + background-position: -80px -64px; } .flag.flag-sv { - background-position: -112px -192px; + background-position: -112px -192px; } .flag.flag-sb { - background-position: -144px -176px; + background-position: -144px -176px; } .flag.flag-fi { - background-position: -16px -64px; + background-position: -16px -64px; } .flag.flag-fj { - background-position: -32px -64px; + background-position: -32px -64px; } .flag.flag-fm { - background-position: -48px -64px; + background-position: -48px -64px; } .flag.flag-fo { - background-position: -64px -64px; + background-position: -64px -64px; } .flag.flag-tj { - background-position: -224px -192px; + background-position: -224px -192px; } .flag.flag-sz { - background-position: -144px -192px; + background-position: -144px -192px; } .flag.flag-sy { - background-position: -128px -192px; + background-position: -128px -192px; } .flag.flag-kg { - background-position: -192px -96px; + background-position: -192px -96px; } .flag.flag-ke { - background-position: -176px -96px; + background-position: -176px -96px; } .flag.flag-sr { - background-position: -80px -192px; + background-position: -80px -192px; } .flag.flag-ki { - background-position: -224px -96px; + background-position: -224px -96px; } .flag.flag-kh { - background-position: -208px -96px; + background-position: -208px -96px; } .flag.flag-kn { - background-position: -16px -112px; + background-position: -16px -112px; } .flag.flag-km { - background-position: 0 -112px; + background-position: 0 -112px; } .flag.flag-st { - background-position: -96px -192px; + background-position: -96px -192px; } .flag.flag-sk { - background-position: 0 -192px; + background-position: 0 -192px; } .flag.flag-kr { - background-position: -48px -112px; + background-position: -48px -112px; } .flag.flag-si { - background-position: -224px -176px; + background-position: -224px -176px; } .flag.flag-kp { - background-position: -32px -112px; + background-position: -32px -112px; } .flag.flag-kw { - background-position: -64px -112px; + background-position: -64px -112px; } .flag.flag-sn { - background-position: -48px -192px; + background-position: -48px -192px; } .flag.flag-sm { - background-position: -32px -192px; + background-position: -32px -192px; } .flag.flag-sl { - background-position: -16px -192px; + background-position: -16px -192px; } .flag.flag-sc { - background-position: -160px -176px; + background-position: -160px -176px; } .flag.flag-kz { - background-position: -96px -112px; + background-position: -96px -112px; } .flag.flag-ky { - background-position: -80px -112px; + background-position: -80px -112px; } .flag.flag-sg { - background-position: -208px -176px; + background-position: -208px -176px; } .flag.flag-se { - background-position: -192px -176px; + background-position: -192px -176px; } .flag.flag-sd { - background-position: -176px -176px; + background-position: -176px -176px; } diff --git a/assets/Zed/sass/_inspinia.scss b/assets/Zed/sass/_inspinia.scss index 073e6c7b..c337ff84 100644 --- a/assets/Zed/sass/_inspinia.scss +++ b/assets/Zed/sass/_inspinia.scss @@ -4,34 +4,33 @@ */ .select2 { - width: 100% !important; + width: 100% !important; } .sweet-alert { - font-family: 'Lato', Helvetica, Arial, sans-serif; + font-family: 'Lato', Helvetica, Arial, sans-serif; } .note-editor.note-frame { - border: 1px solid $gray-lighter; + border: 1px solid $gray-lighter; } .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { - border: 1px solid #dad55e; - background: #fffa90; - color: #777620; + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; } - .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active, a.ui-button:active, .ui-button:active, .ui-button.ui-state-active:hover { - border: 1px solid #003eff; - background: #007fff; - font-weight: normal; - color: #fff; + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #fff; } diff --git a/assets/Zed/sass/_wave-loader.scss b/assets/Zed/sass/_wave-loader.scss index 073a1634..73dce014 100644 --- a/assets/Zed/sass/_wave-loader.scss +++ b/assets/Zed/sass/_wave-loader.scss @@ -4,7 +4,7 @@ $wave-loader-on-button-width: 33px; .sk-spinner-three-bounce.wave-loader { display: inline-block; width: $wave-loader-default-width; - height: round($wave-loader-default-width * .3); + height: round($wave-loader-default-width * 0.3); > .sk-bounce1, > .sk-bounce2, @@ -26,7 +26,7 @@ $wave-loader-on-button-width: 33px; &--on-button { margin-right: 5px; width: $wave-loader-on-button-width; - height: round($wave-loader-on-button-width * .3); + height: round($wave-loader-on-button-width * 0.3); > .sk-bounce1, > .sk-bounce2, diff --git a/phpstan.json b/phpstan.json index cca5ff36..a2419a14 100644 --- a/phpstan.json +++ b/phpstan.json @@ -1,3 +1,3 @@ { "defaultLevel": 6 -} \ No newline at end of file +} From 6489a6e73afe14d81845e40ed76509dc244c8ba6 Mon Sep 17 00:00:00 2001 From: maslov Date: Wed, 30 Dec 2020 07:47:38 +0200 Subject: [PATCH 207/304] TE-7291: fixed path to fonts --- assets/Zed/sass/main.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/Zed/sass/main.scss b/assets/Zed/sass/main.scss index c232f87f..76823e23 100644 --- a/assets/Zed/sass/main.scss +++ b/assets/Zed/sass/main.scss @@ -2,6 +2,8 @@ * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ +// fix path to fonts +$icon-font-path: '../../fonts/bootstrap/'; // external dependencies @import '~jquery-ui/themes/base/all.css'; From f224f78839cc5637d7fdd0a850906e896b6d62e1 Mon Sep 17 00:00:00 2001 From: maslov Date: Fri, 8 Jan 2021 13:04:29 +0200 Subject: [PATCH 208/304] TE-8367: redefined variable for `bootstrap-sass` dependency. --- assets/Zed/sass/main.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/Zed/sass/main.scss b/assets/Zed/sass/main.scss index c232f87f..42c4e3dd 100644 --- a/assets/Zed/sass/main.scss +++ b/assets/Zed/sass/main.scss @@ -2,6 +2,8 @@ * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ +// fix path to fonts in the `bootstrap-sass` dependency +$icon-font-path: '../../fonts/bootstrap/'; // external dependencies @import '~jquery-ui/themes/base/all.css'; From bb8e14b01ae5d6bfce38b842c0dca2b31eb3b4ba Mon Sep 17 00:00:00 2001 From: maslov Date: Mon, 11 Jan 2021 14:34:31 +0200 Subject: [PATCH 209/304] TE-8367: redefined variable for `bootstrap-sass` dependency. --- assets/Zed/sass/main.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/Zed/sass/main.scss b/assets/Zed/sass/main.scss index 42c4e3dd..5bde57dd 100644 --- a/assets/Zed/sass/main.scss +++ b/assets/Zed/sass/main.scss @@ -2,6 +2,7 @@ * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ + // fix path to fonts in the `bootstrap-sass` dependency $icon-font-path: '../../fonts/bootstrap/'; From f077f0d95e1dbcb306804f0e2f97d0db381c65d1 Mon Sep 17 00:00:00 2001 From: maslov Date: Mon, 11 Jan 2021 15:46:32 +0200 Subject: [PATCH 210/304] TE-7291: removed fix for bootstrap --- assets/Zed/sass/main.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/assets/Zed/sass/main.scss b/assets/Zed/sass/main.scss index 76823e23..c232f87f 100644 --- a/assets/Zed/sass/main.scss +++ b/assets/Zed/sass/main.scss @@ -2,8 +2,6 @@ * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ -// fix path to fonts -$icon-font-path: '../../fonts/bootstrap/'; // external dependencies @import '~jquery-ui/themes/base/all.css'; From 67d9c1a07bf49a7246da78afb41ad1c7115f1935 Mon Sep 17 00:00:00 2001 From: maslov Date: Mon, 25 Jan 2021 15:21:50 +0200 Subject: [PATCH 211/304] TE-8419: updated and prepared dependencies --- assets/Zed/package-lock.json | 334 +++++++++++++++++------------------ assets/Zed/package.json | 4 +- 2 files changed, 163 insertions(+), 175 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 159bff2b..2a25d601 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -1,176 +1,164 @@ { - "name": "spryker-zed-gui", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "almond": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/almond/-/almond-0.3.3.tgz", - "integrity": "sha1-oOfJWsdiTWQXtElLHmi/9pMWiiA=" - }, - "animate.css": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-3.5.2.tgz", - "integrity": "sha1-keZo3AaagI5eSZUUhnuXquAWbDY=" - }, - "bootstrap-sass": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/bootstrap-sass/-/bootstrap-sass-3.4.1.tgz", - "integrity": "sha512-p5rxsK/IyEDQm2CwiHxxUi0MZZtvVFbhWmyMOt4lLkA4bujDA1TGoKT0i1FKIWiugAdP+kK8T5KMDFIKQCLYIA==" - }, - "codemirror": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.12.0.tgz", - "integrity": "sha1-lWpHK9Kw+Uyw9zBoChwzZxzX+6M=" - }, - "datatables.net": { - "version": "1.10.21", - "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.21.tgz", - "integrity": "sha512-/bSZtxmf3GTpYcvEmwZ8q26I1yhSx8qklR2B+s1K8+/51UW/zc2zTYwJMqr/Z+iCYixAc00ildj4g2x0Qamolw==", - "requires": { - "jquery": ">=1.7" - } - }, - "datatables.net-bs": { - "version": "1.10.21", - "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-1.10.21.tgz", - "integrity": "sha512-4mpesFXNEkLlQET3IDLclLz95Xit4Kp/jHcOM2X0nc/ijDfO3qJk3ehZ+NSEAkXZDge6ZtY5Zxq2O90ISiIjwQ==", - "requires": { - "datatables.net": "1.10.21", - "jquery": ">=1.7" - } - }, - "datatables.net-buttons": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.2.4.tgz", - "integrity": "sha1-rZCn6zlBmWEI7/bVKTxHM/GHQyk=", - "requires": { - "datatables.net": ">=1.10.9", - "jquery": ">=1.7" - } - }, - "datatables.net-buttons-bs": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs/-/datatables.net-buttons-bs-1.2.4.tgz", - "integrity": "sha1-GEOvK+BUSYfN06vUcQKKoj2kjOY=", - "requires": { - "datatables.net-bs": ">=1.10.9", - "datatables.net-buttons": ">=1.0.3", - "jquery": ">=1.7" - } - }, - "datatables.net-responsive": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.2.5.tgz", - "integrity": "sha512-AuF28BJRQWfke0cwZwgJB5+WHgoDCDAnW59TJWX4JAXYes3iFrJA6mNHWw46Up3bqUJVI2ZxJoKTGpoEHm5hNA==", - "requires": { - "datatables.net": "^1.10.15", - "jquery": ">=1.7" - } - }, - "datatables.net-responsive-bs": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.2.5.tgz", - "integrity": "sha512-O3tIWZUiFtdHm5CkQ9I1vaQBQ74cchOq19JkYzWykkwP5mzW+tKuHINcajxDL5GJo8WXejG9BSNq6ZRK1BQkBw==", - "requires": { - "datatables.net-bs": "^1.10.15", - "datatables.net-responsive": "2.2.5", - "jquery": ">=1.7" - } - }, - "datatables.net-select": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.3.1.tgz", - "integrity": "sha512-PeVd/hlAX58QzL0+mGvxnXP7ylLtzZMeAots/uZkQi+6c/KI6JuP8LCJoEMHAsSjQM/BnG7Uw8E1YGOz1tZpQQ==", - "requires": { - "datatables.net": "^1.10.15", - "jquery": ">=1.7" - } - }, - "datatables.net-select-bs": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.3.1.tgz", - "integrity": "sha512-CbZTZoBjaALftqCHWRrrlVNn2w472vXRsn5myM/wVyVkFh4S8W8QRAkP6jEkfxdmXsXiDidXg03fR5ksVEbebw==", - "requires": { - "datatables.net-bs": "^1.10.15", - "datatables.net-select": "1.3.1", - "jquery": ">=1.7" - } - }, - "es6-promise": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", - "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=" - }, - "font-awesome": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", - "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" - }, - "get-root-node-polyfill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-root-node-polyfill/-/get-root-node-polyfill-1.0.0.tgz", - "integrity": "sha512-AzucsG1DdepagLF8tkxfjUqn3cCQ63MgH/tBWwPSy0BIDt8iLFZYDwnTxA08d+zdgL8l2dkPdZDe+Qkd+RMl9Q==" - }, - "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" - }, - "jquery-migrate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.0.1.tgz", - "integrity": "sha512-NYlhcFnRh4Bv9jvadPlcAKQdVGRE0+TSgFYxQ+ZnCxUUHbwd+SjbOg+Xvu1Oea9mpQJ+2VB1eCfcBORWNQsHaA==" - }, - "jquery-mousewheel": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz", - "integrity": "sha1-BvAzXxbjU6aV5yBr9QUDy1I6buU=" - }, - "jquery-ui": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz", - "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE=" - }, - "jstree": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.10.tgz", - "integrity": "sha512-TDhwTy24ZKCVei0gLRxnH5PQuX77nqlG7bhQh+UDTeOxC2xdhDrS1x7YtbjLVlSxmH7USnA/WIeVOGN/m3D0QA==", - "requires": { - "jquery": ">=1.9.1" - } - }, - "metismenu": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/metismenu/-/metismenu-2.0.3.tgz", - "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" - }, - "nestable": { - "version": "git+https://github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", - "from": "git+https://github.com/ilmente/Nestable.git#v1.1.1" - }, - "pace": { - "version": "git+https://github.com/hubspot/pace.git#c6846cbf6b928e9903b569269fa9fbf32f2554f4", - "from": "git+https://github.com/hubspot/pace.git#v1.0.2" - }, - "select2": { - "version": "git+https://github.com/select2/select2.git#622a619d25358b86a93c2335f88e1884acc9ccb8", - "from": "git+https://github.com/select2/select2.git#4.0.2", - "requires": { - "almond": "~0.3.1", - "jquery-mousewheel": "~3.1.13" - } - }, - "summernote": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz", - "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" - }, - "sweetalert": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-1.1.3.tgz", - "integrity": "sha1-0sMepJKyK2qNiHrqFZiaI4/AhK4=" + "name": "spryker-zed-gui", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "animate.css": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-3.5.2.tgz", + "integrity": "sha1-keZo3AaagI5eSZUUhnuXquAWbDY=" + }, + "bootstrap-sass": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap-sass/-/bootstrap-sass-3.4.1.tgz", + "integrity": "sha512-p5rxsK/IyEDQm2CwiHxxUi0MZZtvVFbhWmyMOt4lLkA4bujDA1TGoKT0i1FKIWiugAdP+kK8T5KMDFIKQCLYIA==" + }, + "codemirror": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.12.0.tgz", + "integrity": "sha1-lWpHK9Kw+Uyw9zBoChwzZxzX+6M=" + }, + "datatables.net": { + "version": "1.10.23", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.23.tgz", + "integrity": "sha512-we3tlNkzpxvgkKKlTxTMXPCt35untVXNg8zUYWpQyC1U5vJc+lT0+Zdc1ztK8d3lh5CfdnuFde2p8n3XwaGl3Q==", + "requires": { + "jquery": ">=1.7" + } + }, + "datatables.net-bs": { + "version": "1.10.23", + "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-1.10.23.tgz", + "integrity": "sha512-O/kJxT93i9hIq8trdbHuIcHhrTodkVPfPqvxOqKK8lJ03XUUrT6V8ZoGyxROFjQGcgbye5CoRLVf7MY+5biOIQ==", + "requires": { + "datatables.net": "1.10.23", + "jquery": ">=1.7" + } + }, + "datatables.net-buttons": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.2.4.tgz", + "integrity": "sha1-rZCn6zlBmWEI7/bVKTxHM/GHQyk=", + "requires": { + "datatables.net": ">=1.10.9", + "jquery": ">=1.7" + } + }, + "datatables.net-buttons-bs": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs/-/datatables.net-buttons-bs-1.2.4.tgz", + "integrity": "sha1-GEOvK+BUSYfN06vUcQKKoj2kjOY=", + "requires": { + "datatables.net-bs": ">=1.10.9", + "datatables.net-buttons": ">=1.0.3", + "jquery": ">=1.7" + } + }, + "datatables.net-responsive": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.2.7.tgz", + "integrity": "sha512-pjZcR+AHa0GE++giRhMBSxFLKrfjP+X7etj7oZMMfMTi1gcdYdM8YP3gmpEyfLjDEg6uPJb9PRH4mQHcc8OYyA==", + "requires": { + "datatables.net": "^1.10.15", + "jquery": ">=1.7" + } + }, + "datatables.net-responsive-bs": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/datatables.net-responsive-bs/-/datatables.net-responsive-bs-2.2.7.tgz", + "integrity": "sha512-hy+ItFI4/JvBW15WrQib9FPQC7RkurVu07406YaQZfXQB08FfJYzUeT42xUvhLFfIRTk4jUlDQWsc2Rbp8yHQQ==", + "requires": { + "datatables.net-bs": "^1.10.15", + "datatables.net-responsive": "2.2.7", + "jquery": ">=1.7" + } + }, + "datatables.net-select": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.3.1.tgz", + "integrity": "sha512-PeVd/hlAX58QzL0+mGvxnXP7ylLtzZMeAots/uZkQi+6c/KI6JuP8LCJoEMHAsSjQM/BnG7Uw8E1YGOz1tZpQQ==", + "requires": { + "datatables.net": "^1.10.15", + "jquery": ">=1.7" + } + }, + "datatables.net-select-bs": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/datatables.net-select-bs/-/datatables.net-select-bs-1.3.1.tgz", + "integrity": "sha512-CbZTZoBjaALftqCHWRrrlVNn2w472vXRsn5myM/wVyVkFh4S8W8QRAkP6jEkfxdmXsXiDidXg03fR5ksVEbebw==", + "requires": { + "datatables.net-bs": "^1.10.15", + "datatables.net-select": "1.3.1", + "jquery": ">=1.7" + } + }, + "es6-promise": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", + "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=" + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "get-root-node-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-root-node-polyfill/-/get-root-node-polyfill-1.0.0.tgz", + "integrity": "sha512-AzucsG1DdepagLF8tkxfjUqn3cCQ63MgH/tBWwPSy0BIDt8iLFZYDwnTxA08d+zdgL8l2dkPdZDe+Qkd+RMl9Q==" + }, + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" + }, + "jquery-migrate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.0.1.tgz", + "integrity": "sha512-NYlhcFnRh4Bv9jvadPlcAKQdVGRE0+TSgFYxQ+ZnCxUUHbwd+SjbOg+Xvu1Oea9mpQJ+2VB1eCfcBORWNQsHaA==" + }, + "jquery-ui": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz", + "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE=" + }, + "jstree": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/jstree/-/jstree-3.3.11.tgz", + "integrity": "sha512-9ZJKroPjCyjb6JLPuAbBrLJKT6pS1f4m5gkwoEagG5oQWtvzm0IiDsntXTxeFtz7AmqrKfij+gLfF9MgWriNxg==", + "requires": { + "jquery": ">=1.9.1" + } + }, + "metismenu": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/metismenu/-/metismenu-2.0.3.tgz", + "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" + }, + "nestable": { + "version": "git+https://github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", + "from": "git+https://github.com/ilmente/Nestable.git#v1.1.1" + }, + "pace": { + "version": "npm:pace-js@1.0.2", + "resolved": "https://registry.npmjs.org/pace-js/-/pace-js-1.0.2.tgz", + "integrity": "sha1-Zzpxf4M8y09DFVMbde5HiDdmAPc=" + }, + "select2": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/select2/-/select2-4.0.13.tgz", + "integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==" + }, + "summernote": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz", + "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" + }, + "sweetalert": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-1.1.3.tgz", + "integrity": "sha1-0sMepJKyK2qNiHrqFZiaI4/AhK4=" + } } - } } diff --git a/assets/Zed/package.json b/assets/Zed/package.json index f424fba9..24fa506c 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -23,8 +23,8 @@ "jstree": "~3.3.3", "metismenu": "~2.0.2", "nestable": "https://github.com/ilmente/Nestable.git#v1.1.1", - "pace": "https://github.com/hubspot/pace.git#v1.0.2", - "select2": "https://github.com/select2/select2.git#4.0.2", + "pace": "npm:pace-js@~1.0.2", + "select2": "~4.0.13", "summernote": "^0.8.11", "sweetalert": "~1.1.3" } From 07885f15e4b0ae8e2e2d3ceec11f80752349c384 Mon Sep 17 00:00:00 2001 From: maslov Date: Tue, 26 Jan 2021 18:54:37 +0200 Subject: [PATCH 212/304] TE-8445: updated released dependencies `@spryker/nestable` and `@spryker/sql-parser-mistic` --- assets/Zed/js/modules/commons.js | 2 +- assets/Zed/package-lock.json | 9 +++++---- assets/Zed/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index 8b83514c..0d9aa97c 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -36,7 +36,7 @@ require('datatables.net-buttons'); require('datatables.net-buttons-bs'); require('datatables.net-responsive'); require('datatables.net-select'); -require('nestable'); +require('@spryker/nestable'); require('select2'); require('codemirror'); require('summernote'); diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 2a25d601..42780343 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@spryker/nestable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@spryker/nestable/-/nestable-1.1.1.tgz", + "integrity": "sha512-4VWkVfUZaEh6nm9/n3YKmOr+GFzD2k3Wmhu66xeYR6Pjo61XbA1YOVBS40p5prbvqKJb0LvO6IyblXC17xtZGQ==" + }, "animate.css": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-3.5.2.tgz", @@ -136,10 +141,6 @@ "resolved": "https://registry.npmjs.org/metismenu/-/metismenu-2.0.3.tgz", "integrity": "sha1-b3liFSXwzXle1oE73TK2pH1oewc=" }, - "nestable": { - "version": "git+https://github.com/ilmente/Nestable.git#0baf37567b5bda0bcb80acc3dd0c0d0a13ba497d", - "from": "git+https://github.com/ilmente/Nestable.git#v1.1.1" - }, "pace": { "version": "npm:pace-js@1.0.2", "resolved": "https://registry.npmjs.org/pace-js/-/pace-js-1.0.2.tgz", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 24fa506c..19bdec2a 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -3,6 +3,7 @@ "name": "spryker-zed-gui", "version": "1.0.0", "dependencies": { + "@spryker/nestable": "~1.1.1", "animate.css": "~3.5.1", "bootstrap-sass": "~3.4.1", "codemirror": "~5.12.0", @@ -22,7 +23,6 @@ "jquery-ui": "~1.12.1", "jstree": "~3.3.3", "metismenu": "~2.0.2", - "nestable": "https://github.com/ilmente/Nestable.git#v1.1.1", "pace": "npm:pace-js@~1.0.2", "select2": "~4.0.13", "summernote": "^0.8.11", From 8146a1a6ed1b1d39cac7e89849dab7cbfddffcfa Mon Sep 17 00:00:00 2001 From: maslov Date: Thu, 28 Jan 2021 13:16:06 +0200 Subject: [PATCH 213/304] TE-8445: updated acceptance tests --- .../Zed/Gui/_support/Helper/DataTableActionHelper.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php index 40c1fbe3..165657c7 100644 --- a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php @@ -80,7 +80,7 @@ public function clickDataTableLinkInDropDownOfButton(string $buttonName, string ); $elementInList = sprintf( - '(//tr[@role="row"]//button[contains(., "%s")])[%s]/following::ul[1]//a[contains(., "%s")]', + '(//table[@class="dataTable"]//button[contains(., "%s")])[%s]/following::ul[1]//a[contains(., "%s")]', $buttonName, $rowPosition, $linkName @@ -112,10 +112,10 @@ protected function clickButton(string $name, int $rowPosition, ?string $gridId = { $driver = $this->getDriver(); - $selector = sprintf('(//tr[@role="row"]//a[contains(., "%1$s")] | //button[contains(., "%1$s")])[%2$d]', $name, $rowPosition); + $selector = sprintf('(//table[@class="dataTable"]//a[contains(., "%1$s")] | //button[contains(., "%1$s")])[%2$d]', $name, $rowPosition); if ($gridId) { - $selector = sprintf('(//div[@id="%3$s"]//tr[@role="row"]//a[contains(., "%1$s")] | //button[contains(., "%1$s")])[%2$d]', $name, $rowPosition, $gridId); + $selector = sprintf('(//div[@id="%3$s"]//table[@class="dataTable"]//a[contains(., "%1$s")] | //button[contains(., "%1$s")])[%2$d]', $name, $rowPosition, $gridId); } if (method_exists($driver, 'waitForElementVisible')) { From a9aca8731c533cd8ec6385fb0412de6b047f20c7 Mon Sep 17 00:00:00 2001 From: maslov Date: Thu, 28 Jan 2021 15:49:34 +0200 Subject: [PATCH 214/304] TE-8445: updated acceptance tests --- src/Spryker/Zed/Gui/Presentation/Table/index.twig | 1 + .../Zed/Gui/_support/Helper/DataTableActionHelper.php | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/index.twig b/src/Spryker/Zed/Gui/Presentation/Table/index.twig index 7976d309..99b1ab34 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/index.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/index.twig @@ -14,6 +14,7 @@ {% include 'table-data-order.twig' -%} {% include 'table-data-columns.twig' -%} + data-qa="data-table" > {% include '@Gui/Table/thead.twig' %} {% include '@Gui/Table/tfoot.twig' %} diff --git a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php index 165657c7..96aeaaee 100644 --- a/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php +++ b/tests/SprykerTest/Zed/Gui/_support/Helper/DataTableActionHelper.php @@ -80,7 +80,7 @@ public function clickDataTableLinkInDropDownOfButton(string $buttonName, string ); $elementInList = sprintf( - '(//table[@class="dataTable"]//button[contains(., "%s")])[%s]/following::ul[1]//a[contains(., "%s")]', + '(//table[@data-qa="data-table"]//button[contains(., "%s")])[%s]/following::ul[1]//a[contains(., "%s")]', $buttonName, $rowPosition, $linkName @@ -112,10 +112,10 @@ protected function clickButton(string $name, int $rowPosition, ?string $gridId = { $driver = $this->getDriver(); - $selector = sprintf('(//table[@class="dataTable"]//a[contains(., "%1$s")] | //button[contains(., "%1$s")])[%2$d]', $name, $rowPosition); + $selector = sprintf('(//table[@data-qa="data-table"]//a[contains(., "%1$s")] | //button[contains(., "%1$s")])[%2$d]', $name, $rowPosition); if ($gridId) { - $selector = sprintf('(//div[@id="%3$s"]//table[@class="dataTable"]//a[contains(., "%1$s")] | //button[contains(., "%1$s")])[%2$d]', $name, $rowPosition, $gridId); + $selector = sprintf('(//div[@id="%3$s"]//table[@data-qa="data-table"]//a[contains(., "%1$s")] | //button[contains(., "%1$s")])[%2$d]', $name, $rowPosition, $gridId); } if (method_exists($driver, 'waitForElementVisible')) { From 4114210f220d8782531ccd5a5822d08077f2a868 Mon Sep 17 00:00:00 2001 From: vitalii ivanov Date: Thu, 28 Jan 2021 17:50:49 +0200 Subject: [PATCH 215/304] SUPESC-196: - Adjusted DeleteForm::configureOptions() so added allow extra fields as true --- src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php index 7e3bfa91..edeb8b21 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php @@ -33,6 +33,7 @@ public function configureOptions(OptionsResolver $resolver) 'attr' => [ 'class' => 'form-inline', ], + 'allow_extra_fields' => true, ]); } From e7eecd43ba9133ef06beb3043a0f4b77d1348812 Mon Sep 17 00:00:00 2001 From: Vitalii Kobyliak Date: Thu, 18 Feb 2021 20:21:08 +0200 Subject: [PATCH 216/304] SUPESC-196: Moved configuration field option --- src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php index edeb8b21..7e3bfa91 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php @@ -33,7 +33,6 @@ public function configureOptions(OptionsResolver $resolver) 'attr' => [ 'class' => 'form-inline', ], - 'allow_extra_fields' => true, ]); } From c3eb0c52031f215120131ba36f42f266be6a406f Mon Sep 17 00:00:00 2001 From: Roman Sadkivskyi Date: Fri, 26 Mar 2021 18:00:29 +0200 Subject: [PATCH 217/304] SUPESC-196 - Remove `allow_extra_fields` form Delete form --- src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig b/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig index 5e06b45b..cf6265fe 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig @@ -3,6 +3,7 @@ {% if field.vars.name != '_token' %} {% if not field.isRendered %} + {% do field.setRendered %} {% endif %} {% endif %} {% endfor %} From ae76f59db7a331d0794c4f03553874bc95881284 Mon Sep 17 00:00:00 2001 From: Volodymyr Nakvasiuk Date: Wed, 14 Apr 2021 03:25:52 +0300 Subject: [PATCH 218/304] SUPESC-196 Render form with CSRF Token --- src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig b/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig index cf6265fe..854a502b 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig @@ -7,6 +7,6 @@ {% endif %} {% endif %} {% endfor %} - {{ form_widget(form) }} + {{ form_widget(form._token) }} {{ form_end(form) }} From 3168f5b6a07627837b33ff5dcdcb2f0932edb41d Mon Sep 17 00:00:00 2001 From: Volodymyr Nakvasiuk Date: Wed, 14 Apr 2021 10:12:58 +0300 Subject: [PATCH 219/304] SUPESC-196 Check if form Token defined --- src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig b/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig index 854a502b..01ff4d76 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/delete-form.twig @@ -7,6 +7,8 @@ {% endif %} {% endif %} {% endfor %} - {{ form_widget(form._token) }} + {% if form._token is defined %} + {{ form_widget(form._token) }} + {% endif %} {{ form_end(form) }} From d52da13dd0fd416d000f008095afbf4e5337b88b Mon Sep 17 00:00:00 2001 From: Roman Havrylko <70894038+romanhavrylko@users.noreply.github.com> Date: Tue, 27 Apr 2021 18:20:41 +0300 Subject: [PATCH 220/304] =?UTF-8?q?=D0=A1=D0=A1-12307=20-=20Created=20gui?= =?UTF-8?q?=20for=20create=20category=20action.=20(#8049)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * CC-12646 Created Category Gui Co-authored-by: zamlelyi Co-authored-by: Nikolay <41688490+zamlely@users.noreply.github.com> --- .../Form/Type/relationdropdowntype.twig | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/Spryker/Zed/Gui/Presentation/Form/Type/relationdropdowntype.twig diff --git a/src/Spryker/Zed/Gui/Presentation/Form/Type/relationdropdowntype.twig b/src/Spryker/Zed/Gui/Presentation/Form/Type/relationdropdowntype.twig new file mode 100644 index 00000000..e18c11f1 --- /dev/null +++ b/src/Spryker/Zed/Gui/Presentation/Form/Type/relationdropdowntype.twig @@ -0,0 +1,18 @@ +{% block relation_dropdown_widget %} + {% for child in form %} + {% if child.vars.attr.extended is defined %} + {{ form_label(child) }} +
    + {{ form_widget(child, { 'attr': { + 'action-url': child.vars.attr.action_url | default, + 'action-event': child.vars.attr.action_event | default, + 'action-field': child.vars.attr.action_field | default + } }) }} + + +
    + {% else %} + {{ form_row(child) }} + {% endif %} + {% endfor %} +{% endblock relation_dropdown_widget %} From d1fc61ce17867d70f4a8f7589c2ae2800d0654fa Mon Sep 17 00:00:00 2001 From: mscherer Date: Mon, 3 May 2021 16:18:58 +0200 Subject: [PATCH 221/304] TE-9106 Fix composer.json indentation --- .editorconfig | 2 - composer.json | 104 +++++++++++++++++++++++++------------------------- 2 files changed, 52 insertions(+), 54 deletions(-) diff --git a/.editorconfig b/.editorconfig index 43fecdb3..3191e885 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,5 +12,3 @@ trim_trailing_whitespace = true [*.bat] end_of_line = crlf -[composer.json] -indent_size = 2 diff --git a/composer.json b/composer.json index 0071543b..a8fe17e9 100644 --- a/composer.json +++ b/composer.json @@ -1,55 +1,55 @@ { - "name": "spryker/gui", - "type": "library", - "description": "Gui module", - "license": "proprietary", - "require": { - "php": ">=7.3", - "spryker/form-extension": "^1.0.0", - "spryker/kernel": "^3.52.0", - "spryker/propel-orm": "^1.0.0", - "spryker/symfony": "^3.0.0", - "spryker/twig": "^3.0.0", - "spryker/twig-extension": "^1.0.0", - "spryker/util-sanitize": "^2.0.0", - "spryker/util-sanitize-xss": "^1.0.0", - "spryker/util-text": "^1.1.0" - }, - "require-dev": { - "spryker/application": "*", - "spryker/code-sniffer": "*", - "spryker/container": "*", - "spryker/propel": "*", - "spryker/silex": "*", - "spryker/testify": "*" - }, - "suggest": { - "spryker/container": "If you want to use Twig plugins", - "spryker/silex": "If you want to use ServiceProvider." - }, - "autoload": { - "psr-4": { - "Spryker\\": "src/Spryker/", - "SprykerTest\\Zed\\Gui\\Helper\\": "tests/SprykerTest/Zed/Gui/_support/Helper/" + "name": "spryker/gui", + "type": "library", + "description": "Gui module", + "license": "proprietary", + "require": { + "php": ">=7.3", + "spryker/form-extension": "^1.0.0", + "spryker/kernel": "^3.52.0", + "spryker/propel-orm": "^1.0.0", + "spryker/symfony": "^3.0.0", + "spryker/twig": "^3.0.0", + "spryker/twig-extension": "^1.0.0", + "spryker/util-sanitize": "^2.0.0", + "spryker/util-sanitize-xss": "^1.0.0", + "spryker/util-text": "^1.1.0" + }, + "require-dev": { + "spryker/application": "*", + "spryker/code-sniffer": "*", + "spryker/container": "*", + "spryker/propel": "*", + "spryker/silex": "*", + "spryker/testify": "*" + }, + "suggest": { + "spryker/container": "If you want to use Twig plugins", + "spryker/silex": "If you want to use ServiceProvider." + }, + "autoload": { + "psr-4": { + "Spryker\\": "src/Spryker/", + "SprykerTest\\Zed\\Gui\\Helper\\": "tests/SprykerTest/Zed/Gui/_support/Helper/" + } + }, + "autoload-dev": { + "psr-4": { + "SprykerTest\\": "tests/SprykerTest/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true, + "scripts": { + "cs-check": "phpcs -p -s --standard=vendor/spryker/code-sniffer/Spryker/ruleset.xml src/ tests/", + "cs-fix": "phpcbf -p --standard=vendor/spryker/code-sniffer/Spryker/ruleset.xml src/ tests/" + }, + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "config": { + "sort-packages": true } - }, - "autoload-dev": { - "psr-4": { - "SprykerTest\\": "tests/SprykerTest/" - } - }, - "minimum-stability": "dev", - "prefer-stable": true, - "scripts": { - "cs-check": "phpcs -p -s --standard=vendor/spryker/code-sniffer/Spryker/ruleset.xml src/ tests/", - "cs-fix": "phpcbf -p --standard=vendor/spryker/code-sniffer/Spryker/ruleset.xml src/ tests/" - }, - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "config": { - "sort-packages": true - } } From 9b5bb9d986ac39cad15d6991a589e349cab47e43 Mon Sep 17 00:00:00 2001 From: Alex Malkevich Date: Tue, 4 May 2021 15:30:22 +0200 Subject: [PATCH 222/304] format: apply to yaml and xml files --- .travis.yml | 4 ++-- src/Spryker/Shared/Gui/Transfer/gui.transfer.xml | 4 +--- tooling.yml | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index dfc12b55..6c176e1f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,8 +8,8 @@ matrix: fast_finish: true include: - - php: 7.3 - env: PREFER_LOWEST=1 + - php: 7.3 + env: PREFER_LOWEST=1 env: global: diff --git a/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml b/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml index c9ba4632..bf31894f 100644 --- a/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml +++ b/src/Spryker/Shared/Gui/Transfer/gui.transfer.xml @@ -1,7 +1,5 @@ - + diff --git a/tooling.yml b/tooling.yml index 00d1fcde..97b4ad9a 100644 --- a/tooling.yml +++ b/tooling.yml @@ -1,2 +1,2 @@ architecture-sniffer: - priority: 2 + priority: 2 From 3cbd37923d90b3240c639d5af315c8b6ec836df1 Mon Sep 17 00:00:00 2001 From: mscherer Date: Wed, 5 May 2021 19:20:55 +0200 Subject: [PATCH 223/304] TE-9104 CI to GithubActions --- .github/workflows/ci.yml | 58 ++++++++++++++++++++++++++++++++++++++++ .travis.yml | 37 ------------------------- README.md | 2 +- 3 files changed, 59 insertions(+), 38 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..06f7a338 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,58 @@ +name: CI + +on: + push: + branches: + - 'master' + pull_request: + workflow_dispatch: + +jobs: + validation: + name: Validation + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '7.4' + extensions: mbstring, intl, bcmath + coverage: none + + - name: Composer Install + run: composer install --prefer-dist --no-interaction --profile + + - name: Run validation + run: composer validate + + - name: Syntax check + run: find ./src -path src -prune -o -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" ) + + lowest: + name: Prefer Lowest + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '7.3' + extensions: mbstring, intl, bcmath + coverage: none + + - name: Composer Install + run: composer install --prefer-dist --no-interaction --profile + + - name: Composer Update + run: composer update --prefer-lowest --prefer-dist --no-interaction --profile -vvv + + - name: Composer Install prefer lowest tool + run: composer require --dev dereuromark/composer-prefer-lowest; + + - name: Run validation + run: vendor/bin/validate-prefer-lowest -m diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6c176e1f..00000000 --- a/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ -language: php - -php: - - 7.3 - - 7.4 - -matrix: - fast_finish: true - - include: - - php: 7.3 - env: PREFER_LOWEST=1 - -env: - global: - - APPLICATION_ENV=development - - APPLICATION_STORE=DE - -before_install: - - phpenv config-rm xdebug.ini - -install: - - COMPOSER_MEMORY_LIMIT=-1 composer install --prefer-dist --no-interaction - - if [[ $PREFER_LOWEST == 1 ]]; then COMPOSER_MEMORY_LIMIT=-1 composer update --prefer-lowest --prefer-stable --prefer-dist --no-interaction ; fi - - if [[ $PREFER_LOWEST == 1 ]]; then COMPOSER_MEMORY_LIMIT=-1 composer require --dev dereuromark/composer-prefer-lowest; fi - -script: - - find ./src -path src -prune -o -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" ) - - - if [[ $PREFER_LOWEST == 1 ]]; then vendor/bin/validate-prefer-lowest || true; fi - -cache: - directories: - - $HOME/.composer/cache/ - -notifications: - email: false diff --git a/README.md b/README.md index 9c557d87..d9fbacfa 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Gui Module -[![Build Status](https://travis-ci.org/spryker/gui.svg)](https://travis-ci.org/spryker/gui) +[![Latest Stable Version](https://poser.pugx.org/spryker/gui/v/stable.svg)](https://packagist.org/packages/spryker/gui) [![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.3-8892BF.svg)](https://php.net/) Gui provides the main logic for GUI functionality across all modules. From edc88d1ef84b09dce3e6b640f916b5658ca713a0 Mon Sep 17 00:00:00 2001 From: Olha Livitchuk Date: Thu, 27 May 2021 19:50:01 +0300 Subject: [PATCH 224/304] TE-8692 Reactivated modules with arch-sniffer D-L --- .gitattributes | 1 + architecture-baseline.json | 1 + 2 files changed, 2 insertions(+) create mode 100644 architecture-baseline.json diff --git a/.gitattributes b/.gitattributes index 2be6c6c9..27334278 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,4 @@ tooling.yml export-ignore .editorconfig export-ignore .gitattributes export-ignore .gitignore export-ignore +architecture-baseline.json export-ignore diff --git a/architecture-baseline.json b/architecture-baseline.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/architecture-baseline.json @@ -0,0 +1 @@ +[] From 1ffba2416a063a47ac0b6d07d3ddfd447afa3d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klatt?= Date: Wed, 30 Jun 2021 15:34:49 +0200 Subject: [PATCH 225/304] TE-9182 Added possibility to download GUI tables as CSV file (#8346) TE-9182 Export Table Views --- codeception.yml | 3 - composer.json | 1 + phpstan.neon | 4 +- .../Gui/Communication/Table/AbstractTable.php | 172 ++++++++++++++++++ .../Communication/Fixture/ActiveRecord.php | 34 ++++ .../Communication/Fixture/DownloadTable.php | 49 +++++ ...adTableWithOrderedHeadersAndFormatting.php | 63 +++++++ ...loadTableWithoutGetDownloadQueryMethod.php | 22 +++ .../Communication/Table/AbstractTableTest.php | 97 ++++++++++ 9 files changed, 440 insertions(+), 5 deletions(-) create mode 100644 tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecord.php create mode 100644 tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTable.php create mode 100644 tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTableWithOrderedHeadersAndFormatting.php create mode 100644 tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTableWithoutGetDownloadQueryMethod.php diff --git a/codeception.yml b/codeception.yml index 568908dd..7a2ee8f0 100644 --- a/codeception.yml +++ b/codeception.yml @@ -12,6 +12,3 @@ settings: colors: true memory_limit: 1024M log: true -extensions: - enabled: [SprykerTest\Shared\Testify\Helper\WebDriverHelper] - config: { SprykerTest\Shared\Testify\Helper\WebDriverHelper: { suites: [Presentation] } } diff --git a/composer.json b/composer.json index a8fe17e9..d0ca9040 100644 --- a/composer.json +++ b/composer.json @@ -7,6 +7,7 @@ "php": ">=7.3", "spryker/form-extension": "^1.0.0", "spryker/kernel": "^3.52.0", + "spryker/laminas": "^1.0.0", "spryker/propel-orm": "^1.0.0", "spryker/symfony": "^3.0.0", "spryker/twig": "^3.0.0", diff --git a/phpstan.neon b/phpstan.neon index 5520645f..749f9dd7 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,5 +4,5 @@ parameters: ignoreErrors: - '#Function twig_escape_filter not found.#' - '#Method .+ParameterBag::all\(\) invoked with 1 parameter, 0 required.#' - - '#Method .+AbstractTable::getOrderParameter\(\) should return array|null but returns string|null#' - - '#Method .+AbstractTable::getSearchParameter\(\) should return array|null but returns string|null#' + - '#Method .+AbstractTable::getOrderParameter\(\) should return array\|null but returns string|null#' + - '#Method .+AbstractTable::getSearchParameter\(\) should return array\|null but returns string|null#' diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 3a0b9386..2abd8fa8 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -7,20 +7,31 @@ namespace Spryker\Zed\Gui\Communication\Table; +use DateTime; use Generated\Shared\Transfer\DataTablesColumnTransfer; +use Laminas\Filter\FilterChain; +use Laminas\Filter\StringToLower; +use Laminas\Filter\Word\CamelCaseToDash; use LogicException; use PDO; use Propel\Runtime\ActiveQuery\ModelCriteria; +use Propel\Runtime\ActiveRecord\ActiveRecordInterface; +use Propel\Runtime\Formatter\OnDemandFormatter; use Propel\Runtime\Map\TableMap; use Propel\Runtime\Propel; +use ReflectionClass; use Spryker\Service\UtilSanitize\UtilSanitizeService; use Spryker\Service\UtilText\Model\Url\Url; use Spryker\Shared\Kernel\Container\GlobalContainer; use Spryker\Shared\Kernel\Container\GlobalContainerInterface; +use Spryker\Zed\Gui\Communication\Exception\TableException; use Spryker\Zed\Gui\Communication\Form\DeleteForm; use Spryker\Zed\PropelOrm\Business\Runtime\ActiveQuery\Criteria; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\File\UploadedFile; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\StreamedResponse; +use Symfony\Contracts\Translation\TranslatorInterface; use Twig\Environment; use Twig\Loader\FilesystemLoader; @@ -43,6 +54,11 @@ abstract class AbstractTable */ public const SERVICE_TWIG = 'twig'; + /** + * @uses \Spryker\Zed\Translator\Communication\Plugin\Application\TranslatorApplicationPlugin::SERVICE_TRANSLATOR + */ + public const SERVICE_TRANSLATOR = 'translator'; + /** * @uses \Spryker\Zed\Form\Communication\Plugin\Application\FormApplicationPlugin::SERVICE_FORM_FACTORY */ @@ -61,6 +77,8 @@ abstract class AbstractTable protected const DELETE_FORM_NAME = 'delete_form'; + protected const DATE_TIME_FORMAT_FOR_CSV_FILENAME = 'Y-m-d-h-i-s'; + /** * @var \Symfony\Component\HttpFoundation\Request */ @@ -163,6 +181,160 @@ public function setDataTablesTransfer($dataTablesTransfer) $this->dataTablesTransfer = $dataTablesTransfer; } + /** + * @return \Symfony\Component\HttpFoundation\StreamedResponse + */ + public function streamDownload(): StreamedResponse + { + $streamedResponse = new StreamedResponse(); + $streamedResponse->setCallback($this->getStreamCallback()); + $streamedResponse->setStatusCode(Response::HTTP_OK); + $streamedResponse->headers->set('Content-Type', 'text/csv; charset=utf-8'); + $streamedResponse->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $this->getCsvFileName())); + + return $streamedResponse; + } + + /** + * @return callable + */ + protected function getStreamCallback(): callable + { + $csvHeaders = $this->getCsvHeaders(); + + return function () use ($csvHeaders) { + $csvHandle = fopen('php://output', 'w+'); + + $translatedHeaders = $this->translateCsvHeaders($csvHeaders); + + fputcsv($csvHandle, $translatedHeaders); + + foreach ($this->executeDownloadQuery() as $entity) { + $formattedRow = $this->formatCsvRow($entity); + $intersection = array_intersect_key($formattedRow, $csvHeaders); + $orderedCsvData = array_replace($csvHeaders, $intersection); + + fputcsv($csvHandle, $orderedCsvData); + } + + fclose($csvHandle); + }; + } + + /** + * @throws \Spryker\Zed\Gui\Communication\Exception\TableException + * + * @return array + */ + protected function getCsvHeaders(): array + { + throw new TableException(sprintf('You need to implement `%s()` in your `%s`.', __METHOD__, static::class)); + } + + /** + * @param array $csvHeaders + * + * @return array + */ + protected function translateCsvHeaders(array $csvHeaders): array + { + $translator = $this->getTranslator(); + + if (!$translator) { + return $csvHeaders; + } + + foreach ($csvHeaders as $key => $value) { + $csvHeaders[$key] = $translator->trans($value); + } + + return $csvHeaders; + } + + /** + * @return \Symfony\Contracts\Translation\TranslatorInterface|null + */ + protected function getTranslator(): ?TranslatorInterface + { + $container = $this->getApplicationContainer(); + + if (!$container->has(static::SERVICE_TRANSLATOR)) { + return null; + } + + return $container->get(static::SERVICE_TRANSLATOR); + } + + /** + * @return iterable + */ + protected function executeDownloadQuery(): iterable + { + return $this->getDownloadQuery() + ->setFormatter(OnDemandFormatter::class) + ->find(); + } + + /** + * @throws \Spryker\Zed\Gui\Communication\Exception\TableException + * + * @return \Propel\Runtime\ActiveQuery\ModelCriteria + */ + protected function getDownloadQuery(): ModelCriteria + { + throw new TableException(sprintf('You need to implement `%s()` in your `%s`.', __METHOD__, static::class)); + } + + /** + * @param \Propel\Runtime\ActiveRecord\ActiveRecordInterface $entity + * + * @throws \Spryker\Zed\Gui\Communication\Exception\TableException + * + * @return array + */ + protected function formatCsvRow(ActiveRecordInterface $entity): array + { + if (!method_exists($entity, 'toArray')) { + throw new TableException(sprintf('Missing method `%s::toArray()`.', get_class($entity))); + } + + return $entity->toArray(); + } + + /** + * @return string + */ + protected function getCsvFileName(): string + { + return sprintf('%s-%s.csv', $this->getClassNameShort(), $this->getDatetimeString()); + } + + /** + * @return string + */ + protected function getClassNameShort(): string + { + $reflectionClass = new ReflectionClass($this); + $classNameShort = $reflectionClass->getShortName(); + + $filter = new FilterChain(); + $filter + ->attach(new CamelCaseToDash()) + ->attach(new StringToLower()); + + return $filter->filter($classNameShort); + } + + /** + * @return string + */ + protected function getDatetimeString(): string + { + $dateTime = new DateTime('NOW'); + + return $dateTime->format(static::DATE_TIME_FORMAT_FOR_CSV_FILENAME); + } + /** * @return $this */ diff --git a/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecord.php b/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecord.php new file mode 100644 index 00000000..f76e3605 --- /dev/null +++ b/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecord.php @@ -0,0 +1,34 @@ +data = $data; + } + + /** + * @return array + */ + public function toArray(): array + { + return $this->data; + } +} diff --git a/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTable.php b/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTable.php new file mode 100644 index 00000000..49571c57 --- /dev/null +++ b/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTable.php @@ -0,0 +1,49 @@ + 'Header column 1', + 'db_column_2' => 'Header column 2', + ]; + } + + /** + * @return \Propel\Runtime\ActiveQuery\ModelCriteria + */ + protected function getDownloadQuery(): ModelCriteria + { + return new ModelCriteria(); + } + + /** + * @return iterable + */ + protected function executeDownloadQuery(): iterable + { + return new ArrayObject([ + new ActiveRecord([ + 'db_column_1' => 'Row 1 column 1', + 'db_column_2' => 'Row 1 column 2', + ]), new ActiveRecord([ + 'db_column_1' => 'Row 2 column 1', + 'db_column_2' => 'Row 2 column 2', + ]), + ]); + } +} diff --git a/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTableWithOrderedHeadersAndFormatting.php b/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTableWithOrderedHeadersAndFormatting.php new file mode 100644 index 00000000..d5ebf628 --- /dev/null +++ b/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTableWithOrderedHeadersAndFormatting.php @@ -0,0 +1,63 @@ + 'Header column 1', + 'db_column_1' => 'Header column 2', + ]; + } + + /** + * @param \Propel\Runtime\ActiveRecord\ActiveRecordInterface $entity + * + * @return array + */ + protected function formatCsvRow(ActiveRecordInterface $entity): array + { + $dataArray = $entity->toArray(); + $dataArray['db_column_1'] = 'Formatted ' . $dataArray['db_column_1']; + + return $dataArray; + } + + /** + * @return \Propel\Runtime\ActiveQuery\ModelCriteria + */ + protected function getDownloadQuery(): ModelCriteria + { + return new ModelCriteria(); + } + + /** + * @return iterable + */ + protected function executeDownloadQuery(): iterable + { + return new ArrayObject([ + new ActiveRecord([ + 'db_column_1' => 'Row 1 column 1', + 'db_column_2' => 'Row 1 column 2', + ]), new ActiveRecord([ + 'db_column_1' => 'Row 2 column 1', + 'db_column_2' => 'Row 2 column 2', + ]), + ]); + } +} diff --git a/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTableWithoutGetDownloadQueryMethod.php b/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTableWithoutGetDownloadQueryMethod.php new file mode 100644 index 00000000..37a531f4 --- /dev/null +++ b/tests/SprykerTest/Zed/Gui/Communication/Fixture/DownloadTableWithoutGetDownloadQueryMethod.php @@ -0,0 +1,22 @@ + 'Header column 1', + 'db_column_2' => 'Header column 2', + ]; + } +} diff --git a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php index 535c05c2..45100372 100644 --- a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php +++ b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php @@ -8,9 +8,15 @@ namespace SprykerTest\Zed\Gui\Communication\Table; use Codeception\Test\Unit; +use Spryker\Zed\Gui\Communication\Exception\TableException; +use Spryker\Zed\Gui\Communication\Table\AbstractTable; use Spryker\Zed\Gui\Communication\Table\TableConfiguration; +use SprykerTest\Zed\Gui\Communication\Fixture\DownloadTable; +use SprykerTest\Zed\Gui\Communication\Fixture\DownloadTableWithOrderedHeadersAndFormatting; +use SprykerTest\Zed\Gui\Communication\Fixture\DownloadTableWithoutGetDownloadQueryMethod; use SprykerTest\Zed\Gui\Communication\Fixture\FooTable; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\StreamedResponse; /** * Auto-generated group annotations @@ -152,4 +158,95 @@ public function testGetOrdersWithDeprecatedIndexAndDirection(): void ]; $this->assertSame($expected, $result); } + + /** + * @return void + */ + public function testGetCSVHeadersThrowsExceptionWhenMethodNotImplemented(): void + { + // Assert + $this->expectException(TableException::class); + $this->expectExceptionMessage(sprintf( + 'You need to implement `%s::getCsvHeaders()` in your `%s`', + AbstractTable::class, + FooTable::class + )); + + // Act + $this->table->streamDownload(); + } + + /** + * @return void + */ + public function testGetDownloadQueryThrowsExceptionWhenNotImplemented(): void + { + // Arrange + $table = new DownloadTableWithoutGetDownloadQueryMethod(); + + // Assert + $this->expectException(TableException::class); + $this->expectExceptionMessage(sprintf( + 'You need to implement `%s::getDownloadQuery()` in your `%s`', + AbstractTable::class, + DownloadTableWithoutGetDownloadQueryMethod::class + )); + + // Act + $table->streamDownload()->send(); + } + + /** + * @return void + */ + public function testStreamDownloadReturnsStreamedResponseWithCSV(): void + { + // Arrange + $table = new DownloadTable(); + + // Act + $streamedResponse = $table->streamDownload(); + ob_start(); + $streamedResponse->send(); + $streamedResponseOutput = ob_get_contents(); + ob_end_clean(); + + // Assert + $this->assertInstanceOf(StreamedResponse::class, $streamedResponse); + + $expectedCsvStreamData = implode(PHP_EOL, [ + '"Header column 1","Header column 2"', + '"Row 1 column 1","Row 1 column 2"', + '"Row 2 column 1","Row 2 column 2"', + ]) . PHP_EOL; + + $this->assertSame($expectedCsvStreamData, $streamedResponseOutput); + } + + /** + * @return void + */ + public function testStreamDownloadReturnsStreamedResponseWithOrderedAndFormattedCSV(): void + { + // Arrange + $table = new DownloadTableWithOrderedHeadersAndFormatting(); + + // Act + $streamedResponse = $table->streamDownload(); + ob_start(); + $streamedResponse->send(); + $streamedResponseOutput = ob_get_contents(); + ob_end_clean(); + + // Assert + $this->assertInstanceOf(StreamedResponse::class, $streamedResponse); + + $expectedCsvStreamData = implode(PHP_EOL, [ + '"Header column 1","Header column 2"', + '"Row 1 column 2","Formatted Row 1 column 1"', + '"Row 2 column 2","Formatted Row 2 column 1"', + ]) . PHP_EOL; + + $this->assertSame($expectedCsvStreamData, $streamedResponseOutput); + } } From 54fda38768b7726bddeacf458aeb9d6da8578e7f Mon Sep 17 00:00:00 2001 From: mscherer Date: Wed, 7 Jul 2021 17:14:17 +0200 Subject: [PATCH 226/304] TE-9134 Remove codecept test file from export-ignore --- .gitattributes | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 27334278..03d7ba46 100644 --- a/.gitattributes +++ b/.gitattributes @@ -22,7 +22,6 @@ *.exe binary # Remove files for archives generated using `git archive` -codeception.yml export-ignore dependency.json export-ignore phpstan.json export-ignore phpstan.neon export-ignore From c3e7ed22647bb692540012a2a09dd546ee8063ec Mon Sep 17 00:00:00 2001 From: Alexander Zakharkin <24879203+az-joss@users.noreply.github.com> Date: Wed, 28 Jul 2021 18:07:53 +0300 Subject: [PATCH 227/304] BO-2587 restyled Backoffice. (#8507) BO-2587 Back Office Facelift --- assets/Inspinia/css/fonts.css | 32 - assets/Inspinia/css/style.css | 49 +- assets/Inspinia/fonts/Lato-Black.ttf | Bin 114588 -> 0 bytes assets/Inspinia/fonts/Lato-Bold.ttf | Bin 121788 -> 0 bytes assets/Inspinia/fonts/Lato-Light.ttf | Bin 122524 -> 0 bytes assets/Inspinia/fonts/Lato-Regular.ttf | Bin 120196 -> 0 bytes assets/Inspinia/fonts/OFL.txt | 93 - assets/Inspinia/inspinia.js | 2 +- assets/Zed/img/sort-arrow-down.svg | 1 + assets/Zed/img/sort-arrow-down@2x.png | Bin 0 -> 769 bytes assets/Zed/img/sort-arrow-up.svg | 37 + assets/Zed/img/sort-arrow-up@2x.png | Bin 0 -> 776 bytes assets/Zed/img/sort.svg | 36 + assets/Zed/img/sort@2x.png | Bin 0 -> 768 bytes assets/Zed/js/modules/libs/data-table.js | 12 +- assets/Zed/package-lock.json | 10 +- assets/Zed/package.json | 2 +- assets/Zed/sass/_custom.scss | 1659 ++++++++++++++++- assets/Zed/sass/_mixins.scss | 13 + assets/Zed/sass/_variables.scss | 53 +- assets/Zed/sass/main.scss | 6 +- .../Action/BackActionButtonTwigPlugin.php | 4 +- .../Action/CreateActionButtonTwigPlugin.php | 4 +- .../Action/EditActionButtonTwigPlugin.php | 2 +- .../Action/ViewActionButtonTwigPlugin.php | 2 +- .../Table/BackTableButtonTwigPlugin.php | 2 +- .../Table/EditTableButtonTwigPlugin.php | 2 +- .../Table/RemoveTableButtonTwigPlugin.php | 2 +- .../Gui/Communication/Table/AbstractTable.php | 6 +- .../Zed/Gui/Presentation/Layout/layout.twig | 1 + .../Zed/Gui/Presentation/Partials/ibox.twig | 2 +- .../Zed/Gui/Presentation/Partials/menu.twig | 1 - .../Presentation/Table/button-dropdown.twig | 2 +- .../Zed/Gui/Presentation/Tabs/tabs.twig | 4 +- 34 files changed, 1778 insertions(+), 261 deletions(-) delete mode 100644 assets/Inspinia/css/fonts.css delete mode 100755 assets/Inspinia/fonts/Lato-Black.ttf delete mode 100755 assets/Inspinia/fonts/Lato-Bold.ttf delete mode 100755 assets/Inspinia/fonts/Lato-Light.ttf delete mode 100755 assets/Inspinia/fonts/Lato-Regular.ttf delete mode 100755 assets/Inspinia/fonts/OFL.txt create mode 100644 assets/Zed/img/sort-arrow-down.svg create mode 100644 assets/Zed/img/sort-arrow-down@2x.png create mode 100644 assets/Zed/img/sort-arrow-up.svg create mode 100644 assets/Zed/img/sort-arrow-up@2x.png create mode 100644 assets/Zed/img/sort.svg create mode 100644 assets/Zed/img/sort@2x.png create mode 100644 assets/Zed/sass/_mixins.scss diff --git a/assets/Inspinia/css/fonts.css b/assets/Inspinia/css/fonts.css deleted file mode 100644 index 0fb3ec02..00000000 --- a/assets/Inspinia/css/fonts.css +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. - */ - -@font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 300; - src: local('Lato Light'), local('Lato-Light'), url(../fonts/Lato-Light.ttf) format('truetype'); -} - -@font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 400; - src: local('Lato'), local('Lato'), url(../fonts/Lato-Regular.ttf) format('truetype'); -} - -@font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 600; - src: local('Lato Bold'), local('Lato-Bold'), url(../fonts/Lato-Bold.ttf) format('truetype'); -} - -@font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 700; - src: local('Lato Black'), local('Lato-Black'), url(../fonts/Lato-Black.ttf) format('truetype'); -} diff --git a/assets/Inspinia/css/style.css b/assets/Inspinia/css/style.css index aacd03b4..51b1df04 100755 --- a/assets/Inspinia/css/style.css +++ b/assets/Inspinia/css/style.css @@ -46,13 +46,14 @@ h5 { .nav.navbar-right > li > a { color: #999c9e; } -.nav > li.active > a { - color: #ffffff; -} .navbar-default .nav > li > a:hover, .navbar-default .nav > li > a:focus { - background-color: #293846; - color: white; + background-color: #f8f8f8; + color: #676a6c; +} +.navbar-default .nav > li > a:hover .fa, +.navbar-default .nav > li > a:focus .fa { + color: #19aa8d; } .nav .open > a, .nav .open > a:hover, @@ -168,19 +169,20 @@ h5 { font-size: 12px; } .nav-header { - padding: 33px 25px; - background-color: #2f4050; - background-image: url('../img/patterns/header-profile.png'); + padding: 10px; } .pace-done .nav-header { transition: all 0.4s; } -ul.nav-second-level { - background: #293846; -} .nav > li.active { border-left: 4px solid #19aa8d; - background: #293846; + background: #f8f8f8; +} +.nav > li.active a { + color: #676a6c; +} +.nav > li.active .fa { + color: #19aa8d; } .nav.nav-second-level > li.active { border: none; @@ -272,7 +274,7 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { position: absolute; left: 70px; top: 0; - background-color: #2f4050; + background-color: #ffffff; padding: 10px 10px 10px 10px; font-size: 12px; } @@ -332,7 +334,7 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { } .navbar-fixed-top, .navbar-static-top { - background: #f3f3f4; + background: #f8f8f8; } .fixed-nav #wrapper { margin-top: 0; @@ -620,7 +622,7 @@ body.canvas-menu.mini-navbar nav.navbar-static-side { } } .btn { - border-radius: 3px; + border-radius: 10px; } .float-e-margins .btn { margin-bottom: 5px; @@ -651,8 +653,8 @@ body.canvas-menu.mini-navbar nav.navbar-static-side { color: #fff; } .btn-primary { - background-color: #1ab394; - border-color: #1ab394; + background-color: #1bbea0; + border-color: #1bbea0; color: #ffffff; } .btn-primary:hover, @@ -664,8 +666,9 @@ body.canvas-menu.mini-navbar nav.navbar-static-side { .btn-primary:active:hover, .btn-primary.active:hover, .btn-primary.active:focus { - background-color: #18a689; - border-color: #18a689; + background-color: #1bbea0; + border-color: #1bbea0; + box-shadow: 0 4px 18px 0 rgba(27, 190, 160, 0.4); color: #ffffff; } .btn-primary:active, @@ -3489,7 +3492,7 @@ body.tour-open .animated { } body { font-family: 'Lato', 'Helvetica Neue', Helvetica, Arial, sans-serif; - background-color: #2f4050; + background-color: #f8f8f8; font-size: 13px; color: #676a6c; overflow-x: hidden; @@ -4040,7 +4043,7 @@ table.table-mail tr td { /* BACKGROUNDS */ .gray-bg, .bg-muted { - background-color: #f3f3f4; + background-color: #f8f8f8; } .white-bg { background-color: #ffffff; @@ -7842,8 +7845,8 @@ body.skin-1 { } .skin-1 .navbar-default .nav > li > a:hover, .skin-1 .navbar-default .nav > li > a:focus { - background: #3a4459; - color: #fff; + background: #f8f8f8; + color: #676a6c; } .skin-1 .nav.nav-tabs > li.active > a { color: #555; diff --git a/assets/Inspinia/fonts/Lato-Black.ttf b/assets/Inspinia/fonts/Lato-Black.ttf deleted file mode 100755 index 6848db0d1acf36f95ee7dc0130eab9e6fb1d19a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114588 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 Fe*xhL&Wiv5 diff --git a/assets/Inspinia/fonts/Lato-Bold.ttf b/assets/Inspinia/fonts/Lato-Bold.ttf deleted file mode 100755 index 74343694e2b2114272f38b1124813b972cb592e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121788 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 diff --git a/assets/Inspinia/fonts/Lato-Light.ttf b/assets/Inspinia/fonts/Lato-Light.ttf deleted file mode 100755 index a958067a86f46b4b82b6b1ec43fa83f5875f3e43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122524 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

    _@=QvuA-{V9(`#&VJ0E2Y!*g z0Q?gBG4RXmMc|*XmvTR2udtVaf69IW{3?3|7~g<@&R)&E%6`Fq2K*ZPIq>W37r<|@ z*K$8)zhtii|BAf<{A>10;5XT?fZt-j&b`9kW^V%jhP?&+4tpE;x9m5-@3MDtKVk2& z-va-Ry$k$%_8##2?03K)0Kd#WWWNXg1A8C%kL&~BKd}#UFR_ob=H5ed`QosO}Dkis#4oTMwOlOejg8pgML>CZ;$Ctvv^C&5_ z=ptyN)(A?qQmfI>7*uMN4!@xy6=*<*L>DCwY7t#93Xqb<2?9`cf=bY$6AG;YUB)eR zs{*vv|N40@EASkQa1SrPU0f3;HAd!>H6Mg-(s0s!EC|29rz|>K8f+d4s&j9VHCrsnrTS`lnT^wOWirrPu0ktqQ$15VO%1 zBpIDhDbP1`j-&`ICQ5@l_#IVJRZuHE(S;EGOwB2j7{7vsuhHlwy5O8btJTq=)=AVM zNu}cqx=8Xxzd(LT$4Rb@dWkL?CH>_U5W1a{uM=rdP<%)V=mZX-BWi_#hyY2E^^AU(D^zL} zM%1sAkW!(6@If>5dc8`fg9$A_cyJi>20Anb{D_k}qK8^-r2b1orB56Z9nr8_2aVQh z6vRJ^k&GWnH2%;6RR;{&23@ExT8+*Eu4pj`iRe1mOEk-*nsGVZ0bpiZfi6Y}IMD@) znkS0XO(2yCbTNQ(1{iaVXfW!GFfs<688t&NpweV=G-#A&4I|x6T!fx!$Yu`EMIwoc z=mN57VQgT$2k9b8biwsXqrpgr)=1QmdQW5+qzg4LaDY5IjUGCu&?*gDt4T|Q%F~4^ zqXTpyqkpp>2e@uv173f@}koj4X_lDH_%09AYlkK(M7KZ zF?2?w651vjO*-&aXV6=-+N(}{5YN1as zL>M{A3=T7qfaFhUG@9tpnq<0=b;DtjtTFLFPZMcCXc(5sppoce)Y?Rv6m)u=gYr{l zIM79{33P!n>U3Iz9fZP3T2Z!*|GE(nGmG(hD#Gz!irMH(JV8v23(kYP|rBZrij zRayg(T2DPR5Lq-BKhXw<)ktmP7nNud>ClNp9ke0SL6od9jguO{p_ee4hGao{A-5)- z!$QVS(sTn{v;3ii&V!!#Mhtd>D|(CvQfa_+i~;KPOgC_`bPsd54WNr!V=$OSbW~%2 zg+NCk!jcpd^Nbpc$tZ$0X0r;CVl!I|7Ng!EnjH8I+HBCM&_}%<Q!dF%c|GvwWNbYD=>`?waQ?yfG#jnXu{;iv|zw^(5BH~(nw0nz~TJ0 zbiInXeMT%%YqTbl)q=@RXToHGFD6NpjV6@}WvyK_TdcUks)n>Xtu~CoXtIiKlSzcs zLZuBxy%Ba2Lp7*uWE(&cqrpnDrdFd$R06S3+ckQV#*W4yPDT-A(dsdNEe&53ofhdT z++efX=rGx=IB=5aWq@=Nrp{9XI7|`-|I7vpBv@rsTa7+D89$O}{Fz{C=+LN5Mi>>E z_b@QC4_v`mOlGqg-?Y+5nb9O&D&0Zzwl9b@3XGuH?66^e)0;sTd=W*ni2KYCY6!H` zVzD{QqTQ}BSWOG|{m@ zSVX#s_~x|32{c$>2GCKASQ2Kn8lQT%&1wg2oKCILCVHJNi_0on9JYYPVugBJ^cs`d zXco1i8N#7<(eNPrX6TuTCMQ%$BiD)=mk#`Kp)nXBvlV2~8ypV1UXl)*&n{hs8(dBo z9cGsU2l_(vFqvFNA_H-i8o+^0;xL&_R+HUmHK|3d(;Rl24WhwfHPW926p`qnwTLdz z6Z(iI9AUW97KhVfBcj{&(mqLh+;P%?Qc8ksB2-|FSsJGRqHCsfBSqJISm^EG+9?Y7>>=w@(6lg)0TKO4<7ICMIj#RIy)ETIW!5x8P=d29}+(`I!VX{c5P4$Ifl z^_ZU`aiWVJbn&<(y1+-m7rWhNr*48Sc9||7yUpX#!3qRDUc1*}vAG=)yWOEP=xj!v z*(zEsdW%(}3t0uD$zUbA(BuSCQ&ljWUcG43dnLN)tPY}!=ytmY=t63P>vdj_L>Idk zKf2LIfi6S`q6;;ELoz>BvsI>xRb$n8tnq*qbg?@``jaZ73PBeyQA-4%!NBf3B; z?KYQD8Yr{caG5mYNjI=~i493cgUR6tcr}=;9q=oS4v^B}BqnOLD42q7x7Y7<`2Bi| z+ZOc)o#3t0=Z-s_F1=Cj6!liS1?00q1gzR14No*1?N*-!#M0}XYH8$pt3GHjJB&dz zVle3KE}hO`GJ^sp8ot{d^^#GcsV3kL(%}sHaG(vD3_%M~mzYWo;BZLTYPY&=UW?17 zwd?)%;;`LpGn1y{&q0;Zp>sL{pbN}4hU6)Mv^so#huh=9HxUDLI+=aoV(AW6QsHDw zV*=kI0nBd}H_Rh3Q93+sozCrXn`1s-Fzj)M!bY3lkqAdUQJ>Qj@)dhLKBH*#SPXU- z)XL<*P#wCc3--Zc6XFnd0$(dlt`+@i~)*SqvZG(4-_>~TgR zbLfj#D^gW3oN>|a6XR$E(}*WvFo_m>BoeVm(h)2POIP8BqF9^`U!17pCy}8e?jY(C zH>m*}J_$QL&Y&~w@VoRLQ_NG9^w`~Yf51V1zWh{fGC{T>XE57nB2*1$(HDvNf}xPl z8^XwaJ}>il!4S;+H2GsPXO;CHm4rhv&?cS`T@i0- zA{9)9y@7amSTGnCtzy6~x_vI6*X;Ef3?4(08nQdB=nGhiz65nkNin^cSGYq$A)@LC#>F(2rQXC>jDqi9jS84fvxr>RXWc{J1dh0N|6= zHe*|e&SDRRisJ^0*%^Wvut9voB*USQ(TI}0G!{z~heN4iv!}>EtT-J`NB!YctR@_e zLYqSlvp3)g_$~f`(daX#sUe5U7VxG#UN>xJSZATC%szA4>JD4eW=F_sH3y<5(Q0=m z5(#@uIw})H9Fj>&!_<$Aqjf}-l#9(iTI5Hb8(=lJmB)X z!q7qdg=B+GT?nKhXRuQkSiIR{F@=)FAxLF77@o}ecd_tIY!b;(CG zR0g`hY-3cZQSf!67!RZp-<;HHgoPrwQjS097B;#whHX4fPcm6m28Y&{G&+s$`s@*Vtuv5x*4n*Er_)|kVzoIvfr^T94-G$^ZYd}6ARAj#RYOOjW*ClC zDghgWqc%t*Aa0@oI+7BO6h+dJ@?de)Tx72*>TDD$*1{%ha=@mB$RtCUQIT~^4qBhRi!e%*+?x`=$b1$lHE^5+iZ&0WZsdypshAwM2K zUOa?+cm#Ry81mn7pXyLlR?q|OOBmR!8^7+W4Eku6zGGtj_LVob~$jSW?nYRy+ zk9(X`ApiI?WYmyNW1n&=PK^xQcI4UUx6@xz{3(do^;lH(`YPkdZ|; z7Wv3uBk#8XIlY$#EO%AE{8g) z)-bz^Q*dt7+R9DiW^wbmZK(A}sPzrhY74u=eoQ!2Ys1%SwG63su~aLETDjckx%YD4 z&pnmmt$l9~2{-SqYedj0dy!_5f@4WENzrXYNJ4fCb|C^ux z=BICe@%E>0|LN^NzWv_Y@4Wrgj(q`d|9~_tF>2$TFQr znRZIg!yI>Y?@=yy*-_ROcpTP9m^ZidDC08W@R${CN4WX;!e?-zB!ZHV36DJ@#K%tS ziS>r}hWCzNyf-{HynMmpBZ|26i655i?JW-`q|rtwzZkg={;l6(@1YA(L4>?#bF;U zpXQEXT9FFhL*X1))(%+gFce9X{vKwB{jhcOVWUf=GuTYQ!Hn+1=9pD_w|S1<~JHXG;T3|WZG#uX8NNT6%U)2njf*$Tbr!6 zS>Lhw?W63s*q?GtaXjI8-?`NJrt5w8SkG+F+dke`>-&}8?ceMFU7#|sGO#c3?Z6vB zZ?G&lEp&1CmdL*7;n>qfE92KDY7Q9SxT@yw>nVqjmVM;Rl-* zH{I84Za&cbM9W<*AC9n&m@?wxk&Pp-Z=Ep8J$mKnzm3ke>Drua(YCU-#Dc zn9r~w%P`hGwrFg{*ru^hjD2qG&&R$q_M@?1jZ=)PZeQMhPW#UGE87pW9~!Ue7}+tQ zqo-qW$NG-*I`&MsW8!NQ-<|lEi6Rz;W(Xl0|C66pUuD7GI1s%Ap^I2;%OE{X!BT3py5mCA4~h0;-0Yd*@F-z4!L({q$nm-`;aZTgnp z{E1pRQOlGqy~m&*!=wt8P>pc@=Eqq*<37WU=Evd5aGzBS<64BO${_Esn-n4!OD0+r zHPvN&ENTKIZPm3^l}?9U6^kagh$T`7;8c#Prg0^;bH*ei!y2pNyslNnhldTXjQYz* z#L7mM`LJMnZYC1WWWte5_D12JQ*&ZM->G{QYwcJv3=N-NT{n4nX)5X2xFb|vQc^Rz zyr@3ua0OiYQ_qCU%EAD}9VfOIDMyf2@!0+I33n%GWrW9e_i;FJ0-QTV`WW0i6LVXv z4M&-w{Bh{CfPtxA0hHqm=%hwjU0$FSBhnzQ8=zHyP6UWnN15%-Rv#Ql8=OQNm|_D{ zY;fpoaN2BeoNRENY;eKL_-**iF1TRwmR~ zgz6SPPg@W(!JUK6D?%%PA7=7I?6#-}{&duqtWoanf2MTG^x5_Gv!_of<(p3YsPLOT z;xW~L29FB&@x`El4xa49qs)mBx&Tg$Qj1Y)rSU5;eizOd-h3R6l;X30I&wXY99vOa zda1u^6NlcFbC$?pkyC4VEMl5@Ew{N)Qtr;ac{3LJEH`sSgC&_qcn(6*g#Oh+s%|Z` z8>MEVLnxl06Nw=wI6A?}ERY1+NGFVR;y6q*`TwK{L6kg_1Tzdzg8|d0h|fxVy6_pq zXHot$gHI2>SKyO=ugiaLcm<;sFw~mrI$K0AacRy*-9hR{UChDq9CgR+mqZ^sar$ma?iaud1TLl_dI6Tu-T@>(M)iNv8n3qxEWX7Lca zQJ}4|j7!$RUIY~`8^j;NKY}BAs)L+M4GU7nCxxIAhK3h8B0dK@lN4G6&K~4lHj}^y zcRtnbGnlo$MD>`S`f%GtOIoUz?3<_ML{pJ|$$=40o!O8aF{d?9K5u46U8r%*olEtc zXe{FHsO(zP6q<7Wj7a|t(~1Xkf(Nmy2l1%~dyYMbB0Y#4J%~p=h!8!H77t=K5B7U{5CeJ;MS7Td z&VNNE8(PJG*%S3fn(`h;bchi|V4=HUp}Ro*E?DR;NHrdN04xJ+1?&dw2iy;M4Dc-A zb-)LJF9A}g)hM_CNkAQ79AGA38DJ}5H()>De!ydZX92GRJ^*|PFjJ@1D7XMgKpkKl zU?yN0K)n&f-h#p|0KXAd2Qp9cPdY&pf;vCLIw1K~l`XuaCLD~-e{>=Ljf!cjn_AXP zDJz?@rln=|)ba_j=BcHnQ<`G2rYWVRQ=4P_5|za?`jp1#Y*YNIV(MvEmraN@;p(Y$ zwfw25nt54IX=%@8GkbRRmX`MJ>Y2E9TqH7X?Zk;|#zrDz*KpTpbSJK`a#PN@ZXI2> zj;;%b$F6~eUYYw?*#+Gg3AcJ~!NQy-uks`-?V<(Y7zoEeI0nKo5RQTR4Af_!J_Gd` zsLw!s#P0GW%P`5pA)rYXM08bafu`h&JClt_15qvz00UE3F>I$%;8N7$0oaaxTi{MG`zu3$B%B|N_wp>@ukw$ z7hE&B^ZHHWs%M?oK5ksq+)J{T51+fKe(d>c`V!e1m2%Xoj+AnL*`#Il*ra68d)t~y z;-hERO}nW(+unZLc%wM?*}m+X8q@RDJtK-L7hE-~{gO4^zA5{=$8PPZJo(Fs8z&~h z4U@{bA1GD+N%Pi1e=+BCY9-D2!Q=RBG3vk>y*l^|$pYS|k@>*>k(^K9j%{G%pU9Hp@?B*xDPl#TN z)gwOXc}lb!v61(pUs${r(X3sQS&Kcwf=;uxbS-kq*f8)+Vg&3td>!t_qbvohPz+#iq716&ARs#Wj_KJhd7e6yf+&4$?1K@P zl7v7h3xVvH@Sn8`SagPivH=Ax756V(_&y+3`~o`Wr)FLh{0uuk>3&ef2u?z@_d1sBs!_6 zAo&$MNqZRw&%)Zm!L{J5U-vB(Bc|+qe8q~RdnZrcdvwK$$M;TIJZjyI)28iPKWfza zebc7hxNa2x%(3jpkIbC;2xmTaj5AXy`|+^{KfATP{npPO{MM(pjvIIDrw|Fq`WKLG zlkzI8c#S^}+b!S}84S`A1>`|75N!{Jn2-=!su)xRioz*oFyaOitV=v%sjlNNm*Yvw zDzY?O4L3%}KBqHTv;pqs4z8v@*`YWun#lf1Ye;b`PCVHm_2nY;#R~bXWWOQ1CXgSF zzK~t39`L9K=gE9OY$Ss=lEKHZd_esm0hahol9;EkR-!OCuR*~LNCD~r?SLM@a=4*>VZc$qbAUGh9|FDtNSxQ8;0B}s^?-Ij4`4Z98( zktRTRI8~8KXMl^)oP(vC!di{w3dNEw0zYf&4eLh@>sr^G9TOfC;}@B2r`G8;+YTe3~qX(iT2^)3zfhvtpv>=-j? zQ%6zp_$5s-PSbbw!YVNPqTI&{CurWz-6+!>^C;%f63nMcDb_5(N(AHrWbOFpJg^cE zti*%k2!(jWGsHM6_z*AXTO9fphrY$3Z*k~b9QqcAzQv($ap+qd`WA=2#i4I;=vy56 z7KgsYp>OemzMXv~d3}o)^bG|>A|xq|)I*XKET73X3kBI`HG;{FU~(gv+z2K&g2|0w zawC}B2qrgz$&FxgBbeL>CO3k~jbL&kB&D$+DQ92FX_6A;NMNL(n__Zj2#=GK=PLSv0bTFIb+qGOGeGw-B(&X|MpF@ zubf*^*|olT^!n~blO~{63^R6+AeGMA)iY*YSA!UM?DCm6u5NB!e$hy?QfIPTYZ@9# z{Y`T=)wZsmT0Vv^owT~Ob8UMx)xM;qAX<mdnUoImoYxz&}fKy7+0kxt%?YJ zoM1G4*xkQGGz(h(*%{ru(0@BWmwUHbZ_KXbZZhi2g$KWHN!U-l0-e~G`&jr$xf@da zXW1qeNxe3rkzoTmP(~dp8xqJ5)d3B9SS;OC1_^^}1N9+o2o^m-2tgY{(1sASAp~s*K^sEQhEPEp&c2eoHiQb=fPyspsA3U8ns#XU zcu?5n7)v%yDs>WTZ9nn_vTVlaZFOr8Z)lu!*&~aGubew6=*PCrVG~!3op$w#;iY|7 z%x&1&-m;EAPdV4_%cd;ihz+;RUjOiUqa3j^cTx-%1#1@HFlWNfzACHT#&4qeh{uz~ zA1hp-y&ra@iBdKq92@fFMadqKlP;I!d7*NEA3EZPPIg5cZw{JRIbehoz$>CavIQ~u z(D9gf{+zyB){Pi*?t{w~9ojsyYd&|eCEAsp6{>a&KbZaLuvr&R?cTefx@ykONj+E0 zuM{RVt+{pn{DWIYjokLFHPe53F|Tp;|FXC});uOVXY#HEwYBpunK<>5zG2M^&Vwvn z3>_%Pcq}j_`3XxyJ=MrPWzGp8t5EBm)Dx>w(D|%76J8ki3 zPnzip!aT{o5hV4#bVQMnF_!uS^%$lGU$iQM!1Qg7dFbP3=rw&kS=qjLH z_G0Z2NjvJYLnQ4GNjpT+4w1A&B<&DMJ4DhBk+ef3?GQb8|To0@j6Y^$EPYwFaklj0>)H+Ob!nOYK`wAEa@^x9dIcFbxLtu5UvnmR9C zSYN;J($1z8-7QwJY1WQOv#woQJE3&?IpgM>*AWVJoHu9OInzt|7lut=+0eXVQYJHL zMRUW->4*q^NHv-B+<|N9x@hM7__2)~pAUD)MaS?Z2GIw<{Wp((j17&rf ztPYgbfwDSKRtL)JKv^9qs{>_qpsWs*)fFhK17&sc`pA&QCfRYI#U(_iCTZ1GUNDix zns1(Y!>Xpy+wNUB_x24VT%{w6vsa1HZth^P%F%c)7p?3IJ@uGjjba$-?O-G@!}Ot{qMN=_L9!n$g$iF6QQ4#v(E3FbpFh;#<`n`HrF9O z>JXlVOvl)zgAo!NV= zLfh$)7L8TNkF}H?{6}N8B4VQPx-o9I6g?efVU)wt`N!cs4CZa}tHE%S3YP6COXFUL zEGG_-#{oHUKu#Qx6TGPgune#jup6)+a6jNNz_WmS9O;0ZI3zi-oj&wJy6=o|`fD^% z{^RIcSa}*b`mO&g+UD3@oL0D6QG>a@^cX~hVr^RXfw)LsBrQCcKo$D5(kc`u8Fs|p zvh`D`vDzoCqTI#*#US>-9!Zu2`C`$~Z{;85E^5V7GT9F;cw{B}0Uohwm0rNa?&IDS zek&}2B~-Jz!3dwEkYX1p($9ZtherJ5=<>9nk&pc;M7d8Ge(Hw=e5QlDM2<&JVoZN1 zjLD2H)0ouw#99n;lvF>3JZ5}KW5UBjxCCR8eEC|e93?qebIx(nVB$+cDSOn?|C*Qo z3#V<>Td*CYNx^x<%0m?fMovUQkLt;?)XSEoOqQ53 zNK6?drVJ8O28k(y#FRl|${;aikeD(^Oc^Am3=&fYi76{cOc^AmOqQ6_)5Ta+Jw0E1 z+PXx<*EV&2{n+#7)Rnh)jj!Sjt;&jV)5lemw9l;?wO~|2Evg?rUB8qDUuDu&GHJuu z32Ud1sH=}2`lhnDrLn1V;po~K!$Yxj%y4qWX;KCvf)=ZDR=ky<3cKzWknfnr>eEQj z;y50B^OGxymg#XB(N(Ka&&+fi-^}1V3VA#8G}+ny3CIf%sOtEj1uwxIOLUs zQ%{l*$I`PDeCJp7oi1b)3k&-Bu#AIWWOXX4Dr?CH4{<6*ELxPHV7<1eFx$m3t<~Ae z5XRFYc92(G)6>h>Up1|MTCK13{O_JqGbi3>&^zN5-iGB<$`{=K_W758{`i^=-{*wu z_kF$?596uC_1RAk-J5;)=R3B%$eC~5^~IAL8kg+pKUp+!T#I9hyDB>ChGh-*)bJZ&>caY_b$2Y>_ty38E1$~#{q~2mpMGafTdUF(@0haU zc`p9M{aoUerF;Jz~{#u2!uczvYI`)R@Wu(H;+bDNZUWKko$5^InUA zq|Y$K-yP~gNDBgk9@ueIA-m`m!y>e#FUZ+hyhAF&K`Y>fDNar{S(W$qkH1f0H%;P4 zFU?-d@5ufJI}PwpG;p_Om*DZc-KWmwe{4y+-D#{J;|(TEu><|G!v!v3mmf#>0RZ{-#pf2wN!mA%>9xT=L$^pwoa> z>qoEZOm$XHTV8h!UJA(JO+FthMc9f;ZqsoZ512J*De|Gn;8=#boD_#dC=Q{RH&Tds zQP|i@t0NIOsu7r=2uw``F>eIw5kbrwLChOL%o{<>8$rw)fnY=s^F|Q!MiBEx5c5U~ zG4I(|LhE!I^e|nBl+w`iG)!C?CN2#VmxhT;!^EXw;?gj2X_&Y)Ok5f!E)5fxMx>NR zq?AUalrBU{XJ1J^Qc4#hB@_@T#i9FBE^2V0j+ay7FbJ~ROIfKFPVt&foysgf_lBMu zK7VN8lE-qlOx(F{VR=Yn(fZTPU2Df)^u}#7yAS+i`-H8FyYXVbzo^sYoi%}FPjZGs zcXPV$t#GABmXsPCp?JvAd+(pFzv-iUX4+GYNd;aqNxBN1P;Q4#7_k1i+q2m zf;C+)W$O*XAWgg99^i~z3^!E#69~yysPVE zsOzo|NsdXUqv*e$&5&0JDDO^M3SVKsgFIu+PfNx~OH<)-nEt|Q01Xmr1BkV?D5>S% zBF{m&4gy8A-^H))-^c&q)Dh+G8U4>p?|)- zP)?xi!eA?gaMVx4@ei@oLsupYpcc)1@_Ga$NL~&9&!=!-2iZOVd}hM#>Uc`XAY zXax>09fFo2guuWgJ3y8yuYp=B$d)P%OO=MDO2bm6VX4xvRB2eMG%QsbmMRTPm4>Av z2PzFqm4>BC!&0STsq&UVgMu570@MTA0X=}_fNg+1fCGTTfTMut0B-<31kmc7G}qHw zQ!_Tx4H^X58ITOZKsGzb3zg%yEt^xG{a7z@yK6RHd{ghu{oh%<_$a5oXX@o!mX`ap zW;_Yru;BXTd*8l&M)$4194!XZKJI*zwmz$kHzpmDQ8>iupIqilk0{QF3RR{e(R1jd z8*ci`y*;unDV>roT|_(RAV&ZOS(10s(GEH}Bl|dcPLM7&B#69N?SQ7KNOn|1WG6qV z51NO;X)*5@DCibEutB;=Z`0)=T{P`u_gTz>snJrUbS^u!ciA#w%Q8%5v#>XAHNTH^ z4x+=&MSlfWPWfv&_fW7)JXOmN>B(TjQtegT++|QEs;4*iF@Fq2FMCO@$30{&%;zZw z2QX;gC~c6J|Ns0x!Pjx~2Y@dDdHFy4O7ik=E66_z1G`KTNof}ZxtG#h`h?$Tx48(Y77-UyRu^5gvjc&kChqWw#She@081PH^sbuP#5 zy+z02J_&GX$OweMeY_J8)= zlRnV~MiIYzVYocf87Iy-2UfN7)7D^rd_+Cp5Q68kZ0KN~zJqCY%qC73L_wk|REtt< zX)c=NoDNd7N(9it4pFZ%YWR%CY#KL9=>M6?Yxao!&j`I^O%@G5oV(2*Hit~Y>qgay z?TYVu1E*qMukd!jcd|pdTV*_zf~d&jm+Xj*9ilaPtWN;!7&EQaTaXVjOJfu8jdqo2 zVPRC#8H&0UxR!Px7*Hk~MA0!t$;JUHoH3i9;ewpuzYfm#d9s*^aAp!akcEbxsDZ7) z2Io9AIEBfq74`|UkP<(&T1>iSlX8zyF&P zhr{&$ZBAVIH2I!4e)Y(rMUQ-S9?YT3mpzsJ z{GNRu9hy1w&`0}j{L`WC?n8ef`RB=2DyBm^3SJj3Q*)XEykba-Bi`Ya1F_F3v8E6l9K7NcA;ztx@uZ;fd zfG8ZQC>*LN9I7ZBswf<)C>*LN9I7ZBswf<)D2Nn=LluQX6@^0;g;y3W#E)lR3B`{l z^e|JH*)w2b2BXU$e#{_#%piWuAb!jse#{_#%piWuAb!jse#{_#%piWuU}n!?X3rF6 z_Oq`fKeJ~FGdl|TnO!YUiPDnOU>JGkeh=l-=_#Aqx%J)lup#^Eh$|=k2V%bJ$vZD7 z&2G_~xUpXUe<1F%tUnD|cY*lVB1;50q4R=-L5 zhwc{o7t)`%;)9t1dJ1HyI?w{eY3e}h!?Fv3XIdmbs2Xc3q!}wd|6BcveRJG4?t@;l zOP?KXNftl;#oQa0)&A(oY(KxVf2VTylaEc^wWL)idirm}Qf!OUI-#^{OUM4}NnbeZ z0smNd3i{H_-F=j`VDuvZ4roh8(iWKx_yrWG!8mK6E%JO%(V4u~U(onQQk2Fa8t?l84H~GSIcjK*8k(bq=BS}LYG{rcnxls1sG&J(G^U2; zsG&J(XpS11qb_L9*;hiELyimnCkr_yOhPD<(qA3$IKWK6GQd{AZoq!P{eZ^+&jMZt zd;s_okoSqtzLLD=Bnz5@0%?x)+(CYkMI~pc6ZxkUWU(ky$-A<#etUt|Vk{oJV&cTj zlZ%@dU%2bS#m&v<9A16p3lsc!D#4$s@0j1*b!lHk{u1qr^na_ebF<#p1gXaR`N8RF@L?U7t!m6zaspsaVwJ z-nAL@R_?b-n`uh_(LUvF(QtBQS#@njag*MBV!JFW7Q6`R5ZX>c$^Ti~`B`_c?fe67 zgC_=~uY4W(2eKr;7`>yM+Ca=eZt{??Tnu~WvGE{gnGw)%OXx+`IyHAKmgD_2h-=mK z4p|kqL~xiUWk=7>&c%CGHQ6~BkMHDWdzr^mW>;K+x9=G6E#q;QO5YGxyy*7%+$XC+ zUyM<4JI3gT@yPe@j8*nC=sW1y=Wof!NYaqB2rMy*LKLKxr-c0O3ErG_FEJUF+_&)# zZ0=6HNOED;#q}>SnU&d53SG8CZ8gl{U*jJ(X!`eQL=8VdW9;whk0Ua=QZ)5nr!}L` z9`yMp^x4ijXp1nm?m&m-S&zf4R~W|`k>we>H0bKd^O)T8A@t|3Sl0h}FXA%pMw4Bm zv75MkDywN0-`;75a`SrmVmA(fs$T z%*G-bL+&f=TmGT4uy2{3X`+lNp2?G^cTI6p5VgErsdxjV2( zu%G(qrM5Qdx^Bhg++O%6TIQ#x8}Jf>ffbIyp1~T?ra+9moO=YX;<~-oVA1?ix!+{{ zi&{tj(-n{ZW8!0BH0FaOtK*(N%IYy|GyoEqIVfsDAcAoTI8%?&%Q5@ol!eAGKKw$n zj19k(eto@2I}qRGyCctOv`Kg{@pK%t<&blxfG2|KjshOZ5potBArxds$O%Wt2}j5Y zN5~0B$O#+igd^mHBjki5X$AX5vgtWUzi%1aRplzw2fFjr9!cM?~SR7 zlr=DEO4YpG)BCs8cuHG}I6)C>nqE^mzMLMk!Jetyr^271+jbTs`Jy-?4xq?^L4Fwg z5qVXNJnA^kY7tLR23ITT97WUe3X`0`iJa-X{0m7N8lqB;3;SVY`NIF&COg_F$nxcY zd^x}w2jt5E`Eo$M9FQ*uq zhkW@VUw+6J&6R%0mml)whkW@VUw+7!AM)jgeEA_?e#n;}^5uto`3v%O_Lb!23%eua zRruPS&~BuVmO1Qu_xBb|$?)Rv&MxC?oEaQ>)ouX*gHhIMzZSbkHjO2BI}7Tq`lBc$Bd}2>$OO0eBW`gGj@;2h=ppCF$4#FIanMRJb z$u8KKRk90YKje2JP|^|$P_LY6AM)BiC@p8qL_-}T$u5%tv?ncJNw$H~o_Vdr)L#&8KZM&4;r2tg{Sa;o|vXtQ@iIY=Usd&d<(;acI1vM=}oH+h?uJN~WQ+ou71K z>d2*iym7|Z0o%aif8hF5xC^!+jy24C2G=l^@V;o(G6EThU_Qaqd61bjzNInK&?W_1 zvnkk+ybugZMLsnS|KvC>2j!>Q%8iK)RI@fk)bTB6F$qUxiFFm}iwRzM1t0wN~t<&sRGVnlV%7(Vk2)Dpl4aLD>)0-mP=nvQMjuq85311z)#!t2^g%WHAQyd5 zjXtPGA5^0cs?k?ajkB*rRt={M&y9;%e392HvHuZTl3%=}*BQ`OVd7i<1Mg8$;B5v4 zP2!{-gk=LWHTTEXb(x%hzdu+#=i zJ~6Mhee?7(uX|J|UFJ}!t)){(w`}aGNspgjJ9%TsGP1!@R+=&w@9Asb+*Nk+`SOM^ z{`&{5m>f1dmg%euM_ao2viK;x_h`&%1kO@mcCQy)Nf}X{(Kqf4Z z2@7Px0-3n22LOiw zM*+_P-T-_EAekt5*Fm0=_Y}LqvpzU)%)@J^oj5hqEt=J0%vx+Wmsh{= zp9)BilgZX8$a8^tmy7PO)f&cY*yT@Ac<)p|c#oTD4beHgRysnT5r_}tb1!GFk;Y8# z>ACed?O=orBCBJ?r(GH|t#{K-r^1+H6hXv>6xln z_>YLf(KAZIVdzwlO`|CbuQ`w`B28I?dwTL)Ck8cVa5rE+(i-X%(GnExqb9D=E_Zod z`?M`Qc+nF?mNS%@JR)}u{!^N+?0B73Z+05Em!_MX`s`ebKUg|n`OvA$H6nMe-jtoE zv#2yqV;29D2luoUpXf8$gr|T4D1()QYpn(D4a%b|L68{bLno$6x61ZJ`E4n7#J*AZ ze5jD-g&0Z{MaplLlV35G0X^iMDfHA0UhOH(Jw{wd&&bJn{j!1iCg1KLz4CjY22bP( zIC$a=Ta?eA4=#h{MNv9I`>z89;}j?uClqAk6o8Hepko2(SO7W}fQ|*AV*%(`06G?c zjs>7&0T3zx9Sgv&1YlPJFiwGjaXR}-D0WR@X%hwt!5}>wf=x%jgN6$J{ScE??Nw+4 zqdI4luesP|ZS7iA-LYkQX8r}6tLKeR&pT(`)V;OBd!B2H+lKir+|V*>cwpH4D`$~8 zyZ+`x=lTvRU3bfZ?tZ**Ge1Xwr&tOGS1?Buc3l+a2$wWR4CN*Mj|Xs&R*p=VG4K?? zfcBrk$NW;{zhK+YB_!H|F6|DaAS}NxPfG=vOEz%H1}@paB^$V81D9;zk_}w4flD@U z$p$Xjz$F{FWCNFM;F1ko%I_D{px_3i0QG=&Ko4L!U>jf$-~iw-;3(iZz#D)M0r@F} zIE2-hLEg|LLL6!P&bq;Q1Pr*Td&NJPM<^D57xbpRPuC5;4}@YYdLKw(HycG&^12

    ask~-O`^ssB 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 diff --git a/assets/Inspinia/fonts/Lato-Regular.ttf b/assets/Inspinia/fonts/Lato-Regular.ttf deleted file mode 100755 index 04ea8efb1367727b081dea87e63818be0a4d02f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120196 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

    '; + + if (isSearchable === true) { + tableBody.append(searchRow); + + tableBody + .find('input') + .off('keyup change click') + .on('keyup', function (e) { + var self = this; + + clearTimeout(timeoutId); + timeoutId = setTimeout(function () { + api.settings()[0].jqXHR.abort(); + api.columns(parseInt(self.getAttribute('data-column-index'))) + .search(self.value, false, false) + .draw(); + }, 1000); + }); + } }); /* Draw data tables without search */ diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 9de3cf28..bcdfe722 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -226,6 +226,36 @@ abstract class AbstractTable */ protected $twig; + /** + * @var string + */ + protected const SEARCH_PATTERN_FOR_STRICT_SEARCH_MYSQL = '%s%s = BINARY %s'; + + /** + * @var string + */ + protected const SEARCH_PATTERN_FOR_STRICT_SEARCH_POSTGRESQL = '%s%s = %s'; + + /** + * @var string + */ + protected const SEARCH_PATTERN_FOR_FUZZY_SEARCH = 'LOWER(%s%s) LIKE %s'; + + /** + * @var string + */ + protected const SEARCH = 'search'; + + /** + * @var string + */ + protected const VALUE = 'value'; + + /** + * @var string + */ + protected const COLUMNS = 'columns'; + /** * @param \Spryker\Zed\Gui\Communication\Table\TableConfiguration $config * @@ -910,6 +940,7 @@ public function prepareConfig() 'footer' => $this->config->getFooter(), 'order' => $this->getOrders($this->config), 'searchable' => $this->config->getSearchable(), + 'searchableColumns' => $this->config->getSearchableColumns(), 'sortable' => $this->config->getSortable(), 'pageLength' => $this->config->getPageLength(), 'processing' => $this->config->isProcessing(), @@ -999,27 +1030,14 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r $searchTerm = $this->getSearchTerm(); $searchValue = $searchTerm[static::PARAMETER_VALUE] ?? ''; - if (mb_strlen($searchValue) > 0) { + if (mb_strlen($searchValue) > 0 || $this->isStrictSearch($query, $config) === true) { $query->setIdentifierQuoting(true); - $conditions = []; - $connection = Propel::getConnection(); - $driverName = $connection->getAttribute(PDO::ATTR_DRIVER_NAME); - $filter = $driverName === static::DRIVER_NAME_PGSQL ? '::TEXT' : ''; - $conditionParameter = $connection->quote('%' . mb_strtolower($searchValue) . '%'); - - foreach ($config->getSearchable() as $value) { - $condition = sprintf( - 'LOWER(%s%s) LIKE %s', - $value, - $filter, - $conditionParameter, - ); - - $conditions[] = $condition; - } + $conditions = $this->resolveConditions($query, $config, $searchValue); - $query = $this->applyConditions($query, $config, $conditions); + if ($conditions !== []) { + $query = $this->applyConditions($query, $config, $conditions); + } $this->filtered = $query->count(); } @@ -1041,6 +1059,105 @@ protected function runQuery(ModelCriteria $query, TableConfiguration $config, $r return $data->toArray(null, false, TableMap::TYPE_COLNAME); } + /** + * @param \Propel\Runtime\ActiveQuery\ModelCriteria $query + * @param \Spryker\Zed\Gui\Communication\Table\TableConfiguration $config + * + * @return array + */ + protected function getStrictConditionParameters(ModelCriteria $query, TableConfiguration $config): array + { + $conditionParameters = []; + $searchTerms = $this->getSearchColumns(); + + foreach ($this->getColumnsList($query, $config) as $index => $colName) { + if ($searchTerms[$index][static::SEARCH][static::VALUE] !== '') { + $conditionParameters[$config->getSearchableColumns()[$colName]] = $searchTerms[$index][static::SEARCH][static::VALUE]; + } + } + + return $conditionParameters; + } + + /** + * @param \Propel\Runtime\ActiveQuery\ModelCriteria $query + * @param \Spryker\Zed\Gui\Communication\Table\TableConfiguration $config + * + * @return bool + */ + protected function isStrictSearch(ModelCriteria $query, TableConfiguration $config): bool + { + $searchTerms = $this->getSearchColumns(); + + foreach ($this->getColumnsList($query, $config) as $index => $colName) { + if (isset($searchTerms[$index]) && $searchTerms[$index][static::SEARCH][static::VALUE] !== '') { + return true; + } + } + + return false; + } + + /** + * @return array + */ + protected function getSearchColumns(): array + { + return (array)$this->request->query->get(static::COLUMNS); + } + + /** + * @param \Propel\Runtime\ActiveQuery\ModelCriteria $query + * @param \Spryker\Zed\Gui\Communication\Table\TableConfiguration $config + * @param string $searchValue + * + * @return array + */ + protected function resolveConditions( + ModelCriteria $query, + TableConfiguration $config, + string $searchValue + ): array { + $conditions = []; + $connection = Propel::getConnection(); + $driverName = $connection->getAttribute(PDO::ATTR_DRIVER_NAME); + $filter = $driverName === static::DRIVER_NAME_PGSQL ? '::TEXT' : ''; + $searchPattern = $this->getSearchPattern($config, $driverName, $query); + + if ($this->isStrictSearch($query, $config) === true) { + $strictConditionParameters = $this->getStrictConditionParameters($query, $config); + foreach ($strictConditionParameters as $value => $conditionParameter) { + $conditions[] = $this->buildCondition($searchPattern, $value, $filter, $connection->quote($conditionParameter)); + } + + return $conditions; + } + + $conditionParameter = $connection->quote('%' . mb_strtolower($searchValue) . '%'); + foreach ($config->getSearchable() as $value) { + $conditions[] = $this->buildCondition($searchPattern, $value, $filter, $conditionParameter); + } + + return $conditions; + } + + /** + * @param string $searchPattern + * @param string $value + * @param string $filter + * @param string $conditionParameter + * + * @return string + */ + protected function buildCondition( + string $searchPattern, + string $value, + string $filter, + string $conditionParameter + ): string { + return sprintf($searchPattern, $value, $filter, $conditionParameter); + } + /** * @param \Propel\Runtime\ActiveQuery\ModelCriteria $query * @@ -1061,7 +1178,7 @@ protected function countTotal(ModelCriteria $query): int protected function applyConditions(ModelCriteria $query, TableConfiguration $config, array $conditions): ModelCriteria { $gluedCondition = implode( - sprintf(' %s ', Criteria::LOGICAL_OR), + sprintf(' %s ', $this->isStrictSearch($query, $config) === true ? Criteria::LOGICAL_AND : Criteria::LOGICAL_OR), $conditions, ); @@ -1695,4 +1812,34 @@ protected function generateFormField(string $formClassName, string $fieldName, a return $this->twig->render('form-field.twig', $options); } + + /** + * @param \Spryker\Zed\Gui\Communication\Table\TableConfiguration $config + * @param string $driverName + * @param \Propel\Runtime\ActiveQuery\ModelCriteria $query + * + * @return string + */ + protected function getSearchPattern(TableConfiguration $config, string $driverName, ModelCriteria $query): string + { + if ($this->isStrictSearch($query, $config) === true) { + return $this->getStrictSearchPatternByDriverName($driverName); + } + + return static::SEARCH_PATTERN_FOR_FUZZY_SEARCH; + } + + /** + * @param string $driverName + * + * @return string + */ + protected function getStrictSearchPatternByDriverName(string $driverName): string + { + if ($driverName === static::DRIVER_NAME_PGSQL) { + return static::SEARCH_PATTERN_FOR_STRICT_SEARCH_POSTGRESQL; + } + + return static::SEARCH_PATTERN_FOR_STRICT_SEARCH_MYSQL; + } } diff --git a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php index 9d154e70..c3e18849 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php +++ b/src/Spryker/Zed/Gui/Communication/Table/TableConfiguration.php @@ -51,6 +51,11 @@ class TableConfiguration */ protected $searchableFields; + /** + * @var array + */ + protected $searchableColumns = []; + /** * @var array */ @@ -470,4 +475,22 @@ public function setOrdering(bool $ordering) { $this->ordering = $ordering; } + + /** + * @return array + */ + public function getSearchableColumns(): array + { + return $this->searchableColumns; + } + + /** + * @param array $searchableColumns + * + * @return void + */ + public function setSearchableColumns(array $searchableColumns): void + { + $this->searchableColumns = $searchableColumns; + } } diff --git a/src/Spryker/Zed/Gui/Presentation/Table/table-data-columns.twig b/src/Spryker/Zed/Gui/Presentation/Table/table-data-columns.twig index 1976e07d..24e8f5e4 100644 --- a/src/Spryker/Zed/Gui/Presentation/Table/table-data-columns.twig +++ b/src/Spryker/Zed/Gui/Presentation/Table/table-data-columns.twig @@ -3,6 +3,10 @@ data-columns='[ { "className": "column-{{ id }}" {% if id in config.sortable %}, "orderable": true{% endif %} + {% if config.searchableColumns is defined %} + {% if id in config.searchableColumns|keys %}, "searchable": true{% else %}, "searchable": false{% endif %} + {% endif %} + } {% if not loop.last %},{% endif %} {% endfor %}]' diff --git a/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecord.php b/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecord.php index c89c35e0..441a7443 100644 --- a/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecord.php +++ b/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecord.php @@ -16,6 +16,11 @@ class ActiveRecord implements ActiveRecordInterface */ protected $data = []; + /** + * @var string + */ + public const TABLE_MAP = '\\SprykerTest\\Zed\\Gui\\Communication\\Fixture\\ActiveRecordTableMap'; + /** * @param array $data */ diff --git a/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecordTableMap.php b/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecordTableMap.php new file mode 100644 index 00000000..1b22ccb0 --- /dev/null +++ b/tests/SprykerTest/Zed/Gui/Communication/Fixture/ActiveRecordTableMap.php @@ -0,0 +1,120 @@ +addColumn('first_name', 'FirstName', 'VARCHAR', false, 100, null); + } + + /** + * @return string + */ + public function getName(): string + { + return static::TABLE_NAME; + } + + /** + * @return string + */ + public function getClassName(): string + { + return "\SprykerTest\Zed\Gui\Communication\Fixture\ActiveRecord"; + } + + /** + * @param \Propel\Runtime\ActiveQuery\Criteria $criteria Object containing the columns to add. + * @param string|null $alias Optional table alias + * + * @return void + */ + public static function addSelectColumns(Criteria $criteria, ?string $alias = null): void + { + $criteria->addSelectColumn(static::TABLE_NAME . '.id_customer'); + $criteria->addSelectColumn(static::TABLE_NAME . '.fk_locale'); + $criteria->addSelectColumn(static::TABLE_NAME . '.fk_user'); + $criteria->addSelectColumn(static::TABLE_NAME . '.anonymized_at'); + $criteria->addSelectColumn(static::TABLE_NAME . '.company'); + $criteria->addSelectColumn(static::TABLE_NAME . '.customer_reference'); + $criteria->addSelectColumn(static::TABLE_NAME . '.date_of_birth'); + $criteria->addSelectColumn(static::TABLE_NAME . '.default_billing_address'); + $criteria->addSelectColumn(static::TABLE_NAME . '.default_shipping_address'); + $criteria->addSelectColumn(static::TABLE_NAME . '.email'); + $criteria->addSelectColumn(static::TABLE_NAME . '.first_name'); + $criteria->addSelectColumn(static::TABLE_NAME . '.gender'); + $criteria->addSelectColumn(static::TABLE_NAME . '.last_name'); + $criteria->addSelectColumn(static::TABLE_NAME . '.password'); + $criteria->addSelectColumn(static::TABLE_NAME . '.phone'); + $criteria->addSelectColumn(static::TABLE_NAME . '.registered'); + $criteria->addSelectColumn(static::TABLE_NAME . '.registration_key'); + $criteria->addSelectColumn(static::TABLE_NAME . '.restore_password_date'); + $criteria->addSelectColumn(static::TABLE_NAME . '.restore_password_key'); + $criteria->addSelectColumn(static::TABLE_NAME . '.salutation'); + $criteria->addSelectColumn(static::TABLE_NAME . '.created_at'); + $criteria->addSelectColumn(static::TABLE_NAME . '.updated_at'); + } + + /** + * @param array $row Row returned by DataFetcher->fetch(). + * @param int $offset The 0-based offset for reading from the resultset row. + * @param string $indexType The index type of $row. Mostly DataFetcher->getIndexType(). + * + * @return array (SpyCustomer object, last column rank) + */ + public static function populateObject(array $row, int $offset = 0, string $indexType = TableMap::TYPE_NUM): array + { + $key = static::getPrimaryKeyHashFromRow($row, $offset, $indexType); + $cls = static::OM_CLASS; + $obj = new $cls(); + $col = $obj->hydrate($row, $offset, false, $indexType); + static::addInstanceToPool($obj, null); + + return [$obj, $col]; + } + + /** + * @param array $row Resultset row. + * @param int $offset The 0-based offset for reading from the resultset row. + * @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME + * + * @return string|null The primary key hash of the row + */ + public static function getPrimaryKeyHashFromRow(array $row, int $offset = 0, string $indexType = TableMap::TYPE_NUM): ?string + { + return $row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('IdCustomer', TableMap::TYPE_PHPNAME, $indexType)] || is_scalar($row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('IdCustomer', TableMap::TYPE_PHPNAME, $indexType)]) || is_callable([$row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('IdCustomer', TableMap::TYPE_PHPNAME, $indexType)], '__toString']) ? (string)$row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('IdCustomer', TableMap::TYPE_PHPNAME, $indexType)] : $row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('IdCustomer', TableMap::TYPE_PHPNAME, $indexType)]; + } +} diff --git a/tests/SprykerTest/Zed/Gui/Communication/Fixture/FooTable.php b/tests/SprykerTest/Zed/Gui/Communication/Fixture/FooTable.php index e385279c..4b840534 100644 --- a/tests/SprykerTest/Zed/Gui/Communication/Fixture/FooTable.php +++ b/tests/SprykerTest/Zed/Gui/Communication/Fixture/FooTable.php @@ -7,6 +7,7 @@ namespace SprykerTest\Zed\Gui\Communication\Fixture; +use LogicException; use Spryker\Zed\Gui\Communication\Table\AbstractTable; use Spryker\Zed\Gui\Communication\Table\TableConfiguration; use Symfony\Component\HttpFoundation\Request; @@ -30,9 +31,21 @@ protected function configure(TableConfiguration $config): TableConfiguration */ protected function prepareData(TableConfiguration $config): array { + $this->runQuery($this->createQuery(), $config); + return []; } + /** + * @throws \LogicException + * + * @return void + */ + protected function createQuery() + { + throw new LogicException('Method should be mocked.'); + } + /** * @param \Symfony\Component\HttpFoundation\Request $request * diff --git a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php index 98bdeb49..e51619ec 100644 --- a/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php +++ b/tests/SprykerTest/Zed/Gui/Communication/Table/AbstractTableTest.php @@ -8,9 +8,12 @@ namespace SprykerTest\Zed\Gui\Communication\Table; use Codeception\Test\Unit; +use PHPUnit\Framework\MockObject\MockObject; +use Propel\Runtime\ActiveQuery\ModelCriteria; use Spryker\Zed\Gui\Communication\Exception\TableException; use Spryker\Zed\Gui\Communication\Table\AbstractTable; use Spryker\Zed\Gui\Communication\Table\TableConfiguration; +use SprykerTest\Zed\Gui\Communication\Fixture\ActiveRecord; use SprykerTest\Zed\Gui\Communication\Fixture\DownloadTable; use SprykerTest\Zed\Gui\Communication\Fixture\DownloadTableWithOrderedHeadersAndFormatting; use SprykerTest\Zed\Gui\Communication\Fixture\DownloadTableWithoutGetDownloadQueryMethod; @@ -31,6 +34,26 @@ */ class AbstractTableTest extends Unit { + /** + * @var string + */ + protected const OPERATOR_FOR_STRICT_SEARCH = '='; + + /** + * @var string + */ + protected const OPERATOR_FOR_FUZZY_SEARCH = 'LIKE'; + + /** + * @var string + */ + protected const SEARCHABLE_FIELD_NAME = 'spy_customer.first_name'; + + /** + * @var string + */ + protected const SEARCHABLE_FIELD_KEY = 'FIRST_NAME'; + /** * @var string */ @@ -256,4 +279,110 @@ public function testStreamDownloadReturnsStreamedResponseWithOrderedAndFormatted $this->assertSame($expectedCsvStreamData, $streamedResponseOutput); } + + /** + * @return void + */ + public function testRunQueryFiltersDataUsingColumnStrictSearch(): void + { + // Arrange + $modelCriteriaMock = $this->getModelCriteriaMock(); + $tableConfigurationMock = $this->getTableConfigurationMock(); + $fooTableMock = $this->getFooTableMock($modelCriteriaMock, $tableConfigurationMock); + $fooTableMock->setRequest(new Request([ + 'search' => ['value' => 'maria'], + 'columns' => [ + 0 => [ + 'search' => [ + 'value' => 'Maria', + ], + ]], + ])); + + // Assert + $modelCriteriaMock->expects($this->any()) + ->method('where') + ->with($this->stringContains(static::OPERATOR_FOR_STRICT_SEARCH)) + ->willReturn($modelCriteriaMock); + + // Act + $fooTableMock->fetchData(); + } + + /** + * @return void + */ + public function testRunQueryUsesFuzzySearchWhenColumnFiltersNotProvided(): void + { + // Arrange + $modelCriteriaMock = $this->getModelCriteriaMock(); + $tableConfigurationMock = $this->getTableConfigurationMock(); + $fooTableMock = $this->getFooTableMock($modelCriteriaMock, $tableConfigurationMock); + $fooTableMock->setRequest(new Request([ + 'search' => ['value' => 'maria'], + 'columns' => [ + 0 => [ + 'search' => [ + 'value' => '', + ], + ], + ], + ])); + + // Assert + $modelCriteriaMock->expects($this->any()) + ->method('where') + ->with($this->stringContains(static::OPERATOR_FOR_FUZZY_SEARCH)) + ->willReturn($modelCriteriaMock); + + // Act + $fooTableMock->fetchData(); + } + + /** + * @return \PHPUnit\Framework\MockObject\MockObject|\Propel\Runtime\ActiveQuery\ModelCriteria + */ + protected function getModelCriteriaMock(): ModelCriteria + { + $modelCriteriaMock = $this->getMockBuilder(ModelCriteria::class) + ->setConstructorArgs([null, ActiveRecord::class]) + ->onlyMethods(['where']) + ->getMock(); + + return $modelCriteriaMock; + } + + /** + * @return \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\Gui\Communication\Table\TableConfiguration + */ + protected function getTableConfigurationMock(): TableConfiguration + { + $tableConfigurationMock = new TableConfiguration(); + $tableConfigurationMock->setSearchableColumns([static::SEARCHABLE_FIELD_KEY => static::SEARCHABLE_FIELD_NAME]); + $tableConfigurationMock->setDefaultSortColumnIndex(0); + $tableConfigurationMock->setDefaultSortDirection(TableConfiguration::SORT_ASC); + + return $tableConfigurationMock; + } + + /** + * @param \PHPUnit\Framework\MockObject\MockObject $modelCriteriaMock + * @param \PHPUnit\Framework\MockObject\MockObject $tableConfigurationMock + * + * @return \PHPUnit\Framework\MockObject\MockObject|\SprykerTest\Zed\Gui\Communication\Fixture\FooTable + */ + protected function getFooTableMock(MockObject $modelCriteriaMock, TableConfiguration $tableConfigurationMock): FooTable + { + $fooTableMock = $this->getMockBuilder(FooTable::class) + ->onlyMethods(['createQuery', 'init']) + ->getMock(); + $fooTableMock->method('createQuery') + ->willReturn($modelCriteriaMock); + $fooTableMock->method('init') + ->willReturn($fooTableMock); + $fooTableMock->setConfiguration($tableConfigurationMock); + $fooTableMock->setLimit(5); + + return $fooTableMock; + } } From a9542c604d54901435c7eb41536c2e8698abbc2a Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Thu, 26 Jan 2023 18:44:35 +0100 Subject: [PATCH 274/304] FRW-19: - Dropped invalid constraints for security-* modules. - Fixes symfony6 compatibility for GUI tables. --- .../Zed/Gui/Communication/Table/AbstractTable.php | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index bcdfe722..47c14378 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -763,11 +763,7 @@ public function getOrders(TableConfiguration $config) */ protected function getOrderParameter(): ?array { - if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { - return $this->request->query->all('order'); - } - - return (array)$this->request->query->get('order') ?: null; + return $this->request->query->all('order') ?: null; } /** @@ -874,11 +870,7 @@ public function getSearchTerm() */ protected function getSearchParameter(): array { - if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { - return $this->request->query->all('search'); - } - - return (array)$this->request->query->get('search'); + return $this->request->query->all('search'); } /** @@ -1103,7 +1095,7 @@ protected function isStrictSearch(ModelCriteria $query, TableConfiguration $conf */ protected function getSearchColumns(): array { - return (array)$this->request->query->get(static::COLUMNS); + return $this->request->query->all(static::COLUMNS); } /** From d681ee627a5d57129ea991eedb9c5c8d534bdb92 Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Thu, 26 Jan 2023 20:00:27 +0100 Subject: [PATCH 275/304] FRW-19: - Reverted internal API BC breaking changes. --- .../Zed/Gui/Communication/Table/AbstractTable.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 47c14378..1687bf94 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -763,7 +763,11 @@ public function getOrders(TableConfiguration $config) */ protected function getOrderParameter(): ?array { - return $this->request->query->all('order') ?: null; + if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { + return $this->request->query->all('order'); + } + + return (array)$this->request->query->get('order') ?: null; } /** @@ -870,7 +874,11 @@ public function getSearchTerm() */ protected function getSearchParameter(): array { - return $this->request->query->all('search'); + if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { + return $this->request->query->all('search'); + } + + return (array)$this->request->query->get('search'); } /** From 83a570dd0d5f9aa17b7da865ab82356858085ca9 Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Fri, 27 Jan 2023 10:01:23 +0100 Subject: [PATCH 276/304] FRW-19: - Fixed symfony=5.0.0 compatibility. --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 1687bf94..b5f316bf 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -1103,7 +1103,11 @@ protected function isStrictSearch(ModelCriteria $query, TableConfiguration $conf */ protected function getSearchColumns(): array { - return $this->request->query->all(static::COLUMNS); + if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { + return $this->request->query->all(static::COLUMNS); + } + + return (array)$this->request->query->get(static::COLUMNS); } /** From dd9e2daa10f205784d0b262467e95eeacdb5f7ee Mon Sep 17 00:00:00 2001 From: Yaroslav Krutikov Date: Fri, 27 Jan 2023 14:01:34 +0100 Subject: [PATCH 277/304] FRW-19 PoC of overriding Request class with custom InputBag --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index b5f316bf..bcdfe722 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -1103,10 +1103,6 @@ protected function isStrictSearch(ModelCriteria $query, TableConfiguration $conf */ protected function getSearchColumns(): array { - if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { - return $this->request->query->all(static::COLUMNS); - } - return (array)$this->request->query->get(static::COLUMNS); } From e49ee2a564766123e54e91392ab5c007f4df8b3c Mon Sep 17 00:00:00 2001 From: Yaroslav Krutikov Date: Fri, 27 Jan 2023 14:51:52 +0100 Subject: [PATCH 278/304] FRW-19 Remove PoC and change get() to all() when working with arrays --- src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index bcdfe722..c6d6166e 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -763,11 +763,7 @@ public function getOrders(TableConfiguration $config) */ protected function getOrderParameter(): ?array { - if ($this->isSymfonyHttpFoundationVersion5OrHigher()) { - return $this->request->query->all('order'); - } - - return (array)$this->request->query->get('order') ?: null; + return $this->request->query->all()['order'] ?? null; } /** @@ -1103,7 +1099,7 @@ protected function isStrictSearch(ModelCriteria $query, TableConfiguration $conf */ protected function getSearchColumns(): array { - return (array)$this->request->query->get(static::COLUMNS); + return $this->request->query->all()[static::COLUMNS] ?? []; } /** From 75a23be60af57212763469ef7a3230d88d8c2011 Mon Sep 17 00:00:00 2001 From: Ahmed Sabaa Date: Fri, 24 Feb 2023 13:35:46 +0100 Subject: [PATCH 279/304] Removed composer validate lowest check from CI --- .github/workflows/ci.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bddaf4b6..4b2df062 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,8 +51,3 @@ jobs: - name: Composer Update run: composer update --prefer-lowest --prefer-dist --no-interaction --profile -vvv - - name: Composer Install prefer lowest tool - run: composer require --dev dereuromark/composer-prefer-lowest; - - - name: Run validation - run: vendor/bin/validate-prefer-lowest -m From 848ebed345d89460b8e6fab19d728111350d4b2f Mon Sep 17 00:00:00 2001 From: Ahmed Sabaa Date: Tue, 28 Feb 2023 16:23:12 +0100 Subject: [PATCH 280/304] Fixed .yml file --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b2df062..ee8c9146 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,4 +50,3 @@ jobs: - name: Composer Update run: composer update --prefer-lowest --prefer-dist --no-interaction --profile -vvv - From e32ef19429945725010b73cf7693f44d180e527a Mon Sep 17 00:00:00 2001 From: Roman Havrylko <70894038+romanhavrylko@users.noreply.github.com> Date: Mon, 13 Mar 2023 14:20:27 +0100 Subject: [PATCH 281/304] CC-16902 Added additional validation to form fields. (#9990) CC-16902 Allowed using Twig functions with CMS forms. --- assets/Zed/package.json | 2 +- composer.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/Zed/package.json b/assets/Zed/package.json index e6c9de4a..9c773d86 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -26,7 +26,7 @@ "metismenu": "~2.0.2", "pace": "npm:pace-js@~1.0.2", "select2": "~4.0.13", - "summernote": "~0.8.18", + "summernote": "~0.8.20", "sweetalert": "~1.1.3" } } diff --git a/composer.json b/composer.json index 240962a2..2e2bfa4b 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "spryker/twig-extension": "^1.0.0", "spryker/util-number": "^1.0.0", "spryker/util-sanitize": "^2.0.0", - "spryker/util-sanitize-xss": "^1.0.0", + "spryker/util-sanitize-xss": "^1.1.0", "spryker/util-text": "^1.1.0" }, "require-dev": { From aed54705ec1480550842ff8db6c25dae5dd795d2 Mon Sep 17 00:00:00 2001 From: Danil Moroz <42937797+danilmoro3@users.noreply.github.com> Date: Mon, 13 Mar 2023 20:17:58 +0200 Subject: [PATCH 282/304] CC-25887: Updated `jquery` dependency version. (#9981) CC-25887 Updated `jquery` dependency version. --- assets/Zed/package-lock.json | 6 +++--- assets/Zed/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 08a24517..0effebd2 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -119,9 +119,9 @@ "integrity": "sha512-AzucsG1DdepagLF8tkxfjUqn3cCQ63MgH/tBWwPSy0BIDt8iLFZYDwnTxA08d+zdgL8l2dkPdZDe+Qkd+RMl9Q==" }, "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz", + "integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==" }, "jquery-migrate": { "version": "3.0.1", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 9c773d86..3f3bcbe3 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -19,7 +19,7 @@ "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", "get-root-node-polyfill": "~1.0.0", - "jquery": "~3.5.1", + "jquery": "~3.6.3", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", "jstree": "~3.3.3", From b2d35530e7e4a67c15fcede334c28780476e9384 Mon Sep 17 00:00:00 2001 From: Dmitriy Krainiy Date: Fri, 31 Mar 2023 21:36:11 +0200 Subject: [PATCH 283/304] TE-10886 Dynamic store. (#9457) TE-10886 Release Dynamic Store --- composer.json | 1 + tests/SprykerTest/Zed/Gui/codeception.yml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/composer.json b/composer.json index 2e2bfa4b..026c17f8 100644 --- a/composer.json +++ b/composer.json @@ -24,6 +24,7 @@ "spryker/container": "*", "spryker/propel": "*", "spryker/silex": "*", + "spryker/store": "*", "spryker/testify": "*" }, "suggest": { diff --git a/tests/SprykerTest/Zed/Gui/codeception.yml b/tests/SprykerTest/Zed/Gui/codeception.yml index 6978d61d..31dd7fdc 100644 --- a/tests/SprykerTest/Zed/Gui/codeception.yml +++ b/tests/SprykerTest/Zed/Gui/codeception.yml @@ -24,3 +24,5 @@ suites: - \SprykerTest\Shared\Testify\Helper\DependencyHelper - \SprykerTest\Shared\Propel\Helper\TransactionHelper - \SprykerTest\Shared\Application\Helper\ZedHelper + - \SprykerTest\Service\Container\Helper\ContainerHelper + - \SprykerTest\Shared\Store\Helper\StoreDependencyHelper From e9f0c145a7064d1bbdbf6ac89a7295b21bed3632 Mon Sep 17 00:00:00 2001 From: Roman Havrylko <70894038+romanhavrylko@users.noreply.github.com> Date: Thu, 6 Apr 2023 09:25:58 +0200 Subject: [PATCH 284/304] CC-16902: updated summernote dependency. (#10079) CC-16902 Fixed `summernote` dependency version --- assets/Zed/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 0effebd2..08638a28 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -157,9 +157,9 @@ "integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==" }, "summernote": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz", - "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.20.tgz", + "integrity": "sha512-W9RhjQjsn+b1s9xiJQgJbCiYGJaDAc9CdEqXo+D13WuStG8lCdtKaO5AiNiSSMJsQJN2EfGSwbBQt+SFE2B8Kw==" }, "sweetalert": { "version": "1.1.3", From 31d403d86a343055c908b5fe5723f8187eb05d56 Mon Sep 17 00:00:00 2001 From: Andrey Maslov <37797323+andrew-maslov@users.noreply.github.com> Date: Tue, 1 Aug 2023 19:18:08 +0300 Subject: [PATCH 285/304] CC-30293: Fixed the positioning of the buttons on the scheduled price delete page. (#10358) CC-30293 Fixed the positioning of the buttons on the scheduled price delete page. --- assets/Zed/sass/_custom.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 5091e4d1..d7e24035 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -1810,3 +1810,7 @@ a.label { .form-note { margin-top: 5px; } + +.col-auto { + width: auto; +} From 863c7d21db8ca8d0e0a06c8586dbb8e0801796ba Mon Sep 17 00:00:00 2001 From: Spryker Release Bot Date: Mon, 14 Aug 2023 23:39:02 +0300 Subject: [PATCH 286/304] Update Bundles/Gui/LICENSE --- LICENSE | 67 +++++++++++++++++++++++---------------------------------- 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/LICENSE b/LICENSE index 36237b30..fc1838ec 100644 --- a/LICENSE +++ b/LICENSE @@ -1,40 +1,27 @@ -SPRYKER SYSTEMS GMBH EVALUATION LICENSE AGREEMENT - -SPRYKER SYSTEMS GMBH, REGISTERED WITH THE COMMERCIAL REGISTER OF THE LOWER COURT OF HAMBURG UNDER HRB 134310 -("WE" OR "SPRYKER")GRANTS YOU (THE "LICENSEE") THE RIGHT TO USE THE SOFTWARE (AS DEFINED BELOW) -UNDER THE PROVISIONS OF THIS EVALUATION LICENSE AGREEMENT (THE "AGREEMENT"). - -The "Software" includes any software owned and distributed by Spryker under this Agreement. The Software -contains elements of open source components, to which different license terms apply respectively. -These open source components are needed to be installed separately. - -Spryker grants to Licensee, during the 45-calendar-day period (the "Evaluation Period") following the download of the Software, -the nontransferable, nonexclusive limited, free of charge license to permit Licensee's employees to internally use the Software -to test and evaluate the Software in connection with potentially purchasing non-evaluation licenses to the Software. - -Licensee shall not (i) use the Software to set up a productive live system, for development purposes or any other purposes apart -from evaluating the Software; (ii) copy any part of the Software except to make one copy for back-up purposes; (iii) distribute, -disclose, market, rent, lease, or transfer the Software or act as a service bureau with respect to the Software; (iv) export the -Software or install it in multiple locations; (v) disclose any confidential information provided by Spryker; (vi) modify or make -derivative works of the Software; or (vii) allow others to make or obtain copies of the Software. - -THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND. SPRYKER DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING -BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, TITLE, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. SPRYKER WILL NOT -BE LIABLE FOR ANY DAMAGES ASSOCIATED WITH THE SOFTWARE, INCLUDING WITHOUT LIMITATION ORDINARY, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL -DAMAGES OF ANY KIND, INCLUDING BUT NOT LIMITED TO DAMAGES RELATING TO LOST DATA OR LOST PROFITS, EVEN IF SPRYKER HAS BEEN ADVISED OF -THE POSSIBILITY OF SUCH DAMAGES. - -Licensee's license to use the Software shall terminate on the earlier of (i) the expiration of the Evaluation Period, or (ii) the date -both parties enter into a definitive agreement for the provision by Spryker to Licensee of a non-evaluation license to the Software. -Upon termination of the license as provided above, Licensee shall promptly destroy the Software and any back-up copy of the Software -made during the Evaluation Period if Spryker and the Licensee have not agreed a non-evaluation license to the Software. - -This Agreement shall be governed by the laws of Germany to the exclusion of IPR (International Law) and the United Nations Convention -on Contracts for the International Sale of Goods (CISG). The parties consent to the jurisdiction of the courts in Berlin (Germany). - -This Agreement is not assignable or transferable by Licensee and any attempt to do so is null and void. - -This Agreement constitutes the entire agreement between the parties concerning Licensee's use of the Software. This Agreement supersedes -any prior verbal understanding between the parties and any Licensee purchase order or other ordering document, regardless of whether such -document is received by Spryker before or after execution of this Agreement. This Agreement may be amended only in a writing signed by -an authorized officer of Spryker. +SPRYKER - LICENSE AGREEMENT FOR EVALUATION OF AND EARLY ACCESS TO SOFTWARE + +SPRYKER SYSTEMS GMBH, REGISTERED WITH THE COMMERCIAL REGISTER OF THE LOWER COURT OF HAMBURG UNDER HRB 134310 ("WE" OR "SPRYKER") GRANTS YOU ("LICENSEE") THE RIGHT TO USE THE SOFTWARE (AS DEFINED BELOW) UNDER THE PROVISIONS OF THIS LICENSE AGREEMENT FOR EVALUATION AND EARLY ACCESS (THE "AGREEMENT"). + +For the purposes of this Agreement, the "Software" includes any software, which is owned and made available (i) by Spryker for evaluation purposes or (ii) as part of Spryker`s early access program under this Agreement. + +Spryker grants to Licensee, (i) during the 45-calendar-day period (the "Evaluation Period") following the first download of the Software or (ii) during the period it makes available a feature, module or functionality as part of its early access program (the "Early Access Period"), the non-transferable, non-exclusive limited, free of charge license (for (i) the "Evaluation License" or for (ii) the "Early Access License", as applicable, both a "License") to permit Licensee and/or Licensee`s employees to internally use the Software to test and evaluate the Software. In case of the Evaluation License, Licensee will not be granted the license under this Agreement for one particular piece of the Software more than once. + +Under the License granted in this Agreement, Licensee shall not (i) use the Software to set up a production live system, for development purposes or any other purposes apart from evaluating and testing the Software; (ii) copy any part of the Software except to make one copy for back-up purposes; (iii) distribute, disclose, market, rent, lease, or transfer the Software or act as a service bureau with respect to the Software; (iv) export the Software or install it in multiple locations; (v) disclose any confidential information provided by Spryker; (vi) modify or make derivative works of the Software; or (vii) allow others to make or obtain copies of the Software. + +The use of the Software in a production environment, to the extent permitted at all, requires prior conclusion of a separate agreement between Spryker and Licensee. Spryker will not support any versions of the Software being provided for evaluation purposes or as part of Spryker`s early access program. The provision of the Software as part of Spryker`s early access program does not necessarily mean it will be released as part of Spryker`s products in the future. + +The Software may contain elements of open source components, to which different license terms apply respectively. Licensee may need to install these open source components separately. + +THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND. SPRYKER DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, TITLE, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. SPRYKER WILL NOT BE LIABLE FOR ANY DAMAGES ASSOCIATED WITH THE SOFTWARE, INCLUDING WITHOUT LIMITATION ORDINARY, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OF ANY KIND, INCLUDING BUT NOT LIMITED TO DAMAGES RELATING TO LOST DATA OR LOST PROFITS, EVEN IF SPRYKER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +Licensee can provide input, suggestions, suggest or recommend changes or enhancements of the Software ("Feedback"). Any Feedback provided by Licensee is not considered confidential information and is received and treated by Spryker on a non-confidential and unrestricted basis. Licensee grants Spryker a sub-licenseable right to use, distribute, disclose and/or incorporate it into the Software or other products of Spryker, free of charge and without restriction as to time and place. + +Licensee`s License to use the Software under this Agreement shall terminate on the earlier of (i) the expiration of the Evaluation Period or the Early Access Period (as applicable), or (ii) the date both parties enter into a definitive agreement for the provision by Spryker to Licensee of a full non-evaluation license to Spryker`s software. + +Upon termination of the License as provided under this Agreement, Licensee shall promptly destroy the Software and any back-up copy of the Software made during the Evaluation Period or Early Access Period if Spryker and Licensee have not agreed a non-evaluation license to Spryker`s software. + +This Agreement shall be governed by the laws of Germany to the exclusion of IPR (International Law) and the United Nations Convention on Contracts for the International Sale of Goods (CISG). The parties consent to the jurisdiction of the courts in Berlin (Germany). + +This Agreement and/or the License is not assignable or transferable by Licensee and any attempt to do so is null and void. + +This Agreement constitutes the entire agreement between the parties concerning Licensee`s use of the Software. This Agreement supersedes any prior verbal understanding between the parties. This Agreement may be amended only in a writing signed by an authorized officer of Spryker. From 05cb219dbf7b2880dfdb40df07302b2e586ff406 Mon Sep 17 00:00:00 2001 From: Anton Zubariev Date: Mon, 21 Aug 2023 10:50:21 +0300 Subject: [PATCH 287/304] BUGFIX: Fixed CI files according to Spryk's CI file version --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee8c9146..24afc4b8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,10 +10,10 @@ on: jobs: validation: name: Validation - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -33,10 +33,10 @@ jobs: lowest: name: Prefer Lowest - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 From d510351d3827ee75bed94f2692461ae074f0d0b2 Mon Sep 17 00:00:00 2001 From: Andrey Maslov <37797323+andrew-maslov@users.noreply.github.com> Date: Fri, 22 Sep 2023 13:20:19 +0300 Subject: [PATCH 288/304] CC-29648: Removed polyfills (#10493) CC-29648 LTS expired - Cleanup unsupported IE11 packages in Zed --- assets/Zed/js/modules/commons.js | 10 ---------- assets/Zed/package-lock.json | 10 ---------- assets/Zed/package.json | 2 -- 3 files changed, 22 deletions(-) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index 3169626f..1418767e 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -5,16 +5,6 @@ 'use strict'; -// polyfill for Promise() -// extend webpack 2 support on IE11 and PhantomJS -require('es6-promise/auto'); - -var isImplemented = require('get-root-node-polyfill/is-implemented'); - -if (!isImplemented()) { - Node.prototype.getRootNode = require('get-root-node-polyfill'); -} - // external dependencies var $ = require('jquery'); require('datatables.net')(window, $); diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 08638a28..c0263518 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -108,16 +108,6 @@ "jquery": ">=1.7" } }, - "es6-promise": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", - "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=" - }, - "get-root-node-polyfill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-root-node-polyfill/-/get-root-node-polyfill-1.0.0.tgz", - "integrity": "sha512-AzucsG1DdepagLF8tkxfjUqn3cCQ63MgH/tBWwPSy0BIDt8iLFZYDwnTxA08d+zdgL8l2dkPdZDe+Qkd+RMl9Q==" - }, "jquery": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 3f3bcbe3..0af9eb6e 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -17,8 +17,6 @@ "datatables.net-responsive-bs": "~2.2.3", "datatables.net-select": "~1.3.0", "datatables.net-select-bs": "~1.3.0", - "es6-promise": "~4.0.5", - "get-root-node-polyfill": "~1.0.0", "jquery": "~3.6.3", "jquery-migrate": "~3.0.0", "jquery-ui": "~1.12.1", From 4877a889d98ed16336de583cd8772238fb53a1fd Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Thu, 2 Nov 2023 21:09:27 +0100 Subject: [PATCH 289/304] FRW-998 Switched PHP version from 8.0 to 8.1 by default, enabled support of PHP 8.2. (#10577) FRW-998 Dropped PHP 8.0 and added PHP 8.2 support. --- .github/workflows/ci.yml | 4 ++-- README.md | 2 +- composer.json | 2 +- src/Spryker/Shared/Gui/Form/AbstractForm.php | 4 ++-- src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php | 4 ++-- .../Zed/Gui/Communication/Form/Type/AutosuggestType.php | 4 ++-- .../Form/Type/Extension/NoValidateTypeExtension.php | 2 +- src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php | 4 ++-- src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php | 4 ++-- .../Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php | 4 ++-- src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php | 4 ++-- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 24afc4b8..e851193f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '8.0' + php-version: '8.2' extensions: mbstring, intl, bcmath coverage: none @@ -41,7 +41,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '8.0' + php-version: '8.1' extensions: mbstring, intl, bcmath coverage: none diff --git a/README.md b/README.md index 3a18cca2..c7d347a2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Gui Module [![Latest Stable Version](https://poser.pugx.org/spryker/gui/v/stable.svg)](https://packagist.org/packages/spryker/gui) -[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.0-8892BF.svg)](https://php.net/) +[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.1-8892BF.svg)](https://php.net/) Gui provides the main logic for GUI functionality across all modules. diff --git a/composer.json b/composer.json index 026c17f8..112144b1 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "description": "Gui module", "license": "proprietary", "require": { - "php": ">=8.0", + "php": ">=8.1", "spryker/form-extension": "^1.0.0", "spryker/kernel": "^3.52.0", "spryker/laminas": "^1.0.0", diff --git a/src/Spryker/Shared/Gui/Form/AbstractForm.php b/src/Spryker/Shared/Gui/Form/AbstractForm.php index a07a591f..9b4a586c 100644 --- a/src/Spryker/Shared/Gui/Form/AbstractForm.php +++ b/src/Spryker/Shared/Gui/Form/AbstractForm.php @@ -98,7 +98,7 @@ public function getParent() * * @return void */ - public function buildView(FormView $view, FormInterface $form, array $options) + public function buildView(FormView $view, FormInterface $form, array $options): void { } @@ -121,7 +121,7 @@ public function buildView(FormView $view, FormInterface $form, array $options) * * @return void */ - public function finishView(FormView $view, FormInterface $form, array $options) + public function finishView(FormView $view, FormInterface $form, array $options): void { } } diff --git a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php index 223112b6..5ee4fa06 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php +++ b/src/Spryker/Zed/Gui/Communication/Form/DeleteForm.php @@ -24,7 +24,7 @@ class DeleteForm extends AbstractType * * @return void */ - public function configureOptions(OptionsResolver $resolver) + public function configureOptions(OptionsResolver $resolver): void { $resolver->setRequired('action'); $resolver->setRequired('fields'); @@ -54,7 +54,7 @@ public function setDefaultOptions(OptionsResolver $resolver) * * @return void */ - public function buildForm(FormBuilderInterface $builder, array $options) + public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->setAction($options['action']); $builder->setMethod(Request::METHOD_DELETE); diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php index 837b9eae..fa358fb7 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/AutosuggestType.php @@ -36,7 +36,7 @@ class AutosuggestType extends AbstractType * * @return void */ - public function buildView(FormView $view, FormInterface $form, array $options) + public function buildView(FormView $view, FormInterface $form, array $options): void { $view->vars[static::URL] = $options[static::URL]; $view->vars[static::PLACEHOLDER] = $options[static::PLACEHOLDER]; @@ -47,7 +47,7 @@ public function buildView(FormView $view, FormInterface $form, array $options) * * @return void */ - public function configureOptions(OptionsResolver $resolver) + public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ static::URL => '', diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php index 6ea2a0f5..5311a035 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Extension/NoValidateTypeExtension.php @@ -23,7 +23,7 @@ class NoValidateTypeExtension extends AbstractTypeExtension * * @return void */ - public function buildView(FormView $view, FormInterface $form, array $options) + public function buildView(FormView $view, FormInterface $form, array $options): void { $view->vars['attr'] = array_merge($view->vars['attr'], [ 'novalidate' => 'novalidate', diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php index f7aca634..d439e3f9 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/ImageType.php @@ -46,7 +46,7 @@ class ImageType extends AbstractType * * @return void */ - public function buildView(FormView $view, FormInterface $form, array $options) + public function buildView(FormView $view, FormInterface $form, array $options): void { $view->vars[static::OPTION_IMAGE_WIDTH] = $options[static::OPTION_IMAGE_WIDTH]; $view->vars[static::OPTION_IMAGE_HEIGHT] = $options[static::OPTION_IMAGE_HEIGHT]; @@ -59,7 +59,7 @@ public function buildView(FormView $view, FormInterface $form, array $options) * * @return void */ - public function configureOptions(OptionsResolver $resolver) + public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ static::OPTION_IMAGE_WIDTH => null, diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php index d81045c4..f54083cb 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/ParagraphType.php @@ -30,7 +30,7 @@ class ParagraphType extends AbstractType * * @return void */ - public function buildView(FormView $view, FormInterface $form, array $options) + public function buildView(FormView $view, FormInterface $form, array $options): void { $view->vars[static::OPTION_TEXT] = $options[static::OPTION_TEXT]; } @@ -40,7 +40,7 @@ public function buildView(FormView $view, FormInterface $form, array $options) * * @return void */ - public function configureOptions(OptionsResolver $resolver) + public function configureOptions(OptionsResolver $resolver): void { $resolver->setRequired([ static::OPTION_TEXT, diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php index 340627ea..635677ef 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/Select2ComboBoxType.php @@ -26,7 +26,7 @@ class Select2ComboBoxType extends AbstractType * * @return void */ - public function buildView(FormView $view, FormInterface $form, array $options) + public function buildView(FormView $view, FormInterface $form, array $options): void { $view->vars['placeholder'] = $options['placeholder']; $view->vars['tags'] = $options['tags']; @@ -37,7 +37,7 @@ public function buildView(FormView $view, FormInterface $form, array $options) * * @return void */ - public function configureOptions(OptionsResolver $resolver) + public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'choices' => [], diff --git a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php index 90ca1088..dd6536d8 100644 --- a/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php +++ b/src/Spryker/Zed/Gui/Communication/Form/Type/SelectType.php @@ -36,7 +36,7 @@ class SelectType extends AbstractType * * @return void */ - public function buildView(FormView $view, FormInterface $form, array $options) + public function buildView(FormView $view, FormInterface $form, array $options): void { $view->vars[static::URL] = $options[static::URL]; $view->vars[static::PLACEHOLDER] = $options[static::PLACEHOLDER]; @@ -47,7 +47,7 @@ public function buildView(FormView $view, FormInterface $form, array $options) * * @return void */ - public function configureOptions(OptionsResolver $resolver) + public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ static::URL => '', From c44699f1197d4754647a283f71da37ec20f8f376 Mon Sep 17 00:00:00 2001 From: Yuriy Gerton Date: Tue, 28 Nov 2023 16:08:58 +0200 Subject: [PATCH 290/304] CC-17034: fix back office table horizontal scroll (#10649) CC-17034 Fix back office table horizontal scroll --- assets/Zed/js/modules/libs/data-table.js | 2 -- assets/Zed/sass/_data-tables.scss | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/assets/Zed/js/modules/libs/data-table.js b/assets/Zed/js/modules/libs/data-table.js index 99afaf5c..1a5b3a30 100644 --- a/assets/Zed/js/modules/libs/data-table.js +++ b/assets/Zed/js/modules/libs/data-table.js @@ -22,7 +22,6 @@ if (translationObj.sSearch) { var defaultConfiguration = { scrollX: 'auto', - autoWidth: false, language: translationObj, dom: "<'row'<'col-sm-12 col-md-6'i><'col-sm-12 col-md-6'f>>" + @@ -34,7 +33,6 @@ var noSearchConfiguration = { bFilter: false, bInfo: false, scrollX: 'auto', - autoWidth: false, }; function setTableErrorMode(errorMode) { diff --git a/assets/Zed/sass/_data-tables.scss b/assets/Zed/sass/_data-tables.scss index 3e577ba6..0cdaeac4 100644 --- a/assets/Zed/sass/_data-tables.scss +++ b/assets/Zed/sass/_data-tables.scss @@ -2,9 +2,8 @@ $data-table-selected-row-bg-color: rgba(#0088cc, 0.15); $data-table-selected-row-border-size: 1px; $data-table-selected-row-border-color: rgba(#0088cc, 1); -.dataTables_scrollHeadInner { - width: 100% !important; - +.dataTables_scrollHeadInner, +.dataTables_scrollBody { & > .table { width: 100% !important; } From 5516f626884c62a1e0d7b5b5eadddcd850a4212b Mon Sep 17 00:00:00 2001 From: Alexander Veselov Date: Tue, 19 Mar 2024 16:33:17 +0200 Subject: [PATCH 291/304] FRW-6897 Adjusted form translations, GracefulRunner composer. (#10877) FRW-6897 Adjusted form translations, GracefulRunner composer. --- src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig b/src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig index 6d782437..86a46463 100644 --- a/src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig +++ b/src/Spryker/Zed/Gui/Presentation/Form/Type/form_extension.twig @@ -16,7 +16,7 @@ {% if form.parent is not null %}{% else %}
    {% endif %}
      {%- for error in errors -%} -
    • {{ error.message | trans }}
    • +
    • {{ error.message | trans(error.messageParameters) }}
    • {%- endfor -%}
    {% if form.parent is not null %}{% else %}
    {% endif %} From 0a6d318bc656325f3944301df732d8235b1868b6 Mon Sep 17 00:00:00 2001 From: Serhii Chepela Date: Thu, 21 Mar 2024 20:45:02 +0200 Subject: [PATCH 292/304] FRW-1817 Fixed false positive test cases with Dynamic Multistore mode enabled. (#10862) FRW-6382 Adjust StoreDependencyHelper and related tests to cover cases when there is no store provided --- tests/SprykerTest/Zed/Gui/codeception.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/SprykerTest/Zed/Gui/codeception.yml b/tests/SprykerTest/Zed/Gui/codeception.yml index 31dd7fdc..6ad07bb0 100644 --- a/tests/SprykerTest/Zed/Gui/codeception.yml +++ b/tests/SprykerTest/Zed/Gui/codeception.yml @@ -25,4 +25,4 @@ suites: - \SprykerTest\Shared\Propel\Helper\TransactionHelper - \SprykerTest\Shared\Application\Helper\ZedHelper - \SprykerTest\Service\Container\Helper\ContainerHelper - - \SprykerTest\Shared\Store\Helper\StoreDependencyHelper + - \SprykerTest\Zed\Store\Helper\StoreDependencyHelper From ea6e8bfaf86b59d5726640fef6a051bd35668aef Mon Sep 17 00:00:00 2001 From: Ilya Kubanov <45764294+ilyakubanov@users.noreply.github.com> Date: Wed, 27 Mar 2024 11:11:29 +0100 Subject: [PATCH 293/304] CC-32421 Merchant Relation Requests & Enhanced Merchant Relations. (#10767) CC-32421 Merchant Relation Requests & Enhanced Merchant Relations. --- assets/Zed/sass/_custom.scss | 94 ++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index d7e24035..059e078c 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -546,6 +546,10 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { margin-bottom: 1em; } +.spacing-bottom-big { + margin-bottom: 20px; +} + .navbar-default { box-shadow: 0 2px 16px $grey-light2; @@ -808,6 +812,19 @@ select.form-control { vertical-align: middle; } + .form-filter { + padding-bottom: 10px; + + label { + display: block; + } + + select { + width: 100%; + margin: 0; + } + } + &--alt { margin: 0 0 20px; border: 0; @@ -1455,6 +1472,23 @@ a.label { } } + &.btn-link { + border-radius: 0; + background: transparent; + padding: 0; + color: #999c9e; + border: none; + box-shadow: none; + line-height: 1; + text-transform: none; + + &:hover { + background: transparent; + box-shadow: none; + color: #121212; + } + } + &.navbar-minimalize { border-radius: 4px; padding: 2px 12px; @@ -1814,3 +1848,63 @@ a.label { .col-auto { width: auto; } + +.comment { + &__message { + display: block; + background: #f8f8f8; + border: 2px solid #f1f1f1; + border-radius: 10px; + padding: 7px 12px 9px; + line-height: 18px; + min-height: 65px; + white-space: pre; + color: #121212; + font-weight: 400; + } + + &__area-message { + position: relative; + } + + &__textarea { + position: absolute; + top: 0; + left: 0; + width: 100%; + resize: none; + } + + &__actions { + display: flex; + justify-content: flex-end; + gap: 15px; + } + + textarea.comment__textarea { + height: 100%; + min-height: 0; + } + + &__edit-mode-picker, + &__textarea, + &__update-btn { + display: none; + } + + &:has(&__edit-mode-picker:checked) { + .comment__textarea, + .comment__update-btn { + display: block; + } + + .comment__edit-btn { + display: none; + } + + .comment__message { + visibility: hidden; + opacity: 0; + } + } +} From cdf54c3fdde0300ca1d08557448f7c3aba5f511b Mon Sep 17 00:00:00 2001 From: Oleksii Bilan Date: Wed, 3 Apr 2024 16:26:42 +0300 Subject: [PATCH 294/304] CC-33168 Update Angular to v17 (#10905) Update Angular to v17 --- assets/Zed/js/modules/commons.js | 2 +- assets/Zed/package.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/Zed/js/modules/commons.js b/assets/Zed/js/modules/commons.js index 1418767e..ade9a229 100644 --- a/assets/Zed/js/modules/commons.js +++ b/assets/Zed/js/modules/commons.js @@ -6,7 +6,7 @@ 'use strict'; // external dependencies -var $ = require('jquery'); +const $ = require('jquery'); require('datatables.net')(window, $); require('datatables.net-bs')(window, $); require('datatables.net-buttons')(window, $); diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 0af9eb6e..472fb50b 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -9,8 +9,8 @@ "autonumeric": "~4.6.0", "bootstrap-sass": "~3.4.1", "codemirror": "~5.63.0", - "datatables.net": "~1.10.23", - "datatables.net-bs": "~1.10.10", + "datatables.net": "~1.11.3", + "datatables.net-bs": "~1.11.3", "datatables.net-buttons": "~1.2.3", "datatables.net-buttons-bs": "~1.2.3", "datatables.net-responsive": "~2.2.3", @@ -19,7 +19,7 @@ "datatables.net-select-bs": "~1.3.0", "jquery": "~3.6.3", "jquery-migrate": "~3.0.0", - "jquery-ui": "~1.12.1", + "jquery-ui": "~1.13.2", "jstree": "~3.3.3", "metismenu": "~2.0.2", "pace": "npm:pace-js@~1.0.2", From 21b2bfd2d01726c9e32ef46efaa969e64b8f45e9 Mon Sep 17 00:00:00 2001 From: Olha Livitchuk <77281282+olhalivitchuk@users.noreply.github.com> Date: Thu, 18 Jul 2024 13:23:38 +0200 Subject: [PATCH 295/304] FRW-8526 Updated and added missing CONTRIBUTING.md files. (#11005) FRW-8526 Update contribution.md content for all repos with the Spryker license --- CONTRIBUTING.md | 115 +++++++++++++++++++++++++++++------------------- 1 file changed, 69 insertions(+), 46 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5eff362d..6a2d4c07 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,46 +1,69 @@ -CODE CONTRIBUTION LICENSE AGREEMENT - -BY DISPLAYING, PUBLISHING, UPLOADING OR PROMOTING (COLLECTIVELY, “POSTING”) SOURCE CODE (“SOURCE CODE”) -TO SPRYKER SYSTEMS GMBH, REGISTERED WITH THE COMMERCIAL REGISTER OF THE LOWER COURT OF HAMBURG UNDER -HRB 134310 (“WE”, “US” OR ”SPRYKER”), YOU AGREE TO THIS CODE CONTRIBUTION LICENSE AGREEMENT (THE “AGREEMENT”). - -You grant us and our affiliates an irrevocable, perpetual, worldwide, royalty-free, non-exclusive, unrestricted -license and right to use, reproduce and store, disseminate and otherwise exploit, modify, delete from, add to, -create derivative works of, publicly perform, publicly display, reproduce, exchange parts of Source Code or combine them with -other Source Code, use in data networks and distribute with or without consideration and without limitations as to the -number of items via all distribution channels (and to sublicense the foregoing rights through multiple tiers of licensees) -of such Source Code and any other copyright protected material for any reason and in connection with advertising and -promoting our software and/or our products in any media formats and through any channels now existing or developed in -the future. The transfer and assignment of rights covers any usage and exploitation rights for any unknown types of use -as well as with regard to any known types of use the right to unrestrictedly make publicly available and publish, -irrespective of the medium including any editions and versions and grant simple or exclusive usage, exploitation or -adaptation rights to third parties. - -Spryker may reject, refuse to post or delete any Source Code for any or no reason, including, without limitation. - -From time to time, we may remove the Source Code permanently or temporarily, provided that even if we do remove such -Source Code, we shall have no obligation to cease our other uses of the Source Code as permitted above. - -You agree to be fully responsible for and to pay any and all royalties, fees, and any other monies owing any person or -entity by reason of any Source Code posted by you. - -Spryker respects the intellectual property of others, and requires that you do the same. Your postings and the Source Code -must not infringe any copyright, patent, trademark, trade secret or other proprietary rights or other rights of any person -or entity and you may not upload, embed, post, email, transmit or otherwise make available Source Code, software or any other -material that that infringes such rights. - -YOU GUARANTEE THAT: (I) YOU OWN THE SOURCE CODE POSTED BY YOU OR OTHERWISE HAVE THE RIGHT TO GRANT THE LICENSES AND RIGHTS -SET FORTH ABOVE, AND (II) THE POSTING OF YOUR SOURCE CODE DOES NOT VIOLATE THE PRIVACY RIGHTS, PUBLICITY RIGHTS, CONTRACT RIGHTS, -INTELLECTUAL PROPERTY OR ANY OTHER RIGHTS OF ANY PERSON OR ENTITY OR ANY APPLICABLE LAW. - -YOU AGREE TO INDEMNIFY AND HOLD SPRYKER, ITS SUBSIDIARIES, AND AFFILIATES, AND THEIR RESPECTIVE OFFICERS, AGENTS, PARTNERS -AND EMPLOYEES, HARMLESS FROM ANY LOSS, LIABILITY, COST, EXPENSE, CLAIM OR DEMAND, INCLUDING WITHOUT LIMITATION, REASONABLE -ATTORNEYS’ FEES, DUE OR RELATING TO OR ARISING OUT OF THE USE OF YOUR SOURCE CODE IN VIOLATION OF THIS AGREEMENT AND/OR -ARISING FROM A BREACH OF ANY TERMS OF THIS AGREEMENT AND/OR ANY BREACH OF YOUR REPRESENTATIONS AND WARRANTIES SET FORTH IN -THIS AGREEMENT AND/OR ARISING OUT OF OR RELATING TO ANY SOURCE CODE THAT YOU POST. - -This Agreement shall be governed by the laws of Germany to the exclusion of IPR (International Law) and the United Nations Convention -on Contracts for the International Sale of Goods (CISG). The parties consent to the jurisdiction of the courts in Berlin (Germany). - -This Agreement constitutes the entire agreement between you and us concerning Spryker’s use of the Source Code. This Agreement -supersedes any prior verbal understanding between the parties. This Agreement may be amended only in a writing signed by an authorized officer of Spryker. +SPRYKER - CONTRIBUTION AGREEMENT FOR PLATFORM CONTRIBUTIONS + +Spryker Systems GmbH, Heidestraße 9-10, 10557 Berlin, Germany (“Spryker”), and its affiliates invite you to contribute +to Spryker’s Software, including but not limited to with bug fixes, enhancements, additions or features +(each a “Platform Contribution”). For the purposes of this Agreement, the “Software” includes any software, +which is owned and made available by Spryker. Contributions can consist of source code, documentation and/or other +code-related elements. + +BY DISPLAYING, PUBLISHING, UPLOADING, PROMOTING OR OTHERWISE PROVIDING A PLATFORM CONTRIBUTION TO SPRYKER +(COLLECTIVELY, “SUBMITTING”), YOU AGREE TO THIS CONTRIBUTION AGREEMENT FOR PLATFORM CONTRIBUTIONS (THE “AGREEMENT”). + +Spryker grants you the right to use the Software for the purpose of developing and submitting Platform Contributions +to the Software and/or Spryker’s documentation subject to your compliance with this Agreement. +Under the license granted in this Agreement, you must not (i) use the Software to set up a production live system; +(ii) copy any part of the Software except to develop and provide a Platform Contribution or make one copy for back-up +purposes; (iii) distribute, disclose, market, rent, lease, or transfer the Software or act as a service bureau with +respect to the Software; (iv) export the Software or install it in multiple locations; (v) disclose any confidential +information provided by Spryker; (vi) modify or make derivative works of the Software beyond what you will submit to +Spryker as Platform Contribution; or (vii) allow others to make or obtain copies of the Software. + +You grant Spryker and its affiliates an irrevocable, perpetual, worldwide, royalty-free, non-exclusive, +unrestricted license and right to use, including to reproduce and store, disseminate and otherwise exploit, modify, +delete from, add to, create derivative works of, publicly perform, publicly display, reproduce, exchange parts +of a Platform Contribution or combine them with other code, use in data networks and distribute with or without +consideration and without limitations as to the number of items via all distribution channels (and to sublicense +the foregoing rights through multiple tiers of licensees) such Platform Contribution and any other copyright +protected material for any reason and in connection with advertising and promoting our software and/or Spryker’s +products in any media formats and through any channels now existing or developed in the future. +The granting of these rights covers any usage and exploitation rights for any unknown types of use as well as +with regard to any known types of use the right to unrestrictedly make publicly available and publish, +irrespective of the medium including any editions and versions and grant simple or exclusive usage, +exploitation or adaptation rights to third parties. + +Spryker may reject, refuse to post or delete any Platform Contribution for any or no reason, including, +without limitation. Spryker may or may not mention your name when publishing the Platform Contribution. +From time to time, Spryker may remove the Platform Contribution permanently or temporarily, provided that even +if Spryker does remove such Platform Contribution, Spryker shall have no obligation to cease its other uses of +the Platform Contribution as permitted above. +Spryker respects the intellectual property of others, and requires that you do the same. Your Platform Contributions +must not infringe any copyright, patent, trademark, trade secret or other proprietary rights or other rights of any +person or entity and you may not upload, embed, post, email, transmit or otherwise make available a Platform Contribution +or any other material that infringes such rights. +If you are submitting a Platform Contribution that includes licensed rights, you will inform Spryker of the name of +such third-party licensor, the third-party license as such and any restrictions you are aware of. +If you are submitting a Platform Contribution that was developed by you in the course of your work for your employer +or as a contractor, vendor or agent for another principal, you are responsible for obtaining permission from your +employer or such other principal. +You will not include a Platform Contribution containing code governed by a license with copyleft effect. You agree +to be fully responsible for and to pay any and all royalties, fees, and any other monies owed to any person or +entity for any rights in a Platform Contribution submitted by you. +YOU REPRESENT AND WARRANT THAT: (I) YOU OWN THE PLATFORM CONTRIBUTION POSTED BY YOU OR OTHERWISE ARE ENTITLED TO +GRANT THE LICENSES AND RIGHTS SET FORTH ABOVE, INCLUDING WHERE NECESSARY HAVE OBTAINED YOUR EMPLOYER’S OR OTHER +PRINCIPAL’S PERMISSION, AND (II) THE SUBMISSION OF YOUR PLATFORM CONTRIBUTION DOES NOT VIOLATE THE PRIVACY RIGHTS, +PUBLICITY RIGHTS, CONTRACT RIGHTS, INTELLECTUAL PROPERTY OR ANY OTHER RIGHTS OF ANY PERSON OR ENTITY OR ANY +APPLICABLE LAW. + +YOU AGREE TO INDEMNIFY AND HOLD SPRYKER AND ITS AFFILIATES, AND THEIR RESPECTIVE OFFICERS, AGENTS, PARTNERS AND EMPLOYEES, +HARMLESS FROM ANY LOSS, LIABILITY, COST, EXPENSE, CLAIM, OR DEMAND, INCLUDING WITHOUT LIMITATION, REASONABLE ATTORNEYS’ FEES, +DUE OR RELATING TO OR ARISING OUT OF THE USE OF THE YOUR PLATFORM CONTRIBUTION IN VIOLATION OF THIS AGREEMENT AND/OR +ARISING FROM A BREACH OF ANY TERMS OF THIS AGREEMENT AND/OR ANY BREACH OF YOUR REPRESENTATIONS AND WARRANTIES SET +FORTH IN THIS AGREEMENT AND/OR ARISING OUT OF OR RELATING TO ANY PLATFORM CONTRIBUTION THAT YOU SUBMIT. + +This Agreement is governed by the laws of Germany to the exclusion of its conflict of laws provisions and +the United Nations Convention on Contracts for the International Sale of Goods (CISG). The parties consent to the +jurisdiction of the courts in Berlin (Germany). + +This Agreement constitutes the entire agreement between the parties concerning the Platform Contributions submitted +by you. This Agreement supersedes any prior verbal understanding between the parties on the matter. This Agreement +may be amended only in a writing signed by an authorized officer of Spryker. From ebd24aa51c93a1e9a0c10918b1f85d1c98e53346 Mon Sep 17 00:00:00 2001 From: Dmytro Asieiev <32021063+dmiseev@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:55:57 +0300 Subject: [PATCH 296/304] DPIB-496: AI Feature integrations. (#11095) AI Feature integrations --- assets/Zed/sass/_action-buttons.scss | 9 +++++ assets/Zed/sass/_custom.scss | 22 ++++++++++++ assets/Zed/sass/_popover.scss | 54 ++++++++++++++++++++++++++++ assets/Zed/sass/main.scss | 1 + 4 files changed, 86 insertions(+) create mode 100644 assets/Zed/sass/_popover.scss diff --git a/assets/Zed/sass/_action-buttons.scss b/assets/Zed/sass/_action-buttons.scss index 4195cc1c..f26587ff 100644 --- a/assets/Zed/sass/_action-buttons.scss +++ b/assets/Zed/sass/_action-buttons.scss @@ -51,3 +51,12 @@ .btn-remove { @include coloredButton(#ed5565, #ffffff); } + +.btn-naked { + background: none; + border: none; + + &:is(:hover, :focus) { + opacity: 0.8; + } +} diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 059e078c..6f70b798 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -1908,3 +1908,25 @@ a.label { } } } + +.form-wrapper-clickable-affix:has(.select2), +.form-wrapper-clickable-affix:has(.form-control) { + position: relative; + + .form-control, + .select2-selection { + padding-right: 43px; + } + + .form-wrapper-clickable-affix__trigger { + position: absolute; + right: 10px; + bottom: 6px; + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + } +} diff --git a/assets/Zed/sass/_popover.scss b/assets/Zed/sass/_popover.scss new file mode 100644 index 00000000..ac511986 --- /dev/null +++ b/assets/Zed/sass/_popover.scss @@ -0,0 +1,54 @@ +.modal-popover { + padding: 0; + border: none; + opacity: 0; + transition: all 0.3s allow-discrete; + + .modal { + display: block; + } + + &:popover-open { + opacity: 1; + + @starting-style { + opacity: 0; + } + + &::backdrop { + opacity: 0.5; + + @starting-style { + opacity: 0; + } + } + } + + &::backdrop { + opacity: 0; + background-color: $black; + transition: all 0.3s allow-discrete; + } + + &:has(.modal-backdrop):popover-open::backdrop { + opacity: 0; + } + + .modal-backdrop { + opacity: 0.5; + cursor: auto; + } +} + +body:has(.modal-popover:popover-open) { + overflow: hidden; + + * { + pointer-events: none; + } + + .modal-popover, + .modal-popover * { + pointer-events: auto; + } +} diff --git a/assets/Zed/sass/main.scss b/assets/Zed/sass/main.scss index 5cd92fb2..510a740f 100644 --- a/assets/Zed/sass/main.scss +++ b/assets/Zed/sass/main.scss @@ -34,3 +34,4 @@ $icon-font-path: '../../fonts/bootstrap/'; @import 'data-tables'; @import 'wave-loader'; @import 'product-item'; +@import 'popover'; From 3d3479833b376cf25dcdb80d91779cd7054287aa Mon Sep 17 00:00:00 2001 From: Olha Livitchuk <77281282+olhalivitchuk@users.noreply.github.com> Date: Fri, 20 Sep 2024 16:38:30 +0200 Subject: [PATCH 297/304] FRW-8801 Switched PHP version from 8.1 to 8.2 by default, enabled support of PHP 8.3. (#11088) FRW-8801 Switched PHP version from 8.1 to 8.2 by default, enabled support of PHP 8.3. --- .github/workflows/ci.yml | 4 ++-- README.md | 2 +- composer.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e851193f..5d6b48fd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '8.2' + php-version: '8.3' extensions: mbstring, intl, bcmath coverage: none @@ -41,7 +41,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '8.1' + php-version: '8.2' extensions: mbstring, intl, bcmath coverage: none diff --git a/README.md b/README.md index c7d347a2..cd11d722 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Gui Module [![Latest Stable Version](https://poser.pugx.org/spryker/gui/v/stable.svg)](https://packagist.org/packages/spryker/gui) -[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.1-8892BF.svg)](https://php.net/) +[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.2-8892BF.svg)](https://php.net/) Gui provides the main logic for GUI functionality across all modules. diff --git a/composer.json b/composer.json index 112144b1..cb1c4207 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "description": "Gui module", "license": "proprietary", "require": { - "php": ">=8.1", + "php": ">=8.2", "spryker/form-extension": "^1.0.0", "spryker/kernel": "^3.52.0", "spryker/laminas": "^1.0.0", From 135cd395fd7b7d114dfb8eb42c87584e66b780e9 Mon Sep 17 00:00:00 2001 From: Lena Degtyarenko Date: Wed, 2 Oct 2024 15:35:23 +0200 Subject: [PATCH 298/304] CC-33992: Fixed keyboard accessibility (#11063) Fixed keyboard accessibility --- assets/Zed/js/modules/init.js | 4 ++++ assets/Zed/sass/_custom.scss | 6 ++++++ .../Partials/backward-compatible-breadcrumb.twig | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/assets/Zed/js/modules/init.js b/assets/Zed/js/modules/init.js index 1a079499..b94c5ff1 100644 --- a/assets/Zed/js/modules/init.js +++ b/assets/Zed/js/modules/init.js @@ -154,6 +154,10 @@ $(document).ready(function () { }, 1000); }); } + + document.querySelectorAll('.paginate_button.disabled > a').forEach((element) => { + element.setAttribute('tabindex', '-1'); + }); }); /* Draw data tables without search */ diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 6f70b798..620b386a 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -962,6 +962,12 @@ a.label { } } +.navbar-top-links li a:focus { + color: $green-dark; + outline: 1px solid $green-base; + outline-offset: 3px; +} + .pagination { display: inline-flex; vertical-align: top; diff --git a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig index 003fe177..720cf548 100644 --- a/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig +++ b/src/Spryker/Zed/Gui/Presentation/Partials/backward-compatible-breadcrumb.twig @@ -4,7 +4,7 @@ {% for breadcrumbItem in breadcrumbs %}
  • {% if breadcrumbItem.uri is not empty %} - + {{ breadcrumbItem.label | trans }} {% else %} From 995073b9a19c561b7dcf7625c5f601aefcf00bdd Mon Sep 17 00:00:00 2001 From: Lena Degtyarenko Date: Thu, 3 Oct 2024 11:02:33 +0200 Subject: [PATCH 299/304] CC-33993 Provided distinguishable colors. (#11091) Provided distinguishable colors. --- assets/Inspinia/css/style.css | 15 +- assets/Zed/img/sort-arrow-down@2x.png | Bin 769 -> 522 bytes assets/Zed/img/sort-arrow-up@2x.png | Bin 776 -> 522 bytes assets/Zed/sass/_custom.scss | 6 +- assets/Zed/sass/_variables.scss | 8 +- data/translation/Zed/de_DE.csv | 2 + data/translation/Zed/en_US.csv | 2 + .../Zed/Gui/Presentation/Layout/layout.twig | 206 ++++++++---------- .../Zed/Gui/Presentation/Partials/menu.twig | 2 +- 9 files changed, 116 insertions(+), 125 deletions(-) diff --git a/assets/Inspinia/css/style.css b/assets/Inspinia/css/style.css index 3103182b..c85461f0 100755 --- a/assets/Inspinia/css/style.css +++ b/assets/Inspinia/css/style.css @@ -1,11 +1,16 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. * * INSPINIA - Responsive Admin Theme * version 2.7.1 */ +:root { + --grey-dark: #646464; + --green-default: #11856e; +} + h1, h2, h3, @@ -44,7 +49,7 @@ h5 { padding: 14px 20px 14px 25px; } .nav.navbar-right > li > a { - color: #999c9e; + color: var(--grey-dark); } .navbar-default .nav > li > a:hover, .navbar-default .nav > li > a:focus { @@ -4179,7 +4184,7 @@ table.table-mail tr td { color: #ed5565; } .text-muted { - color: #888888; + color: var(--grey-dark); } .text-white { color: #ffffff; @@ -5328,7 +5333,7 @@ dd.project-people { } .message-date { font-size: 10px; - color: #888888; + color: var(--grey-dark); } .message-content { display: block; diff --git a/assets/Zed/img/sort-arrow-down@2x.png b/assets/Zed/img/sort-arrow-down@2x.png index 10a63f9686f883f30da55b8b73aa220fc9059222..a7b6178c947ce172ceb3734862556045994c9a3b 100644 GIT binary patch literal 522 zcmV+l0`>igP)7M`R;bmE}s!o_f7Y1S-!11jSCbf8&?$+va1pe~v_kcNJaiXEKJ8nc3;&BB+@l z5lx|#&F(eD*ixIE8Z(majkAgnR2K=O+h|TM1!}TH!mgDGfj9b$FrQB`%*fqau!@rUVL7QEoCf861AG^+!?^eMRsaA1 M07*qoM6N<$f-ei&xBvhE literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz1!3HFCgzU0`6k~CayA#8@b22Z19GBDx&op0O z1}z|)gMqO=v}=+#MA8JF;z9!{J5l9rI%&zd;dCQR+(oelK(FC-tTkecE8Kg${B59 zA`eTPdH(sgZA9Z&Bhl`owjsv%b8k%1oa)8A_s=>9rB7F1Uo&Rt5<2+s)%si9>oW5K z!V~o3clbLz7CNvnz0~%9z`Ibv&_x$E?W&ucGb8M&q^(69LTKlQ`1$CEcc)c33P=ASKWD*ah5p~=u8 z;jDDq#&Av%;n?-j=YP5=`!(O5b-m}xwbx0X>|SQiH<>(WBgKT_6qrG5I zMtK33fW21DJ(W0ZiKeS{XC8hpPP}Y3{l{{X7rmE?6c6z;<(A~;Y*L!??R1Py?NXj2 zlkNn3=gO(7wNOlqZb%BYoE*jS;qD9OioHczd!KyS?yqt5)Qu}T$rb+Z{>y#Lvn^cwL74ym diff --git a/assets/Zed/img/sort-arrow-up@2x.png b/assets/Zed/img/sort-arrow-up@2x.png index 19f0aa38558bb4449efaa11652d23d61fb6107e2..d03809832de0ba8496ecfef11695f817eafcbe3c 100644 GIT binary patch literal 522 zcmV+l0`>igP)fUV{k7+Ox%UF3kl3h5{7TBhWKdBQXjbE67ai4Z_3fx!k^~cI z=9b+gelch_HaBi^zkYhf{{3PhB<&Us#P_Gs{aUcSdij!pZbGICJ12*48{I>Q*Y0r5PX1RX_@tIOfY zqb|l_%W)=+uyFjlJ9P=N3QxwB1hwL9xYVZ^3TELXub1?75BE7 zyKa%XAXg<^BG?iz(MwP`YOhLepucOEXI9zgIVU%rPBXsy=ff)}qx^fn>+G%V?=h8p zJkk@B^8feG4Dld^xi0K>&)Ukjt*&$k5Sc2gEkFMz*QW~$9+^CwVt;$;^9BpP2G7$b z#hHf_9OpSC{EL06r{uGX;mGCt3rgrtx#Nj2RV|HJwWNdF73C{a)S^iG>c?o$K}9h*v*vnV`Gi&5L85GuPj%IW5^G z?YcqC`XCE~p!)?Q@#JGp9$Z`UxBP0_?tV&}qc3pv;q`MqSXq^~RxYmU-~V+@@QW%J z3*|k1`zqUh_Z&C>Atz^ba-W-1Uf#StHttEsHiyW*nr~^aA<=qY%l$oEuN2exHVLha z6rZqY_usy>&IS{Y!!k*#o-gZH9T!%JzjlqU`DVm3+Z*2`za4rsUx{h4`wJJPjZF>Q zduOCZ9Td>fI`Qzr2Un*DlYMUZ`c>qzZLHRp>J4LKzru6>bAKK~T<-^-6**o8F86Yu zRoLv~TafazD?83P;La7JS)M9F(tYPxyIR(%PyeC4&hn_AvQSm%^)38yvD^V7UqW7K zF8tCLuG0PU;e9)cd2_yBU$RyyYDGXy?a||F?kAi->0RqIJ8xT;|AlQ%f#QeuKD?mQ zA68Qp*ZlOuiFw{eGcI^FE)wW;shg}=+SP7c6`)_q&gxlpUXTx0NH#;SoM(c>3|C;!>{B->6;v*hf+(|~DROspI=d#Wzp$Py# C+e$+K diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 620b386a..01796ba2 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -225,7 +225,7 @@ body.login { label { text-transform: uppercase; - color: $grey-base; + color: $grey-dark; font-weight: 500; &:after { @@ -631,7 +631,7 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { } & > a { - color: $green-default; + color: $green-dark; background-color: $grey-lighter; .fa { color: $green-default !important; @@ -1482,7 +1482,7 @@ a.label { border-radius: 0; background: transparent; padding: 0; - color: #999c9e; + color: $grey-dark; border: none; box-shadow: none; line-height: 1; diff --git a/assets/Zed/sass/_variables.scss b/assets/Zed/sass/_variables.scss index b18a16cd..060c66e9 100644 --- a/assets/Zed/sass/_variables.scss +++ b/assets/Zed/sass/_variables.scss @@ -5,13 +5,13 @@ $zed-logo: url(https://static.spryker.com/logo.svg) !default; -$green-default: #17b497; -$green-dark: #138671; +$green-default: #11856e; +$green-dark: #127f6b; $green-base: #1bbea0; $green-light: #a0e1d5; $green-lighter: #f1f8f7; -$grey-dark: #71747c; +$grey-dark: #646464; $grey-base: #9ea1a7; $grey-light: #f1f1f1; $grey-light2: #efeeee; @@ -21,7 +21,7 @@ $grey2: #2b2c2d; $grey3: #eee; $red-dark: #b82124; -$red-default: #f2392e; +$red-default: #cd1900; $red-lighter: #ff3b21; $red-light: #f9d3ce; $red-lightest: #ebccd1; diff --git a/data/translation/Zed/de_DE.csv b/data/translation/Zed/de_DE.csv index 1f606e71..081dcb2c 100644 --- a/data/translation/Zed/de_DE.csv +++ b/data/translation/Zed/de_DE.csv @@ -7,3 +7,5 @@ Previous,Vorherige Welcome,Willkommen Settings,Einstellungen "Log out",Abmelden +"Company logo",Firmenlogo +"Minimize/Maximize navigation bar","Navigationsleiste minimieren/maximieren" diff --git a/data/translation/Zed/en_US.csv b/data/translation/Zed/en_US.csv index d9e04bf3..4cb93f97 100644 --- a/data/translation/Zed/en_US.csv +++ b/data/translation/Zed/en_US.csv @@ -7,3 +7,5 @@ Previous,Previous Welcome,Welcome Settings,Settings "Log out","Log out" +"Company logo","Company logo" +"Minimize/Maximize navigation bar","Minimize/Maximize navigation bar" diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index eb626280..ff319d1c 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -1,125 +1,107 @@ - - - - - - - {% block head_title %}{% if title is defined %}{{ title | trans }}{% endif %}{% endblock %} - - {% block head_css %} - - - {% endblock %} - - - - -
    - - {% block body_menu %} - {% if app.twig.getFunction('navigation') != false %} - {% include '@Gui/Partials/navigation.twig' %} - {% else %} - {% include '@Gui/Partials/menu.twig' %} - {% endif %} - {% endblock %} + + + + + + {% block head_title %}{% if title is defined %}{{ title | trans }}{% endif %}{% endblock %} + + {% block head_css %} + + + {% endblock %} + + +
    + {% block body_menu %} + {% if app.twig.getFunction('navigation') != false %} + {% include '@Gui/Partials/navigation.twig' %} + {% else %} + {% include '@Gui/Partials/menu.twig' %} + {% endif %} + {% endblock %} -
    -
    - -
    -
    -
    -

    {% block section_title %}{% if title is defined %}{{ title|trans }}{% endif %}{% endblock %}

    -
    -
    -
    - {% block action %} - {# add here only links with classes "btn btn-sm btn-{color}" #} - {# Example: Back #} - {% endblock %} +
    -
    -
    - {% if app.twig.getFunction('breadcrumb') != false %} - {% include '@Gui/Partials/breadcrumb.twig' %} - {% else %} - {% include '@Gui/Partials/backward-compatible-breadcrumb.twig' %} - {% endif %} -
    -
    - -
    - - {% include '@Messenger/Partials/flash-messages.twig' %} - - {% block content -%}{%- endblock %} +
    +
    +

    {% block section_title %}{% if title is defined %}{{ title|trans }}{% endif %}{% endblock %}

    +
    +
    +
    + {% block action %} + {# add here only links with classes "btn btn-sm btn-{color}" #} + {# Example: Back #} + {% endblock %} +
    +
    +
    + {% if app.twig.getFunction('breadcrumb') != false %} + {% include '@Gui/Partials/breadcrumb.twig' %} + {% else %} + {% include '@Gui/Partials/backward-compatible-breadcrumb.twig' %} + {% endif %} +
    +
    +
    + {% include '@Messenger/Partials/flash-messages.twig' %} -
    -
    -
    -
    - -
  • xi&%tq{sTM(17QQXT22Zv@h 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�r(aJ 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 d3)lz{Xfc9M412p diff --git a/assets/Inspinia/fonts/OFL.txt b/assets/Inspinia/fonts/OFL.txt deleted file mode 100755 index 98383e3d..00000000 --- a/assets/Inspinia/fonts/OFL.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2010-2014 by tyPoland Lukasz Dziedzic (team@latofonts.com) with Reserved Font Name "Lato" - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/Inspinia/inspinia.js b/assets/Inspinia/inspinia.js index 825bd8da..e9b437ed 100755 --- a/assets/Inspinia/inspinia.js +++ b/assets/Inspinia/inspinia.js @@ -23,7 +23,7 @@ $(document).ready(function () { var button = $(this).find('i'); var content = ibox.children('.ibox-content'); content.slideToggle(200); - button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down'); + button.toggleClass('fa-minus').toggleClass('fa-plus'); ibox.toggleClass('').toggleClass('border-bottom'); setTimeout(function () { ibox.resize(); diff --git a/assets/Zed/img/sort-arrow-down.svg b/assets/Zed/img/sort-arrow-down.svg new file mode 100644 index 00000000..69d24fac --- /dev/null +++ b/assets/Zed/img/sort-arrow-down.svg @@ -0,0 +1 @@ + diff --git a/assets/Zed/img/sort-arrow-down@2x.png b/assets/Zed/img/sort-arrow-down@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..10a63f9686f883f30da55b8b73aa220fc9059222 GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz1!3HFCgzU0`6k~CayA#8@b22Z19GBDx&op0O z1}z|)gMqO=v}=+#MA8JF;z9!{J5l9rI%&zd;dCQR+(oelK(FC-tTkecE8Kg${B59 zA`eTPdH(sgZA9Z&Bhl`owjsv%b8k%1oa)8A_s=>9rB7F1Uo&Rt5<2+s)%si9>oW5K z!V~o3clbLz7CNvnz0~%9z`Ibv&_x$E?W&ucGb8M&q^(69LTKlQ`1$CEcc)c33P=ASKWD*ah5p~=u8 z;jDDq#&Av%;n?-j=YP5=`!(O5b-m}xwbx0X>|SQiH<>(WBgKT_6qrG5I zMtK33fW21DJ(W0ZiKeS{XC8hpPP}Y3{l{{X7rmE?6c6z;<(A~;Y*L!??R1Py?NXj2 zlkNn3=gO(7wNOlqZb%BYoE*jS;qD9OioHczd!KyS?yqt5)Qu}T$rb+Z{>y#Lvn^cwL74ym literal 0 HcmV?d00001 diff --git a/assets/Zed/img/sort-arrow-up.svg b/assets/Zed/img/sort-arrow-up.svg new file mode 100644 index 00000000..f158db57 --- /dev/null +++ b/assets/Zed/img/sort-arrow-up.svg @@ -0,0 +1,37 @@ + + + Sort-arrow-up + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/Zed/img/sort-arrow-up@2x.png b/assets/Zed/img/sort-arrow-up@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..19f0aa38558bb4449efaa11652d23d61fb6107e2 GIT binary patch literal 776 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz1!3HFCgzU0`6k~CayA#8@b22Z19GBDx&op0O z1}z|)gMqOFjlJ9P=N3QxwB1hwL9xYVZ^3TELXub1?75BE7 zyKa%XAXg<^BG?iz(MwP`YOhLepucOEXI9zgIVU%rPBXsy=ff)}qx^fn>+G%V?=h8p zJkk@B^8feG4Dld^xi0K>&)Ukjt*&$k5Sc2gEkFMz*QW~$9+^CwVt;$;^9BpP2G7$b z#hHf_9OpSC{EL06r{uGX;mGCt3rgrtx#Nj2RV|HJwWNdF73C{a)S^iG>c?o$K}9h*v*vnV`Gi&5L85GuPj%IW5^G z?YcqC`XCE~p!)?Q@#JGp9$Z`UxBP0_?tV&}qc3pv;q`MqSXq^~RxYmU-~V+@@QW%J z3*|k1`zqUh_Z&C>Atz^ba-W-1Uf#StHttEsHiyW*nr~^aA<=qY%l$oEuN2exHVLha z6rZqY_usy>&IS{Y!!k*#o-gZH9T!%JzjlqU`DVm3+Z*2`za4rsUx{h4`wJJPjZF>Q zduOCZ9Td>fI`Qzr2Un*DlYMUZ`c>qzZLHRp>J4LKzru6>bAKK~T<-^-6**o8F86Yu zRoLv~TafazD?83P;La7JS)M9F(tYPxyIR(%PyeC4&hn_AvQSm%^)38yvD^V7UqW7K zF8tCLuG0PU;e9)cd2_yBU$RyyYDGXy?a||F?kAi->0RqIJ8xT;|AlQ%f#QeuKD?mQ zA68Qp*ZlOuiFw{eGcI^FE)wW;shg}=+SP7c6`)_q&gxlpUXTx0NH#;SoM(c>3|C;!>{B->6;v*hf+(|~DROspI=d#Wzp$Py# C+e$+K literal 0 HcmV?d00001 diff --git a/assets/Zed/img/sort.svg b/assets/Zed/img/sort.svg new file mode 100644 index 00000000..fd4875af --- /dev/null +++ b/assets/Zed/img/sort.svg @@ -0,0 +1,36 @@ + + + Sort + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/Zed/img/sort@2x.png b/assets/Zed/img/sort@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a06c18e739d300668026c8a4184a83442b01ac8d GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz1!3HFCgzU0`6k~CayA#8@b22Z19GBDx&op0O z1}z|)gMqObcQpVN|NHGDh(Jod#w{403;0 zZ2k4?h(Hiqq0;Sb{M%(d_O(PgS(j`K*s)9Y>BB(Brp(;qYYmSWcT{9u&%JpzEx7-a z3sZF8Z;pv)e=r<59dEW>?sxT3r7u&%*W8j-Ebx4oIOp)+BF*nEqQOkQtE)I!tDW08 zr*<-ySR9{OWcYuZy&c0Ao!?L76|YGiUi|mbJzIv`X}6BFMz`)fzxR2g%&D%jmfd3P zlNnCs3f(<7>t=>bAk%j(tyd>*gsfL6>aCddx9mh#_PlfThqft;tu$S>_rL~Y+n1s* zzkazZqZhq(x6gy%_XTTa9^UJvxt-#%iq{Q2yUyOEijVS9%3 zq@$`oBZ@Y;lz(p*Nc>}1sp`CG*WT$~OUqs?@?vgYTTvdMXv;Zo##nhWOa#Os`SN%0iU42391cw{nL>a(dL)o}X*xNgdu*e>(o%-}4*JHZ17{r9MwrKbLh*2~7Z1zDleB literal 0 HcmV?d00001 diff --git a/assets/Zed/js/modules/libs/data-table.js b/assets/Zed/js/modules/libs/data-table.js index e384b949..99afaf5c 100644 --- a/assets/Zed/js/modules/libs/data-table.js +++ b/assets/Zed/js/modules/libs/data-table.js @@ -14,10 +14,20 @@ function getTranslation(locale) { var locale = getLocale(); +var translationObj = getTranslation(locale); + +if (translationObj.sSearch) { + translationObj.searchPlaceholder = translationObj.sSearch.replace(/\ |:/gi, ''); +} + var defaultConfiguration = { scrollX: 'auto', autoWidth: false, - language: getTranslation(locale), + language: translationObj, + dom: + "<'row'<'col-sm-12 col-md-6'i><'col-sm-12 col-md-6'f>>" + + "<'row'<'col-sm-12'tr>>" + + "<'alt-row'<'alt-row__left'l><'alt-row__center'p>>", }; var noSearchConfiguration = { diff --git a/assets/Zed/package-lock.json b/assets/Zed/package-lock.json index 42780343..50c29fa3 100644 --- a/assets/Zed/package-lock.json +++ b/assets/Zed/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@fortawesome/fontawesome-free": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz", + "integrity": "sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w==" + }, "@spryker/nestable": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@spryker/nestable/-/nestable-1.1.1.tgz", @@ -103,11 +108,6 @@ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=" }, - "font-awesome": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", - "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" - }, "get-root-node-polyfill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-root-node-polyfill/-/get-root-node-polyfill-1.0.0.tgz", diff --git a/assets/Zed/package.json b/assets/Zed/package.json index 19bdec2a..cf9fdca2 100644 --- a/assets/Zed/package.json +++ b/assets/Zed/package.json @@ -3,6 +3,7 @@ "name": "spryker-zed-gui", "version": "1.0.0", "dependencies": { + "@fortawesome/fontawesome-free": "~5.15.3", "@spryker/nestable": "~1.1.1", "animate.css": "~3.5.1", "bootstrap-sass": "~3.4.1", @@ -16,7 +17,6 @@ "datatables.net-select": "~1.3.0", "datatables.net-select-bs": "~1.3.0", "es6-promise": "~4.0.5", - "font-awesome": "~4.7.0", "get-root-node-polyfill": "~1.0.0", "jquery": "~3.5.1", "jquery-migrate": "~3.0.0", diff --git a/assets/Zed/sass/_custom.scss b/assets/Zed/sass/_custom.scss index 48fc1ac4..248b2beb 100644 --- a/assets/Zed/sass/_custom.scss +++ b/assets/Zed/sass/_custom.scss @@ -3,11 +3,105 @@ * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ +/* General styles */ +body { + font-family: $main-font; + background-color: $grey-lighter; +} + +a { + color: $green-default; + transition: color 0.2s linear, background-color 0.2s linear, border-color 0.2s linear; + + &:hover { + color: $green-dark; + } + + &:focus { + color: $green-dark; + outline-color: $green-base; + outline-width: 1px; + outline-offset: 3px; + } +} + +.page-heading { + h2, + h3 { + color: $ink-base; + font-size: 30px; + font-weight: 600; + letter-spacing: 0.2px; + line-height: 40px; + } +} + +label { + text-transform: uppercase; + margin: 0 0 7px; + color: $ink-base; + font-weight: 500; + font-size: 12px; + line-height: 1.25; + + &.required { + &::after { + content: ' *'; + } + } + + .form-group & { + margin: 7px 0; + } + + .table-vat & { + margin-top: 0; + } +} + +input, +select, +textarea { + font-family: $main-font; + font-weight: 500; +} + +select { + padding: 8px 30px 8px 12px; + appearance: none; + -webkit-text-size-adjust: none; + background: $white #{calc(100% - 10px) 50% / 12px auto} no-repeat url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzIwcHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCAzMjAgNTEyIiB2ZXJzaW9uPSIxLjEiPjxwYXRoIGZpbGw9IiM5ZWExYTciIGQ9Ik0xNDMgMzUyLjNMNyAyMTYuM2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsMjIuNi0yMi42YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDk2LjQgOTYuNCA5Ni40LTk2LjRjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMjIuNiAyMi42YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0xMzYgMTM2Yy05LjIgOS40LTI0LjQgOS40LTMzLjggMHoiPjwvcGF0aD48L3N2Zz4=') !important; + + &::-ms-expand { + display: none; + } + + &:focus { + outline-width: 0; + } + + &.input-sm { + height: 38px; + line-height: 18px; + } +} + +textarea { + &.form-control { + height: 95px; + min-height: 95px; + } +} + +#wrapper { + position: relative; +} + .zed-logo { display: block; - width: 165px; - height: 159px; - background-image: $zed-logo; + height: 50px; + background: center/contain no-repeat + url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTg5cHgiIGhlaWdodD0iNzdweCIgdmlld0JveD0iMCAwIDE4OSA3NyIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNjIgKDkxMzkwKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5sb2dvPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9Im5hdmlnYXRpb24iIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJuYXZpZ2F0aW9uLS8tZXhwYW5kZWQtLy1zdWJtZW51cy1jb2xsYXBzZWQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMS4wMDAwMDAsIC0xMC4wMDAwMDApIiBmaWxsPSIjMUQxRDFCIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgICAgICAgICA8ZyBpZD0ibG9nbyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzEuMDAwMDAwLCAxMC4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45NjI0Mzc3LDcxLjk2NzQwNjEgQzI2Ljc4NDI2NTksNzIuMDk2MTc3NSAyNi41Njg4NjQzLDcyLjIzMDIwNDggMjYuMzQ4MTQ0LDcyLjM4MjYyOCBDMjYuMTI4NDAwNSw3Mi41MjczMjU3IDI1LjkxNzkxNjIsNzIuNjg1MzA2IDI1LjcxNzg5NDcsNzIuODU1NjY1NSBDMjUuNTM0MTgxMyw3My4wMDYxODA4IDI1LjM4MDAzOTYsNzMuMTg4Nzk2MSAyNS4yNjMxNTc5LDczLjM5NDQwMjcgQzI1LjE2MjcxMzIsNzMuNTg1MjcwNiAyNS4xMzYyMzU3LDczLjgwNTgxMTYgMjUuMTg4Njk4MSw3NC4wMTQ2MDc1IEMyNS4xODg2OTgxLDc0LjA1NjY1NTMgMjUuMjA5OTcyMyw3NC4wOTM0NDcxIDI1LjIyMDYwOTQsNzQuMTMyODY2OSBMMjUuMjYwNDk4Niw3NC4yNDU4NzAzIEwyNS4zMDU3MDY0LDc0LjM1ODg3MzcgTDI1LjM1MzU3MzQsNzQuNDY5MjQ5MSBDMjUuMjA5OTcyMyw3NC42Nzk0ODgxIDI1LjA4NzY0NTQsNzQuODk3NjEwOSAyNC45Njc5Nzc4LDc1LjA5OTk2NTkgQzI0Ljg2MDg4MzEsNzUuMjkyNTU1NSAyNC43MzgxNTM3LDc1LjQ3NjI0MTIgMjQuNjAwOTk3Miw3NS42NDkyMTUgQzI0LjQ3MzE4MjYsNzUuODA4MTE0NSAyNC4zMTE1ODU1LDc1LjkzNzMwNjQgMjQuMTI3NjQ1NCw3Ni4wMjc2NDUxIEMyMy45MDk2MjMzLDc2LjEyMjk0MTEgMjMuNjcxNDI2LDc2LjE2NDQyODIgMjMuNDMzNTczNCw3Ni4xNDg1MzI0IEMyMy4xNjIzNjkzLDc2LjEzNzE1MDcgMjIuODkzOTg3MSw3Ni4wODk0MTA0IDIyLjYzNTc4OTUsNzYuMDA2NjIxMiBDMjIuMzc5OTM4Niw3NS45MjQ1NjcyIDIyLjEzMzE0MjMsNzUuODE3MTQ5MSAyMS44OTkxNjksNzUuNjg2MDA2OCBDMjEuNjU1MzQzNiw3NS41NDg4MjU4IDIxLjQyMDgyOTQsNzUuMzk2MDc4NiAyMS4xOTcxMTkxLDc1LjIyODczNzIgQzIwLjk2ODQyMTEsNzUuMDYwNTQ2MSAyMC43NDIzODIzLDc0Ljg3OTIxNSAyMC41MjQzMjEzLDc0LjcwMzEzOTkgQzIwLjUyNDMyMTMsNzQuNjc0MjMyMSAyMC41MjQzMjEzLDc0LjY0Nzk1MjIgMjAuNTA1NzA2NCw3NC42MjE2NzI0IEMyMC40ODcwOTE0LDc0LjU5NTM5MjUgMjAuNTA1NzA2NCw3NC41NjkxMTI2IDIwLjQ4NzA5MTQsNzQuNTQwMjA0OCBDMjAuNDY4NDc2NSw3NC41MTEyOTY5IDIwLjQ4NzA5MTQsNzQuNDg3NjQ1MSAyMC40NjU4MTcyLDc0LjQ1ODczNzIgQzIwLjQ0NDU0MjksNzQuNDI5ODI5NCAyMC40NDcyMDIyLDc0LjQwMzU0OTUgMjAuNDQxODgzNyw3NC4zNzcyNjk2IEMyMC4zNzg2MzYyLDc0LjE4MjM3NzIgMjAuMjg5MTk0NCw3My45OTY3NTk3IDIwLjE3NTk1NTcsNzMuODI1MzkyNSBDMjAuMDU3MTQ5NSw3My42NTgzMjI1IDE5LjkyMDc2NSw3My41MDQxNjI3IDE5Ljc2OTA4NTksNzMuMzY1NDk0OSBDMTkuNjE1OTQ0Niw3My4yMjU5NDEgMTkuNDUzMzUxNCw3My4wOTY4NzAyIDE5LjI4MjQzNzcsNzIuOTc5MTgwOSBDMTkuMTEyMjQzOCw3Mi44NjM1NDk1IDE4LjkzNDA3Miw3Mi43NTMxNzQxIDE4Ljc1MDU4MTcsNzIuNjUzMzEwNiBDMTguNzUxNDc0NCw3Mi42NTg1Mjk1IDE4Ljc1MTQ3NDQsNzIuNjYzODU5NSAxOC43NTA1ODE3LDcyLjY2OTA3ODUgTDE4Ljc1MDU4MTcsNzIuNjg0ODQ2NCBMMTguNzUwNTgxNyw3Mi43MDA2MTQzIEwxOC43NTA1ODE3LDcyLjcxNjM4MjMgTDE4Ljc3NzE3NDUsNzIuODEzNjE3NyBDMTguNzc3MTc0NSw3Mi44NDUxNTM2IDE4Ljc5NTc4OTUsNzIuODc2Njg5NCAxOC44MDY0MjY2LDcyLjkxMDg1MzIgQzE4LjgxNzA2MzcsNzIuOTQ1MDE3MSAxOC44MjUwNDE2LDcyLjk3NjU1MjkgMTguODM1Njc4Nyw3My4wMTA3MTY3IEMxOC44NDYzMTU4LDczLjA0NDg4MDUgMTguODU2OTUyOSw3My4wNzY0MTY0IDE4Ljg3MDI0OTMsNzMuMTEwNTgwMiBDMTkuMDY2OTM3MSw3My42MzUyNzI0IDE5LjMzOTIxNyw3NC4xMjkxNjgxIDE5LjY3ODY3MDQsNzQuNTc2OTk2NiBDMTkuOTk3Njc5Myw3NS4wMTk2MzEyIDIwLjM3NDA3NzIsNzUuNDE4OTg5NCAyMC43OTgyMjcxLDc1Ljc2NDg0NjQgQzIxLjIxMTU3MzUsNzYuMTAzMTQ1MiAyMS42NzA3NTU5LDc2LjM4MjY2NTkgMjIuMTYyNDM3Nyw3Ni41OTUyOTAxIEMyMi42NDQ2MDg0LDc2LjgwNTI1NDcgMjMuMTYwMzg1Myw3Ni45Mjk3OTA1IDIzLjY4NjIwNSw3Ni45NjMyMDgyIEMyNC4xOTI2NDEsNzYuOTk1MzQ0MiAyNC42OTk3MDc4LDc2LjkxMDc3OCAyNS4xNjc0MjM4LDc2LjcxNjE3NzUgQzI1LjYzMTE5NDYsNzYuNTE3OTk1MiAyNi4wNDExNzAxLDc2LjIxNDU4MiAyNi4zNjQwOTk3LDc1LjgzMDU0NjEgQzI2LjcxNTQxODEsNzUuNDExMDEwMSAyNi45NjQ2ODkyLDc0LjkxNzQzNTUgMjcuMDkyNzQyNCw3NC4zODc3ODE2IEMyNy4yMzgxMjEzLDczLjc3NTQ5OTEgMjcuMjQyNjY1LDczLjEzODc4NzEgMjcuMTA2MDM4OCw3Mi41MjQ1MzkyIEwyNi45NzA0MTU1LDcxLjk2NzQwNjEiIGlkPSJQYXRoIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNi4wNjU4MTcxNyw0Ni4xMzk1NTYzIEw1LjkwMDk0MTgzLDQ2LjIxNTc2NzkgTDUuNzM4NzI1NzYsNDYuMjk5ODYzNSBMNS41NzY1MDk3LDQ2LjM5MTg0MyBMNS40MTY5NTI5MSw0Ni40OTQzMzQ1IEM1LjEyMTc3Mjg1LDQ2LjY4NjE3NzUgNC44NDc4NjcwNCw0Ni44NzUzOTI1IDQuNTg5OTE2OSw0Ny4wNzc3NDc0IEM0LjMzMjQ0NDM2LDQ3LjI3NTU5ODMgNC4wOTE0NDk2LDQ3LjQ5MzU0NDMgMy44NjkyNTIwOCw0Ny43Mjk0ODgxIEMzLjYzMDM4OTcyLDQ3Ljk4MzgyNTkgMy40MTY2NzU0MSw0OC4yNjAxNDUxIDMuMjMxMDI0OTMsNDguNTU0Njc1OCBDMy4wMTA1Mjg3Miw0OC45MDIxMTk2IDIuODE5MzAzMjMsNDkuMjY2ODg1NyAyLjY1OTI3OTc4LDQ5LjY0NTI5MDEgQzMuMTY0NzQxMzcsNDkuNTc1NDEzOSAzLjY3NzU4NTUsNDkuNTc1NDEzOSA0LjE4MzA0NzA5LDQ5LjY0NTI5MDEgQzQuNzIxMzg2MTgsNDkuNzE5MTIxOSA1LjI0ODM5MzE2LDQ5Ljg1ODU5MTggNS43NTIwMjIxNiw1MC4wNjA1MTE5IEM2LjMxMDQ1NzUxLDUwLjI4NTM1MjcgNi44NDQ5MzMwNCw1MC41NjQ0MTEgNy4zNDc1OTAwMyw1MC44OTM1ODM2IEM3LjkxMTY2MDIxLDUxLjI2NjgzNzggOC40NDUxNjAxNyw1MS42ODMzNDMxIDguOTQzMTU3ODksNTIuMTM5MjQ5MSBMNi44MTU3MzQwNyw0NS44OTI1MjU2IEw2LjYyNDI2NTkzLDQ1LjkzOTgyOTQgTDYuNDM1NDU3MDYsNDUuOTk1MDE3MSBMNi4yNDY2NDgyLDQ2LjA2MDcxNjcgTDYuMDYwNDk4NjEsNDYuMTM2OTI4MyIgaWQ9IlBhdGgiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik03Ljc5NzAwODMxLDQ1LjgwMDU0NjEgTDkuODk1MTgwMDYsNTEuODgxNzA2NSBMMTQuNTU2ODk3NSw1MS45NTAwMzQxIEMxNC4xMDQxNTYzLDUxLjA0NzE1NzUgMTMuNTgwNDQ0Nyw1MC4xODA3Njg2IDEyLjk5MDU4MTcsNDkuMzU4ODM5NiBDMTIuNDk0NTExNSw0OC42NjQ4NTAzIDExLjkyNjgwOSw0OC4wMjM2ODIzIDExLjI5NjYyMDUsNDcuNDQ1NjY1NSBDMTAuNzc1ODk5Nyw0Ni45NjUwODc0IDEwLjE4NjI4MzEsNDYuNTYzMDU3MSA5LjU0NjgxNDQsNDYuMjUyNTU5NyBDOS4wMDAzNDUyMyw0NS45ODcyNDQyIDguNDA1MDQ3MzMsNDUuODM0MzU5NiA3Ljc5NzAwODMxLDQ1LjgwMzE3NDEiIGlkPSJQYXRoIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTAuNTYsNTMuODAwMTM2NSBDMTEuMzI3ODU5NCw1NC43MDYyODIgMTIuMDMwNzMzMyw1NS42NjQzMjQ1IDEyLjY2MzQ5MDMsNTYuNjY3MjY5NiBDMTMuMzkzMDIyNCw1Ny44MTkwMTU5IDE0LjA1NjIzNjMsNTkuMDEwNTEgMTQuNjQ5OTcyMyw2MC4yMzYwNzUxIEMxNS4yODgxOTk0LDYxLjU1MDA2ODMgMTUuODkxODU2LDYyLjk1ODY2ODkgMTYuNDUyOTY0LDY0LjQ2NDUwNTEgQzE3LjAxNDA3Miw2NS45NzAzNDEzIDE3LjU0MDYwOTQsNjcuNTk3MDY0OCAxOC4wMDg2NDI3LDY5LjI5NDc0NCBDMTguMDQzMjEzMyw2OC41NTYyNzk5IDE4LjA1MTE5MTEsNjcuNzk2NzkxOCAxOC4wMzc4OTQ3LDY3LjAyNDE2MzggQzE4LjAyNDU5ODMsNjYuMjUxNTM1OCAxNy45ODQ3MDkxLDY1LjQ2NTc2NzkgMTcuOTE4MjI3MSw2NC42NzIxMTYgQzE3Ljg1MTc0NTIsNjMuODc4NDY0MiAxNy43NjY2NDgyLDYzLjA3NjkyODMgMTcuNjUyMjk5Miw2Mi4yNzAxMzY1IEMxNy41Mzc5NTAxLDYxLjQ2MzM0NDcgMTcuMzg2MzcxMiw2MC42NTY1NTI5IDE3LjIyOTQ3MzcsNTkuODQ3MTMzMSBDMTcuMTE2MDExMSw1OS4zMDQwMTU5IDE2Ljk5MzY4NDIsNTguNzczMTYyNyAxNi44NjI0OTMxLDU4LjI1NDU3MzQgQzE2LjczMjE4ODQsNTcuNzI4OTc2MSAxNi41OTY1NjUxLDU3LjIzMjI4NjcgMTYuNDQyMzI2OSw1Ni43MzgyMjUzIEMxNi4yODgwODg2LDU2LjI0NDE2MzggMTYuMTM5MTY5LDU1Ljc2NTg3MDMgMTUuOTc2OTUyOSw1NS4zMDMzNDQ3IEMxNS44MTQ3MzY4LDU0Ljg0MDgxOTEgMTUuNjQxODgzNyw1NC4zOTE0MzM0IDE1LjQ2OTAzMDUsNTMuOTU1MTg3NyBMMTAuNTYsNTMuODAwMTM2NSIgaWQ9IlBhdGgiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLDkuMDI5NzYxMDkgQzAuMTM0NzM2ODQyLDEwLjI3ODkzMDYgMC4yODU0MjkzNjMsMTEuNTQyOTkyIDAuNDUyMDc3NTYyLDEyLjgyMTk0NTQgQzAuNjE4NzI1NzYyLDE0LjEwMDg5ODcgMC44MDA0NDMyMTMsMTUuMzk0NzQ0IDAuOTk3MjI5OTE3LDE2LjcwMzQ4MTIgQzEuMTk3NTYyMzMsMTguMDA2OTYyNSAxLjQxMzg1MDQyLDE5LjMyNzA4NzYgMS42NDYwOTQxOCwyMC42NjM4NTY3IEMxLjg3ODMzNzk1LDIyLjAwMDYyNTcgMi4xMjc0MjM4MiwyMy4zNDcwMzA3IDIuMzkzMzUxOCwyNC43MDMwNzE3IEMyLjc0NzkyMjQ0LDI2LjQ3NzgzODUgMy4xMTY2NzU5LDI4LjIxNDkzNzQgMy40OTk2MTIxOSwyOS45MTQzNjg2IEMzLjg4MjU0ODQ4LDMxLjYxMzc5OTggNC4yODc2NDU0MywzMy4yNzgxOTExIDQuNzE0OTAzMDUsMzQuOTA3NTQyNyBDNS4xMzg2MTQ5NiwzNi41MzUxNDIyIDUuNTgxODI4MjUsMzguMTExOTM0IDYuMDQ0NTQyOTQsMzkuNjM3OTE4MSBDNi41MDcyNTc2Miw0MS4xNjM5MDIyIDYuOTc1MjkwODYsNDIuNjUzMDk0NCA3LjQ0ODY0MjY2LDQ0LjEwNTQ5NDkgQzcuNjU1Mzc1MDIsNDQuMDczNTUzNSA3Ljg2NDMzMDEyLDQ0LjA1NzczNjggOC4wNzM1NzM0MSw0NC4wNTgxOTExIEM4LjI4NjUyODQzLDQ0LjA2MDg0MTkgOC40OTg5ODE1MSw0NC4wNzkyODk3IDguNzA5MTQxMjcsNDQuMTEzMzc4OCBDOC45MjYzODQ5Niw0NC4xNDkxOTA2IDkuMTQwNjEyMDIsNDQuMjAxMDE5MSA5LjM1MDAyNzcsNDQuMjY4NDMgQzkuNTY5Mjk1NzYsNDQuMzQxOTQ0MyA5Ljc4MzM5MzU3LDQ0LjQyOTczNjEgOS45OTA5MTQxMyw0NC41MzEyMjg3IEM5LjQ5ODA2MDk0LDQzLjM4MzY3NDYgOS4wMTQ5NTg0NSw0Mi4yMDU0NjA4IDguNTQxNjA2NjUsNDAuOTk2NTg3IEM4LjA2ODI1NDg1LDM5Ljc4NzcxMzMgNy42MDczMTMwMiwzOC41NTM0MzU3IDcuMTU4NzgxMTYsMzcuMjkzNzU0MyBDNi43MTIwMjIxNiwzNi4wMzIzMjA4IDYuMjc1OTAwMjgsMzQuNzQyODU1NSA1Ljg1MDQxNTUxLDMzLjQyNTM1ODQgQzUuNDI0OTMwNzUsMzIuMTA3ODYxMiA1LjAwODMxMDI1LDMwLjc3MTk2ODEgNC42MDA1NTQwMiwyOS40MTc2NzkyIEM0LjA2ODY5ODA2LDI3LjYzNzY1NjQgMy41NzY3MzEzLDI1Ljg2ODE0NTYgMy4xMjQ2NTM3NCwyNC4xMDkxNDY4IEMyLjY3MjU3NjE4LDIyLjM1MDE0NzkgMi4yNTU5NTU2OCwyMC42MjA5MzI5IDEuODc0NzkyMjQsMTguOTIxNTAxNyBDMS40OTM2Mjg4MSwxNy4yMjM4MjI1IDEuMTQ3MDM2MDEsMTUuNTQ3MTY3MiAwLjgzNTAxMzg1LDEzLjg5MTUzNTggQzAuNTIyOTkxNjksMTIuMjM1OTA0NCAwLjI0NDY1Mzc0LDEwLjYxNTMxMjkgMCw5LjAyOTc2MTA5IiBpZD0iUGF0aCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTQxLjU0MDYwOTQsMzQuOTk5NTIyMiBDNDEuMjc0NjgxNCwzNS4wNDQxOTggNDAuOTkyNzk3OCwzNS4wOTQxMjk3IDQwLjcxODg5MiwzNS4xNTE5NDU0IEM0MC40NDQ5ODYxLDM1LjIwOTc2MTEgNDAuMTg3MDM2LDM1LjI3MDIwNDggMzkuOTA1MTUyNCwzNS4zMzg1MzI0IEMzOS42MjMyNjg3LDM1LjQwNjg2MDEgMzkuMzczMjk2NCwzNS40ODA0NDM3IDM5LjEwNzM2ODQsMzUuNTU2NjU1MyBDMzguODQxNDQwNCwzNS42MzI4NjY5IDM4LjU3NTUxMjUsMzUuNzE5NTkwNCAzOC4zMDk1ODQ1LDM1LjgxOTQ1MzkgTDM3LjQzNDY4MTQsNDMuNTM1MjIxOCBDMzguMzA0MjA0MSw0Mi41NjIyMjEgMzkuMjI4NDM0OCw0MS42MzgzMzc4IDQwLjIwMjk5MTcsNDAuNzY3OTUyMiBDNDEuMTMxNTIxNSwzOS45MzU1NzQ4IDQyLjEwODIzODksMzkuMTU3MjUzNSA0My4xMjgxOTk0LDM4LjQzNjkyODMgQzQ0LjExMDQxMjYsMzcuNzQwNDc5OCA0NS4xMzQzMjk5LDM3LjEwMzM0NTEgNDYuMTk0MzQ5LDM2LjUyOTAxMDIgQzQ3LjIxOTMwNjUsMzUuOTc3NTA3NyA0OC4yNzc5NjkyLDM1LjQ4OTUxMjkgNDkuMzY0MjEwNSwzNS4wNjc4NDk4IEM0OC43NjM3OTMxLDM0Ljg4NTc5MTggNDguMTQ5MTgyLDM0Ljc1MzA2NTEgNDcuNTI2NjQ4MiwzNC42NzEwMjM5IEM0Ni45MjE5Mzg0LDM0LjU5MjM2NzcgNDYuMzEyMjQ0NiwzNC41NTcyMzU0IDQ1LjcwMjM4MjMsMzQuNTY1OTA0NCBDNDUuMDgyNzcwMSwzNC41NjU5MDQ0IDQ0LjQ0OTg2MTUsMzQuNjE4NDY0MiA0My43ODc3MDA4LDM0LjY4OTQxOTggQzQzLjEyNTU0MDIsMzQuNzYwMzc1NCA0Mi40MjM0OTAzLDM0Ljg2Mjg2NjkgNDEuNjgxNTUxMiwzNC45NzU4NzAzIEw0MS42NDQzMjEzLDM0Ljk3NTg3MDMgTDQxLjYwOTc1MDcsMzQuOTc1ODcwMyBMNDEuNTc1MTgwMSwzNC45NzU4NzAzIEw0MS41NDA2MDk0LDM0Ljk3NTg3MDMiIGlkPSJQYXRoIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMzQuODY4NDc2NSw0Ni43MjU1OTczIEwyMy41MzE5NjY4LDUyLjI5NjkyODMgQzIzLjM3NzcyODUsNTIuOTE1MzgxMSAyMy4yNTAwODMxLDUzLjU0MTcxNzkgMjMuMTQ5MDMwNSw1NC4xNzU5Mzg2IEMyMy4wNDc5Nzc4LDU0LjgxMDE1OTMgMjIuOTcyNjMxNiw1NS40NTQwMTU5IDIyLjkyMjk5MTcsNTYuMTA3NTA4NSBDMjIuODcyNDY1NCw1Ni43NTkyNDkxIDIyLjg1MTE5MTEsNTcuNDIxNTAxNyAyMi44NjE4MjgzLDU4LjA3ODQ5ODMgQzIyLjg3MjQ2NTQsNTguNzM1NDk0OSAyMi45MDcwMzYsNTkuNDEzNTE1NCAyMi45NzYxNzczLDYwLjA4MTAyMzkgQzIzLjA3ODAyMDYsNjEuMDYzNTAxOSAyMy4yNDY4MjUsNjIuMDM4MDcgMjMuNDgxNDQwNCw2Mi45OTgwODg3IEMyMy43MDkxNzQ1LDYzLjkyOTkzMDYgMjQuMDAyNDA3LDY0Ljg0NDkzODcgMjQuMzU5MDAyOCw2NS43MzY0NTA1IEMyNC43MDc0OTcsNjYuNjA1MTI0IDI1LjExODA2MTcsNjcuNDQ4MjA2MiAyNS41ODc1OSw2OC4yNTkzMTc0IEMyNi4wNDc0MzAyLDY5LjA1MjA1NzMgMjYuNTY0Njc5NSw2OS44MTA4OTY0IDI3LjEzNTI5MDksNzAuNTI5ODk3NiBDMjcuMjIzMDI3LDY2LjA1OTk1NzIgMjcuOTk4NjY3Myw2MS42MjkyNDc1IDI5LjQzNTU2NzksNTcuMzg5OTY1OSBDMzAuMDk4MTc5Myw1NS40NDAzNzEzIDMwLjkwMjQ5MDEsNTMuNTQwNjQ1NiAzMS44NDIyMTYxLDUxLjcwNTYzMTQgQzMyLjcyNjgxMzgsNDkuOTc4MDIyMiAzMy43MzczNDQ3LDQ4LjMxNjI1ODIgMzQuODY1ODE3Miw0Ni43MzM0ODEyIiBpZD0iUGF0aCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ1MTMwMTksMCBDMzEuODMyNDE0MywxLjQyNzA1NzA4IDMyLjEzODYzOTksMi44NzI2MjU2MiAzMi4zNjg3NTM1LDQuMzMwOTIxNSBDMzIuNjEzNDA3Miw1Ljg0NDY0MTY0IDMyLjc5Njg5NzUsNy40MTYxNzc0NyAzMi45MzUxODAxLDkuMDQ1NTI5MDEgQzMzLjA3MzQ2MjYsMTAuNjc0ODgwNSAzMy4xNzQ1MTUyLDEyLjQwNDA5NTYgMzMuMjQzNjU2NSwxNC4xNzUzNTg0IEMzMy4zMTI3OTc4LDE1Ljk0NjYyMTIgMzMuMzU1MzQ2MywxNy44MzM1MTU0IDMzLjM4NzI1NzYsMTkuNzU0NTczNCBDMzMuNDYxNzE3NSwyNC4yMjIxNTAyIDMzLjEyMTMyOTYsMjcuODE5ODYzNSAzMi41MjgzMTAyLDMwLjgyMTAyMzkgQzMyLjAyODk4NzYsMzMuNDM4NjUxOSAzMS4yMDY0MzksMzUuOTg1ODE4NiAzMC4wNzkxMTM2LDM4LjQwNTM5MjUgQzI5LjE2OTQ1MDQsNDAuMjU5OTgwMyAyOC4xNjE5NzIsNDIuMDY2MTM2NCAyNy4wNjA4MzEsNDMuODE2NDE2NCBDMjYuMDgyMjE2MSw0NS40NjE1MzU4IDI1LjIyMzI2ODcsNDcuMDA2NzkxOCAyNC42ODg3NTM1LDQ4LjgwOTU5MDQgQzI0LjY3MDEzODUsNDguODU2ODk0MiAyNC42NTE1MjM1LDQ4LjkwMTU3IDI0LjYzMjkwODYsNDguOTQ2MjQ1NyBDMjQuNjE0MjkzNiw0OC45OTA5MjE1IDI0LjU5MzAxOTQsNDkuMDM4MjI1MyAyNC41NzQ0MDQ0LDQ5LjA4MjkwMSBMMjQuNTE4NTU5Niw0OS4yMTk1NTYzIEMyNC40OTk5NDQ2LDQ5LjI2Njg2MDEgMjQuNDgxMzI5Niw0OS4zMTE1MzU4IDI0LjQ2MjcxNDcsNDkuMzU4ODM5NiBMMzUuMTg0OTMwNyw0NC4yNjU4MDIgTDM1LjE4NDkzMDcsNDQuMjY1ODAyIEwzNS4xODQ5MzA3LDQ0LjI2NTgwMiBDMzUuNzMyNzQyNCw0MC44NzA0NDM3IDM2LjA4NjQyNjYsMzcuNjk1ODM2MiAzNi4yODA1NTQsMzQuNzIwOTU1NiBDMzYuNDcyMDIyMiwzMS44MzAxNzA2IDM2LjUxOTg4OTIsMjkuMTMzODU2NyAzNi40NjkzNjI5LDI2LjYyNDEyOTcgQzM2LjQxNjE3NzMsMjQuMTY5NTkwNCAzNi4yNjcyNTc2LDIxLjg5Mzc1NDMgMzYuMDU3MTc0NSwxOS43OTEzNjUyIEMzNS44NDcwOTE0LDE3LjY4ODk3NjEgMzUuNTg2NDgyLDE1LjgyNTczMzggMzUuMjk2NjIwNSwxNC4xMDcwMzA3IEMzNS4wNzg1NTk2LDEyLjgwNjE3NzUgMzQuODI4NTg3MywxMS41MzQyMzIxIDM0LjU1NDY4MTQsMTAuMjkxMTk0NSBDMzQuMjgwNzc1Niw5LjA0ODE1NyAzMy45ODAyNzcsNy44NTI0MjMyMSAzMy42NTU4NDQ5LDYuNjc1MDg1MzIgQzMzLjMzMTQxMjcsNS40OTc3NDc0NCAzMi45ODU3MDY0LDQuMzY3NzEzMzEgMzIuNjE2MDY2NSwzLjI1ODcwMzA3IEMzMi4yNDY0MjY2LDIuMTQ5NjkyODMgMzEuODYwODMxLDEuMDUxMTk0NTQgMzEuNDUxMzAxOSwwIiBpZD0iUGF0aCIgb3BhY2l0eT0iMC43Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNzIuOTgwOTQxOCw1OS4zNDI1NTk3IEM2NS42NTk5NDQ2LDU5LjM0MjU1OTcgNjIuMzY1MDk3LDU1LjcyNjQ1MDUgNjIuMzY1MDk3LDUxLjAyMjM1NDkgTDYyLjczMjA3NzYsNTAuNjU5NjkyOCBMNjcuMTI1MjA3OCw1MC42NTk2OTI4IEw2Ny40OTIxODg0LDUxLjAyMjM1NDkgQzY3LjQ5MjE4ODQsNTMuNTUzMTA1OCA2OC45NTc0NTE1LDU1LjAwMTEyNjMgNzMuMzQyNjAzOSw1NS4wMDExMjYzIEM3Ni42Mzc0NTE1LDU1LjAwMTEyNjMgNzguNDY3MDM2LDUzLjkxNTc2NzkgNzguNDY3MDM2LDUxLjc0NTA1MTIgQzc4LjQ2NzAzNiw0OS4yMTE2NzI0IDc3LjAwMTc3MjksNDguNDg4OTc2MSA3MS44NzczNDA3LDQ3Ljc2NjI3OTkgQzY2Ljc1MjkwODYsNDcuMDQzNTgzNiA2Mi43MjY3NTksNDUuMjM1NTI5IDYyLjcyNjc1OSw0MC4xNzEzOTkzIEM2Mi43MjY3NTksMzYuNTU1MjkwMSA2NS42NTE5NjY4LDMzLjI5OTIxNSA3Mi42MDg2NDI3LDMzLjI5OTIxNSBDNzkuNTY1MzE4NiwzMy4yOTkyMTUgODIuNDkwNTI2MywzNi41NTUyOTAxIDgyLjQ5MDUyNjMsNDAuODk0MDk1NiBMODIuMTMxNTIzNSw0MS4yNTkzODU3IEw3Ny43MzgzOTM0LDQxLjI1OTM4NTcgTDc3LjM3MTQxMjcsNDAuODk2NzIzNSBDNzcuMzcxNDEyNywzOC43MjYwMDY4IDc2LjI3MzEzMDIsMzcuNjQwNjQ4NSA3Mi4yNDY5ODA2LDM3LjY0MDY0ODUgQzY4Ljk1MjEzMywzNy42NDA2NDg1IDY3Ljg1Mzg1MDQsMzguNzI2MDA2OCA2Ny44NTM4NTA0LDQwLjE3NDAyNzMgQzY3Ljg1Mzg1MDQsNDIuMzQ0NzQ0IDY5LjMxOTExMzYsNDMuMDY0ODEyMyA3NC40NDM1NDU3LDQzLjc5MDEzNjUgQzc5LjU2Nzk3NzgsNDQuNTE1NDYwOCA4My41OTQxMjc0LDQ2LjY4MDkyMTUgODMuNTk0MTI3NCw1MS43NDc2NzkyIEM4My41OTQxMjc0LDU1LjcxMzMxMDYgODAuNjY2MjYwNCw1OS4zNDI1NTk3IDcyLjk4MDk0MTgsNTkuMzQyNTU5NyBaIiBpZD0iUGF0aCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTk2LjAzOTU1NjgsNTkuMzQyNTU5NyBDOTIuNzQ0NzA5MSw1OS4zNDI1NTk3IDkxLjI4MjEwNTMsNTcuNTM0NTA1MSA5MS4yODIxMDUzLDU3LjUzNDUwNTEgTDkwLjkxNTEyNDcsNTcuNTM0NTA1MSBMOTAuOTE1MTI0Nyw2NS44NTQ3MDk5IEw5MC41NDgxNDQsNjYuMjI1MjU2IEw4Ni4xNTUwMTM5LDY2LjIyNTI1NiBMODUuNzg4MDMzMiw2NS44NjI1OTM5IEw4NS43ODgwMzMyLDQxLjI1OTM4NTcgTDg2LjE1NTAxMzksNDAuODk2NzIzNSBMOTAuMTgxMTYzNCw0MC44OTY3MjM1IEw5MC41NDgxNDQsNDEuMjU5Mzg1NyBMOTAuOTE1MTI0Nyw0Mi4zNDQ3NDQgTDkxLjI4MjEwNTMsNDIuMzQ0NzQ0IEM5MS4yODIxMDUzLDQyLjM0NDc0NCA5Mi43NDczNjg0LDQwLjUzNjY4OTQgOTYuMDM5NTU2OCw0MC41MzY2ODk0IEMxMDAuNDMyNjg3LDQwLjUzNjY4OTQgMTA0LjA5MTg1Niw0NC4xNTI3OTg2IDEwNC4wOTE4NTYsNDkuOTQyMjUyNiBDMTA0LjA5MTg1Niw1NS43MzE3MDY1IDEwMC40MzAwMjgsNTkuMzQyNTU5NyA5Ni4wMzk1NTY4LDU5LjM0MjU1OTcgWiBNOTQuOTQxMjc0Miw0NC44NzI4NjY5IEM5Mi4wMTYwNjY1LDQ0Ljg3Mjg2NjkgOTAuOTE1MTI0Nyw0Ny4wNDM1ODM2IDkwLjkxNTEyNDcsNDkuOTM2OTk2NiBDOTAuOTE1MTI0Nyw1Mi44MzA0MDk2IDkyLjAxMzQwNzIsNTUuMDAxMTI2MyA5NC45NDEyNzQyLDU1LjAwMTEyNjMgQzk3Ljg2OTE0MTMsNTUuMDAxMTI2MyA5OC45Njc0MjM4LDUyLjgyMjUyNTYgOTguOTY3NDIzOCw0OS45MzE3NDA2IEM5OC45Njc0MjM4LDQ3LjA0MDk1NTYgOTcuODY5MTQxMyw0NC44NzI4NjY5IDk0Ljk0MTI3NDIsNDQuODcyODY2OSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMTcuOTk3MjMsNDUuMjM1NTI5IEwxMTUuNDM2MzQzLDQ1LjIzNTUyOSBDMTEyLjUxMTEzNiw0NS4yMzU1MjkgMTExLjQxMDE5NCw0Ni42ODM1NDk1IDExMS40MTAxOTQsNDkuOTM2OTk2NiBMMTExLjQxMDE5NCw1OC42MDkzNTE1IEwxMTEuMDQzMjEzLDU4Ljk3MjAxMzcgTDEwNi42NTI3NDIsNTguOTcyMDEzNyBMMTA2LjI5NjM5OSw1OC42MTk4NjM1IEwxMDYuMjk2Mzk5LDQxLjI1OTM4NTcgTDEwNi42NjMzOCw0MC44OTY3MjM1IEwxMTAuNjg5NTI5LDQwLjg5NjcyMzUgTDExMS4wNTY1MSw0MS4yNTkzODU3IEwxMTEuNDIzNDksNDIuMzQ0NzQ0IEwxMTEuNzkwNDcxLDQyLjM0NDc0NCBDMTExLjc5MDQ3MSw0Mi4zNDQ3NDQgMTEyLjUyMTc3Myw0MC44OTY3MjM1IDExNS44MTY2Miw0MC44OTY3MjM1IEwxMTcuOTk3MjMsNDAuODk2NzIzNSBMMTE4LjM2NDIxMSw0MS4yNTkzODU3IEwxMTguMzY0MjExLDQ0Ljg3NTQ5NDkgTDExNy45OTcyMyw0NS4yMzU1MjkgWiIgaWQ9IlBhdGgiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMzEuNTQwOTQyLDU5LjM0MjU1OTcgQzEzMC4wNzU2NzksNjIuOTU4NjY4OSAxMjguNjE1NzM0LDY1LjEyNDEyOTcgMTIzLjQ4ODY0Myw2NS4xMjQxMjk3IEwxMjEuNjU5MDU4LDY1LjEyNDEyOTcgTDEyMS4yOTIwNzgsNjQuNzYxNDY3NiBMMTIxLjI5MjA3OCw2MS4xNTA2MTQzIEwxMjEuNjU5MDU4LDYwLjc4Nzk1MjIgTDEyMy40ODg2NDMsNjAuNzg3OTUyMiBDMTI1LjMxODIyNyw2MC43ODc5NTIyIDEyNS42ODUyMDgsNjAuNDI1MjkwMSAxMjYuMDQ5NTI5LDU5LjMzOTkzMTcgTDEyNi4wNDk1MjksNTguOTc3MjY5NiBMMTIwLjE5OTExNCw0NC44NzAyMzg5IEwxMjAuMTk5MTE0LDQxLjI1OTM4NTcgTDEyMC41NjYwOTQsNDAuODk2NzIzNSBMMTIzLjg0NzY0NSw0MC44OTY3MjM1IEwxMjQuMjE5OTQ1LDQxLjI1OTM4NTcgTDEyOC42MTMwNzUsNTMuNTU4MzYxOCBMMTI4Ljk4MDA1NSw1My41NTgzNjE4IEwxMzMuMzczMTg2LDQxLjI1OTM4NTcgTDEzMy43NDAxNjYsNDAuODk2NzIzNSBMMTM3LjAzNTAxNCw0MC44OTY3MjM1IEwxMzcuNDA5OTcyLDQxLjI1OTM4NTcgTDEzNy40MDk5NzIsNDQuODc1NDk0OSBMMTMxLjU0MDk0Miw1OS4zNDI1NTk3IFoiIGlkPSJQYXRoIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cG9seWdvbiBpZD0iUGF0aCIgcG9pbnRzPSIxNTUuMzMzNTE4IDU4Ljk3OTg5NzYgMTUzLjEzNjk1MyA1OC45Nzk4OTc2IDE1Mi40MDU2NTEgNTguNjE3MjM1NSAxNDcuMjgxMjE5IDUzLjE5MDQ0MzcgMTQ2LjkxNDIzOCA1My4xOTA0NDM3IDE0NC43MTc2NzMgNTUuMzYxMTYwNCAxNDQuMzUwNjkzIDU2LjA4Mzg1NjcgMTQ0LjM1MDY5MyA1OC42MTcyMzU1IDE0My45ODM3MTIgNTguOTc5ODk3NiAxMzkuNTkzMjQxIDU4Ljk3OTg5NzYgMTM5LjIyNjI2IDU4LjYxNzIzNTUgMTM5LjIyNjI2IDM0LjAxOTI4MzMgMTM5LjU5MzI0MSAzMy42NTY2MjEyIDE0My45ODYzNzEgMzMuNjU2NjIxMiAxNDQuMzUzMzUyIDM0LjAxOTI4MzMgMTQ0LjM1MzM1MiA0OC40ODg5NzYxIDE0NC43MjAzMzIgNDguNDg4OTc2MSAxNTIuMDM2MDExIDQxLjI1OTM4NTcgMTUyLjc2NzMxMyA0MC44OTY3MjM1IDE1NC45NjEyMTkgNDAuODk2NzIzNSAxNTUuMzMzNTE4IDQxLjI1OTM4NTcgMTU1LjMzMzUxOCA0NC44NzU0OTQ5IDE1MC45NDAzODggNDkuMjE2OTI4MyAxNTAuOTQwMzg4IDQ5LjU3OTU5MDQgMTU1LjY5NzgzOSA1NS4wMDYzODIzIDE1NS42OTc4MzkgNTguNjIyNDkxNSI+PC9wb2x5Z29uPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTE3NC4zNzM5NjEsNTEuMzg1MDE3MSBMMTc0LjAwNjk4MSw1MS43NDc2NzkyIEwxNjIuNjUxODU2LDUxLjc0NzY3OTIgTDE2Mi4yODQ4NzUsNTIuMTEwMzQxMyBDMTYyLjI4NDg3NSw1Mi44MzMwMzc1IDE2My4wMTYxNzcsNTUuMDAxMTI2MyAxNjUuOTQ0MDQ0LDU1LjAwMTEyNjMgQzE2Ny4wNDIzMjcsNTUuMDAxMTI2MyAxNjguMTQwNjA5LDU0LjYzODQ2NDIgMTY4LjUwNDkzMSw1My45MTU3Njc5IEwxNjguODcxOTExLDUzLjU1MzEwNTggTDE3My4yNjUwNDIsNTMuNTUzMTA1OCBMMTczLjYzMjAyMiw1My45MTU3Njc5IEMxNzMuMjY1MDQyLDU2LjA4NjQ4NDYgMTcxLjQzNTQ1Nyw1OS4zNDI1NTk3IDE2NS45NDY3MDQsNTkuMzQyNTU5NyBDMTU5LjcyMzk4OSw1OS4zNDI1NTk3IDE1Ni43OTYxMjIsNTUuMDAxMTI2MyAxNTYuNzk2MTIyLDQ5LjkzNjk5NjYgQzE1Ni43OTYxMjIsNDQuODcyODY2OSAxNTkuNzIxMzMsNDAuNTMxNDMzNCAxNjUuNTcxNzQ1LDQwLjUzMTQzMzQgQzE3MS40MjIxNjEsNDAuNTMxNDMzNCAxNzQuMzQ3MzY4LDQ0Ljg3Mjg2NjkgMTc0LjM0NzM2OCw0OS45MzY5OTY2IEwxNzQuMzczOTYxLDUxLjM4NTAxNzEgWiBNMTY4Ljg4MjU0OCw0Ny43Njg5MDc4IEMxNjguODgyNTQ4LDQ3LjQwNjI0NTcgMTY4LjUxNTU2OCw0NC44NzgxMjI5IDE2NS41ODc3MDEsNDQuODc4MTIyOSBDMTYyLjY1OTgzNCw0NC44NzgxMjI5IDE2Mi4yOTI4NTMsNDcuNDA4ODczNyAxNjIuMjkyODUzLDQ3Ljc2ODkwNzggTDE2Mi42NTk4MzQsNDguMTMxNTcgTDE2OC41MTAyNDksNDguMTMxNTcgTDE2OC44ODI1NDgsNDcuNzY4OTA3OCBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xODguNjQwOTk3LDQ1LjIzNTUyOSBMMTg2LjA3NDc5Miw0NS4yMzU1MjkgQzE4My4xNDk1ODQsNDUuMjM1NTI5IDE4Mi4wNDg2NDMsNDYuNjgzNTQ5NSAxODIuMDQ4NjQzLDQ5LjkzNjk5NjYgTDE4Mi4wNDg2NDMsNTguNjA5MzUxNSBMMTgxLjY4MTY2Miw1OC45NzIwMTM3IEwxNzcuMjk5MTY5LDU4Ljk3MjAxMzcgTDE3Ni45MzIxODgsNTguNjA5MzUxNSBMMTc2LjkzMjE4OCw0MS4yNTkzODU3IEwxNzcuMjk5MTY5LDQwLjg5NjcyMzUgTDE4MS4zMjUzMTksNDAuODk2NzIzNSBMMTgxLjY5MjI5OSw0MS4yNTkzODU3IEwxODIuMDU5MjgsNDIuMzQ0NzQ0IEwxODIuNDI2MjYsNDIuMzQ0NzQ0IEMxODIuNDI2MjYsNDIuMzQ0NzQ0IDE4My4xNTc1NjIsNDAuODk2NzIzNSAxODYuNDUyNDEsNDAuODk2NzIzNSBMMTg4LjY0ODk3NSw0MC44OTY3MjM1IEwxODksNDEuMjU5Mzg1NyBMMTg5LDQ0Ljg3NTQ5NDkgTDE4OC42NDA5OTcsNDUuMjM1NTI5IFoiIGlkPSJQYXRoIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=='); } .icon-holder { @@ -20,16 +114,6 @@ max-width: 600px; } -label.required { - &::after { - content: ' *'; - } -} - -.title-action { - padding-top: 20px; -} - .page-heading { padding-bottom: 0; } @@ -40,41 +124,92 @@ label.required { overflow: hidden; } -/* Login .. */ +/* Login page */ body.login { - .login-spryker-logo { + .spryker-login { + width: 380px; margin: 0 auto; - width: 165px; - padding-top: 100px; } - .loginColumns { - padding-top: 30px; + .forgot { + text-align: center; + font-size: 80%; + + a:hover { + color: $grey3; + } } +} - .spryker-login { - width: 380px; +.login { + &__wrapper { + padding: 100px 0 20px; + } + + &__container { + max-width: 450px; margin: 0 auto; + padding: 0 15px; } - input, - .input-group-addon { - background: #2f4050; - border: 0; - border-bottom: 1px solid #888888; - color: #fff; + &__logo { + width: 190px; + height: 80px; + margin: 0 auto 50px; + } - &:focus { - border-color: #888888 !important; + &-box { + max-width: 420px; + margin: 0 auto 30px; + background: $white; + border-radius: 8px; + + &__heading { + border-bottom: 1px solid $grey-light; + padding: 35px 15px 10px; } - } - .forgot { - text-align: center; - font-size: 80%; + &__title { + color: $ink-base; + text-align: center; + font-weight: bold; + margin: 0; + font-size: 20px; + } - a:hover { - color: #eee; + &__content { + padding: 20px 30px 15px; + } + + label { + text-transform: uppercase; + color: $grey-base; + font-weight: 500; + + &:after { + content: none; + } + } + + .form-control { + height: 42px; + padding: 11px 12px; + font-weight: 600; + margin: 0 0 20px; + } + + .btn { + height: 48px; + margin: 0 0 20px; + } + + &__link { + color: $green-default; + font-size: 14px; + font-weight: 600; + display: inline-block; + vertical-align: top; + margin: 0 0 5px; } } } @@ -130,7 +265,7 @@ body.login { .product-image { width: 150px; height: 150px; - background: #ccc; + background: $grey; text-align: center; vertical-align: middle; line-height: 145px; /* @todo remove when real image is added */ @@ -159,12 +294,7 @@ body.login { } } -.note-editor *, -.note-editor *:before { - color: #444 !important; -} - -/* Zed Navigation .. */ +/* Zed Navigation */ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { span { display: block; @@ -174,75 +304,195 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { } } -/* .. Zed Navigation */ - .form-inline { display: inline; } -/* Nested panels... */ -.ibox.nested { - margin-bottom: 5px; +/* Nested panels */ +.ibox { + .label { + display: inline-block; + vertical-align: top; + } .ibox-title { - background-color: #f5f5f5; - border: 1px solid #ddd; + background-color: $white; + border: 1px solid $grey-lighter; + border-bottom-color: $grey-light; + border-radius: 10px 10px 0 0; + transition: border-radius 0.3s linear, background-color 0.3s linear, border-color 0.3s linear; .collapse-link { color: inherit; + display: flex; + align-items: center; + width: 100%; } - } - .ibox-content { - border: 1px solid #ddd; + h5 { + color: $ink-base; + font-size: 12px; + font-weight: 600; + letter-spacing: 0.08px; + text-transform: uppercase; + margin: 0; + flex: 1 1 auto; + } + + .ibox-tools { + flex: 0 0 auto; + margin: 0 0 0 10px; + } } -} -.ibox.error { - .ibox-title { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; + &.nested { + margin-bottom: 5px; + margin-top: 5px; + + .ibox-title { + background-color: $grey-lighter; + + &:hover { + background-color: $grey-light; + border-color: $grey-light; + } + } + + .ibox-content { + border: 1px solid $grey-lighter; + border-top: none; + background-color: $grey-lighter; + border-radius: 0 0 10px 10px; + } + + &.border-bottom, + &.collapsed { + border-bottom: none !important; + .ibox-title { + border-radius: 10px; + border-color: $grey-lighter; + } + } + + &.border-bottom.collapsed .ibox-title { + border-color: $grey-lighter; + border-bottom: 1px solid $grey-light; + border-radius: 10px 10px 0 0; + } } + .ibox-content { - border-color: #ebccd1; + .ibox-title { + background-color: $grey-light; + border-color: $grey-light; + + &:hover { + background-color: darken($grey-light, 5%); + border-color: darken($grey-light, 5%); + } + } + + .ibox-content { + background-color: $grey-lighter; + border: 1px solid $grey-lighter; + border-top: 0; + } } - /* Expand panels that contain errors in case they are collapsed */ - &.collapsed { - > .ibox-content { - display: block; + + &.error { + .ibox-title { + color: $brown; + background-color: $white-red; + border-color: $red-lightest; + } + + .ibox-content { + border-color: $red-lightest; + } + + &.collapsed { + > .ibox-content { + display: block; + } } } } -/* .. Nested panels */ - -/* Tabs .. */ +/* Tabs */ .tabs-container { margin-bottom: 20px; + background: $white; + .nav-tabs { - li.error { - a { - color: #a94442 !important; + border-bottom: 2px solid $grey-light; + font-size: 14px; + + li { + border: 0 !important; + margin-bottom: -2px; + + &.error { + a { + color: $brown !important; + } } - } - li.error:not(.active) { + + &.error:not(.active) { + a { + border-color: $red-lightest; + background-color: $white-red; + } + } + a { - border-color: #ebccd1; - background-color: #f2dede; + color: $grey-base; + border-width: 0 0 2px !important; + border-bottom: 2px solid transparent; + margin: 0; + transition: border-color 0.2s linear, color 0.2s linear, background 0.2s linear; + font-weight: 500; + padding: 12px 20px 10px 25px; + + &:hover { + color: $grey2; + border-color: $grey-dark; + } + + &:focus { + background-color: transparent; + } + } + + &.active { + pointer-events: none; + & > a { + color: $green-default; + border-color: $green-default; + + &:hover { + pointer-events: none; + } + + &:focus { + border-color: $green-default; + } + } } } } + + .panel-body { + border: 0; + border-radius: 10px; + } } .tabs-footer { color: inherit; - border: 1px solid #e7eaec; - border-top: none; - background: #ffffff; + border: 0; + background: $white; padding: 10px 15px; } -/* .. Tabs */ .table-hover { tbody tr:hover { @@ -254,12 +504,1255 @@ body.mini-navbar .navbar-default .nav > li > .nav-second-level li a { margin-bottom: 1em; } -.nav .label, -.ibox .label { - display: inline-block; - vertical-align: top; +.navbar-default { + box-shadow: 0 2px 16px $grey-light2; + + .nav { + background: $white; + + &-header { + padding: 14px 20px; + background-color: white; + background-image: none; + } + + &-label { + flex: 1 1 auto; + } + + & > li { + position: relative; + border: 0 !important; + + &:last-child { + margin: 0; + } + + &:before { + position: absolute; + top: 0; + left: 0; + width: 4px; + bottom: 0; + content: ''; + transition: 0.2s linear background; + z-index: 2; + pointer-events: none; + } + + & > a { + color: $grey-dark; + font-weight: 500; + padding: 14px 16px; + font-size: 14px; + transition: color 0.2s linear, background-color 0.2s linear; + display: flex; + align-items: center; + + i.icon-fast-forward { + font-size: 8px; + margin-right: 4px; + margin-left: 2px; + font-family: 'fontello'; + font-style: normal; + vertical-align: 20%; + } + + &:focus { + color: $ink-base; + background-color: $grey-lighter; + i { + color: $green-default; + } + } + + &:hover { + color: $ink-base; + + .fa { + color: $grey-base; + + .mini-navbar & { + color: $ink-base; + } + } + } + } + + &.active { + &:before { + background: $green-default; + } + + & > a { + color: $green-default; + background-color: $grey-lighter; + .fa { + color: $green-default !important; + } + + .arrow { + color: $grey-base !important; + } + } + + .fa { + color: $grey-base; + } + } + } + + .nav.nav-second-level { + background: $white; + + a { + font-size: 13px; + padding: 12px 16px; + } + + .fa { + font-size: 11px; + text-align: center; + } + } + + .fa { + color: $grey-base; + transition: color 0.2s linear; + min-width: 24px; + margin-right: 2px; + font-size: 13px; + flex: 0 0 auto; + + &.arrow { + min-width: 0; + float: none; + margin: 0 0 0 3px; + } + } + } +} + +.navbar { + &-top-links { + background: $grey-lighter; + } + + &-static-side { + min-height: 100%; + } + + &-default { + background: $white; + } +} + +/* Navigation menu arrow */ +.metismenu { + .icon-arrow-left { + float: right; + line-height: 2; + font-size: 10px; + } + + .active > a { + & > .icon-arrow-left:before { + content: '\e800'; + } + + .fa.arrow { + &:before { + content: '\f106'; + } + } + } + + .fa.arrow { + &:before { + content: '\f107'; + } + } +} + +/* Inputs */ +%input, +.form-control, +.single-line, +.ibox-content select, +#builder.query-builder input[type='text'] { + background-image: none; + border: 2px solid $grey-light; + border-radius: 10px; + padding: 7px 12px 9px; + line-height: 18px; + height: 38px; + color: $ink-base; + font-weight: 500; + caret-color: $green-base; + &:hover { + border-color: $grey-base; + } + &:focus, + &:active { + border-color: $green-base; + } + + &[disabled], + &[readonly] { + background: $grey-lighter; + pointer-events: none; + } + + &[disabled] { + color: $grey-base; + } +} + +.ibox-content select, +select.form-control { + padding: 8px 30px 8px 12px; +} + +/* Input connected button (copy) */ +.input-group-btn:last-child > .btn { + border: 2px solid $green-base; + border-radius: 0 20px 20px 0; + background-color: $green-base; + padding: 6px 10px 6px 8px; + height: 38px; + font-family: 'fontello'; + font-style: normal; + font-size: 16px; + line-height: 1; + display: flex; + align-items: center; + + &:hover { + box-shadow: $box-shadow-green-hover; + } + &:active { + border-color: $green-dark; + background: $green-dark; + } + &:focus { + box-shadow: $box-shadow-green-focused; + } +} + +.input-group-addon { + border: 2px solid $grey-light; + border-radius: 10px 0 0 10px; +} + +#select-all-btn { + .btn { + margin: 0 0 7px 5px; + } +} + +/* Search label */ +.ibox-content { + select { + margin: 0 3px; + width: auto; + display: inline-block; + vertical-align: middle; + } + + label { + white-space: nowrap; + text-align: left; + display: inline-block; + vertical-align: middle; + } + + &--alt { + margin: 0 0 20px; + border: 0; + padding: 10px 0; + background: none; + + label { + margin: 0 2px 2px 0; + } + } +} + +input[type='checkbox'] { + width: 14px; + height: 14px; + margin: 0; +} + +/* Chips */ +a.label { + &:hover, + &:focus { + color: $label-link-hover-color; + text-decoration: none; + cursor: pointer; + } +} + +.ibox .label, +.label { + font-size: 14px; + font-weight: 500; + letter-spacing: 0.07px; + line-height: 16px; + text-align: center; + padding: 3px 10px; + border-radius: 12px; + font-family: $main-font; + max-width: 150px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.label { + @include label-variant($grey-lighter, $grey-dark); +} + +.label-primary { + @include label-variant($blue-light, $blue-dark); +} + +.label-success { + @include label-variant($green-lighter, $green-dark); +} + +.label-info { + @include label-variant($grey-lighter, $grey-dark); +} + +.label-warning { + @include label-variant($orange-light, $orange-dark); } -.navbar-default .metismenu > li { - background-color: #2f4050; +.label-danger { + @include label-variant($red-light, $red-dark); +} + +/* Data Table Pagination */ +.dataTables_wrapper { + .dataTables_paginate { + text-align: center; + + .pagination { + margin: 0 !important; + } + } + + .alt-row__center .dataTables_paginate { + text-align: center; + } + + .dataTables_info { + padding: 6px 0; + font-weight: 500; + } + + .dataTables_filter { + input { + min-width: 174px; + padding-left: 28px; + margin: 0 !important; + } + + label { + white-space: nowrap; + text-align: left; + font-size: 0; + position: relative; + margin: 0 0 0 5px; + + &:before { + position: absolute; + z-index: 3; + top: 50%; + left: 8px; + font-size: 14px; + line-height: 1; + margin: -7px 0 0; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + content: '\f002'; + pointer-events: none; + color: $grey-base; + } + } + } + + .dataTables_length { + select { + margin: 0 3px; + width: auto; + display: inline-block; + vertical-align: middle; + } + + label { + font-weight: 500 !important; + margin: 0; + } + } + + .dataTables_scrollFoot { + margin-bottom: 24px; + } +} + +.pagination { + display: inline-flex; + vertical-align: top; + + & > li { + margin: 0 3px; + display: block; + + & > a { + float: none; + display: block; + font-weight: 500; + border-color: $grey-light; + color: $grey-dark; + min-width: 38px; + text-align: center; + font-size: 14px; + line-height: 24px; + padding: 6px 4px; + border-radius: 4px; + overflow: hidden; + transition: color 0.2s linear, background-color 0.2s linear, border-color 0.2s linear; + + &:hover { + border-color: $grey; + background: $white; + color: $grey-dark; + } + + &:focus { + outline-width: 0; + border-color: $green-default; + background: $white; + } + } + + &.active { + a { + background: $green-default; + border-color: $green-default; + color: $white; + pointer-events: none; + + &:focus { + background: $green-default; + border-color: $green-default; + color: $white; + } + } + } + + &.disabled { + a, + a:hover, + a:focus { + background: $grey-lighter; + border-color: $grey-light; + color: $grey-base; + } + } + + &.previous, + &.next { + a { + text-align: left; + text-indent: -9999px; + + &:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-family: 'Font Awesome 5 Free'; + content: '\f104'; + font-weight: 900; + text-indent: 0; + font-size: 18px; + } + } + } + + &.next a:after { + content: '\f105'; + } + } +} + +.alt-row { + margin: 5px 0 20px; + + &:after { + clear: both; + content: ''; + display: table; + width: 100%; + } + + .dataTables_length { + float: none; + } + + &__center { + margin: 0 30%; + @media only screen and (max-width: $desktop) { + margin: 0; + float: right; + } + @media only screen and (max-width: $tablet) { + float: none; + } + } + + &__left { + float: left; + width: 30%; + @media only screen and (max-width: $tablet) { + float: none; + width: auto; + text-align: center; + margin: 0 0 10px; + } + } +} + +/* Data Table */ +.dataTable { + td { + color: $grey-dark; + font-size: 14px; + font-weight: 500; + letter-spacing: 0.07px; + line-height: 22px; + background-color: $white; + vertical-align: middle !important; + padding: 8px 0 8px 20px; + min-height: 70px; + } + + th { + border-bottom: 0 !important; + border-top: solid $grey-lighter 2px; + vertical-align: middle !important; + color: $ink-base; + background-color: $grey-lighter; + font-size: 12px; + line-height: 15px; + text-transform: uppercase; + padding: 8px 0 12px 20px; + letter-spacing: 0.08px; + min-height: 70px; + font-weight: 500; + + &[class*='sorting'] { + background-color: $grey-lighter !important; + } + + .btn { + margin: 3px 0; + } + } + + .label { + margin: 2px; + } + + .sorting:after, + .sorting_asc:after, + .sorting_desc:after, + .sorting_asc_disabled:after, + .sorting_desc_disabled:after { + position: static !important; + width: 16px; + height: 16px; + display: inline-block !important; + vertical-align: middle; + font-family: inherit; + opacity: 1 !important; + content: '' !important; + margin: -2px -20px 0 0; + + .dataTables_scrollBody & { + content: none !important; + } + } + + .sorting:after { + background: url('../img/sort@2x.png') 3px 0px/10px 15px no-repeat !important; + } + + .sorting_asc:after { + background: url('../img/sort-arrow-up@2x.png') 3px 0px/10px 15px no-repeat !important; + } + + .sorting_desc:after { + background: url('../img/sort-arrow-down@2x.png') 3px 0px/10px 15px no-repeat !important; + } + + .sorting_asc_disabled:after, + .sorting_desc_disabled:after { + color: $grey3; + } + + tr.selected { + background-color: rgba($blue2, 0.1) !important; + & > td { + background-color: transparent; + border-top: solid $grey-lighter 2px !important; + + &:first-child { + border-left: solid $grey-lighter 2px !important; + } + &:last-child { + border-right: solid $grey-lighter 2px !important; + } + } + &:first-child { + & > td { + border-top-width: 0 !important; + } + } + } + + .btn { + margin: 3px 2px; + + .fa-caret-right, + .fa-edit, + .fa-eye, + .fa-trash, + .fa-plus, + .fa-upload { + display: none; + } + } + + .details { + td, + th { + border-radius: 0 !important; + } + } + + a:not([class]) { + display: inline-block; + vertical-align: middle; + padding: 3px 8px; + line-height: 16px; + border-radius: 12px; + border: 1px solid transparent; + + &:focus, + &:active { + background: $grey-lighter; + } + + &:focus { + border-color: $green-base; + outline-width: 0; + } + } +} + +.table-bordered { + background-color: $grey-lighter; + border: none; + border-radius: 10px; + + td, + th { + border: 0; + vertical-align: middle; + } + + &.dataTable { + tbody { + td, + th { + border-bottom: solid $grey-lighter 3px !important; + border-top: solid $grey-lighter 2px; + } + } + + & > tr:first-child { + & > td { + border-top-width: 0; + } + } + + &.dataTable { + th, + td { + border-right: none; + &:first-child { + border-radius: 13px 0 0 13px; + border-left: solid $grey-lighter 3px; + } + &:last-child { + border-radius: 0 13px 13px 0; + border-right: solid $grey-lighter 3px; + } + } + + th { + &:first-child { + border-radius: 13px 0 0 0; + } + &:last-child { + border-radius: 0 13px 0 0; + } + } + + tr:first-child { + td:first-child { + border-radius: 0 0 0 13px; + } + td:last-child { + border-radius: 0 0 13px 0; + } + } + } + } +} + +.table-striped { + tr:nth-of-type(odd), + tr:nth-of-type(even) { + background-color: $white; + } +} + +#product-review-table { + i.fa-chevron-down, + i.fa-chevron-up { + padding: 7px; + } +} + +/* Buttons */ +.btn { + font-size: 14px; + line-height: 24px; + font-weight: 500; + padding: 6px 15px; + background: $green-default; + border-color: $green-default; + color: $white; + transition: background 0.2s linear, border-color 0.2s linear, color 0.2s linear, box-shadow 0.2s linear; + + .fa, + .fas, + .far, + .fal, + .fad, + .fab { + vertical-align: middle; + } + + .fa-angle-down { + margin: 0 0 0 0.6em; + font-size: 1.5em; + line-height: 1; + } + + .fa-angle-left, + .fa-angle-right { + font-size: 1.4em; + margin: 0 2px 2px 0; + } + + .fa-angle-right { + margin: 0 0 2px 2px; + } + + &, + &.btn-primary, + &.btn-success { + &:hover { + background: $green-default; + color: $white; + box-shadow: $box-shadow-green-hover; + } + + &:focus { + color: $white; + box-shadow: $box-shadow-green-focused; + } + + &:active { + background: $green-dark; + border-color: $green-dark; + box-shadow: none; + } + } + + &.btn-outline { + background: $white; + color: $green-default !important; + border-color: $green-default; + + &:hover { + background: $white; + border-color: $green-default; + } + + &:active { + background: $grey-lighter; + border-color: $green-default; + box-shadow: none; + } + } + + &-sm { + padding: 6px 15px; + + .fa-angle-left, + .fa-angle-right { + font-size: 1.3em; + margin: 0 2px 2px 0; + } + + .fa-angle-right { + margin: 0 0 2px 2px; + } + } + + &-xs { + font-size: 12px; + line-height: 16px; + padding: 2px 8px; + + .fa-angle-down { + margin: 0 0 0 2px; + font-size: 1em; + } + + .fa-angle-left, + .fa-chevron-right { + font-size: 1em; + margin: 0; + } + } + + &.btn-remove, + &.btn-danger { + background: $red-default; + border-color: $red-default; + color: $white !important; + + &:hover { + background: $red-lighter; + box-shadow: $box-shadow-red-hover; + } + + &:focus { + box-shadow: $box-shadow-red-focused; + } + + &:active { + background: $red-dark; + box-shadow: none; + border-color: $red-dark; + } + + &.btn-outline { + background: $white; + color: $red-default !important; + border-color: $red-default; + + &:hover { + background: $white; + } + &:focus { + color: $red-default; + } + &:active { + background: $grey-lighter; + box-shadow: none; + border-color: $red-default; + } + } + } + + &.btn-view { + &.btn-outline { + background: $white; + border-color: $grey; + color: $grey-dark !important; + + &:hover { + background: $white; + border-color: $grey; + box-shadow: $box-shadow-green-hover; + } + + &:focus { + box-shadow: $box-shadow-green-focused; + } + + &:active { + background: $grey-lighter; + border-color: $grey; + box-shadow: none; + } + } + } + + &.navbar-minimalize { + border-radius: 4px; + padding: 2px 12px; + margin-top: 10px; + + .fa-bars { + font-size: 12px; + } + } + + &.note-btn { + @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border); + font-size: 12px; + line-height: 1.5; + padding: 5px 10px; + min-height: 31px; + + &:hover { + box-shadow: none; + } + + &.active { + box-shadow: 0 2px 5px rgba($black, 0.15) inset; + } + } + + &--label-margin-top { + margin-top: 29px; + } +} + +.title-action { + padding-top: 20px; + + .btn { + margin: 0 0 7px 5px; + } +} + +/* Info box */ +.well { + background-color: $grey-lighter; + border: 0; + border-radius: 10px; + box-shadow: none; + padding: 14px 20px; + color: $grey-dark; + font-size: 13px; + font-weight: 500; + line-height: 24px; + + h3 { + color: $ink-base; + font-size: 12px; + font-weight: 600; + line-height: 15px; + text-transform: uppercase; + } + + p { + &:last-child { + margin: 0 0 5px; + } + } + + i { + font-style: normal; + } + + .btn { + margin-right: 5px; + } +} + +/* Alert */ +.alert { + box-shadow: 0 1px 3px rgba($ink-base, 0.15); + border-radius: 4px; + background: $white; + color: $ink-base; + display: flex; + align-items: flex-start; + font-size: 14px; + line-height: 24px; + font-weight: 500; + border: 0; + border-left: 6px solid transparent; + position: relative; + + &__icon { + flex: 0 0 auto; + margin: 0 18px 0 0; + font-size: 24px; + } + + &__text { + flex: 1 1 auto; + } + + .close { + flex: none; + position: absolute; + top: 5px; + right: 5px; + padding: 5px; + transition: opacity 0.2s linear; + } + + &.alert-success { + border-left-color: $green-base; + + .alert__icon { + color: $green-base; + } + } + + &.alert-info { + border-left-color: $blue; + + .alert__icon { + color: $blue; + } + } + + &.alert-danger { + border-left-color: $red-default; + + .alert__icon { + color: $red-default; + } + } + + &.alert-warning { + border-left-color: $orange; + + .alert__icon { + color: $orange; + } + } + + .fa { + margin: 4px 7px 0 0; + } +} + +/* Select2 */ +.select2-container { + .select2-selection--single { + height: 38px !important; + border: 2px solid $grey-light; + border-radius: 10px !important; + position: relative; + transition: background 0.2s linear, border-color 0.2s linear, color 0.2s linear; + + .select2-selection__rendered { + color: $ink-base; + font-size: 14px; + line-height: 34px !important; + height: 34px; + padding-right: 30px; + } + + .select2-selection__arrow { + height: auto !important; + top: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + width: 30px; + + b { + border: 0; + margin: 0; + height: auto; + width: auto; + top: 0; + position: static; + display: block; + color: $grey-base; + font-size: 17px; + + &:before { + font-family: 'Font Awesome 5 Free'; + content: '\f107'; + } + } + } + } + + &--default { + .select2-selection--multiple { + min-height: 38px; + border: 2px solid $grey-light; + border-radius: 10px !important; + + .select2-selection__choice { + background: $grey-light2; + color: $ink-base; + border: 0; + position: relative; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + border-radius: 12px; + max-width: 100%; + padding: 0 30px 2px 8px; + line-height: 22px; + + &__remove { + position: absolute; + top: 0; + right: 0; + bottom: 0; + margin: 0; + width: 24px; + background: $grey; + color: $white; + display: flex; + align-items: center; + justify-content: center; + border-radius: 0 10px 10px 0; + transition: color 0.2s linear; + font-size: 18px; + line-height: 1; + } + } + } + + .select2-search--dropdown { + .select2-search__field { + @extend %input; + } + } + + .select2-results__option { + &--highlighted[aria-selected] { + background: $grey-lighter; + color: $ink-base; + } + &[aria-selected='true'] { + background: $green-lighter; + color: $green-default; + } + } + + &.select2-container--focus { + .select2-selection--multiple { + border-width: 2px; + } + } + + .select2-search--inline { + .select2-search__field { + height: 24px; + } + } + } + + &:hover { + .select2-selection--single { + border-color: $grey-lighter; + } + } + + &.select2-container--focus, + &.select2-container--open { + .select2-selection--single { + border-color: $green-base; + } + } +} + +.select2 { + &-results__options { + font-size: 14px; + line-height: 24px; + font-weight: 500; + } + + &-results__option { + padding: 8px 15px; + color: $ink-base; + } + + &-dropdown { + background: $white; + border: 0; + border-radius: 10px !important; + box-shadow: 0 0 16px rgba($ink-base, 0.15); + margin: 4px 0 0; + + &--above { + margin: -4px 0 0; + } + } + + &-results__message { + text-align: center; + padding-top: 40px; + padding-bottom: 40px; + } +} + +.panel { + &, + &-default { + border: none; + border-radius: 10px; + box-shadow: 0 0 3px 1px rgba($ink-base, 0.15); + + & > .panel-heading { + color: $ink-base; + font-size: 16px; + font-weight: 600; + line-height: 22px; + background-color: $grey-lighter; + padding: 12px 15px; + border-bottom: 1px solid $grey-light; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + } + } + + &-footer { + background-color: $grey-lighter; + border-top: 1px solid $grey-light; + border-bottom-right-radius: 10px; + border-bottom-left-radius: 10px; + + .btn { + margin: 5px 5px 5px 0; + } + } +} + +.table-vat { + th, + td { + vertical-align: top; + } } diff --git a/assets/Zed/sass/_mixins.scss b/assets/Zed/sass/_mixins.scss new file mode 100644 index 00000000..fc4e3338 --- /dev/null +++ b/assets/Zed/sass/_mixins.scss @@ -0,0 +1,13 @@ +// Contextual variations (linked labels get darker on :hover) +@mixin label-variant($bg-color, $text-color) { + background-color: $bg-color; + color: $text-color; + + &[href] { + &:hover, + &:focus { + background-color: darken($bg-color, 10%); + color: darken($text-color, 10%); + } + } +} diff --git a/assets/Zed/sass/_variables.scss b/assets/Zed/sass/_variables.scss index 80e50acb..b18a16cd 100644 --- a/assets/Zed/sass/_variables.scss +++ b/assets/Zed/sass/_variables.scss @@ -1,6 +1,55 @@ /** - * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. - * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. + * Copyright (c) 2016-present Spryker Systems GmbH. All rights reserved. + * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. */ $zed-logo: url(https://static.spryker.com/logo.svg) !default; + +$green-default: #17b497; +$green-dark: #138671; +$green-base: #1bbea0; +$green-light: #a0e1d5; +$green-lighter: #f1f8f7; + +$grey-dark: #71747c; +$grey-base: #9ea1a7; +$grey-light: #f1f1f1; +$grey-light2: #efeeee; +$grey-lighter: #f8f8f8; +$grey: #d4d5d7; +$grey2: #2b2c2d; +$grey3: #eee; + +$red-dark: #b82124; +$red-default: #f2392e; +$red-lighter: #ff3b21; +$red-light: #f9d3ce; +$red-lightest: #ebccd1; + +$brown: #a94442; + +$blue: #2480f2; +$blue2: #0088cc; +$blue-dark: #156698; +$blue-light: #eaf1fa; + +$orange: #ff6800; +$orange-dark: #b7540f; +$orange-light: #fef0e6; + +$ink-base: #121212; + +$white: #fff; +$white-red: #f2dede; +$black: #000; + +$box-shadow-green-hover: 0px 4px 12px 0px rgba($black, 0.15); +$box-shadow-green-focused: 0 0 0 1px $white, 0 0 3px 1px $green-base; + +$box-shadow-red-hover: 0px 4px 12px 0px rgba($black, 0.15); +$box-shadow-red-focused: 0 0 0 1px $white, 0 0 3px 1px $red-default; + +$main-font: 'Montserrat', 'Lato', sans-serif; + +$desktop: 1199px; +$tablet: 1023px; diff --git a/assets/Zed/sass/main.scss b/assets/Zed/sass/main.scss index 5bde57dd..5cd92fb2 100644 --- a/assets/Zed/sass/main.scss +++ b/assets/Zed/sass/main.scss @@ -9,7 +9,7 @@ $icon-font-path: '../../fonts/bootstrap/'; // external dependencies @import '~jquery-ui/themes/base/all.css'; @import '~bootstrap-sass/assets/stylesheets/bootstrap'; -@import '~font-awesome/scss/font-awesome'; +@import '~@fortawesome/fontawesome-free/css/all.css'; @import '~animate.css/animate'; @import '~metismenu/src/metisMenu'; @import '~datatables.net-bs/css/dataTables.bootstrap'; @@ -23,13 +23,13 @@ $icon-font-path: '../../fonts/bootstrap/'; // inspinia @import '../../Inspinia/css/style'; -@import '../../Inspinia/css/fonts'; // spryker customization @import 'variables'; +@import 'mixins'; @import 'inspinia'; -@import 'custom'; @import 'action-buttons'; +@import 'custom'; @import 'flags'; @import 'data-tables'; @import 'wave-loader'; diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonTwigPlugin.php index 6fe4221c..95d81195 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/BackActionButtonTwigPlugin.php @@ -36,7 +36,7 @@ protected function getButtonClass(): string */ protected function getIcon(): string { - return ' '; + return ' '; } /** @@ -44,6 +44,6 @@ protected function getIcon(): string */ protected function getButtonDefaultClass(): string { - return 'btn-sm btn-outline safe-submit'; + return 'btn-sm btn-view btn-outline safe-submit'; } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php index 6ac470d5..f4b126c0 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/CreateActionButtonTwigPlugin.php @@ -36,7 +36,7 @@ protected function getButtonClass(): string */ protected function getIcon(): string { - return ' '; + return ''; } /** @@ -44,6 +44,6 @@ protected function getIcon(): string */ protected function getButtonDefaultClass(): string { - return 'btn-sm btn-outline safe-submit'; + return 'btn-sm safe-submit'; } } diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php index 55ccd3b8..70de28e5 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/EditActionButtonTwigPlugin.php @@ -36,7 +36,7 @@ protected function getButtonClass(): string */ protected function getIcon(): string { - return ' '; + return ' '; } /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php index 97b088f0..6edceeee 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Action/ViewActionButtonTwigPlugin.php @@ -36,7 +36,7 @@ protected function getButtonClass(): string */ protected function getIcon(): string { - return ' '; + return ''; } /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonTwigPlugin.php index 457ef7cd..d298633c 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/BackTableButtonTwigPlugin.php @@ -36,7 +36,7 @@ protected function getButtonClass(): string */ protected function getIcon(): string { - return ' '; + return ' '; } /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php index f4916899..1028b9c7 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/EditTableButtonTwigPlugin.php @@ -36,7 +36,7 @@ protected function getButtonClass(): string */ protected function getIcon(): string { - return ' '; + return ' '; } /** diff --git a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php index 367b2805..04db28a8 100644 --- a/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php +++ b/src/Spryker/Zed/Gui/Communication/Plugin/Twig/Buttons/Table/RemoveTableButtonTwigPlugin.php @@ -36,7 +36,7 @@ protected function getButtonClass(): string */ protected function getIcon(): string { - return ' '; + return ''; } /** diff --git a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php index 2abd8fa8..f93431ec 100644 --- a/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php +++ b/src/Spryker/Zed/Gui/Communication/Table/AbstractTable.php @@ -1107,7 +1107,7 @@ protected function generateEditButton($url, $title, array $options = []) { $defaultOptions = [ 'class' => 'btn-edit', - 'icon' => 'fa-pencil-square-o', + 'icon' => 'fa-edit', ]; return $this->generateButton($url, $title, $defaultOptions, $options); @@ -1124,7 +1124,7 @@ protected function generateViewButton($url, $title, array $options = []) { $defaultOptions = [ 'class' => 'btn-view', - 'icon' => 'fa-caret-right', + 'icon' => 'fa-eye', ]; return $this->generateButton($url, $title, $defaultOptions, $options); @@ -1159,7 +1159,7 @@ protected function generateButtonGroup(array $buttonGroupItems, $title, array $o { $defaultOptions = [ 'class' => 'btn-view', - 'icon' => 'fa-caret-right', + 'icon' => 'fa-eye', ]; return $this->generateButtonGroupHtml($buttonGroupItems, $title, $defaultOptions, $options); diff --git a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig index b0df2259..eb626280 100644 --- a/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig +++ b/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig @@ -9,6 +9,7 @@ {% block head_css %} + {% endblock %} diff --git a/src/Spryker/Zed/Gui/Presentation/Partials/ibox.twig b/src/Spryker/Zed/Gui/Presentation/Partials/ibox.twig index eaa764ba..79fbffc3 100644 --- a/src/Spryker/Zed/Gui/Presentation/Partials/ibox.twig +++ b/src/Spryker/Zed/Gui/Presentation/Partials/ibox.twig @@ -26,7 +26,7 @@ {% block title %}{% endblock %}
    - +
    diff --git a/src/Spryker/Zed/Gui/Presentation/Partials/menu.twig b/src/Spryker/Zed/Gui/Presentation/Partials/menu.twig index f7cfef52..be4115a1 100644 --- a/src/Spryker/Zed/Gui/Presentation/Partials/menu.twig +++ b/src/Spryker/Zed/Gui/Presentation/Partials/menu.twig @@ -59,7 +59,6 @@ {%- endmacro -%} {%- import _self as menu -%} -