Revision history for Mojolicious application Slovo

    - 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 POD.
        * Improved the generated token for first login.

    - 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

        * Added Several other dependencies both for authors and for production.
          See Makefile.PL.

    - 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.

    - 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 "Разрешения и обнародване".

    - 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.

    - 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.

    - 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.

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

    - 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

    - 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.

    - Features
        * Implemented automatic redirect from old to new URLs for pages and
        * 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
        * Added 'favicon' – The "Slovo" letter from the Glagolitic alphabet.
        * Added cannonical url for the current page in the <head>.

    - Changes
          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
        * 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!

    - 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.

    - 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
        * 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.

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

    - 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

    - Features:
        * Added and setup HTML wysiwyg editor Trumbowyg to the distribution.
          It was chosen because of its small size and easiness to use and
        * 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.

    - 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
          This is a major release. We have full multi-domain support and
          cacheable pages.

    - Features
        * Added nice multi-language routes (/<страница:str>.<ѩꙁыкъ: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.
          This is a major release. We have multilanguage pages.

    - Features
        * Implemented /<:страница>/<*цѣлина>.html - /page/article.html. This
          allows pages to act as category pages for collections of articles for
        * 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
        * 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.

    - Features
        * Domains can have several aliases and pages can be found under
          different aliases - Multidomain support.
        * Made OpenAPI API specification allways available via helper
    - Changes
        * This is a magor release. We have a Minimal Viable Product.

    - 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.

    - Features
        * Sidebar shows a list of pages under the current page if the page is a
        * 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:
          'въпросъ', 'ѿговоръ', 'белѣжка'.

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

    - Features
        * (WIP) Using OpenAPI (fka Swagger) to retreive the sidebar page menu.
        * (WIP) added helper 'language' which will be later provided by
    - 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.

    - 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.

    - 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

    - 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.

    - Changes
        * On failed login the guest user is loaded to have always a user.
        * We `use 5.020` in 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 'стр.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

    - 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.

    - 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.

    - 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).
    - 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.

    Unstable: WIP!
    - Changes
        * Improved documentation.
    - 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
    - Bugs

    - Христос воскресе
    - 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
    - Added dependency Mojolicious::Plugin::Authentication and implemented
    - Added TODO section to the Slovo POD.
    - Added Test::Mojo::Role::Slovo.
    - Added tests for sign_in.
    - Added tests for creating a users.

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

    - 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.

    - 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).