Fixes on Language dictionaries

This commit is contained in:
Diego Najar 2017-12-26 17:45:02 +01:00
parent a0ab20a816
commit 5f449ab111
43 changed files with 31208 additions and 61 deletions

View File

@ -24,6 +24,7 @@ class dbList extends dbJSON
parent::__construct($file); parent::__construct($file);
} }
// Returns an array with a list of key of pages, FALSE if out of range
public function getList($key, $pageNumber, $amountOfItems) public function getList($key, $pageNumber, $amountOfItems)
{ {
if (empty($key)) { if (empty($key)) {
@ -39,7 +40,7 @@ class dbList extends dbJSON
if ($amountOfItems==-1) { if ($amountOfItems==-1) {
// Invert keys to values, is necesary returns as key the key pages // Invert keys to values, is necesary returns as key the key pages
$list = array_flip($list); //$list = array_flip($list);
return $list; return $list;
} }
@ -56,7 +57,7 @@ class dbList extends dbJSON
return false; return false;
} }
$list = array_flip($list); //$list = array_flip($list);
return array_slice($list, $init, $amountOfItems, true); return array_slice($list, $init, $amountOfItems, true);
} }

View File

@ -31,12 +31,9 @@ if (empty($published) && $Url->pageNumber()>1) {
Redirect::page('content'); Redirect::page('content');
} }
// List of drafts pages $drafts = $dbPages->getDraftDB(true);
$drafts = $dbPages->getDraftDB(); $scheduled = $dbPages->getScheduledDB(true);
$static = $dbPages->getStaticDB(true);
$scheduled = $dbPages->getScheduledDB();
$static = $dbPages->getStaticDB();
// Title of the page // Title of the page
$layout['title'] .= ' - '.$Language->g('Manage content'); $layout['title'] .= ' - '.$Language->g('Manage content');

View File

@ -46,7 +46,7 @@ function table($status, $icon='arrow-circle-o-down') {
</tr>'; </tr>';
} }
foreach($list as $pageKey=>$fields) { foreach($list as $pageKey) {
$page = buildPage($pageKey); $page = buildPage($pageKey);
if ($page) { if ($page) {
echo '<tr>'; echo '<tr>';

View File

@ -114,11 +114,11 @@
<tbody> <tbody>
<tr> <tr>
<td><?php $Language->p('Published') ?></td> <td><?php $Language->p('Published') ?></td>
<td><?php echo count($dbPages->getPublishedDB()) ?></td> <td><?php echo count($dbPages->getPublishedDB(false)) ?></td>
</tr> </tr>
<tr> <tr>
<td><?php $Language->p('Static') ?></td> <td><?php $Language->p('Static') ?></td>
<td><?php echo count($dbPages->getStaticDB()) ?></td> <td><?php echo count($dbPages->getStaticDB(false)) ?></td>
</tr> </tr>
<td><?php $Language->p('Users') ?></td> <td><?php $Language->p('Users') ?></td>
<td><?php echo $dbUsers->count() ?></td> <td><?php echo $dbUsers->count() ?></td>
@ -135,12 +135,11 @@
<h4 class="panel-title"><?php $L->p('Scheduled content') ?></h4> <h4 class="panel-title"><?php $L->p('Scheduled content') ?></h4>
<ul class="uk-list"> <ul class="uk-list">
<?php <?php
$scheduledPages = $dbPages->getScheduledDB(); $scheduledPages = $dbPages->getScheduledDB(true);
if( empty($scheduledPages) ) { if( empty($scheduledPages) ) {
echo '<li>'.$Language->g('There are no scheduled content').'</li>'; echo '<li>'.$Language->g('There are no scheduled content').'</li>';
} }
else { else {
$keys = array_keys($scheduledPages);
foreach($keys as $key) { foreach($keys as $key) {
$page = buildPage($key); $page = buildPage($key);
echo '<li><span class="label-time">'.$page->dateRaw(SCHEDULED_DATE_FORMAT).'</span><a href="'.HTML_PATH_ADMIN_ROOT.'edit-content/'.$page->key().'">'.($page->title()?$page->title():'['.$Language->g('Empty title').'] ').'</a></li>'; echo '<li><span class="label-time">'.$page->dateRaw(SCHEDULED_DATE_FORMAT).'</span><a href="'.HTML_PATH_ADMIN_ROOT.'edit-content/'.$page->key().'">'.($page->title()?$page->title():'['.$Language->g('Empty title').'] ').'</a></li>';
@ -154,12 +153,11 @@
<h4 class="panel-title"><?php $L->p('Draft content') ?></h4> <h4 class="panel-title"><?php $L->p('Draft content') ?></h4>
<ul class="uk-list"> <ul class="uk-list">
<?php <?php
$draftPages = $dbPages->getDraftDB(); $draftPages = $dbPages->getDraftDB(true);
if( empty($draftPages) ) { if( empty($draftPages) ) {
echo '<li>'.$Language->g('There are no draft content').'</li>'; echo '<li>'.$Language->g('There are no draft content').'</li>';
} }
else { else {
$keys = array_keys($draftPages);
foreach($keys as $key) { foreach($keys as $key) {
$page = buildPage($key); $page = buildPage($key);
echo '<li><a href="'.HTML_PATH_ADMIN_ROOT.'edit-content/'.$page->key().'">'.($page->title()?$page->title():'['.$Language->g('Empty title').'] ').'</a></li>'; echo '<li><a href="'.HTML_PATH_ADMIN_ROOT.'edit-content/'.$page->key().'">'.($page->title()?$page->title():'['.$Language->g('Empty title').'] ').'</a></li>';

View File

@ -165,8 +165,7 @@ echo '<div class="bl-publish-sidebar uk-width-2-10">';
if (count($page->children())==0) { if (count($page->children())==0) {
$options = array(' '=>'- '.$L->g('No parent').' -'); $options = array(' '=>'- '.$L->g('No parent').' -');
$parentsList = $dbPages->getParents(); $parentsList = $dbPages->getParents();
$parentsKey = array_keys($parentsList); foreach ($parentsList as $pageKey) {
foreach($parentsKey as $pageKey) {
$parent = buildPage($pageKey); $parent = buildPage($pageKey);
$options[$pageKey] = $parent->title(); $options[$pageKey] = $parent->title();
} }

View File

@ -17,17 +17,17 @@ class dbCategories extends dbList
global $dbPages; global $dbPages;
// Foreach category // Foreach category
foreach( $this->db as $key=>$value ) { foreach ($this->db as $key=>$value) {
$this->db[$key]['list'] = array(); $this->db[$key]['list'] = array();
} }
// Get a database with published pages // Get a database with published pages
$db = $dbPages->getPublishedDB(); $db = $dbPages->getPublishedDB(false);
foreach($db as $pageKey=>$pageFields) { foreach ($db as $pageKey=>$pageFields) {
if( !empty($pageFields['category']) ) { if (!empty($pageFields['category'])) {
$categoryKey = $pageFields['category']; $categoryKey = $pageFields['category'];
if( isset($this->db[$categoryKey]['list']) ) { if (isset($this->db[$categoryKey]['list'])) {
array_push($this->db[$categoryKey]['list'], $pageKey); array_push($this->db[$categoryKey]['list'], $pageKey);
} }
} }

View File

@ -292,8 +292,8 @@ class dbPages extends dbJSON
return false; return false;
} }
// Returns a database with published pages // Returns a database with published pages keys
public function getPublishedDB($onlyKeys=false) public function getPublishedDB($onlyKeys=true)
{ {
$tmp = $this->db; $tmp = $this->db;
foreach ($tmp as $key=>$fields) { foreach ($tmp as $key=>$fields) {
@ -309,7 +309,7 @@ class dbPages extends dbJSON
// Returns an array with a list of keys/database of static pages // Returns an array with a list of keys/database of static pages
// By default the static pages are sort by position // By default the static pages are sort by position
public function getStaticDB($onlyKeys=false) public function getStaticDB($onlyKeys=true)
{ {
$tmp = $this->db; $tmp = $this->db;
foreach ($tmp as $key=>$fields) { foreach ($tmp as $key=>$fields) {
@ -325,7 +325,7 @@ class dbPages extends dbJSON
} }
// Returns an array with a list of keys/database of draft pages // Returns an array with a list of keys/database of draft pages
public function getDraftDB($onlyKeys=false) public function getDraftDB($onlyKeys=true)
{ {
$tmp = $this->db; $tmp = $this->db;
foreach ($tmp as $key=>$fields) { foreach ($tmp as $key=>$fields) {
@ -340,7 +340,7 @@ class dbPages extends dbJSON
} }
// Returns an array with a list of keys/database of scheduled pages // Returns an array with a list of keys/database of scheduled pages
public function getScheduledDB($onlyKeys=false) public function getScheduledDB($onlyKeys=true)
{ {
$tmp = $this->db; $tmp = $this->db;
foreach($tmp as $key=>$fields) { foreach($tmp as $key=>$fields) {
@ -376,17 +376,17 @@ class dbPages extends dbJSON
return ++$tmp; return ++$tmp;
} }
// Returns an array with a list of pages, FALSE if out of range // Returns an array with a list of key of pages, FALSE if out of range
// The database is sorted by date or by position // The database is sorted by date or by position
// (int) $pageNumber, the page number // (int) $pageNumber, the page number
// (int) $amountOfItems, amount of items to return, if -1 returns all the items // (int) $amountOfItems, amount of items to return, if -1 returns all the items
// (boolean) $onlyPublished, TRUE to return only published pages // (boolean) $onlyPublished, TRUE to return only published pages
public function getList($pageNumber, $amountOfItems, $onlyPublished=true) public function getList($pageNumber, $amountOfItems, $onlyPublished=true)
{ {
$db = $this->db; $db = array_keys($this->db);
if ($onlyPublished) { if ($onlyPublished) {
$db = $this->getPublishedDB(); $db = $this->getPublishedDB(true);
} }
if ($amountOfItems==-1) { if ($amountOfItems==-1) {
@ -414,7 +414,7 @@ class dbPages extends dbJSON
public function count($onlyPublished=true) public function count($onlyPublished=true)
{ {
if ($onlyPublished) { if ($onlyPublished) {
$db = $this->getPublishedDB(); $db = $this->getPublishedDB(false);
return count($db); return count($db);
} }
@ -424,11 +424,11 @@ class dbPages extends dbJSON
// Returns an array with all parents pages key, a parent page is not a child // Returns an array with all parents pages key, a parent page is not a child
public function getParents() public function getParents()
{ {
$db = $this->getPublishedDB() + $this->getStaticDB(); $db = $this->getPublishedDB(true) + $this->getStaticDB(true);
foreach ($db as $key=>$fields) { foreach ($db as $pageKey) {
// if the key has slash then is a child // if the key has slash then is a child
if (Text::stringContains($key, '/')) { if (Text::stringContains($pageKey, '/')) {
unset($db[$key]); unset($db[$pageKey]);
} }
} }
return $db; return $db;

View File

@ -17,7 +17,7 @@ class dbTags extends dbList
global $dbPages; global $dbPages;
// Get a database with published pages // Get a database with published pages
$db = $dbPages->getPublishedDB(); $db = $dbPages->getPublishedDB(false);
$tagsIndex = array(); $tagsIndex = array();

View File

@ -1,6 +1,6 @@
<?php defined('BLUDIT') or die('Bludit CMS.'); <?php defined('BLUDIT') or die('Bludit CMS.');
// (object) Returns a Page object, the class is page.class.php, FALSE if something fail to load the page // Returns a Page object, the class is page.class.php, FALSE if something fail to load the page
function buildPage($key) { function buildPage($key) {
global $dbPages; global $dbPages;
global $dbUsers; global $dbUsers;
@ -61,6 +61,8 @@ function buildPage($key) {
return $page; return $page;
} }
// Execute a re-index of categories
// If you create/edit/remove a page is necessary regenerate the database of categories
function reindexCategories() { function reindexCategories() {
global $dbCategories; global $dbCategories;
return $dbCategories->reindex(); return $dbCategories->reindex();
@ -71,19 +73,24 @@ function reindexTags() {
return $dbTags->reindex(); return $dbTags->reindex();
} }
// Returns a Page Object, this generate on the fly a page-not-found
function buildErrorPage() { function buildErrorPage() {
global $dbPages; global $dbPages;
global $Language; global $Language;
global $dbUsers; global $dbUsers;
$page = new Page(false); $page = new Page(false);
$page->setField('title', $Language->get('page-not-found')); $page->setField('title', $Language->get('page-not-found'));
$page->setField('content', $Language->get('page-not-found-content')); $page->setField('content', $Language->get('page-not-found-content'));
$page->setField('user', $dbUsers->getUser('admin')); $page->setField('user', $dbUsers->getUser('admin'));
return $page; return $page;
} }
// This function is only used from the rule 69.pages.php, DO NOT use this function!
// This function generate a particular page from the slug of the url
// The page is stored on the global variable $page
// If the slug has not a page associacted returns FALSE and set not-found
function buildThePage() { function buildThePage() {
global $Url; global $Url;
global $page, $Page; global $page, $Page;
@ -96,20 +103,23 @@ function buildThePage() {
$Url->setNotFound(); $Url->setNotFound();
return false; return false;
} }
// The page is not published // The page is NOT published
elseif( $page->scheduled() || $page->draft() ) { elseif( $page->scheduled() || $page->draft() ) {
$Url->setNotFound(); $Url->setNotFound();
return false; return false;
} }
// The page was generate successfully
$content[0] = $pages[0] = $page; $content[0] = $pages[0] = $page;
return true; return true;
} }
// This function is only used from the rule 69.pages.php, DO NOT use this function!
function buildPagesForHome() { function buildPagesForHome() {
return buildPagesFor('home'); return buildPagesFor('home');
} }
// This function is only used from the rule 69.pages.php, DO NOT use this function!
function buildPagesByCategory() { function buildPagesByCategory() {
global $Url; global $Url;
@ -117,6 +127,7 @@ function buildPagesByCategory() {
return buildPagesFor('category', $categoryKey, false); return buildPagesFor('category', $categoryKey, false);
} }
// This function is only used from the rule 69.pages.php, DO NOT use this function!
function buildPagesByTag() { function buildPagesByTag() {
global $Url; global $Url;
@ -124,6 +135,7 @@ function buildPagesByTag() {
return buildPagesFor('tag', false, $tagKey); return buildPagesFor('tag', false, $tagKey);
} }
// Generate the global variables $pages and $content, defined on 69.pages.php
function buildPagesFor($for, $categoryKey=false, $tagKey=false) { function buildPagesFor($for, $categoryKey=false, $tagKey=false) {
global $dbPages; global $dbPages;
global $dbCategories; global $dbCategories;
@ -156,7 +168,7 @@ function buildPagesFor($for, $categoryKey=false, $tagKey=false) {
} }
$pages = array(); // global variable $pages = array(); // global variable
foreach($list as $pageKey=>$fields) { foreach($list as $pageKey) {
$page = buildPage($pageKey); $page = buildPage($pageKey);
if($page!==false) { if($page!==false) {
array_push($pages, $page); array_push($pages, $page);

View File

@ -22,6 +22,8 @@ class Filesystem {
return $directories; return $directories;
} }
// Returns an array with the list of files with the absolute path
// $sortByDate = TRUE, the first file is the newer file
public static function listFiles($path, $regex='*', $extension='*', $sortByDate=false) public static function listFiles($path, $regex='*', $extension='*', $sortByDate=false)
{ {
$files = glob($path.$regex.'.'.$extension); $files = glob($path.$regex.'.'.$extension);

View File

@ -1,11 +1,14 @@
{ {
"language-data": { "language-data": {
"native": "Русский (Россия)", "native": "Русский (Россия)",
"english-name": "Russian", "english-name": "Russian",
"last-update": "2017-10-17", "locale": "ru, ru_RU",
"author": "Сергей Ворон", "last-update": "2017-10-17",
"email": "sergey@voron.pw", "authors": {
"website": "http:\/\/voron.pw" "0": "Сергей Ворон http://voron.pw",
"1": "",
"2": ""
}
}, },
"dashboard": "Панель управления", "dashboard": "Панель управления",
"manage-users": "Управление пользователями", "manage-users": "Управление пользователями",

View File

@ -5,7 +5,7 @@
"locale": "tr_TR", "locale": "tr_TR",
"last-update": "2017-12-25", "last-update": "2017-12-25",
"author": "guleyc", "author": "guleyc",
"email": "cagatay@guley.co", "email": "cagatay@guley.co"
}, },
"dates": { "dates": {
"Mon": "Pzt", "Mon": "Pzt",

View File

@ -246,8 +246,7 @@ class pluginAPI extends Plugin {
); );
// Get keys of pages // Get keys of pages
$keys = array_keys($list); foreach ($list as $pageKey) {
foreach ($keys as $pageKey) {
// Create the page object from the page key // Create the page object from the page key
$page = buildPage($pageKey); $page = buildPage($pageKey);
array_push($tmp['data'], $page->json( $returnsArray=true )); array_push($tmp['data'], $page->json( $returnsArray=true ));

View File

@ -99,8 +99,7 @@ class pluginLatestContent extends Plugin {
} }
// Get keys of pages // Get keys of pages
$keys = array_keys($pages); foreach($pages as $pageKey) {
foreach($keys as $pageKey) {
// Create the page object from the page key // Create the page object from the page key
$page = buildPage($pageKey); $page = buildPage($pageKey);
$html .= '<li>'; $html .= '<li>';

View File

@ -55,8 +55,7 @@ class pluginRSS extends Plugin {
$xml .= '<description>'.$Site->description().'</description>'; $xml .= '<description>'.$Site->description().'</description>';
// Get keys of pages // Get keys of pages
$keys = array_keys($pages); foreach($pages as $pageKey) {
foreach($keys as $pageKey) {
// Create the page object from the page key // Create the page object from the page key
$page = buildPage($pageKey); $page = buildPage($pageKey);
$xml .= '<item>'; $xml .= '<item>';

View File

@ -31,10 +31,9 @@ class pluginSitemap extends Plugin {
$pageNumber = 1; $pageNumber = 1;
$amountOfItems = -1; $amountOfItems = -1;
$onlyPublished = true; $onlyPublished = true;
$db = $dbPages->getList($pageNumber, $amountOfItems, $onlyPublished); $pages = $dbPages->getList($pageNumber, $amountOfItems, $onlyPublished);
$keys = array_keys($db); foreach($pages as $pageKey) {
foreach($keys as $pageKey) {
// Create the page object from the page key // Create the page object from the page key
$page = buildPage($pageKey); $page = buildPage($pageKey);

View File

@ -42,7 +42,7 @@ class pluginStaticPages extends Plugin {
global $Site; global $Site;
global $dbPages; global $dbPages;
$pages = $dbPages->getStaticDB(); $pages = $dbPages->getStaticDB(true);
// HTML for sidebar // HTML for sidebar
$html = '<div class="plugin plugin-pages">'; $html = '<div class="plugin plugin-pages">';
@ -60,7 +60,6 @@ class pluginStaticPages extends Plugin {
} }
// Get keys of pages // Get keys of pages
$keys = array_keys($pages);
foreach($keys as $pageKey) { foreach($keys as $pageKey) {
// Create the page object from the page key // Create the page object from the page key
$page = buildPage($pageKey); $page = buildPage($pageKey);

1
bl-themes/alternative/.gitignore vendored Executable file
View File

@ -0,0 +1 @@
node_modules

View File

@ -0,0 +1,11 @@
sudo: false
language: node_js
node_js:
- "node"
install: npm install
script:
- npm test
- gulp
cache:
directories:
- node_modules

View File

@ -0,0 +1,19 @@
/*!
* Start Bootstrap - Scrolling Nav (https://startbootstrap.com/template-overviews/scrolling-nav)
* Copyright 2013-2017 Start Bootstrap
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-scrolling-nav/blob/master/LICENSE)
*/
header {
padding: 154px 0 100px;
}
@media (min-width: 992px) {
header {
padding: 156px 0 100px;
}
}
section {
padding: 150px 0;
}

62
bl-themes/alternative/index.php Executable file
View File

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<?php include(THEME_DIR_PHP.'head.php') ?>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="#page-top">BLUDIT</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link js-scroll-trigger" href="#about">about <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Features</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Pricing</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
</div>
</div>
</nav>
<header class="bg-primary text-white">
<div class="container text-center">
<h1>Welcome to Bludit</h1>
<p class="lead">Congratulations you have successfully installed your Bludit.</p>
</div>
</header>
<!-- Load all pages -->
<?php include(THEME_DIR_PHP.'home.php'); ?>
<!-- Footer -->
<footer class="py-5 bg-dark">
<div class="container">
<p class="m-0 text-center text-white">Copyright &copy; Your Website 2017</p>
</div>
<!-- /.container -->
</footer>
<?php
echo Theme::js('vendor/jquery/jquery.min.js');
echo Theme::js('vendor/bootstrap/js/bootstrap.bundle.min.js');
echo Theme::js('vendor/jquery-easing/jquery.easing.min.js');
echo Theme::js('js/scrolling-nav.js');
?>
</body>
</html>

View File

@ -0,0 +1,29 @@
(function($) {
"use strict"; // Start of use strict
// Smooth scrolling using jQuery easing
$('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
if (target.length) {
$('html, body').animate({
scrollTop: (target.offset().top - 54)
}, 1000, "easeInOutExpo");
return false;
}
}
});
// Closes responsive menu when a scroll trigger link is clicked
$('.js-scroll-trigger').click(function() {
$('.navbar-collapse').collapse('hide');
});
// Activate scrollspy to add active class to navbar items on scroll
$('body').scrollspy({
target: '#mainNav',
offset: 54
});
})(jQuery); // End of use strict

View File

@ -0,0 +1,7 @@
{
"theme-data":
{
"name": "Alternative",
"description": "One page landing page, for small websites."
}
}

View File

@ -0,0 +1,10 @@
{
"author": "Start Bootstrap",
"email": "",
"website": "https://startbootstrap.com/template-overviews/scrolling-nav/",
"version": "1.0",
"releaseDate": "2017-10-08",
"license": "MIT",
"compatible": "2.1",
"notes": ""
}

View File

@ -0,0 +1,16 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php
echo Theme::headTitle();
echo Theme::headDescription();
echo Theme::favicon('img/favicon.png');
// CSS files
echo Theme::css('vendor/bootstrap/css/bootstrap.min.css');
echo Theme::css('css/scrolling-nav.css');
// Load plugins with the hook siteHead
Theme::plugins('siteHead');
?>

View File

@ -0,0 +1,25 @@
<?php foreach ($pages as $page): ?>
<?php Theme::plugins('pageBegin') ?>
<section id="<?php echo $page->key() ?>" class="bg-light">
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<!-- Page title -->
<h2>
<?php echo $page->title() ?>
</h2>
<!-- Page content -->
<p class="lead">
<?php echo $page->content() ?>
</p>
</div>
</div>
</div>
</section>
<?php Theme::plugins('pageEnd') ?>
<?php endforeach ?>

View File

@ -0,0 +1,20 @@
<!-- Section -->
<section class="content">
<article class="page">
<?php Theme::plugins('pageBegin') ?>
<header>
<a href="<?php echo $page->permalink() ?>">
<h2><?php echo $page->title() ?></h2>
</a>
<?php if( $page->coverImage() ) { ?>
<img src="<?php echo $page->coverImage() ?>" alt="<?php echo $page->slug() ?>">
<?php } ?>
</header>
<?php echo $page->content() ?>
<footer>
<div class="date"><i class="fa fa-clock-o"></i> <?php echo $page->date() ?></div>
</footer>
<?php Theme::plugins('pageEnd') ?>
</article>
</section>

View File

@ -0,0 +1 @@
<?php Theme::plugins('siteSidebar') ?>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,342 @@
/*!
* Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors
* Copyright 2011-2017 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: transparent;
}
@-ms-viewport {
width: device-width;
}
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #fff;
}
[tabindex="-1"]:focus {
outline: none !important;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 0.5rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: .5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
dfn {
font-style: italic;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
a:hover {
color: #0056b3;
text-decoration: underline;
}
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus {
outline: 0;
}
pre,
code,
kbd,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
-ms-overflow-style: scrollbar;
}
figure {
margin: 0 0 1rem;
}
img {
vertical-align: middle;
border-style: none;
}
svg:not(:root) {
overflow: hidden;
}
a,
area,
button,
[role="button"],
input:not([type="range"]),
label,
select,
summary,
textarea {
-ms-touch-action: manipulation;
touch-action: manipulation;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
color: #868e96;
text-align: left;
caption-side: bottom;
}
th {
text-align: inherit;
}
label {
display: inline-block;
margin-bottom: .5rem;
}
button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html [type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type="radio"],
input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
padding: 0;
margin-bottom: .5rem;
font-size: 1.5rem;
line-height: inherit;
color: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors
* Copyright 2011-2017 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,59 @@
/*
* Easing Compatibility v1 - http://gsgd.co.uk/sandbox/jquery/easing
*
* Adds compatibility for applications that use the pre 1.2 easing names
*
* Copyright (c) 2007 George Smith
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*/
(function($){
$.extend( $.easing,
{
easeIn: function (x, t, b, c, d) {
return $.easing.easeInQuad(x, t, b, c, d);
},
easeOut: function (x, t, b, c, d) {
return $.easing.easeOutQuad(x, t, b, c, d);
},
easeInOut: function (x, t, b, c, d) {
return $.easing.easeInOutQuad(x, t, b, c, d);
},
expoin: function(x, t, b, c, d) {
return $.easing.easeInExpo(x, t, b, c, d);
},
expoout: function(x, t, b, c, d) {
return $.easing.easeOutExpo(x, t, b, c, d);
},
expoinout: function(x, t, b, c, d) {
return $.easing.easeInOutExpo(x, t, b, c, d);
},
bouncein: function(x, t, b, c, d) {
return $.easing.easeInBounce(x, t, b, c, d);
},
bounceout: function(x, t, b, c, d) {
return $.easing.easeOutBounce(x, t, b, c, d);
},
bounceinout: function(x, t, b, c, d) {
return $.easing.easeInOutBounce(x, t, b, c, d);
},
elasin: function(x, t, b, c, d) {
return $.easing.easeInElastic(x, t, b, c, d);
},
elasout: function(x, t, b, c, d) {
return $.easing.easeOutElastic(x, t, b, c, d);
},
elasinout: function(x, t, b, c, d) {
return $.easing.easeInOutElastic(x, t, b, c, d);
},
backin: function(x, t, b, c, d) {
return $.easing.easeInBack(x, t, b, c, d);
},
backout: function(x, t, b, c, d) {
return $.easing.easeOutBack(x, t, b, c, d);
},
backinout: function(x, t, b, c, d) {
return $.easing.easeInOutBack(x, t, b, c, d);
}
});})(jQuery);

View File

@ -0,0 +1,166 @@
/*
* jQuery Easing v1.4.1 - http://gsgd.co.uk/sandbox/jquery/easing/
* Open source under the BSD License.
* Copyright © 2008 George McGinley Smith
* All rights reserved.
* https://raw.github.com/gdsmith/jquery-easing/master/LICENSE
*/
(function (factory) {
if (typeof define === "function" && define.amd) {
define(['jquery'], function ($) {
return factory($);
});
} else if (typeof module === "object" && typeof module.exports === "object") {
exports = factory(require('jquery'));
} else {
factory(jQuery);
}
})(function($){
// Preserve the original jQuery "swing" easing as "jswing"
$.easing.jswing = $.easing.swing;
var pow = Math.pow,
sqrt = Math.sqrt,
sin = Math.sin,
cos = Math.cos,
PI = Math.PI,
c1 = 1.70158,
c2 = c1 * 1.525,
c3 = c1 + 1,
c4 = ( 2 * PI ) / 3,
c5 = ( 2 * PI ) / 4.5;
// x is the fraction of animation progress, in the range 0..1
function bounceOut(x) {
var n1 = 7.5625,
d1 = 2.75;
if ( x < 1/d1 ) {
return n1*x*x;
} else if ( x < 2/d1 ) {
return n1*(x-=(1.5/d1))*x + 0.75;
} else if ( x < 2.5/d1 ) {
return n1*(x-=(2.25/d1))*x + 0.9375;
} else {
return n1*(x-=(2.625/d1))*x + 0.984375;
}
}
$.extend( $.easing,
{
def: 'easeOutQuad',
swing: function (x) {
return $.easing[$.easing.def](x);
},
easeInQuad: function (x) {
return x * x;
},
easeOutQuad: function (x) {
return 1 - ( 1 - x ) * ( 1 - x );
},
easeInOutQuad: function (x) {
return x < 0.5 ?
2 * x * x :
1 - pow( -2 * x + 2, 2 ) / 2;
},
easeInCubic: function (x) {
return x * x * x;
},
easeOutCubic: function (x) {
return 1 - pow( 1 - x, 3 );
},
easeInOutCubic: function (x) {
return x < 0.5 ?
4 * x * x * x :
1 - pow( -2 * x + 2, 3 ) / 2;
},
easeInQuart: function (x) {
return x * x * x * x;
},
easeOutQuart: function (x) {
return 1 - pow( 1 - x, 4 );
},
easeInOutQuart: function (x) {
return x < 0.5 ?
8 * x * x * x * x :
1 - pow( -2 * x + 2, 4 ) / 2;
},
easeInQuint: function (x) {
return x * x * x * x * x;
},
easeOutQuint: function (x) {
return 1 - pow( 1 - x, 5 );
},
easeInOutQuint: function (x) {
return x < 0.5 ?
16 * x * x * x * x * x :
1 - pow( -2 * x + 2, 5 ) / 2;
},
easeInSine: function (x) {
return 1 - cos( x * PI/2 );
},
easeOutSine: function (x) {
return sin( x * PI/2 );
},
easeInOutSine: function (x) {
return -( cos( PI * x ) - 1 ) / 2;
},
easeInExpo: function (x) {
return x === 0 ? 0 : pow( 2, 10 * x - 10 );
},
easeOutExpo: function (x) {
return x === 1 ? 1 : 1 - pow( 2, -10 * x );
},
easeInOutExpo: function (x) {
return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
pow( 2, 20 * x - 10 ) / 2 :
( 2 - pow( 2, -20 * x + 10 ) ) / 2;
},
easeInCirc: function (x) {
return 1 - sqrt( 1 - pow( x, 2 ) );
},
easeOutCirc: function (x) {
return sqrt( 1 - pow( x - 1, 2 ) );
},
easeInOutCirc: function (x) {
return x < 0.5 ?
( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 :
( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2;
},
easeInElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 :
-pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 );
},
easeOutElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 :
pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1;
},
easeInOutElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
-( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 :
pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1;
},
easeInBack: function (x) {
return c3 * x * x * x - c1 * x * x;
},
easeOutBack: function (x) {
return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 );
},
easeInOutBack: function (x) {
return x < 0.5 ?
( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 :
( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2;
},
easeInBounce: function (x) {
return 1 - bounceOut( 1 - x );
},
easeOutBounce: bounceOut,
easeInOutBounce: function (x) {
return x < 0.5 ?
( 1 - bounceOut( 1 - 2 * x ) ) / 2 :
( 1 + bounceOut( 2 * x - 1 ) ) / 2;
}
});
});

View File

@ -0,0 +1 @@
(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],function($){return factory($)})}else if(typeof module==="object"&&typeof module.exports==="object"){exports=factory(require("jquery"))}else{factory(jQuery)}})(function($){$.easing.jswing=$.easing.swing;var pow=Math.pow,sqrt=Math.sqrt,sin=Math.sin,cos=Math.cos,PI=Math.PI,c1=1.70158,c2=c1*1.525,c3=c1+1,c4=2*PI/3,c5=2*PI/4.5;function bounceOut(x){var n1=7.5625,d1=2.75;if(x<1/d1){return n1*x*x}else if(x<2/d1){return n1*(x-=1.5/d1)*x+.75}else if(x<2.5/d1){return n1*(x-=2.25/d1)*x+.9375}else{return n1*(x-=2.625/d1)*x+.984375}}$.extend($.easing,{def:"easeOutQuad",swing:function(x){return $.easing[$.easing.def](x)},easeInQuad:function(x){return x*x},easeOutQuad:function(x){return 1-(1-x)*(1-x)},easeInOutQuad:function(x){return x<.5?2*x*x:1-pow(-2*x+2,2)/2},easeInCubic:function(x){return x*x*x},easeOutCubic:function(x){return 1-pow(1-x,3)},easeInOutCubic:function(x){return x<.5?4*x*x*x:1-pow(-2*x+2,3)/2},easeInQuart:function(x){return x*x*x*x},easeOutQuart:function(x){return 1-pow(1-x,4)},easeInOutQuart:function(x){return x<.5?8*x*x*x*x:1-pow(-2*x+2,4)/2},easeInQuint:function(x){return x*x*x*x*x},easeOutQuint:function(x){return 1-pow(1-x,5)},easeInOutQuint:function(x){return x<.5?16*x*x*x*x*x:1-pow(-2*x+2,5)/2},easeInSine:function(x){return 1-cos(x*PI/2)},easeOutSine:function(x){return sin(x*PI/2)},easeInOutSine:function(x){return-(cos(PI*x)-1)/2},easeInExpo:function(x){return x===0?0:pow(2,10*x-10)},easeOutExpo:function(x){return x===1?1:1-pow(2,-10*x)},easeInOutExpo:function(x){return x===0?0:x===1?1:x<.5?pow(2,20*x-10)/2:(2-pow(2,-20*x+10))/2},easeInCirc:function(x){return 1-sqrt(1-pow(x,2))},easeOutCirc:function(x){return sqrt(1-pow(x-1,2))},easeInOutCirc:function(x){return x<.5?(1-sqrt(1-pow(2*x,2)))/2:(sqrt(1-pow(-2*x+2,2))+1)/2},easeInElastic:function(x){return x===0?0:x===1?1:-pow(2,10*x-10)*sin((x*10-10.75)*c4)},easeOutElastic:function(x){return x===0?0:x===1?1:pow(2,-10*x)*sin((x*10-.75)*c4)+1},easeInOutElastic:function(x){return x===0?0:x===1?1:x<.5?-(pow(2,20*x-10)*sin((20*x-11.125)*c5))/2:pow(2,-20*x+10)*sin((20*x-11.125)*c5)/2+1},easeInBack:function(x){return c3*x*x*x-c1*x*x},easeOutBack:function(x){return 1+c3*pow(x-1,3)+c1*pow(x-1,2)},easeInOutBack:function(x){return x<.5?pow(2*x,2)*((c2+1)*2*x-c2)/2:(pow(2*x-2,2)*((c2+1)*(x*2-2)+c2)+2)/2},easeInBounce:function(x){return 1-bounceOut(1-x)},easeOutBounce:bounceOut,easeInOutBounce:function(x){return x<.5?(1-bounceOut(1-2*x))/2:(1+bounceOut(2*x-1))/2}})});

10253
bl-themes/alternative/vendor/jquery/jquery.js vendored Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long