├── .php-cs-fixer.dist.php
├── CHANGELOG.md
├── Command
├── BaseBootstrapSymlinkCommand.php
├── BootstrapSymlinkLessCommand.php
├── BootstrapSymlinkSassCommand.php
└── InstallFontCommand.php
├── Composer
└── ScriptHandler.php
├── DependencyInjection
├── Compiler
│ └── FormPass.php
├── Configuration.php
└── MopaBootstrapExtension.php
├── Form
├── Extension
│ ├── DateTypeExtension.php
│ ├── DatetimeTypeExtension.php
│ ├── EmbedFormExtension.php
│ ├── ErrorTypeFormTypeExtension.php
│ ├── HelpFormTypeExtension.php
│ ├── IconButtonExtension.php
│ ├── LayoutFormTypeExtension.php
│ ├── LegendFormTypeExtension.php
│ ├── OffsetButtonExtension.php
│ ├── StaticTextExtension.php
│ ├── TabbedFormTypeExtension.php
│ ├── TimeTypeExtension.php
│ ├── WidgetCollectionFormTypeExtension.php
│ └── WidgetFormTypeExtension.php
└── Type
│ ├── FormActionsType.php
│ ├── TabType.php
│ └── TabsType.php
├── Menu
├── Converter
│ └── MenuConverter.php
└── Factory
│ ├── MenuDecorator.php
│ └── MenuExtension.php
├── MopaBootstrapBundle.php
├── README.md
├── Resources
├── config
│ ├── bootstrap.xml
│ ├── command.xml
│ ├── form.xml
│ ├── initializr.xml
│ ├── menu.xml
│ └── twig.xml
├── doc
│ ├── extensions
│ │ ├── 1-icons.md
│ │ ├── 2-navbars.md
│ │ ├── 3-initializr.md
│ │ ├── 3.1-initializr-variables.md
│ │ └── 4-support-for-other-bundles.md
│ ├── form
│ │ ├── 1-form-extension-templates.md
│ │ ├── 2-form-collections.md
│ │ ├── 3-form-tabs.md
│ │ └── 4-form-components.md
│ ├── index.md
│ ├── install
│ │ ├── 1-getting-started.md
│ │ ├── 2-less-installation.md
│ │ ├── 3-sass-configuration.md
│ │ └── 4-assetic-configuration.md
│ ├── misc
│ │ ├── configuration-reference.md
│ │ ├── including-bootstrap.md
│ │ ├── testing-forms.md
│ │ └── windows-tips.md
│ └── usage
│ │ └── 1-base-templates.md
├── meta
│ └── LICENSE
├── public
│ ├── components
│ │ └── smalot-bootstrap-datetimepicker
│ │ │ ├── build
│ │ │ ├── build.less
│ │ │ └── build_standalone.less
│ │ │ ├── css
│ │ │ ├── bootstrap-datetimepicker.css
│ │ │ └── bootstrap-datetimepicker.min.css
│ │ │ ├── js
│ │ │ ├── bootstrap-datetimepicker.js
│ │ │ └── locales
│ │ │ │ ├── bootstrap-datetimepicker.bg.js
│ │ │ │ ├── bootstrap-datetimepicker.ca.js
│ │ │ │ ├── bootstrap-datetimepicker.cs.js
│ │ │ │ ├── bootstrap-datetimepicker.da.js
│ │ │ │ ├── bootstrap-datetimepicker.de.js
│ │ │ │ ├── bootstrap-datetimepicker.el.js
│ │ │ │ ├── bootstrap-datetimepicker.es.js
│ │ │ │ ├── bootstrap-datetimepicker.fi.js
│ │ │ │ ├── bootstrap-datetimepicker.fr.js
│ │ │ │ ├── bootstrap-datetimepicker.he.js
│ │ │ │ ├── bootstrap-datetimepicker.hr.js
│ │ │ │ ├── bootstrap-datetimepicker.hu.js
│ │ │ │ ├── bootstrap-datetimepicker.id.js
│ │ │ │ ├── bootstrap-datetimepicker.is.js
│ │ │ │ ├── bootstrap-datetimepicker.it.js
│ │ │ │ ├── bootstrap-datetimepicker.ja.js
│ │ │ │ ├── bootstrap-datetimepicker.kr.js
│ │ │ │ ├── bootstrap-datetimepicker.lt.js
│ │ │ │ ├── bootstrap-datetimepicker.lv.js
│ │ │ │ ├── bootstrap-datetimepicker.ms.js
│ │ │ │ ├── bootstrap-datetimepicker.nb.js
│ │ │ │ ├── bootstrap-datetimepicker.nl.js
│ │ │ │ ├── bootstrap-datetimepicker.pl.js
│ │ │ │ ├── bootstrap-datetimepicker.pt-BR.js
│ │ │ │ ├── bootstrap-datetimepicker.pt.js
│ │ │ │ ├── bootstrap-datetimepicker.ro.js
│ │ │ │ ├── bootstrap-datetimepicker.rs-latin.js
│ │ │ │ ├── bootstrap-datetimepicker.rs.js
│ │ │ │ ├── bootstrap-datetimepicker.ru.js
│ │ │ │ ├── bootstrap-datetimepicker.sk.js
│ │ │ │ ├── bootstrap-datetimepicker.sl.js
│ │ │ │ ├── bootstrap-datetimepicker.sv.js
│ │ │ │ ├── bootstrap-datetimepicker.sw.js
│ │ │ │ ├── bootstrap-datetimepicker.th.js
│ │ │ │ ├── bootstrap-datetimepicker.tr.js
│ │ │ │ ├── bootstrap-datetimepicker.ua.js
│ │ │ │ ├── bootstrap-datetimepicker.uk.js
│ │ │ │ ├── bootstrap-datetimepicker.zh-CN.js
│ │ │ │ └── bootstrap-datetimepicker.zh-TW.js
│ │ │ └── less
│ │ │ └── datetimepicker.less
│ ├── css
│ │ ├── diagnostic.css
│ │ └── mopabootstrapbundle.css
│ ├── fonts
│ │ ├── bootstrap
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ └── glyphicons-halflings-regular.woff2
│ │ ├── fa
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ └── fontawesome-webfont.woff
│ │ ├── fa4
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ │ └── zmdi
│ │ │ ├── Material-Design-Iconic-Font.eot
│ │ │ ├── Material-Design-Iconic-Font.svg
│ │ │ ├── Material-Design-Iconic-Font.ttf
│ │ │ ├── Material-Design-Iconic-Font.woff
│ │ │ └── Material-Design-Iconic-Font.woff2
│ ├── img
│ │ ├── glyphicons-halflings-white.png
│ │ └── glyphicons-halflings.png
│ ├── js
│ │ ├── html5bp_plugins.js
│ │ ├── html5bp_script.js
│ │ ├── modernizr-2.7.1-respond-1.4.2.min.js
│ │ ├── mopabootstrap-collection.js
│ │ └── mopabootstrap-subnav.js
│ ├── less
│ │ ├── bootstrap-fontawesome.less
│ │ ├── bootstrap-fontawesome4.less
│ │ ├── collections.less
│ │ ├── eyecon-datepicker.less
│ │ ├── font-awesome
│ │ │ ├── animated.less
│ │ │ ├── bordered-pulled.less
│ │ │ ├── core.less
│ │ │ ├── fixed-width.less
│ │ │ ├── font-awesome.less
│ │ │ ├── icons.less
│ │ │ ├── larger.less
│ │ │ ├── list.less
│ │ │ ├── mixins.less
│ │ │ ├── path.less
│ │ │ ├── rotated-flipped.less
│ │ │ ├── spinning.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ ├── font-awesome4
│ │ │ ├── bordered-pulled.less
│ │ │ ├── core.less
│ │ │ ├── fixed-width.less
│ │ │ ├── font-awesome.less
│ │ │ ├── icons.less
│ │ │ ├── larger.less
│ │ │ ├── list.less
│ │ │ ├── mixins.less
│ │ │ ├── path.less
│ │ │ ├── rotated-flipped.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ ├── google-maps.less
│ │ ├── mopabootstrapbundle-fa.less
│ │ ├── mopabootstrapbundle-fa4.less
│ │ ├── mopabootstrapbundle.less
│ │ ├── paginator.less
│ │ └── subnav.less
│ └── sass
│ │ ├── bootstrap-fontawesome.scss
│ │ ├── bootstrap_and_overrides.scss
│ │ ├── collections.scss
│ │ ├── font-awesome
│ │ ├── _animated.scss
│ │ ├── _bordered-pulled.scss
│ │ ├── _core.scss
│ │ ├── _fixed-width.scss
│ │ ├── _icons.scss
│ │ ├── _larger.scss
│ │ ├── _list.scss
│ │ ├── _mixins.scss
│ │ ├── _path.scss
│ │ ├── _rotated-flipped.scss
│ │ ├── _stacked.scss
│ │ ├── _variables.scss
│ │ └── font-awesome.scss
│ │ ├── form_flow.scss
│ │ ├── initializr_addons.scss
│ │ ├── initializr_style.scss
│ │ ├── mopabootstrapbundle-3.2.scss
│ │ ├── mopabootstrapbundle-fa.scss
│ │ ├── mopabootstrapbundle.scss
│ │ └── paginator.scss
├── translations
│ ├── pagination.ar.yml
│ ├── pagination.de.yml
│ ├── pagination.en.yml
│ ├── pagination.es.yml
│ ├── pagination.fr.yml
│ ├── pagination.it.yml
│ ├── pagination.ja.yml
│ ├── pagination.lt.yml
│ ├── pagination.nl.yml
│ ├── pagination.pl.yml
│ ├── pagination.pt.yml
│ ├── pagination.ru.yml
│ ├── pagination.sk.yml
│ ├── pagination.sl.yml
│ ├── pagination.sv.yml
│ └── pagination.uk.yml
└── views
│ ├── Form
│ ├── fields.html.twig
│ ├── formflow_buttons.html.twig
│ └── formflow_stepList.html.twig
│ ├── Menu
│ └── menu.html.twig
│ ├── Modal
│ └── modal.html.twig
│ ├── Navbar
│ ├── navbar.html.twig
│ └── subnavbar.html.twig
│ ├── Pagination
│ ├── sliding.html.twig
│ ├── sliding_item.html.twig
│ └── sortable_link.html.twig
│ ├── base.html.twig
│ ├── base_initializr.html.twig
│ ├── base_less.html.twig
│ ├── base_lessjs.html.twig
│ ├── base_sass.html.twig
│ ├── base_sass_3.2.html.twig
│ ├── flash.html.twig
│ ├── icons.html.twig
│ ├── layout.html.twig
│ └── macros.html.twig
├── Twig
├── FlashExtension.php
├── FormExtension.php
├── IconExtension.php
├── InitializrTwigExtension.php
└── MenuExtension.php
├── UPGRADE-2.1.md
└── composer.json
/.php-cs-fixer.dist.php:
--------------------------------------------------------------------------------
1 |
7 |
8 | For the full copyright and license information, please view the LICENSE
9 | file that was distributed with this source code.
10 | EOF;
11 |
12 | $finder = PhpCsFixer\Finder::create()
13 | ->exclude([
14 | 'vendor',
15 | ])
16 | ->in(__DIR__)
17 | ;
18 |
19 | return ($config = new PhpCsFixer\Config())
20 | ->setRules([
21 | '@Symfony' => true,
22 | 'array_syntax' => ['syntax' => 'short'],
23 | 'header_comment' => ['header' => $header],
24 | 'full_opening_tag' => false,
25 | 'list_syntax' => ['syntax' => 'short'],
26 | 'native_constant_invocation' => true,
27 | 'native_function_invocation' => [
28 | 'include' => ['@all'],
29 | ],
30 | 'yoda_style' => false,
31 | ])
32 | ->setFinder($finder)
33 | ;
34 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | CHANGELOG for master
2 | ====================
3 |
4 | This changelog references the relevant changes (api changes) done
5 | in master branch.
6 |
7 | To get the diff for a specific change, go to https://github.com/phiamo/MopaBootstrapBundle/commit/XXX where XXX is the change hash
8 |
9 | * dc4fd12: [BC Break] Removed inline completely
10 | * add75e9: Renamed config mopa_bootstrap.navbar to mopa_bootstrap.menu
11 | * a4b78d5: Added Version Detection for BS2 or BS3
12 | * 5f1200f: Changed the widget_addon form parameter to use type (prepend/append) instead of append (true/false)
13 | * 6d4f685: Using label_attr instead of attr value to define inline button classes @see https://github.com/phiamo/MopaBootstrapSandboxBundle/commit/e808d2b596675f2969c6e42b835761bf00ea575c
14 | * 004df07: Removed js links in templates provided to prevent assetic errors, you MUST define which js files to include in your project!
15 |
--------------------------------------------------------------------------------
/Command/BootstrapSymlinkLessCommand.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Command;
13 |
14 | use Symfony\Component\Console\Attribute\AsCommand;
15 |
16 | /**
17 | * Command to create Bootstrap symlink to MopaBootstrapBundle.
18 | */
19 | #[AsCommand(name: 'mopa:bootstrap:symlink:less')]
20 | class BootstrapSymlinkLessCommand extends BaseBootstrapSymlinkCommand
21 | {
22 | public static $mopaBootstrapBundleName = 'mopa/bootstrap-bundle';
23 | public static $twitterBootstrapName = 'twbs/bootstrap';
24 |
25 | protected static $defaultName = 'mopa:bootstrap:symlink:less';
26 |
27 | protected function getTwitterBootstrapName()
28 | {
29 | return self::$twitterBootstrapName;
30 | }
31 |
32 | protected function configure(): void
33 | {
34 | parent::configure();
35 |
36 | $this
37 | ->setHelp(
38 | <<mopa:bootstrap:symlink:less command helps you checking and symlinking/mirroring the twitters/bootstrap library.
40 |
41 | By default, the command uses composer to retrieve the paths of MopaBootstrapBundle and twbs/bootstrap in your vendors.
42 |
43 | If you want to control the paths yourself specify the paths manually:
44 |
45 | php app/console mopa:bootstrap:symlink:less --manual
46 |
47 | Defaults if installed by composer would be :
48 |
49 | pathToTwitterBootstrap: ../../../../../../../vendor/twitter/bootstrap
50 | pathToMopaBootstrapBundle: vendor/mopa/bootstrap-bundle/Mopa/Bundle/BootstrapBundle/Resources/bootstrap
51 |
52 | EOT
53 | );
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/Command/BootstrapSymlinkSassCommand.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Command;
13 |
14 | use Symfony\Component\Console\Attribute\AsCommand;
15 |
16 | /**
17 | * Command to create Bootstrap (SASS) symlink to MopaBootstrapBundle.
18 | */
19 | #[AsCommand(name: 'mopa:bootstrap:symlink:sass')]
20 | class BootstrapSymlinkSassCommand extends BaseBootstrapSymlinkCommand
21 | {
22 | public static $twitterBootstrapName = 'twbs/bootstrap-sass';
23 | public static $targetSuffix = '-sass';
24 | public static $pathName = 'TwitterBootstrapSass';
25 |
26 | protected static $defaultName = 'mopa:bootstrap:symlink:sass';
27 |
28 | protected function getTwitterBootstrapName()
29 | {
30 | return static::$twitterBootstrapName;
31 | }
32 |
33 | protected function configure(): void
34 | {
35 | parent::configure();
36 |
37 | $this
38 | ->setHelp(
39 | <<mopa:bootstrap:symlink:sass command helps you checking and symlinking/mirroring the twbs/bootstrap-sass library.
41 |
42 | By default, the command uses composer to retrieve the paths of MopaBootstrapBundle and twbs/bootstrap-sass in your vendors.
43 |
44 | If you want to control the paths yourself specify the paths manually:
45 |
46 | php app/console mopa:bootstrap:symlink:sass --manual
47 |
48 | Defaults if installed by composer would be :
49 |
50 | pathToTwitterBootstrapSass: ../../../../../../../vendor/twbs/bootstrap-sass
51 | pathToMopaBootstrapBundle: vendor/mopa/bootstrap-bundle/Mopa/Bundle/BootstrapBundle/Resources/bootstrap
52 |
53 | EOT
54 | );
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Command/InstallFontCommand.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Command;
13 |
14 | use Mopa\Bridge\Composer\Adapter\ComposerAdapter;
15 | use Mopa\Bridge\Composer\Util\ComposerPathFinder;
16 | use Symfony\Component\Console\Attribute\AsCommand;
17 | use Symfony\Component\Console\Command\Command;
18 | use Symfony\Component\Console\Input\InputInterface;
19 | use Symfony\Component\Console\Output\OutputInterface;
20 | use Symfony\Component\Filesystem\Filesystem;
21 | use Symfony\Component\Finder\Finder;
22 | use Symfony\Component\HttpKernel\KernelInterface;
23 |
24 | /**
25 | * Command to create Bootstrap symlink to MopaBootstrapBundle.
26 | */
27 | #[AsCommand(name: 'mopa:bootstrap:install:font')]
28 | class InstallFontCommand extends Command
29 | {
30 | public static $iconSetsPaths = [
31 | 'glyphicons' => 'fonts/bootstrap',
32 | 'fontawesome' => 'fonts/fa',
33 | 'fontawesome4' => 'fonts/fa4',
34 | 'zmdi' => 'fonts/zmdi',
35 | ];
36 |
37 | protected static $defaultName = 'mopa:bootstrap:install:font';
38 |
39 | /**
40 | * @var KernelInterface
41 | */
42 | private $kernel;
43 |
44 | /**
45 | * @var string
46 | */
47 | private $iconSet;
48 |
49 | public function __construct(KernelInterface $kernel, $iconSet)
50 | {
51 | $this->kernel = $kernel;
52 | $this->iconSet = $iconSet;
53 |
54 | parent::__construct();
55 | }
56 |
57 | /**
58 | * {@inheritdoc}
59 | */
60 | protected function configure(): void
61 | {
62 | $this
63 | ->setDescription('Install font to web/fonts')
64 | ->setHelp(
65 | <<mopa:bootstrap:install:font command install the font configured to used into web/fonts directory
67 |
68 | EOT
69 | );
70 | }
71 |
72 | /**
73 | * {@inheritdoc}
74 | */
75 | protected function execute(InputInterface $input, OutputInterface $output): int
76 | {
77 | $finder = new Finder();
78 | $iconWebPath = $this->kernel->getProjectDir().\DIRECTORY_SEPARATOR.'web'.\DIRECTORY_SEPARATOR.'fonts';
79 |
80 | $fs = new Filesystem();
81 |
82 | if (!$fs->exists($iconWebPath)) {
83 | $fs->mkdir($iconWebPath);
84 | }
85 |
86 | $composer = ComposerAdapter::getComposer($input, $output);
87 |
88 | $cmanager = new ComposerPathFinder($composer);
89 |
90 | $sourcePackage = $cmanager->findPackage('mopa/bootstrap-bundle');
91 |
92 | $bsbPath = $composer->getInstallationManager()->getInstallPath($sourcePackage);
93 |
94 | $iconSetPath = $bsbPath.\DIRECTORY_SEPARATOR.'Resources'.\DIRECTORY_SEPARATOR.'public'.\DIRECTORY_SEPARATOR.self::$iconSetsPaths[$this->iconSet];
95 |
96 | $finder->files()->in($iconSetPath);
97 |
98 | foreach ($finder as $file) {
99 | $fs->copy($file->getRealpath(), $iconWebPath.\DIRECTORY_SEPARATOR.$file->getRelativePathname());
100 | }
101 |
102 | $output->writeln('Font: '.$this->iconSet.' Installed... OK ');
103 |
104 | return \defined(Command::class.'::SUCCESS') ? Command::SUCCESS : 0;
105 | }
106 |
107 | public static function installFonts()
108 | {
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/DependencyInjection/Compiler/FormPass.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\DependencyInjection\Compiler;
13 |
14 | use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
15 | use Symfony\Component\DependencyInjection\ContainerBuilder;
16 |
17 | /**
18 | * Add a new twig.form.resources.
19 | *
20 | * @author Philipp A. Mohrenweiser
21 | */
22 | class FormPass implements CompilerPassInterface
23 | {
24 | /**
25 | * {@inheritdoc}
26 | */
27 | public function process(ContainerBuilder $container): void
28 | {
29 | if ($container->hasParameter('mopa_bootstrap.form.templating') && false !== ($template = $container->getParameter('mopa_bootstrap.form.templating'))) {
30 | $resources = $container->getParameter('twig.form.resources');
31 | // Ensure it wasn't already added via config
32 | if (!\in_array($template, $resources, true)) {
33 | // If form_div_layout.html.twig is found, insert BootstrapBundle right after
34 | // Else insert Mopa in first position
35 | if (false !== ($key = \array_search('form_div_layout.html.twig', $resources, true))) {
36 | \array_splice($resources, ++$key, 0, $template);
37 | } else {
38 | \array_unshift($resources, $template);
39 | }
40 |
41 | $container->setParameter('twig.form.resources', $resources);
42 | }
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Form/Extension/DateTypeExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\DateType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for Date type.
22 | *
23 | * @author phiamo
24 | */
25 | class DateTypeExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * @var array
29 | */
30 | protected $options;
31 |
32 | /**
33 | * Constructor.
34 | */
35 | public function __construct(array $options)
36 | {
37 | $this->options = $options;
38 | }
39 |
40 | /**
41 | * {@inheritdoc}
42 | */
43 | public function finishView(FormView $view, FormInterface $form, array $options): void
44 | {
45 | if ('single_text' === $options['widget']) {
46 | if (isset($options['datepicker'])) {
47 | $view->vars['datepicker'] = $options['datepicker'];
48 | }
49 | if (isset($options['widget_reset_icon'])) {
50 | $view->vars['widget_reset_icon'] = $options['widget_reset_icon'];
51 | }
52 | }
53 |
54 | $view->vars['date_wrapper_class'] = $options['date_wrapper_class'];
55 | }
56 |
57 | /**
58 | * {@inheritdoc}
59 | */
60 | public function configureOptions(OptionsResolver $resolver): void
61 | {
62 | $resolver->setDefined([
63 | 'datepicker',
64 | 'widget_reset_icon',
65 | ]);
66 |
67 | $resolver->setDefaults([
68 | 'date_wrapper_class' => $this->options['date_wrapper_class'],
69 | ]);
70 | }
71 |
72 | /**
73 | * {@inheritdoc}
74 | */
75 | public static function getExtendedTypes(): iterable
76 | {
77 | return [
78 | DateType::class,
79 | ];
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/Form/Extension/DatetimeTypeExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for Datetime type.
22 | *
23 | * @author phiamo
24 | */
25 | class DatetimeTypeExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * {@inheritdoc}
29 | */
30 | public function finishView(FormView $view, FormInterface $form, array $options): void
31 | {
32 | if ('single_text' === $options['widget']) {
33 | if (isset($options['datetimepicker'])) {
34 | $view->vars['datetimepicker'] = $options['datetimepicker'];
35 | }
36 | if (isset($options['widget_reset_icon'])) {
37 | $view->vars['widget_reset_icon'] = $options['widget_reset_icon'];
38 | }
39 | }
40 | }
41 |
42 | /**
43 | * {@inheritdoc}
44 | */
45 | public function configureOptions(OptionsResolver $resolver): void
46 | {
47 | $resolver->setDefined([
48 | 'datetimepicker',
49 | 'widget_reset_icon',
50 | ]);
51 | }
52 |
53 | /**
54 | * {@inheritdoc}
55 | */
56 | public static function getExtendedTypes(): iterable
57 | {
58 | return [
59 | DateTimeType::class,
60 | ];
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/Form/Extension/EmbedFormExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\FormType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for displaying 'inline' sub-forms.
22 | *
23 | * @author peshi
24 | */
25 | class EmbedFormExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * {@inheritdoc}
29 | */
30 | public function configureOptions(OptionsResolver $resolver): void
31 | {
32 | $resolver->setDefaults([
33 | 'embed_form' => null,
34 | ]);
35 | }
36 |
37 | /**
38 | * {@inheritdoc}
39 | */
40 | public function buildView(FormView $view, FormInterface $form, array $options): void
41 | {
42 | $view->vars['embed_form'] = $options['embed_form'];
43 | }
44 |
45 | /**
46 | * {@inheritdoc}
47 | */
48 | public static function getExtendedTypes(): iterable
49 | {
50 | return [
51 | FormType::class,
52 | ];
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/Form/Extension/ErrorTypeFormTypeExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\FormType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for FormError handling.
22 | *
23 | * @author phiamo
24 | */
25 | class ErrorTypeFormTypeExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * @var string
29 | */
30 | protected $errorType;
31 |
32 | /**
33 | * Constructor.
34 | */
35 | public function __construct(array $options)
36 | {
37 | $this->errorType = $options['error_type'];
38 | }
39 |
40 | /**
41 | * {@inheritdoc}
42 | */
43 | public function buildView(FormView $view, FormInterface $form, array $options): void
44 | {
45 | $view->vars['error_type'] = $options['error_type'];
46 | $view->vars['error_delay'] = $options['error_delay'];
47 | }
48 |
49 | /**
50 | * {@inheritdoc}
51 | */
52 | public function configureOptions(OptionsResolver $resolver): void
53 | {
54 | $resolver->setDefaults([
55 | 'error_type' => $this->errorType,
56 | 'error_delay' => false,
57 | ]);
58 | }
59 |
60 | /**
61 | * {@inheritdoc}
62 | */
63 | public static function getExtendedTypes(): iterable
64 | {
65 | return [
66 | FormType::class,
67 | ];
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/Form/Extension/IconButtonExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\ButtonType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for Button Icons handling.
22 | *
23 | * @author phiamo
24 | */
25 | class IconButtonExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * {@inheritdoc}
29 | */
30 | public function configureOptions(OptionsResolver $resolver): void
31 | {
32 | $resolver->setDefaults([
33 | 'icon' => null,
34 | 'icon_inverted' => false,
35 | ]);
36 | }
37 |
38 | /**
39 | * {@inheritdoc}
40 | */
41 | public function buildView(FormView $view, FormInterface $form, array $options): void
42 | {
43 | $view->vars['icon'] = $options['icon'];
44 | $view->vars['icon_inverted'] = $options['icon_inverted'];
45 | }
46 |
47 | /**
48 | * {@inheritdoc}
49 | */
50 | public static function getExtendedTypes(): iterable
51 | {
52 | return [
53 | ButtonType::class,
54 | ];
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Form/Extension/LayoutFormTypeExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\FormType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\Options;
19 | use Symfony\Component\OptionsResolver\OptionsResolver;
20 |
21 | /**
22 | * Extension to customize forms layout.
23 | *
24 | * @author phiamo
25 | */
26 | class LayoutFormTypeExtension extends AbstractTypeExtension
27 | {
28 | /**
29 | * @var array
30 | */
31 | protected $options;
32 |
33 | /**
34 | * Constructor.
35 | */
36 | public function __construct(array $options)
37 | {
38 | $this->options = $options;
39 | }
40 |
41 | /**
42 | * {@inheritdoc}
43 | */
44 | public function buildView(FormView $view, FormInterface $form, array $options): void
45 | {
46 | $layout = $options['layout'];
47 |
48 | if ($layout === null) {
49 | if ($view->parent) {
50 | $layout = $view->parent->vars['layout'];
51 | } else {
52 | $layout = $this->options['layout'];
53 | }
54 | }
55 |
56 | $view->vars = \array_replace($view->vars, [
57 | 'layout' => $layout,
58 | 'horizontal' => 'horizontal' === $layout, // BC
59 | 'horizontal_label_class' => $options['horizontal_label_class'],
60 | 'horizontal_label_offset_class' => $options['horizontal_label_offset_class'],
61 | 'horizontal_input_wrapper_class' => $options['horizontal_input_wrapper_class'],
62 | 'horizontal_label_div_class' => $options['horizontal_label_div_class'],
63 | ]);
64 | }
65 |
66 | public function finishView(FormView $view, FormInterface $form, array $options): void
67 | {
68 | if (!$view->parent && $options['compound'] && $view->vars['layout']) {
69 | $class = isset($view->vars['attr']['class']) ? $view->vars['attr']['class'].' ' : '';
70 | $view->vars['attr']['class'] = $class.'form-'.$view->vars['layout'];
71 | }
72 | }
73 |
74 | /**
75 | * {@inheritdoc}
76 | */
77 | public function configureOptions(OptionsResolver $resolver): void
78 | {
79 | $resolver->setDefaults([
80 | 'layout' => function (Options $options) {
81 | // BC
82 | if (isset($options['horizontal']) && false === $options['horizontal']) {
83 | return false;
84 | }
85 |
86 | return null;
87 | },
88 | 'horizontal' => null,
89 | 'horizontal_label_class' => $this->options['horizontal_label_class'],
90 | 'horizontal_label_offset_class' => $this->options['horizontal_label_offset_class'],
91 | 'horizontal_input_wrapper_class' => $this->options['horizontal_input_wrapper_class'],
92 | 'horizontal_label_div_class' => $this->options['horizontal_label_div_class'],
93 | ]);
94 |
95 | $resolver->setAllowedValues('layout', [false, null, 'horizontal', 'inline']);
96 | }
97 |
98 | /**
99 | * {@inheritdoc}
100 | */
101 | public static function getExtendedTypes(): iterable
102 | {
103 | return [
104 | FormType::class,
105 | ];
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/Form/Extension/LegendFormTypeExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\FormType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for Form Legend handling.
22 | *
23 | * @author phiamo
24 | */
25 | class LegendFormTypeExtension extends AbstractTypeExtension
26 | {
27 | private $renderFieldset;
28 | private $showLegend;
29 | private $showChildLegend;
30 | private $legendTag;
31 | private $renderRequiredAsterisk;
32 | private $renderOptionalText;
33 |
34 | /**
35 | * Constructor.
36 | */
37 | public function __construct(array $options)
38 | {
39 | $this->renderFieldset = $options['render_fieldset'];
40 | $this->showLegend = $options['show_legend'];
41 | $this->showChildLegend = $options['show_child_legend'];
42 | $this->legendTag = $options['legend_tag'];
43 | $this->renderRequiredAsterisk = $options['render_required_asterisk'];
44 | $this->renderOptionalText = $options['render_optional_text'];
45 | }
46 |
47 | /**
48 | * {@inheritdoc}
49 | */
50 | public function buildView(FormView $view, FormInterface $form, array $options): void
51 | {
52 | $view->vars['render_fieldset'] = $options['render_fieldset'];
53 | $view->vars['show_legend'] = $options['show_legend'];
54 | $view->vars['show_child_legend'] = $options['show_child_legend'];
55 | $view->vars['legend_tag'] = $options['legend_tag'];
56 | $view->vars['label_render'] = $options['label_render'];
57 | $view->vars['render_required_asterisk'] = $options['render_required_asterisk'];
58 | $view->vars['render_optional_text'] = $options['render_optional_text'];
59 | }
60 |
61 | /**
62 | * {@inheritdoc}
63 | */
64 | public function configureOptions(OptionsResolver $resolver): void
65 | {
66 | $resolver->setDefaults([
67 | 'render_fieldset' => $this->renderFieldset,
68 | 'show_legend' => $this->showLegend,
69 | 'show_child_legend' => $this->showChildLegend,
70 | 'legend_tag' => $this->legendTag,
71 | 'label_render' => true,
72 | 'render_required_asterisk' => $this->renderRequiredAsterisk,
73 | 'render_optional_text' => $this->renderOptionalText,
74 | ]);
75 | }
76 |
77 | /**
78 | * {@inheritdoc}
79 | */
80 | public static function getExtendedTypes(): iterable
81 | {
82 | return [
83 | FormType::class,
84 | ];
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/Form/Extension/OffsetButtonExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\ButtonType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for Offsetting a button.
22 | *
23 | * @author peshi
24 | */
25 | class OffsetButtonExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * {@inheritdoc}
29 | */
30 | public function configureOptions(OptionsResolver $resolver): void
31 | {
32 | $resolver->setDefaults([
33 | 'button_offset' => null,
34 | ]);
35 | }
36 |
37 | /**
38 | * {@inheritdoc}
39 | */
40 | public function buildView(FormView $view, FormInterface $form, array $options): void
41 | {
42 | $view->vars['button_offset'] = $options['button_offset'];
43 | }
44 |
45 | /**
46 | * {@inheritdoc}
47 | */
48 | public static function getExtendedTypes(): iterable
49 | {
50 | return [
51 | ButtonType::class,
52 | ];
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/Form/Extension/StaticTextExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\FormType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for creating static text (form-control-static).
22 | *
23 | * @author peshi
24 | */
25 | class StaticTextExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * {@inheritdoc}
29 | */
30 | public function configureOptions(OptionsResolver $resolver): void
31 | {
32 | $resolver->setDefaults([
33 | 'static_text' => null,
34 | ]);
35 | }
36 |
37 | /**
38 | * {@inheritdoc}
39 | */
40 | public function buildView(FormView $view, FormInterface $form, array $options): void
41 | {
42 | $view->vars['static_text'] = $options['static_text'];
43 | if ($options['static_text'] === true) {
44 | $view->vars['disabled'] = true;
45 | }
46 | }
47 |
48 | /**
49 | * {@inheritdoc}
50 | */
51 | public static function getExtendedTypes(): iterable
52 | {
53 | return [
54 | FormType::class,
55 | ];
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/Form/Extension/TabbedFormTypeExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Mopa\Bundle\BootstrapBundle\Form\Type\TabsType;
15 | use Symfony\Component\Form\AbstractTypeExtension;
16 | use Symfony\Component\Form\Extension\Core\Type\FormType;
17 | use Symfony\Component\Form\FormFactoryInterface;
18 | use Symfony\Component\Form\FormInterface;
19 | use Symfony\Component\Form\FormView;
20 | use Symfony\Component\OptionsResolver\OptionsResolver;
21 |
22 | /**
23 | * Extension for Adding Tabs to Form type.
24 | */
25 | class TabbedFormTypeExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * @var FormFactoryInterface
29 | */
30 | private $formFactory;
31 |
32 | /**
33 | * @var array
34 | */
35 | private $options;
36 |
37 | /**
38 | * Constructor.
39 | */
40 | public function __construct(FormFactoryInterface $formFactory, array $options)
41 | {
42 | $this->formFactory = $formFactory;
43 | $this->options = $options;
44 | }
45 |
46 | /**
47 | * {@inheritdoc}
48 | */
49 | public function configureOptions(OptionsResolver $resolver): void
50 | {
51 | $resolver->setDefaults([
52 | 'tabs_class' => $this->options['class'],
53 | ]);
54 | }
55 |
56 | /**
57 | * {@inheritdoc}
58 | */
59 | public function buildView(FormView $view, FormInterface $form, array $options): void
60 | {
61 | $view->vars['tabbed'] = false;
62 | }
63 |
64 | /**
65 | * {@inheritdoc}
66 | */
67 | public function finishView(FormView $view, FormInterface $form, array $options): void
68 | {
69 | if (!$view->vars['tabbed']) {
70 | return;
71 | }
72 |
73 | $activeTab = null;
74 | $tabIndex = 0;
75 | $foundInvalid = false;
76 | $tabs = [];
77 |
78 | foreach ($view->children as $child) {
79 | if (\in_array('tab', $child->vars['block_prefixes'], true)) {
80 | $child->vars['tab_index'] = $tabIndex;
81 | $valid = $child->vars['valid'];
82 |
83 | if ((null === $activeTab || !$valid) && !$foundInvalid) {
84 | $activeTab = $child;
85 | $foundInvalid = !$valid;
86 | }
87 |
88 | $tabs[$tabIndex] = [
89 | 'id' => $child->vars['id'],
90 | 'name' => $child->vars['name'],
91 | 'label' => $child->vars['label'],
92 | 'icon' => $child->vars['icon'],
93 | 'active' => false,
94 | 'disabled' => $child->vars['disabled'],
95 | 'translation_domain' => $child->vars['translation_domain'],
96 | ];
97 |
98 | ++$tabIndex;
99 | }
100 | }
101 |
102 | $activeTab->vars['tab_active'] = true;
103 | $tabs[$activeTab->vars['tab_index']]['active'] = true;
104 |
105 | $tabsForm = $this->formFactory->create(TabsType::class, null, [
106 | 'tabs' => $tabs,
107 | 'attr' => [
108 | 'class' => $options['tabs_class'],
109 | ],
110 | ]);
111 |
112 | $view->vars['tabs'] = $tabs;
113 | $view->vars['tabbed'] = true;
114 | $view->vars['tabsView'] = $tabsForm->createView();
115 | }
116 |
117 | /**
118 | * {@inheritdoc}
119 | */
120 | public static function getExtendedTypes(): iterable
121 | {
122 | return [
123 | FormType::class,
124 | ];
125 | }
126 | }
127 |
--------------------------------------------------------------------------------
/Form/Extension/TimeTypeExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\TimeType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for Time type.
22 | *
23 | * @author phiamo
24 | */
25 | class TimeTypeExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * {@inheritdoc}
29 | */
30 | public function finishView(FormView $view, FormInterface $form, array $options): void
31 | {
32 | if ('single_text' === $options['widget']) {
33 | if (isset($options['timepicker'])) {
34 | $view->vars['timepicker'] = $options['timepicker'];
35 | }
36 | if (isset($options['widget_reset_icon'])) {
37 | $view->vars['widget_reset_icon'] = $options['widget_reset_icon'];
38 | }
39 | }
40 | }
41 |
42 | /**
43 | * {@inheritdoc}
44 | */
45 | public function configureOptions(OptionsResolver $resolver): void
46 | {
47 | $resolver->setDefined([
48 | 'timepicker',
49 | 'widget_reset_icon',
50 | ]);
51 | }
52 |
53 | /**
54 | * {@inheritdoc}
55 | */
56 | public static function getExtendedTypes(): iterable
57 | {
58 | return [
59 | TimeType::class,
60 | ];
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/Form/Extension/WidgetFormTypeExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Extension;
13 |
14 | use Symfony\Component\Form\AbstractTypeExtension;
15 | use Symfony\Component\Form\Extension\Core\Type\FormType;
16 | use Symfony\Component\Form\FormInterface;
17 | use Symfony\Component\Form\FormView;
18 | use Symfony\Component\OptionsResolver\OptionsResolver;
19 |
20 | /**
21 | * Extension for Form Widget Bootstrap handling.
22 | *
23 | * @author phiamo
24 | */
25 | class WidgetFormTypeExtension extends AbstractTypeExtension
26 | {
27 | /**
28 | * @var array
29 | */
30 | protected $options;
31 |
32 | /**
33 | * Constructor.
34 | */
35 | public function __construct(array $options)
36 | {
37 | $this->options = $options;
38 | }
39 |
40 | /**
41 | * {@inheritdoc}
42 | */
43 | public function buildView(FormView $view, FormInterface $form, array $options): void
44 | {
45 | if (\in_array('percent', $view->vars['block_prefixes'], true) && null === $options['widget_addon_append']) {
46 | $options['widget_addon_append'] = [];
47 | }
48 |
49 | if (\in_array('money', $view->vars['block_prefixes'], true) && null === $options['widget_addon_prepend']) {
50 | $options['widget_addon_prepend'] = [];
51 | }
52 |
53 | $view->vars['widget_form_control_class'] = $options['widget_form_control_class'];
54 | $view->vars['widget_form_group'] = $options['widget_form_group'];
55 | $view->vars['widget_addon_prepend'] = $options['widget_addon_prepend'];
56 | $view->vars['widget_addon_append'] = $options['widget_addon_append'];
57 | $view->vars['widget_btn_prepend'] = $options['widget_btn_prepend'];
58 | $view->vars['widget_btn_append'] = $options['widget_btn_append'];
59 | $view->vars['widget_prefix'] = $options['widget_prefix'];
60 | $view->vars['widget_suffix'] = $options['widget_suffix'];
61 | $view->vars['widget_type'] = $options['widget_type'];
62 | $view->vars['widget_items_attr'] = $options['widget_items_attr'];
63 | $view->vars['widget_form_group_attr'] = $options['widget_form_group_attr'];
64 | $view->vars['widget_checkbox_label'] = $options['widget_checkbox_label'];
65 | }
66 |
67 | /**
68 | * {@inheritdoc}
69 | */
70 | public function configureOptions(OptionsResolver $resolver): void
71 | {
72 | $resolver->setDefaults([
73 | 'widget_form_control_class' => 'form-control',
74 | 'widget_form_group' => true,
75 | 'widget_addon_prepend' => null,
76 | 'widget_addon_append' => null,
77 | 'widget_btn_prepend' => null,
78 | 'widget_btn_append' => null,
79 | 'widget_prefix' => null,
80 | 'widget_suffix' => null,
81 | 'widget_type' => '',
82 | 'widget_items_attr' => [],
83 | 'widget_form_group_attr' => [
84 | 'class' => 'form-group',
85 | ],
86 | 'widget_checkbox_label' => $this->options['checkbox_label'],
87 | ]);
88 |
89 | $resolver->setAllowedValues('widget_type', ['inline', 'inline-btn', '']);
90 | $resolver->setAllowedValues('widget_checkbox_label', ['label', 'widget', 'both']);
91 | }
92 |
93 | /**
94 | * {@inheritdoc}
95 | */
96 | public static function getExtendedTypes(): iterable
97 | {
98 | return [
99 | FormType::class,
100 | ];
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/Form/Type/FormActionsType.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Type;
13 |
14 | use Symfony\Component\Form\AbstractType;
15 | use Symfony\Component\Form\ButtonBuilder;
16 | use Symfony\Component\Form\FormBuilderInterface;
17 | use Symfony\Component\Form\FormInterface;
18 | use Symfony\Component\Form\FormView;
19 | use Symfony\Component\OptionsResolver\OptionsResolver;
20 |
21 | /**
22 | * Class FormActionsType.
23 | *
24 | * Adds support for form actions, printing buttons in a single line, and correctly offset.
25 | */
26 | class FormActionsType extends AbstractType
27 | {
28 | /**
29 | * {@inheritdoc}
30 | */
31 | public function buildForm(FormBuilderInterface $builder, array $options): void
32 | {
33 | foreach ($options['buttons'] as $name => $config) {
34 | $this->createButton($builder, $name, $config);
35 | }
36 | }
37 |
38 | /**
39 | * Adds a button.
40 | *
41 | * @param FormBuilderInterface $builder
42 | * @param $name
43 | * @param $config
44 | *
45 | * @return ButtonBuilder
46 | *
47 | * @throws \InvalidArgumentException
48 | */
49 | protected function createButton($builder, $name, $config): ButtonBuilder|FormBuilderInterface
50 | {
51 | $options = (isset($config['options'])) ? $config['options'] : [];
52 |
53 | $builder->add($name, $config['type'], $options);
54 |
55 | return $builder;
56 | }
57 |
58 | /**
59 | * {@inheritdoc}
60 | */
61 | public function configureOptions(OptionsResolver $resolver): void
62 | {
63 | $resolver->setDefaults([
64 | 'buttons' => [],
65 | 'options' => [],
66 | 'mapped' => false,
67 | 'button_offset' => null,
68 | ]);
69 | }
70 |
71 | /**
72 | * {@inheritdoc}
73 | */
74 | public function buildView(FormView $view, FormInterface $form, array $options): void
75 | {
76 | $view->vars['button_offset'] = $options['button_offset'];
77 | }
78 |
79 | /**
80 | * {@inheritdoc}
81 | */
82 | public function getBlockPrefix(): string
83 | {
84 | return 'form_actions';
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/Form/Type/TabType.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Type;
13 |
14 | use Symfony\Component\Form\AbstractType;
15 | use Symfony\Component\Form\FormInterface;
16 | use Symfony\Component\Form\FormView;
17 | use Symfony\Component\OptionsResolver\OptionsResolver;
18 |
19 | /**
20 | * Type for FormTab handling.
21 | *
22 | * @author phiamo
23 | */
24 | class TabType extends AbstractType
25 | {
26 | /**
27 | * {@inheritdoc}
28 | */
29 | public function configureOptions(OptionsResolver $resolver): void
30 | {
31 | $resolver->setDefaults([
32 | 'icon' => null,
33 | 'error_icon' => 'remove-sign',
34 | 'disabled' => false,
35 | ]);
36 | }
37 |
38 | /**
39 | * {@inheritdoc}
40 | */
41 | public function buildView(FormView $view, FormInterface $form, array $options): void
42 | {
43 | $view->vars['valid'] = $valid = !$form->isSubmitted() || $form->isValid();
44 | $view->vars['icon'] = $valid ? $options['icon'] : $options['error_icon'];
45 | $view->vars['tab_active'] = false;
46 | $view->vars['disabled'] = $options['disabled'];
47 |
48 | $view->parent->vars['tabbed'] = true;
49 | }
50 |
51 | /**
52 | * {@inheritdoc}
53 | */
54 | public function getBlockPrefix(): string
55 | {
56 | return 'tab';
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/Form/Type/TabsType.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Form\Type;
13 |
14 | use Symfony\Component\Form\AbstractType;
15 | use Symfony\Component\Form\FormInterface;
16 | use Symfony\Component\Form\FormView;
17 | use Symfony\Component\OptionsResolver\OptionsResolver;
18 |
19 | /**
20 | * Type for Tabs handling.
21 | *
22 | * @author phiamo
23 | */
24 | class TabsType extends AbstractType
25 | {
26 | /**
27 | * {@inheritdoc}
28 | */
29 | public function buildView(FormView $view, FormInterface $form, array $options): void
30 | {
31 | $view->vars['tabs'] = $options['tabs'];
32 | }
33 |
34 | /**
35 | * {@inheritdoc}
36 | */
37 | public function configureOptions(OptionsResolver $resolver): void
38 | {
39 | $resolver->setDefaults([
40 | 'tabs' => [],
41 | ]);
42 | }
43 |
44 | /**
45 | * {@inheritdoc}
46 | */
47 | public function getBlockPrefix(): string
48 | {
49 | return 'tabs';
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Menu/Factory/MenuExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Menu\Factory;
13 |
14 | use Knp\Menu\Factory\ExtensionInterface;
15 |
16 | /**
17 | * Extension for integrating Bootstrap Menus into KnpMenu.
18 | */
19 | class MenuExtension extends MenuDecorator implements ExtensionInterface
20 | {
21 | }
22 |
--------------------------------------------------------------------------------
/MopaBootstrapBundle.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle;
13 |
14 | use Mopa\Bundle\BootstrapBundle\DependencyInjection\Compiler\FormPass;
15 | use Symfony\Component\DependencyInjection\ContainerBuilder;
16 | use Symfony\Component\HttpKernel\Bundle\Bundle;
17 |
18 | class MopaBootstrapBundle extends Bundle
19 | {
20 | /**
21 | * {@inheritdoc}
22 | */
23 | public function build(ContainerBuilder $container): void
24 | {
25 | parent::build($container);
26 | $container->addCompilerPass(new FormPass());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Resources/config/bootstrap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | Resources/public/bootstrap
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Resources/config/command.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | %mopa_bootstrap.bootstrap.install_path%
6 |
7 |
8 |
9 | %mopa_bootstrap.bootstrap.install_path%
10 |
11 |
12 |
13 |
14 | %mopa_bootstrap.icons.icon_set%
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Resources/config/initializr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | Mopa\Bundle\BootstrapBundle\Twig\InitializrTwigExtension
9 |
10 |
11 |
12 |
13 |
14 | %mopa_bootstrap.initializr.meta%
15 | %mopa_bootstrap.initializr.dns_prefetch%
16 | %mopa_bootstrap.initializr.google%
17 | %mopa_bootstrap.initializr.diagnostic_mode%
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Resources/config/menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | Mopa\Bundle\BootstrapBundle\Twig\MenuExtension
9 | Mopa\Bundle\BootstrapBundle\Menu\Factory\MenuExtension
10 |
11 |
12 |
13 |
14 |
19 |
20 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Resources/config/twig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | Mopa\Bundle\BootstrapBundle\Twig\FormExtension
9 | Mopa\Bundle\BootstrapBundle\Twig\IconExtension
10 | Mopa\Bundle\BootstrapBundle\Twig\FlashExtension
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | %mopa_bootstrap.icons.icon_set%
20 | %mopa_bootstrap.icons.shortcut%
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Resources/doc/extensions/1-icons.md:
--------------------------------------------------------------------------------
1 | Icons
2 | ================
3 |
4 | This bundle supports using multiple types of icons and provides a Twig function
5 | to render them. By default, it is set to use Glyphicons, which is standard with
6 | Bootstrap. The default configuration is as follows:
7 |
8 | ```yaml
9 | mopa_bootstrap:
10 | icons:
11 | icon_set: glyphicons
12 | shortcut: icon
13 | ```
14 |
15 | Currently you can choose from
16 |
17 | - glyphicons
18 | - fontawesome
19 | - fontawesome4
20 |
21 | Please make sure you are including the corresponding less file:
22 |
23 | - mopabootstrapbundle.less for glyphicons
24 | - mopabootstrapbundle-fa.less for fontawesome
25 | - mopabootstrapbundle-fa4.less for fontawesome4
26 |
27 | And make sure you install the fonts after you confed the app/config.yml
28 |
29 | ```
30 | app/console mopa:bootstrap:install:font
31 | ```
32 |
33 | ### Usage
34 |
35 | You can use the Twig function as follows:
36 |
37 | ```jinja
38 | Regular Icon - {{ icon('pencil') }}
39 | Inversed Icon - {{ icon('pencil', true) }}
40 | ```
41 |
42 | Or
43 |
44 | ```jinja
45 | Regular Icon - {{ mopa_bootstrap_icon('pencil') }}
46 | Inversed Icon - {{ mopa_bootstrap_icon('pencil', true) }}
47 | ```
48 |
49 | ### Disabling or Changing the Shortcut
50 |
51 | You will notice that there is a `shortcut` configuration option that defaults
52 | to `icon`. If this function collides with any other functions in your project
53 | you can change its name, or disable it:
54 |
55 | Change name:
56 |
57 | ```yaml
58 | mopa_bootstrap:
59 | icons:
60 | shortcut: bootstrap_icon
61 | ```
62 |
63 | And now this works:
64 |
65 | ```jinja
66 | {{ bootstrap_icon('pencil') }}
67 | ```
68 |
69 | Or disable:
70 |
71 | ```yaml
72 | mopa_bootstrap:
73 | icons:
74 | shortcut: ~
75 | ```
76 |
77 | ### Icons are not displayed
78 |
79 | If you experience missing icons, try to add the `cssrewrite` filter to assetic in config.yml:
80 |
81 | ```yaml
82 | assetic:
83 | filters:
84 | cssrewrite: ~
85 | ```
86 |
87 | And add this filter to your assetic call:
88 | ```twig
89 | {% stylesheets filter="cssrewrite,less"
90 | 'bundles/mopabootstrap/less/mopabootstrapbundle.less'
91 | %}
92 |
93 | {% endstylesheets %}
94 | ```
95 |
96 | Please note that you must not use the `@MopaBootstrap/Resources/public/less/mopabootstrapbundle.less` annotation or the css rewrite will fail.
97 |
98 | ---
99 |
100 | << [Form Components](../form/4-form-components.md) | [Navbar Generation](2-navbars.md) >>
101 |
--------------------------------------------------------------------------------
/Resources/doc/extensions/3-initializr.md:
--------------------------------------------------------------------------------
1 | Bootstrap Extras (Initializr)
2 | ================
3 |
4 | HOW TO USE IT?
5 | --------------
6 | To make fast start there is only 2 step process to use it.
7 |
8 | 1. add to config.yml:
9 |
10 | ```yaml
11 | # app/config/config.yml
12 | mopa_bootstrap:
13 | initializr: ~
14 | ```
15 |
16 | 2. extend base_initializr template by your layout template (add this line as first one)
17 |
18 | ```twig
19 | {# src/Acme/DemoBundle/Resources/views/layout.html.twig #}
20 | {% extends '@MopaBootstrap/base_initializr.html.twig' %}
21 | ```
22 |
23 | HOW TO SET IT UP?
24 | --------
25 |
26 | Example config file:
27 |
28 | ```yaml
29 | # app/config/config.yml
30 | mopa_bootstrap:
31 | initializr:
32 | meta:
33 | title: "Some Title"
34 | description: "This is test site"
35 | keywords: "keyword1,keyword 2"
36 | author_name: "this is me"
37 | author_url: "/human.txt"
38 | nofollow: false
39 | noindex: false
40 | dns_prefetch:
41 | - '//ajax.googleapis.com'
42 | google:
43 | wt: 'xxx'
44 | analytics: 'UA-xxxxxxx-xx'
45 | diagnostic_mode: true
46 | ```
47 |
48 | All variables description is available in file [3.1-initializr-variables.md](3.1-initializr-variables.md)
49 |
50 | TODO
51 | ------
52 | Below is list of things that need to be done in near future:
53 |
54 | * allow all variables to be overriden by controller
55 | * add rss/atom sources
56 |
57 | ---
58 |
59 | << [Generating a Navbar](2-navbars.md) | [Base initializr template](3.1-initializr-variables.md) >>
60 |
--------------------------------------------------------------------------------
/Resources/doc/extensions/3.1-initializr-variables.md:
--------------------------------------------------------------------------------
1 | Base initializr template
2 | ========================
3 |
4 | Example config
5 |
6 | ```yaml
7 | # app/config/config.yml
8 | mopa_bootstrap:
9 | initializr:
10 | meta:
11 | title: "YYY"
12 | description: "This is test site"
13 | keywords: "keyword1,keyword 2"
14 | author_name: "this is me"
15 | author_url: "/human.txt"
16 | nofollow: false
17 | noindex: false
18 | dns_prefetch:
19 | - '//ajax.googleapis.com'
20 | google:
21 | wt: 'xxx'
22 | analytics: 'UA-xxxxxxx-xx'
23 | extendedanalytics: false
24 | diagnostic_mode: true
25 | ```
26 |
27 | Variables
28 | ------------
29 |
30 |
31 | * **meta\_description**
32 |
33 | default value: _empty_ _string_
34 | parent block: _[head](#head)_
35 |
36 | * **meta\_keywords**
37 |
38 | default value: _empty_ _string_
39 | parent block: _[head](#head)_
40 |
41 | * **meta\_author_name**
42 |
43 | default value: _empty_ _string_
44 | parent block: _[head](#head)_
45 |
46 | * **meta\_author_url**
47 |
48 | default value: _empty_ _string_
49 | parent block: _[head](#head)_
50 | examples:
51 |
52 | * _/humans.txt_
53 | * _mailto:example@example.com_
54 | * _http://example.com_
55 |
56 | * **meta\_nofollow**
57 |
58 | default value: _false_
59 | parent block: _[head](#head)_
60 | comment: set true to disable robots from following links
61 |
62 | * **meta\_noindex**
63 |
64 | default value: _false_
65 | parent block: _[head](#head)_
66 | comment: set true to disable robots from indexing page
67 |
68 | * **google\_wt**
69 |
70 | default value: _empty_ _string_
71 | parent block: _[head](#head)_
72 | comment: set Google Webmaster Tools veryfication code
73 |
74 | * **google\_analytics**
75 |
76 | default value: _empty_ _string_
77 | parent block: _[foot\_scripts](#foot_scripts)_
78 | comment: set Google Analytics UA page code
79 | * **diagnostic\_mode**
80 |
81 | default value: _false_
82 | parent block: _[head](#head)_
83 | comment: set this to true to check your CSS for implementation errors
84 | read more about used diagnostic file on: http://meyerweb.com/eric/tools/css/diagnostics/
85 |
86 | Blocks
87 | ------------
88 |
89 | * html_tag
90 | * head
91 | * dns\_prefetch
92 | * head\_style
93 | * head_scripts
94 | * body_tag
95 | * body_start
96 | * body
97 | * navbar
98 | * content
99 | *
100 | *
101 |
102 | ---
103 |
104 | << [Bootstrap Extras (Initializr)](3-initializr.md) | [Support for other bundles](4-support-for-other-bundles.md) >>
105 |
--------------------------------------------------------------------------------
/Resources/doc/form/2-form-collections.md:
--------------------------------------------------------------------------------
1 | Form Collections
2 | ================
3 |
4 | Since collections often tend to make probs, we added some code to ease the use:
5 |
6 | * http://bootstrap.mohrenweiserpartner.de/mopa/bootstrap/forms/collections
7 | * https://github.com/phiamo/MopaBootstrapSandboxBundle/blob/master/Form/Type/ExampleCollectionsFormType.php
8 | * https://github.com/phiamo/MopaBootstrapSandboxBundle/blob/master/Resources/views/Examples/collections.html.twig
9 |
10 | And for Subforms:
11 |
12 | * https://github.com/phiamo/MopaBootstrapSandboxBundle/blob/master/Form/Type/ExampleDateFormType.php
13 |
14 | Make especially sure that your subforms have these options set:
15 |
16 | ```
17 | 'widget_form_group_attr' => false,
18 | 'horizontal_input_wrapper' => false,
19 | ```
20 | Otherwise you will have unexpected repeating forms ...
21 |
22 | Make sure you included the mopabootstrap-collection.js to have the javascript code loaded and available
23 |
24 | Add and Remove Buttons
25 | ----------------------
26 |
27 | To make use of the button icons you can either apply them in the FormType:
28 |
29 | ```php
30 | $builder
31 | ->add('nice_email_collection','collection', array(
32 | 'widget_add_btn' => array(
33 | 'icon' => 'plus-sign',
34 | 'label' => 'add email'
35 | ),
36 | ))
37 | ;
38 | ```
39 |
40 | Or configure them globally:
41 |
42 | ```yaml
43 | mopa_bootstrap:
44 | form:
45 | collection:
46 | widget_remove_btn:
47 | icon: trash
48 | icon_inverted: true
49 | widget_add_btn:
50 | icon: plus-sign
51 | ```
52 |
53 | And if configured globally you can override them again in the FormType!
54 |
55 | Have a look into the Sandbox to see more examples:
56 |
57 | * https://github.com/phiamo/MopaBootstrapSandboxBundle/blob/master/Form/Type/ExampleCollectionsFormType.php
58 | * https://github.com/phiamo/symfony-bootstrap-sandbox/blob/master/app/config/config.yml
59 |
60 | Some things are currently missing :
61 |
62 | * examples on howto extend the functionality with check functions for adding and removing
63 | * in depth example on howto use Custom FormTypes easily
64 |
65 | Nested collections
66 | ----------------------
67 |
68 | MopaBootstrapBundle supports nested collections. You can use them as shown below.
69 |
70 | At first you need to create a child Form Type with some collection
71 | ```php
72 | class MyChildType extends AbstractType
73 | {
74 | public function buildForm(FormBuilderInterface $builder, array $options)
75 | {
76 | $builder
77 | ->add('mySubCollection', 'collection', [
78 | 'type' => 'text',
79 | ])
80 | ;
81 | }
82 | }
83 | ```
84 |
85 | After it you need to create a parent Form Type which will use your child form type as a type of collection items.
86 |
87 | ```php
88 | class MyParentType extends AbstractType
89 | {
90 | public function buildForm(FormBuilderInterface $builder, array $options)
91 | {
92 | $builder
93 | ->add('myCollection', 'collection', [
94 | 'type' => new MyChildType(),
95 | ])
96 | ;
97 | }
98 | }
99 | ```
100 | That's it.
101 |
102 | ---
103 |
104 | << [Form Extensions](1-form-extension-templates.md) | [Form Tabs](3-form-tabs.md) >>
105 |
--------------------------------------------------------------------------------
/Resources/doc/form/3-form-tabs.md:
--------------------------------------------------------------------------------
1 | Form Tabs
2 | ================
3 |
4 | There are often times when you need to put parts of a long form into tabs, this
5 | will allow you to use a new form type called "tab" in order to accomplish this.
6 |
7 | Here's an example form:
8 |
9 | ```php
10 | public function buildForm(FormBuilderInterface $builder, array $options)
11 | {
12 | $about = $builder->create('about', 'tab', array(
13 | 'label' => 'About',
14 | 'icon' => 'pencil',
15 | 'inherit_data' => true,
16 | ));
17 |
18 | $about
19 | ->add('first')
20 | ->add('last');
21 |
22 | $social = $builder->create('social', 'tab', array(
23 | 'label' => 'Social'
24 | 'icon' => 'user',
25 | ));
26 |
27 | $social
28 | ->add('facebook')
29 | ->add('twitter');
30 |
31 | /**
32 | * Add both tabs to the main form
33 | */
34 | $builder
35 | ->add($about)
36 | ->add($social);
37 | }
38 |
39 | public function configureOptions(OptionsResolver $resolver)
40 | {
41 | $resolver->setDefaults([
42 | 'tabs_class' => 'nav nav-pills nav-stacked',
43 | 'data_class' => 'Acme\Bundle\WebsiteBundle\Entity\User',
44 | ]);
45 | }
46 | ```
47 |
48 | Rendering the entire form is as simple as using `form_widget(form)`.
49 |
50 | - You change the class that gets rendered on the tabs ul by specifying
51 | the `tabs_class` option.
52 | - You can add an icon to the tabs by specifying the `icon` option. It automatically
53 | prefixes the icon with "icon-".
54 |
55 | Working with entities
56 | ====================
57 |
58 | If you are using the form to put data into an object and not just an array, you'll need
59 | to supply the `data_class` option like you normally do. However, unless each of your
60 | tabs is a related entity - If your entity was a User, which had an Address entity attached,
61 | you could just add a tab called `address` and then add children to it - You will need to use
62 | `inherit_data` (previously `virtual`) so that the form knows not to look for a property
63 | that is the same name as your tab.
64 |
65 | In the example above, `social` might be an array, or a related entity so it does not need
66 | the `inherit_data`, however, the "About" our user is actually party of the User entity
67 | so we need to make sure we set `inherit_data` to true.
68 |
69 |
70 | Rendering
71 | ====================
72 |
73 |
74 | If you do not want the whole thing to
75 | be rendered at once, you can use the `form_tabs` function on the tabs' parent
76 | form:
77 |
78 | ```jinja
79 |
80 |
81 | {{ form_tabs(form) }}
82 |
83 |
84 |
85 | {{ form_widget(form) }}
86 |
87 |
88 | ```
89 |
90 | *Be Aware:* If you use `form_widget` before `form_tabs` it will also render the
91 | tabs, and you will not be able to render them again.
92 |
93 | Finally, if you need full control over the tabs, you can access them like:
94 |
95 | ```jinja
96 | {% for tab in form.vars.tabs %}
97 | {# ... #}
98 | {% endfor %}
99 | ```
100 |
101 | You can also use form theming to change the way the tabs are rendered:
102 |
103 | ```jinja
104 | {% form_theme _self %}
105 |
106 | {% block tabs_widget %}
107 |
114 | {% endblock %}
115 | ```
116 |
117 | ---
118 |
119 | << [Form Collections](2-form-collections.md) | [Form Components](4-form-components.md) >>
120 |
--------------------------------------------------------------------------------
/Resources/doc/index.md:
--------------------------------------------------------------------------------
1 | Getting Started With MopaBootstrapBundle
2 | =======================================
3 |
4 | ## Installation
5 |
6 | - [Getting Started](install/1-getting-started.md)
7 | - [LESS Installation](install/2-less-installation.md)
8 | - [SASS Configuration](install/3-sass-configuration.md)
9 | - [Assetic Configuration](install/4-assetic-configuration.md)
10 |
11 | ## Forms
12 |
13 | - [Form Extension Templates](form/1-form-extension-templates.md)
14 | - [Form Collections](form/2-form-collections.md)
15 | - [Form Tabs](form/3-form-tabs.md)
16 | - [Form Component](form/4-form-components.md)
17 |
18 | ## Usage
19 |
20 | - [Base Templates](usage/1-base-templates.md)
21 |
22 | ## Extensions
23 |
24 | - [Icons](extensions/1-icons.md)
25 | - [Navbars](extensions/2-navbars.md)
26 | - [Initialzr](extensions/3-initializr.md)
27 | - [Initializr Variables](extensions/3.1-initializr-variables.md)
28 | - [Support for other bundles](extensions/4-support-for-other-bundles.md)
29 |
30 | ## Other
31 |
32 | - [Configuration Reference](misc/configuration-reference.md)
33 | - [Including Bootstrap](misc/including-bootstrap.md)
34 | - [Testing Forms](misc/testing-forms.md)
35 | - [Windows Tips](misc/windows-tips.md)
36 |
37 | ### Further Documentation and Examples
38 |
39 | * MopaBootsrapSandbox Examples
40 | * [twig templates](https://github.com/phiamo/MopaBootstrapSandboxBundle/tree/master/Resources/views/Examples)
41 | * [Form Types](https://github.com/phiamo/MopaBootstrapSandboxBundle/tree/master/Form/Type)
42 | * [Navbar](https://github.com/phiamo/MopaBootstrapSandboxBundle/tree/master/Resources/config/examples)
43 | * [MenuBuilder](https://github.com/phiamo/MopaBootstrapSandboxBundle/tree/master/Navbar/Example)
44 | * [symfony-bootstrap](https://github.com/phiamo/symfony-bootstrap) is also available
45 |
46 |
47 | The following bundles/applications use the MopaBootstrapBundle and can be used as a
48 | guideline:
49 |
50 | - The MopaBootstrapSandboxBundle provides all examples for the MopaBootstrapBundle:
51 | https://github.com/phiamo/MopaBootstrapSandboxBundle
52 |
53 | - There is also a fork of the Symfony2 Standard Edition that is configured to
54 | show the MopaBootstrapSandbox examples:
55 | https://github.com/phiamo/symfony-bootstrap
56 |
57 |
--------------------------------------------------------------------------------
/Resources/doc/install/3-sass-configuration.md:
--------------------------------------------------------------------------------
1 | Sass / Compass Configuration
2 | =====================
3 |
4 | [Sass](http://sass-lang.com/ "Sass Website") is another CSS-preprocessor like less.
5 |
6 | [Compass](http://compass-style.org/) is a authoring Framework for [Sass](http://sass-lang.com/ "Sass Website")
7 |
8 | ## Why Sass / Compass instead of Less?
9 | It's maybe a matter of taste, maybe one Preprocessor/CSS-Framework is more powerful. Just read the following Comparisons and decide for yourself.
10 |
11 | [Side by Side Comparison](https://gist.github.com/1591333)
12 |
13 | [Sass vs.Less](http://css-tricks.com/sass-vs-less/ "Sass vs. Less")
14 |
15 | ## Installation ##
16 |
17 | Compass / Sass needs a running ruby gem installation.
18 |
19 | #### FreeBSD
20 | If you are using **FreeBSD**, you can install Compass directly via the Port, which also installs the dependencies on ruby:
21 |
22 | ```bash
23 | cd /usr/ports/textproc/rubygem-compass && make install
24 | ```
25 |
26 | #### Ubuntu
27 | Install Instructions for Ubuntu: [http://www.ubuntulinuxhelp.com/installing-compass-on-ubuntu/](http://www.ubuntulinuxhelp.com/installing-compass-on-ubuntu/)
28 | #### Running gem Installation
29 |
30 | You can also install Sass or Compass via ruby gem (if that's already installed):
31 |
32 | ```bash
33 | gem install sass
34 | ```
35 | or
36 |
37 | ```bash
38 | gem install compass
39 | ```
40 | ## Configuration ##
41 |
42 | Here is an example configuration for your **app/config.yml**:
43 |
44 | ```yaml
45 |
46 | assetic:
47 | filters:
48 | cssrewrite: ~
49 | sass:
50 | bin: /usr/local/bin/sass
51 | apply_to: "\.sass$"
52 | scss:
53 | sass: /usr/local/bin/sass
54 | apply_to: "\.scss$"
55 | yui_css:
56 | jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar
57 | apply_to: "\.css$"
58 | yui_js:
59 | jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar
60 | ```
61 |
62 | You can also use Compass to parse **.sass** and **.scss** Files:
63 |
64 | ```yaml
65 |
66 | assetic:
67 | filters:
68 | cssrewrite: ~
69 | compass:
70 | sass: /usr/local/bin/compass
71 | apply_to: "\.(scss|sass)$"
72 | yui_css:
73 | jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar
74 | apply_to: "\.css$"
75 | yui_js:
76 | jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar
77 | ```
78 |
79 | ## Usage ##
80 |
81 | Just use the usual twig/assetic tag for scripts
82 |
83 | ```jinja
84 | {% stylesheets filter='?yui_css'
85 | '@MopaBootstrapBundle/Resources/public/sass/mopabootstrapbundle.scss'
86 | %}
87 | ```
88 |
--------------------------------------------------------------------------------
/Resources/doc/install/4-assetic-configuration.md:
--------------------------------------------------------------------------------
1 | Assetic Configuration
2 | =====================
3 |
4 | If you are not using [symfony-bootstrap](http://github.com/phiamo/symfony-bootstrap) you must configure assetic to use less
5 |
6 | Yui CSS and CSS Embed are very nice and recommended.
7 | To make full use of bootstraps capabilites they are not needed, neither is less but its up to you
8 |
9 | Here is an example configuration for your config.yml:
10 | Make sure you have java installed
11 |
12 | ``` yaml
13 | assetic:
14 | filters:
15 | less:
16 | node: /usr/bin/node
17 | node_paths: [/opt/lessc/lib, /usr/lib/node_modules]
18 | apply_to: "\.less$"
19 | cssrewrite: ~
20 | cssembed:
21 | jar: %kernel.root_dir%/Resources/java/cssembed-0.3.6.jar
22 | apply_to: "\.css$|\.less$"
23 | yui_css:
24 | jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar
25 | apply_to: "\.css$"
26 | yui_js:
27 | jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar
28 | ```
29 |
30 | Do not forget to add the jars to your app.
31 |
32 | If you encounter the following Error:
33 |
34 | ```
35 | An exception has been thrown during the compilation of a template ("You must add MopaBootstrapBundle to the assetic.bundle config to use the {% stylesheets %} tag in @MopaBootstrap/base.html.twig.") in "/YourProject/vendor/mopa/bootstrap-bundle/Mopa/Bundle/BootstrapBundle/Resources/views/base.html.twig".
36 | ```
37 |
38 | It's because the Bundle is not added to the bundles: [ ] config option in the assetic config.
39 |
40 | ``` yaml
41 | assetic:
42 | debug: %kernel.debug%
43 | use_controller: false
44 | bundles: [ ] # <-
45 | filters:
46 | ....
47 | ```
48 |
49 | You need to either remove that config var (to use assetic for all Bundles) or add the MopaBootstrapBundle
50 |
51 | If your are using cssembed, you might notice problems when embedding bootrap via less:
52 |
53 | [RuntimeException]
54 | [ERROR] /path/to/your/bundle/Resources/public/less/../img/glyphicons-halflings.png (No such file or directory)
55 |
56 | this is due to cssembed and bootstrap not working so nicely with relative paths.
57 |
58 | Try using the fully qualified path in the source instead.
59 |
60 | Bootstrap provides a variable which allows to configure this.
61 |
62 | Less:
63 |
64 | ```
65 | @icon-font-path: "/fonts/";
66 | ```
67 |
68 | Sass:
69 |
70 | ```
71 | $icon-font-path: "/bundles/mopabootstrap/fonts/bootstrap/" !default;
72 | ```
73 |
74 | Another way is to copy the glyphicons-halflings.png to your public img folder
75 |
76 | ``` bash
77 | cp /your/path/to/bootstrap/img/glyphicons-halflings.png to /path/to/your/bundle/Resources/public/img/
78 | ```
79 |
80 | so cssembed finds the file in the corresponding position
81 |
--------------------------------------------------------------------------------
/Resources/doc/misc/including-bootstrap.md:
--------------------------------------------------------------------------------
1 | MopaBootstrapBundle Twitters Bootstrap integration
2 | ==================================================
3 |
4 | We decided not to take the twitter/bootstrap distribution into this repo to seperate concerns more efficently.
5 | So you have to include twitter/bootstrap in some manner into your project, here are some examples on howto do it
6 |
7 | Since symfony2.1 will use composer (http://www.getcomposer.org) to organize dependencies, it is highly recommended to ease your life to do it the recommended way
8 |
9 | ## Include in your project composer.json (RECOMMENDED):
10 |
11 | ### Managing twitter/bootstrap installation automatically
12 |
13 | To have composer managing twitter/bootstrap too, you can either run it with
14 | --install-suggests or add the following to your composer.json (recommended):
15 |
16 | ```json
17 | {
18 | "require": {
19 | "mopa/bootstrap-bundle": "v3.0.0-beta2",
20 | "twitter/bootstrap": "v3.0.0"
21 | }
22 | }
23 | ```
24 |
25 |
26 | Warning
27 | > Composer doesn't install suggests from mopa/bootstrap-bundle!
28 | > If you need e.g knplabs menues or paginator, craue/formflow,
29 | > please add them to YOUR composer.json too!
30 |
31 | ```json
32 | {
33 | "require": {
34 | "mopa/bootstrap-bundle": "dev-master",
35 | "twitter/bootstrap": "master",
36 | "knplabs/knp-paginator-bundle": "dev-master",
37 | "knplabs/knp-menu-bundle": "dev-master",
38 | "craue/formflow-bundle": "~2.0"
39 | },
40 | }
41 | ```
42 |
43 | To activate auto symlinking and checking after composer update/install add also to your existing scripts:
44 |
45 | ```json
46 | {
47 | "scripts": {
48 | "post-install-cmd": [
49 | "Mopa\\Bundle\\BootstrapBundle\\Composer\\ScriptHandler::postInstallSymlinkTwitterBootstrap"
50 | ],
51 | "post-update-cmd": [
52 | "Mopa\\Bundle\\BootstrapBundle\\Composer\\ScriptHandler::postInstallSymlinkTwitterBootstrap"
53 | ]
54 | }
55 | }
56 | ```
57 |
58 | For Sass support, you can also use the specific command:
59 |
60 | ```json
61 | {
62 | "scripts": {
63 | "post-install-cmd": [
64 | "Mopa\\Bundle\\BootstrapBundle\\Composer\\ScriptHandler::postInstallSymlinkTwitterBootstrapSass"
65 | ],
66 | "post-update-cmd": [
67 | "Mopa\\Bundle\\BootstrapBundle\\Composer\\ScriptHandler::postInstallSymlinkTwitterBootstrapSass"
68 | ]
69 | }
70 | }
71 | ```
72 |
73 |
74 | ### (NOT RECOMMENDED) Including Bootstrap manually
75 |
76 | To use bootstrap without less just download the zipped distribution
77 |
78 | http://getbootstrap.com/
79 |
80 | and unpack it e.g.
81 |
82 | in app/Resources/public/
83 |
84 |
--------------------------------------------------------------------------------
/Resources/doc/misc/testing-forms.md:
--------------------------------------------------------------------------------
1 | Testing MopaBootstrapBundle Forms
2 | ==================================================
3 |
4 | Since MopaBootstrapBundle uses Symfony Form extensions you can test them as usual Symfony Forms.
5 | The way of testing them is clearly [described](http://symfony.com/doc/current/cookbook/form/unit_testing.html) in a Cookbook.
6 | The only difference between testing pure Symfony forms and MopaBootstrap Forms is the fact that you need to use `Mopa\Bundle\BootstrapBundle\Tests\Form\TypeTestCase` instead of `Symfony\Component\Form\Test\TypeTestCase`
7 | You can see an [example](https://github.com/phiamo/MopaBootstrapSandboxBundle/blob/master/Tests/Form/Type/ExampleFormsTypeTest.php) in MopaBootstrapSandboxBundle
8 |
--------------------------------------------------------------------------------
/Resources/doc/misc/windows-tips.md:
--------------------------------------------------------------------------------
1 | Tips for usage with Windows
2 | ===========================
3 |
4 | 1. Set php.exe from the Wamp Server to Run as Administrator (under properties)
5 | 2. Run Wamp Server as Administrator also.
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Resources/meta/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2015 Mohrenweiser & Partner, Philipp A. Mohrenweiser
2 | - http://www.mohrenweiserpartner.de
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the "Software"), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is furnished
9 | to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in all
12 | copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/build/build.less:
--------------------------------------------------------------------------------
1 | // Datepicker .less buildfile. Includes select mixins/variables from bootstrap
2 | // and imports the included datepicker.less to output a minimal datepicker.css
3 | //
4 | // Usage:
5 | // lessc build.less datepicker.css
6 | //
7 | // Variables and mixins copied from bootstrap 2.0.2
8 |
9 | // Variables
10 | @grayLight: #999;
11 | @grayLighter: #eee;
12 | @white: #fff;
13 | @linkColor: #08c;
14 | @btnPrimaryBackground: @linkColor;
15 | @orange: #f89406;
16 |
17 | // Mixins
18 |
19 | // Border Radius
20 | .border-radius(@radius: 5px) {
21 | -webkit-border-radius: @radius;
22 | -moz-border-radius: @radius;
23 | border-radius: @radius;
24 | }
25 |
26 | // Button backgrounds
27 | .buttonBackground(@startColor, @endColor) {
28 | .gradientBar(@startColor, @endColor);
29 | .reset-filter();
30 | &:hover, &:active, &.active, &.disabled, &[disabled] {
31 | background-color: @endColor;
32 | }
33 | &:active,
34 | &.active {
35 | background-color: darken(@endColor, 10%) e("\9");
36 | }
37 | }
38 |
39 | // Reset filters for IE
40 | .reset-filter() {
41 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
42 | }
43 |
44 | // Gradient Bar Colors for buttons and alerts
45 | .gradientBar(@primaryColor, @secondaryColor) {
46 | #gradient > .vertical(@primaryColor, @secondaryColor);
47 | border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
48 | border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
49 | }
50 |
51 | // Gradients
52 | #gradient {
53 | .vertical(@startColor: #555, @endColor: #333) {
54 | background-color: mix(@startColor, @endColor, 60%);
55 | background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
56 | background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
57 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
58 | background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
59 | background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
60 | background-image: linear-gradient(top, @startColor, @endColor); // The standard
61 | background-repeat: repeat-x;
62 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
63 | }
64 | }
65 |
66 | @import "../less/datetimepicker.less";
67 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/build/build_standalone.less:
--------------------------------------------------------------------------------
1 | // Datepicker standalone .less buildfile. Includes all necessary mixins/variables/rules from bootstrap
2 | // and imports the included datepicker.less to output a minimal standalone datepicker.css
3 | //
4 | // Usage:
5 | // lessc build_standalone.less datepicker.css
6 | //
7 | // Variables, mixins, and rules copied from bootstrap 2.0.2
8 |
9 | @import "build.less";
10 |
11 | // Dropdown css
12 |
13 | @zindexDropdown: 1000;
14 | @grayDark: #333;
15 | @baseLineHeight: 18px;
16 | @tableBackground: transparent; // overall background-color
17 | @dropdownBackground: @white;
18 | @dropdownBorder: rgba(0,0,0,.2);
19 | @dropdownLinkColor: @grayDark;
20 | @dropdownLinkColorHover: @white;
21 | @dropdownLinkBackgroundHover: @linkColor;
22 |
23 | // Drop shadows
24 | .box-shadow(@shadow) {
25 | -webkit-box-shadow: @shadow;
26 | -moz-box-shadow: @shadow;
27 | box-shadow: @shadow;
28 | }
29 |
30 | // The dropdown menu (ul)
31 | // ----------------------
32 | .datepicker.dropdown-menu {
33 | position: absolute;
34 | top: 100%;
35 | left: 0;
36 | z-index: @zindexDropdown;
37 | float: left;
38 | display: none; // none by default, but block on "open" of the menu
39 | min-width: 160px;
40 | list-style: none;
41 | background-color: @dropdownBackground;
42 | border: 1px solid #ccc;
43 | border: 1px solid rgba(0,0,0,.2);
44 | .border-radius(5px);
45 | .box-shadow(0 5px 10px rgba(0,0,0,.2));
46 | -webkit-background-clip: padding-box;
47 | -moz-background-clip: padding;
48 | background-clip: padding-box;
49 | *border-right-width: 2px;
50 | *border-bottom-width: 2px;
51 |
52 | // Normally inherited from bootstrap's `body`
53 | color: #333333;
54 | font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
55 | font-size:13px;
56 | line-height: @baseLineHeight;
57 |
58 | th, td {
59 | padding: 4px 5px;
60 | }
61 | }
62 |
63 | // Alternative arrows
64 | // May require `charset="UTF-8"` in your ` ` tag
65 | .datepicker {
66 | .prev, .next {font-style:normal;}
67 | .prev:after {content:"«";}
68 | .next:after {content:"»";}
69 | }
70 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.bg.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Bulgarian translation for bootstrap-datetimepicker
3 | * Apostol Apostolov
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['bg'] = {
7 | days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"],
8 | daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"],
9 | daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"],
10 | months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
11 | monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"],
12 | today: "днес",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ca.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Catalan translation for bootstrap-datetimepicker
3 | * J. Garcia
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['ca'] = {
7 | days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"],
8 | daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"],
9 | daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"],
10 | months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"],
11 | monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"],
12 | today: "Avui",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.cs.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Czech translation for bootstrap-datetimepicker
3 | * Matěj Koubík
4 | * Fixes by Michal Remiš
5 | */
6 | ;(function($){
7 | $.fn.datetimepicker.dates['cs'] = {
8 | days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"],
9 | daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"],
10 | daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"],
11 | months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"],
12 | monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"],
13 | today: "Dnes",
14 | suffix: [],
15 | meridiem: []
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.da.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Danish translation for bootstrap-datetimepicker
3 | * Christian Pedersen
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['da'] = {
7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
10 | months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
12 | today: "I Dag",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.de.js:
--------------------------------------------------------------------------------
1 | /**
2 | * German translation for bootstrap-datetimepicker
3 | * Sam Zurcher
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['de'] = {
7 | days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"],
8 | daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"],
9 | daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"],
10 | months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
11 | monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
12 | today: "Heute",
13 | suffix: [],
14 | meridiem: [],
15 | weekStart: 1,
16 | format: "dd.mm.yyyy"
17 | };
18 | }(jQuery));
19 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.el.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Greek translation for bootstrap-datetimepicker
3 | */
4 | ;(function($){
5 | $.fn.datetimepicker.dates['el'] = {
6 | days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"],
7 | daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"],
8 | daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"],
9 | months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"],
10 | monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"],
11 | today: "Σήμερα",
12 | suffix: [],
13 | meridiem: []
14 | };
15 | }(jQuery));
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.es.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Spanish translation for bootstrap-datetimepicker
3 | * Bruno Bonamin
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['es'] = {
7 | days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"],
8 | daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"],
9 | daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"],
10 | months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
11 | monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
12 | today: "Hoy",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.fi.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Finnish translation for bootstrap-datetimepicker
3 | * Jaakko Salonen
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['fi'] = {
7 | days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"],
8 | daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"],
9 | daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"],
10 | months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
11 | monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"],
12 | today: "tänään",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.fr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * French translation for bootstrap-datetimepicker
3 | * Nico Mollet
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['fr'] = {
7 | days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"],
8 | daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"],
9 | daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"],
10 | months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
11 | monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"],
12 | today: "Aujourd'hui",
13 | suffix: [],
14 | meridiem: ["am", "pm"],
15 | weekStart: 1,
16 | format: "dd/mm/yyyy"
17 | };
18 | }(jQuery));
19 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.he.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Hebrew translation for bootstrap-datetimepicker
3 | * Sagie Maoz
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['he'] = {
7 | days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"],
8 | daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
9 | daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
10 | months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
11 | monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"],
12 | today: "היום",
13 | suffix: [],
14 | meridiem: [],
15 | rtl: true
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.hr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Croatian localisation
3 | */
4 | ;(function($){
5 | $.fn.datetimepicker.dates['hr'] = {
6 | days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"],
7 | daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"],
8 | daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"],
9 | months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"],
10 | monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"],
11 | today: "Danas",
12 | suffix: [],
13 | meridiem: []
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.hu.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Hungarian translation for bootstrap-datetimepicker
3 | * darevish
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['hu'] = {
7 | days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"],
8 | daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"],
9 | daysMin: ["V", "H", "K", "Sze", "Cs", "P", "Szo", "V"],
10 | months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"],
12 | today: "Ma",
13 | suffix: [],
14 | meridiem: [],
15 | weekStart: 1
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.id.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Bahasa translation for bootstrap-datetimepicker
3 | * Azwar Akbar
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['id'] = {
7 | days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"],
8 | daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"],
9 | daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"],
10 | months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"],
12 | suffix: [],
13 | meridiem: []
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.is.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Icelandic translation for bootstrap-datetimepicker
3 | * Hinrik Örn Sigurðsson
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['is'] = {
7 | days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"],
8 | daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"],
9 | daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"],
10 | months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"],
12 | today: "Í Dag",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.it.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Italian translation for bootstrap-datetimepicker
3 | * Enrico Rubboli
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['it'] = {
7 | days: ["Domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"],
8 | daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"],
9 | daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"],
10 | months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
11 | monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
12 | today: "Oggi",
13 | suffix: [],
14 | meridiem: [],
15 | weekStart: 1,
16 | format: "dd.mm.yyyy"
17 | };
18 | }(jQuery));
19 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ja.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Japanese translation for bootstrap-datetimepicker
3 | * Norio Suzuki
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['ja'] = {
7 | days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"],
8 | daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"],
9 | daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"],
10 | months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
11 | monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
12 | today: "今日",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.kr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Korean translation for bootstrap-datetimepicker
3 | * Gu Youn
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['kr'] = {
7 | days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"],
8 | daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"],
9 | daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"],
10 | months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
11 | monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
12 | suffix: [],
13 | meridiem: []
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.lt.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Lithuanian translation for bootstrap-datetimepicker
3 | * Šarūnas Gliebus
4 | */
5 |
6 | ;(function($){
7 | $.fn.datetimepicker.dates['lt'] = {
8 | days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"],
9 | daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"],
10 | daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"],
11 | months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"],
12 | monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"],
13 | today: "Šiandien",
14 | suffix: [],
15 | meridiem: [],
16 | weekStart: 1
17 | };
18 | }(jQuery));
19 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.lv.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Latvian translation for bootstrap-datetimepicker
3 | * Artis Avotins
4 | */
5 |
6 | ;(function($){
7 | $.fn.datetimepicker.dates['lv'] = {
8 | days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"],
9 | daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"],
10 | daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"],
11 | months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."],
13 | today: "Šodien",
14 | suffix: [],
15 | meridiem: [],
16 | weekStart: 1
17 | };
18 | }(jQuery));
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ms.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Malay translation for bootstrap-datetimepicker
3 | * Ateman Faiz
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['ms'] = {
7 | days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"],
8 | daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"],
9 | daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"],
10 | months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"],
12 | today: "Hari Ini",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.nb.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Norwegian (bokmål) translation for bootstrap-datetimepicker
3 | * Fredrik Sundmyhr
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['nb'] = {
7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
10 | months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
12 | today: "I Dag",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.nl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Dutch translation for bootstrap-datetimepicker
3 | * Reinier Goltstein
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['nl'] = {
7 | days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"],
8 | daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
9 | daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
10 | months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
12 | today: "Vandaag",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.pl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Polish translation for bootstrap-datetimepicker
3 | * Robert
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['pl'] = {
7 | days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"],
8 | daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"],
9 | daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"],
10 | months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
11 | monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"],
12 | today: "Dzisiaj",
13 | suffix: [],
14 | meridiem: [],
15 | weekStart: 1
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.pt-BR.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Brazilian translation for bootstrap-datetimepicker
3 | * Cauan Cabral
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['pt-BR'] = {
7 | format: 'dd/mm/yyyy',
8 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
9 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
10 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
11 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
12 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
13 | today: "Hoje",
14 | suffix: [],
15 | meridiem: []
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.pt.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Portuguese translation for bootstrap-datetimepicker
3 | * Original code: Cauan Cabral
4 | * Tiago Melo
5 | */
6 | ;(function($){
7 | $.fn.datetimepicker.dates['pt'] = {
8 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
9 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
10 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
11 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
12 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
13 | suffix: [],
14 | meridiem: ["am","pm"],
15 | today: "Hoje"
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ro.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Romanian translation for bootstrap-datetimepicker
3 | * Cristian Vasile
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['ro'] = {
7 | days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"],
8 | daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"],
9 | daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"],
10 | months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"],
11 | monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"],
12 | today: "Astăzi",
13 | suffix: [],
14 | meridiem: [],
15 | weekStart: 1
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.rs-latin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Serbian latin translation for bootstrap-datetimepicker
3 | * Bojan Milosavlević
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['rs'] = {
7 | days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"],
8 | daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"],
9 | daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"],
10 | months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
12 | today: "Danas",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.rs.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Serbian cyrillic translation for bootstrap-datetimepicker
3 | * Bojan Milosavlević
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['rs'] = {
7 | days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"],
8 | daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"],
9 | daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"],
10 | months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
11 | monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"],
12 | today: "Данас",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ru.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Russian translation for bootstrap-datetimepicker
3 | * Victor Taranenko
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['ru'] = {
7 | days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"],
8 | daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"],
9 | daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"],
10 | months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
11 | monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
12 | today: "Сегодня",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.sk.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Slovak translation for bootstrap-datetimepicker
3 | * Marek Lichtner
4 | * Fixes by Michal Remiš
5 | */
6 | ;(function($){
7 | $.fn.datetimepicker.dates["sk"] = {
8 | days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"],
9 | daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"],
10 | daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"],
11 | months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"],
13 | today: "Dnes",
14 | suffix: [],
15 | meridiem: []
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.sl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Slovene translation for bootstrap-datetimepicker
3 | * Gregor Rudolf
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['sl'] = {
7 | days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"],
8 | daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"],
9 | daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"],
10 | months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
12 | today: "Danes",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.sv.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Swedish translation for bootstrap-datetimepicker
3 | * Patrik Ragnarsson
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['sv'] = {
7 | days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"],
8 | daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"],
9 | daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"],
10 | months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
12 | today: "I Dag",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.sw.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Swahili translation for bootstrap-datetimepicker
3 | * Edwin Mugendi
4 | * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku
5 | */
6 | ;(function($){
7 | $.fn.datetimepicker.dates['sw'] = {
8 | days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"],
9 | daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"],
10 | daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"],
11 | months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"],
12 | monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"],
13 | today: "Leo",
14 | suffix: [],
15 | meridiem: []
16 | };
17 | }(jQuery));
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.th.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Thai translation for bootstrap-datetimepicker
3 | * Suchau Jiraprapot
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['th'] = {
7 | days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"],
8 | daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
9 | daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
10 | months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"],
11 | monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."],
12 | today: "วันนี้",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.tr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Turkish translation for bootstrap-datetimepicker
3 | * Serkan Algur
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['tr'] = {
7 | days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"],
8 | daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"],
9 | daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"],
10 | months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
11 | monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"],
12 | today: "Bugün",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
18 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.ua.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Ukrainian translation for bootstrap-datepicker
3 | * Igor Polynets
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['ua'] = {
7 | days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четверг", "П'ятниця", "Субота", "Неділя"],
8 | daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"],
9 | daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"],
10 | months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
11 | monthsShort: ["Січ", "Лют", "Бер", "Квт", "Трв", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Грд"],
12 | today: "Сьогодні",
13 | weekStart: 1
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.uk.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Ukrainian translation for bootstrap-datetimepicker
3 | * Andrey Vityuk
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['uk'] = {
7 | days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"],
8 | daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"],
9 | daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"],
10 | months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
11 | monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"],
12 | today: "Сьогодні",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Simplified Chinese translation for bootstrap-datetimepicker
3 | * Yuan Cheung
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['zh-CN'] = {
7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
12 | today: "今日",
13 | suffix: [],
14 | meridiem: []
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/components/smalot-bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-TW.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Traditional Chinese translation for bootstrap-datetimepicker
3 | * Rung-Sheng Jang
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['zh-TW'] = {
7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
12 | today: "今天",
13 | suffix: [],
14 | meridiem: ["上午", "下午"]
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/Resources/public/css/diagnostic.css:
--------------------------------------------------------------------------------
1 | div:empty, span:empty,
2 | li:empty, p:empty,
3 | td:empty, th:empty {
4 | padding: 0.5em;
5 | background: yellow;
6 | }
7 |
8 | *[style], font, center {
9 | outline: 5px solid red;
10 | }
11 |
12 | *[class=""], *[id=""] {
13 | outline: 5px dotted red;
14 | }
15 |
16 | img[alt=""] {
17 | border: 3px dotted red;
18 | }
19 |
20 | img:not([alt]) {
21 | border: 5px solid red;
22 | }
23 |
24 | img[title=""] {
25 | outline: 3px dotted fuchsia;
26 | }
27 |
28 | img:not([title]) {
29 | outline: 5px solid fuchsia;
30 | }
31 |
32 | table:not([summary]) {
33 | outline: 5px solid red;
34 | }
35 |
36 | table[summary=""] {
37 | outline: 3px dotted red;
38 | }
39 |
40 | th {
41 | border: 2px solid red;
42 | }
43 |
44 | th[scope="col"], th[scope="row"] {
45 | border: none;
46 | }
47 |
48 | a[href]:not([title]) {
49 | border: 5px solid red;
50 | }
51 |
52 | a[title=""] {
53 | outline: 3px dotted red;
54 | }
55 |
56 | a[href="#"] {
57 | background: lime;
58 | }
59 |
60 | a[href=""] {
61 | background: fuchsia;
62 | }
63 |
--------------------------------------------------------------------------------
/Resources/public/css/mopabootstrapbundle.css:
--------------------------------------------------------------------------------
1 | /*
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your css files as first
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | * Add it as described on http://www.lesscss.org with the less.js
12 | * (maybe pathes must be adapted in that case)
13 | */
14 |
15 | /* Main bootstrap.less entry point */
16 | @import "../bootstrap/bootstrap.css";
17 |
18 | /* The Example css for this bundle */
19 | @import "../path/to/your/example.css";
20 |
--------------------------------------------------------------------------------
/Resources/public/fonts/bootstrap/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/bootstrap/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/Resources/public/fonts/bootstrap/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/bootstrap/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/Resources/public/fonts/bootstrap/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/bootstrap/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/Resources/public/fonts/bootstrap/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/bootstrap/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/Resources/public/fonts/fa/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa/FontAwesome.otf
--------------------------------------------------------------------------------
/Resources/public/fonts/fa/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/Resources/public/fonts/fa/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/Resources/public/fonts/fa/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/Resources/public/fonts/fa4/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa4/FontAwesome.otf
--------------------------------------------------------------------------------
/Resources/public/fonts/fa4/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa4/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/Resources/public/fonts/fa4/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa4/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/Resources/public/fonts/fa4/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa4/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/Resources/public/fonts/fa4/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/fa4/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/Resources/public/fonts/zmdi/Material-Design-Iconic-Font.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/zmdi/Material-Design-Iconic-Font.eot
--------------------------------------------------------------------------------
/Resources/public/fonts/zmdi/Material-Design-Iconic-Font.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/zmdi/Material-Design-Iconic-Font.ttf
--------------------------------------------------------------------------------
/Resources/public/fonts/zmdi/Material-Design-Iconic-Font.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/zmdi/Material-Design-Iconic-Font.woff
--------------------------------------------------------------------------------
/Resources/public/fonts/zmdi/Material-Design-Iconic-Font.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/fonts/zmdi/Material-Design-Iconic-Font.woff2
--------------------------------------------------------------------------------
/Resources/public/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/Resources/public/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phiamo/MopaBootstrapBundle/af62c634ef42c33f1a4f9f7a489d461f0fa3dbd0/Resources/public/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/Resources/public/js/html5bp_plugins.js:
--------------------------------------------------------------------------------
1 | // usage: log('inside coolFunc', this, arguments);
2 | // paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
3 | window.log = function f(){ log.history = log.history || []; log.history.push(arguments); if(this.console) { var args = arguments, newarr; args.callee = args.callee.caller; newarr = [].slice.call(args); if (typeof console.log === 'object') log.apply.call(console.log, console, newarr); else console.log.apply(console, newarr);}};
4 |
5 | // make it safe to use console.log always
6 | (function(a){function b(){}for(var c="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","),d;!!(d=c.pop());){a[d]=a[d]||b;}})
7 | (function(){try{console.log();return window.console;}catch(a){return (window.console={});}}());
8 |
9 |
10 | // place any jQuery/helper plugins in here, instead of separate, slower script files.
11 |
12 |
--------------------------------------------------------------------------------
/Resources/public/js/html5bp_script.js:
--------------------------------------------------------------------------------
1 | /* Author:
2 |
3 | */
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Resources/public/js/mopabootstrap-subnav.js:
--------------------------------------------------------------------------------
1 | /*
2 | * moving subnavigation bar snapping to top on scroll
3 | * http://stackoverflow.com/questions/9179708/replicating-bootstraps-main-nav-and-subnav
4 | * http://stackoverflow.com/questions/10318163/subnav-bar-collapsed-with-twitter-bootstrap
5 | */
6 |
7 | $(document).scroll(function(){
8 | //check for .subnav
9 | if ($('.subnav').length) {
10 | // If has not activated (has no attribute "data-top"
11 | if (!$('.subnav').attr('data-top')) {
12 | // If already fixed, then do nothing
13 | if ($('.subnav').hasClass('subnav-fixed')) {
14 | return;
15 | }
16 | // Remember top position
17 | var offset = $('.subnav').offset();
18 | $('.subnav').attr('data-top', offset.top);
19 | }
20 |
21 | if ($('.subnav').attr('data-top') - $('.subnav').outerHeight() <= $(this).scrollTop()){
22 | $('.subnav').addClass('subnav-fixed');
23 | } else{
24 | $('.subnav').removeClass('subnav-fixed');
25 | }
26 | }
27 | });
28 | /*
29 | //This snipplet is from bootstrap docs, currently i assume both not to work perfectly :(
30 | !function($) {
31 | "use strict";
32 |
33 | $(function() {
34 | // fix sub nav on scroll
35 | var $win = $(window), $nav = $('.subnav'), navTop = $('.subnav').length
36 | && $('.subnav').offset().top - 40, isFixed = 0;
37 |
38 | processScroll();
39 |
40 | // hack sad times - holdover until rewrite for 2.1
41 | $nav.on('click', function() {
42 | if (!isFixed)
43 | setTimeout(function() {
44 | $win.scrollTop($win.scrollTop() - 47);
45 | }, 10);
46 | });
47 |
48 | $win.on('scroll', processScroll);
49 |
50 | function processScroll() {
51 | var scrollTop = $win.scrollTop();
52 | if (scrollTop >= navTop && !isFixed) {
53 | isFixed = 1;
54 | $nav.addClass('subnav-fixed');
55 | } else if (scrollTop <= navTop && isFixed) {
56 | isFixed = 0;
57 | $nav.removeClass('subnav-fixed');
58 | }
59 | }
60 |
61 | });
62 |
63 | }(window.jQuery);*/
--------------------------------------------------------------------------------
/Resources/public/less/bootstrap-fontawesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your less files as first to be abled to access less vars from your file
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | * Add it as described on http://www.lesscss.org with the less.js (maybe pathes must be adapted in that case)
12 | *
13 | * Be careful when using less this way, might be most straight forward, but assetic doesnt check the included files
14 | * for changes, and will only regenerate the css if it detects changes in this file!
15 | *
16 | * For development it might be easier to include all you less files in the layout directly
17 | * But then assetic will compile each less file in a own compiler session so you cant mix in the less style into bootstrap, which might not be OK
18 | */
19 |
20 |
21 | // Main bootstrap.less entry point
22 | @import "../bootstrap/less/bootstrap.less";
23 |
24 | // Font Awesome
25 | @import "font-awesome/font-awesome.less";
26 |
27 | // variables
28 | @FontAwesomePath: "/bundles/mopabootstrap/fonts/fa";
29 | @icon-font-path: "/bundles/mopabootstrap/bootstrap/fonts/";
30 |
31 | // The Paginator less for MopaBootstrapBundle
32 | @import "paginator.less";
33 |
34 | // The Subnav less for MopaBootstrapBundle
35 | @import "subnav.less";
36 |
37 | // Collection support for MopaBootstrapBundle
38 | @import "collections.less";
39 |
40 | // Collection support for MopaBootstrapBundle
41 | @import "google-maps.less";
42 |
43 | // if you have any variables.less file INCLUDE IT AFTER EVERYTHING cause responsive.less also overrides it with the one from bootstrap!!!!!
44 |
--------------------------------------------------------------------------------
/Resources/public/less/bootstrap-fontawesome4.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your less files as first to be abled to access less vars from your file
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | * Add it as described on http://www.lesscss.org with the less.js (maybe pathes must be adapted in that case)
12 | *
13 | * Be careful when using less this way, might be most straight forward, but assetic doesnt check the included files
14 | * for changes, and will only regenerate the css if it detects changes in this file!
15 | *
16 | * For development it might be easier to include all you less files in the layout directly
17 | * But then assetic will compile each less file in a own compiler session so you cant mix in the less style into bootstrap, which might not be OK
18 | */
19 |
20 |
21 | // Main bootstrap.less entry point
22 | @import "../bootstrap/less/bootstrap.less";
23 |
24 | // Font Awesome
25 | @import "font-awesome4/font-awesome.less";
26 |
27 | // variables
28 | @FontAwesomePath: "/bundles/mopabootstrap/fonts/fa4";
29 | @icon-font-path: "/bundles/mopabootstrap/bootstrap/fonts/";
30 |
31 | // The Paginator less for MopaBootstrapBundle
32 | @import "paginator.less";
33 |
34 | // The Subnav less for MopaBootstrapBundle
35 | @import "subnav.less";
36 |
37 | // Collection support for MopaBootstrapBundle
38 | @import "collections.less";
39 |
40 | // Collection support for MopaBootstrapBundle
41 | @import "google-maps.less";
42 |
43 | // if you have any variables.less file INCLUDE IT AFTER EVERYTHING cause responsive.less also overrides it with the one from bootstrap!!!!!
44 |
--------------------------------------------------------------------------------
/Resources/public/less/collections.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle collection support
3 | */
4 | .row, .form-group {
5 | .collection-item {
6 | margin-bottom: 9px;
7 | padding-left: (@grid-gutter-width / 2);
8 | padding-right: (@grid-gutter-width / 2);
9 | &:extend(.clearfix all);
10 | }
11 | }
--------------------------------------------------------------------------------
/Resources/public/less/eyecon-datepicker.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Datepicker for Bootstrap
3 | *
4 | * Copyright 2012 Stefan Petre
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | */
9 | // Core variables and mixins
10 | @import "../bootstrap/less/variables.less";
11 | @import "../bootstrap/less/mixins.less";
12 |
13 | .datepicker {
14 | top: 0;
15 | left: 0;
16 | padding: 4px;
17 | margin-top: 1px;
18 | border-radius: 4px;
19 | &:before {
20 | content: '';
21 | display: inline-block;
22 | border-left: 7px solid transparent;
23 | border-right: 7px solid transparent;
24 | border-bottom: 7px solid #ccc;
25 | border-bottom-color: rgba(0,0,0,.2);
26 | position: absolute;
27 | top: -7px;
28 | left: 6px;
29 | }
30 | &:after {
31 | content: '';
32 | display: inline-block;
33 | border-left: 6px solid transparent;
34 | border-right: 6px solid transparent;
35 | border-bottom: 6px solid #fff;
36 | position: absolute;
37 | top: -6px;
38 | left: 7px;
39 | }
40 | >div {
41 | display: none;
42 | }
43 | table{
44 | width: 100%;
45 | margin: 0;
46 | }
47 | td,
48 | th{
49 | text-align: center;
50 | width: 20px;
51 | height: 20px;
52 | border-radius: 4px;
53 | }
54 | td {
55 | &.day:hover {
56 | background: #eee;
57 | cursor: pointer;
58 | }
59 | &.old,
60 | &.new {
61 | color: #999;
62 | }
63 | &.active,
64 | &.active:hover {
65 | background: @btn-primary-bg;
66 | color: #fff;
67 | text-shadow: 0 -1px 0 rgba(0,0,0,.25);
68 | }
69 | span {
70 | display: block;
71 | width: 47px;
72 | height: 54px;
73 | line-height: 54px;
74 | float: left;
75 | margin: 2px;
76 | cursor: pointer;
77 | border-radius: 4px;
78 | &:hover {
79 | background: #eee;
80 | }
81 | &.active {
82 | background: @btn-primary-bg;
83 | color: #fff;
84 | text-shadow: 0 -1px 0 rgba(0,0,0,.25);
85 | }
86 | &.old {
87 | color: #999;
88 | }
89 | }
90 | }
91 |
92 | th {
93 | &.switch {
94 | width: 145px;
95 | }
96 | &.next,
97 | &.prev {
98 | font-size: @font-size-base * 1.5;
99 | }
100 | }
101 |
102 | thead tr:first-child th {
103 | cursor: pointer;
104 | &:hover{
105 | background: #eee;
106 | }
107 | }
108 | /*.dow {
109 | border-top: 1px solid #ddd !important;
110 | }*/
111 | }
112 | .input-append,
113 | .input-prepend {
114 | &.date {
115 | .add-on i {
116 | display: block;
117 | cursor: pointer;
118 | width: 16px;
119 | height: 16px;
120 | }
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/animated.less:
--------------------------------------------------------------------------------
1 | // Animated Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .@{fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .@{fa-css-prefix}-pull-left { float: left; }
11 | .@{fa-css-prefix}-pull-right { float: right; }
12 |
13 | .@{fa-css-prefix} {
14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .@{fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "animated.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
14 | .fa-icon-rotate(@degrees, @rotation) {
15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
16 | -webkit-transform: rotate(@degrees);
17 | -ms-transform: rotate(@degrees);
18 | transform: rotate(@degrees);
19 | }
20 |
21 | .fa-icon-flip(@horiz, @vert, @rotation) {
22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
23 | -webkit-transform: scale(@horiz, @vert);
24 | -ms-transform: scale(@horiz, @vert);
25 | transform: scale(@horiz, @vert);
26 | }
27 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .@{fa-css-prefix}-rotate-90,
15 | :root .@{fa-css-prefix}-rotate-180,
16 | :root .@{fa-css-prefix}-rotate-270,
17 | :root .@{fa-css-prefix}-flip-horizontal,
18 | :root .@{fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/spinning.less:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: spin 2s infinite linear;
6 | -moz-animation: spin 2s infinite linear;
7 | -o-animation: spin 2s infinite linear;
8 | animation: spin 2s infinite linear;
9 | }
10 |
11 | @-moz-keyframes spin {
12 | 0% { -moz-transform: rotate(0deg); }
13 | 100% { -moz-transform: rotate(359deg); }
14 | }
15 | @-webkit-keyframes spin {
16 | 0% { -webkit-transform: rotate(0deg); }
17 | 100% { -webkit-transform: rotate(359deg); }
18 | }
19 | @-o-keyframes spin {
20 | 0% { -o-transform: rotate(0deg); }
21 | 100% { -o-transform: rotate(359deg); }
22 | }
23 | @keyframes spin {
24 | 0% {
25 | -webkit-transform: rotate(0deg);
26 | transform: rotate(0deg);
27 | }
28 | 100% {
29 | -webkit-transform: rotate(359deg);
30 | transform: rotate(359deg);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .@{fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "spinning.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
13 | .fa-icon-rotate(@degrees, @rotation) {
14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
15 | -webkit-transform: rotate(@degrees);
16 | -ms-transform: rotate(@degrees);
17 | transform: rotate(@degrees);
18 | }
19 |
20 | .fa-icon-flip(@horiz, @vert, @rotation) {
21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
22 | -webkit-transform: scale(@horiz, @vert);
23 | -ms-transform: scale(@horiz, @vert);
24 | transform: scale(@horiz, @vert);
25 | }
26 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .@{fa-css-prefix}-rotate-90,
15 | :root .@{fa-css-prefix}-rotate-180,
16 | :root .@{fa-css-prefix}-rotate-270,
17 | :root .@{fa-css-prefix}-flip-horizontal,
18 | :root .@{fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/Resources/public/less/font-awesome4/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/Resources/public/less/google-maps.less:
--------------------------------------------------------------------------------
1 | /**
2 | * Some fixes for displaying google maps inside a page with bootstrap
3 | */
4 |
5 | .gmnoprint{
6 | img{
7 | max-width: none;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Resources/public/less/mopabootstrapbundle-fa.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your less files as first to be abled to access less vars from your file
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | * Add it as described on http://www.lesscss.org with the less.js (maybe pathes must be adapted in that case)
12 | *
13 | * Be careful when using less this way, might be most straight forward, but assetic doesnt check the included files
14 | * for changes, and will only regenerate the css if it detects changes in this file!
15 | *
16 | * For development it might be easier to include all you less files in the layout directly
17 | * But then assetic will compile each less file in a own compiler session so you cant mix in the less style into bootstrap, which might not be OK
18 | */
19 |
20 |
21 | // Main bootstrap.less entry point (for font awesome)
22 | @import "bootstrap-fontawesome.less";
23 |
24 | // The Paginator less for MopaBootstrapBundle
25 | @import "paginator.less";
26 |
27 | // The Subnav less for MopaBootstrapBundle
28 | @import "subnav.less";
29 |
30 | // Collection support for MopaBootstrapBundle
31 | @import "collections.less";
32 |
33 | // Collection support for MopaBootstrapBundle
34 | @import "google-maps.less";
35 |
36 | // include the responsive after all of your stuff!
37 | // @import "../bootstrap/less/responsive.less";
38 |
39 | // if you have any variables.less file INCLUDE IT AFTER EVERYTHING cause responsive.less also overrides it with the one from bootstrap!!!!!
40 |
--------------------------------------------------------------------------------
/Resources/public/less/mopabootstrapbundle-fa4.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your less files as first to be abled to access less vars from your file
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | * Add it as described on http://www.lesscss.org with the less.js (maybe pathes must be adapted in that case)
12 | *
13 | * Be careful when using less this way, might be most straight forward, but assetic doesnt check the included files
14 | * for changes, and will only regenerate the css if it detects changes in this file!
15 | *
16 | * For development it might be easier to include all you less files in the layout directly
17 | * But then assetic will compile each less file in a own compiler session so you cant mix in the less style into bootstrap, which might not be OK
18 | */
19 |
20 |
21 | // Main bootstrap.less entry point (for font awesome)
22 | @import "bootstrap-fontawesome4.less";
23 |
24 | // The Paginator less for MopaBootstrapBundle
25 | @import "paginator.less";
26 |
27 | // The Subnav less for MopaBootstrapBundle
28 | @import "subnav.less";
29 |
30 | // Collection support for MopaBootstrapBundle
31 | @import "collections.less";
32 |
33 | // Collection support for MopaBootstrapBundle
34 | @import "google-maps.less";
35 |
36 | // include the responsive after all of your stuff!
37 | // @import "../bootstrap/less/responsive.less";
38 |
39 | // if you have any variables.less file INCLUDE IT AFTER EVERYTHING cause responsive.less also overrides it with the one from bootstrap!!!!!
40 |
--------------------------------------------------------------------------------
/Resources/public/less/mopabootstrapbundle.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your less files as first to be abled to access less vars from your file
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | * Add it as described on http://www.lesscss.org with the less.js (maybe pathes must be adapted in that case)
12 | *
13 | * Be careful when using less this way, might be most straight forward, but assetic doesnt check the included files
14 | * for changes, and will only regenerate the css if it detects changes in this file!
15 | *
16 | * For development it might be easier to include all you less files in the layout directly
17 | * But then assetic will compile each less file in a own compiler session so you cant mix in the less style into bootstrap, which might not be OK
18 | */
19 |
20 |
21 | // Main bootstrap.less entry point
22 | @import "../bootstrap/less/bootstrap.less";
23 |
24 | // variables
25 | @icon-font-path: "/fonts/";
26 |
27 | // The Paginator less for MopaBootstrapBundle
28 | @import "paginator.less";
29 |
30 | // The Subnav less for MopaBootstrapBundle
31 | @import "subnav.less";
32 |
33 | // Collection support for MopaBootstrapBundle
34 | @import "collections.less";
35 |
36 | // google Maps support for MopaBootstrapBundle
37 | @import "google-maps.less";
38 |
39 | // if you have any variables.less file INCLUDE IT AFTER EVERYTHING cause responsive.less also overrides it with the one from bootstrap!!!!!
40 |
--------------------------------------------------------------------------------
/Resources/public/less/paginator.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle pagination support
3 | */
4 | .pagination{
5 | .disabled{
6 | a, a:hover {
7 | background-color: transparent;
8 | text-decoration: none;
9 | color: #BFBFBF;
10 | cursor: default;
11 | }
12 | }
13 | .next a{
14 | border-right: 1px solid;
15 | border-right-color: rgba(0, 0, 0, 0.15);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Resources/public/sass/bootstrap-fontawesome.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Bootstrap v2.1.1
3 | //
4 | // Copyright 2012 Twitter, Inc
5 | // Licensed under the Apache License v2.0
6 | // http://www.apache.org/licenses/LICENSE-2.0
7 | //
8 | // Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | // Converted to Sass by @thomasmcdonald_, and distributed as bootstrap-sass
10 |
11 | // variables
12 | $FontAwesomePath: "/bundles/mopabootstrap/font";
13 | $icon-font-path: "/bundles/mopabootstrap/bootstrap/fonts/";
14 |
15 | // Core variables and mixins
16 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/variables"; // Modify this for custom colors, font-sizes, etc
17 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/mixins";
18 |
19 | // CSS Reset
20 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/reset";
21 |
22 | // Grid system and page structure
23 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/scaffolding";
24 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/grid";
25 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/layouts";
26 |
27 | // Base CSS
28 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/type";
29 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/code";
30 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/forms";
31 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/tables";
32 |
33 | // Components: common
34 | @import "font-awesome/font-awesome";
35 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/dropdowns";
36 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/wells";
37 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/component-animations";
38 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/close";
39 |
40 | // Components: Buttons & Alerts
41 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/buttons";
42 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/button-groups";
43 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/alerts"; // Note: alerts share common CSS with buttons and thus have styles in _buttons.scss
44 |
45 | // Components: Nav
46 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/navs";
47 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/navbar";
48 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/breadcrumbs";
49 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/pagination";
50 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/pager";
51 |
52 | // Components: Popovers
53 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/modals";
54 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/tooltip";
55 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/popovers";
56 |
57 | // Components: Misc
58 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/thumbnails";
59 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/labels-badges";
60 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/progress-bars";
61 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/accordion";
62 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/carousel";
63 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/hero-unit";
64 |
65 | // Utility classes
66 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap/utilities"; // Has to be last to override when necessary
67 |
--------------------------------------------------------------------------------
/Resources/public/sass/bootstrap_and_overrides.scss:
--------------------------------------------------------------------------------
1 | // If you are using Compass, you can override Bootstrap variables and
2 | // functions by specifying a 'load_path' with a higher priority:
3 | //
4 | // assetic:
5 | // filters:
6 | // compass:
7 | // # [..]
8 | // load_paths:
9 | // - %kernel.root_dir%/sass/
10 |
--------------------------------------------------------------------------------
/Resources/public/sass/collections.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle collection support
3 | */
4 | .row, .form-group {
5 | .collection-item {
6 | margin-bottom: 9px;
7 | padding-left: ($grid-gutter-width / 2);
8 | padding-right: ($grid-gutter-width / 2);
9 | @include clearfix();
10 | }
11 | }
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_animated.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .#{$fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .#{$fa-css-prefix}-pull-left { float: left; }
11 | .#{$fa-css-prefix}-pull-right { float: right; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .#{$fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
14 | @mixin fa-icon-rotate($degrees, $rotation) {
15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
16 | -webkit-transform: rotate($degrees);
17 | -ms-transform: rotate($degrees);
18 | transform: rotate($degrees);
19 | }
20 |
21 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
23 | -webkit-transform: scale($horiz, $vert);
24 | -ms-transform: scale($horiz, $vert);
25 | transform: scale($horiz, $vert);
26 | }
27 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/Resources/public/sass/font-awesome/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "animated";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/Resources/public/sass/form_flow.scss:
--------------------------------------------------------------------------------
1 | .form-flow-actions {
2 | .btn {
3 | float: right;
4 | margin-left: 3px;
5 | }
6 |
7 | &::before, &::after {
8 | content: "";
9 | display: table;
10 | }
11 |
12 | &::after {
13 | clear: both;
14 | }
15 |
16 | zoom: 1;
17 | }
--------------------------------------------------------------------------------
/Resources/public/sass/initializr_addons.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * moving subnavigation bar snapping to top on scroll
3 | * http://stackoverflow.com/questions/9179708/replicating-bootstraps-main-nav-and-subnav
4 | * http://stackoverflow.com/questions/10318163/subnav-bar-collapsed-with-twitter-bootstrap
5 | * http://twitter.github.com/bootstrap/assets/css/docs.css
6 | */
7 |
8 | /* Subnav */
9 | .subnav {
10 | width: 100%;
11 | height: 36px;
12 | background-color: #eeeeee; /* Old browsers */
13 | background-repeat: repeat-x; /* Repeat the gradient */
14 | background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); /* FF3.6+ */
15 | background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#eeeeee)); /* Chrome,Safari4+ */
16 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Chrome 10+,Safari 5.1+ */
17 | background-image: -ms-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* IE10+ */
18 | background-image: -o-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Opera 11.10+ */
19 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); /* IE6-9 */
20 | background-image: linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* W3C */
21 | border: 1px solid #e5e5e5;
22 | -webkit-border-radius: 4px;
23 | -moz-border-radius: 4px;
24 | border-radius: 4px;
25 | }
26 | .subnav .nav {
27 | margin-bottom: 0;
28 | }
29 | .subnav .nav > li > a {
30 | margin: 0;
31 | padding-top: 11px;
32 | padding-bottom: 11px;
33 | border-left: 1px solid #f5f5f5;
34 | border-right: 1px solid #e5e5e5;
35 | -webkit-border-radius: 0;
36 | -moz-border-radius: 0;
37 | border-radius: 0;
38 | }
39 | .subnav .nav > .active > a,
40 | .subnav .nav > .active > a:hover {
41 | padding-left: 13px;
42 | color: #777;
43 | background-color: #e9e9e9;
44 | border-right-color: #ddd;
45 | border-left: 0;
46 | -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
47 | -moz-box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
48 | box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
49 | }
50 | .subnav .nav > .active > a .caret,
51 | .subnav .nav > .active > a:hover .caret {
52 | border-top-color: #777;
53 | }
54 | .subnav .nav > li:first-child > a,
55 | .subnav .nav > li:first-child > a:hover {
56 | border-left: 0;
57 | padding-left: 12px;
58 | -webkit-border-radius: 4px 0 0 4px;
59 | -moz-border-radius: 4px 0 0 4px;
60 | border-radius: 4px 0 0 4px;
61 | }
62 | .subnav .nav > li:last-child > a {
63 | border-right: 0;
64 | }
65 | .subnav .dropdown-menu {
66 | -webkit-border-radius: 0 0 4px 4px;
67 | -moz-border-radius: 0 0 4px 4px;
68 | border-radius: 0 0 4px 4px;
69 | }
70 |
71 | /* Fixed subnav on scroll, but only for 980px and up (sorry IE!) */
72 | @media (min-width: 980px) {
73 | .subnav-fixed {
74 | position: fixed;
75 | top: 0;
76 | left: 0;
77 | right: 0;
78 | z-index: 1020; /* 10 less than .navbar-fixed to prevent any overlap */
79 | border-color: #d5d5d5;
80 | border-width: 0 0 1px; /* drop the border on the fixed edges */
81 | -webkit-border-radius: 0;
82 | -moz-border-radius: 0;
83 | border-radius: 0;
84 | -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
85 | -moz-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
86 | box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
87 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */
88 | }
89 | .subnav-fixed .nav {
90 | width: 938px;
91 | margin: 0 auto;
92 | padding: 0 1px;
93 | }
94 | .subnav .nav > li:first-child > a,
95 | .subnav .nav > li:first-child > a:hover {
96 | -webkit-border-radius: 0;
97 | -moz-border-radius: 0;
98 | border-radius: 0;
99 | }
100 | }
101 |
102 | /* Make tables spaced out a bit more */
103 | h2 + table,
104 | h3 + table,
105 | h4 + table,
106 | h2 + .row {
107 | margin-top: 15px;
108 | }
109 |
--------------------------------------------------------------------------------
/Resources/public/sass/initializr_style.scss:
--------------------------------------------------------------------------------
1 | /* Main bootstrap.scss entry point */
2 | @import "../bootstrap-sass/vendor/assets/stylesheets/bootstrap";
3 |
4 | /* Bootstrap subnav definition */
5 | @import "initializr_addons.scss";
6 |
7 | /* The Paginator less for MopaBootstrapBundle */
8 | @import "paginator.scss";
9 |
10 | /* Collection support for MopaBootstrapBundle */
11 | @import "collections.scss";
12 |
13 | /* ===== Primary Styles ========================================================
14 | Author:
15 | ========================================================================== */
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Resources/public/sass/mopabootstrapbundle-3.2.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your sass files as first to be abled to access sass vars from your file
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | *
12 | * Be careful when using less this way, might be most straight forward, but assetic doesnt check the included files
13 | * for changes, and will only regenerate the css if it detects changes in this file!
14 | *
15 | * For development it might be easier to include all you sass files in the layout directly
16 | * But then assetic will compile each sass file in a own compiler session so you cant mix in the sass style into bootstrap, which might not be OK
17 | */
18 |
19 | // variables
20 | $icon-font-path: "/bundles/mopabootstrap/fonts/bootstrap/" !default;
21 |
22 | // Bootstrap overrides, such as the asset-url(..) function.
23 | @import "bootstrap_and_overrides";
24 |
25 | // Main bootstrap.sass entry point
26 | @import "../bootstrap-sass/assets/stylesheets/bootstrap";
27 |
28 | // The Paginator less for MopaBootstrapBundle
29 | @import "paginator.scss";
30 |
31 | // Collection support for MopaBootstrapBundle
32 | @import "collections.scss";
33 |
34 | // FormFlow support for MopaBootstrapBundle
35 | @import "form_flow.scss";
36 |
--------------------------------------------------------------------------------
/Resources/public/sass/mopabootstrapbundle-fa.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your sass files as first to be abled to access sass vars from your file
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | *
12 | * Be careful when using less this way, might be most straight forward, but assetic doesnt check the included files
13 | * for changes, and will only regenerate the css if it detects changes in this file!
14 | *
15 | * For development it might be easier to include all you sass files in the layout directly
16 | * But then assetic will compile each sass file in a own compiler session so you cant mix in the sass style into bootstrap, which might not be OK
17 | */
18 |
19 |
20 | // Main bootstrap.sass entry point (for font awesome)
21 | @import "bootstrap-fontawesome.scss";
22 |
23 | // The Paginator less for MopaBootstrapBundle
24 | @import "paginator.scss";
25 |
26 | // Collection support for MopaBootstrapBundle
27 | @import "collections.scss";
28 |
29 | // FormFlow support for MopaBootstrapBundle
30 | @import "form_flow.scss";
31 |
32 | // include the responsive after all of your stuff!
33 | // @import "../bootstrap-sass/vendor/assets/stylesheets/_bootstrap-responsive.scss";
34 |
--------------------------------------------------------------------------------
/Resources/public/sass/mopabootstrapbundle.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle
3 | *
4 | * Copyright 2011 Mohrenweiser & Partner
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Import this file in your sass files as first to be abled to access sass vars from your file
9 | * OR
10 | * Add it to the stylesheets of assetic or
11 | *
12 | * Be careful when using less this way, might be most straight forward, but assetic doesnt check the included files
13 | * for changes, and will only regenerate the css if it detects changes in this file!
14 | *
15 | * For development it might be easier to include all you sass files in the layout directly
16 | * But then assetic will compile each sass file in a own compiler session so you cant mix in the sass style into bootstrap, which might not be OK
17 | */
18 |
19 | // variables
20 | $icon-font-path: "/bundles/mopabootstrap/fonts/bootstrap/" !default;
21 |
22 | // Bootstrap overrides, such as the asset-url(..) function.
23 | @import "bootstrap_and_overrides";
24 |
25 | // Main bootstrap.sass entry point
26 | @import "../bootstrap-sass/assets/stylesheets/bootstrap/bootstrap";
27 |
28 | // The Paginator less for MopaBootstrapBundle
29 | @import "paginator.scss";
30 |
31 | // Collection support for MopaBootstrapBundle
32 | @import "collections.scss";
33 |
34 | // FormFlow support for MopaBootstrapBundle
35 | @import "form_flow.scss";
36 |
--------------------------------------------------------------------------------
/Resources/public/sass/paginator.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * MopaBootstrapBundle pagination support
3 | */
4 | .pagination{
5 | .disabled{
6 | a, a:hover {
7 | background-color: transparent;
8 | text-decoration: none;
9 | color: #BFBFBF;
10 | cursor: default;
11 | }
12 | }
13 | .last a{
14 | border: 0;
15 | }
16 | .next a {
17 | border-right: 1px solid;
18 | border-right-color: rgba(0, 0, 0, 0.15);
19 | }
20 | }
--------------------------------------------------------------------------------
/Resources/translations/pagination.ar.yml:
--------------------------------------------------------------------------------
1 | Next: التالي
2 | Previous: السابق
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.de.yml:
--------------------------------------------------------------------------------
1 | Next: Vor
2 | Previous: Zurück
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.en.yml:
--------------------------------------------------------------------------------
1 | Next: Next
2 | Previous: Previous
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.es.yml:
--------------------------------------------------------------------------------
1 | Next: Siguiente
2 | Previous: Anterior
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.fr.yml:
--------------------------------------------------------------------------------
1 | Next: Suivant
2 | Previous: Précédent
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.it.yml:
--------------------------------------------------------------------------------
1 | Next: Successivo
2 | Previous: Precedente
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.ja.yml:
--------------------------------------------------------------------------------
1 | Next: 次
2 | Previous: 前
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.lt.yml:
--------------------------------------------------------------------------------
1 | Next: Sekantis
2 | Previous: Ankstesnis
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.nl.yml:
--------------------------------------------------------------------------------
1 | Next: Volgende
2 | Previous: Vorige
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.pl.yml:
--------------------------------------------------------------------------------
1 | Next: Następna
2 | Previous: Poprzednia
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.pt.yml:
--------------------------------------------------------------------------------
1 | Next: Próximo
2 | Previous: Anterior
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.ru.yml:
--------------------------------------------------------------------------------
1 | Next: След.
2 | Previous: Пред.
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.sk.yml:
--------------------------------------------------------------------------------
1 | Next: Nasledujúca
2 | Previous: Predchádzajúca
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.sl.yml:
--------------------------------------------------------------------------------
1 | Next: Naslednja
2 | Previous: Prejšnja
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.sv.yml:
--------------------------------------------------------------------------------
1 | Next: Nästa
2 | Previous: Föregående
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/translations/pagination.uk.yml:
--------------------------------------------------------------------------------
1 | Next: Наст.
2 | Previous: Поп.
3 | «: «
4 | »: »
5 |
--------------------------------------------------------------------------------
/Resources/views/Form/formflow_buttons.html.twig:
--------------------------------------------------------------------------------
1 | {% set renderBackButton = flow.getCurrentStep() in (flow.getFirstStep() + 1) .. flow.getLastStep() %}
2 |
3 | {#
4 | Default button (the one trigged by pressing the enter/return key) must be defined first.
5 | Thus, all buttons are defined in reverse order and will be reversed again via CSS.
6 | See http://stackoverflow.com/questions/1963245/multiple-submit-buttons-specifying-default-button
7 | #}
8 |
9 | {%- if flow.getCurrentStep() < flow.getMaxSteps() -%}
10 | {{- 'button.next' | trans({}, 'CraueFormFlowBundle') -}}
11 | {%- else -%}
12 | {{- 'button.finish' | trans({}, 'CraueFormFlowBundle') -}}
13 | {%- endif -%}
14 |
15 |
16 |
17 | {{- 'button.back' | trans({}, 'CraueFormFlowBundle') -}}
18 |
19 |
20 |
21 | {{- 'button.reset' | trans({}, 'CraueFormFlowBundle') -}}
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Resources/views/Form/formflow_stepList.html.twig:
--------------------------------------------------------------------------------
1 | {% if flow.getStepDescriptions() | length == flow.getMaxSteps() %}
2 |
3 | {% for stepDescription in flow.getStepDescriptions() %}
4 |
5 | {%- if flow.isAllowDynamicStepNavigation() and (loop.index == 1 or flow.isStepDone(loop.index - 1)) -%}
6 |
8 | {{- stepDescription|trans -}}
9 |
10 | {%- else -%}
11 | {{- stepDescription|trans -}}
12 | {%- endif -%}
13 | {% if loop.index != flow.getMaxSteps() %}
14 | /
15 | {%- endif -%}
16 |
17 | {% endfor %}
18 |
19 | {% endif %}
20 |
--------------------------------------------------------------------------------
/Resources/views/Menu/menu.html.twig:
--------------------------------------------------------------------------------
1 | {% extends '@KnpMenu/menu.html.twig' %}
2 |
3 | {% block linkElement %}
4 | {% apply spaceless %}
5 | {% import 'knp_menu.html.twig' as macros %}
6 |
7 | {% if item.extras.icon|default(false) %}
8 | {{ mopa_bootstrap_icon(item.extras.icon, item.extras.icon_white|default(false)) }}{{ ' ' }}
9 | {%- endif %}
10 | {{ block('label') }}
11 | {% import '@MopaBootstrap/macros.html.twig' as badgemacro %}
12 | {%- if item.extras.badge|default(false) %}
13 | {{ badgemacro.badge(item.extras.badge, false, item.extras.badge_class) }}
14 | {% endif -%}
15 | {%- if item.extras.caret|default(false) %}
16 |
17 | {% endif -%}
18 |
19 | {% endapply %}
20 | {% endblock %}
21 |
--------------------------------------------------------------------------------
/Resources/views/Modal/modal.html.twig:
--------------------------------------------------------------------------------
1 | {% set attr = attr|merge({ 'class': attr.class|default('') ~ ' modal' }) %}
2 |
3 |
6 |
7 | {% block body %}{% endblock %}
8 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Resources/views/Navbar/navbar.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% block header %}
4 |
15 | {% endblock header %}
16 | {% block menu_container %}
17 |
18 | {% block menu %}{% endblock %}
19 |
20 | {% endblock %}
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Resources/views/Navbar/subnavbar.html.twig:
--------------------------------------------------------------------------------
1 |
2 | {% block menu %}{% endblock %}
3 |
4 |
--------------------------------------------------------------------------------
/Resources/views/Pagination/sliding.html.twig:
--------------------------------------------------------------------------------
1 | {% if pageCount > 1 %}
2 | {% set item = '@MopaBootstrap/Pagination/sliding_item.html.twig' %}
3 |
4 |
41 | {% endif %}
42 |
--------------------------------------------------------------------------------
/Resources/views/Pagination/sliding_item.html.twig:
--------------------------------------------------------------------------------
1 |
2 | {% if page != current and (clickable is not defined or clickable) %}
3 | {{ text is defined ? text : page }}
4 | {% else %}
5 | {{ text is defined ? text : page }}
6 | {% endif %}
7 |
8 |
--------------------------------------------------------------------------------
/Resources/views/Pagination/sortable_link.html.twig:
--------------------------------------------------------------------------------
1 | {% set link = "" %}
2 | {% for attr, value in options %}
3 | {% set link = link ~ " " ~ attr ~ '="' ~ value~ '"' %}
4 | {% endfor %}
5 |
6 | {{ title }}
7 |
--------------------------------------------------------------------------------
/Resources/views/base_less.html.twig:
--------------------------------------------------------------------------------
1 | {% extends '@MopaBootstrap/layout.html.twig' %}
2 |
3 | {% block head_style %}
4 | {# Override this block to add your own files! #}
5 | {% stylesheets
6 | '@MopaBootstrapBundle/Resources/public/less/mopabootstrapbundle.less'
7 | %}
8 |
9 | {% endstylesheets %}
10 | {# To use this without less use the base_css.html.twig template as your base
11 | # Be sure you understand whats going on: have a look into
12 | # https://github.com/phiamo/MopaBootstrapBundle/blob/master/Resources/doc/css-vs-less.md
13 | #}
14 | {% endblock head_style %}
15 |
16 | {% block foot_script_assetic %}
17 | {# Please add the javascripts you need in your project
18 | {% javascripts
19 | '@MopaBootstrapBundle/Resources/public/bootstrap/js/tooltip.js'
20 | '@MopaBootstrapBundle/Resources/public/bootstrap/js/*.js'
21 | '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js'
22 | '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js'
23 | %}
24 |
25 | {% endjavascripts %}
26 | #}
27 | {% endblock foot_script_assetic %}
28 |
--------------------------------------------------------------------------------
/Resources/views/base_lessjs.html.twig:
--------------------------------------------------------------------------------
1 | {% extends '@MopaBootstrap/base_less.html.twig' %}
2 |
3 | {% block head_style %}
4 |
5 | {% endblock head_style %}
6 |
--------------------------------------------------------------------------------
/Resources/views/base_sass.html.twig:
--------------------------------------------------------------------------------
1 | {% extends '@MopaBootstrap/layout.html.twig' %}
2 |
3 | {% block head_style %}
4 | {# Override this block to add your own files! #}
5 | {% stylesheets
6 | '@MopaBootstrapBundle/Resources/public/sass/mopabootstrapbundle.scss'
7 | %}
8 |
9 | {% endstylesheets %}
10 | {# To use this without less use the base_css.html.twig template as your base
11 | # Be sure you understand whats going on: have a look into
12 | # https://github.com/phiamo/MopaBootstrapBundle/blob/master/Resources/doc/css-vs-less.md
13 | #}
14 | {% endblock head_style %}
15 |
16 | {% block foot_script_assetic %}
17 | {# Please add the javascripts you need in your project
18 | {% javascripts
19 | '@MopaBootstrapBundle/Resources/public/bootstrap-sass/vendor/assets/javascripts/bootstrap/tooltip.js'
20 | '@MopaBootstrapBundle/Resources/public/bootstrap-sass/vendor/assets/javascripts/bootstrap/*.js'
21 | '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js'
22 | '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js'
23 | %}
24 |
25 | {% endjavascripts %}
26 | #}
27 | {% endblock foot_script_assetic %}
28 |
--------------------------------------------------------------------------------
/Resources/views/base_sass_3.2.html.twig:
--------------------------------------------------------------------------------
1 | {% extends '@MopaBootstrap/base.html.twig' %}
2 |
3 | {% block head_style %}
4 | {# Override this block to add your own files! #}
5 | {% stylesheets
6 | '@MopaBootstrapBundle/Resources/public/sass/mopabootstrapbundle-3.2.scss'
7 | %}
8 |
9 | {% endstylesheets %}
10 | {# To use this without less use the base_css.html.twig template as your base
11 | # Be sure you understand whats going on: have a look into
12 | # https://github.com/phiamo/MopaBootstrapBundle/blob/master/Resources/doc/css-vs-less.md
13 | #}
14 | {% endblock head_style %}
15 |
16 | {% block foot_script_assetic %}
17 | {# Please add the javascripts you need in your project
18 | {% javascripts
19 | '@MopaBootstrapBundle/Resources/public/bootstrap-sass/assets/javascripts/bootstrap/tooltip.js'
20 | '@MopaBootstrapBundle/Resources/public/bootstrap-sass/assets/javascripts/bootstrap/*.js'
21 | '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-collection.js'
22 | '@MopaBootstrapBundle/Resources/public/js/mopabootstrap-subnav.js'
23 | %}
24 |
25 | {% endjavascripts %}
26 | #}
27 | {% endblock foot_script_assetic %}
28 |
--------------------------------------------------------------------------------
/Resources/views/flash.html.twig:
--------------------------------------------------------------------------------
1 | {% macro flash(type, message, close, use_raw, class, domain) %}
2 |
3 | {% if close|default(false) %}
4 | ×
5 | {% endif %}
6 | {% if use_raw|default(false) %}
7 | {{ message|trans({}, domain|default('messages'))|raw }}
8 | {% else %}
9 | {{ message|trans({}, domain|default('messages')) }}
10 | {% endif %}
11 |
12 | {% endmacro %}
13 |
14 | {% macro advanced_flash(type, heading, message, close_tag, use_raw, class, domain) %}
15 |
16 | {% if close_tag|default(false) %}
17 | {% if close_tag == 'true' %}
18 | {% set close_tag = 'a' %}
19 | {% endif %}
20 | <{{ close_tag }} class="close" data-dismiss="alert" aria-hidden="true" {% if close_tag == 'a' %}href="#"{% elseif close_tag =='button' %}type="button"{% endif %}>×{{ close_tag }}>
21 | {% endif %}
22 | {% if heading|default(false) %}
23 |
{{ heading }}
24 | {% endif %}
25 | {% if use_raw|default(false) %}
26 | {{ message|trans({}, domain|default('messages'))|raw }}
27 | {% else %}
28 | {{ message|trans({}, domain|default('messages')) }}
29 | {% endif %}
30 |
31 | {% endmacro %}
32 |
33 | {% macro session_flash(close, use_raw, class, domain) %}
34 | {% import _self as flash_messages %}
35 |
36 | {% if app.session.flashbag.peekAll|length > 0 %}
37 | {% set mapping = mopa_bootstrap_flash_mapping()|merge({'fos_user_success':'success'}) %}
38 | {% set flashes = {} %}
39 |
40 | {% for type in mapping|keys %}
41 | {% set flashes = flashes | merge({ (type) : app.session.flashbag.get(type) }) %}
42 | {% endfor %}
43 |
44 | {% for type, messages in flashes %}
45 | {% if type == 'fos_user_success' %}
46 | {% set domain = 'FOSUserBundle' %}
47 | {% endif %}
48 | {% for message in messages %}
49 | {{ flash_messages.flash(mapping[type], message, close, use_raw, class, domain) }}
50 | {% endfor %}
51 | {% endfor %}
52 | {% endif %}
53 | {% endmacro %}
54 |
--------------------------------------------------------------------------------
/Resources/views/icons.html.twig:
--------------------------------------------------------------------------------
1 | {% macro icon(name, inverted) %}
2 |
3 | {% endmacro %}
4 |
5 | {% block fontawesome -%}
6 |
7 | {%- endblock %}
8 |
9 | {% block fontawesome4 -%}
10 |
11 | {%- endblock %}
12 |
13 | {% block glyphicons -%}
14 |
15 | {%- endblock %}
16 |
17 | {% block zmdi -%}
18 |
19 | {%- endblock %}
20 |
--------------------------------------------------------------------------------
/Resources/views/layout.html.twig:
--------------------------------------------------------------------------------
1 | {% extends '@MopaBootstrap/base.html.twig' %}
2 |
--------------------------------------------------------------------------------
/Resources/views/macros.html.twig:
--------------------------------------------------------------------------------
1 | {% macro badge(text, use_raw, class) %}
2 | {{ use_raw|default(false) ? text|raw : text }}
3 | {% endmacro %}
4 |
5 | {% macro label(text, type, use_raw, block) %}
6 | {% set tag = block|default(false) ? 'div' : 'span' %}
7 | <{{ tag }} class="label {{ type|default(false) ? 'label-'~type: 'label-default' }}">{{ use_raw|default(false) ? text|raw : text }}{{ tag }}>
8 | {% endmacro %}
9 |
10 |
11 | {% macro progressBar(class, width) %}
12 |
15 | {% endmacro %}
16 |
--------------------------------------------------------------------------------
/Twig/FlashExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Twig;
13 |
14 | use Twig\Extension\AbstractExtension;
15 | use Twig\TwigFunction;
16 |
17 | /**
18 | * MopaBootstrap Flash Extension.
19 | *
20 | * @author Nikolai Zujev (jaymecd)
21 | */
22 | class FlashExtension extends AbstractExtension
23 | {
24 | /**
25 | * @var array
26 | */
27 | protected $mapping = [];
28 |
29 | public function __construct(array $mapping)
30 | {
31 | $this->mapping = $mapping;
32 | }
33 |
34 | public function getFunctions(): array
35 | {
36 | return [
37 | new TwigFunction('mopa_bootstrap_flash_mapping', [$this, 'getMapping'], ['is_safe' => ['html']]),
38 | ];
39 | }
40 |
41 | /**
42 | * Get flash mapping.
43 | *
44 | * @return array
45 | */
46 | public function getMapping()
47 | {
48 | return $this->mapping;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/Twig/FormExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Twig;
13 |
14 | use Twig\Extension\AbstractExtension;
15 | use Twig\TwigFunction;
16 |
17 | /**
18 | * Twig extension for form.
19 | *
20 | * Adds form_help and form_tabs functions.
21 | *
22 | * @author Paweł Madej (nysander)
23 | * @author Charles Sanquer
24 | */
25 | class FormExtension extends AbstractExtension
26 | {
27 | public function getFunctions(): array
28 | {
29 | return [
30 | new TwigFunction('form_tabs', null, [
31 | 'node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode',
32 | 'is_safe' => ['html'],
33 | ]),
34 | ];
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Twig/IconExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Twig;
13 |
14 | use Twig\Environment;
15 | use Twig\Extension\AbstractExtension;
16 | use Twig\TemplateWrapper;
17 | use Twig\TwigFunction;
18 |
19 | /**
20 | * MopaBootstrap Icon Extension.
21 | *
22 | * @author Craig Blanchette (isometriks)
23 | */
24 | class IconExtension extends AbstractExtension
25 | {
26 | /**
27 | * @var string
28 | */
29 | protected $iconSet;
30 |
31 | /**
32 | * @var string|null
33 | */
34 | protected $shortcut;
35 |
36 | /**
37 | * @var TemplateWrapper|null
38 | */
39 | protected $iconTemplate;
40 |
41 | /**
42 | * @param string $iconSet
43 | * @param string|null $shortcut
44 | */
45 | public function __construct($iconSet, $shortcut = null)
46 | {
47 | $this->iconSet = $iconSet;
48 | $this->shortcut = $shortcut;
49 | }
50 |
51 | public function getFunctions(): array
52 | {
53 | $options = [
54 | 'is_safe' => ['html'],
55 | 'needs_environment' => true,
56 | ];
57 |
58 | $functions = [
59 | new TwigFunction('mopa_bootstrap_icon', [$this, 'renderIcon'], $options),
60 | ];
61 |
62 | if ($this->shortcut) {
63 | $functions[] = new TwigFunction($this->shortcut, [$this, 'renderIcon'], $options);
64 | }
65 |
66 | return $functions;
67 | }
68 |
69 | /**
70 | * Renders the icon.
71 | *
72 | * @param string $icon
73 | * @param bool $inverted
74 | */
75 | public function renderIcon(Environment $env, $icon, $inverted = false): string
76 | {
77 | $template = $this->getIconTemplate($env);
78 | $context = [
79 | 'icon' => $icon,
80 | 'inverted' => $inverted,
81 | ];
82 |
83 | return $template->renderBlock($this->iconSet, $context);
84 | }
85 |
86 | protected function getIconTemplate(Environment $env): TemplateWrapper
87 | {
88 | if ($this->iconTemplate === null) {
89 | $this->iconTemplate = $env->load('@MopaBootstrap/icons.html.twig');
90 | }
91 |
92 | return $this->iconTemplate;
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/Twig/InitializrTwigExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Twig;
13 |
14 | use Twig\Extension\AbstractExtension;
15 | use Twig\Extension\GlobalsInterface;
16 |
17 | /**
18 | * Reads Initializr configuration file and generates
19 | * corresponding Twig Globals.
20 | *
21 | * @author Paweł Madej (nysander)
22 | */
23 | class InitializrTwigExtension extends AbstractExtension implements GlobalsInterface
24 | {
25 | /**
26 | * @var array
27 | */
28 | protected $parameters;
29 |
30 | public function __construct(array $parameters = [])
31 | {
32 | $this->parameters = $parameters;
33 | }
34 |
35 | public function getGlobals(): array
36 | {
37 | return [
38 | 'dns_prefetch' => $this->parameters['dns_prefetch'],
39 | 'meta' => $this->parameters['meta'],
40 | 'google' => $this->parameters['google'],
41 | 'diagnostic_mode' => $this->parameters['diagnostic_mode'],
42 | ];
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Twig/MenuExtension.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | namespace Mopa\Bundle\BootstrapBundle\Twig;
13 |
14 | use Knp\Menu\ItemInterface;
15 | use Knp\Menu\Twig\Helper;
16 | use Mopa\Bundle\BootstrapBundle\Menu\Converter\MenuConverter;
17 | use Twig\Extension\AbstractExtension;
18 | use Twig\TwigFunction;
19 |
20 | /**
21 | * Twig Extension for rendering a Bootstrap menu.
22 | *
23 | * This function provides some more features
24 | * than knp_menu_render, but does more or less the same.
25 | *
26 | * @author phiamo
27 | */
28 | class MenuExtension extends AbstractExtension
29 | {
30 | /**
31 | * @var Helper
32 | */
33 | protected $helper;
34 |
35 | /**
36 | * @var string
37 | */
38 | protected $menuTemplate;
39 |
40 | /**
41 | * @var MenuConverter
42 | */
43 | protected $menuConverter;
44 |
45 | /**
46 | * @param string $menuTemplate
47 | */
48 | public function __construct(Helper $helper, $menuTemplate)
49 | {
50 | $this->helper = $helper;
51 | $this->menuTemplate = $menuTemplate;
52 | }
53 |
54 | public function getFunctions(): array
55 | {
56 | return [
57 | new TwigFunction('mopa_bootstrap_menu', [$this, 'renderMenu'], ['is_safe' => ['html']]),
58 | ];
59 | }
60 |
61 | /**
62 | * Renders the Menu with the specified renderer.
63 | *
64 | * @param ItemInterface|string|array $menu
65 | * @param string $renderer
66 | *
67 | * @return string
68 | *
69 | * @throws \InvalidArgumentException
70 | */
71 | public function renderMenu($menu, array $options = [], $renderer = null)
72 | {
73 | $options = \array_merge([
74 | 'template' => $this->menuTemplate,
75 | 'currentClass' => 'active',
76 | 'ancestorClass' => 'active',
77 | 'allow_safe_labels' => true,
78 | ], $options);
79 |
80 | if (!$menu instanceof ItemInterface) {
81 | $path = [];
82 | if (\is_array($menu)) {
83 | if (empty($menu)) {
84 | throw new \InvalidArgumentException('The array cannot be empty');
85 | }
86 | $path = $menu;
87 | $menu = \array_shift($path);
88 | }
89 |
90 | $menu = $this->helper->get($menu, $path, $options);
91 | }
92 |
93 | $menu = $this->helper->get($menu, [], $options);
94 |
95 | if (isset($options['automenu'])) {
96 | $this->getMenuConverter()->convert($menu, $options);
97 | }
98 |
99 | return $this->helper->render($menu, $options, $renderer);
100 | }
101 |
102 | /**
103 | * @return MenuConverter
104 | */
105 | protected function getMenuConverter()
106 | {
107 | if ($this->menuConverter === null) {
108 | $this->menuConverter = new MenuConverter();
109 | }
110 |
111 | return $this->menuConverter;
112 | }
113 | }
114 |
--------------------------------------------------------------------------------
/UPGRADE-2.1.md:
--------------------------------------------------------------------------------
1 | UPGRADE FROM 2.0 to 2.1
2 | =======================
3 |
4 | ### General
5 |
6 | Make sure you update your namespaces, we changed the Bundles namespace from `Mopa\BootstrapBundle` to `Mopa\Bundle\BootstrapBundle`.
7 |
8 | You must change the namespace references in:
9 |
10 | * app/AppKernel.php
11 | * Your code making use of any MopaBootstrapBundle classes (e.g. Navbar, MenuBuilder, etc.)
12 | * Configuration referencing any classes (e.g. service definitions for menu, navbar, etc.)
13 |
14 | For info about the branches read https://github.com/phiamo/MopaBootstrapBundle/wiki/Branches-&-Versions
15 | If you dont want to care about the twitter/bootstrap dependency, please make sure your [composer.json](https://github.com/phiamo/MopaBootstrapBundle/blob/master/Resources/doc/including_bootstrap.md) is correct
16 |
17 |
18 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mopa/bootstrap-bundle",
3 | "description": "Easy integration of twitters bootstrap into symfony2",
4 | "license": "MIT",
5 | "type": "symfony-bundle",
6 | "keywords": [
7 | "form",
8 | "extra form",
9 | "bootstrap",
10 | "bootstrap form",
11 | "template"
12 | ],
13 | "authors": [
14 | {
15 | "name": "Philipp A. Mohrenweiser",
16 | "email": "phiamo@googlemail.com"
17 | },
18 | {
19 | "name": "Community contributions",
20 | "homepage": "https://github.com/phiamo/MopaBootstrapBundle/contributors"
21 | }
22 | ],
23 | "require": {
24 | "php": "^7.2 || ^8.0",
25 | "mopa/composer-bridge": "^1.3",
26 | "symfony/console": "^4.4 || ^5.1 || ^6.0 || ^7.0",
27 | "symfony/form": "^4.4 || ^5.1 || ^6.0 || ^7.0",
28 | "symfony/framework-bundle": "^4.4 || ^5.1 || ^6.0 || ^7.0",
29 | "symfony/twig-bundle": "^4.4 || ^5.1 || ^6.0 || ^7.0",
30 | "twig/twig": "^2.9 || ^3.0"
31 | },
32 | "require-dev": {
33 | "phpunit/phpunit": "^8.5 || ^9.4",
34 | "symfony/security-bundle": "^4.4 || ^5.1 || ^6.0 || ^7.0",
35 | "symfony/translation-contracts": "^2.0"
36 | },
37 | "suggest": {
38 | "craue/formflow-bundle": "~2.0",
39 | "knplabs/knp-menu-bundle": "~3.0",
40 | "knplabs/knp-paginator-bundle": "~2.3",
41 | "mopa/bootstrap-sandbox-bundle": "~2.3",
42 | "twbs/bootstrap": ">2.0,<4.0-dev",
43 | "twbs/bootstrap-sass": "v3.1.1"
44 | },
45 | "autoload": {
46 | "psr-4": {
47 | "Mopa\\Bundle\\BootstrapBundle\\": ""
48 | },
49 | "exclude-from-classmap": [
50 | "/Tests/"
51 | ]
52 | },
53 | "config": {
54 | "allow-plugins": {
55 | "symfony/flex": true
56 | },
57 | "sort-packages": true
58 | },
59 | "extra": {
60 | "branch-alias": {
61 | "dev-master": "3.x-dev"
62 | }
63 | },
64 | "scripts": {
65 | "post-install-cmd": [
66 | "Mopa\\Bundle\\BootstrapBundle\\Composer\\ScriptHandler::postInstallSymlinkTwitterBootstrap"
67 | ],
68 | "post-update-cmd": [
69 | "Mopa\\Bundle\\BootstrapBundle\\Composer\\ScriptHandler::postInstallSymlinkTwitterBootstrap"
70 | ]
71 | }
72 | }
73 |
--------------------------------------------------------------------------------