The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for Mojolicious application Slovo

2023.03.22
    * Tested with Perl 5.36.0, Mojolicious~9.31, Net::SMTP~3.15
      Mojolicious::Plugin::OpenAPI~5.09, Authen::SASL~2.16,
      Class::Method::Modifiers~2.15, Cpanel::JSON::XS~4.36,
      Mojolicious::Plugin::OpenAPI~5.09, Net::SMTP~3.15, Perl::Critic~1.150,
      Test::PerlTidy~20230226.
    * No code changes.

2022.10.22
    * Upgrade to Mojolicious::Plugin::OpenAPI 5.07, Mojo::SQLite 3.009,
      Mojolicious 9.28, Cpanel::JSON::XS 4.32, Minion::Backend::SQLite 5.0.7,
      Mojolicious::Plugin::Authentication 1.39, Mojolicious::Plugin::OpenAPI
      5.07, Net::SMTP 3.14, Test::PerlTidy 20220902

2022.2.16
    * Allowed plugins to plug their own content into celini by setting their
      own semantic 'data_type's. The end user should only chose the new
      data_type for a newly created celina and it will be rendered in the site
      by the corresponding template, provided by the plugin.
    * Made Test::Mojo::Role::Slovo carp if copying of a file for testing does
      not succeed. This is to debug if later some test fails.

2022.2.14
    * Improved design for small screens.
    * Changed versioning to not contain preceding zeroes as they are
      misinterpretted by MakeMaker.

2022.02.12
    * Moved Test::Mojo::Role::Slovo from t/lib to lib  and refactored it to
      make it accessible for external plugins.
    * Made Slovo->home invokable as a class method too.

2022.02.02
    * Fixed bug in canonical_path creation under CGI.
    * Improved site.css (mobile devices) and added new icons in Themes::Malka.
    * Removed <aside id="widgets"> as it not really needed.
    * Other small optimisations in DefaultHelpers.
    * New codename: U+2C15 GLAGOLITIC CAPITAL LETTER TVRIDO (Ⱅ) - Next letter
      in the glagolithic alphabet. By coincidence or not, the first external
      plugin for Slovo, named Slovo::Plugin::Prodan is being developed, so we
      must get hard (tvridi) and stable. This will be the main spirit of this
      codename - stability - as little as possible breaking changes.
     

2021.12.12
    * Set default max-age for Cache-Control HTTP header to one hour.
    * Canonical URL for unicode domain names now are generated with the domain
      ASIS.
    * Using a burger menu in partials/_header.html.ep in Slovo::Themes::Malka
      for better UX on small screens. The language menu is temporarily
      disabled. The login button is hidden on small screens. Added a new link
      to the respective page in partials/_pisanie_otkysy.html.ep at the bottom
      of each div.card for better UX on small screens. Reduced the font-size
      for H1 tags on small screens. Added new SVG icons.

2021.12.02
    * Fixed error in template partials/_kniga.html.ep in Slovo::Themes::Malka.
    * Returned again to showing the celina used for title of a stranica in
      Slovo::Controller::Celini->index().
    * Added social icons from materialdesignicons.com and icon-icons.com to
      Slovo::Plugin::Themes::Malka and used them in the footer. Slightly
      improved CSS for mobile devices.
    * Enabled partials/_right.html.ep and added <aside id="widgets"> to it to
      enable plugins to put there content.
    * Moved Plugins TagHelpers and DefaultHelpers to slovo.conf just after
      Authentication plugin to allow their helpers to be used by plugins which
      load next and still override Authentication's is_user_authenticated.
    * Added two new helpers to TagHelpers plugin to allow other plugins to put
      css and js files to $app->defaults so they are automatically available in
      stash as <link> and <script> tags. Used the new feature in Malka.pm

2021.11.22
    * Fixed wrong separator for sharer urls in _footer_right.html.ep
    * Simplified logic for caching pages.
    * Improved cannonical url generation.

2021.11.20
    * Fixed: Image filenames for files generated from base64 data were not
      really unique.
    * Added several simple sharing buttons - No JS.
    * Improved footer CSS.
    * Added author's name, 'created' and 'updated' dates at the bottom of some
      celini templates.
    * Happy birthday to my muse!

2021.11.12
    * Fixed wrong Mojolicious version in Makefile.PL to 9.22.

2021.11.11
    * Fixed og attributes for article.
    * Upgraded to Mojo::SQLite 3.007, Cpanel::JSON::XS 4.27,
      Minion::Backend::SQLite 5.05, Mojolicious::Plugin::PODViewer 0.007,
      Mojolicious::Plugin::Authentication 1.37, Mojolicious::Plugin::OpenAPI 5.00,
      Mojolicious::Plugin::RoutesConfig 0.07, Net::SMTP 3.13 Role::Tiny 2.002004,
      Mojolicious 9.23.
    * Replaced login form with a new one. Switching to theme Malka.
    * Added new layout for control panel layouts/uprava.html.ep.
    * Slightly improved documentation of Slovo::Themes::Malka.

2021.06.16
    * Fixed failing tests with Mojolicious::Plugin::OpenAPI 4.04.
    * Upgraded to Mojolicious::Plugin::OpenAPI 4.04.

2021.06.06
    * Updated progress in the documentation.
    * Allow commands from the Mojolicious::Command::Author::generate namespace
      to be listed and executed by Slovo on the command-line. Added tests.
    * Added README.pod to the distribution.
    * Fixed missing hidden field for permissions when creating a page.

2021.05.21
    * Fix canonical URL when it can contain a double slash.

2021.05.15
    * Added initial OpenGraph support.
    * Optimised _around_execute in Slovo::Controller::Role::Stranica to do as
      little as possible when serving cached content.

2021.02.20
    * Renamed configuration section `plugins` to `load_plugins` so it does not
      clash with the same feature in Mojolicious 9.0. Kept the feature as Slovo's
      one is more flexible. Slovo is compatible with Mojolicious 9.0.
    * Added `mojo` subfolder to the mod_rewrite rule for public/ in the
      .htaccess file template so we can put static files like jquery/jquery.js
      there and they will be served directly by Apache.
    * Made scrollbar-width wider in Slovo::Themes::Malka.
    * Upgraded to Mojolicious 9.02.

2021.02.01
    * We now require minimum version of Perl 5.26 to remove from our code
      `no warnings "experimental::lexical_subs";`. Respectively we explicitly
      require at least ExtUtils::MakeMaker 7.24.
    * Since Perl 5.26 "the lexical_subs feature has no effect; all Perl code
      can use lexical (private) subroutines, regardless of what feature
      declarations are in scope." So we replaced `use feature qw(lexical_subs
      unicode_strings);` with `use feature ':5.26';`. We just use the whole
      feature bundle now.
    * Changed behavior of Slovo::Command::Author::inflate and improved its
      documentation. The different types of files are now prefixed with
      `templates/` and `public/` only if they are inflated into the
      $app->home directory.
    * Improved lib/Slovo.pm's POD.
    * Database migration is not automatic any more. From now on one must run
      `bin/slovo eval 'app->dbx->migrations->migrate'`.
    * Added new `BEFORE UPDATE` SQL triggers that check if pid!=id and if the
      parent record is a directory, and throw an SQL statement error.
    * Added meta tags for 'author', 'description' and 'keywords' in
      partials/_head.html.ep with default content from the respective row in
      table celini.

2021.01.11
    * Happy new year!
    * Fixed a bug in Slovo::Controller::Role::Stranica::page_id_options(...)
      which caused unpleasant recursion in site menu when the root page is
      edited and saved. Root page was being set with pid=id, but it should
      always have pid=0.
    * Moved templates from themes/malka to lib/Slovo/Themes/Malka.pm.
    * Deleted existing default templates for the "site" part of the templates.
      Now Slovo::Themes::Malka is the default theme for the site.
    * Implemented Slovo::Command::Author::inflate.


2020.12.22
    * Added new lightweight theme, named "malka". Using
      https://github.com/necolas/normalize.css and
      https://github.com/jenil/chota.
      Work in progress!!
    * MUI CSS is deprecated and may be removed soon.
      The new theme will be the default.
    * Now lib/Slovo/resources/templates comes after $app->home/templates in
      @{$app->static->paths} and lib/Slovo/resources/public comes after
      $app->home/public in @{$app->renderer->paths}.
    * Added new column 'templates' to table 'domove'. This way every domain can
      switch easily the theme without moving files around - just by pointing to
      the theme directory where the templates reside.
    * Implemented Slovo::Cache to support mutiple domains theming by storing
      compiled templates with different key prefix per domain.
    * Moved .perlcriticrc to the root directory of the project.
    * In the control panel the pages now are sorted only by 'sorting'.
    * Mojo deprecated the default behavior of writing to log/$mode.log and we
      implemented by default writing to log/$moniker.log if possible.
    * Refactored and improved Slovo::Controller::Role::Stranica and the
      corresponding Controller and Model classes, tests and templates.
    * Many bugs were fixed along the way.


2020.12.12
    * Improved messages and documentation of commands a2htaccess and novy_dom.
    * Now default permissions for folders created by novy_dom are 0755. This
      allows Apache to read static files.
    * Page-form now shows site_name for hidden field 'dom_id' - better for
      sites with unicode names.
    * We do not use any more environment variable REWRITE_ENGINE_ON from
      .htaccess to tell slovo.cgi to remove SCRIPT_NAME from URL. This is done
      via config option for Slovo plugin CGI 'mod_rewrite', which defaults to
      1 meaning enabled.
    * Improved /celini/create functionality - better handling of missing
      parameters.
    * Deprecated route /manage/celini in favour of /manage/stranici/:page_id/celini.

2020.12.01
    * Fixed bug - 'page_type', 'box' and 'data_type' columns' values in
      database were not changed while translating identifiers. Now this is
      done. See migrations.sql
    * Translated the above mentioned remaining values from Bulgarian(Cyrillic)
      to English(Latin).
    * Added parameters descriptions for 'box'and 'page_type' in api-v1.0.json.
    * Added possible value for data_type - 'chapter' in api-v1.0.json.
    * Added 'boxes','data_formats' and 'page_types' to $app->defaults and used
      them accross the application as "single source of truth".
    * Slightly improved documentation.
    * We do not allow any more pages to be moved across domains.
    * We do not allow any more a page with page_type 'root' to be created.
      Every domain has only one such page and it is created with command 'slovo
      generate novy-dom'.
    * We do not list page titles with the rest of celini records. They can be
      edited as part of a page.
    * Now using Veleka2 font.

2020.11.22
    * Fixed a bug - The adaptor class (Mojo::SQLite/mysql/Pg) reinstantiated
      each time $app->dbx was invoked. Now this is done only on the first
      invocation.
    * Removed deprecation warning about MojoDBx 'helper' setting. Now the
      helper is always "dbx".
    * Default configuration from slovo.conf was moved to MojoDBx. If you use
      slovo.$mode.conf your instance should not be affected as your file
      will be preferred.
    * Now more properties(columns) of the $stranici object are fetched from the
      database. See '/paths/~1stranici/get/parameters/4/default' in
      lib/Slovo/resources/api-v1.0.json
    * Implemented new hook "around_action", where we set some common
      variables, used in templates ($l - current language and $user - current user).
    * Fixed bugs:
      - page_id was not properly set in the $celina object, which is used for
      title of the page.
      - Stash variables for use in templates were not properly set when there
      was a validation error.
      - Moving a $celina to another page is disabled (until we  implement proper
      select field).
      - Some fields required validation filter "not_empty" - otherwise they were
      validated as "required".
    * Setting stash defaults now happens only in lib/Slovo.pm
    * Now fieldsets are collapsed only if there are no validation errors.
    * Moved fieldset "Съдържанѥ на страницата" to the top of the page form.

2020.11.11
    Get back to Slovo after getting my master degree in programme "Medieval
    Bulgarian Studies" – Sofia University "St. Kliment Ochridski".
    * Switched to codename U+2C14 GLAGOLITIC CAPITAL LETTER SLOVO (Ⱄ). With
      this we mark the renewal of the project.
    * Changed double quotes to single quotes for values
      in lib/Slovo/resources/data/migrations.sql as "suddenly" they started to
      be treated as columns. This happens as of DBD::SQLite 1.63_05 2019-07-12.
      Fixed #28.
    * Minor fixes in lib/Slovo/resources/api-v1.0.json. "maxLength" value needs
      to be an integer.
    * Changed all identifiers for data types in table celini from
      Bulgarian(Cyrillic) to English(Latin) to increase understanding by
      potential nonslavic contributors. Here they are: въпросъ => question;
      книга => book; писанѥ => writing; белѣжка => note; заглавѥ => title.
    * Upgraded to Mojolicious 8.65, Mojo::SQLite 3.004, Cpanel::JSON::XS 4.25
      Minion::Backend::SQLite 5.0.3, Role::Tiny 2.001004, EV 4.33,
      Mojolicious::Plugin::OpenAPI 3.40, Mojolicious::Plugin::RoutesConfig 0.06
      Test::PerlTidy 20200930, Perl::Critic 1.38.
    * Changed most css and route identifiers from Bulgarian(Cyrillic) to
      English(Latin) too. Fixed #16.
    * Preferring data/slovo.$mode.sqlite if found upon startup over
      lib/Slovo/resourcesdata/slovo.$mode.sqlite.


2019.09.19
    A very late release!

    * Now using markdown editor Editor.md v1.5.0
      (https://github.com/pandao/editor.md) and Marked v0.3.3 (https://marked.js.org/)
    * Replaced most of cyrillic variable names in templates with latin variable names.

2019.08.18
    * Updated Trumbowyg to version 2.18.
    * Fixed a bug in helper 'language'. It was returning an arbitrary language
      abbreviation.
    * Added helper 'languages'.
    * Added a 'cach all route', displaying 'Page Not Found!'.
    * Upgraded to Mojolicious 8.23, Mojo::SQLite 3.002,
      Minion::Backend::SQLite 4.005, Cpanel::JSON::XS 4.12, Role::Tiny 2.000008,
      Mojolicious::Plugin::OpenAPI 2.16.


2019.07.11
    * Added new options --skip and --refresh to command novy_dom to easily
      update domain specific templates after upgrading Slovo.
    * Improved command a2htaccess and Slovo::Plugin::CGI by adding environment
      variable REWRITE_ENGINE_ON so the url_base is changed accordingly to
      .htaccess file.

2019.07.07
    * Fixed wrong url in sidedrawer menu.
    * Fixed bug in language menu.
    * Slightly improved .htacces.
    * More logging for successful and unsuccesful authentication.
    * Less debug messages.

2019.06.23
    * Working .htacces file for Apache/CGI
    * End to end Author tests - 012_cgi_hosting.t

2019.06.09
    - Changes
        * Changed CODENAME to U+2C13 GLAGOLITIC CAPITAL LETTER RITSI (Ⱃ)
          This is a major release.
        * reenabled '-utf8' switch for Perl::Tidy. Works well with newest
          edition and Test::PerlTidy.
        * Using also 'local/' folder for locally installed dependencies.
        * Minor fixes for making Perl::Critic happy.
        * Not using Test::CheckManifest anymore.
    - Features
       * Apache/CGI support with the following prerequisites. This is work in progress.
       * Slovo::Command::Author::generate::cgi_script.
       * Slovo::Command::Author::generate::a2htaccess.
       * Slovo::Command::Author::generate::novy_dom.
       * $app->home detects the common root folder where SLovo is installed, not
         just where lib/Slovo.pm is.

2019.02.20
    - Features
        * User can chose parent page and parent celina for new and existing
         celina.

2019.02.02
    - Changes
        * More tidy code.
        * Optimised script/slovo.
        * Upgraded to Mojolicious 8.12
        * Fixed failing test on MSwin32 due to unicode filenames. Now produced
          files have sha1_sum as name.
        * Fixed bug in sidedrawer.
          TODO: Investigate why 'url_for' does not recognise some route names.

2019.01.29
    - Changes
        * Added t/perltidy.t to impose the rules in our .perltidyrc to
          contributors. Ran `make perltidy` and t/perltidy.t. Set
          ENV{TEST_AUTHOR} to run this test.

2019.01.21
    - Changes
        * Improved form for 'stranici' a lot.
        * Improved form for 'celini' a lot.

2019.01.01
    - Changes
        * Happy New Year 2019!
        * Listing pages as expandable tree under route 'under_management' with
        * breadcrumb above.
        * Added new tag helper 'checkboxes'.
        * Only admin users can add a user to a group.
        * Slightly improved pages and users forms.

2018.12.24
    - Changes
        * Removed development dependencies, added by mistake.
        * Sligntly improved and updated documentation.
        * Added option in slovo.conf to enable HTTP response compression -
          still experimental in Mojolicious.
        * Changed shebang line in script/slovo to use the Perl at time of
          installation instead of the Perl at time of execution.
        * Changed CODENAME to U+2C12 GLAGOLITIC CAPITAL LETTER POKOJI (Ⱂ)
          It's time for Рождество Христово.

2018.12.22
    - Changes
        * S::C::Auth::signout now redirects to S::C::Auth::authform.
        * Fixed t/007_domove.t. Only admins can edit domains.
        * Improved "Sign In" form.
        * Improved users' form and celini's show.html.ep.
    - Features
        * Added functionality to send email with one time login token in case
          of forgotten password.

2018.12.09
    - Changes
        * Fixed mistake in path generation for config file.

2018.12.08
    - Changes
        * Now Slovo looks for configuration file in the following order:
          1. $ENV{MOJO_CONFIG};
          2. $app->home->child("$moniker.$mode.conf")
          3. $app->home->child("$moniker.conf")
          4. $app->resources->child("etc/$moniker.$mode.conf").
          Default: $app->resources->child("etc/$moniker.conf")
        * Improved Slovo.pm POD.
        * Improved the generated token for first login.

2018.11.30
    - Features
        * Implemented experimental onboarding workflow. A user can create
          account for other users and invite them to sign in for the first
          time. An email with first-time login token is sent to the new user
          via SMTP. See Slovo::Task::SendOnboardingEmail.
        * We have Bootstrap CSS 4 for free. Comming together with Minion.
        * Minion admin UI (Mojolicious::Plugin::Minion::Admin) is available for
          members of the admin group at /Ꙋправленѥ/minion. Note: Links in UI do
          not work. TODO: fix.

    - Changes
        * Slovo now depends on Minion and Minion::Backend::SQLite which will be
          used for asynchronous execution of various time consuming tasks.
        * The configuration parameters for a plugin loaded via slovo.conf can
          be returned via a closure which is executed just before the plugin is
          loaded. Very convenient for using already generated routes and other
          already available functionality by plugins which are loaded later.
        * Added .travis.yml. Now every push will be built on
          https://travis-ci.org/kberov/Slovo
        * Added Several other dependencies both for authors and for production.
          See Makefile.PL.

2018.11.15
    - Features
        * A user can be member of more than one group.
        * Only admins can change other's accounts and manage groups.
    - Changes
        * Listing of цѣлини and страници  in /Ꙋправленѥ/ are now restricted
          only to the current domain.
        * Added dependency Mojolicious::Plugin::PODViewer because
          Mojolicious::Plugin::PODRenderer will be removed from Mojolicious.
        * Upgraded to Mojolicious 8.06.
        * Worked around a bug in Perl::Critic by adding extra semicolumn after
        * the closing brace of a lexical sub.
        * Better validation when creating/editing users.
        * Started work on experimental onboarding process for users.
        * Enhanced adminstration area UI a little bit.

2018.11.11
    - Features
        * Ownership and the group (list of contributors) of a цѣлина and
          страница can be changed.
    - Changes
        * A celini item cannot be deleted anymore by mistake. "Remove" button
          was removed.
        * "Permissions", "published" and change of user_id and group_id were
          moved into separate fieldset "Разрешения и обнародване".

2018.10.31
    - Changes
        * Fixed a bug where only pages(stranici) which are directories can list
          their articles(celini) on the home page and caused Status 500 for
          calls to /api/страници.
        * Cleaned up Slovo::Model::Stranici::all_for_home.
        * Made article boxes on home page adaptive for small screens between
          270 and 450 px width.

2018.10.29
    - Changes
        * Upgraded to Mojolicious 8.04.
        * Fixed Slovo::Validator. It was failing with the above version.
        * Removed alias 'can' for check 'is' from Slovo::Validator.

2018.10.16
    - Features
        * Implemented browser caching for both signed and not signed in
          visitors to reduce the bandwith for content and pages.
        * Added new configuration keys 'cache_pages'=1/0 to enable and disable
          caching of content on disk and 'cache_control' to allow setting the
         'Cache-Control' header for fine grained browser cache management.
    - Changes
        * Fix: 'tstamp' value was not set during 'stranici' and 'celini' update.
        * Fix: Now only canonical urls are cached to disk. Avoided duplication
          of cached content on disk.

2018.10.12
    - Features
        * (Hopefully temporarily) added new media types for woff and woff2 font
          file formats.

2018.10.11
    - Changes
        * Replaced 'Menaion Unicode TT' with 'Bukyvede' as the latter has the
          full set of old Bulgarian glyphs.
        * Added FreeSerif as fallback for Veleka as it has the full set of old
          Bulgarian glyphs.
        * Added pipe as separator between items in _header.html.ep.
        * Fixed cached_pages value in slovo.conf

2018.10.10
    - Changes
        * Fix: Handle unlikely error - responding to request to a host which is
          not found in the database.
        * Fix: Page was not loading proper заглавѥ for edit.
        * Fixed documentation for Slovo::Plugin::MojoDBx. Deprecated config
          option 'helper'.
        * Loading PODRenderer and not caching pages in development mode only
          now by default.
        * Cannonical link in <head> now is not url_escape-d, nor domain name is
          punycode_encode-d - Experimental.

2018.10.08
    - Features
        * Implemented automatic redirect from old to new URLs for pages and
          celini.
        * Implemented new helper 'html_substr' in Slovo::Plugin::TagHelpers.
        * Added a subset of GNU FreeFont (Sans and Mono), whole 'Menaion
          Unicode 2.0' and Veleka to ensure proper display of old Bulgarian
          texts (Azbuka and Glagolitza) characters. See
          lib/Slovo/resources/public/fonts/README.
        * Added 'favicon' – The "Slovo" letter from the Glagolitic alphabet.
        * Added cannonical url for the current page in the <head>.

    - Changes
        * Changed CODENAME to U+2C10 GLAGOLITIC CAPITAL LETTER NASHI (Ⱀ)
          This is a major release. We can upload pictures, We have a WYSIWIG
          and simple text editor, fine-grained permissions for pages and
          content, example systemd script and apache 2.4 config, new home page
          template, automatic redirects to changed URLs (No "Page Not found"
          due to this), embedded fonts for Азбука and Глаголица…
        * Upgrades: Cpanel::JSON::XS 4.06, Mojolicious 8.02,
          Mojolicious::Plugin::OpenAPI 2.0.
        * Showing langauge dropdown only if the page or article are translated
          into other languages.
        * Unified layout of teasers for articles in home page and categories'
          pages. We strip any html from celini titles before rendering in
          templates.
        * Reduced unneeded login tests.
        * Updated systemctl service description.
        * Fix: Use page id to denote parent page for children celini.
        * Selectively ignore some resources in domove/
        * Now the <html> tag has a `lang` attribute - the current $ѩꙁыкъ.
        * KABANOID fixed some typos in documentation. Thanks!

2018.09.28
    - Changes
        * Upgraded Mojolicious to version 8.01.
        * Slight performance improvement in 'before_dispatch' hook.
        * Better positioning of the main content on large screens.
        * Fix: Now in stranici/templates/dom.html we remove HTML before showing
          articles on home-page.

2018.09.22
    - Features
        * New home page template showing the last several articles in each
          category page -- the direct children of the home page.
    - Changes
        * Added mui-colors.min.css to slovo.min.css.
        * Added all_for_home() in Slovo::Model::Stranici. It is used in
          stranici/templates/dom.html.
        * Added meta name="generator" in _head.html.ep.
        * Now both '/' and /index.html reslove to the default page and language.
        * Fixed bug - Cached pages were shown to logged in users too.
        * Fixed bug - Заглавѥ was not showing only its children, but the other
          page's celini.

2018.09.15
    - Features
        Added example configuration file for Apache mod_proxy.
        Added example configuration file for systemd.
        Added configuration section for hypnotoad to slovo.conf.

2018.09.09
    - Features:
        * Initial handling of permissions for stranici and celini in
          administration area.
        * Added new check 'is' and alias for it 'can' to Slovo::Validator.
    - Changes:
        * when anew user is inserted a record for primary group in user_group
          is inserted too.
        * 'permissions' possible values are now added to the
          'parameters' object of api-v1.0.json. From there the enum is used in
          templates.

2018.08.28
    - Features:
        * Added and setup HTML wysiwyg editor Trumbowyg to the distribution.
          It was chosen because of its small size and easiness to use and
          extend.
        * Added extension 'base64' for embedding images into the page as base64
          data in the 'src' attribute of the img tag.
        * Added post-processing of the 'body' property of a stranica and celina
          just before save in case the data_format is 'html'. The base64 data
          in the images is saved as files in the public/img folder of the
          respective domain.  This allows images to be shared among pages and
          decreases the size of 'body'.
        * Added switching of editors on change of the 'data_format' field.
          Simple textarea for 'text' and Trumbowyg for 'html'. In the future
          other editors will/may be added for 'pod', 'markdown' and asciitext.

    - Changes
        * Added documentation to Slovo::Controller::Role::Stranica.
        * 'data_type' and 'data_format' possible values are now added to the
          'parameters' object of api-v1.0.json. From there these enum
          properties are used for bot filling in the select_box(es) and for
          'in' checks during validation.

2018.08.19
    - Features
        * Implemented page caching on disk. Page is cached if published and
          readable by 'others', and visited by a guest user. On the next visit
          a guest user sees the cached page. Page load is 15 times faster.
        * Full multi-domain support. Domains can have their own public and
          template folders and be served from one running Slovo instance.

    - Changes
        * Startup script 'slovo' was improved. Slovo can be installed and ran
          with all dependencies in it's on local folder. Previously it did not
          detect properly it's own $Config{archname}.
        * Added 'log' and 'domove/*/public/cached' to .gitignore
        * Improved documentation. Mention all current features.
        * Numerous small code optimisations in classes.
        * Upgraded to Mojolicious 7.93, Cpanel::JSON::XS 4.05
        * Changed CODENAME to U+2C0F GLAGOLITIC CAPITAL LETTER MYSLITE (Ⰿ).
          This is a major release. We have full multi-domain support and
          cacheable pages.

2018.08.12
    - Features
        * Added nice multi-language routes (/<страница:str>.<ѩꙁыкъ:lng>.html,
          /<страница:str>/<цѣлина:cel>.<ѩꙁыкъ:lng>.html).
        * Added more restrictive route-placeholders types (cel,str,lng).
        * Added a set of languages to the forms for celini and stranici.
        * Added a new language switching menu. The language is switched by the
          page title - заглавѥ.
    - Changes
        * The $c->debug method is now a helper and can be used in templates
         without $c.
        * Fixed and optimised mapping of data_type to template name for
          displaying a record from celini.
        * Changed CODENAME to U+2C0E GLAGOLITIC CAPITAL LETTER LJUDIJE (Ⰾ).
          This is a major release. We have multilanguage pages.


2018.08.08
    - Features
        * Implemented /<:страница>/<*цѣлина>.html - /page/article.html. This
          allows pages to act as category pages for collections of articles for
          example.
        * Added partial templates for all data types from table celini and a
          generic one for custom data types.
        * Slovo::Plugin::DefaultHelpers – additional default helpers for Slovo.
        * Implemented Slovo::Controller::Role::Stranica with wrapper around
          execute() to share some common stash settings, preparations and
          checks before the page is rendered and leave room for executing code
          after the page is rendered.
    - Changes
        * Now the IDN is always shown decoded in the sidedrawer.
        * Moved helpers 'language' and 'is_user_authenticated' from Slovo to
          Slovo::Plugin::DefaultHelpers.
        * DefaultHelpers and TagHelpers are loaded unconditionally after all
          other mandatory for Slovo plugins.
        * Improved action execute and its template in
          Slovo::Contoller::Stranici. Added partial templates for almost all
          celini data_types. Moved my $breadcrumb fom controler to
          Slovo::Model::Stranici where it belongs.

2018.08.00
    - Features
        * Domains can have several aliases and pages can be found under
          different aliases - Multidomain support.
        * Made OpenAPI API specification allways available via helper
          'openapi_spec'.
    - Changes
        * Changed CODENAME to U+2C0D GLAGOLITIC CAPITAL LETTER KAKO (Ⰽ).
        * This is a magor release. We have a Minimal Viable Product.

2018.07.28
    - Features
        * Breadcrumb navigation up to the root page in the appbar.
        * Added new column 'aliases' to table 'domove'. It will be used to
          match a request to a specific domain from $c->req->headers->host.
    - Changes
        * Creating a page now redirects to the form for editing the newly
          created page.
        * Used some well known unicode symbols as icons.
        * Fixed bugs in side-drawer.
        * Upgraded to Mojo::SQLite 3.001 and Mojolicious 7.89.
        * Improved domove/_form.html.ep to use prefilled params.
        * Added missing license meta to Makefile.PL. Thanks, Mohammad S Anwar.

2018.07.20
    - Features
        * Sidebar shows a list of pages under the current page if the page is a
          folder.
        * Implemented 'select_box' in the new Slovo::Plugin::TagHelpers.
        * Using OpenAPI (fka Swagger) to retreive items in directory
          pages in the sidebar page menu.
    - Changes
        * Greatly improved code in _form.html.ep and other templates in the
          administration interface for 'celini' and 'stranici'.
        * Changed orthography for some celini semantic data_types:
          'въпросъ', 'ѿговоръ', 'белѣжка'.

2018.07.16
    - Changes
        * Fixed (also future potentially) failing tests caused by missing
          'use feature qw(lexical_subs unicode_strings);' on Perl 5.20-5.24.

2018.07.15
    - Features
        * (WIP) Using OpenAPI (fka Swagger) to retreive the sidebar page menu.
        * (WIP) added helper 'language' which will be later provided by
          Slovo::Plugin::L10N.
    - Changes
        * Improved/finished 'all_for_list' in Slovo::Model::Stranici. Added
          columns 'title' and 'is_dir' to the resultset.
        * Unified WHERE clause for executing/listing pages on the site by
          moving it to '_where_with_permissions' in Slovo::Model::Stranici.
        * Unified WHERE clause for executing/listing content in a page by
          moving it to where_with_permissions in Slovo::Model::Celini.
        * Improved 'login_ok' and added 'login' in Test::Mojo::Role::Slovo.

2018.07.10
    - Features
        * Link to /Ꙋправленѥ when user is signed in in the footer.
        * (WIP) Using OpenAPI (fka Swagger) to retreive the sidebar page menu.
    - Changes
        * Updated Mojolicious::Plugin::OpenAPI to 1.30 and enabled it.
        * removed api.json and added api-v1.0.json
        * Fixed failing tests on Perl 5.20.

2018.06.25
    - Features
        * Implemented a site layout, based on a MUI CSS example. We are getting
          closer to a MVP (Minimum Viable Product).
    - Changes
        * Avoided using varaiables and subroutine names written in azbouka due
          to a missing feature in PPI which causes Perl::Critic to falsely
          complain. See https://github.com/adamkennedy/PPI/issues/226

2018.06.22
    - Changes
        * User Guest is always loaded to have some default permissions for
          every not logged in user.
        * Replaced helper "is_user_authenticated" from
          Mojolicious::Plugin::Authentication. Now it checks if the current
          user is not Guest and returns true, false otherwise.
        * Now the user is really authenticated.
        * Removed unused methid "check" from Slovo::Controller::Auth.
        * Improved documentation.
    - Features
        * Better and working "Sign in" without transmitting plain text password.


2018.06.06
    - Changes
        * On failed login the guest user is loaded to have always a user.
        * We `use 5.020` in Slovo.pm to switch ON all Perl features available
          up to this version.
        * Loading of Model classes is postponed untill first use of the
          corresponding helper.
    - Features
        * Added attribute `domain` to Slovo::Controller.
        * Now UTF-8 characters are readable in dumped structures by $c->debug.
        * Added multidomain support. Many domains can be served by one Slovo
          applcation. Domains can be matched also by IPs from which they are
          served. For example 'http://127.0.0.1/alias.стр.html' finds the page
          'alias' in domain localhost.
        * When a page cannot be found a "Not Found" page is displayed.
        * When a page is displayed the `permissions` and `published` matter.
          Secondary groups of a user are supported. In preview mode
          (?прегледъ=1) published, hidden, deleted, start and stop are
          disregarded.

2018.05.24
    - Changes
        * Честитъ праздникъ на бꙋквите – Ден на Българската Писменостъ.
        * Many changes in progress towards displaying pages in the site.
    - Features
        * Implemented template and layout for rendering a regular page.
        * Using MUICSS for default styles.

2018.05.19
    - Changes
        * Shared methods "all", "find", "save", "remove", "add" in Slovo::Model.
        * Improved some templates and the index page.
        * Improved pages(stranici) validation.
    - Features
        * New content (celini) can be added.
        * Content (celini) can be edited and deleted.

2018.05.03
    - Changes
        * Improved the page form.
        * Removed custom config method from Slovo::Controller.
        * "page_type" can be (regular=>'обичайна',root=>'коренъ').
        * From the next version upgrading from an older version (like this)
        * will be possible.
    - Features
        * Pages with initial content can be edited
        * Pages can be "removed" (deleted=1).
        * Added initial set of pages with initial content in language
        * bg-bg(Слово=>Home page,Писания=>Blog,Вести=>News,Относно=>About).
2018.04.30
    - Changes
        * Improved startup.
        * Added some tests for creating and updating a user.
    - Features
        * Added Slovo::Validator with new filter - xml_escape.
        * Creation of new page with initial content.

2018.04.15
    Unstable: WIP!
    - Changes
        * Improved documentation.
        * Switched $CODENAME to U+2C0C GLAGOLITIC CAPITAL LETTER DJERVI (Ⰼ)
    - Features
        * Implemented Slovo::Plugin::MojoDBx. Not using sqlite.conf
        anymore. This plugin can be moved to Mojolicious namespace.
        There is nothing specific to Slovo in it.
        * WIP - Added tables 'domove', 'stranici' and 'celini'. Beginning
        of a site.
        * Generated MVC and OpenAPI from the tables using
        Mojolicious::Command::generate::resources.
    - Bugs

2018.04.09
    - Христос воскресе
    - Switched $CODENAME to U+2C0B GLAGOLITIC CAPITAL LETTER I (Ⰻ)
    - Improved documentation.
    - Added first migration file. Table definitions and initial data are taken
      from Ado.
    - Used Mojolicious::Command::generate::resources to generate code for
      groups and users resources like this:
      $ generate resources -D dbx -t "groups,users" -T \
      lib/Slovo/resources/templates --api_dir lib/Slovo/resources
    - Added sqlite.conf which can be switched with pg.conf or mysql.conf.
      This way the database can be easily switched by adding specific
      adapter configuration files.
    - Added helper 'dbx' which will be instance of Mojo::SQLite, Mojo::Pg or
      Mojo::mysql instead of corresponding 'sqlite', 'pg', or 'mysql'.
    - Added Slovo::Cotroller.
    - Improved a bit the generated code for models. Added parent class
      Slovo::Model.
    - Added dependency Mojolicious::Plugin::Authentication and implemented
      Slovo::Controller::Auth.
    - Added TODO section to the Slovo POD.
    - Added Test::Mojo::Role::Slovo.
    - Added tests for sign_in.
    - Added tests for creating a users.

2018.03.25
    - Improved documentation.
    - Implemented loading of plugins specified in slovo.conf.
    - Added dependency Mojolicious::Plugin::RoutesConfig.

2018.03.24
    - Made the application installable as any perl module.
        * added EXE_FILES to the installation
        * Fixed unwanted installation of README.pod
        * Added new target "readme" for "make" which is also part of the
        "dist" target.
        * Added new target perltidy which is also part of the "test" target.
    - Made the application installable as a perl application.

2018.03.23
    - Original version; created by ExtUtils::ModuleMaker 0.56
    - Generated application using `mojo generate app Slovo`
    - Modified Makefile.PL and whatever needed so most basic tests pass.
    - Used $CODENAME from Ado to indicate that this project is continuation of
      Ado (in a way).