Core update
This commit is contained in:
parent
0efe53af4a
commit
db831239af
7 changed files with 94 additions and 57 deletions
|
@ -15,7 +15,7 @@ With Yellow you don't get a lot of extra stuff, there are [Yellow extensions on
|
|||
How to make a website?
|
||||
----------------------
|
||||
You already have everything you need, start by editing the default pages.
|
||||
For more information please see [Yellow documentation](https://github.com/markseu/yellowcms-extensions/blob/master/documentation/README.md).
|
||||
For more information see [Yellow documentation](https://github.com/markseu/yellowcms-extensions/blob/master/documentation/README.md).
|
||||
|
||||
Need help? Have a question?
|
||||
---------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Yellow default style 0.1.1 */
|
||||
/* Yellow default style 0.1.2 */
|
||||
|
||||
html, body, div, span { margin:0; padding:0; border:0; vertical-align:baseline; }
|
||||
html, body, div, pre, span { margin:0; padding:0; border:0; vertical-align:baseline; }
|
||||
body {
|
||||
margin:1em;
|
||||
background-color:#fff; color:#717171;
|
||||
|
@ -27,6 +27,8 @@ a:hover { color:#07d; }
|
|||
.content a { color:#07d; }
|
||||
.content a:hover { color:#07d; text-decoration:underline; }
|
||||
.content img { max-width:100%; height:auto; }
|
||||
.content .flexible { position:relative; padding-bottom:56.25%; padding-top:30px; }
|
||||
.content .flexible iframe { position:absolute; top:0; left:0; width:100%; height:100%; }
|
||||
.footer { margin-top:0.5em; padding-top:0.5em; border-top:1px solid #ddd; }
|
||||
.left { float:left; margin:0 1em 0 0; }
|
||||
.center { display:block; margin:0 auto; }
|
||||
|
@ -34,8 +36,11 @@ a:hover { color:#07d; }
|
|||
|
||||
/* Responsive and print */
|
||||
|
||||
.page { margin:0 auto; max-width:62em; }
|
||||
|
||||
@media screen and (min-width:62em) {
|
||||
body { width:60em; margin:1em auto; }
|
||||
.page{ margin:0; max-width:none; }
|
||||
}
|
||||
@media screen and (max-width:30em) {
|
||||
body { margin:0.5em; font-size:0.9em; }
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
// Yellow main class
|
||||
class Yellow
|
||||
{
|
||||
const Version = "0.1.14";
|
||||
const Version = "0.1.16";
|
||||
var $page; //current page data
|
||||
var $pages; //current page tree from file system
|
||||
var $toolbox; //toolbox with helpers
|
||||
|
@ -393,22 +393,25 @@ class Yellow_Page
|
|||
// Parse page content
|
||||
function parseContent()
|
||||
{
|
||||
if(!is_object($this->parser))
|
||||
if(!is_object($this->parser) && $this->yellow->plugins->isExisting($this->get("parser")))
|
||||
{
|
||||
$text = substrb($this->rawData, $this->metaDataOffsetBytes);
|
||||
if($this->yellow->plugins->isExisting($this->get("parser")))
|
||||
{
|
||||
$this->parser = $this->yellow->plugins->plugins[$this->get("parser")]["obj"];
|
||||
$text = $this->parser->parse($text);
|
||||
}
|
||||
$this->parser = $this->yellow->plugins->plugins[$this->get("parser")]["obj"];
|
||||
$this->parser->parse(substrb($this->rawData, $this->metaDataOffsetBytes));
|
||||
foreach($this->yellow->plugins->plugins as $key=>$value)
|
||||
{
|
||||
if(method_exists($value["obj"], "onParseContent")) $text = $value["obj"]->onParseContent($text, $this->statusCode);
|
||||
if(method_exists($value["obj"], "onParseContent"))
|
||||
{
|
||||
$output = $value["obj"]->onParseContent($this->parser->textHtml);
|
||||
if(!is_null($output))
|
||||
{
|
||||
$this->parser->textHtml = $output;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->parser->textHtml = $text;
|
||||
if(!$this->isExisting("description"))
|
||||
{
|
||||
$this->set("description", $this->yellow->toolbox->createTextDescription($this->getContent(), 150));
|
||||
$this->set("description", $this->yellow->toolbox->createTextDescription($this->parser->textHtml, 150));
|
||||
}
|
||||
if(!$this->isExisting("keywords"))
|
||||
{
|
||||
|
@ -418,6 +421,21 @@ class Yellow_Page
|
|||
}
|
||||
}
|
||||
|
||||
// Parse custom type
|
||||
function parseType($name, $text, $typeShortcut)
|
||||
{
|
||||
$output = NULL;
|
||||
foreach($this->yellow->plugins->plugins as $key=>$value)
|
||||
{
|
||||
if(method_exists($value["obj"], "onParseType"))
|
||||
{
|
||||
$output = $value["obj"]->onParseType($name, $text, $typeShortcut);
|
||||
if(!is_null($output)) break;
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
// Respond with error page
|
||||
function error($statusCode, $pageError = "")
|
||||
{
|
||||
|
@ -1506,7 +1524,6 @@ class Yellow_Plugins
|
|||
{
|
||||
global $yellow;
|
||||
require_once("core_markdown.php");
|
||||
require_once("core_plaintext.php");
|
||||
require_once("core_commandline.php");
|
||||
require_once("core_webinterface.php");
|
||||
foreach($yellow->toolbox->getDirectoryEntries($yellow->config->get("pluginDir"), "/.*\.php/", true, false) as $entry)
|
||||
|
|
|
@ -5,24 +5,26 @@
|
|||
// Markdown parser core plugin
|
||||
class Yellow_Markdown
|
||||
{
|
||||
const Version = "0.1.5";
|
||||
var $markdown; //markdown parser
|
||||
var $textHtml; //generated text (HTML format)
|
||||
const Version = "0.1.6";
|
||||
var $yellow; //access to API
|
||||
var $textHtml; //generated text (HTML format)
|
||||
|
||||
// Initialise plugin
|
||||
function initPlugin($yellow)
|
||||
{
|
||||
$this->markdown = new Yellow_MarkdownExtraParser($yellow);
|
||||
$this->yellow = $yellow;
|
||||
}
|
||||
|
||||
// Parse text
|
||||
function parse($text)
|
||||
{
|
||||
return $this->textHtml = $this->markdown->transform($text);
|
||||
$markdown = new Yellow_MarkdownExtraParser($this->yellow);
|
||||
return $this->textHtml = $markdown->transform($text);
|
||||
}
|
||||
}
|
||||
|
||||
require("markdown.php");
|
||||
require_once("markdown.php");
|
||||
|
||||
class Yellow_MarkdownExtraParser extends MarkdownExtra_Parser
|
||||
{
|
||||
var $yellow; //access to API
|
||||
|
@ -40,6 +42,37 @@ class Yellow_MarkdownExtraParser extends MarkdownExtra_Parser
|
|||
$text = preg_replace("/@pageError/i", $this->yellow->page->get("pageError"), $text);
|
||||
return parent::transform($text);
|
||||
}
|
||||
|
||||
// Handle links
|
||||
function doAutoLinks($text)
|
||||
{
|
||||
$text = preg_replace_callback("/<(\w+:[^\'\">\s]+)>/", array(&$this, "_doAutoLinks_url_callback"), $text);
|
||||
$text = preg_replace_callback("/<(\w+@[\w\-\.]+)>/", array(&$this, "_doAutoLinks_email_callback"), $text);
|
||||
$text = preg_replace_callback("/\[(\w+)\s+(.*?)\]/", array(&$this, "_doAutoLinks_shortcut_callback"), $text);
|
||||
return $text;
|
||||
}
|
||||
|
||||
// Handle shortcuts
|
||||
function _doAutoLinks_shortcut_callback($matches)
|
||||
{
|
||||
$text = preg_replace("/\s+/s", " ", $matches[2]);
|
||||
$output = $this->yellow->page->parseType($matches[1], $text, true);
|
||||
if(is_null($output)) $output = $matches[0];
|
||||
return $this->hashBlock($output);
|
||||
}
|
||||
|
||||
// Handle fenced code blocks
|
||||
function _doFencedCodeBlocks_callback($matches)
|
||||
{
|
||||
$text = $matches[4];
|
||||
$output = $this->yellow->page->parseType($matches[2], $text, false);
|
||||
if(is_null($output))
|
||||
{
|
||||
$attr = $this->doExtraAttributes("pre", $dummy =& $matches[3]);
|
||||
$output = "<pre$attr><code>".htmlspecialchars($text, ENT_NOQUOTES)."</code></pre>";
|
||||
}
|
||||
return "\n\n".$this->hashBlock($output)."\n\n";
|
||||
}
|
||||
|
||||
// Handle images
|
||||
function _doImages_inline_callback($matches)
|
||||
|
@ -50,14 +83,13 @@ class Yellow_MarkdownExtraParser extends MarkdownExtra_Parser
|
|||
$alt = $matches[2];
|
||||
$title = $matches[7];
|
||||
$attr = $this->doExtraAttributes("img", $dummy =& $matches[8]);
|
||||
|
||||
$result = "<img src=\"".$this->encodeAttribute($src)."\"";
|
||||
if($width && $height) $result .= " width=\"$width\" height=\"$height\"";
|
||||
if(!empty($alt)) $result .= " alt=\"".$this->encodeAttribute($alt)."\"";
|
||||
if(!empty($title)) $result .= " title=\"".$this->encodeAttribute($title)."\"";
|
||||
$result .= $attr;
|
||||
$result .= $this->empty_element_suffix;
|
||||
return $this->hashPart($result);
|
||||
$output = "<img src=\"".$this->encodeAttribute($src)."\"";
|
||||
if($width && $height) $output .= " width=\"$width\" height=\"$height\"";
|
||||
if(!empty($alt)) $output .= " alt=\"".$this->encodeAttribute($alt)."\"";
|
||||
if(!empty($title)) $output .= " title=\"".$this->encodeAttribute($title)."\"";
|
||||
$output .= $attr;
|
||||
$output .= $this->empty_element_suffix;
|
||||
return $this->hashPart($output);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
<?php
|
||||
// Copyright (c) 2013 Datenstrom, http://datenstrom.se
|
||||
// This file may be used and distributed under the terms of the public license.
|
||||
|
||||
// Plain text parser core plugin
|
||||
class Yellow_Plaintext
|
||||
{
|
||||
const Version = "0.1.1";
|
||||
var $text; //plain text
|
||||
var $textHtml; //generated text (HTML format)
|
||||
|
||||
// Parse text, dummy transformation
|
||||
function parse($text)
|
||||
{
|
||||
$this->text = $text;
|
||||
return $textHtml;
|
||||
}
|
||||
}
|
||||
|
||||
$yellow->registerPlugin("plaintext", "Yellow_Plaintext", Yellow_Plaintext::Version);
|
||||
?>
|
|
@ -5,7 +5,7 @@
|
|||
// Web interface core plugin
|
||||
class Yellow_Webinterface
|
||||
{
|
||||
const Version = "0.1.7";
|
||||
const Version = "0.1.8";
|
||||
var $yellow; //access to API
|
||||
var $users; //web interface users
|
||||
var $activeLocation; //web interface location? (boolean)
|
||||
|
@ -47,15 +47,16 @@ class Yellow_Webinterface
|
|||
}
|
||||
|
||||
// Handle web content parsing
|
||||
function onParseContent($text, $statusCode)
|
||||
function onParseContent($text)
|
||||
{
|
||||
$output = NULL;
|
||||
if($this->isWebinterfaceLocation() && $this->isUser())
|
||||
{
|
||||
$serverBase = $this->yellow->config->get("serverBase");
|
||||
$webinterfaceLocation = trim($this->yellow->config->get("webinterfaceLocation"), '/');
|
||||
$text = preg_replace("#<a(.*?)href=\"$serverBase/(?!$webinterfaceLocation)(.*?)\"(.*?)>#",
|
||||
$output = preg_replace("#<a(.*?)href=\"$serverBase/(?!$webinterfaceLocation)(.*?)\"(.*?)>#",
|
||||
"<a$1href=\"$serverBase/$webinterfaceLocation/$2\"$3>", $text);
|
||||
switch($statusCode)
|
||||
switch($this->yellow->page->statusCode)
|
||||
{
|
||||
case 200: $this->rawDataOriginal = $this->yellow->page->rawData; break;
|
||||
case 424: $language = $this->isUser() ? $this->users->getLanguage($this->activeUserEmail) : $this->yellow->page->get("language");
|
||||
|
@ -68,7 +69,7 @@ class Yellow_Webinterface
|
|||
case 500: $this->yellow->page->rawData = $this->rawDataOriginal; break;
|
||||
}
|
||||
}
|
||||
return $text;
|
||||
return $output;
|
||||
}
|
||||
|
||||
// Handle extra HTML header lines
|
||||
|
@ -289,14 +290,14 @@ class Yellow_WebinterfaceUsers
|
|||
// Check user login from browser cookie
|
||||
function checkCookie($cookie)
|
||||
{
|
||||
list($email, $salt, $session) = explode(";", $cookie);
|
||||
list($email, $salt, $session) = explode(';', $cookie);
|
||||
return $this->isExisting($email) && hash("sha256", $salt.$this->users[$email]["session"])==$session;
|
||||
}
|
||||
|
||||
// Return user email from browser cookie
|
||||
function getCookieEmail($cookie)
|
||||
{
|
||||
list($email, $salt, $session) = explode(";", $cookie);
|
||||
list($email, $salt, $session) = explode(';', $cookie);
|
||||
return $email;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
<?php
|
||||
// Yellow is a CMS for people who make websites. https://github.com/markseu/yellowcms
|
||||
// For more information see Yellow documentation. Have fun making your website.
|
||||
|
||||
require_once("system/core/core.php");
|
||||
if(PHP_SAPI != "cli")
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue