Ado
view release on metacpan or search on metacpan
- Really upgraded to Mojolicious 4.83.
0.32 2014-02-19
- Fixed failing test under Windows.
- Removed base_url option passed to Text::MultiMarkdown.
- Implemented "next" and "previous" page navigation in help app.
- Upgraded to Mojolicious 4.83.
0.31 2014-02-16
- Implementented Ado::Plugin::MarkdownRenderer
- Included "Semantic UI" CSS and JavaScript framework.
It will be the default UI framwework for Ado.
- Implemented simple functional documentation system (/help)
and used Ado::Plugin::MarkdownRenderer and Semantic UI
to render documentation. Added dummy "lorem ipsum" content.
- $CODENAME changed to
"ÐÑки" - U+2C01 GLAGOLITIC CAPITAL LETTER BUKY (â°)
because we have the first end-user application in Ado now.
- We started adding end-user features now.
- Added accessor 'CODENAME' to Ado.
- Added accessors 'keywords' and 'description' to Ado::Control.
{
"abstract" : "a rapid active commotion (framework for web-projects on Mojolicious)",
"author" : [
"ÃÂÃÂðÃÂøüøàÃÂõÃÂþò <berov@cpan.org>"
],
"dynamic_config" : 1,
"generated_by" : "Module::Build version 0.422",
"keywords" : [
"Ado",
"Mojolicious",
"realtime",
"web",
---
abstract: 'a rapid active commotion (framework for web-projects on Mojolicious)'
author:
- "Ã\x9AÃ\x80ðÃ\x81øüøÃ\x80 Ã\x91õÃ\x80þò <berov@cpan.org>"
build_requires:
Module::Build: '0.42'
Test::More: '0'
configure_requires:
Module::Build: '0.42'
dynamic_config: 1
generated_by: 'Module::Build version 0.422, CPAN::Meta::Converter version 2.150005'
keywords:
NAME
Ado::Manual - Developers' manual
DESCRIPTION
Ado is a light on dependencies framework and application for web-projects,
based on Mojolicious, written in the Perl programming language
<http://www.perl.org/>. Ado is a typical well structured, MVC
<http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller>
Mojolicious application. It aims to allow teams to build on it a CMS, ERP,
CRM or all of them integrated together.
Please note that the project is still a work-in-progress. Parts of it
work, others are simply missing.
GETTING STARTED
# NAME
Ado::Manual - Developers' manual
# DESCRIPTION
[Ado](https://metacpan.org/pod/Ado) is a light on dependencies framework and application for web-projects,
based on [Mojolicious](https://metacpan.org/pod/Mojolicious), written in the [Perl programming
language](http://www.perl.org/). Ado is a typical well structured,
[MVC](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)
[Mojolicious](https://metacpan.org/pod/Mojolicious) application. It aims to allow teams to build on it a CMS, ERP,
CRM or all of them integrated together.
Please note that the project is still a work-in-progress. Parts of it work,
others are simply missing.
# GETTING STARTED
1;
=pod
=encoding utf8
=head1 NAME
Ado - a rapid active commotion (framework for web-projects on Mojolicious)
=head1 SYNOPSIS
require Mojolicious::Commands;
Mojolicious::Commands->start_app('Ado');
=head1 DESCRIPTION
L<Ado> is a framework for web-projects based on L<Mojolicious>, written in the
L<Perl programming language|http://www.perl.org/>. This is the base
application class. Ado C<ISA> L<Mojolicious>. For a more detailed description
on what Ado is and how to get started with Ado see B<L<Ado::Manual>>.
=head1 ATTRIBUTES
Ado inherits all attributes from Mojolicious and implements the following new
ones.
=head2 ado_home
lib/Ado/Control.pm view on Meta::CPAN
package Ado::Control;
use Mojo::Base 'Mojolicious::Controller';
our $DEV_MODE = ($ENV{MOJO_MODE} || '' =~ /dev/);
has description => 'Ado is a framework for web projects based on Mojolicious,'
. ' written in the Perl programming language.';
has keywords => 'SSOT, CRM, ERP, CMS, Perl, SQL';
sub generator { return 'Ado ' . $Ado::VERSION . ' - ' . $Ado::CODENAME }
sub config {
state $app = $_[0]->app;
return $app->config(ref $_[0])->{$_[1]} if $_[1]; #if key
return $app->config(ref $_[0]);
}
lib/Ado/Manual.pod view on Meta::CPAN
=encoding utf8
=head1 NAME
Ado::Manual - Developers' manual
=head1 DESCRIPTION
L<Ado> is a light on dependencies framework and application for web-projects,
based on L<Mojolicious>, written in the L<Perl programming
language|http://www.perl.org/>. Ado is a typical well structured,
L<MVC|http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller>
L<Mojolicious> application. It aims to allow teams to build on it a CMS, ERP,
CRM or all of them integrated together.
Please note that the project is still a work-in-progress. Parts of it work,
others are simply missing.
=head1 GETTING STARTED
lib/Ado/Manual/Intro.pod view on Meta::CPAN
started quickly.
Ado provides additional L<plugins|Ado::Plugin> and L<commands|Ado::Command>,
which promote
L<RAD|http://en.wikipedia.org/wiki/Rapid_application_development>, good
practices, and team-work. The default Ado page uses L<Semantic UI|http
://semantic-ui.com/> via L<Mojolicious::Plugin::SemanticUI> and is a good
place to get acquainted. In short, Ado can be used right away as a
L<CMS|http://en.wikipedia.org/wiki/Content_management_system> that can be
extended with L<plugins|Ado::Manual::Plugins> and L<commands|Ado::Command> or
as a L<CMF|http://en.wikipedia.org/wiki/List_of_content_management_frameworks>
on which to build many different specific applications.
Here is the directory structure. It does not contain the files for brevity. It
looks much the same as a full Mojolicious application would look and as
described in L<Mojolicious::Guides::Growing/Differences>. One noticeable
difference is that Ado has it's starter script in C<bin> instead of in
C<script> and this is only to ease the deployment. Another one is the
L<Ado::Control> namespace instead of Ado::Controlller. We did this for
brevity. The third difference is C<site_templates>, used for putting Ado
system-templates which you want to override, e.g put our own copy of
public/doc/en/intro.md view on Meta::CPAN
#Intro
<div class="ui hidden">
If you read this page out of /help/en/* the links in it will not work!
</div>
##Ado
A framework for web projects based on [Mojolicious](http://mojolicio.us/), written in the Perl programming language.
Ado[^ado_] was started in November 2013 as a rewrite of a previous project ([MYDLjE](https://github.com/kberov/MYDLjE)) based on Mojolicious 1.9x. MYDLjE was too monolithic. It was not possible to start with minimum features, disable some of them and...
##What is Ado?
Ado's purpose is the same as of MYDLjE â to quickly put together a lightweight web application and/or site based on Mojolicious with scalability, performance and growth in mind.
An Ado system starts as a minimal application that can turn into an ERP, a CMS, a CRM or all in one by just adding plugins along the way as the organization which is using it grows.
##Built-in features
Ado is a typical Mojo application. It comes with a configuration file and a model[^2] layer - Mojolicious::Plugin::DSC. An SQLite database is bundled in the distribution at etc/ado.sqlite to get started quickly. All plugins can be disabled and re-ena...
public/doc/en/intro.md view on Meta::CPAN
1. Configuration file with most of the sensible settings in place, such as controller_class, name-spaces for routes (urls), name-spaces for plugins and commands, session settings, default routes...
2. Ado plugins work the same way as Mojolicious::Plugins and share the same common base trough Ado::Plugin. But they have one small additional feature. They can load their own configuration from `$ENV{MOJO_HOME}/etc/plugins/plugin_name.conf`. Busines...
By default the following plugins are enabled:
1. All Mojolicious plugins which are otherwise enabled by default.
2. Mojolicious::Plugin::Charset â UTF-8.
3. Mojolicious::Plugin::DSC â a plugin which integrates DBIx::Simple::Class in the application. DBIx::Simple::Class is a very lightweight object-relational mapper based on DBIx::Simple. It abstracts the SQL from the programmer still allowing to...
4. Ado::Plugin::Auth is a plugin that authenticates users to an Ado system. Users can be authenticated locally or using (TODO!) Facebook, Google, Twitter and other authentication service-providers. A pre-made login form can be used directly or as a...
5. Ado::Plugin::MarkdownRenderer - Render static files in markdown format. One can create a personal blog or enterprise wiki using static files in markdown format.
3. The following libraries for user-interface development are used:
1. Semantic UI â a CSS and JS framework for development of mobile-ready layouts. Its usage also results in more clean HTML than other popular frameworks.
2. PageDown is the version of Attacklab's Showdown and WMD as used on Stack Overflow and the other Stack Exchange sites. It includes a converter that turns Markdown into HTML, a Markdown editor with realtime preview of the generated HTML, and a few...
4. The following Ado specific commands are available:
1. Ado::Command::adduser allows adding users to an Ado application via a terminal. It also allows adding users to existing or not existing groups. The new group is automatically created.
2. Ado::Command::version shows version information for installed core and optional modules.
1. Last but not least, Ado code is well covered with tests. Special care is taken to avoid accumulating technical debt by having Test::Perl::Critic tests set to level âharshâ. This way the coding style is forced to be consistent across the framew...
Here is how an Ado system looks like from architectural point of view:

##Installation/Deployment
The most flexible way to install Ado is manually on the command line.
It is highly recommended to have a separate Perl distribution (not the one that comes with your OS).
ActivePerl or perlbrew are both fine.
public/img/Ado-Building-Blocks.svg view on Meta::CPAN
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="77.723633"
y="456.93161"
id="text4578"
sodipodi:linespacing="125%"><tspan
style="font-size:36px"
sodipodi:role="line"
id="tspan4580"
x="77.723633"
y="456.93161">Ado framework = Ado App + Mojolicious Plugins</tspan></text>
</g>
<g
id="g4706"
transform="matrix(0.81466395,0,0,0.82412767,-13.453267,147.41433)">
<rect
style="fill:none;stroke:#000000;stroke-width:2.65525556;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect4597"
width="951.34473"
height="363.34473"
x="31.841515"
public/index.html view on Meta::CPAN
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Ado!</title>
</head>
<body>
<h2>Welcome to <a href="/perldoc/Ado/Manual">Ado</a></h2>
<p>Welcome to <a href="/perldoc/Ado/Manual">Ado</a> - a framework
for web projects written in the <a href="http://www.perl.org">Perl programming language</a> and based on the <a href="/perldoc/Mojolicious/Guides">Mojolicious</a>
real-time web framework!</p>
<p>This is the static document "public/index.html",
<a href="/">click here</a> to get back to the start.</p>
</body>
</html>
public/vendor/pagedown/Markdown.Converter.js view on Meta::CPAN
}
function _HashHTMLBlocks(text) {
// Hashify HTML blocks:
// We only want to do this for block-level HTML tags, such as headers,
// lists, and tables. That's because we still want to wrap <p>s around
// "paragraphs" that are wrapped in non-block-level tags, such as anchors,
// phrase emphasis, and spans. The list of tags we're looking for is
// hard-coded:
var block_tags_a = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del"
var block_tags_b = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math"
// First, look for nested blocks, e.g.:
// <div>
// <div>
// tags for inner block must be indented.
// </div>
// </div>
//
// The outermost tags must start at the left margin for this to match, and
// the inner nested divs must be indented.
public/vendor/pagedown/Markdown.Converter.js view on Meta::CPAN
<($block_tags_a) // start tag = $2
\b // word break
// attacklab: hack around khtml/pcre bug...
[^\r]*?\n // any number of lines, minimally matching
</\2> // the matching end tag
[ \t]* // trailing spaces/tabs
(?=\n+) // followed by a newline
) // attacklab: there are sentinel newlines at end of document
/gm,function(){...}};
*/
text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm, hashElement);
//
// Now match more liberally, simply from `\n<tag>` to `</tag>\n`
//
/*
text = text.replace(/
( // save in $1
^ // start of line (with /m)
<($block_tags_b) // start tag = $2
\b // word break
// attacklab: hack around khtml/pcre bug...
[^\r]*? // any number of lines, minimally matching
.*</\2> // the matching end tag
[ \t]* // trailing spaces/tabs
(?=\n+) // followed by a newline
) // attacklab: there are sentinel newlines at end of document
/gm,function(){...}};
*/
text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm, hashElement);
// Special case just for <hr />. It was easier to make a special case than
// to make the other regex more complicated.
/*
text = text.replace(/
\n // Starting after a blank line
[ ]{0,3}
( // save in $1
(<(hr) // start tag = $2
( run in 1.888 second using v1.01-cache-2.11-cpan-df04353d9ac )