From 687893db415f5ab9519f031e20422c02760e0ce4 Mon Sep 17 00:00:00 2001 From: Yonel Ceruto Date: Thu, 26 Jan 2017 00:11:39 -0500 Subject: [PATCH 1/2] Add post tags --- app/Resources/translations/messages.en.xlf | 4 + app/Resources/translations/messages.es.xlf | 4 + app/Resources/translations/validators.en.xlf | 4 + app/Resources/translations/validators.es.xlf | 4 + app/Resources/views/admin/blog/new.html.twig | 1 + app/Resources/views/admin/blog/show.html.twig | 3 + app/Resources/views/base.html.twig | 2 + app/Resources/views/blog/_post_tags.html.twig | 10 + app/Resources/views/blog/index.html.twig | 2 + app/Resources/views/blog/index.xml.twig | 3 + app/Resources/views/blog/post_show.html.twig | 2 + app/Resources/views/form/fields.html.twig | 9 + app/config/services.yml | 10 + .../{LoadFixtures.php => PostFixtures.php} | 95 +++++---- .../DataFixtures/ORM/TagFixtures.php | 59 ++++++ .../DataFixtures/ORM/UserFixtures.php | 67 ++++++ src/AppBundle/Entity/Post.php | 28 +++ src/AppBundle/Entity/Tag.php | 65 ++++++ src/AppBundle/Entity/User.php | 2 +- .../TagArrayToStringTransformer.php | 68 +++++++ src/AppBundle/Form/PostType.php | 6 + src/AppBundle/Form/Type/TagsInputType.php | 78 +++++++ var/data/blog.sqlite | Bin 151552 -> 163840 bytes var/data/blog_test.sqlite | Bin 150528 -> 163840 bytes web/css/bootstrap-tagsinput.css | 191 ++++++++++++++++++ web/css/main.css | 8 + web/js/bootstrap-tagsinput.min.js | 15 ++ web/js/main.js | 19 ++ 28 files changed, 718 insertions(+), 41 deletions(-) create mode 100644 app/Resources/views/blog/_post_tags.html.twig rename src/AppBundle/DataFixtures/ORM/{LoadFixtures.php => PostFixtures.php} (72%) create mode 100644 src/AppBundle/DataFixtures/ORM/TagFixtures.php create mode 100644 src/AppBundle/DataFixtures/ORM/UserFixtures.php create mode 100644 src/AppBundle/Entity/Tag.php create mode 100644 src/AppBundle/Form/DataTransformer/TagArrayToStringTransformer.php create mode 100644 src/AppBundle/Form/Type/TagsInputType.php create mode 100644 web/css/bootstrap-tagsinput.css create mode 100644 web/js/bootstrap-tagsinput.min.js diff --git a/app/Resources/translations/messages.en.xlf b/app/Resources/translations/messages.en.xlf index 7752760fd..c8f92fed0 100644 --- a/app/Resources/translations/messages.en.xlf +++ b/app/Resources/translations/messages.en.xlf @@ -202,6 +202,10 @@ label.published_at Published at + + label.tags + Tags + label.actions Actions diff --git a/app/Resources/translations/messages.es.xlf b/app/Resources/translations/messages.es.xlf index c02f992dc..699df5a66 100644 --- a/app/Resources/translations/messages.es.xlf +++ b/app/Resources/translations/messages.es.xlf @@ -206,6 +206,10 @@ label.published_at Publicado el + + label.tags + Etiquetas + label.actions Acciones diff --git a/app/Resources/translations/validators.en.xlf b/app/Resources/translations/validators.en.xlf index 8d20c1cc8..ce99cdb7f 100644 --- a/app/Resources/translations/validators.en.xlf +++ b/app/Resources/translations/validators.en.xlf @@ -14,6 +14,10 @@ post.too_short_content Post content is too short ({{ limit }} characters minimum) + + post.too_much_tags + Too much tags ({{ limit }} maximum) + comment.blank Please don't leave your comment blank! diff --git a/app/Resources/translations/validators.es.xlf b/app/Resources/translations/validators.es.xlf index 85c224ec1..1e5b46531 100644 --- a/app/Resources/translations/validators.es.xlf +++ b/app/Resources/translations/validators.es.xlf @@ -14,6 +14,10 @@ post.too_short_content El contenido del artículo es demasiado corto ({{ limit }} caracteres como mínimo) + + post.too_much_tags + Demasiadas etiquetas ({{ limit }} como máximo) + comment.blank No es posible dejar el contenido del comentario vacío. diff --git a/app/Resources/views/admin/blog/new.html.twig b/app/Resources/views/admin/blog/new.html.twig index 56c48b0b8..7c8ba0fde 100644 --- a/app/Resources/views/admin/blog/new.html.twig +++ b/app/Resources/views/admin/blog/new.html.twig @@ -10,6 +10,7 @@ {{ form_row(form.summary) }} {{ form_row(form.content) }} {{ form_row(form.publishedAt) }} + {{ form_row(form.tags) }} {{ form_widget(form.saveAndCreateNew, { label: 'label.save_and_create_new', attr: { class: 'btn btn-primary' } }) }} diff --git a/app/Resources/views/admin/blog/show.html.twig b/app/Resources/views/admin/blog/show.html.twig index 72a0169aa..3d5c6791e 100644 --- a/app/Resources/views/admin/blog/show.html.twig +++ b/app/Resources/views/admin/blog/show.html.twig @@ -4,6 +4,7 @@ {% block main %}

{{ post.title }}

+ +{% endif %} + diff --git a/app/Resources/views/blog/index.html.twig b/app/Resources/views/blog/index.html.twig index 6bf2eaa42..26897f591 100644 --- a/app/Resources/views/blog/index.html.twig +++ b/app/Resources/views/blog/index.html.twig @@ -11,6 +11,8 @@ + {{ include('blog/_post_tags.html.twig') }} +
{# The 'IS_AUTHENTICATED_FULLY' role ensures that the user has entered his/her credentials (login + password) during this session. If he/she diff --git a/app/Resources/views/form/fields.html.twig b/app/Resources/views/form/fields.html.twig index 7bbaa06be..a8bde52e8 100644 --- a/app/Resources/views/form/fields.html.twig +++ b/app/Resources/views/form/fields.html.twig @@ -15,3 +15,12 @@
{% endblock %} + +{% block tags_input_widget %} +
+ {{ form_widget(form, {'attr': {'data-toggle': 'tagsinput', 'data-tags': tags|json_encode}}) }} + + + +
+{% endblock %} diff --git a/app/config/services.yml b/app/config/services.yml index 7fedcc5d3..a4ec074ac 100644 --- a/app/config/services.yml +++ b/app/config/services.yml @@ -22,6 +22,16 @@ services: tags: - { name: twig.extension } + # This is only needed if your form type requires some dependencies to be injected + # by the container, otherwise it is unnecessary overhead and therefore not recommended + # to do this for all form type classes. + # See http://symfony.com/doc/current/best_practices/forms.html + app.form.type.tagsinput: + class: AppBundle\Form\Type\TagsInputType + arguments: ['@doctrine.orm.entity_manager'] + tags: + - { name: form.type } + # Event Listeners are classes that listen to one or more specific events. # Those events are defined in the tags added to the service definition. # See http://symfony.com/doc/current/event_dispatcher.html#creating-an-event-listener diff --git a/src/AppBundle/DataFixtures/ORM/LoadFixtures.php b/src/AppBundle/DataFixtures/ORM/PostFixtures.php similarity index 72% rename from src/AppBundle/DataFixtures/ORM/LoadFixtures.php rename to src/AppBundle/DataFixtures/ORM/PostFixtures.php index 9f0f42f18..c54ba956c 100644 --- a/src/AppBundle/DataFixtures/ORM/LoadFixtures.php +++ b/src/AppBundle/DataFixtures/ORM/PostFixtures.php @@ -13,8 +13,9 @@ use AppBundle\Entity\Comment; use AppBundle\Entity\Post; -use AppBundle\Entity\User; +use AppBundle\Entity\Tag; use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerAwareTrait; @@ -31,8 +32,9 @@ * * @author Ryan Weaver * @author Javier Eguiluz + * @author Yonel Ceruto */ -class LoadFixtures extends AbstractFixture implements ContainerAwareInterface +class PostFixtures extends AbstractFixture implements DependentFixtureInterface, ContainerAwareInterface { use ContainerAwareTrait; @@ -41,46 +43,23 @@ class LoadFixtures extends AbstractFixture implements ContainerAwareInterface */ public function load(ObjectManager $manager) { - $this->loadUsers($manager); - $this->loadPosts($manager); - } - - private function loadUsers(ObjectManager $manager) - { - $passwordEncoder = $this->container->get('security.password_encoder'); - - $johnUser = new User(); - $johnUser->setUsername('john_user'); - $johnUser->setEmail('john_user@symfony.com'); - $encodedPassword = $passwordEncoder->encodePassword($johnUser, 'kitten'); - $johnUser->setPassword($encodedPassword); - $manager->persist($johnUser); - $this->addReference('john-user', $johnUser); - - $annaAdmin = new User(); - $annaAdmin->setUsername('anna_admin'); - $annaAdmin->setEmail('anna_admin@symfony.com'); - $annaAdmin->setRoles(['ROLE_ADMIN']); - $encodedPassword = $passwordEncoder->encodePassword($annaAdmin, 'kitten'); - $annaAdmin->setPassword($encodedPassword); - $manager->persist($annaAdmin); - $this->addReference('anna-admin', $annaAdmin); - - $manager->flush(); - } + $phrases = $this->getPhrases(); + shuffle($phrases); - private function loadPosts(ObjectManager $manager) - { - foreach (range(1, 30) as $i) { + foreach ($phrases as $i => $title) { $post = new Post(); - $post->setTitle($this->getRandomPostTitle()); + $post->setTitle($title); $post->setSummary($this->getRandomPostSummary()); $post->setSlug($this->container->get('slugger')->slugify($post->getTitle())); $post->setContent($this->getPostContent()); + // This reference has been added in UserFixtures class and contains + // an instance of User entity. $post->setAuthor($this->getReference('anna-admin')); $post->setPublishedAt(new \DateTime('now - '.$i.'days')); + $this->addRandomTags($post); + foreach (range(1, 5) as $j) { $comment = new Comment(); @@ -99,6 +78,34 @@ private function loadPosts(ObjectManager $manager) $manager->flush(); } + /** + * This method must return an array of fixtures classes + * on which the implementing class depends on. + * + * @return array + */ + public function getDependencies() + { + return [ + TagFixtures::class, + UserFixtures::class, + ]; + } + + private function addRandomTags(Post $post) + { + if (0 === $count = mt_rand(0, 3)) { + return; + } + + $indexes = (array) array_rand(TagFixtures::$names, $count); + foreach ($indexes as $index) { + /** @var Tag $tag */ + $tag = $this->getReference('tag-'.$index); + $post->addTag($tag); + } + } + private function getPostContent() { return <<<'MARKDOWN' @@ -157,16 +164,24 @@ private function getPhrases() 'Sed varius a risus eget aliquam', 'Nunc viverra elit ac laoreet suscipit', 'Pellentesque et sapien pulvinar consectetur', + 'Ubi est barbatus nix', + 'Abnobas sunt hilotaes de placidus vita', + 'Ubi est audax amicitia', + 'Eposs sunt solems de superbus fortis', + 'Vae humani generis', + 'Diatrias tolerare tanquam noster caesium', + 'Teres talis orgias saepe tractare de camerarius flavum sensorem', + 'Silva de secundus galatae demitto quadra', + 'Sunt accentores vitare salvus flavum parses', + 'Potus sensim ducunt ad ferox abnoba', + 'Sunt seculaes transferre talis camerarius fluctuies', + 'Era brevis ratione est', + 'Sunt torquises imitari velox mirabilis medicinaes', + 'Cum mineralis persuadere omnes finises desiderium bi-color', + 'Bassus fatalis classiss virtualiter transferre de flavum', ]; } - private function getRandomPostTitle() - { - $titles = $this->getPhrases(); - - return $titles[array_rand($titles)]; - } - private function getRandomPostSummary($maxLength = 255) { $phrases = $this->getPhrases(); diff --git a/src/AppBundle/DataFixtures/ORM/TagFixtures.php b/src/AppBundle/DataFixtures/ORM/TagFixtures.php new file mode 100644 index 000000000..de1082035 --- /dev/null +++ b/src/AppBundle/DataFixtures/ORM/TagFixtures.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace AppBundle\DataFixtures\ORM; + +use AppBundle\Entity\Tag; +use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\Persistence\ObjectManager; + +/** + * Defines the sample data to load in the database when running the unit and + * functional tests. + * + * Execute this command to load the data: + * + * $ php bin/console doctrine:fixtures:load + * + * See http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html + * + * @author Yonel Ceruto + */ +class TagFixtures extends AbstractFixture +{ + public static $names = [ + 'Lorem', + 'ipsum', + 'consectetur', + 'adipiscing', + 'incididunt', + 'labore', + 'voluptate', + 'dolore', + 'pariatur', + ]; + + /** + * {@inheritdoc} + */ + public function load(ObjectManager $manager) + { + foreach (self::$names as $index => $name) { + $tag = new Tag(); + $tag->setName($name); + + $manager->persist($tag); + $this->addReference('tag-'.$index, $tag); + } + + $manager->flush(); + } +} diff --git a/src/AppBundle/DataFixtures/ORM/UserFixtures.php b/src/AppBundle/DataFixtures/ORM/UserFixtures.php new file mode 100644 index 000000000..7512bb418 --- /dev/null +++ b/src/AppBundle/DataFixtures/ORM/UserFixtures.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace AppBundle\DataFixtures\ORM; + +use AppBundle\Entity\User; +use Doctrine\Common\DataFixtures\AbstractFixture; +use Doctrine\Common\Persistence\ObjectManager; +use Symfony\Component\DependencyInjection\ContainerAwareInterface; +use Symfony\Component\DependencyInjection\ContainerAwareTrait; + +/** + * Defines the sample data to load in the database when running the unit and + * functional tests. + * + * Execute this command to load the data: + * + * $ php bin/console doctrine:fixtures:load + * + * See http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Yonel Ceruto + */ +class UserFixtures extends AbstractFixture implements ContainerAwareInterface +{ + use ContainerAwareTrait; + + /** + * {@inheritdoc} + */ + public function load(ObjectManager $manager) + { + $passwordEncoder = $this->container->get('security.password_encoder'); + + $annaAdmin = new User(); + $annaAdmin->setUsername('anna_admin'); + $annaAdmin->setEmail('anna_admin@symfony.com'); + $annaAdmin->setRoles(['ROLE_ADMIN']); + $encodedPassword = $passwordEncoder->encodePassword($annaAdmin, 'kitten'); + $annaAdmin->setPassword($encodedPassword); + $manager->persist($annaAdmin); + // In case if fixture objects have relations to other fixtures, adds a reference + // to that object by name and later reference it to form a relation. + // See https://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects-between-fixtures + $this->addReference('anna-admin', $annaAdmin); + + $johnUser = new User(); + $johnUser->setUsername('john_user'); + $johnUser->setEmail('john_user@symfony.com'); + $encodedPassword = $passwordEncoder->encodePassword($johnUser, 'kitten'); + $johnUser->setPassword($encodedPassword); + $manager->persist($johnUser); + $this->addReference('john-user', $johnUser); + + $manager->flush(); + } +} diff --git a/src/AppBundle/Entity/Post.php b/src/AppBundle/Entity/Post.php index 7482d243c..2b557b533 100644 --- a/src/AppBundle/Entity/Post.php +++ b/src/AppBundle/Entity/Post.php @@ -19,6 +19,7 @@ * * @author Ryan Weaver * @author Javier Eguiluz + * @author Yonel Ceruto */ class Post { @@ -99,10 +100,20 @@ class Post */ private $comments; + /** + * @var Tag[]|ArrayCollection + * + * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Tag", cascade={"persist"}) + * @ORM\JoinTable(name="symfony_demo_post_tag") + * @Assert\Count(max="4", maxMessage="post.too_much_tags") + */ + private $tags; + public function __construct() { $this->publishedAt = new \DateTime(); $this->comments = new ArrayCollection(); + $this->tags = new ArrayCollection(); } public function getId() @@ -211,4 +222,21 @@ public function setSummary($summary) { $this->summary = $summary; } + + public function addTag(Tag $tag) + { + if (!$this->tags->contains($tag)) { + $this->tags->add($tag); + } + } + + public function removeTag(Tag $tag) + { + $this->tags->removeElement($tag); + } + + public function getTags() + { + return $this->tags; + } } diff --git a/src/AppBundle/Entity/Tag.php b/src/AppBundle/Entity/Tag.php new file mode 100644 index 000000000..0ba291f92 --- /dev/null +++ b/src/AppBundle/Entity/Tag.php @@ -0,0 +1,65 @@ + + */ +class Tag implements \JsonSerializable +{ + /** + * @var int + * + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") + */ + private $id; + + /** + * @var string + * + * @ORM\Column(type="string", unique=true) + */ + private $name; + + public function getId() + { + return $this->id; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + public function getName() + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() + { + return $this->name; + } + + public function __toString() + { + return $this->name; + } +} diff --git a/src/AppBundle/Entity/User.php b/src/AppBundle/Entity/User.php index b5b7dcc83..c163c7dbc 100644 --- a/src/AppBundle/Entity/User.php +++ b/src/AppBundle/Entity/User.php @@ -132,7 +132,7 @@ public function getSalt() // we're using bcrypt in security.yml to encode the password, so // the salt value is built-in and you don't have to generate one - return null; + return; } /** diff --git a/src/AppBundle/Form/DataTransformer/TagArrayToStringTransformer.php b/src/AppBundle/Form/DataTransformer/TagArrayToStringTransformer.php new file mode 100644 index 000000000..19c22f741 --- /dev/null +++ b/src/AppBundle/Form/DataTransformer/TagArrayToStringTransformer.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace AppBundle\Form\DataTransformer; + +use AppBundle\Entity\Tag; +use Doctrine\Common\Persistence\ObjectManager; +use Symfony\Component\Form\DataTransformerInterface; + +/** + * This data transformer is used to translate the array of tags into a comma separated format + * that can be displayed and managed by Bootstrap-tagsinput js plugin (and back on submit). + * + * See http://symfony.com/doc/current/form/data_transformers.html + * + * @author Yonel Ceruto + */ +class TagArrayToStringTransformer implements DataTransformerInterface +{ + private $manager; + + public function __construct(ObjectManager $manager) + { + $this->manager = $manager; + } + + /** + * {@inheritdoc} + */ + public function transform($array) + { + /* @var Tag[] $array */ + return implode(',', $array); + } + + /** + * {@inheritdoc} + */ + public function reverseTransform($string) + { + if ('' === $string || null === $string) { + return []; + } + + $names = explode(',', $string); + + $tags = $this->manager->getRepository(Tag::class)->findBy([ + 'name' => $names, + ]); + + $newNames = array_diff($names, $tags); + foreach ($newNames as $name) { + $tag = new Tag(); + $tag->setName($name); + $tags[] = $tag; + } + + return $tags; + } +} diff --git a/src/AppBundle/Form/PostType.php b/src/AppBundle/Form/PostType.php index 45e6ac0a2..743df1ad8 100644 --- a/src/AppBundle/Form/PostType.php +++ b/src/AppBundle/Form/PostType.php @@ -13,6 +13,7 @@ use AppBundle\Entity\Post; use AppBundle\Form\Type\DateTimePickerType; +use AppBundle\Form\Type\TagsInputType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\FormBuilderInterface; @@ -23,6 +24,7 @@ * * @author Ryan Weaver * @author Javier Eguiluz + * @author Yonel Ceruto */ class PostType extends AbstractType { @@ -55,6 +57,10 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('publishedAt', DateTimePickerType::class, [ 'label' => 'label.published_at', ]) + ->add('tags', TagsInputType::class, [ + 'label' => 'label.tags', + 'required' => false, + ]) ; } diff --git a/src/AppBundle/Form/Type/TagsInputType.php b/src/AppBundle/Form/Type/TagsInputType.php new file mode 100644 index 000000000..6ea9c6695 --- /dev/null +++ b/src/AppBundle/Form/Type/TagsInputType.php @@ -0,0 +1,78 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace AppBundle\Form\Type; + +use AppBundle\Entity\Tag; +use AppBundle\Form\DataTransformer\TagArrayToStringTransformer; +use Doctrine\Common\Persistence\ObjectManager; +use Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormView; +use Symfony\Component\OptionsResolver\OptionsResolver; + +/** + * Defines the custom form field type used to manipulate tags values across + * Bootstrap-tagsinput javascript plugin. + * + * See http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html + * + * @author Yonel Ceruto + */ +class TagsInputType extends AbstractType +{ + private $manager; + + public function __construct(ObjectManager $manager) + { + $this->manager = $manager; + } + + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options) + { + $builder + ->addModelTransformer(new TagArrayToStringTransformer($this->manager)) + ->addModelTransformer(new CollectionToArrayTransformer()) + ; + } + + /** + * {@inheritdoc} + */ + public function buildView(FormView $view, FormInterface $form, array $options) + { + $view->vars['tags'] = $this->manager->getRepository(Tag::class)->findAll(); + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'by_reference' => false, + ]); + } + + /** + * {@inheritdoc} + */ + public function getParent() + { + return TextType::class; + } +} diff --git a/var/data/blog.sqlite b/var/data/blog.sqlite index f15d780718b6ef36ae171d3f383d5bf283381cb6..86188e51c1dcf1d9ff3c3baac054a3d0fe37827c 100644 GIT binary patch literal 163840 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 z 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 diff --git a/var/data/blog_test.sqlite b/var/data/blog_test.sqlite index 287a6fc07676c9e145a9e67644043a9e54431975..86188e51c1dcf1d9ff3c3baac054a3d0fe37827c 100644 GIT binary patch literal 163840 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 Qt_Ek;BzIifNYncN0d^#2^8f$< diff --git a/web/css/bootstrap-tagsinput.css b/web/css/bootstrap-tagsinput.css new file mode 100644 index 000000000..5e1e3e2e0 --- /dev/null +++ b/web/css/bootstrap-tagsinput.css @@ -0,0 +1,191 @@ +/* ------------------------------------------------------------------------------ + * + * # Twiter Typeahead + * + * Styles for tagsinput.js - input suggestion engine + * + * ---------------------------------------------------------------------------- */ +.twitter-typeahead { + width: 100%; +} +.typeahead, +.tt-query, +.tt-hint { + outline: 0; +} +.tt-hint { + color: #999; +} +.tt-menu{ + width: 100%; + margin-top: 1px; + min-width: 180px; + padding: 7px 0; + background-color: #fff; + border: 1px solid rgba(0,0,0,0.15); + border-radius: 4px; + max-height: 300px; + overflow-y: auto; + -webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175); + box-shadow: 0 6px 12px rgba(0,0,0,0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.typeahead-scrollable .tt-menu{ + max-height: 250px; +} +.typeahead-rtl .tt-menu{ + text-align: right; +} +.tt-suggestion { + padding: 8px 15px; + cursor: pointer; +} +.tt-suggestion.tt-cursor { + background-color: #f5f5f5; +} +.tt-suggestion p { + margin: 0; +} +.tt-suggestion.tt-selectable:before { + content: '\f02b'; + font-family: 'FontAwesome'; + display: inline-block; + font-size: 15px; + margin-right: 0.5em; + color: inherit; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.tt-dataset-group .tt-suggestion { + padding-left: 24px; + padding-right: 24px; +} +.tt-heading { + font-size: 11px; + line-height: 1.82; + padding: 8px 15px; + text-transform: uppercase; + display: block; + font-weight: 700; + margin-top: 2px; + margin-bottom: 2px; +} +.tt-suggestion:hover, +.tt-suggestion:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #18bc9c; +} +/* ------------------------------------------------------------------------------ +* +* # Bootstrap tags input +* +* Styles for tagsinput.js - tags input for Bootstrap +* +* ---------------------------------------------------------------------------- */ +.bootstrap-tagsinput { + display: table-cell; + vertical-align: middle; + width: 100%; + height: 45px; + padding: 0; + font-size: 15px; + line-height: 1.42857143; + color: #2c3e50; + background-color: #ffffff; + background-image: none; + border: 2px solid #dce4ec; + border-radius: 4px; + border-bottom-right-radius: 0; + border-top-right-radius: 0; + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} +.has-error .bootstrap-tagsinput { + border-color: #e74c3c !important; +} +.bootstrap-tagsinput.focus { + border-color: #2c3e50; + outline: 0; + box-shadow: none; +} +.bootstrap-tagsinput input { + border: 0; + outline: 0; + background-color: transparent; + padding: 5px 11px; + margin-top: 2px; + margin-left: 2px; + width: auto !important; + min-width: 100px; + font-size: 15px; + line-height: 1.6666667; + -webkit-box-shadow: none; + box-shadow: none; +} +.bootstrap-tagsinput input:focus { + border: none; + box-shadow: none; +} +.bootstrap-tagsinput .twitter-typeahead { + width: auto; +} +.bootstrap-tagsinput .tt-menu { + margin-top: 5px; + min-width: 200px; +} +.bootstrap-tagsinput .tag { + margin: 1px 0 0 3px; + border: 0; + border-radius: .25em; + padding: 5px 11px; + padding-right: 30px; + float: left; + font-size: 15px; + line-height: 1.6666667; + font-weight: 400; + text-transform: none; + position: relative; + background-color: #18bc9c; + color: #fff; +} +.has-error .bootstrap-tagsinput .tag { + background-color: #e74c3c !important; +} +.bootstrap-tagsinput .tag [data-role="remove"] { + cursor: pointer; + color: inherit; + position: absolute; + top: 50%; + right: 11px; + line-height: 1; + margin-top: -5.5px; + opacity: 0.7; + filter: alpha(opacity=70); +} +.bootstrap-tagsinput .tag [data-role="remove"]:hover { + opacity: 1; + filter: alpha(opacity=100); +} +.bootstrap-tagsinput .tag:before { + content: '\f02b'; + font-family: 'FontAwesome'; + display: inline-block; + font-size: 15px; + margin-right: 0.5em; + color: #fff; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.bootstrap-tagsinput .tag [data-role="remove"]:after { + content: '\f00d'; + font-family: 'FontAwesome'; + display: block; + font-size: 13px; + color: #fff; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/web/css/main.css b/web/css/main.css index 362fc749f..f66edc1c2 100644 --- a/web/css/main.css +++ b/web/css/main.css @@ -218,6 +218,10 @@ body#login #login-users-help p .console { margin-right: 1.5em; } +.post-tags .label { + margin-right: 5px; +} + /* Page: 'Blog index' ------------------------------------------------------------------------- */ body#blog_index h1 { @@ -233,6 +237,10 @@ body#blog_index .post-metadata { margin-bottom: 8px; } +body#blog_index .post-tags { + margin-bottom: 15px; +} + /* Page: 'Blog post show' ------------------------------------------------------------------------- */ body#blog_post_show h3 { diff --git a/web/js/bootstrap-tagsinput.min.js b/web/js/bootstrap-tagsinput.min.js new file mode 100644 index 000000000..611333a08 --- /dev/null +++ b/web/js/bootstrap-tagsinput.min.js @@ -0,0 +1,15 @@ +/*! + * typeahead.js 0.11.1 + * https://github.com/twitter/typeahead.js + * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT + */ + +!function(a,b){"function"==typeof define&&define.amd?define("bloodhound",["jquery"],function(c){return a.Bloodhound=b(c)}):"object"==typeof exports?module.exports=b(require("jquery")):a.Bloodhound=b(jQuery)}(this,function(a){var b=function(){"use strict";return{isMsie:function(){return/(msie|trident)/i.test(navigator.userAgent)?navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]:!1},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},isElement:function(a){return!(!a||1!==a.nodeType)},isJQuery:function(b){return b instanceof a},toStr:function(a){return b.isUndefined(a)||null===a?"":a+""},bind:a.proxy,each:function(b,c){function d(a,b){return c(b,a)}a.each(b,d)},map:a.map,filter:a.grep,every:function(b,c){var d=!0;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?void 0:!1}),!!d):d},some:function(b,c){var d=!1;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?!1:void 0}),!!d):d},mixin:a.extend,identity:function(a){return a},clone:function(b){return a.extend(!0,{},b)},getIdGenerator:function(){var a=0;return function(){return a++}},templatify:function(b){function c(){return String(b)}return a.isFunction(b)?b:c},defer:function(a){setTimeout(a,0)},debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},throttle:function(a,b){var c,d,e,f,g,h;return g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)},function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,0>=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},stringify:function(a){return b.isString(a)?a:JSON.stringify(a)},noop:function(){}}}(),c="0.11.1",d=function(){"use strict";function a(a){return a=b.toStr(a),a?a.split(/\s+/):[]}function c(a){return a=b.toStr(a),a?a.split(/\W+/):[]}function d(a){return function(c){return c=b.isArray(c)?c:[].slice.call(arguments,0),function(d){var e=[];return b.each(c,function(c){e=e.concat(a(b.toStr(d[c])))}),e}}}return{nonword:c,whitespace:a,obj:{nonword:d(c),whitespace:d(a)}}}(),e=function(){"use strict";function c(c){this.maxSize=b.isNumber(c)?c:100,this.reset(),this.maxSize<=0&&(this.set=this.get=a.noop)}function d(){this.head=this.tail=null}function e(a,b){this.key=a,this.val=b,this.prev=this.next=null}return b.mixin(c.prototype,{set:function(a,b){var c,d=this.list.tail;this.size>=this.maxSize&&(this.list.remove(d),delete this.hash[d.key],this.size--),(c=this.hash[a])?(c.val=b,this.list.moveToFront(c)):(c=new e(a,b),this.list.add(c),this.hash[a]=c,this.size++)},get:function(a){var b=this.hash[a];return b?(this.list.moveToFront(b),b.val):void 0},reset:function(){this.size=0,this.hash={},this.list=new d}}),b.mixin(d.prototype,{add:function(a){this.head&&(a.next=this.head,this.head.prev=a),this.head=a,this.tail=this.tail||a},remove:function(a){a.prev?a.prev.next=a.next:this.head=a.next,a.next?a.next.prev=a.prev:this.tail=a.prev},moveToFront:function(a){this.remove(a),this.add(a)}}),c}(),f=function(){"use strict";function c(a,c){this.prefix=["__",a,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+b.escapeRegExChars(this.prefix)),this.ls=c||h,!this.ls&&this._noop()}function d(){return(new Date).getTime()}function e(a){return JSON.stringify(b.isUndefined(a)?null:a)}function f(b){return a.parseJSON(b)}function g(a){var b,c,d=[],e=h.length;for(b=0;e>b;b++)(c=h.key(b)).match(a)&&d.push(c.replace(a,""));return d}var h;try{h=window.localStorage,h.setItem("~~~","!"),h.removeItem("~~~")}catch(i){h=null}return b.mixin(c.prototype,{_prefix:function(a){return this.prefix+a},_ttlKey:function(a){return this._prefix(a)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=b.noop},_safeSet:function(a,b){try{this.ls.setItem(a,b)}catch(c){"QuotaExceededError"===c.name&&(this.clear(),this._noop())}},get:function(a){return this.isExpired(a)&&this.remove(a),f(this.ls.getItem(this._prefix(a)))},set:function(a,c,f){return b.isNumber(f)?this._safeSet(this._ttlKey(a),e(d()+f)):this.ls.removeItem(this._ttlKey(a)),this._safeSet(this._prefix(a),e(c))},remove:function(a){return this.ls.removeItem(this._ttlKey(a)),this.ls.removeItem(this._prefix(a)),this},clear:function(){var a,b=g(this.keyMatcher);for(a=b.length;a--;)this.remove(b[a]);return this},isExpired:function(a){var c=f(this.ls.getItem(this._ttlKey(a)));return b.isNumber(c)&&d()>c?!0:!1}}),c}(),g=function(){"use strict";function c(a){a=a||{},this.cancelled=!1,this.lastReq=null,this._send=a.transport,this._get=a.limiter?a.limiter(this._get):this._get,this._cache=a.cache===!1?new e(0):h}var d=0,f={},g=6,h=new e(10);return c.setMaxPendingRequests=function(a){g=a},c.resetCache=function(){h.reset()},b.mixin(c.prototype,{_fingerprint:function(b){return b=b||{},b.url+b.type+a.param(b.data||{})},_get:function(a,b){function c(a){b(null,a),k._cache.set(i,a)}function e(){b(!0)}function h(){d--,delete f[i],k.onDeckRequestArgs&&(k._get.apply(k,k.onDeckRequestArgs),k.onDeckRequestArgs=null)}var i,j,k=this;i=this._fingerprint(a),this.cancelled||i!==this.lastReq||((j=f[i])?j.done(c).fail(e):g>d?(d++,f[i]=this._send(a).done(c).fail(e).always(h)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(c,d){var e,f;d=d||a.noop,c=b.isString(c)?{url:c}:c||{},f=this._fingerprint(c),this.cancelled=!1,this.lastReq=f,(e=this._cache.get(f))?d(null,e):this._get(c,d)},cancel:function(){this.cancelled=!0}}),c}(),h=window.SearchIndex=function(){"use strict";function c(c){c=c||{},c.datumTokenizer&&c.queryTokenizer||a.error("datumTokenizer and queryTokenizer are both required"),this.identify=c.identify||b.stringify,this.datumTokenizer=c.datumTokenizer,this.queryTokenizer=c.queryTokenizer,this.reset()}function d(a){return a=b.filter(a,function(a){return!!a}),a=b.map(a,function(a){return a.toLowerCase()})}function e(){var a={};return a[i]=[],a[h]={},a}function f(a){for(var b={},c=[],d=0,e=a.length;e>d;d++)b[a[d]]||(b[a[d]]=!0,c.push(a[d]));return c}function g(a,b){var c=0,d=0,e=[];a=a.sort(),b=b.sort();for(var f=a.length,g=b.length;f>c&&g>d;)a[c]b[d]?d++:(e.push(a[c]),c++,d++);return e}var h="c",i="i";return b.mixin(c.prototype,{bootstrap:function(a){this.datums=a.datums,this.trie=a.trie},add:function(a){var c=this;a=b.isArray(a)?a:[a],b.each(a,function(a){var f,g;c.datums[f=c.identify(a)]=a,g=d(c.datumTokenizer(a)),b.each(g,function(a){var b,d,g;for(b=c.trie,d=a.split("");g=d.shift();)b=b[h][g]||(b[h][g]=e()),b[i].push(f)})})},get:function(a){var c=this;return b.map(a,function(a){return c.datums[a]})},search:function(a){var c,e,j=this;return c=d(this.queryTokenizer(a)),b.each(c,function(a){var b,c,d,f;if(e&&0===e.length)return!1;for(b=j.trie,c=a.split("");b&&(d=c.shift());)b=b[h][d];return b&&0===c.length?(f=b[i].slice(0),void(e=e?g(e,f):f)):(e=[],!1)}),e?b.map(f(e),function(a){return j.datums[a]}):[]},all:function(){var a=[];for(var b in this.datums)a.push(this.datums[b]);return a},reset:function(){this.datums={},this.trie=e()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),c}(),i=function(){"use strict";function a(a){this.url=a.url,this.ttl=a.ttl,this.cache=a.cache,this.prepare=a.prepare,this.transform=a.transform,this.transport=a.transport,this.thumbprint=a.thumbprint,this.storage=new f(a.cacheKey)}var c;return c={data:"data",protocol:"protocol",thumbprint:"thumbprint"},b.mixin(a.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(a){this.cache&&(this.storage.set(c.data,a,this.ttl),this.storage.set(c.protocol,location.protocol,this.ttl),this.storage.set(c.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var a,b={};return this.cache?(b.data=this.storage.get(c.data),b.protocol=this.storage.get(c.protocol),b.thumbprint=this.storage.get(c.thumbprint),a=b.thumbprint!==this.thumbprint||b.protocol!==location.protocol,b.data&&!a?b.data:null):null},fromNetwork:function(a){function b(){a(!0)}function c(b){a(null,e.transform(b))}var d,e=this;a&&(d=this.prepare(this._settings()),this.transport(d).fail(b).done(c))},clear:function(){return this.storage.clear(),this}}),a}(),j=function(){"use strict";function a(a){this.url=a.url,this.prepare=a.prepare,this.transform=a.transform,this.transport=new g({cache:a.cache,limiter:a.limiter,transport:a.transport})}return b.mixin(a.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(a,b){function c(a,c){b(a?[]:e.transform(c))}var d,e=this;if(b)return a=a||"",d=this.prepare(a,this._settings()),this.transport.get(d,c)},cancelLastRequest:function(){this.transport.cancel()}}),a}(),k=function(){"use strict";function d(d){var e;return d?(e={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:b.identity,transform:b.identity,transport:null},d=b.isString(d)?{url:d}:d,d=b.mixin(e,d),!d.url&&a.error("prefetch requires url to be set"),d.transform=d.filter||d.transform,d.cacheKey=d.cacheKey||d.url,d.thumbprint=c+d.thumbprint,d.transport=d.transport?h(d.transport):a.ajax,d):null}function e(c){var d;if(c)return d={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:b.identity,transport:null},c=b.isString(c)?{url:c}:c,c=b.mixin(d,c),!c.url&&a.error("remote requires url to be set"),c.transform=c.filter||c.transform,c.prepare=f(c),c.limiter=g(c),c.transport=c.transport?h(c.transport):a.ajax,delete c.replace,delete c.wildcard,delete c.rateLimitBy,delete c.rateLimitWait,c}function f(a){function b(a,b){return b.url=f(b.url,a),b}function c(a,b){return b.url=b.url.replace(g,encodeURIComponent(a)),b}function d(a,b){return b}var e,f,g;return e=a.prepare,f=a.replace,g=a.wildcard,e?e:e=f?b:a.wildcard?c:d}function g(a){function c(a){return function(c){return b.debounce(c,a)}}function d(a){return function(c){return b.throttle(c,a)}}var e,f,g;return e=a.limiter,f=a.rateLimitBy,g=a.rateLimitWait,e||(e=/^throttle$/i.test(f)?d(g):c(g)),e}function h(c){return function(d){function e(a){b.defer(function(){g.resolve(a)})}function f(a){b.defer(function(){g.reject(a)})}var g=a.Deferred();return c(d,e,f),g}}return function(c){var f,g;return f={initialize:!0,identify:b.stringify,datumTokenizer:null,queryTokenizer:null,sufficient:5,sorter:null,local:[],prefetch:null,remote:null},c=b.mixin(f,c||{}),!c.datumTokenizer&&a.error("datumTokenizer is required"),!c.queryTokenizer&&a.error("queryTokenizer is required"),g=c.sorter,c.sorter=g?function(a){return a.sort(g)}:b.identity,c.local=b.isFunction(c.local)?c.local():c.local,c.prefetch=d(c.prefetch),c.remote=e(c.remote),c}}(),l=function(){"use strict";function c(a){a=k(a),this.sorter=a.sorter,this.identify=a.identify,this.sufficient=a.sufficient,this.local=a.local,this.remote=a.remote?new j(a.remote):null,this.prefetch=a.prefetch?new i(a.prefetch):null,this.index=new h({identify:this.identify,datumTokenizer:a.datumTokenizer,queryTokenizer:a.queryTokenizer}),a.initialize!==!1&&this.initialize()}var e;return e=window&&window.Bloodhound,c.noConflict=function(){return window&&(window.Bloodhound=e),c},c.tokenizers=d,b.mixin(c.prototype,{__ttAdapter:function(){function a(a,b,d){return c.search(a,b,d)}function b(a,b){return c.search(a,b)}var c=this;return this.remote?a:b},_loadPrefetch:function(){function b(a,b){return a?c.reject():(e.add(b),e.prefetch.store(e.index.serialize()),void c.resolve())}var c,d,e=this;return c=a.Deferred(),this.prefetch?(d=this.prefetch.fromCache())?(this.index.bootstrap(d),c.resolve()):this.prefetch.fromNetwork(b):c.resolve(),c.promise()},_initialize:function(){function a(){b.add(b.local)}var b=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done(a),this.initPromise},initialize:function(a){return!this.initPromise||a?this._initialize():this.initPromise},add:function(a){return this.index.add(a),this},get:function(a){return a=b.isArray(a)?a:[].slice.call(arguments),this.index.get(a)},search:function(a,c,d){function e(a){var c=[];b.each(a,function(a){!b.some(f,function(b){return g.identify(a)===g.identify(b)})&&c.push(a)}),d&&d(c)}var f,g=this;return f=this.sorter(this.index.search(a)),c(this.remote?f.slice():f),this.remote&&f.length=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},stringify:function(a){return b.isString(a)?a:JSON.stringify(a)},noop:function(){}}}(),c=function(){"use strict";function a(a){var g,h;return h=b.mixin({},f,a),g={css:e(),classes:h,html:c(h),selectors:d(h)},{css:g.css,html:g.html,classes:g.classes,selectors:g.selectors,mixin:function(a){b.mixin(a,g)}}}function c(a){return{wrapper:'',menu:'
'}}function d(a){var c={};return b.each(a,function(a,b){c[b]="."+a}),c}function e(){var a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return b.isMsie()&&b.mixin(a.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),a}var f={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return a}(),d=function(){"use strict";function c(b){b&&b.el||a.error("EventBus initialized without el"),this.$el=a(b.el)}var d,e;return d="typeahead:",e={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},b.mixin(c.prototype,{_trigger:function(b,c){var e;return e=a.Event(d+b),(c=c||[]).unshift(e),this.$el.trigger.apply(this.$el,c),e},before:function(a){var b,c;return b=[].slice.call(arguments,1),c=this._trigger("before"+a,b),c.isDefaultPrevented()},trigger:function(a){var b;this._trigger(a,[].slice.call(arguments,1)),(b=e[a])&&this._trigger(b,[].slice.call(arguments,1))}}),c}(),e=function(){"use strict";function a(a,b,c,d){var e;if(!c)return this;for(b=b.split(i),c=d?h(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function b(b,c,d){return a.call(this,"async",b,c,d)}function c(b,c,d){return a.call(this,"sync",b,c,d)}function d(a){var b;if(!this._callbacks)return this;for(a=a.split(i);b=a.shift();)delete this._callbacks[b];return this}function e(a){var b,c,d,e,g;if(!this._callbacks)return this;for(a=a.split(i),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=f(c.sync,this,[b].concat(d)),g=f(c.async,this,[b].concat(d)),e()&&j(g);return this}function f(a,b,c){function d(){for(var d,e=0,f=a.length;!d&&f>e;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function g(){var a;return a=window.setImmediate?function(a){setImmediate(function(){a()})}:function(a){setTimeout(function(){a()},0)}}function h(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var i=/\s+/,j=g();return{onSync:c,onAsync:b,off:d,trigger:e}}(),f=function(a){"use strict";function c(a,c,d){for(var e,f=[],g=0,h=a.length;h>g;g++)f.push(b.escapeRegExChars(a[g]));return e=d?"\\b("+f.join("|")+")\\b":"("+f.join("|")+")",c?new RegExp(e):new RegExp(e,"i")}var d={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(e){function f(b){var c,d,f;return(c=h.exec(b.data))&&(f=a.createElement(e.tagName),e.className&&(f.className=e.className),d=b.splitText(c.index),d.splitText(c[0].length),f.appendChild(d.cloneNode(!0)),b.parentNode.replaceChild(f,d)),!!c}function g(a,b){for(var c,d=3,e=0;e