├── .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 | 15 | 16 | %mopa_bootstrap.menu.template% 17 | 18 | 19 | 20 | 21 | 22 | 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 | * footer 100 | * foot_scripts 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 |
108 | {% for tab in form.vars.tabs %} 109 | 110 | {{ tab.label }} 111 | 112 | {% endfor %} 113 |
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 | 15 | 16 | 19 | 20 | 23 |
24 | -------------------------------------------------------------------------------- /Resources/views/Form/formflow_stepList.html.twig: -------------------------------------------------------------------------------- 1 | {% if flow.getStepDescriptions() | length == flow.getMaxSteps() %} 2 | 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 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /Resources/views/Navbar/navbar.html.twig: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /Resources/views/Navbar/subnavbar.html.twig: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /Resources/views/Pagination/sliding.html.twig: -------------------------------------------------------------------------------- 1 | {% if pageCount > 1 %} 2 | {% set item = '@MopaBootstrap/Pagination/sliding_item.html.twig' %} 3 | 4 |
    5 | {% include item with {name: 'first', 6 | text: first_text|default('«') | trans({}, 'pagination'), 7 | page: first is defined ? first : null, 8 | clickable: first is defined and current != first 9 | } 10 | %} 11 | 12 | {% include item with {name: 'prev', 13 | text: '‹ ' ~ prev_text|default('Previous') | trans({}, 'pagination'), 14 | page: previous is defined ? previous : null, 15 | clickable: previous is defined 16 | } 17 | %} 18 | 19 | {% for page in pagesInRange %} 20 | {% include item %} 21 | {% endfor %} 22 | 23 | {% 24 | include item with { 25 | name: 'next', 26 | text: next_text|default('Next') | trans({}, 'pagination') ~ ' ›', 27 | page: next is defined ? next : null, 28 | clickable: next is defined 29 | } 30 | %} 31 | 32 | {% 33 | include item with { 34 | name: 'last', 35 | text: last_text|default('»') | trans({}, 'pagination'), 36 | page: last is defined ? last : null, 37 | clickable: last is defined and current != last 38 | } 39 | %} 40 |
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 %}>× 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 }} 8 | {% endmacro %} 9 | 10 | 11 | {% macro progressBar(class, width) %} 12 |
    13 |
    14 |
    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 | --------------------------------------------------------------------------------