├── .gitignore ├── Command ├── Article │ └── RemoveAllArticlesCommand.php ├── MediaLibrary │ └── MigrateAllMediaToMediaLibraryCommand.php └── User │ └── BlogUsersPromoteCommand.php ├── Controller ├── Backend │ ├── ArticleController.php │ ├── CategoryController.php │ ├── CommentController.php │ ├── DefaultController.php │ ├── FeedController.php │ ├── HomepageController.php │ ├── MediaController.php │ ├── SettingsController.php │ ├── TagController.php │ └── UserController.php └── Frontend │ ├── BlogController.php │ ├── RedirectController.php │ └── SidebarController.php ├── Converter └── AbstractConverter.php ├── DataFixtures └── Settings │ └── SettingsData.php ├── DependencyInjection ├── Configuration.php └── EDBlogExtension.php ├── EDBlogBundle.php ├── Event ├── ArticleAdministrationEvent.php ├── CommentEvent.php ├── MediaArrayEvent.php └── TaxonomyArrayEvent.php ├── Events └── EDBlogEvents.php ├── Forms ├── ArticleExcerptType.php ├── ArticleMetaType.php ├── ArticlePhotoType.php ├── ArticleType.php ├── BlogUserType.php ├── CommentModerateType.php ├── CommentType.php ├── ImportUserType.php ├── MediaInfoType.php ├── MediaType.php ├── SettingsType.php ├── TagType.php ├── TaxonomyType.php └── TermType.php ├── Handler ├── ArticleHandler.php ├── BlogUserHandler.php ├── MediaHandler.php ├── ObjectGenerator.php ├── Pagination.php └── SettingsHandler.php ├── Hydrators └── SettingsHydrator.php ├── Interfaces ├── Model │ ├── ArticleCommenterInterface.php │ ├── ArticleInterface.php │ ├── ArticleMetaInterface.php │ ├── BlogSettingsInterface.php │ ├── BlogTaxonomyInterface.php │ ├── BlogTermInterface.php │ ├── BlogUserInterface.php │ ├── CommentInterface.php │ └── TaxonomyRelationInterface.php └── Repository │ ├── ArticleRepositoryInterface.php │ ├── BlogSettingsRepositoryInterface.php │ ├── BlogTaxonomyRepositoryInterface.php │ ├── BlogUserRepositoryInterface.php │ └── CommentRepositoryInterface.php ├── LICENSE ├── Listener ├── ArticleEventListener.php ├── CommentEventListener.php └── MediaLibraryListener.php ├── Model ├── Entity │ ├── Article.php │ ├── ArticleMeta.php │ ├── BlogSettings.php │ ├── Comment.php │ ├── Taxonomy.php │ ├── TaxonomyRelation.php │ └── Term.php └── Repository │ ├── ArticleRepository.php │ ├── BlogSettingsRepository.php │ ├── CommentRepository.php │ ├── TaxonomyRepository.php │ └── UserRepository.php ├── README.md ├── Resources ├── config │ └── services.xml ├── doc │ └── index.rst ├── meta │ └── LICENSE ├── public │ ├── config.rb │ ├── css │ │ ├── Jcrop.gif │ │ ├── bootstrap-tagsinput.css │ │ ├── bootstrap.css │ │ ├── bootstrap.min.css │ │ ├── jquery.Jcrop.css │ │ ├── main.css │ │ ├── main.min.blessed.css │ │ ├── nprogress.css │ │ └── pnotify.custom.min.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── gulpfile.js │ ├── img │ │ ├── avatar-50x50.png │ │ ├── avatar-50x50@2x.png │ │ ├── bg-select.png │ │ ├── bg-select@2x.png │ │ └── svg │ │ │ ├── edblog-logo.svg │ │ │ ├── edblog-white-logo.svg │ │ │ └── image-placeholder.svg │ ├── js │ │ ├── ed_autocomplete.js │ │ ├── fe-general.js │ │ ├── frontend.js │ │ ├── general.js │ │ ├── tinymce │ │ │ ├── langs │ │ │ │ └── readme.md │ │ │ ├── license.txt │ │ │ ├── plugins │ │ │ │ ├── advlist │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── anchor │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autolink │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autoresize │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autosave │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── bbcode │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── charmap │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── code │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── colorpicker │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── contextmenu │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── directionality │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── emoticons │ │ │ │ │ ├── img │ │ │ │ │ │ ├── smiley-cool.gif │ │ │ │ │ │ ├── smiley-cry.gif │ │ │ │ │ │ ├── smiley-embarassed.gif │ │ │ │ │ │ ├── smiley-foot-in-mouth.gif │ │ │ │ │ │ ├── smiley-frown.gif │ │ │ │ │ │ ├── smiley-innocent.gif │ │ │ │ │ │ ├── smiley-kiss.gif │ │ │ │ │ │ ├── smiley-laughing.gif │ │ │ │ │ │ ├── smiley-money-mouth.gif │ │ │ │ │ │ ├── smiley-sealed.gif │ │ │ │ │ │ ├── smiley-smile.gif │ │ │ │ │ │ ├── smiley-surprised.gif │ │ │ │ │ │ ├── smiley-tongue-out.gif │ │ │ │ │ │ ├── smiley-undecided.gif │ │ │ │ │ │ ├── smiley-wink.gif │ │ │ │ │ │ └── smiley-yell.gif │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── example │ │ │ │ │ ├── dialog.html │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── example_dependency │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── fullpage │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── fullscreen │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── hr │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── image │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── importcss │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── insertdatetime │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── layer │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── legacyoutput │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── link │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── lists │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── media │ │ │ │ │ ├── moxieplayer.swf │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── nonbreaking │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── noneditable │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── pagebreak │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── paste │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── preview │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── print │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── responsivefilemanager │ │ │ │ │ ├── img │ │ │ │ │ │ └── insertfile.gif │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── save │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── searchreplace │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── spellchecker │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── tabfocus │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── table │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── template │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── textcolor │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── textpattern │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── visualblocks │ │ │ │ │ ├── css │ │ │ │ │ │ └── visualblocks.css │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── visualchars │ │ │ │ │ └── plugin.min.js │ │ │ │ └── wordcount │ │ │ │ │ └── plugin.min.js │ │ │ ├── skins │ │ │ │ └── lightgray │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ ├── content.min.css │ │ │ │ │ ├── fonts │ │ │ │ │ ├── tinymce-small.eot │ │ │ │ │ ├── tinymce-small.svg │ │ │ │ │ ├── tinymce-small.ttf │ │ │ │ │ ├── tinymce-small.woff │ │ │ │ │ ├── tinymce.eot │ │ │ │ │ ├── tinymce.svg │ │ │ │ │ ├── tinymce.ttf │ │ │ │ │ └── tinymce.woff │ │ │ │ │ ├── img │ │ │ │ │ ├── anchor.gif │ │ │ │ │ ├── loader.gif │ │ │ │ │ ├── object.gif │ │ │ │ │ └── trans.gif │ │ │ │ │ ├── skin.ie7.min.css │ │ │ │ │ └── skin.min.css │ │ │ ├── themes │ │ │ │ └── modern │ │ │ │ │ └── theme.min.js │ │ │ └── tinymce.min.js │ │ └── vendor │ │ │ ├── bootstrap-tagsinput.min.js │ │ │ ├── bootstrap.min.js │ │ │ ├── imagesloaded.pkgd.min.js │ │ │ ├── isotope.pkgd.min.js │ │ │ ├── jquery.Jcrop.min.js │ │ │ ├── jquery.autocomplete.js │ │ │ ├── jquery.fileupload.js │ │ │ ├── jquery.min.js │ │ │ ├── jquery.ui.widget.js │ │ │ ├── modernizr-2.6.2-respond-1.1.0.min.js │ │ │ ├── nprogress.js │ │ │ ├── pnotify.custom.min.js │ │ │ └── retina-1.1.0.min.js │ ├── package.json │ └── scss │ │ ├── _components.articles.scss │ │ ├── _components.dashboard.scss │ │ ├── _components.discussions.scss │ │ ├── _components.dropdowns.scss │ │ ├── _components.forms.scss │ │ ├── _components.other.scss │ │ ├── _components.pagination.scss │ │ ├── _components.phototiles.scss │ │ ├── _components.sidebar.scss │ │ ├── _components.togglers.scss │ │ ├── _elements.headings.scss │ │ ├── _elements.links.scss │ │ ├── _elements.lists.scss │ │ ├── _elements.other.scss │ │ ├── _elements.tables.scss │ │ ├── _generic.normalize.scss │ │ ├── _generic.reset.scss │ │ ├── _objects.footers.scss │ │ ├── _objects.headers.scss │ │ ├── _objects.wrappers.scss │ │ ├── _settings.all.scss │ │ ├── _tools.mixins.scss │ │ ├── _trumps.colors.scss │ │ ├── _trumps.displays.scss │ │ ├── _trumps.dividers.scss │ │ ├── _trumps.floats.scss │ │ ├── _trumps.lineheights.scss │ │ ├── _trumps.others.scss │ │ ├── _trumps.positions.scss │ │ ├── _trumps.texts.scss │ │ ├── _trumps.widths-borders.scss │ │ ├── main.scss │ │ └── vendor │ │ ├── _bootstrap-override.scss │ │ ├── _pnotify-override.scss │ │ └── _tinymce-override.scss ├── translations │ └── messages.fr.xlf └── views │ ├── Article │ ├── Excerpt │ │ ├── form_preview.html.twig │ │ ├── list.html.twig │ │ ├── listAjax.html.twig │ │ └── listAjaxElements.html.twig │ ├── Media │ │ ├── list.html.twig │ │ ├── listAjax.html.twig │ │ └── listAjaxElements.html.twig │ ├── checkWritingLock.html.twig │ ├── create.html.twig │ ├── list.html.twig │ ├── metadata__prototype.html.twig │ ├── show.html.twig │ └── upload_form.html.twig │ ├── Comment │ ├── Comments │ │ ├── list.html.twig │ │ ├── listAjax.html.twig │ │ ├── listAjaxElement.html.twig │ │ ├── paginationComments.html.twig │ │ └── paginationCommentsAjax.html.twig │ ├── comment.html.twig │ ├── comments.html.twig │ ├── edit.html.twig │ ├── form.html.twig │ ├── list.html.twig │ ├── loginToCreateComments.html.twig │ └── loginToListComments.html.twig │ ├── Frontend │ ├── Blog │ │ ├── blogBreadcrumb.html.twig │ │ ├── blog_sidebar.html.twig │ │ ├── blog_sidebar_tags.html.twig │ │ ├── index.html.twig │ │ ├── indexAjax.html.twig │ │ ├── indexAjaxElements.html.twig │ │ └── singleArticle.html.twig │ ├── Components │ │ └── modals.html.twig │ ├── Global │ │ ├── FormsTheme │ │ │ └── date_widget.html.twig │ │ ├── pagination.html.twig │ │ └── paginationAjax.html.twig │ └── Layout │ │ ├── _footer.html.twig │ │ ├── base.html.twig │ │ ├── header.html.twig │ │ └── main.html.twig │ ├── Global │ ├── Macro │ │ └── tables.html.twig │ ├── categories.html.twig │ ├── forms.html.twig │ ├── pagination.html.twig │ ├── paginationAjax.html.twig │ ├── paginationClassic.html.twig │ └── paginationClassicAjax.html.twig │ ├── Homepage │ ├── _menu.html.twig │ └── index.html.twig │ ├── Layout │ ├── blog_admin_base.html.twig │ └── blog_admin_main.html.twig │ ├── Media │ ├── cropPanel.html.twig │ ├── edit.html.twig │ ├── editForm.html.twig │ ├── editInfoForm.html.twig │ ├── image.html.twig │ ├── list.html.twig │ ├── listAjax.html.twig │ └── listAjaxElements.html.twig │ ├── Modals │ ├── add_media.html.twig │ ├── article_locked.html.twig │ └── remove_article.html.twig │ ├── Settings │ └── edit.html.twig │ ├── Taxonomy │ ├── Category │ │ ├── children.html.twig │ │ ├── create.html.twig │ │ ├── edit.html.twig │ │ ├── list.html.twig │ │ ├── listAjax.html.twig │ │ ├── listAjaxElement.html.twig │ │ ├── list_sortable.html.twig │ │ ├── list_sortableAjax.html.twig │ │ ├── list_sortableAjaxElement.html.twig │ │ ├── pretty.html.twig │ │ └── pretty_limited.html.twig │ ├── Tag │ │ ├── create.html.twig │ │ ├── edit.html.twig │ │ ├── list.html.twig │ │ ├── listAjax.html.twig │ │ └── listAjaxElement.html.twig │ ├── pagination.html.twig │ └── paginationAjax.html.twig │ ├── Users │ ├── add.html.twig │ ├── blog_privileges.html.twig │ ├── edit.html.twig │ └── list.html.twig │ └── Utils │ ├── _comment.html.twig │ ├── _comments.html.twig │ ├── fields.html.twig │ ├── flash_message.html.twig │ └── flash_message.js.twig ├── Security ├── ACL │ ├── ArticlePermissionMap.php │ └── PermissionMap.php └── Authorization │ └── Voter │ ├── AdminVoter.php │ ├── ArticleVoter.php │ └── BlogVoter.php ├── Transformers ├── PhotoToIdTransformer.php ├── TagsToTextTransformer.php └── UserToEmailTransformer.php ├── Twig └── EDBlogExtension.php ├── Util ├── EDEncryption.php └── IDEncrypt.php └── composer.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Symfony template 3 | # Cache and logs (Symfony2) 4 | /app/cache/* 5 | /app/logs/* 6 | !app/cache/.gitkeep 7 | !app/logs/.gitkeep 8 | 9 | # Cache and logs (Symfony3) 10 | /var/cache/* 11 | /var/logs/* 12 | !var/cache/.gitkeep 13 | !var/logs/.gitkeep 14 | 15 | # Parameters 16 | /app/config/parameters.yml 17 | /app/config/parameters.ini 18 | 19 | # Managed by Composer 20 | /app/bootstrap.php.cache 21 | /var/bootstrap.php.cache 22 | /bin/* 23 | !bin/console 24 | !bin/symfony_requirements 25 | /vendor/ 26 | 27 | # Assets and user uploads 28 | /web/bundles/ 29 | /web/uploads/ 30 | 31 | # PHPUnit 32 | /app/phpunit.xml 33 | /phpunit.xml 34 | 35 | # Build data 36 | /build/ 37 | 38 | # Composer PHAR 39 | /composer.phar 40 | 41 | /.idea 42 | node_modules/ 43 | npm-debug.log 44 | .sass-cache/ 45 | 46 | 47 | -------------------------------------------------------------------------------- /Command/Article/RemoveAllArticlesCommand.php: -------------------------------------------------------------------------------- 1 | setName('edblog:remove_all_articles') 22 | ->setDescription('It clears Article table'); 23 | } 24 | 25 | protected function execute(InputInterface $input, OutputInterface $output) 26 | { 27 | $em = $this->getContainer()->get('doctrine')->getManager(); 28 | 29 | try 30 | { 31 | $em->getRepository("AppBundle:Article")->removeAll(); 32 | 33 | $output->writeln("Article table cleared successfully"); 34 | } 35 | catch(\Exception $e) 36 | { 37 | $output->writeln($e->getMessage()); 38 | } 39 | } 40 | 41 | } -------------------------------------------------------------------------------- /Command/MediaLibrary/MigrateAllMediaToMediaLibraryCommand.php: -------------------------------------------------------------------------------- 1 | setName('edblog:media_migrate_all') 24 | ->setDescription('Will add all uploaded Media into Media Library Gallery'); 25 | } 26 | 27 | protected function execute(InputInterface $input, OutputInterface $output) 28 | { 29 | $em = $this->getContainer()->get('doctrine')->getManager(); 30 | $dispatcher = $this->getContainer()->get('event_dispatcher'); 31 | 32 | try 33 | { 34 | $medias = $this->getContainer()->get('sonata.media.manager.media')->findAll(); 35 | 36 | $dispatcher->dispatch(EDBlogEvents::ED_BLOG_MEDIA_LIBRARY_MEDIA_UPLOADED, new MediaArrayEvent($medias)); 37 | } 38 | catch(\Exception $e) 39 | { 40 | $output->writeln($e->getMessage()); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /Command/User/BlogUsersPromoteCommand.php: -------------------------------------------------------------------------------- 1 | setName('edblog:user:synchronize_blog_users') 21 | ->setDescription('Will add ROLE_BLOG_USER to existing ROLE_BLOG_ADMIN users.'); 22 | } 23 | 24 | protected function execute(InputInterface $input, OutputInterface $output) 25 | { 26 | $em = $this->getContainer()->get('doctrine')->getManager(); 27 | 28 | try 29 | { 30 | $buffer = 0; 31 | 32 | foreach( $this->getContainer()->get('app_repository_user')->findAll() as $user) 33 | { 34 | if($user->hasRole('ROLE_BLOG_ADMIN') && !$user->hasRole('ROLE_BLOG_USER')) 35 | { 36 | $user->addRole('ROLE_BLOG_USER'); 37 | $em->persist($user); 38 | 39 | if(++$buffer == 50) 40 | { 41 | $buffer = 0; 42 | $em->flush(); 43 | } 44 | } 45 | } 46 | 47 | $em->flush(); 48 | } 49 | catch(\Exception $e) 50 | { 51 | $output->writeln($e->getMessage()); 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /Controller/Backend/FeedController.php: -------------------------------------------------------------------------------- 1 | get('app_repository_article')->getActiveArticles(); 22 | 23 | $feed = $this->get('eko_feed.feed.manager')->get('article'); 24 | $feed->addFromArray($articles); 25 | 26 | return new Response($feed->render($type)); // or 'atom' 27 | } 28 | } -------------------------------------------------------------------------------- /Controller/Backend/HomepageController.php: -------------------------------------------------------------------------------- 1 | getBlogUser(); 21 | 22 | return $this->render("EDBlogBundle:Homepage:index.html.twig", array()); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /Controller/Frontend/SidebarController.php: -------------------------------------------------------------------------------- 1 | get('app_repository_taxonomy') 13 | ->createQueryBuilder('c') 14 | ->where('c.parent IS NULL') 15 | ->andWhere('c.count > 0') 16 | ->andWhere('c.type = :categoryType') 17 | ->setParameter('categoryType', Taxonomy::TYPE_CATEGORY) 18 | ->getQuery() 19 | ->getResult(); 20 | 21 | $archiveYearsMonths = $this->get('app_repository_article')->getYearsMonthsOfArticles(); 22 | 23 | return $this->render('EDBlogBundle:Frontend/Blog:blog_sidebar.html.twig', array( 24 | 'categories' => $categories, 25 | 'archive' => $archiveYearsMonths 26 | )); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /DependencyInjection/Configuration.php: -------------------------------------------------------------------------------- 1 | root('ed_blog'); 22 | 23 | // Here you should define the parameters that are allowed to 24 | // configure your bundle. See the documentation linked above for 25 | // more information on that topic. 26 | $rootNode 27 | ->children() 28 | ->arrayNode('entities') 29 | ->children() 30 | ->scalarNode('user_model_class')->isRequired()->end() 31 | ->scalarNode('article_class')->isRequired()->end() 32 | ->scalarNode('article_meta_class')->isRequired()->end() 33 | ->scalarNode('blog_term_class')->isRequired()->end() 34 | ->scalarNode('blog_taxonomy_class')->isRequired()->end() 35 | ->scalarNode('blog_taxonomy_relation_class')->isRequired()->end() 36 | ->scalarNode('blog_comment_class')->isRequired()->end() 37 | ->scalarNode('blog_settings_class')->isRequired()->end() 38 | ->end() 39 | ->end() // entities 40 | ->arrayNode('hydrators') 41 | ->addDefaultsIfNotSet() 42 | ->children() 43 | ->scalarNode('settings_hydrator')->defaultValue('\ED\BlogBundle\Hydrators\SettingsHydrator')->end() 44 | ->end() 45 | ->end() //hydrators 46 | ->end() 47 | ; 48 | 49 | return $treeBuilder; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /EDBlogBundle.php: -------------------------------------------------------------------------------- 1 | article = $article; 22 | } 23 | 24 | public function getArticle() 25 | { 26 | return $this->article; 27 | } 28 | } -------------------------------------------------------------------------------- /Event/CommentEvent.php: -------------------------------------------------------------------------------- 1 | comment = $comment; 20 | } 21 | 22 | /** 23 | * @return mixed 24 | */ 25 | public function getComment() 26 | { 27 | return $this->comment; 28 | } 29 | } -------------------------------------------------------------------------------- /Event/MediaArrayEvent.php: -------------------------------------------------------------------------------- 1 | mediaArray = $mediaArray; 21 | } 22 | 23 | /** 24 | * @return ArrayCollection 25 | */ 26 | public function getMedia() 27 | { 28 | return $this->mediaArray; 29 | } 30 | } -------------------------------------------------------------------------------- /Event/TaxonomyArrayEvent.php: -------------------------------------------------------------------------------- 1 | taxonomies = $taxonomies; 20 | } 21 | 22 | /** 23 | * @return array 24 | */ 25 | public function getTaxonomies() 26 | { 27 | return $this->taxonomies; 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /Events/EDBlogEvents.php: -------------------------------------------------------------------------------- 1 | add('media', 'file',array( 19 | 'attr' => array( 20 | 'class' => 'sr-only', 21 | // 'data-href' => $this->generateUrl('ed_blog_admin_article_upload') 22 | ), 23 | 'multiple' => false 24 | )); 25 | } 26 | 27 | public function getName() 28 | { 29 | return "article_excerpt"; 30 | } 31 | 32 | 33 | } -------------------------------------------------------------------------------- /Forms/ArticleMetaType.php: -------------------------------------------------------------------------------- 1 | dataClass = $dataClass; 22 | } 23 | 24 | public function buildForm(FormBuilderInterface $builder, array $options) 25 | { 26 | $builder 27 | ->add('key', 'text', array( 28 | 'label' => 'Meta name:', 29 | 'required' => true, 30 | 'attr' => array( 31 | 'class' => 'form-control form-control--lg margin--halfb', 32 | 'placeholder' => 'Enter name of the meta tag' 33 | ) 34 | )) 35 | ->add('value', 'textarea', array( 36 | 'label' => 'Meta value:', 37 | 'required' => true, 38 | 'attr' => array( 39 | 'class' => 'form-control form-control--lg margin--halfb', 40 | 'rows' => 2, 41 | 'placeholder' => 'Enter value of the meta tag' 42 | ) 43 | )); 44 | } 45 | 46 | /** 47 | * Returns the name of this type. 48 | * 49 | * @return string The name of this type 50 | */ 51 | public function getName() 52 | { 53 | return "article_meta"; 54 | } 55 | 56 | public function setDefaultOptions(OptionsResolverInterface $resolver) 57 | { 58 | $resolver->setDefaults(array( 59 | 'data_class' => $this->dataClass, 60 | )); 61 | } 62 | 63 | } -------------------------------------------------------------------------------- /Forms/ArticlePhotoType.php: -------------------------------------------------------------------------------- 1 | add('media', 'file',array( 19 | 'attr' => array( 20 | 'class' => 'sr-only media-uploader', 21 | // 'data-href' => $this->generateUrl('ed_blog_admin_article_upload') 22 | ), 23 | 'multiple' => true 24 | )); 25 | } 26 | 27 | public function getName() 28 | { 29 | return "article_media"; 30 | } 31 | } -------------------------------------------------------------------------------- /Forms/BlogUserType.php: -------------------------------------------------------------------------------- 1 | blogUserHandler = $blogUserHandler; 24 | } 25 | 26 | 27 | public function buildForm(FormBuilderInterface $builder, array $options) 28 | { 29 | 30 | $builder 31 | ->add('blogDisplayName', 'text', array( 32 | 'label' => 'Display Name:', 33 | 'data' => isset($options['data']['blogDisplayName']) ? $options['data']['blogDisplayName'] : null, 34 | 'attr' => array( 35 | 'class' => 'form-control form-control--lg margin--b', 36 | 'placeholder' => 'Enter blog user name' 37 | ) 38 | )) 39 | ->add('role', 'choice', array( 40 | 'label' => 'Roles?', 41 | 'expanded' => true, 42 | 'choices' => $this->blogUserHandler->getBlogRolesArray(), 43 | 'data' => isset($options['data']['role']) ? $options['data']['role'] : null 44 | )) 45 | ->add('Save', 'submit', array( 46 | 'attr' => array( 47 | 'class' => 'btn btn-md btn-primary btn-wide--xl flright--responsive-mob margin--b' 48 | )) 49 | ); 50 | } 51 | 52 | public function getName() 53 | { 54 | return "edblog_user"; 55 | } 56 | } -------------------------------------------------------------------------------- /Forms/ImportUserType.php: -------------------------------------------------------------------------------- 1 | userClass = $userClass; 26 | $this->entityManager = $entityManager; 27 | $this->blogUserHandler = $blogUserHandler; 28 | } 29 | 30 | public function buildForm(FormBuilderInterface $builder, array $options) 31 | { 32 | $userTransformer = new UserToEmailTransformer( $this->entityManager->getManager(), $this->userClass ); 33 | 34 | $builder 35 | ->add( 36 | $builder->create('user','text', array( 37 | 'required' => true, 38 | 'attr' => array( 39 | "class" => "form-control form-control--lg margin--halfb", 40 | "placeholder" => "Search", 41 | "data-ed-autocomplete" => true 42 | )))->addModelTransformer($userTransformer) 43 | ) 44 | ->add('adminRole', 'choice', array( 45 | 'label' => 'Roles?', 46 | 'expanded' => true, 47 | 'choices' => $this->blogUserHandler->getBlogRolesArray() 48 | )) 49 | ->add('Save', 'submit', array( 50 | 'attr' => array( 51 | 'class' => 'btn btn-md btn-primary btn-wide--xl flright--responsive-mob margin--b' 52 | )) 53 | ); 54 | } 55 | 56 | public function getName() 57 | { 58 | return "edblog_user_import"; 59 | } 60 | } -------------------------------------------------------------------------------- /Forms/MediaInfoType.php: -------------------------------------------------------------------------------- 1 | add('description', 'textarea', array( 15 | 'attr' => array( 16 | 'class' => 'form-control form-control--lg', 17 | 'placeholder' => 'Enter caption', 18 | 'rows' => 2, 19 | ) 20 | )); 21 | } 22 | 23 | public function setDefaultOptions(OptionsResolverInterface $resolver) 24 | { 25 | } 26 | 27 | public function getName() 28 | { 29 | return 'media_info'; 30 | } 31 | } -------------------------------------------------------------------------------- /Forms/TagType.php: -------------------------------------------------------------------------------- 1 | add('term', 'edterm', array( 28 | 'required' => true, 29 | 'label' => 'Title:', 30 | 'attr' => array( 31 | 'class' => 'form-control form-control--lg margin--b', 32 | 'placeholder' => 'Enter tag title' 33 | ) 34 | )) 35 | ->add('description', 'text', array( 36 | 'required' => false, 37 | 'label' => 'Description:', 38 | 'attr' => array( 39 | 'class' => 'form-control form-control--lg margin--b', 40 | 'placeholder' => 'Enter tag description' 41 | ) 42 | )) 43 | ->add('type', 'hidden', array( 44 | 'data' => Taxonomy::TYPE_TAG 45 | )) 46 | ->remove('parent'); 47 | } 48 | 49 | public function getName() 50 | { 51 | return "edtag"; 52 | } 53 | 54 | 55 | } -------------------------------------------------------------------------------- /Forms/TermType.php: -------------------------------------------------------------------------------- 1 | dataClass = $dataClass; 22 | } 23 | 24 | public function buildForm(FormBuilderInterface $builder, array $options) 25 | { 26 | $builder 27 | ->add('title', 'text', array( 28 | 'required' => true, 29 | 'label' => 'Title:', 30 | 'attr' => array( 31 | 'class' => 'form-control form-control--lg margin--b', 32 | 'placeholder' => 'Enter title' 33 | ) 34 | )) 35 | ->add('slug', 'text', array( 36 | 'required' => false, 37 | 'label' => 'Slug:', 38 | 'attr' => array( 39 | 'class' => 'form-control form-control--lg margin--b', 40 | 'placeholder' => 'Slug will be generated automatically from title or you can add it manually' 41 | ) 42 | )) 43 | ; 44 | } 45 | 46 | /** 47 | * Returns the name of this type. 48 | * 49 | * @return string The name of this type 50 | */ 51 | public function getName() 52 | { 53 | return "edterm"; 54 | } 55 | 56 | public function setDefaultOptions(OptionsResolverInterface $resolver) 57 | { 58 | $resolver->setDefaults(array( 59 | 'data_class' => $this->dataClass, 60 | )); 61 | } 62 | 63 | 64 | } -------------------------------------------------------------------------------- /Handler/BlogUserHandler.php: -------------------------------------------------------------------------------- 1 | 'Administrator', 19 | 'ROLE_BLOG_EDITOR' => 'Editor', 20 | 'ROLE_BLOG_AUTHOR' => 'Author', 21 | 'ROLE_BLOG_CONTRIBUTOR' => 'Contributor' 22 | ); 23 | } 24 | 25 | public function getDefaultBlogRole( BlogUserInterface $user) 26 | { 27 | $role = "ROLE_BLOG_CONTRIBUTOR"; 28 | 29 | if($user->hasRole('ROLE_BLOG_ADMIN')) 30 | { 31 | return 'ROLE_BLOG_ADMIN'; 32 | } 33 | elseif($user->hasRole('ROLE_BLOG_EDITOR')) 34 | { 35 | return 'ROLE_BLOG_EDITOR'; 36 | } 37 | elseif($user->hasRole('ROLE_BLOG_AUTHOR')) 38 | { 39 | return 'ROLE_BLOG_AUTHOR'; 40 | } 41 | 42 | return $role; 43 | } 44 | 45 | 46 | public function getDefaultBlogRoleName( BlogUserInterface $user) 47 | { 48 | $role = $this->getDefaultBlogRole($user); 49 | $roleArray = explode('_', $role); 50 | $role = strtolower($roleArray[ count($roleArray) -1 ]); 51 | 52 | return ucfirst($role); 53 | } 54 | 55 | /** 56 | * Revokes all edBlog administration roles 57 | * 58 | * @param $user 59 | * @return mixed 60 | */ 61 | public function revokeBlogRoles(&$user) 62 | { 63 | $user 64 | ->removeRole('ROLE_BLOG_USER') 65 | ->removeRole('ROLE_BLOG_ADMIN') 66 | ->removeRole('ROLE_BLOG_EDITOR') 67 | ->removeRole('ROLE_BLOG_AUTHOR') 68 | ->removeRole('ROLE_BLOG_CONTRIBUTOR'); 69 | 70 | return $user; 71 | } 72 | } -------------------------------------------------------------------------------- /Hydrators/SettingsHydrator.php: -------------------------------------------------------------------------------- 1 | _stmt->fetchAll(PDO::FETCH_ASSOC); 26 | foreach($data as $row) 27 | { 28 | $keys = array_keys($row); 29 | 30 | $result[ $row[ $keys[0] ] ] = $row[ $keys[1] ]; 31 | } 32 | 33 | return $result; 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /Interfaces/Model/ArticleCommenterInterface.php: -------------------------------------------------------------------------------- 1 | doctrine = $doctrine; 27 | $this->galleryManager = $galleryManager; 28 | } 29 | 30 | 31 | public static function getSubscribedEvents() 32 | { 33 | return array( 34 | EDBlogEvents::ED_BLOG_MEDIA_LIBRARY_MEDIA_UPLOADED => "mediaUploaded" 35 | ); 36 | } 37 | 38 | public function mediaUploaded(MediaArrayEvent $event) 39 | { 40 | $em = $this->doctrine->getManager(); 41 | $mediaArray = $event->getMedia(); 42 | $gallery = $this->galleryManager->findOneBy(array("name" => "Media Library")); 43 | 44 | if(!$gallery) 45 | { 46 | $gallery = new Gallery(); 47 | $gallery->setName("Media Library"); 48 | $gallery->setContext('default'); 49 | $gallery->setDefaultFormat('big'); 50 | $gallery->setEnabled(true); 51 | 52 | $em->persist($gallery); 53 | } 54 | 55 | foreach($mediaArray as $media) 56 | { 57 | $galleryHasMedia = new GalleryHasMedia(); 58 | $galleryHasMedia->setMedia($media); 59 | $galleryHasMedia->setGallery($gallery); 60 | $galleryHasMedia->setEnabled(true); 61 | 62 | $em->persist($galleryHasMedia); 63 | } 64 | 65 | $em->flush(); 66 | } 67 | } -------------------------------------------------------------------------------- /Model/Entity/Term.php: -------------------------------------------------------------------------------- 1 | id; 43 | } 44 | 45 | /** 46 | * @param mixed $id 47 | */ 48 | public function setId($id) 49 | { 50 | $this->id = $id; 51 | return $this; 52 | } 53 | 54 | /** 55 | * @return mixed 56 | */ 57 | public function getTitle() 58 | { 59 | return $this->title; 60 | } 61 | 62 | /** 63 | * @param mixed $title 64 | */ 65 | public function setTitle($title) 66 | { 67 | $this->title = $title; 68 | return $this; 69 | } 70 | 71 | /** 72 | * @return mixed 73 | */ 74 | public function getSlug() 75 | { 76 | return $this->slug; 77 | } 78 | 79 | /** 80 | * @param mixed $slug 81 | */ 82 | public function setSlug($slug) 83 | { 84 | $this->slug = $slug; 85 | return $this; 86 | } 87 | 88 | function __toString() 89 | { 90 | return $this->getTitle(); 91 | } 92 | 93 | 94 | } -------------------------------------------------------------------------------- /Model/Repository/BlogSettingsRepository.php: -------------------------------------------------------------------------------- 1 | createQueryBuilder('s') 19 | ->select('s.property') 20 | ->addSelect('s.value') 21 | ->getQuery(); 22 | 23 | return $settings->getResult('SettingsHydrator'); 24 | } 25 | 26 | public function removeAll() 27 | { 28 | $blogSettings = $this->_entityName; 29 | $q = $this->getEntityManager() 30 | ->createQuery("delete from $blogSettings"); 31 | $numDeleted = $q->execute(); 32 | return $numDeleted; 33 | } 34 | } -------------------------------------------------------------------------------- /Resources/doc/index.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/doc/index.rst -------------------------------------------------------------------------------- /Resources/meta/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 EtonDigital 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /Resources/public/config.rb: -------------------------------------------------------------------------------- 1 | # Require any additional compass plugins here. 2 | # require 'sass-media_query_combiner' 3 | 4 | # Set this to the root of your project when deployed: 5 | http_path = "/" 6 | 7 | # Set the images directory relative to your http_path or change 8 | # the location of the images themselves using http_images_path: 9 | http_images_dir = "img" 10 | 11 | # Production Assets URL 12 | # http_images_path = "http://your-url-goes-here/img" 13 | 14 | # Project Assets Location 15 | css_dir = "/" 16 | sass_dir = "scss" 17 | images_dir = "img" 18 | javascripts_dir = "js" 19 | 20 | # To enable relative paths to assets via compass helper functions Uncomment the following line: 21 | # relative_assets = true 22 | 23 | # You can select your preferred output style here (can be overridden via the command line): 24 | # output_style = :expanded or :nested or :compact or :compressed 25 | # output_style = :compressed 26 | output_style = :expanded 27 | 28 | # To disable debugging comments that display the original location of your selectors. Uncomment: 29 | line_comments = false 30 | 31 | # disable asset cache buster 32 | asset_cache_buster do |http_path, real_path| 33 | nil 34 | end 35 | 36 | # For use in chrome dev: 37 | # sass_options = { :debug_info => true } 38 | 39 | # If you prefer the indented syntax, you might want to regenerate this 40 | # project again passing --syntax sass, or you can uncomment this: 41 | # preferred_syntax = :sass 42 | # and then run: 43 | # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Resources/public/css/Jcrop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/css/Jcrop.gif -------------------------------------------------------------------------------- /Resources/public/css/bootstrap-tagsinput.css: -------------------------------------------------------------------------------- 1 | .bootstrap-tagsinput { 2 | background-color: #fff; 3 | border: 1px solid #B9C3CA; 4 | display: block; 5 | padding: 4px 6px; 6 | margin-bottom: 10px; 7 | color: #555; 8 | vertical-align: middle; 9 | max-width: 100%; 10 | line-height: 38px; 11 | cursor: text; 12 | } 13 | .bootstrap-tagsinput .label-info { 14 | background-color: #cfeafb; 15 | color: #303030 !important; 16 | font-size: 14px; 17 | font-weight: 400; 18 | border: solid 1px #a4cfea; 19 | padding: .2em .3em .3em .6em; 20 | } 21 | .bootstrap-tagsinput input { 22 | border: none; 23 | box-shadow: none; 24 | outline: none; 25 | background-color: transparent; 26 | padding: 0; 27 | margin: 0; 28 | width: auto !important; 29 | max-width: inherit; 30 | } 31 | .bootstrap-tagsinput input:focus { 32 | border: none; 33 | box-shadow: none; 34 | } 35 | .bootstrap-tagsinput .tag { 36 | margin-right: 2px; 37 | color: white; 38 | } 39 | .bootstrap-tagsinput .tag [data-role="remove"] { 40 | margin-left: 4px; 41 | cursor: pointer; 42 | color: #82badb; 43 | } 44 | .bootstrap-tagsinput .tag [data-role="remove"]:after { 45 | font-family: FontAwesome; 46 | content: "\f00d"; 47 | padding: 0px 2px; 48 | } 49 | .bootstrap-tagsinput .tag [data-role="remove"]:hover { 50 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 51 | } 52 | .bootstrap-tagsinput .tag [data-role="remove"]:hover:active { 53 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 54 | } 55 | -------------------------------------------------------------------------------- /Resources/public/css/nprogress.css: -------------------------------------------------------------------------------- 1 | /* Make clicks pass-through */ 2 | #nprogress { 3 | pointer-events: none; 4 | } 5 | 6 | #nprogress .bar { 7 | background: #29d; 8 | 9 | position: fixed; 10 | z-index: 1031; 11 | top: 0; 12 | left: 0; 13 | 14 | width: 100%; 15 | height: 2px; 16 | } 17 | 18 | /* Fancy blur effect */ 19 | #nprogress .peg { 20 | display: block; 21 | position: absolute; 22 | right: 0px; 23 | width: 100px; 24 | height: 100%; 25 | box-shadow: 0 0 10px #29d, 0 0 5px #29d; 26 | opacity: 1.0; 27 | 28 | -webkit-transform: rotate(3deg) translate(0px, -4px); 29 | -ms-transform: rotate(3deg) translate(0px, -4px); 30 | transform: rotate(3deg) translate(0px, -4px); 31 | } 32 | 33 | /* Remove these to get rid of the spinner */ 34 | #nprogress .spinner { 35 | display: block; 36 | position: fixed; 37 | z-index: 1031; 38 | top: 15px; 39 | right: 15px; 40 | } 41 | 42 | #nprogress .spinner-icon { 43 | width: 18px; 44 | height: 18px; 45 | box-sizing: border-box; 46 | 47 | border: solid 2px transparent; 48 | border-top-color: #29d; 49 | border-left-color: #29d; 50 | border-radius: 50%; 51 | 52 | -webkit-animation: nprogress-spinner 400ms linear infinite; 53 | animation: nprogress-spinner 400ms linear infinite; 54 | } 55 | 56 | .nprogress-custom-parent { 57 | overflow: hidden; 58 | position: relative; 59 | } 60 | 61 | .nprogress-custom-parent #nprogress .spinner, 62 | .nprogress-custom-parent #nprogress .bar { 63 | position: absolute; 64 | } 65 | 66 | @-webkit-keyframes nprogress-spinner { 67 | 0% { -webkit-transform: rotate(0deg); } 68 | 100% { -webkit-transform: rotate(360deg); } 69 | } 70 | @keyframes nprogress-spinner { 71 | 0% { transform: rotate(0deg); } 72 | 100% { transform: rotate(360deg); } 73 | } 74 | 75 | -------------------------------------------------------------------------------- /Resources/public/css/pnotify.custom.min.css: -------------------------------------------------------------------------------- 1 | .ui-pnotify{top:25px;right:25px;position:absolute;height:auto;z-index:9999}html>body>.ui-pnotify{position:fixed}.ui-pnotify .ui-pnotify-shadow{-webkit-box-shadow:0 2px 10px rgba(50,50,50,.5);-moz-box-shadow:0 2px 10px rgba(50,50,50,.5);box-shadow:0 2px 10px rgba(50,50,50,.5)}.ui-pnotify-container{background-position:0 0;padding:.8em;height:100%;margin:0}.ui-pnotify-sharp{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-pnotify-title{display:block;margin-bottom:.4em;margin-top:0}.ui-pnotify-text{display:block}.ui-pnotify-icon,.ui-pnotify-icon span{display:block;float:left;margin-right:.2em}.ui-pnotify.stack-bottomleft,.ui-pnotify.stack-topleft{left:25px;right:auto}.ui-pnotify.stack-bottomleft,.ui-pnotify.stack-bottomright{bottom:25px;top:auto}.ui-pnotify-closer,.ui-pnotify-sticker{float:right;margin-left:.2em} -------------------------------------------------------------------------------- /Resources/public/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /Resources/public/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /Resources/public/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /Resources/public/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /Resources/public/img/avatar-50x50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/img/avatar-50x50.png -------------------------------------------------------------------------------- /Resources/public/img/avatar-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/img/avatar-50x50@2x.png -------------------------------------------------------------------------------- /Resources/public/img/bg-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/img/bg-select.png -------------------------------------------------------------------------------- /Resources/public/img/bg-select@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/img/bg-select@2x.png -------------------------------------------------------------------------------- /Resources/public/img/svg/image-placeholder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Resources/public/js/ed_autocomplete.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $("[data-ed-autocomplete]").each(function () { 3 | var obj = $(this); 4 | var source = obj.attr('data-source'); 5 | 6 | obj.autocomplete({ 7 | serviceUrl: source, 8 | deferRequestBy: 50, 9 | minChars: 3, 10 | containerClass: 'dropdown-menu' 11 | }); 12 | }); 13 | }); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/langs/readme.md: -------------------------------------------------------------------------------- 1 | This is where language files should be placed. 2 | 3 | Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ 4 | -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/advlist/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("advlist",function(a){function b(a,b){var c=[];return tinymce.each(b.split(/[ ,]/),function(a){c.push({text:a.replace(/\-/g," ").replace(/\b\w/g,function(a){return a.toUpperCase()}),data:"default"==a?"":a})}),c}function c(b,c){a.undoManager.transact(function(){var d,e=a.dom,f=a.selection;d=e.getParent(f.getNode(),"ol,ul"),d&&d.nodeName==b&&c!==!1||a.execCommand("UL"==b?"InsertUnorderedList":"InsertOrderedList"),c=c===!1?g[b]:c,g[b]=c,d=e.getParent(f.getNode(),"ol,ul"),d&&(e.setStyle(d,"listStyleType",c?c:null),d.removeAttribute("data-mce-style")),a.focus()})}function d(b){var c=a.dom.getStyle(a.dom.getParent(a.selection.getNode(),"ol,ul"),"listStyleType")||"";b.control.items().each(function(a){a.active(a.settings.data===c)})}var e,f,g={};e=b("OL",a.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),f=b("UL",a.getParam("advlist_bullet_styles","default,circle,disc,square")),a.addButton("numlist",{type:"splitbutton",tooltip:"Numbered list",menu:e,onshow:d,onselect:function(a){c("OL",a.control.settings.data)},onclick:function(){c("OL",!1)}}),a.addButton("bullist",{type:"splitbutton",tooltip:"Bullet list",menu:f,onshow:d,onselect:function(a){c("UL",a.control.settings.data)},onclick:function(){c("UL",!1)}})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/anchor/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("anchor",function(a){function b(){var b=a.selection.getNode(),c="";"A"==b.tagName&&(c=b.name||b.id||""),a.windowManager.open({title:"Anchor",body:{type:"textbox",name:"name",size:40,label:"Name",value:c},onsubmit:function(b){a.execCommand("mceInsertContent",!1,a.dom.createHTML("a",{id:b.data.name}))}})}a.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:b,stateSelector:"a:not([href])"}),a.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:b})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/autolink/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("autolink",function(a){function b(a){e(a,-1,"(",!0)}function c(a){e(a,0,"",!0)}function d(a){e(a,-1,"",!1)}function e(a,b,c){function d(a,b){if(0>b&&(b=0),3==a.nodeType){var c=a.data.length;b>c&&(b=c)}return b}function e(a,b){1!=a.nodeType||a.hasChildNodes()?g.setStart(a,d(a,b)):g.setStartBefore(a)}function f(a,b){1!=a.nodeType||a.hasChildNodes()?g.setEnd(a,d(a,b)):g.setEndAfter(a)}var g,h,i,j,k,l,m,n,o,p;if(g=a.selection.getRng(!0).cloneRange(),g.startOffset<5){if(n=g.endContainer.previousSibling,!n){if(!g.endContainer.firstChild||!g.endContainer.firstChild.nextSibling)return;n=g.endContainer.firstChild.nextSibling}if(o=n.length,e(n,o),f(n,o),g.endOffset<5)return;h=g.endOffset,j=n}else{if(j=g.endContainer,3!=j.nodeType&&j.firstChild){for(;3!=j.nodeType&&j.firstChild;)j=j.firstChild;3==j.nodeType&&(e(j,0),f(j,j.nodeValue.length))}h=1==g.endOffset?2:g.endOffset-1-b}i=h;do e(j,h>=2?h-2:0),f(j,h>=1?h-1:0),h-=1,p=g.toString();while(" "!=p&&""!==p&&160!=p.charCodeAt(0)&&h-2>=0&&p!=c);g.toString()==c||160==g.toString().charCodeAt(0)?(e(j,h),f(j,i),h+=1):0===g.startOffset?(e(j,0),f(j,i)):(e(j,h),f(j,i)),l=g.toString(),"."==l.charAt(l.length-1)&&f(j,i-1),l=g.toString(),m=l.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i),m&&("www."==m[1]?m[1]="http://www.":/@$/.test(m[1])&&!/^mailto:/.test(m[1])&&(m[1]="mailto:"+m[1]),k=a.selection.getBookmark(),a.selection.setRng(g),a.execCommand("createlink",!1,m[1]+m[2]),a.selection.moveToBookmark(k),a.nodeChanged())}var f;return a.on("keydown",function(b){return 13==b.keyCode?d(a):void 0}),tinymce.Env.ie?void a.on("focus",function(){if(!f){f=!0;try{a.execCommand("AutoUrlDetect",!1,!0)}catch(b){}}}):(a.on("keypress",function(c){return 41==c.keyCode?b(a):void 0}),void a.on("keyup",function(b){return 32==b.keyCode?c(a):void 0}))}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/autoresize/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("autoresize",function(a){function b(){return a.plugins.fullscreen&&a.plugins.fullscreen.isFullscreen()}function c(d){var g,h,i,j,k,l,m,n,o,p,q,r,s=tinymce.DOM;if(h=a.getDoc()){if(i=h.body,j=h.documentElement,k=e.autoresize_min_height,!i||d&&"setcontent"===d.type&&d.initial||b())return void(i&&j&&(i.style.overflowY="auto",j.style.overflowY="auto"));m=a.dom.getStyle(i,"margin-top",!0),n=a.dom.getStyle(i,"margin-bottom",!0),o=a.dom.getStyle(i,"padding-top",!0),p=a.dom.getStyle(i,"padding-bottom",!0),q=a.dom.getStyle(i,"border-top-width",!0),r=a.dom.getStyle(i,"border-bottom-width",!0),l=i.offsetHeight+parseInt(m,10)+parseInt(n,10)+parseInt(o,10)+parseInt(p,10)+parseInt(q,10)+parseInt(r,10),(isNaN(l)||0>=l)&&(l=tinymce.Env.ie?i.scrollHeight:tinymce.Env.webkit&&0===i.clientHeight?0:i.offsetHeight),l>e.autoresize_min_height&&(k=l),e.autoresize_max_height&&l>e.autoresize_max_height?(k=e.autoresize_max_height,i.style.overflowY="auto",j.style.overflowY="auto"):(i.style.overflowY="hidden",j.style.overflowY="hidden",i.scrollTop=0),k!==f&&(g=k-f,s.setStyle(a.iframeElement,"height",k+"px"),f=k,tinymce.isWebKit&&0>g&&c(d))}}function d(a,b,e){setTimeout(function(){c({}),a--?d(a,b,e):e&&e()},b)}var e=a.settings,f=0;a.settings.inline||(e.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight),10),e.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0),10),a.on("init",function(){var b,c;b=a.getParam("autoresize_overflow_padding",1),c=a.getParam("autoresize_bottom_margin",50),b!==!1&&a.dom.setStyles(a.getBody(),{paddingLeft:b,paddingRight:b}),c!==!1&&a.dom.setStyles(a.getBody(),{paddingBottom:c})}),a.on("nodechange setcontent keyup FullscreenStateChanged",c),a.getParam("autoresize_on_init",!0)&&a.on("init",function(){d(20,100,function(){d(5,1e3)})}),a.addCommand("mceAutoResize",c))}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/autosave/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce._beforeUnloadHandler=function(){var a;return tinymce.each(tinymce.editors,function(b){b.plugins.autosave&&b.plugins.autosave.storeDraft(),!a&&b.isDirty()&&b.getParam("autosave_ask_before_unload",!0)&&(a=b.translate("You have unsaved changes are you sure you want to navigate away?"))}),a},tinymce.PluginManager.add("autosave",function(a){function b(a,b){var c={s:1e3,m:6e4};return a=/^(\d+)([ms]?)$/.exec(""+(a||b)),(a[2]?c[a[2]]:1)*parseInt(a,10)}function c(){var a=parseInt(n.getItem(k+"time"),10)||0;return(new Date).getTime()-a>m.autosave_retention?(d(!1),!1):!0}function d(b){n.removeItem(k+"draft"),n.removeItem(k+"time"),b!==!1&&a.fire("RemoveDraft")}function e(){!j()&&a.isDirty()&&(n.setItem(k+"draft",a.getContent({format:"raw",no_events:!0})),n.setItem(k+"time",(new Date).getTime()),a.fire("StoreDraft"))}function f(){c()&&(a.setContent(n.getItem(k+"draft"),{format:"raw"}),a.fire("RestoreDraft"))}function g(){l||(setInterval(function(){a.removed||e()},m.autosave_interval),l=!0)}function h(){var b=this;b.disabled(!c()),a.on("StoreDraft RestoreDraft RemoveDraft",function(){b.disabled(!c())}),g()}function i(){a.undoManager.beforeChange(),f(),d(),a.undoManager.add()}function j(b){var c=a.settings.forced_root_block;return b=tinymce.trim("undefined"==typeof b?a.getBody().innerHTML:b),""===b||new RegExp("^<"+c+"[^>]*>((\xa0| |[ ]|]*>)+?|)|
$","i").test(b)}var k,l,m=a.settings,n=tinymce.util.LocalStorage;k=m.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",k=k.replace(/\{path\}/g,document.location.pathname),k=k.replace(/\{query\}/g,document.location.search),k=k.replace(/\{id\}/g,a.id),m.autosave_interval=b(m.autosave_interval,"30s"),m.autosave_retention=b(m.autosave_retention,"20m"),a.addButton("restoredraft",{title:"Restore last draft",onclick:i,onPostRender:h}),a.addMenuItem("restoredraft",{text:"Restore last draft",onclick:i,onPostRender:h,context:"file"}),a.settings.autosave_restore_when_empty!==!1&&(a.on("init",function(){c()&&j()&&f()}),a.on("saveContent",function(){d()})),window.onbeforeunload=tinymce._beforeUnloadHandler,this.hasDraft=c,this.storeDraft=e,this.restoreDraft=f,this.removeDraft=d,this.isEmpty=j}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/code/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("code",function(a){function b(){var b=a.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:a.getParam("code_dialog_width",600),minHeight:a.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(b){a.focus(),a.undoManager.transact(function(){a.setContent(b.data.code)}),a.selection.setCursorLocation(),a.nodeChanged()}});b.find("#code").value(a.getContent({source_view:!0}))}a.addCommand("mceCodeEditor",b),a.addButton("code",{icon:"code",tooltip:"Source code",onclick:b}),a.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:b})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/colorpicker/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("colorpicker",function(a){function b(b,c){function d(a){var b=new tinymce.util.Color(a),c=b.toRgb();f.fromJSON({r:c.r,g:c.g,b:c.b,hex:b.toHex().substr(1)}),e(b.toHex())}function e(a){f.find("#preview")[0].getEl().style.background=a}var f=a.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:c,onchange:function(){var a=this.rgb();f&&(f.find("#r").value(a.r),f.find("#g").value(a.g),f.find("#b").value(a.b),f.find("#hex").value(this.value().substr(1)),e(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var a,b,c=f.find("colorpicker")[0];return a=this.name(),b=this.value(),"hex"==a?(b="#"+b,d(b),void c.value(b)):(b={r:f.find("#r").value(),g:f.find("#g").value(),b:f.find("#b").value()},c.value(b),void d(b))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){b("#"+this.toJSON().hex)}});d(c)}a.settings.color_picker_callback||(a.settings.color_picker_callback=b)}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/contextmenu/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("contextmenu",function(a){var b,c=a.settings.contextmenu_never_use_native;a.on("contextmenu",function(d){var e,f=a.getDoc();if(!d.ctrlKey||c){if(d.preventDefault(),tinymce.Env.mac&&tinymce.Env.webkit&&2==d.button&&f.caretRangeFromPoint&&a.selection.setRng(f.caretRangeFromPoint(d.x,d.y)),e=a.settings.contextmenu||"link image inserttable | cell row column deletetable",b)b.show();else{var g=[];tinymce.each(e.split(/[ ,]/),function(b){var c=a.menuItems[b];"|"==b&&(c={text:b}),c&&(c.shortcut="",g.push(c))});for(var h=0;h'}),a+=""}),a+=""}var d=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];a.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:c,onclick:function(b){var c=a.dom.getParent(b.target,"a");c&&(a.insertContent(''+c.getAttribute('),this.hide())}},tooltip:"Emoticons"})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/example/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Custom dialog

5 | Input some text: 6 | 7 | 8 | -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/example/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("example",function(a,b){a.addButton("example",{text:"My button",icon:!1,onclick:function(){a.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(b){a.insertContent("Title: "+b.data.title)}})}}),a.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){a.windowManager.open({title:"TinyMCE site",url:b+"/dialog.html",width:600,height:400,buttons:[{text:"Insert",onclick:function(){var b=a.windowManager.getWindows()[0];a.insertContent(b.getContentWindow().document.getElementById("content").value),b.close()}},{text:"Close",onclick:"close"}]})}})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/example_dependency/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("example_dependency",function(){},["example"]); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/fullscreen/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("fullscreen",function(a){function b(){var a,b,c=window,d=document,e=d.body;return e.offsetWidth&&(a=e.offsetWidth,b=e.offsetHeight),c.innerWidth&&c.innerHeight&&(a=c.innerWidth,b=c.innerHeight),{w:a,h:b}}function c(){function c(){j.setStyle(m,"height",b().h-(l.clientHeight-m.clientHeight))}var k,l,m,n,o=document.body,p=document.documentElement;i=!i,l=a.getContainer(),k=l.style,m=a.getContentAreaContainer().firstChild,n=m.style,i?(d=n.width,e=n.height,n.width=n.height="100%",g=k.width,h=k.height,k.width=k.height="",j.addClass(o,"mce-fullscreen"),j.addClass(p,"mce-fullscreen"),j.addClass(l,"mce-fullscreen"),j.bind(window,"resize",c),c(),f=c):(n.width=d,n.height=e,g&&(k.width=g),h&&(k.height=h),j.removeClass(o,"mce-fullscreen"),j.removeClass(p,"mce-fullscreen"),j.removeClass(l,"mce-fullscreen"),j.unbind(window,"resize",f)),a.fire("FullscreenStateChanged",{state:i})}var d,e,f,g,h,i=!1,j=tinymce.DOM;return a.settings.inline?void 0:(a.on("init",function(){a.addShortcut("Meta+Alt+F","",c)}),a.on("remove",function(){f&&j.unbind(window,"resize",f)}),a.addCommand("mceFullScreen",c),a.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Meta+Alt+F",selectable:!0,onClick:c,onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})},context:"view"}),a.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Meta+Alt+F",onClick:c,onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})}}),{isFullscreen:function(){return i}})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("hr",function(a){a.addCommand("InsertHorizontalRule",function(){a.execCommand("mceInsertContent",!1,"
")}),a.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),a.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/importcss/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("importcss",function(a){function b(a){return"string"==typeof a?function(b){return-1!==b.indexOf(a)}:a instanceof RegExp?function(b){return a.test(b)}:a}function c(b,c){function d(a,b){var g,h=a.href;if(h&&c(h,b)){f(a.imports,function(a){d(a,!0)});try{g=a.cssRules||a.rules}catch(i){}f(g,function(a){a.styleSheet?d(a.styleSheet,!0):a.selectorText&&f(a.selectorText.split(","),function(a){e.push(tinymce.trim(a))})})}}var e=[],g={};f(a.contentCSS,function(a){g[a]=!0}),c||(c=function(a,b){return b||g[a]});try{f(b.styleSheets,function(a){d(a)})}catch(h){}return e}function d(b){var c,d=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(b);if(d){var e=d[1],f=d[2].substr(1).split(".").join(" "),g=tinymce.makeMap("a,img");return d[1]?(c={title:b},a.schema.getTextBlockElements()[e]?c.block=e:a.schema.getBlockElements()[e]||g[e.toLowerCase()]?c.selector=e:c.inline=e):d[2]&&(c={inline:"span",title:b.substr(1),classes:f}),a.settings.importcss_merge_classes!==!1?c.classes=f:c.attributes={"class":f},c}}var e=this,f=tinymce.each;a.on("renderFormatsMenu",function(g){var h=a.settings,i={},j=h.importcss_selector_converter||d,k=b(h.importcss_selector_filter),l=g.control;a.settings.importcss_append||l.items().remove();var m=[];tinymce.each(h.importcss_groups,function(a){a=tinymce.extend({},a),a.filter=b(a.filter),m.push(a)}),f(c(g.doc||a.getDoc(),b(h.importcss_file_filter)),function(b){if(-1===b.indexOf(".mce-")&&!i[b]&&(!k||k(b))){var c,d=j.call(e,b);if(d){var f=d.name||tinymce.DOM.uniqueId();if(m)for(var g=0;g'+d+"";var f=a.dom.getParent(a.selection.getStart(),"time");if(f)return void a.dom.setOuterHTML(f,d)}a.insertContent(d)}var d,e,f="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),g="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),h="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),i="January February March April May June July August September October November December".split(" "),j=[];a.addCommand("mceInsertDate",function(){c(a.getParam("insertdatetime_dateformat",a.translate("%Y-%m-%d")))}),a.addCommand("mceInsertTime",function(){c(a.getParam("insertdatetime_timeformat",a.translate("%H:%M:%S")))}),a.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){c(d||e)},menu:j}),tinymce.each(a.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(a){e||(e=a),j.push({text:b(a),onclick:function(){d=a,c(a)}})}),a.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:j,context:"insert"})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/media/moxieplayer.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/plugins/media/moxieplayer.swf -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("nonbreaking",function(a){var b=a.getParam("nonbreaking_force_tab");if(a.addCommand("mceNonBreaking",function(){a.insertContent(a.plugins.visualchars&&a.plugins.visualchars.state?' ':" "),a.dom.setAttrib(a.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),a.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),a.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),b){var c=+b>1?+b:3;a.on("keydown",function(b){if(9==b.keyCode){if(b.shiftKey)return;b.preventDefault();for(var d=0;c>d;d++)a.execCommand("mceNonBreaking")}})}}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/pagebreak/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("pagebreak",function(a){var b="mce-pagebreak",c=a.getParam("pagebreak_separator",""),d=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(a){return"\\"+a}),"gi"),e='';a.addCommand("mcePageBreak",function(){a.insertContent(a.settings.pagebreak_split_block?"

"+e+"

":e)}),a.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),a.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),a.on("ResolveName",function(c){"IMG"==c.target.nodeName&&a.dom.hasClass(c.target,b)&&(c.name="pagebreak")}),a.on("click",function(c){c=c.target,"IMG"===c.nodeName&&a.dom.hasClass(c,b)&&a.selection.select(c)}),a.on("BeforeSetContent",function(a){a.content=a.content.replace(d,e)}),a.on("PreInit",function(){a.serializer.addNodeFilter("img",function(b){for(var d,e,f=b.length;f--;)if(d=b[f],e=d.attr("class"),e&&-1!==e.indexOf("mce-pagebreak")){var g=d.parent;if(a.schema.getBlockElements()[g.name]&&a.settings.pagebreak_split_block){g.type=3,g.value=c,g.raw=!0,d.remove();continue}d.type=3,d.value=c,d.raw=!0}})})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/preview/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("preview",function(a){var b=a.settings,c=!tinymce.Env.ie;a.addCommand("mcePreview",function(){a.windowManager.open({title:"Preview",width:parseInt(a.getParam("plugin_preview_width","650"),10),height:parseInt(a.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var d,e="";e+='',tinymce.each(a.contentCSS,function(b){e+=''});var f=b.body_id||"tinymce";-1!=f.indexOf("=")&&(f=a.getParam("body_id","","hash"),f=f[a.id]||f);var g=b.body_class||"";-1!=g.indexOf("=")&&(g=a.getParam("body_class","","hash"),g=g[a.id]||"");var h=a.settings.directionality?' dir="'+a.settings.directionality+'"':"";if(d=""+e+'"+a.getContent()+"",c)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(d);else{var i=this.getEl("body").firstChild.contentWindow.document;i.open(),i.write(d),i.close()}}})}),a.addButton("preview",{title:"Preview",cmd:"mcePreview"}),a.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("print",function(a){a.addCommand("mcePrint",function(){a.getWin().print()}),a.addButton("print",{title:"Print",cmd:"mcePrint"}),a.addShortcut("Meta+P","","mcePrint"),a.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/responsivefilemanager/img/insertfile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/plugins/responsivefilemanager/img/insertfile.gif -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/responsivefilemanager/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("responsivefilemanager",function(e){function n(t){0===e.settings.external_filemanager_path.toLowerCase().indexOf(t.origin.toLowerCase())&&"responsivefilemanager"===t.data.sender&&(tinymce.activeEditor.insertContent(t.data.html),tinymce.activeEditor.windowManager.close(),window.removeEventListener?window.removeEventListener("message",n,!1):window.detachEvent("onmessage",n))}function t(){var t=window.innerWidth-40,i=window.innerHeight-60;t>1800&&(t=1800),i>1200&&(i=1200);var a=(t-20)%138;if(t=t-a+10,t>600){var a=(t-20)%138;t=t-a+10}e.focus(!0);var s="RESPONSIVE FileManager";"undefined"!=typeof e.settings.filemanager_title&&e.settings.filemanager_title&&(s=e.settings.filemanager_title);var r="key";"undefined"!=typeof e.settings.filemanager_access_key&&e.settings.filemanager_access_key&&(r=e.settings.filemanager_access_key);var o="";"undefined"!=typeof e.settings.filemanager_sort_by&&e.settings.filemanager_sort_by&&(o="&sort_by="+e.settings.filemanager_sort_by);var g="false";"undefined"!=typeof e.settings.filemanager_descending&&e.settings.filemanager_descending&&(g=e.settings.filemanager_descending);var d="";"undefined"!=typeof e.settings.filemanager_subfolder&&e.settings.filemanager_subfolder&&(d="&fldr="+e.settings.filemanager_subfolder);var l="";"undefined"!=typeof e.settings.filemanager_crossdomain&&e.settings.filemanager_crossdomain&&(l="&crossdomain=1",window.addEventListener?window.addEventListener("message",n,!1):window.attachEvent("onmessage",n)),win=e.windowManager.open({title:s,file:e.settings.external_filemanager_path+"dialog.php?type=4&descending="+g+o+d+l+"&lang="+e.settings.language+"&akey="+r,width:t,height:i,inline:1,resizable:!0,maximizable:!0})}e.addButton("responsivefilemanager",{icon:"browse",tooltip:"Insert file",shortcut:"Ctrl+E",onclick:t}),e.addShortcut("Ctrl+E","",t),e.addMenuItem("responsivefilemanager",{icon:"browse",text:"Insert file",shortcut:"Ctrl+E",onclick:t,context:"insert"})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/save/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("save",function(a){function b(){var b;return b=tinymce.DOM.getParent(a.id,"form"),!a.getParam("save_enablewhendirty",!0)||a.isDirty()?(tinymce.triggerSave(),a.getParam("save_onsavecallback")?void(a.execCallback("save_onsavecallback",a)&&(a.startContent=tinymce.trim(a.getContent({format:"raw"})),a.nodeChanged())):void(b?(a.isNotDirty=!0,(!b.onsubmit||b.onsubmit())&&("function"==typeof b.submit?b.submit():a.windowManager.alert("Error: Form submit field collision.")),a.nodeChanged()):a.windowManager.alert("Error: No form element found."))):void 0}function c(){var b=tinymce.trim(a.startContent);return a.getParam("save_oncancelcallback")?void a.execCallback("save_oncancelcallback",a):(a.setContent(b),a.undoManager.clear(),void a.nodeChanged())}function d(){var b=this;a.on("nodeChange",function(){b.disabled(a.getParam("save_enablewhendirty",!0)&&!a.isDirty())})}a.addCommand("mceSave",b),a.addCommand("mceCancel",c),a.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:d}),a.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:d}),a.addShortcut("Meta+S","","mceSave")}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/tabfocus/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("tabfocus",function(a){function b(a){9!==a.keyCode||a.ctrlKey||a.altKey||a.metaKey||a.preventDefault()}function c(b){function c(c){function f(a){return"BODY"===a.nodeName||"hidden"!=a.type&&"none"!=a.style.display&&"hidden"!=a.style.visibility&&f(a.parentNode)}function i(a){return/INPUT|TEXTAREA|BUTTON/.test(a.tagName)&&tinymce.get(b.id)&&-1!=a.tabIndex&&f(a)}if(h=d.select(":input:enabled,*[tabindex]:not(iframe)"),e(h,function(b,c){return b.id==a.id?(g=c,!1):void 0}),c>0){for(j=g+1;j=0;j--)if(i(h[j]))return h[j];return null}var g,h,i,j;if(!(9!==b.keyCode||b.ctrlKey||b.altKey||b.metaKey||b.isDefaultPrevented())&&(i=f(a.getParam("tab_focus",a.getParam("tabfocus_elements",":prev,:next"))),1==i.length&&(i[1]=i[0],i[0]=":prev"),h=b.shiftKey?":prev"==i[0]?c(-1):d.get(i[0]):":next"==i[1]?c(1):d.get(i[1]))){var k=tinymce.get(h.id||h.name);h.id&&k?k.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),h.focus()},10),b.preventDefault()}}var d=tinymce.DOM,e=tinymce.each,f=tinymce.explode;a.on("init",function(){a.inline&&tinymce.DOM.setAttrib(a.getBody(),"tabIndex",null),a.on("keyup",b),tinymce.Env.gecko?a.on("keypress keydown",c):a.on("keydown",c)})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/visualblocks/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("visualblocks",function(a,b){function c(){var b=this;b.active(f),a.on("VisualBlocks",function(){b.active(a.dom.hasClass(a.getBody(),"mce-visualblocks"))})}var d,e,f;window.NodeList&&(a.addCommand("mceVisualBlocks",function(){var c,g=a.dom;d||(d=g.uniqueId(),c=g.create("link",{id:d,rel:"stylesheet",href:b+"/css/visualblocks.css"}),a.getDoc().getElementsByTagName("head")[0].appendChild(c)),a.on("PreviewFormats AfterPreviewFormats",function(b){f&&g.toggleClass(a.getBody(),"mce-visualblocks","afterpreviewformats"==b.type)}),g.toggleClass(a.getBody(),"mce-visualblocks"),f=a.dom.hasClass(a.getBody(),"mce-visualblocks"),e&&e.active(g.hasClass(a.getBody(),"mce-visualblocks")),a.fire("VisualBlocks")}),a.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:c}),a.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:c,selectable:!0,context:"view",prependToContext:!0}),a.on("init",function(){a.settings.visualblocks_default_state&&a.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),a.on("remove",function(){a.dom.removeClass(a.getBody(),"mce-visualblocks")}))}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/visualchars/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("visualchars",function(a){function b(b){function c(a){return''+a+""}function f(){var a,b="";for(a in n)b+=a;return new RegExp("["+b+"]","g")}function g(){var a,b="";for(a in n)b&&(b+=","),b+="span.mce-"+n[a];return b}var h,i,j,k,l,m,n,o,p=a.getBody(),q=a.selection;if(n={"\xa0":"nbsp","\xad":"shy"},d=!d,e.state=d,a.fire("VisualChars",{state:d}),o=f(),b&&(m=q.getBookmark()),d)for(i=[],tinymce.walk(p,function(a){3==a.nodeType&&a.nodeValue&&o.test(a.nodeValue)&&i.push(a)},"childNodes"),j=0;j=0;j--)a.dom.remove(i[j],1);q.moveToBookmark(m)}function c(){var b=this;a.on("VisualChars",function(a){b.active(a.state)})}var d,e=this;a.addCommand("mceVisualChars",b),a.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:c}),a.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:c,selectable:!0,context:"view",prependToContext:!0}),a.on("beforegetcontent",function(a){d&&"raw"!=a.format&&!a.draft&&(d=!0,b(!1))})}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/plugins/wordcount/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("wordcount",function(a){function b(){a.theme.panel.find("#wordcount").text(["Words: {0}",e.getCount()])}var c,d,e=this;c=a.getParam("wordcount_countregex",/[\w\u2019\x27\-\u00C0-\u1FFF]+/g),d=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),a.on("init",function(){var c=a.theme.panel&&a.theme.panel.find("#statusbar")[0];c&&window.setTimeout(function(){c.insert({type:"label",name:"wordcount",text:["Words: {0}",e.getCount()],classes:"wordcount",disabled:a.settings.readonly},0),a.on("setcontent beforeaddundo",b),a.on("keyup",function(a){32==a.keyCode&&b()})},0)}),e.getCount=function(){var b=a.getContent({format:"raw"}),e=0;if(b){b=b.replace(/\.\.\./g," "),b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),b=b.replace(/(\w+)(&#?[a-z0-9]+;)+(\w+)/i,"$1$3").replace(/&.+?;/g," "),b=b.replace(d,"");var f=b.match(c);f&&(e=f.length)}return e}}); -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/content.inline.min.css: -------------------------------------------------------------------------------- 1 | .mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid red;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid green;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333} -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/content.min.css: -------------------------------------------------------------------------------- 1 | body{background-color:#FFF;color:#000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid red;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid green;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333} -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/fonts/tinymce.eot -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/fonts/tinymce.ttf -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/fonts/tinymce.woff -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/img/anchor.gif -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/img/loader.gif -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/img/object.gif -------------------------------------------------------------------------------- /Resources/public/js/tinymce/skins/lightgray/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/js/tinymce/skins/lightgray/img/trans.gif -------------------------------------------------------------------------------- /Resources/public/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Procurious", 3 | "version": "1.0.0", 4 | "description": "hello!", 5 | "main": "gulpfile.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Dusan Stojanovic, dusan@etondigital.com", 10 | "license": "ISC", 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/" 14 | }, 15 | "devDependencies": { 16 | "del": "^1.1.0", 17 | "gulp": "^3.8.10", 18 | "gulp-autoprefixer": "^2.0.0", 19 | "gulp-bless": "^3.0.1", 20 | "gulp-cache": "^0.2.4", 21 | "gulp-compass": "^2.0.3", 22 | "gulp-concat": "^2.4.2", 23 | "gulp-csso": "^0.2.9", 24 | "gulp-imagemin": "^2.0.0", 25 | "gulp-jshint": "^1.9.0", 26 | "gulp-livereload": "^3.0.2", 27 | "gulp-notify": "^2.1.0", 28 | "gulp-plumber": "^0.6.6", 29 | "gulp-rename": "^1.2.0", 30 | "gulp-uglify": "^1.0.2", 31 | "gulp-uncss": "^1.0.1" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Resources/public/scss/_components.articles.scss: -------------------------------------------------------------------------------- 1 | .c-article { 2 | background-color: white; 3 | padding: 20px; 4 | margin-top: 20px; 5 | &:not(:first-child) { margin-top: 30px; } 6 | &__full { 7 | margin-left: -20px; 8 | margin-right: -20px; 9 | } 10 | } 11 | 12 | 13 | .img-up { 14 | position: relative; 15 | width: 88px; 16 | height: 66px; 17 | img { 18 | max-height: 100%; 19 | width: auto; 20 | margin: 0 auto; 21 | } 22 | } -------------------------------------------------------------------------------- /Resources/public/scss/_components.discussions.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Holycode-Products/EDBlogBundle/bce97b1991b6201733aa7459712c840d92a96ccc/Resources/public/scss/_components.discussions.scss -------------------------------------------------------------------------------- /Resources/public/scss/_components.dropdowns.scss: -------------------------------------------------------------------------------- 1 | // Dropdown keep open and style checkboxes 2 | .keep-open { 3 | position: relative; 4 | .dropdown-toggler { 5 | &:hover { 6 | cursor: pointer; 7 | } 8 | } 9 | .dropdown-toggled { 10 | display: block; 11 | margin-top: -1px; 12 | border: solid 1px $light-grey; 13 | @include box-shadow(0 0 1px rgba(0,0,0,.175)); 14 | @include border-radius(0); 15 | max-height: 240px; 16 | overflow: auto; 17 | } 18 | &.wide { 19 | .dropdown-toggled { 20 | width: 100%; 21 | } 22 | } 23 | label { 24 | width: 100%; 25 | margin-bottom: 0; 26 | color: #030303; 27 | font-weight: 400; 28 | padding: 4px 15px 4px 33px !important; 29 | white-space: normal !important; 30 | text-indent: -18px; 31 | &:hover { 32 | cursor: pointer; 33 | background-color: $blue-btn !important; 34 | } 35 | &.level { 36 | &--1 {padding-left: 51px !important;} 37 | &--2 {padding-left: 69px !important;} 38 | &--3 {padding-left: 87px !important;} 39 | &--4 {padding-left: 105px !important;} 40 | } 41 | } 42 | input { 43 | cursor: pointer; 44 | } 45 | .select-mask { 46 | position: absolute; 47 | width: 100%; 48 | height: 100%; 49 | background: white; 50 | filter: alpha(opacity=0); 51 | opacity: 0; 52 | } 53 | .chck-child { 54 | label { 55 | padding-left: 51px !important; 56 | } 57 | } 58 | select.form-control { 59 | height: 48px; 60 | } 61 | } 62 | .autocomplete-suggestion{ 63 | padding-left: 10px; 64 | cursor: pointer; 65 | } -------------------------------------------------------------------------------- /Resources/public/scss/_components.forms.scss: -------------------------------------------------------------------------------- 1 | // Login form 2 | .login-form { 3 | @include bp(lap) { 4 | width: 420px; 5 | margin: auto; 6 | } 7 | .form-control { 8 | font-size: 14px; 9 | } 10 | .form-control:-moz-placeholder { 11 | font-size: 14px; 12 | } 13 | .form-control::-moz-placeholder { 14 | font-size: 14px; 15 | } 16 | .form-control:-ms-input-placeholder { 17 | font-size: 14px; 18 | } 19 | .form-control::-webkit-input-placeholder { 20 | font-size: 14px; 21 | } 22 | } -------------------------------------------------------------------------------- /Resources/public/scss/_components.other.scss: -------------------------------------------------------------------------------- 1 | // Used for insert media 2 | .b-upload { 3 | cursor: pointer; 4 | background: $blue-btn; 5 | border: solid 1px #539bc6; 6 | color: white; 7 | padding: 10px 0 15px; 8 | margin-bottom: 30px; 9 | transition-property: background; 10 | transition-duration: 0.3s; 11 | &:hover { 12 | background: #55ade3; 13 | } 14 | .fa-camera { 15 | position: relative; 16 | top: 4px; 17 | } 18 | .wording div { 19 | text-align: center; 20 | @include bp(tab) { 21 | text-align: left; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Resources/public/scss/_components.sidebar.scss: -------------------------------------------------------------------------------- 1 | .c-sidebar { 2 | margin-top: 15px; 3 | &:not(:first-child) { margin-top: 37px; } 4 | &__title { 5 | font-size: 13px; 6 | font-weight: bold; 7 | text-transform: uppercase; 8 | color: #93a0a8; 9 | margin-bottom: 15px; 10 | } 11 | &__list { 12 | a:not(.btn) { 13 | display: block; 14 | color: $app-blue; 15 | margin-bottom: 6px; 16 | margin-left: 15px; 17 | &.leader { 18 | font-size: 15px; 19 | font-weight: bold; 20 | margin-left: 0; 21 | } 22 | &.hover, &.active { 23 | color: black; 24 | } 25 | } 26 | &__el1 { 27 | margin-bottom: 8px; 28 | margin-right: 5px; 29 | float: left; 30 | @include bp(tab) { 31 | float: none; 32 | } 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Resources/public/scss/_components.togglers.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // used everywhere 3 | .toggle--close { 4 | position: absolute; 5 | top: 5px; 6 | right: 9px; 7 | color: #999; 8 | &:hover {color: #333;} 9 | } 10 | // EB 11 | .toggle--remove { 12 | position: absolute; 13 | width: 20px; 14 | height: 20px; 15 | background: $blog-bg-grey; 16 | color: white; 17 | border-radius: 100%; 18 | line-height: 20px; 19 | text-align: center; 20 | top: 3px; 21 | right: 3px; 22 | &:hover, &:active, &:focus {color: white;} 23 | } 24 | .toggle--selected { 25 | display: none; 26 | z-index: 10; 27 | position: absolute; 28 | width: 25px; 29 | height: 25px; 30 | background: $blue-btn; 31 | color: white; 32 | line-height: 25px; 33 | text-align: center; 34 | top: -2px; 35 | left: -2px; 36 | &:hover, &:active, &:focus {color: white;} 37 | } 38 | -------------------------------------------------------------------------------- /Resources/public/scss/_elements.headings.scss: -------------------------------------------------------------------------------- 1 | // Headings 2 | // -------------- 3 | #{headings()} { 4 | @extend .por; 5 | margin: 0 0 $base-line-height; 6 | letter-spacing: -.05em; 7 | font-weight: normal; 8 | font-family: $sans; 9 | line-height: 1.2; 10 | line-height: normal; 11 | } 12 | h1 {font-size: 2.3em;} 13 | h2 {font-size: 2.2em;} 14 | h3 {font-size: 1.8em;} 15 | h4 {font-size: 1.5em;} 16 | h5 {font-size: 1.2em;} 17 | h6 {font-size: 1em;} 18 | -------------------------------------------------------------------------------- /Resources/public/scss/_elements.links.scss: -------------------------------------------------------------------------------- 1 | // Links 2 | // -------------- 3 | a { 4 | @include transition(0.1s); 5 | text-decoration: none; 6 | color: $blog-blue; 7 | } 8 | a { 9 | &:hover, 10 | &:active { 11 | color: #000; 12 | text-decoration: none; 13 | } 14 | &:focus {outline: 0;} 15 | } 16 | a:hover, 17 | a:focus { 18 | color: #000; 19 | text-decoration: none; 20 | } 21 | a:focus { 22 | outline: 0; 23 | outline: none; 24 | } -------------------------------------------------------------------------------- /Resources/public/scss/_elements.lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | // -------------- 3 | ul, ol, dl { 4 | margin: 0 0 $base-line-height; 5 | padding: 0; 6 | } 7 | ul {list-style: disc outside;} 8 | ol {list-style: decimal outside;} 9 | ul ul, ul ol, ol ul, ol ol { 10 | margin: 0; 11 | } 12 | li, dd { 13 | margin-left: $base-line-height; 14 | line-height: 1.5; 15 | &[class*="col-"] { 16 | list-style: none; 17 | margin-left: 0; 18 | } 19 | } 20 | li ul, li ol {font-size: 1em;} 21 | nav { 22 | ul, ol {list-style: none outside;} 23 | } 24 | nav li { 25 | margin: 0; 26 | padding: 0; 27 | display: inline; 28 | } 29 | dt { 30 | font-weight: bold; 31 | margin-top: $base-line-height/2; 32 | &:first-child {margin-top: 0;} 33 | } 34 | -------------------------------------------------------------------------------- /Resources/public/scss/_elements.other.scss: -------------------------------------------------------------------------------- 1 | // Other 2 | // -------------- 3 | 4 | p { 5 | margin: 0 0 $base-line-height; 6 | line-height: 1.5; 7 | .center & { 8 | text-align: center; 9 | } 10 | .aright & { 11 | text-align: right; 12 | } 13 | } 14 | 15 | hr { 16 | clear: both; 17 | overflow: hidden; 18 | margin: ceil($base-line-height/2) 0; 19 | height: 1px; 20 | border: 0; 21 | background-color: darken($light-grey, 10%); 22 | &.offscreen { 23 | margin-left: -3000px !important; 24 | margin-right: -3000px !important; 25 | } 26 | } 27 | 28 | // dark text link, used for Join link on login form 29 | a.text--dark { 30 | &:hover { 31 | border-bottom: 1px solid rgba(#000, .25); 32 | } 33 | } 34 | 35 | // Simulate * 36 | label.required:after { 37 | content: '*'; 38 | font-size: 11px; 39 | top: -5px; 40 | left: 4px; 41 | position: relative; 42 | } 43 | .no-after { 44 | label.required:after { 45 | content: ''; 46 | } 47 | label { 48 | display: block; 49 | } 50 | input { 51 | float: left; 52 | margin-right: 10px; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Resources/public/scss/_generic.normalize.scss: -------------------------------------------------------------------------------- 1 | html { 2 | background-color: $brand-color; 3 | &.log-in {background-color: $brand-color;} 4 | } 5 | body { 6 | background: transparent none; 7 | color: $dark-grey; 8 | text-align: left; 9 | font-family: $sans; 10 | } 11 | 12 | // Sticky footer 13 | @include bp(tab) { 14 | html, body { 15 | height: 100%; 16 | } 17 | .wrap { 18 | &--app { 19 | min-height: 100%; 20 | /* equal to footer height */ 21 | margin-bottom: -73px; /* 43 + 30 */ 22 | } 23 | } 24 | .wrap:after { 25 | content: ""; 26 | display: block; 27 | } 28 | } 29 | 30 | select { 31 | padding-left: 6px !important; 32 | } -------------------------------------------------------------------------------- /Resources/public/scss/_generic.reset.scss: -------------------------------------------------------------------------------- 1 | // =Additional reset styles and html elements defaults 2 | // =================================================== 3 | html { 4 | box-sizing: border-box; 5 | } 6 | *, *:before, *:after { 7 | box-sizing: inherit; 8 | } 9 | 10 | html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video {text-align: left;} 11 | textarea {resize: vertical;} 12 | code { 13 | line-height: 1; 14 | font-family: Monaco, Consolas, "Bitstream Vera Sans Mono", "Andale Mono", "DejaVu Sans Mono", "Lucida Console", monospace; 15 | font-size: 0.9em; 16 | } 17 | 18 | // -------------- 19 | img { 20 | display: inline-block; 21 | max-width: 100%; 22 | height: auto; 23 | border: 0; 24 | vertical-align: middle; 25 | font-style: italic; 26 | } 27 | 28 | // Fix for stretched svg files in IE 29 | // img[src*=".svg"] { 30 | // width: 100%; 31 | // } 32 | 33 | figure > img {display: block;} 34 | // -------------- 35 | textarea:active, 36 | textarea:focus { 37 | cursor: text; 38 | outline: none; 39 | } 40 | 41 | abbr[title],dfn[title] {cursor: help;} 42 | u,ins {text-decoration: none;} 43 | 44 | div { 45 | word-break: break-word; 46 | word-wrap: break-word; 47 | } 48 | -------------------------------------------------------------------------------- /Resources/public/scss/_objects.footers.scss: -------------------------------------------------------------------------------- 1 | // Footer 2 | #push { 3 | height: 73px; /* 43 + 30 */ 4 | } 5 | .footer { 6 | border-top: solid 1px $light-grey; 7 | padding: 12px; 8 | height: 43px; 9 | z-index: 1; 10 | position: relative; 11 | margin-top: 30px; 12 | } 13 | -------------------------------------------------------------------------------- /Resources/public/scss/_objects.headers.scss: -------------------------------------------------------------------------------- 1 | // When there's just big logo (some simple pages) 2 | .header--simple { 3 | padding: 0; 4 | background-color: transparent; 5 | text-align: center; 6 | } 7 | 8 | // Roundtable dashboard header 9 | .header--dashboard { 10 | overflow: hidden; 11 | background: #000; 12 | padding: 8px 15px; 13 | a { 14 | @extend .text--mini; 15 | line-height: 25px; 16 | &:hover {color: #fff;} 17 | } 18 | } 19 | 20 | // EdBlog application header 21 | .header--app { 22 | overflow: hidden; 23 | background: white; 24 | padding: 8px 15px; 25 | border-bottom: solid 1px #cccfd1; 26 | a { 27 | font-size: 13px; 28 | text-transform: uppercase; 29 | line-height: 25px; 30 | color: $app-blue; 31 | font-weight: bold; 32 | @include bp(tab) { 33 | margin-left: 20px; 34 | } 35 | &:hover, &.on, &.active {color: #000;} 36 | } 37 | img { 38 | width: 84px; 39 | height: 28px; 40 | } 41 | &.small-res { 42 | padding: 0; 43 | a { 44 | display: block; 45 | padding: 8px 15px; 46 | border-top: solid 1px #cccfd1; 47 | } 48 | } 49 | } 50 | 51 | // Logo 52 | .logo { 53 | display: inline-block; 54 | margin: 12px 0 14px 15px; 55 | float: left; 56 | // for login/register pages: 57 | .header--simple & { 58 | float: none; 59 | margin: 64px 0 20px; 60 | } 61 | // Roundtable admin dashboard logo 62 | .header--dashboard &, .header--app & { 63 | margin: 0; 64 | color: white; 65 | text-transform: uppercase; 66 | font-weight: bold; 67 | font-size: 13px; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Resources/public/scss/_objects.wrappers.scss: -------------------------------------------------------------------------------- 1 | // Wrapper 2 | .wrap { 3 | overflow: hidden; 4 | position: relative; 5 | padding: 0; 6 | background: $brand-color; 7 | 8 | // lightest grey wrap 9 | &--lightest { 10 | background: $lightest-grey; 11 | } 12 | } 13 | 14 | // Responsive (width and height) iframe 15 | .video-wrapper { 16 | position: relative; 17 | // Variant 1 is with padding given here (always the same), and variant 2 is using dynamic value from wrapVideo() function 18 | padding-bottom: 56.25%; 19 | height: 0; 20 | overflow: hidden; 21 | iframe { 22 | position: absolute; 23 | top: 0; 24 | left: 0; 25 | width: 100%; 26 | height: 100%; 27 | } 28 | } -------------------------------------------------------------------------------- /Resources/public/scss/_settings.all.scss: -------------------------------------------------------------------------------- 1 | // Sizes 2 | //============================================================ 3 | 4 | $base-font-size : 13px; 5 | $base-line-height : 20px; 6 | $line-height-ratio : $base-line-height / $base-font-size; 7 | $gutter : 30px; 8 | $border-radius : 2px; 9 | 10 | // UI color scheme 11 | //============================================================ 12 | // Brand color 13 | $brand-color : #e0e3e5; 14 | 15 | // UI colors 16 | $dark-grey : #333; 17 | $light-grey : #d0d3d5; 18 | $lightest-grey : #f5f5f7; 19 | 20 | //EDBlog style 21 | $blog-blue : #51a0d0; 22 | $blog-bg-grey : #4a4b4b; 23 | $app-blue : #36a9ed; 24 | $app-grey : #727679; 25 | $app-light-grey : #737373; 26 | $c-grey : #191919; 27 | $color-placeholder : #969696; 28 | 29 | // Usual Colors 30 | $blue : #3289cd; 31 | $blue-light : #85A1B3; 32 | $blue-greyish : #B9C3CA; 33 | $blue-btn : #6fbae7; 34 | 35 | // Font stacks 36 | //============================================================ 37 | $sans : "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; 38 | -------------------------------------------------------------------------------- /Resources/public/scss/_tools.mixins.scss: -------------------------------------------------------------------------------- 1 | // Breakpoints Mixin 2 | // THIS MIXIN WORKS ONLY WITH LATEST SASS BETA (at the moment: 06/10/13 01:37:34) 3 | // usage: @include bp(tab) {...} 4 | //------------------------------------------------------------ 5 | @mixin bp($point) { 6 | // Small devices (tablets, 768px and up) 7 | @if $point == tab { 8 | @media only screen and (min-width: 768px) { @content; } 9 | } 10 | // Medium devices (desktops, 992px and up) 11 | @if $point == lap { 12 | @media only screen and (min-width: 992px) { @content; } 13 | } 14 | // Large devices (large desktops, 1200px and up) 15 | @if $point == desk { 16 | @media only screen and (min-width: 1200px) { @content; } 17 | } 18 | // Larger devices (larger desktops, 1280px and up) 19 | @if $point == deskplus { 20 | @media only screen and (min-width: 1280px) { @content; } 21 | } 22 | } 23 | 24 | // vertical and horizontal alignment of absolutely positioned element inside relative element 25 | // this method can cause elements to be blurry due to the element being placed on a 'half pixel'. A solution for this is to set its parent element to preserve-3d 26 | // abs-alligned automatically gets width of 50% (centered, with 25% for both sides), so for particular cases this should be overrided 27 | // usage: @include abs-parent; *recommended 28 | // usage: @include abs-aligned; 29 | //============================================================ 30 | @mixin abs-parent { 31 | -webkit-transform-style: preserve-3d; 32 | -moz-transform-style: preserve-3d; 33 | -ms-transform-style: preserve-3d; 34 | transform-style: preserve-3d; 35 | } 36 | @mixin abs-aligned { 37 | position: absolute; 38 | top: 50%; 39 | left: 50%; 40 | -webkit-transform: translate(-50%,-50%); 41 | -moz-transform: translate(-50%,-50%); 42 | -ms-transform: translate(-50%,-50%); 43 | transform: translate(-50%,-50%); 44 | } -------------------------------------------------------------------------------- /Resources/public/scss/_trumps.colors.scss: -------------------------------------------------------------------------------- 1 | // Color classes 2 | // ====================================================== 3 | 4 | // BGs 5 | .bg--transp {background: transparent none !important;} 6 | .bgblack--p02 {background: rgba(#000, .02) !important;} 7 | .bgblack--p05 {background: rgba(#000, .05) !important;} 8 | .bgblack--p10 {background: rgba(#000, .1) !important;} 9 | .bgwhite {background: #fff !important;} 10 | .bg--lightgrey {background: $lightest-grey;} 11 | .bg--imgnone {background-image: none !important;} 12 | 13 | // Text colors 14 | .white { color: white !important; } 15 | .black { color: black !important; } 16 | .dark-grey { color: $dark-grey !important; } 17 | .app-blue { color: $app-blue !important; } 18 | .app-grey { color: $app-grey !important; } 19 | .app-light-grey { color: $app-light-grey !important; } 20 | .c-grey { color: $c-grey !important; } 21 | .color-placeholder { color: $color-placeholder !important; } 22 | .text--blue-light {color: $blue-light !important;} 23 | -------------------------------------------------------------------------------- /Resources/public/scss/_trumps.displays.scss: -------------------------------------------------------------------------------- 1 | // Display and Visiability 2 | // ======================================================// 3 | 4 | .hide {display: none !important;} 5 | .invisible {visibility: hidden !important;} 6 | .destroy {display: none !important; visibility: hidden !important;} 7 | 8 | // display 9 | .d--b {display: block !important;} 10 | .d--i {display: inline !important;} 11 | .d--ib {display: inline-block !important;} 12 | .d--t {display: table !important; width: 100% !important; table-layout: fixed !important;} 13 | .d--tc {display: table-cell !important; vertical-align: middle !important;} 14 | .d--tr {display: table-row !important;} 15 | // display responsive 16 | .d--ib--b { 17 | display: inline-block; 18 | @include bp(tab) { 19 | display: block; 20 | } 21 | } 22 | 23 | // muted 24 | .muted--total {opacity: 0 !important;} 25 | .muted {opacity: .6 !important;} 26 | .mutedmore {opacity: .3 !important;} 27 | 28 | // Visibility 29 | .visible--tab { 30 | display: none; 31 | @include bp(tab) {display: block;} 32 | } 33 | .visible--lap { 34 | display: none; 35 | @include bp(lap) {display: block;} 36 | } 37 | .visible--desk { 38 | display: none; 39 | @include bp(desk) {display: block;} 40 | } 41 | .invisible--tab { 42 | display: block; 43 | @include bp(tab) {display: none;} 44 | } 45 | .invisible--lap { 46 | display: block; 47 | @include bp(lap) {display: none;} 48 | } 49 | .invisible--desk { 50 | display: block; 51 | @include bp(desk) {display: none;} 52 | } 53 | 54 | // overflow-hidden, overflow visible 55 | .ovh {overflow: hidden !important;} 56 | .ovv {overflow: visible !important;} 57 | .vh {visibility: hidden !important;} 58 | .vv {visibility: visible !important;} 59 | 60 | // Vertical align in table style 61 | .tabled { 62 | display: table; 63 | width: 100%; 64 | height: 100%; 65 | .table-cell { 66 | display: table-cell; 67 | vertical-align: middle; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Resources/public/scss/_trumps.floats.scss: -------------------------------------------------------------------------------- 1 | // Floats 2 | // ======================================================// 3 | 4 | .clear {clear: both !important;} 5 | .flleft {float: left !important;} 6 | .flright {float: right !important;} 7 | .flright--responsive-mob { 8 | @include bp(tab) { 9 | float: right !important; 10 | } 11 | } 12 | 13 | // clearfix 14 | .clearfix {@include clearfix;} 15 | // clearfix overflow visible 16 | .cfov { 17 | &:before, 18 | &:after {content: " "; display: table;} 19 | &:after {clear: both;} 20 | & {*zoom: 1;} 21 | } 22 | -------------------------------------------------------------------------------- /Resources/public/scss/_trumps.lineheights.scss: -------------------------------------------------------------------------------- 1 | // Line heights 2 | // ======================================================// 3 | .lh1 {line-height: 1 !important;} 4 | .lh2 {line-height: 1.9 !important;} 5 | .lh30 {line-height: 30px !important;} 6 | .lh32 {line-height: 32px !important;} 7 | -------------------------------------------------------------------------------- /Resources/public/scss/_trumps.others.scss: -------------------------------------------------------------------------------- 1 | // Other helper classes 2 | // ====================================================== 3 | 4 | // Rotate 5 | .rotate90 { 6 | -webkit-transform: rotate(90deg); 7 | -moz-transform: rotate(90deg); 8 | -ms-transform: rotate(90deg); 9 | -o-transform: rotate(90deg); 10 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); 11 | } 12 | 13 | // Togglers 14 | .js-toggler { 15 | &.on { 16 | i { 17 | @extend .rotate90; 18 | } 19 | } 20 | } 21 | .toggled { display: none; } 22 | 23 | 24 | // no animation flicker in webkit 25 | %noflicker, .noflicker { 26 | @include backface-visibility(hidden); 27 | @include perspective(1000); 28 | @include translateZ(0); 29 | } 30 | 31 | // shadowed box 32 | // used in message header, discussion header... 33 | .box-shadow { 34 | @extend .ovh; 35 | @extend .margin--reset; 36 | @extend .por; 37 | @include box-shadow(0 0 15px rgba(#000, .25)); 38 | background: #fff; 39 | } 40 | 41 | // Pointer 42 | .pointer {cursor: pointer !important;} 43 | .cursor-default {cursor: default !important;} 44 | -------------------------------------------------------------------------------- /Resources/public/scss/_trumps.positions.scss: -------------------------------------------------------------------------------- 1 | // Positions 2 | // ======================================================// 3 | 4 | .por {position: relative !important;} 5 | .poa {position: absolute !important;} 6 | .poa--t20 {top: 20px;} 7 | .poa--r20 {right: 20px;} 8 | 9 | // clicky 10 | .clicky {position: relative !important; top: 1px !important;} 11 | 12 | // abs-aligned 13 | .abs-aligned {@include abs-aligned;} 14 | 15 | // overlay 16 | .overlay { 17 | position : absolute; 18 | top : 0; 19 | left : 0; 20 | bottom : 0; 21 | right : 0; 22 | width : 100%; 23 | height : 100%; 24 | } 25 | -------------------------------------------------------------------------------- /Resources/public/scss/_trumps.widths-borders.scss: -------------------------------------------------------------------------------- 1 | // Widths and borders 2 | // ======================================================// 3 | 4 | // widths in ems 5 | .width--1em {width: 1em; text-align: center;} 6 | 7 | // Img 8 | .img--auto { 9 | width: auto; 10 | height: auto; 11 | } 12 | 13 | // Borders 14 | .brdr--0 {border: 0 !important} 15 | // rounded 16 | .rounded {@include border-radius($border-radius);} 17 | // circle 18 | .circle {@include border-radius(50%);} 19 | -------------------------------------------------------------------------------- /Resources/public/scss/main.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | //---------------- 4 | @import "compass"; 5 | //---------------- 6 | 7 | @import "settings.all"; 8 | 9 | @import "tools.mixins"; 10 | 11 | @import "generic.reset"; 12 | @import "generic.normalize"; 13 | 14 | @import "elements.headings"; 15 | @import "elements.links"; 16 | @import "elements.lists"; 17 | @import "elements.other"; 18 | @import "elements.tables"; 19 | 20 | @import "objects.footers"; 21 | @import "objects.headers"; 22 | @import "objects.wrappers"; 23 | 24 | @import "components.articles"; 25 | @import "components.dashboard"; 26 | @import "components.discussions"; 27 | @import "components.dropdowns"; 28 | @import "components.forms"; 29 | @import "components.other"; 30 | @import "components.pagination"; 31 | @import "components.phototiles"; 32 | @import "components.sidebar"; 33 | @import "components.togglers"; 34 | 35 | @import "trumps.colors"; 36 | @import "trumps.displays"; 37 | @import "trumps.dividers"; 38 | @import "trumps.floats"; 39 | @import "trumps.lineheights"; 40 | @import "trumps.others"; 41 | @import "trumps.positions"; 42 | @import "trumps.texts"; 43 | @import "trumps.widths-borders"; 44 | 45 | @import "vendor/bootstrap-override"; 46 | @import "vendor/pnotify-override"; 47 | @import "vendor/tinymce-override"; 48 | -------------------------------------------------------------------------------- /Resources/public/scss/vendor/_pnotify-override.scss: -------------------------------------------------------------------------------- 1 | .ui-pnotify-title { 2 | line-height: 17px; 3 | display: inline-block; 4 | } 5 | 6 | .ui-pnotify-closer, .ui-pnotify-sticker { 7 | position: relative; 8 | z-index: 10; 9 | } -------------------------------------------------------------------------------- /Resources/public/scss/vendor/_tinymce-override.scss: -------------------------------------------------------------------------------- 1 | // Override Tinymce style 2 | .mce-container, .mce-container-body, .mce-menu { 3 | background: #f1f4f6 !important; 4 | border-color: #bcc2c6 !important; 5 | @include border-radius(0 !important); 6 | .mce-btn { 7 | border: 0 !important; 8 | box-shadow: none !important; 9 | &:hover { 10 | background: none !important; 11 | } 12 | button { 13 | background: #f1f4f6 !important; 14 | opacity: 1 !important; 15 | border: solid 1px transparent !important; 16 | @include border-radius(3px !important); 17 | &:hover { 18 | border: solid 1px #bcc2c6 !important; 19 | } 20 | i { 21 | text-shadow: none !important; 22 | } 23 | } 24 | &.mce-active { 25 | button { 26 | border: solid 1px #bcc2c6 !important; 27 | } 28 | } 29 | } 30 | .mce-menu-item { 31 | &:hover { 32 | background: #6fbae7; 33 | color: white; 34 | } 35 | } 36 | } 37 | .mce-panel { 38 | background-image: none !important; 39 | } 40 | .mce-foot { 41 | .mce-btn.mce-primary.mce-first { 42 | button { 43 | background: $blue-btn !important; 44 | color: white; 45 | @include border-radius(2px !important); 46 | padding: 9px 13px; 47 | border: 0 !important; 48 | font-size: 13px; 49 | font-weight: bold; 50 | text-shadow: none !important; 51 | text-transform: uppercase; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Resources/translations/messages.fr.xlf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Symfony2 is great 7 | J'aime Symfony2 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Resources/views/Article/Excerpt/form_preview.html.twig: -------------------------------------------------------------------------------- 1 | {% media media, 'small' with {'class': 'media-object js-media-object', 'alt' : 'EdBlog' } %} 2 | 3 | -------------------------------------------------------------------------------- /Resources/views/Article/Excerpt/list.html.twig: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 |
Upload photos from computer
8 |
File formats allowed: png, jpg, gif
9 |
10 |
11 |
12 |
13 | {% include "EDBlogBundle:Article/Excerpt:listAjax.html.twig"%} 14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /Resources/views/Article/Excerpt/listAjax.html.twig: -------------------------------------------------------------------------------- 1 | {% if(pagination|length) %} 2 |
    3 | {% include "EDBlogBundle:Article/Excerpt:listAjaxElements.html.twig"%} 4 |
5 | {{ knp_pagination_render(pagination) }} 6 | {% else %} 7 |
    8 |

    There is no media, please upload some media.

    9 |
10 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Article/Excerpt/listAjaxElements.html.twig: -------------------------------------------------------------------------------- 1 | {% for media in pagination %} 2 |
  • 3 |
    4 | 11 |
    12 | 13 |
  • 14 | {% endfor %} -------------------------------------------------------------------------------- /Resources/views/Article/Media/list.html.twig: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 |
    5 | 6 |
    7 |
    Upload photos from computer
    8 |
    File formats allowed: png, jpg, gif
    9 |
    10 |
    11 |
    12 |
    13 | {% include "EDBlogBundle:Article/Media:listAjax.html.twig"%} 14 |
    15 | 16 | 17 | -------------------------------------------------------------------------------- /Resources/views/Article/Media/listAjax.html.twig: -------------------------------------------------------------------------------- 1 | {% if(pagination|length) %} 2 |
      3 | {% include "EDBlogBundle:Article/Media:listAjaxElements.html.twig"%} 4 |
    5 | {{ knp_pagination_render(pagination) }} 6 | {% else %} 7 |
      8 |

      There is no media, please upload some media.

      9 |
    10 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Article/Media/listAjaxElements.html.twig: -------------------------------------------------------------------------------- 1 | {% for media in pagination %} 2 |
  • 3 |
    4 | 11 |
    12 | {{ render(controller('EDBlogBundle:Backend/Media:editInfo', { 'id': media.id })) }} 13 |
  • 14 | {% endfor %} -------------------------------------------------------------------------------- /Resources/views/Article/checkWritingLock.html.twig: -------------------------------------------------------------------------------- 1 | User {{ user }} is currently editing this article. Do you want to take over the article and block other user from continuing to edit? -------------------------------------------------------------------------------- /Resources/views/Article/metadata__prototype.html.twig: -------------------------------------------------------------------------------- 1 | {% spaceless %} 2 |
    3 |
    4 | 5 |
    6 |
    7 | 8 |
    9 |
    10 | Remove 11 |
    12 |
    13 | {% endspaceless %} 14 | -------------------------------------------------------------------------------- /Resources/views/Article/show.html.twig: -------------------------------------------------------------------------------- 1 | {% extends "@EDBlog/Layout/blog_admin_main.html.twig" %} 2 | 3 | {% block content %} 4 |
    5 |
    6 | 7 |
    8 |
    9 |
    10 | {% if is_granted('EDIT_ARTICLE', article) %} 11 | Edit 12 | {% endif %} 13 |
    {{ article.title }}
    14 |
    15 | 16 |

    By {{ article.author.blogDisplayName }} on {{ article.publishedAt|blogDate}} 17 | {% if (article.categories|length) %} 18 | in {% for category in article.categories %} 19 | {{ loop.index0 ? ', ' }}{{ category.term.title }} 20 | {% endfor %} 21 | {% endif %} 22 | {#| X comments #} 23 | 24 | {% if (article.tags|length) %} 25 |

    26 | {% for tag in article.tags %} 27 | {{ tag.term.title }} 28 | {% endfor %} 29 |

    30 | {% endif %} 31 |

    32 |

    {{ article.content|raw }}

    33 |
    34 |
    35 | 36 | {% include 'EDBlogBundle:Comment:list.html.twig' %} 37 | 38 |
    39 |
    40 | {% endblock content %} 41 | 42 | {% block javascripts %} 43 | {{ parent() }} 44 | 49 | {% endblock %} -------------------------------------------------------------------------------- /Resources/views/Article/upload_form.html.twig: -------------------------------------------------------------------------------- 1 | {% if mediaLibrary is not defined %} 2 | {{ form_widget(form_media.media, {'attr': { 'data-href': path('ed_blog_admin_article_upload') }}) }} 3 | {% else %} 4 | {{ form_widget(form_media.media, {'attr': { 'data-href': path('ed_blog_admin_media_upload') }}) }} 5 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Comment/Comments/list.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | 3 | {% block content %} 4 |
    5 |

    Comments

    6 | 7 | {% if not is_granted('ACCESS_COMMENTS') %} 8 |

    Comments are currently disabled. To enable commenting visit Settings area.

    9 | {% endif %} 10 | 11 | {% include "@EDBlog/Comment/Comments/listAjax.html.twig" %} 12 |
    13 | {{ include('EDBlogBundle:Modals:remove_article.html.twig') }} 14 | {% endblock content %} -------------------------------------------------------------------------------- /Resources/views/Comment/Comments/listAjax.html.twig: -------------------------------------------------------------------------------- 1 | {% from '@EDBlog/Global/Macro/tables.html.twig' import sortableTh %} 2 | 3 |
    4 | {% if pagination|length %} 5 | 6 | 7 | 8 | {{ sortableTh('Display name', 'displayname', 'ed_blog_admin_comment_list', 'v2', orderBy, order) }} 9 | {{ sortableTh('Email', 'email', 'ed_blog_admin_comment_list', 'v2', orderBy, order) }} 10 | {{ sortableTh('Author status', 'author_status', 'ed_blog_admin_comment_list', 'v2', orderBy, order) }} 11 | {{ sortableTh('Comment', 'comment', 'ed_blog_admin_comment_list', 'v2', orderBy, order) }} 12 | {{ sortableTh('Article', 'article', 'ed_blog_admin_comment_list', 'v2', orderBy, order) }} 13 | {{ sortableTh('Comment status', 'status', 'ed_blog_admin_comment_list', 'v2', orderBy, order) }} 14 | {{ sortableTh('Commented at', 'createdAt', 'ed_blog_admin_comment_list', 'v2', orderBy, order) }} 15 | 16 | 17 | 18 | 19 | {% for comment in pagination %} 20 | {% include "@EDBlog/Comment/Comments/listAjaxElement.html.twig" with { 'comment': comment} %} 21 | {% endfor %} 22 | {{ knp_pagination_render(pagination) }} 23 | 24 |
    Action
    25 | {% endif %} 26 |
    -------------------------------------------------------------------------------- /Resources/views/Comment/Comments/listAjaxElement.html.twig: -------------------------------------------------------------------------------- 1 | {% if comment.author is not defined %} 2 | {% set comment = comment[0] %} 3 | {% endif %} 4 | 5 | {% if comment.author %}{{ comment.author.commenterDisplayName }}{% else %}{{ comment.name }}{% endif %} 6 | {% if comment.author %}{{ comment.author.email }}{% else %}{{ comment.email }}{% endif %} 7 | {% if comment.author %} Registered user{% else %} Public user{% endif %} 8 | {{ comment.comment | displayLinks | raw }} 9 | {{ comment.article.title }} 10 | {% if comment.status == constant('STATUS_PENDING', comment) %} Waiting for approval{% else %} Approved{% endif %} 11 | {{ comment.createdAt | blogDateTime }} 12 | 13 | {% if comment.status == constant('STATUS_PENDING', comment) %} Approve it{% endif %} 14 | Edit 15 | Remove 16 | 17 | -------------------------------------------------------------------------------- /Resources/views/Comment/Comments/paginationComments.html.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 24 | 25 | -------------------------------------------------------------------------------- /Resources/views/Comment/Comments/paginationCommentsAjax.html.twig: -------------------------------------------------------------------------------- 1 | {{ knp_pagination_render(pagination) }} -------------------------------------------------------------------------------- /Resources/views/Comment/comment.html.twig: -------------------------------------------------------------------------------- 1 | {% if (comment.status == constant('STATUS_ACTIVE', comment)) or (app.user and comment.author == app.user) or (not app.user and isMyComment(comment)) %} 2 |
    3 |
    4 | {% if comment.author %} 5 | {{ comment.author.commenterDisplayName }} 6 | {% else %} 7 | {{ comment.name }} 8 | {% endif %} 9 |
    10 |
    {{ comment.createdAt|blogDate }} at {{ comment.createdAt|blogTime }}
    11 |
    12 |
    13 | {% if comment.status == constant('STATUS_PENDING', comment) %} 14 | {% if (app.user and comment.author == app.user) or (not app.user and isMyComment(comment)) %} 15 |
    Your comment is awaiting moderation.
    16 | {% endif %} 17 | {% endif %} 18 | {{ comment.comment |displayLinks|raw }} 19 |
    20 |

    21 |
    22 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Comment/comments.html.twig: -------------------------------------------------------------------------------- 1 |
    2 |
    Comments 3 |
    4 | {% if is_granted('ACCESS_COMMENTS_LIST') and is_granted('CREATE_COMMENT') %} 5 |
    6 | Leave comment 7 |
    8 | {% endif %} 9 |

    10 |
    11 | 12 | {% if not is_granted('ACCESS_COMMENTS_LIST') %} 13 | {% include "@EDBlog/Comment/loginToListComments.html.twig" %} 14 | {% else %} 15 |
    16 |
    17 | {% for comment in comments %} 18 | {% include 'EDBlogBundle:Comment:comment.html.twig' with {'comment': comment} %} 19 | {% endfor %} 20 |
    21 |
    22 | {% endif %} 23 |
    -------------------------------------------------------------------------------- /Resources/views/Comment/edit.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | {% form_theme form '@EDBlog/Global/forms.html.twig' %} 3 | 4 | {% block content %} 5 |
    6 |

    Edit Comment

    7 | 8 |
    9 | {{ form_errors(form) }} 10 | {% if not comment.author %} 11 |
    12 | {{ form_label(form.name) }} 13 | {{ form_widget(form.name) }} 14 | {{ form_errors(form.name) }} 15 |
    16 | {% endif %} 17 |
    18 | {{ form_label(form.comment) }} 19 | {{ form_widget(form.comment) }} 20 | {{ form_errors(form.comment) }} 21 |
    22 |
    23 | {{ form_label(form.status) }} 24 | {{ form_widget(form.status) }} 25 | {{ form_errors(form.status) }} 26 |
    27 | {{ form_rest(form) }} 28 |
    29 |
    30 | {% endblock content %} -------------------------------------------------------------------------------- /Resources/views/Comment/form.html.twig: -------------------------------------------------------------------------------- 1 | {% if is_granted('ACCESS_COMMENTS_LIST') and is_granted('CREATE_COMMENT') %} 2 |
    3 |
    Leave your comment 4 |
    5 |
    6 |
    7 | {{ form_errors(form) }} 8 | {% if not app.user %} 9 |
    10 | {{ form_label(form.name) }} 11 | {{ form_widget(form.name) }} 12 | {{ form_errors(form.name) }} 13 |
    14 |
    15 | {{ form_label(form.email) }} 16 | {{ form_widget(form.email) }} 17 | {{ form_errors(form.email) }} 18 |
    19 |
    20 | {{ form_label(form.username) }} 21 | {{ form_widget(form.username) }} 22 | {{ form_errors(form.username) }} 23 |
    24 | {% else %} 25 |
    26 | 27 |
    {{ app.user.commenterDisplayName }}
    28 |
    29 | {% endif %} 30 |
    31 | {{ form_label(form.comment) }} 32 | {{ form_widget(form.comment) }} 33 | {{ form_errors(form.comment) }} 34 |
    35 | {{ form_row(form.save) }} 36 | {{ form_rest(form) }} 37 |
    38 |
    39 |
    40 | {% elseif is_granted('ACCESS_COMMENTS_LIST') %} 41 | {% include "@EDBlog/Comment/loginToCreateComments.html.twig" %} 42 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Comment/list.html.twig: -------------------------------------------------------------------------------- 1 | {% if is_granted('ACCESS_COMMENTS') %} 2 |
    3 | {% include 'EDBlogBundle:Comment:comments.html.twig' %} 4 | {% include 'EDBlogBundle:Comment:form.html.twig' %} 5 |
    6 | {% endif %} 7 | -------------------------------------------------------------------------------- /Resources/views/Comment/loginToCreateComments.html.twig: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Login to leave a comment. 4 |
    5 |
    -------------------------------------------------------------------------------- /Resources/views/Comment/loginToListComments.html.twig: -------------------------------------------------------------------------------- 1 |
    2 | Login to see or leave comments. 3 |
    -------------------------------------------------------------------------------- /Resources/views/Frontend/Blog/blogBreadcrumb.html.twig: -------------------------------------------------------------------------------- 1 | {% if (criteria is defined) %} 2 |
    3 |

    Blog / 4 | {% if (criteria.type == 'category') %} 5 | {{ criteria.type }}: 6 | {% set categories = categoriesFromFirstLevel(criteria.value) %} 7 | {% for category in categories %} 8 | {{ category.Term.title }} / 9 | {% endfor %} 10 | {{ criteria.value.Term.title}} {{ criteria.value.description ? '('~criteria.value.description~')' }} 11 | {% elseif (criteria.type == 'tag') %} 12 | {{ criteria.type }}: {{ criteria.value.Term.title}} 13 | {% elseif (criteria.type == 'author') %} 14 | {{ criteria.type }}: {{ criteria.value.blogDisplayName}} 15 | {% elseif (criteria.type == 'archive') %} 16 | {{ criteria.type }}: {{ criteria.value.year }} {{ getMonth(criteria.value.month)}} 17 | {% endif %} 18 |

    19 |
    20 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Frontend/Blog/blog_sidebar.html.twig: -------------------------------------------------------------------------------- 1 | {% if (categories|length) %} 2 |
    3 |
    Categories
    4 |
    5 | {% for category in categories %} 6 | 7 | {% endfor %} 8 |
    9 |
    10 | {% endif %} 11 | 12 | {{ render (controller('EDBlogBundle:Backend/Tag:topTags',{ 'number' : 5 } ) ) }} 13 | 14 | {% if (archive|length) %} 15 |
    16 |
    Archive
    17 |
    18 | {% set currentYear = 0 %} 19 | {% for archiveRow in archive %} 20 | {% if (currentYear==archiveRow.year) %} 21 | {{ getMonth(archiveRow.month) }} ({{ archiveRow.num }}) 22 | {% else %} 23 | {% set currentYear=archiveRow.year %} 24 | {% if (not loop.first) %} 25 |
    26 | {% endif %} 27 |
    28 | {{ archiveRow.year }} 29 |
    30 | {{ getMonth(archiveRow.month) }} ({{ archiveRow.num }}) 31 | {% endif %} 32 | {% if (loop.last) %} 33 |
    34 | {% endif %} 35 | {% endfor %} 36 | 37 | 38 | {% endif %} 39 | -------------------------------------------------------------------------------- /Resources/views/Frontend/Blog/blog_sidebar_tags.html.twig: -------------------------------------------------------------------------------- 1 | {% if (topNtags|length) %} 2 |
    3 |
    Top tags
    4 |
    5 | {% for tag in topNtags %} 6 | 7 | {% endfor %} 8 |
    9 |
    10 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Frontend/Blog/index.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Frontend/Layout:main.html.twig' %} 2 | 3 | {% block content %} 4 |
    5 |
    6 |
    7 | {{ render(controller('EDBlogBundle:Frontend/Sidebar:blogList')) }} 8 |
    9 |
    10 | {% include "EDBlogBundle:Frontend/Blog:blogBreadcrumb.html.twig" %} 11 | {% include "EDBlogBundle:Frontend/Blog:indexAjax.html.twig" %} 12 |
    13 |
    14 |
    15 | {% endblock content %} -------------------------------------------------------------------------------- /Resources/views/Frontend/Blog/indexAjax.html.twig: -------------------------------------------------------------------------------- 1 | {% if pagination|length %} 2 |
    3 | {% include 'EDBlogBundle:Frontend/Blog:indexAjaxElements.html.twig' %} 4 |
    5 | {{ knp_pagination_render(pagination) }} 6 | {% else %} 7 | {% if (app.request.attributes.get('_route') == 'ed_blog_frontend_index') %} 8 | There are no articles yet! 9 | {% else %} 10 | There are no articles within this criteria. 11 | {% endif %} 12 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Frontend/Blog/indexAjaxElements.html.twig: -------------------------------------------------------------------------------- 1 | {% for item in pagination %} 2 | {% set commentsCnt = commentsCount(item) %} 3 |
    4 | 5 | 6 | 7 |

    By {{ item.author.blogDisplayName }} on {{ item.publishedAt|blogDate}} 8 | {% if (item.categories|length) %} 9 | in {% for category in item.categories %} 10 | {{ loop.index0 ? ', ' }}{{ category.term.title }} 11 | {% endfor %} 12 | {% endif %} 13 | {% if ( is_granted('ACCESS_COMMENTS') and commentsCnt) %} 14 | | {{ commentsCnt }} comment{{ (commentsCnt > 1) ? 's' }} 15 | {% endif %} 16 |

    17 | 18 |
    {% media item.excerptPhoto, 'excerpt' with {'class': 'centered img--auto d--b'} %}
    19 | 20 |

    {{ item.excerptText|raw }}

    21 | 22 | Read more 23 | 24 |
    25 | {% endfor %} 26 | -------------------------------------------------------------------------------- /Resources/views/Frontend/Blog/singleArticle.html.twig: -------------------------------------------------------------------------------- 1 | {% extends "EDBlogBundle:Frontend/Layout:main.html.twig" %} 2 | 3 | {% block title %}{{ article.title }}{% endblock %} 4 | 5 | {% block metaTags %} 6 | {% for meta in article.metaData %} 7 | {% if meta.key!='writing_locked' %} 8 | 9 | {% endif %} 10 | {% endfor %} 11 | {% endblock %} 12 | 13 | {% block content %} 14 |
    15 | 16 |
    17 |
    18 |
    {{ article.title }}
    19 | 20 |

    By {{ article.author.blogDisplayName }} on {{ article.publishedAt|blogDate}} 21 | {% if (article.categories|length) %} 22 | in {% for category in article.categories %} 23 | {{ loop.index0 ? ', ' }}{{ category.term.title }} 24 | {% endfor %} 25 | {% endif %} 26 | {% if ( is_granted('ACCESS_COMMENTS') and commentsCnt) %} 27 | | {{ commentsCnt }} comment{{ (commentsCnt > 1) ? 's' }} 28 | {% endif %} 29 |

    30 | 31 | {% if (article.tags|length) %} 32 |

    33 | {% for tag in article.tags %} 34 | {{ tag.term.title }}{% if not loop.last %}, {% endif %} 35 | {% endfor %} 36 |

    37 | {% endif %} 38 | 39 |

    {{ article.content|raw }}

    40 |
    41 |
    42 | 43 | {% include 'EDBlogBundle:Comment:list.html.twig' %} 44 | 45 |
    46 | {% endblock content %} 47 | 48 | {% block javascripts %} 49 | {{ parent() }} 50 | 55 | {% endblock %} -------------------------------------------------------------------------------- /Resources/views/Frontend/Global/FormsTheme/date_widget.html.twig: -------------------------------------------------------------------------------- 1 | {% block date_widget %} 2 | {% spaceless %} 3 | {% if widget == 'single_text' %} 4 | {{ block('form_widget_simple') }} 5 | {% else %} 6 | {% set attr = attr|merge({'class': attr.class|default('inline')}) %} 7 | {{ date_pattern|replace({ 8 | '{{ year }}': form_widget(form.year, {'attr': {'class': attr.widget_class|default('') ~ ' form-control form-control--sm mrg--l/2'}}), 9 | '{{ month }}': form_widget(form.month, {'attr': {'class': attr.widget_class|default('') ~ ' form-control form-control--sm'}}), 10 | '{{ day }}': form_widget(form.day, {'attr': {'class': attr.widget_class|default('') ~ ' form-control form-control--sm mrg--l/2'}}), 11 | })|raw }} 12 | {{ block('help') }} 13 | {% endif %} 14 | {% endspaceless %} 15 | {% endblock %} -------------------------------------------------------------------------------- /Resources/views/Frontend/Global/pagination.html.twig: -------------------------------------------------------------------------------- 1 | {% if next is defined %} 2 |

    3 | 4 | Load more 5 | 6 |

    7 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Frontend/Global/paginationAjax.html.twig: -------------------------------------------------------------------------------- 1 | {{ knp_pagination_render(pagination) }} -------------------------------------------------------------------------------- /Resources/views/Frontend/Layout/_footer.html.twig: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Resources/views/Frontend/Layout/header.html.twig: -------------------------------------------------------------------------------- 1 | 16 | 17 | {# Menu on small devices #} 18 |
    19 | menu 20 | 30 |
    -------------------------------------------------------------------------------- /Resources/views/Frontend/Layout/main.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Frontend/Layout:base.html.twig' %} 2 | 3 | {% set currentPath = app.request.attributes.get('_route') %} 4 | 5 | {% block favicon %} 6 | {{ parent() }} 7 | {% endblock %} 8 | 9 | {% block stylesheets %} 10 | {{ parent() }} 11 | {% endblock %} 12 | 13 | {% block body %} 14 | {{ parent() }} 15 | 16 |
    17 | {% block header %} 18 | {{ parent() }} 19 | {% include 'EDBlogBundle:Frontend/Layout:header.html.twig' %} 20 | {% endblock header %} 21 | 22 | {% block content %}{% endblock %} 23 | 24 |
    25 | 26 | {% block footer %} 27 | {{ parent() }} 28 | {% include('EDBlogBundle:Frontend/Layout:_footer.html.twig') %} 29 | {% endblock footer %} 30 | 31 | {% endblock %} {# endblock body #} 32 | 33 | {% block javascripts %} 34 | {{ parent() }} 35 | {% endblock %} 36 | -------------------------------------------------------------------------------- /Resources/views/Global/Macro/tables.html.twig: -------------------------------------------------------------------------------- 1 | {% macro sortableColumn(label, input, pathName, orderBy, order) %} 2 | {{ label }} 3 | {% endmacro %} 4 | 5 | {% macro sortableTh(label, input, pathName, thClass, orderBy, order) %} 6 | 7 | {{ label }} 8 | 9 | {% endmacro %} -------------------------------------------------------------------------------- /Resources/views/Global/categories.html.twig: -------------------------------------------------------------------------------- 1 | {% macro slash(taxonomy) %} 2 | 3 | {% endmacro %} -------------------------------------------------------------------------------- /Resources/views/Global/pagination.html.twig: -------------------------------------------------------------------------------- 1 | {% if next is defined %} 2 |

    3 | 4 | Load more 5 | 6 |

    7 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Global/paginationAjax.html.twig: -------------------------------------------------------------------------------- 1 | {{ knp_pagination_render(pagination) }} -------------------------------------------------------------------------------- /Resources/views/Global/paginationClassic.html.twig: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Resources/views/Global/paginationClassicAjax.html.twig: -------------------------------------------------------------------------------- 1 | {{ knp_pagination_render(pagination) }} -------------------------------------------------------------------------------- /Resources/views/Homepage/_menu.html.twig: -------------------------------------------------------------------------------- 1 |
    2 | menu 3 | 21 | 22 |
    -------------------------------------------------------------------------------- /Resources/views/Layout/blog_admin_main.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_base.html.twig' %} 2 | 3 | {% set currentPath = app.request.attributes.get('_route') %} 4 | 5 | {% block favicon %} 6 | {{ parent() }} 7 | {% endblock %} 8 | 9 | {% block stylesheets %} 10 | {{ parent() }} 11 | {% endblock %} 12 | 13 | {% block body %} 14 | {{ parent() }} 15 | 16 | {% block header %} 17 | {{ parent() }} 18 | 19 | 23 | 24 | {% endblock header %} 25 | 26 |
    27 | 28 | {% include('EDBlogBundle:Homepage:_menu.html.twig') with {'currentPath': currentPath} %} 29 | 30 | {% block content %} 31 | {% endblock %} 32 | 33 | {# Used for footer #} 34 |
    35 | 36 | {% block footer %} 37 | {{ parent() }} 38 | {% endblock footer %} 39 | 40 | {% endblock %} {# endblock body #} 41 | 42 | {% block javascripts %} 43 | {{ parent() }} 44 | {% endblock %} 45 | -------------------------------------------------------------------------------- /Resources/views/Media/cropPanel.html.twig: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Crop 4 |
    5 | {% media media, 'crop' with {'class': 'js-jcrop'} %} 6 |
    7 | 8 | 9 | 10 | 11 | 12 | Cancel 13 | 14 |
    15 |
    -------------------------------------------------------------------------------- /Resources/views/Media/editForm.html.twig: -------------------------------------------------------------------------------- 1 | {% form_theme form '@EDBlog/Global/forms.html.twig' %} 2 |
    3 | {{ form_widget(form) }} 4 |
    -------------------------------------------------------------------------------- /Resources/views/Media/editInfoForm.html.twig: -------------------------------------------------------------------------------- 1 |
    2 | {{ form_widget(form.description,{ 'id': 'media_info_description_'~id }) }} 3 | {{ form_rest(form) }} 4 |
    -------------------------------------------------------------------------------- /Resources/views/Media/image.html.twig: -------------------------------------------------------------------------------- 1 | {% media media, 'small' with {'class': 'media-object js-media-object'} %} -------------------------------------------------------------------------------- /Resources/views/Media/list.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | 3 | {% block content %} 4 |
    5 |

    Media library

    6 |
    7 |
    8 |
    9 | 10 |
    11 |
    Upload photos from computer
    12 |
    File formats allowed: png, jpg, gif
    13 |
    14 |
    15 |
    16 |
    17 | {% include "EDBlogBundle:Media:listAjax.html.twig"%} 18 |
    19 | {% include 'EDBlogBundle:Modals:remove_article.html.twig' %} 20 | {% include 'EDBlogBundle:Article:upload_form.html.twig' with { 'form_media' : form_media, 'mediaLibrary': true } %} 21 | {% endblock content %} 22 | 23 | {% block javascripts %} 24 | {{ parent() }} 25 | 30 | {% endblock %} -------------------------------------------------------------------------------- /Resources/views/Media/listAjax.html.twig: -------------------------------------------------------------------------------- 1 | {% if(pagination|length) %} 2 |
      3 | {% include "EDBlogBundle:Media:listAjaxElements.html.twig"%} 4 |
    5 |
    {{ knp_pagination_render(pagination) }}
    6 | {% else %} 7 | {# Empty state #} 8 |
      9 |
    10 | {% endif %} -------------------------------------------------------------------------------- /Resources/views/Media/listAjaxElements.html.twig: -------------------------------------------------------------------------------- 1 | {% for media in pagination %} 2 |
  • 3 | 11 | {{ render(controller('EDBlogBundle:Backend/Media:editInfo', { 'id': media.id })) }} 12 |
  • 13 | {% endfor %} -------------------------------------------------------------------------------- /Resources/views/Modals/article_locked.html.twig: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Resources/views/Modals/remove_article.html.twig: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/children.html.twig: -------------------------------------------------------------------------------- 1 | {% set level = level + 1 %} 2 | 3 | {% for taxon in taxonomy.children %} 4 | {% include "@EDBlog/Taxonomy/Category/listAjaxElement.html.twig" with { 'taxonomy': taxon, 'level' : level } %} 5 | {% endfor %} -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/create.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | 3 | {% block content %} 4 |
    5 |

    Create category

    6 | {{ form_errors(form) }} 7 |
    8 |
    9 | {{ form_label(form.term.title) }} 10 | {{ form_widget(form.term.title) }} 11 | {{ form_errors(form.term.title) }} 12 |
    13 |
    14 | {{ form_label(form.term.slug) }} 15 | {{ form_widget(form.term.slug) }} 16 | {{ form_errors(form.term.slug) }} 17 |
    18 |
    19 | {{ form_label(form.description) }} 20 | {{ form_widget(form.description) }} 21 | {{ form_errors(form.description) }} 22 |
    23 |
    24 | {{ form_label(form.parent) }} 25 | {{ form_widget(form.parent, { 'attr': { 'data-category-url': path('ed_blog_category_all_pretty', { 'template' : 'limited' } ) } }) }} 26 | {{ form_errors(form.parent) }} 27 |
    28 | {{ form_rest(form) }} 29 |
    30 |
    31 | {% endblock content %} 32 | 33 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/edit.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | {% form_theme form '@EDBlog/Global/forms.html.twig' %} 3 | 4 | {% block content %} 5 |
    6 |

    Edit category

    7 | {{ form_errors(form) }} 8 |
    9 |
    10 | {{ form_label(form.term.title) }} 11 | {{ form_widget(form.term.title) }} 12 | {{ form_errors(form.term.title) }} 13 |
    14 |
    15 | {{ form_label(form.term.slug) }} 16 | {{ form_widget(form.term.slug) }} 17 | {{ form_errors(form.term.slug) }} 18 |
    19 |
    20 | {{ form_label(form.description) }} 21 | {{ form_widget(form.description) }} 22 | {{ form_errors(form.description) }} 23 |
    24 |
    25 | {{ form_label(form.parent) }} 26 | {{ form_widget(form.parent, { 'attr': { 'data-category-url': path('ed_blog_category_all_pretty', { 'template' : 'limited' } ) } }) }} 27 | {{ form_errors(form.parent) }} 28 |
    29 | {{ form_rest(form) }} 30 |
    31 |
    32 | {% endblock content %} 33 | 34 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/list.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | 3 | {% block content %} 4 |
    5 |

    Categories

    6 | Create new category 7 | 8 | {% include "@EDBlog/Taxonomy/Category/listAjax.html.twig" %} 9 | 10 |
    11 | {{ include('EDBlogBundle:Modals:remove_article.html.twig') }} 12 | {% endblock content %} -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/listAjax.html.twig: -------------------------------------------------------------------------------- 1 | {% from '@EDBlog/Global/Macro/tables.html.twig' import sortableTh %} 2 | 3 |
    4 | {% if pagination|length %} 5 | 6 | 7 | 8 | {{ sortableTh('Title', 'title', 'ed_blog_category_list', 'v2', orderBy, order) }} 9 | {{ sortableTh('Slug', 'slug', 'ed_blog_category_list', 'v0', orderBy, order) }} 10 | {{ sortableTh('Description', 'description', 'ed_blog_category_list', 'v2', orderBy, order) }} 11 | {{ sortableTh('Articles Count', 'count', 'ed_blog_category_list', 'v1', orderBy, order) }} 12 | {{ sortableTh('Parent', 'parent', 'ed_blog_category_list', 'v2', orderBy, order) }} 13 | 14 | 15 | 16 | 17 | {% for taxonomy in pagination %} 18 | {% include "@EDBlog/Taxonomy/Category/listAjaxElement.html.twig" with { 'taxonomy': taxonomy} %} 19 | {% endfor %} 20 | {{ knp_pagination_render(pagination) }} 21 | 22 | 23 |
    Action
    24 | {% endif %} 25 |
    -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/listAjaxElement.html.twig: -------------------------------------------------------------------------------- 1 | {% if level is not defined %} 2 | {% set level = 0 %} 3 | {% endif %} 4 | 5 | {{ taxonomy|categoryLevelSlash }} 6 | {{ taxonomy.term.slug }} 7 | {{ taxonomy.description }} 8 | {{ taxonomy.count | default('0') }} 9 | {% if taxonomy.parent %}{{ taxonomy.parent.term.title }}{% endif %} 10 | 11 | Remove 12 | Edit 13 | 14 | 15 | 16 | {% include "@EDBlog/Taxonomy/Category/children.html.twig" %} -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/list_sortable.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | 3 | {% block content %} 4 |
    5 |

    Categories

    6 | Create new category 7 | 8 | {% include "@EDBlog/Taxonomy/Category/list_sortableAjax.html.twig" %} 9 | 10 |
    11 | {{ include('EDBlogBundle:Modals:remove_article.html.twig') }} 12 | {% endblock content %} -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/list_sortableAjax.html.twig: -------------------------------------------------------------------------------- 1 | {% from '@EDBlog/Global/Macro/tables.html.twig' import sortableTh %} 2 | 3 |
    4 | {% if pagination|length %} 5 | 6 | 7 | 8 | {{ sortableTh('Title', 'title', 'ed_blog_category_list', 'v2', orderBy, order) }} 9 | {{ sortableTh('Slug', 'slug', 'ed_blog_category_list', 'v0', orderBy, order) }} 10 | {{ sortableTh('Description', 'description', 'ed_blog_category_list', 'v2', orderBy, order) }} 11 | {{ sortableTh('Articles Count', 'count', 'ed_blog_category_list', 'v1', orderBy, order) }} 12 | {{ sortableTh('Parent', 'parent', 'ed_blog_category_list', 'v2', orderBy, order) }} 13 | 14 | 15 | 16 | 17 | {% for taxonomy in pagination %} 18 | {% include "@EDBlog/Taxonomy/Category/list_sortableAjaxElement.html.twig" %} 19 | {% endfor %} 20 | {{ knp_pagination_render(pagination) }} 21 | 22 | 23 |
    Action
    24 | {% endif %} 25 |
    -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/list_sortableAjaxElement.html.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% if taxonomy.term is not defined %} 4 | {% set taxonomy = taxonomy[0] %} 5 | {% endif %} 6 | {{ taxonomy|categoryLevelSlash }} 7 | {{ taxonomy.term.slug }} 8 | {{ taxonomy.description }} 9 | {{ taxonomy.count | default('0') }} 10 | {% if taxonomy.parent %}{{ taxonomy.parent.term.title }}{% endif %} 11 | 12 | Remove 13 | Edit 14 | 15 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/pretty.html.twig: -------------------------------------------------------------------------------- 1 | {% if level is not defined %} 2 | {% set level = 0 %} 3 | {% else %} 4 | {% set level = level +1 %} 5 | {% endif %} 6 | 7 | {#{% for category in categories %} 8 | 9 | 10 | {% include "@EDBlog/Taxonomy/Category/pretty.html.twig" with { 'categories': category.children} %} 11 | {% endfor %}#} 12 | 13 | {% for category in categories %} 14 | 17 | {% include "@EDBlog/Taxonomy/Category/pretty.html.twig" with { 'categories': category.children} %} 18 | {% endfor %} 19 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Category/pretty_limited.html.twig: -------------------------------------------------------------------------------- 1 | {% if level is not defined %} 2 | {% set level = 0 %} 3 | {% else %} 4 | {% set level = level +1 %} 5 | {% endif %} 6 | 7 | {#{% for category in categories %} 8 | 9 | 10 | {% include "@EDBlog/Taxonomy/Category/pretty.html.twig" with { 'categories': category.children} %} 11 | {% endfor %}#} 12 | 13 | {% for category in categories %} 14 | {% if level < 4 %} 15 | 16 | 17 | {% include "@EDBlog/Taxonomy/Category/pretty_limited.html.twig" with { 'categories': category.children} %} 18 | {% endif %} 19 | 20 | {% endfor %} 21 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Tag/create.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | 3 | {% block content %} 4 |
    5 |

    Create tag

    6 | {{ form_errors(form) }} 7 |
    8 |
    9 | {{ form_label(form.term.title) }} 10 | {{ form_widget(form.term.title) }} 11 | {{ form_errors(form.term.title) }} 12 |
    13 |
    14 | {{ form_label(form.term.slug) }} 15 | {{ form_widget(form.term.slug) }} 16 | {{ form_errors(form.term.slug) }} 17 |
    18 |
    19 | {{ form_label(form.description) }} 20 | {{ form_widget(form.description) }} 21 | {{ form_errors(form.description) }} 22 |
    23 | {{ form_rest(form) }} 24 |
    25 |
    26 | {% endblock content %} 27 | 28 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Tag/edit.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | {% form_theme form '@EDBlog/Global/forms.html.twig' %} 3 | 4 | {% block content %} 5 |
    6 |

    Edit tag

    7 | {{ form_errors(form) }} 8 |
    9 |
    10 | {{ form_label(form.term.title) }} 11 | {{ form_widget(form.term.title) }} 12 | {{ form_errors(form.term.title) }} 13 |
    14 |
    15 | {{ form_label(form.term.slug) }} 16 | {{ form_widget(form.term.slug) }} 17 | {{ form_errors(form.term.slug) }} 18 |
    19 |
    20 | {{ form_label(form.description) }} 21 | {{ form_widget(form.description) }} 22 | {{ form_errors(form.description) }} 23 |
    24 | {{ form_rest(form) }} 25 |
    26 |
    27 | {% endblock content %} 28 | 29 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Tag/list.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | 3 | {% block content %} 4 |
    5 |

    Tags

    6 | Create new tag 7 | 8 | {% include "@EDBlog/Taxonomy/Tag/listAjax.html.twig" %} 9 | 10 |
    11 | {{ include('EDBlogBundle:Modals:remove_article.html.twig') }} 12 | {% endblock content %} -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Tag/listAjax.html.twig: -------------------------------------------------------------------------------- 1 | {% from '@EDBlog/Global/Macro/tables.html.twig' import sortableTh %} 2 | 3 |
    4 | {% if pagination|length %} 5 | 6 | 7 | 8 | {{ sortableTh('Title', 'title', 'ed_blog_tag_list', 'v2', orderBy, order) }} 9 | {{ sortableTh('Slug', 'slug', 'ed_blog_tag_list', 'v0', orderBy, order) }} 10 | {{ sortableTh('Description', 'description', 'ed_blog_tag_list', 'v2', orderBy, order) }} 11 | {{ sortableTh('Articles Count', 'count', 'ed_blog_tag_list', 'v1', orderBy, order) }} 12 | 13 | 14 | 15 | 16 | {% for taxonomy in pagination %} 17 | {% include "@EDBlog/Taxonomy/Tag/listAjaxElement.html.twig" with { 'taxonomy': taxonomy} %} 18 | {% endfor %} 19 | {{ knp_pagination_render(pagination) }} 20 | 21 |
    Action
    22 | {% endif %} 23 |
    -------------------------------------------------------------------------------- /Resources/views/Taxonomy/Tag/listAjaxElement.html.twig: -------------------------------------------------------------------------------- 1 | {% if level is not defined %} 2 | {% set level = 0 %} 3 | {% endif %} 4 | 5 | {{ taxonomy|categoryLevelSlash }} 6 | {{ taxonomy.term.slug }} 7 | {{ taxonomy.description }} 8 | {{ taxonomy.count | default('0') }} 9 | 10 | Remove 11 | Edit 12 | 13 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/pagination.html.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 26 | 27 | -------------------------------------------------------------------------------- /Resources/views/Taxonomy/paginationAjax.html.twig: -------------------------------------------------------------------------------- 1 | {{ knp_pagination_render(pagination) }} -------------------------------------------------------------------------------- /Resources/views/Users/add.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | {% form_theme form '@EDBlog/Global/forms.html.twig' %} 3 | 4 | {% block content %} 5 |
    6 |

    Import new blog user

    7 | 8 |
    9 | {{ form_errors(form) }} 10 |
    11 | {{ form_label(form.user) }} 12 | {{ form_widget(form.user, {'attr': { 'data-source': path('ed_blog_user_search') }}) }} 13 | {{ form_errors(form.user) }} 14 |
    15 |
    16 | {{ form_label(form.adminRole) }} 17 | {{ form_widget(form.adminRole) }} 18 | {{ form_errors(form.adminRole) }} 19 |
    20 | {{ form_rest(form) }} 21 |
    22 |
    23 | {% endblock content %} 24 | 25 | -------------------------------------------------------------------------------- /Resources/views/Users/blog_privileges.html.twig: -------------------------------------------------------------------------------- 1 | {{ user|blogRole }} 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Resources/views/Users/edit.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'EDBlogBundle:Layout:blog_admin_main.html.twig' %} 2 | {% form_theme form '@EDBlog/Global/forms.html.twig' %} 3 | 4 | {% block content %} 5 |
    6 |

    Edit blog user

    7 | 8 |
    9 | {{ form_errors(form) }} 10 |
    11 | {{ form_label(form.blogDisplayName) }} 12 | {{ form_widget(form.blogDisplayName) }} 13 | {{ form_errors(form.blogDisplayName) }} 14 |
    15 |
    16 | {{ form_label(form.role) }} 17 | {{ form_widget(form.role) }} 18 | {{ form_errors(form.role) }} 19 |
    20 | {{ form_rest(form) }} 21 |
    22 |
    23 | {% endblock content %} 24 | 25 | -------------------------------------------------------------------------------- /Resources/views/Utils/_comment.html.twig: -------------------------------------------------------------------------------- 1 |
    2 |
    {% if comment.author %}{{ comment.author }}{% else %}{{ comment.name }}{% endif %}
    3 |
    {{ comment.createdAt|date("m/d/Y") }}
    4 |
    5 |
    6 | {{ comment.comment }} 7 |
    8 |

    9 |
    10 | -------------------------------------------------------------------------------- /Resources/views/Utils/_comments.html.twig: -------------------------------------------------------------------------------- 1 |
    2 |
    Comments 3 |
    4 |

    5 |
    6 | 7 |
    8 |
    9 | {% for comment in comments %} 10 | {% include 'EDBlogBundle:Utils:_comment.html.twig' with {'comment': comment} %} 11 | {% endfor %} 12 |
    13 |
    14 |
    -------------------------------------------------------------------------------- /Resources/views/Utils/fields.html.twig: -------------------------------------------------------------------------------- 1 | {% block form_row %} 2 | {% spaceless %} 3 |
    4 | {{ form_errors(form) }} {# Format for each single error is below - {% block form_errors %}{% endblock form_errors %} #} 5 | {{ form_label(form)|raw }} 6 | {% if errors|length > 0 %} 7 |
    {{ form_widget(form) }}
    8 | {% else %} 9 | {{ form_widget(form) }} 10 | {% endif %} 11 |
    12 | {% endspaceless %} 13 | {% endblock form_row %} 14 | 15 | {% block form_errors %} 16 | {% spaceless %} 17 | {% if errors|length > 0 %} 18 | {% for error in errors %} 19 |
    20 | {{ 21 | error.messagePluralization is null 22 | ? error.messageTemplate|trans(error.messageParameters, 'validators') 23 | : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators') 24 | }} 25 |
    26 | {% endfor %} 27 | {% endif %} 28 | {% endspaceless %} 29 | {% endblock form_errors %} -------------------------------------------------------------------------------- /Resources/views/Utils/flash_message.html.twig: -------------------------------------------------------------------------------- 1 | {% for flashMessage in app.session.flashbag.get('success') %} 2 |
    3 |
    4 | 5 |
    6 | {{ flashMessage }} 7 |
    8 |
    9 |
    10 | {% endfor %} 11 | 12 | {% for flashMessage in app.session.flashbag.get('error') %} 13 |
    14 |
    15 | 16 |
    17 | {{ flashMessage }} 18 |
    19 |
    20 |
    21 | {% endfor %} 22 | 23 | {% for flashMessage in app.session.flashbag.get('info') %} 24 |
    25 |
    26 | 27 |
    28 | {{ flashMessage }} 29 |
    30 |
    31 |
    32 | {% endfor %} 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Resources/views/Utils/flash_message.js.twig: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Security/ACL/ArticlePermissionMap.php: -------------------------------------------------------------------------------- 1 | attributes, true); 23 | } 24 | } -------------------------------------------------------------------------------- /Security/ACL/PermissionMap.php: -------------------------------------------------------------------------------- 1 | attributes, true); 27 | } 28 | } -------------------------------------------------------------------------------- /Transformers/PhotoToIdTransformer.php: -------------------------------------------------------------------------------- 1 | om = $om; 23 | } 24 | 25 | public function transform($value) 26 | { 27 | return $value ? $value->getId() : ''; 28 | } 29 | public function reverseTransform($value) 30 | { 31 | if($value) 32 | { 33 | $photo = $this->om->getRepository('ApplicationSonataMediaBundle:Media')->find($value); 34 | 35 | if ($photo) 36 | { 37 | return $photo; 38 | } 39 | else 40 | { 41 | return null; 42 | } 43 | } 44 | else 45 | { 46 | return null; 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /Transformers/UserToEmailTransformer.php: -------------------------------------------------------------------------------- 1 | om = $om; 24 | $this->objectClass = $objectClass; 25 | } 26 | 27 | public function transform($value) 28 | { 29 | return !empty($value) ? $value->getEmail() : ''; 30 | } 31 | 32 | public function reverseTransform($value) 33 | { 34 | if($value) 35 | { 36 | $user = $this->om->getRepository($this->objectClass)->findOneBy(array('email' => $value)); 37 | 38 | if (!$user) 39 | throw new TransformationFailedException(); 40 | 41 | return $user; 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /Util/EDEncryption.php: -------------------------------------------------------------------------------- 1 | salt = 'encrypt'; 34 | $text = $value; 35 | $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); 36 | $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 37 | $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->salt, $text, MCRYPT_MODE_ECB, $iv); 38 | return trim($this->safe_b64encode($crypttext)); 39 | } 40 | 41 | /** 42 | * @param raw int 43 | * @return decrypted string 44 | */ 45 | public function decode($value) { 46 | 47 | if (!$value) { 48 | return false; 49 | } 50 | $this->salt = 'encrypt'; 51 | $crypttext = $this->safe_b64decode($value); 52 | $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); 53 | $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 54 | $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->salt, $crypttext, MCRYPT_MODE_ECB, $iv); 55 | return trim($decrypttext); 56 | } 57 | 58 | } 59 | 60 | ?> -------------------------------------------------------------------------------- /Util/IDEncrypt.php: -------------------------------------------------------------------------------- 1 | encode($id); 24 | } 25 | 26 | /** 27 | * @param raw int 28 | * @return decrypted string 29 | */ 30 | public static function decrypt($encrypted) { 31 | return self::getEDEncr()->decode($encrypted); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ed/blog-bundle", 3 | "type": "symfony-bundle", 4 | "description": "Symfony EDBlogBundle", 5 | "keywords": ["Blog"], 6 | "homepage": "http://blog-demo.etonlabs.com", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Vladimir Mladenovic", 11 | "email": "mladenovic.info@gmail.com" 12 | }, 13 | { 14 | "name": "Milos Milojevic", 15 | "email": "milosmoto@gmail.com" 16 | }, 17 | { 18 | "name": "Vladimir Bogdanovic", 19 | "email": "vladimir.bogdanovic@yahoo.com" 20 | }, 21 | { 22 | "name": "Stanislava Stojanovic Novoselac", 23 | "email": "stanislavastojanovic@gmail.com" 24 | }, 25 | { 26 | "name": "Nenad Jovanovic", 27 | "email": "nenad.jovanovic@etondigital.com" 28 | } 29 | ], 30 | "require": { 31 | "php": ">=5.3.3", 32 | "symfony/symfony": ">=2.6", 33 | "doctrine/doctrine-bundle": "~1.4", 34 | "twig/extensions": "~1.0", 35 | "symfony/assetic-bundle": "~2.3", 36 | "sensio/framework-extra-bundle": "~3.0,>=3.0.2", 37 | "incenteev/composer-parameter-handler": "~2.0", 38 | "friendsofsymfony/user-bundle": "*", 39 | "sonata-project/media-bundle": "~2.3", 40 | "sonata-project/doctrine-orm-admin-bundle": "^2.3", 41 | "jms/serializer-bundle": "~0.13", 42 | "knplabs/knp-paginator-bundle": "*", 43 | "doctrine/doctrine-fixtures-bundle": "*", 44 | "stof/doctrine-extensions-bundle": "~1.1@dev", 45 | "eko/feedbundle": "~1.2" 46 | }, 47 | "require-dev": { 48 | "doctrine/doctrine-bundle": "~1.3", 49 | "swiftmailer/swiftmailer": "~4.3|~5", 50 | "willdurand/propel-typehintable-behavior": "~1.0", 51 | "symfony/yaml": "~2.3", 52 | "symfony/validator": "~2.3", 53 | "sensio/generator-bundle": "~2.3", 54 | "behat/behat": "~3.0", 55 | "behat/symfony2-extension": "~2.0", 56 | "behat/mink": "~1.6", 57 | "behat/mink-extension": "~2.0", 58 | "behat/mink-browserkit-driver": "~1.2", 59 | "behat/mink-goutte-driver": "~1.0", 60 | "behat/mink-selenium2-driver": "~1.1" 61 | }, 62 | "autoload": { 63 | "psr-4": { "ED\\BlogBundle\\": "" } 64 | } 65 | } 66 | --------------------------------------------------------------------------------