mirror of
https://github.com/Mibew/CanteenHTML5.git
synced 2024-11-15 00:34:11 +03:00
Initial library add
This commit is contained in:
parent
a8a673334b
commit
4ac107b5bd
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013 Canteen
|
||||
Copyright (c) 2013 Matt Karl
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
|
227
README.md
227
README.md
@ -1,4 +1,225 @@
|
||||
CanteenHTML5
|
||||
============
|
||||
#CanteenHTML5
|
||||
|
||||
Create dynamic, valid HTML5 markup with a simple an intuitive PHP API
|
||||
Create dynamic, well-formatted HTML5 markup with a simple an intuitive PHP API. This is a fork/rewrite of the [Gagawa](https://code.google.com/p/gagawa/) project. CanteenHTML5 is a concise, flexible and easy to remember API which makes it possible to create simple markup (such as a link) or more complex structures (such a table, document or nested list). All tags and attribute names are validated against the current HTML5 specification.
|
||||
|
||||
##Requirements
|
||||
|
||||
|
||||
This library requires a webserver running PHP 5.3+. Also, the root namespace for the library is `Canteen\HTML5`.
|
||||
|
||||
##Installation
|
||||
|
||||
Simply include the `html.php` file.
|
||||
|
||||
```php
|
||||
include 'lib/html.php';
|
||||
```
|
||||
|
||||
##Usage
|
||||
|
||||
###Basic
|
||||
To create an HTML node, simply call global `html` method, passing in the tag name and then any attributes.
|
||||
|
||||
```php
|
||||
echo html('img src=home.jpg');
|
||||
echo html('img', 'src=home.jpg');
|
||||
echo html('img', array('src'=>'home.jpg'));
|
||||
```
|
||||
|
||||
All of these examples would output:
|
||||
|
||||
```html
|
||||
<img src="home.jpg" />
|
||||
```
|
||||
|
||||
###Adding Attributes
|
||||
|
||||
There are dfferent ways to add attributes for HTML container nodes such as `<p>`, `<div>`, or in the example below, `<nav>`.
|
||||
|
||||
1. Part of the tag
|
||||
|
||||
```php
|
||||
echo html('nav title="Navigation" class=main', 'Welcome');
|
||||
```
|
||||
|
||||
2. As an associative array
|
||||
|
||||
```php
|
||||
echo html('nav', 'Welcome', array('title'=>'Navigation', 'class'=>'main'));
|
||||
```
|
||||
|
||||
3. As a shorthand string
|
||||
|
||||
```php
|
||||
echo html('nav', 'Welcome', 'title="Navigation" class=main');
|
||||
```
|
||||
|
||||
4. As an property methods
|
||||
|
||||
```php
|
||||
$nav = html('nav', 'Welcome');
|
||||
$nav->class = 'main';
|
||||
$nav->title = 'Navigation';
|
||||
echo $nav;
|
||||
```
|
||||
|
||||
All of these examples output the same markup:
|
||||
```html
|
||||
<nav title="Navigation" class="main">Welcome</nav>
|
||||
```
|
||||
|
||||
###Adding Nested Elements
|
||||
|
||||
Any HTML5 container tags (such as `<p>`, `<span>`, or `<div>`) can have child elements. These elements can be strings or other HTML5 element objects.
|
||||
|
||||
```php
|
||||
$label = html('span', 'Website!');
|
||||
$link = html('a', $label);
|
||||
$link->href = 'http://example.com';
|
||||
echo $link;
|
||||
```
|
||||
|
||||
Alternatively, use the `addChild` method for any container tag.
|
||||
|
||||
```php
|
||||
$link = html('a');
|
||||
$link->href = 'http://example.com';
|
||||
$link->addChild(html('span', 'Website!'));
|
||||
echo $link;
|
||||
```
|
||||
|
||||
Or `appendTo` to target a container to be added to:
|
||||
|
||||
```php
|
||||
$link = html('a');
|
||||
$link->href = 'http://example.com';
|
||||
html('span', 'Website!')->appendTo($link);
|
||||
echo $link;
|
||||
```
|
||||
All examples would output:
|
||||
|
||||
```html
|
||||
<a href="http://example.com"><span>Website!</span></a>
|
||||
```
|
||||
|
||||
###CSS Selectors
|
||||
|
||||
Tag names can optionally have CSS-style class and id selectors:
|
||||
|
||||
```php
|
||||
echo html('a#example'); //<a id="example"></a>
|
||||
echo html('span.small'); //<span class="small"></span>
|
||||
echo html('span.small.label'); //<span class="small label"></span>
|
||||
echo html('span#example.small.label'); //<span id="example" class="small label"></span>
|
||||
```
|
||||
|
||||
##API Documentation
|
||||
|
||||
####For self-closing elements (e.g. `<br>`, `<img>`)
|
||||
|
||||
```php
|
||||
html($tag, $attributes=null);
|
||||
```
|
||||
+ `$tag` **{string}** The name of the valid HTML5 element which can contain CSS selectors or short-hand attribute string.
|
||||
+ `$attributes` **{array | string}** (optional) Collection of element attributes
|
||||
|
||||
Returns a `Canteen\HTML5\Node` object.
|
||||
|
||||
####Node Methods
|
||||
|
||||
+ `setAttribute($name, $value)` Set an attribute by name and value.
|
||||
+ `setAttributes($values)` Set an associative array of name/value pairs.
|
||||
+ `setData($name, $value)` Set data-* fields on the HTML5 element.
|
||||
+ `getData($name)` Get the data-* field on the HTML5 element.
|
||||
+ `appendTo(NodeContainer $container)` Add the element to the end of a container element.
|
||||
+ `prependTo(NodeContainer $container)` Add the element to the beginning of a container element.
|
||||
|
||||
####For container HTML elements (e.g. `<p>`, `<div>`)
|
||||
|
||||
```php
|
||||
html($tag, $contents=null, $attributes=null);
|
||||
```
|
||||
+ `$tag` **{string}** The name of the valid HTML5 element which can contain CSS selectors or short-hand attribute string.
|
||||
+ `$contents` **{string | Node | NodeContainer}** (optional) The string of the contents of the tag, or another element created by `html()`
|
||||
+ `$attributes` **{array | string}** (optional) Collection of element attributes
|
||||
|
||||
Returns a `Canteen\HTML5\NodeContainer` object.
|
||||
|
||||
####NodeContainer Methods (extends `Node`)
|
||||
|
||||
+ `addChild($node)` Add a `Node` object to the bottom of the collection of nodes
|
||||
+ `addChildAt($node, $index)` Add a `Node` object at a specific zero-based index
|
||||
+ `removeChild($node)` Remove a particular node from the container
|
||||
+ `removeChildAt($index)` Remove a node by zero-based index
|
||||
+ `removeChildren()` Remove all children from the container
|
||||
+ `getChildren()` Get the collection of all `Node` objects
|
||||
+ `getChildAt($index)` Get a `Node` object at a specific index
|
||||
|
||||
###Additional Components
|
||||
|
||||
####Document
|
||||
|
||||
The `Document` object is used for creating a bare-bones HTML5 document.
|
||||
|
||||
```php
|
||||
Canteen\HTML5\Document($title='', $charset='utf-8', $beautify=false);
|
||||
```
|
||||
+ `$title` **{string}** (optional) The title of the document
|
||||
+ `$charset` **{string}** (optional) The HTML character set to use
|
||||
+ `$beautify` **{boolean}** (optional) If the output should be an indented work of art.
|
||||
|
||||
Properties
|
||||
|
||||
+ `head` **{NodeContainer}** The document's `<head>` element
|
||||
+ `body` **{NodeContainer}** The document's `<body>` element
|
||||
+ `title` **{NodeContainer}** The document's `<title>` element
|
||||
|
||||
```php
|
||||
use Canteen\HTML5\Document;
|
||||
$doc = new Document('Untitled');
|
||||
$doc->head->addChild(html('script src=main.js'));
|
||||
$doc->body->addChild(html('div#frame'));
|
||||
echo $doc;
|
||||
```
|
||||
|
||||
####SimpleList
|
||||
|
||||
The `SimpleList` for conveniently creating `<ul>` and `<ol>` elements.
|
||||
|
||||
```php
|
||||
Canteen\HTML5\SimpleList($elements, $attributes=null, $type="ul");
|
||||
```
|
||||
|
||||
+ `$elements` **{array}** The collection of strings or other HTML elements
|
||||
+ `$attributes` **{array | string}** (optional) Collection of element attributes
|
||||
+ `$type` **{string}** (optional) A value of either "ul" or "ol"
|
||||
|
||||
####Table
|
||||
|
||||
The `Table` object is used for creating `<table>` elements.
|
||||
|
||||
```php
|
||||
Canteen\HTML5\Table($data, $headers=null, $checkbox=null);
|
||||
```
|
||||
|
||||
+ `$data` **{array}** The collection of associative-arrays with key/value pairs
|
||||
+ `$headers` **{array}** (optional) The names of the header labels
|
||||
+ `$checkbox` **{string}** (optional) The name of the key name in the data to replace with a checkbox, for instance "id"
|
||||
|
||||
```php
|
||||
// Create a sample table with some rows of dummy data
|
||||
$table = new Table(
|
||||
array(
|
||||
array('id'=>1, 'first'=>'James', 'last'=>'Smith'),
|
||||
array('id'=>2, 'first'=>'Mary', 'last'=>'Denver'),
|
||||
array('id'=>3, 'first'=>'Charlie', 'last'=>'Rose')
|
||||
),
|
||||
array('ID', 'First Name', 'Last Name')
|
||||
);
|
||||
```
|
||||
|
||||
##License##
|
||||
|
||||
Copyright (c) 2013 Matt Karl and [CloudKid, LLC](http://cloudkid.com)
|
||||
|
||||
Released under the MIT License.
|
10
build.properties
Normal file
10
build.properties
Normal file
@ -0,0 +1,10 @@
|
||||
source.dir=src
|
||||
docs=yuidoc
|
||||
docs.config=docs.json
|
||||
docs.outdir=docs
|
||||
docs.name=Canteen HTML5 API
|
||||
docs.description=Create dynamic, valid HTML5 markup with a simple an intuitive PHP API
|
||||
docs.logo=
|
||||
docs.themedir=../CanteenTheme
|
||||
docs.helpers=${docs.themedir}/path.js
|
||||
docs.version=1.0.0
|
32
build.xml
Normal file
32
build.xml
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0"?>
|
||||
<project name="CanteenHTML5" default="docs" basedir="./">
|
||||
|
||||
<property file="${os.name}.build.properties"/>
|
||||
<property file="build.properties"/>
|
||||
|
||||
<target name="docs" description="Use YUIDoc to build the documentation for this library.">
|
||||
<copy file="${docs.config}" tofile="temp.json" overwrite="true" />
|
||||
<replaceregexp file="temp.json" match="\$\{docs\.description\}" replace="${docs.description}" flags="g" />
|
||||
<replaceregexp file="temp.json" match="\$\{docs\.name\}" replace="${docs.name}" flags="g" />
|
||||
<replaceregexp file="temp.json" match="\$\{docs\.version\}" replace="${docs.version}" flags="g" />
|
||||
<replaceregexp file="temp.json" match="\$\{docs\.outdir\}" replace="${docs.outdir}" flags="g" />
|
||||
<replaceregexp file="temp.json" match="\$\{docs\.logo\}" replace="${docs.logo}" flags="g" />
|
||||
<replaceregexp file="temp.json" match="\$\{docs\.helpers\}" replace="${docs.helpers}" flags="g" />
|
||||
<replaceregexp file="temp.json" match="\$\{docs\.themedir\}" replace="${docs.themedir}" flags="g" />
|
||||
<exec executable="${docs}">
|
||||
<arg line="${source.dir}" />
|
||||
<arg line="--extension .php" />
|
||||
<arg line="--no-code" />
|
||||
<arg line="--quiet" />
|
||||
<arg line="--config temp.json" />
|
||||
</exec>
|
||||
<delete file="temp.json" />
|
||||
</target>
|
||||
|
||||
<target name="clean" description="Remove all the YUIDocs">
|
||||
<delete includeemptydirs="true">
|
||||
<fileset dir="${docs.outdir}" includes="**/*" />
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
</project>
|
31
composer.json
Normal file
31
composer.json
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "Canteen/HTML5",
|
||||
"description" : "Create dynamic, valid HTML5 markup with a simple an intuitive PHP API",
|
||||
"version" : "1.0.0",
|
||||
"type": "library",
|
||||
"keywords": ["html5", "markup", "document", "html", "tags"],
|
||||
"license": "MIT",
|
||||
"homepage" : "http://github.com/Canteen/CanteenHTML5",
|
||||
"time": "2013-10-12",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Matt Karl",
|
||||
"email": "matt@mattkarl.com",
|
||||
"homepage": "http://github.com/bigtimebuddy",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Canteen\\HTML5" : "src/"
|
||||
},
|
||||
"files": ["src/Canteen/HTML5/html.php"]
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/Canteen/CanteenHTML5"
|
||||
}
|
||||
]
|
||||
}
|
14
docs.json
Normal file
14
docs.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "${docs.name}",
|
||||
"description": "${docs.description}",
|
||||
"version": "${version}",
|
||||
"logo":"${docs.logo}",
|
||||
"options" : {
|
||||
"linkNatives": true,
|
||||
"attributesEmit": true,
|
||||
"selleck": true,
|
||||
"helpers": ["${docs.helpers}"],
|
||||
"themedir" : "${docs.themedir}",
|
||||
"outdir" : "${docs.outdir}"
|
||||
}
|
||||
}
|
30
docs/api.js
Normal file
30
docs/api.js
Normal file
@ -0,0 +1,30 @@
|
||||
YUI.add("yuidoc-meta", function(Y) {
|
||||
Y.YUIDoc = { meta: {
|
||||
"classes": [
|
||||
"Attribute",
|
||||
"Comment",
|
||||
"Document",
|
||||
"HTML5Error",
|
||||
"Node",
|
||||
"NodeContainer",
|
||||
"SimpleList",
|
||||
"Table",
|
||||
"Text",
|
||||
"html"
|
||||
],
|
||||
"modules": [
|
||||
"Canteen_HTML5",
|
||||
"global"
|
||||
],
|
||||
"allModules": [
|
||||
{
|
||||
"displayName": "Canteen\\HTML5",
|
||||
"name": "Canteen_HTML5"
|
||||
},
|
||||
{
|
||||
"displayName": "global",
|
||||
"name": "global"
|
||||
}
|
||||
]
|
||||
} };
|
||||
});
|
BIN
docs/assets/css/external-small.png
Normal file
BIN
docs/assets/css/external-small.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 491 B |
BIN
docs/assets/css/logo.png
Normal file
BIN
docs/assets/css/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
849
docs/assets/css/main.css
Normal file
849
docs/assets/css/main.css
Normal file
@ -0,0 +1,849 @@
|
||||
/*
|
||||
Font sizes for all selectors other than the body are given in percentages,
|
||||
with 100% equal to 13px. To calculate a font size percentage, multiply the
|
||||
desired size in pixels by 7.6923076923.
|
||||
|
||||
Here's a quick lookup table:
|
||||
|
||||
10px - 76.923%
|
||||
11px - 84.615%
|
||||
12px - 92.308%
|
||||
13px - 100%
|
||||
14px - 107.692%
|
||||
15px - 115.385%
|
||||
16px - 123.077%
|
||||
17px - 130.769%
|
||||
18px - 138.462%
|
||||
19px - 146.154%
|
||||
20px - 153.846%
|
||||
*/
|
||||
html {
|
||||
background: #e6e6e6;
|
||||
color: #111111;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
body {
|
||||
font: 13px/1.4 'Lucida Grande', 'Lucida Sans Unicode', 'DejaVu Sans', 'Bitstream Vera Sans', 'Helvetica', 'Arial', sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/* -- Links ----------------------------------------------------------------- */
|
||||
a {
|
||||
color: #356de4;
|
||||
text-decoration: none;
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
/* "Jump to Table of Contents" link is shown to assistive tools, but hidden from
|
||||
sight until it's focused. */
|
||||
.jump {
|
||||
position: absolute;
|
||||
padding: 3px 6px;
|
||||
left: -99999px;
|
||||
top: 0;
|
||||
}
|
||||
.jump:focus {
|
||||
left: 40%;
|
||||
}
|
||||
/* -- Paragraphs ------------------------------------------------------------ */
|
||||
p {
|
||||
margin: 1.3em 0;
|
||||
}
|
||||
dd p,
|
||||
td p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
dd p:first-child,
|
||||
td p:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
/* -- Headings -------------------------------------------------------------- */
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
color: #111111 !important;
|
||||
/*was #f80*/
|
||||
|
||||
font-weight: 100;
|
||||
line-height: 1.1;
|
||||
margin: 1.1em 0 0.5em;
|
||||
}
|
||||
h1 {
|
||||
font-size: 184.6%;
|
||||
margin: 0;
|
||||
}
|
||||
h2 {
|
||||
font-size: 153.846%;
|
||||
margin: 0 !important;
|
||||
padding: 1.5em 0 .5em 0;
|
||||
/*border-bottom: 1px solid #c3c3c3 !important;*/
|
||||
}
|
||||
h3 {
|
||||
font-size: 138.462%;
|
||||
padding: 1.5em 0 .5em 0;
|
||||
}
|
||||
h4 {
|
||||
border-bottom: 1px solid #DBDFEA;
|
||||
color: #E48A2B;
|
||||
font-size: 115.385%;
|
||||
font-weight: normal;
|
||||
padding: 1em 0 0 0;
|
||||
}
|
||||
h5,
|
||||
h6 {
|
||||
font-size: 107.692%;
|
||||
}
|
||||
/* -- Code and examples ----------------------------------------------------- */
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: Menlo, Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;
|
||||
font-size: 92.308%;
|
||||
line-height: 1.35;
|
||||
}
|
||||
p code,
|
||||
p kbd,
|
||||
p samp {
|
||||
background: #FCFBFA;
|
||||
border: 1px solid #EFEEED;
|
||||
padding: 0 3px;
|
||||
}
|
||||
a code,
|
||||
a kbd,
|
||||
a samp,
|
||||
pre code,
|
||||
pre kbd,
|
||||
pre samp,
|
||||
table code,
|
||||
table kbd,
|
||||
table samp,
|
||||
.intro code,
|
||||
.intro kbd,
|
||||
.intro samp,
|
||||
.toc code,
|
||||
.toc kbd,
|
||||
.toc samp {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
pre.code,
|
||||
pre.terminal,
|
||||
pre.cmd {
|
||||
overflow-x: auto;
|
||||
*overflow-x: scroll;
|
||||
padding: 1em;
|
||||
}
|
||||
pre.code {
|
||||
background: #fff;
|
||||
border: 1px solid #c3c3c3;
|
||||
border-left-width: 5px;
|
||||
line-height: 150%;
|
||||
}
|
||||
pre.terminal,
|
||||
pre.cmd {
|
||||
background: #F0EFFC;
|
||||
border: 1px solid #D0CBFB;
|
||||
border-left: 5px solid #D0CBFB;
|
||||
}
|
||||
/* Don't reduce the font size of <code>/<kbd>/<samp> elements inside <pre>
|
||||
blocks. */
|
||||
pre code,
|
||||
pre kbd,
|
||||
pre samp {
|
||||
font-size: 100%;
|
||||
}
|
||||
/* Used to denote text that shouldn't be selectable, such as line numbers or
|
||||
shell prompts. Guess which browser this doesn't work in. */
|
||||
.noselect {
|
||||
-moz-user-select: -moz-none;
|
||||
-khtml-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
-o-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
/* -- Lists ----------------------------------------------------------------- */
|
||||
dd {
|
||||
margin: 0.2em 0 0.7em 1em;
|
||||
}
|
||||
dl {
|
||||
margin: 1em 0;
|
||||
}
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
/* -- Tables ---------------------------------------------------------------- */
|
||||
caption,
|
||||
th {
|
||||
text-align: left;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
td,
|
||||
th {
|
||||
border: 1px solid #fff;
|
||||
padding: 5px 12px;
|
||||
vertical-align: top;
|
||||
}
|
||||
td {
|
||||
background: #E6E9F5;
|
||||
}
|
||||
td dl {
|
||||
margin: 0;
|
||||
}
|
||||
td dl dl {
|
||||
margin: 1em 0;
|
||||
}
|
||||
td pre:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
th {
|
||||
background: #D2D7E6;
|
||||
/*#97A0BF*/
|
||||
|
||||
border-bottom: none;
|
||||
border-top: none;
|
||||
color: #000;
|
||||
/*#FFF1D5*/
|
||||
|
||||
font-family: 'Trebuchet MS', sans-serif;
|
||||
font-weight: bold;
|
||||
line-height: 1.3;
|
||||
white-space: nowrap;
|
||||
}
|
||||
/* -- Layout and Content ---------------------------------------------------- */
|
||||
#doc {
|
||||
margin: auto;
|
||||
min-width: 1024px;
|
||||
}
|
||||
.content {
|
||||
padding: 0 20px 0 25px;
|
||||
}
|
||||
.sidebar {
|
||||
padding: 0 2em;
|
||||
}
|
||||
#bd {
|
||||
padding: 7px 0 30px;
|
||||
position: relative;
|
||||
width: 99%;
|
||||
}
|
||||
/* -- Table of Contents ----------------------------------------------------- */
|
||||
/* The #toc id refers to the single global table of contents, while the .toc
|
||||
class refers to generic TOC lists that could be used throughout the page. */
|
||||
.toc code,
|
||||
.toc kbd,
|
||||
.toc samp {
|
||||
font-size: 100%;
|
||||
}
|
||||
.toc li {
|
||||
font-weight: bold;
|
||||
}
|
||||
.toc li li {
|
||||
font-weight: normal;
|
||||
}
|
||||
/* -- Intro and Example Boxes ----------------------------------------------- */
|
||||
/*
|
||||
.intro, .example { margin-bottom: 2em; }
|
||||
.example {
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
-moz-box-shadow: 0 0 5px #bfbfbf;
|
||||
-webkit-box-shadow: 0 0 5px #bfbfbf;
|
||||
box-shadow: 0 0 5px #bfbfbf;
|
||||
padding: 1em;
|
||||
}
|
||||
.intro {
|
||||
background: none repeat scroll 0 0 #F0F1F8; border: 1px solid #D4D8EB; padding: 0 1em;
|
||||
}
|
||||
*/
|
||||
/* -- Other Styles ---------------------------------------------------------- */
|
||||
/* These are probably YUI-specific, and should be moved out of Selleck's default
|
||||
theme. */
|
||||
.button {
|
||||
border: 1px solid #dadada;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
color: #444;
|
||||
display: inline-block;
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 92.308%;
|
||||
font-weight: bold;
|
||||
padding: 4px 13px 3px;
|
||||
white-space: nowrap;
|
||||
background: #EFEFEF;
|
||||
/* old browsers */
|
||||
|
||||
background: -moz-linear-gradient(top, #f5f5f5 0%, #efefef 50%, #e5e5e5 51%, #dfdfdf 100%);
|
||||
/* firefox */
|
||||
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(50%, #efefef), color-stop(51%, #e5e5e5), color-stop(100%, #dfdfdf));
|
||||
/* webkit */
|
||||
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#dfdfdf', GradientType=0);
|
||||
/* ie */
|
||||
|
||||
}
|
||||
.button:hover {
|
||||
border-color: #466899;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
background: #6396D8;
|
||||
/* old browsers */
|
||||
|
||||
background: -moz-linear-gradient(top, #6396d8 0%, #5a83bc 50%, #547ab7 51%, #466899 100%);
|
||||
/* firefox */
|
||||
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #6396d8), color-stop(50%, #5a83bc), color-stop(51%, #547ab7), color-stop(100%, #466899));
|
||||
/* webkit */
|
||||
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6396D8', endColorstr='#466899', GradientType=0);
|
||||
/* ie */
|
||||
|
||||
}
|
||||
.newwindow {
|
||||
text-align: center;
|
||||
}
|
||||
#hd h1 {
|
||||
font-size: 100%;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.header .version em {
|
||||
display: block;
|
||||
text-align: right;
|
||||
line-height: 60px;
|
||||
color: #779CC5;
|
||||
}
|
||||
#classdocs .item {
|
||||
border-bottom: 0; /*1px solid #c3c3c3*/
|
||||
margin: 0 !important;
|
||||
padding: 2em;
|
||||
border-top:1px solid #ddd;
|
||||
}
|
||||
/*#classdocs .item:nth-child(2n) {
|
||||
background-color: #f3f3f3;
|
||||
}*/
|
||||
#classdocs h2 {
|
||||
padding-top: 0 !important;
|
||||
}
|
||||
#classdocs .item .params p,
|
||||
#classdocs .item .returns p {
|
||||
display: inline;
|
||||
}
|
||||
#classdocs .item em code,
|
||||
#classdocs .item em.comment {
|
||||
color: green;
|
||||
}
|
||||
#classdocs .item em.comment a {
|
||||
color: green;
|
||||
text-decoration: underline;
|
||||
}
|
||||
#classdocs .foundat {
|
||||
font-size: 11px;
|
||||
font-style: normal;
|
||||
}
|
||||
.attrs .emits {
|
||||
margin-left: 2em;
|
||||
padding: .5em;
|
||||
border-left: 1px dashed #ccc;
|
||||
}
|
||||
abbr {
|
||||
border-bottom: 1px dashed #ccc;
|
||||
font-size: 80%;
|
||||
cursor: help;
|
||||
}
|
||||
.prettyprint li.L0,
|
||||
.prettyprint li.L1,
|
||||
.prettyprint li.L2,
|
||||
.prettyprint li.L3,
|
||||
.prettyprint li.L5,
|
||||
.prettyprint li.L6,
|
||||
.prettyprint li.L7,
|
||||
.prettyprint li.L8 {
|
||||
list-style: decimal;
|
||||
}
|
||||
ul li p {
|
||||
margin-top: 0;
|
||||
}
|
||||
.method .name {
|
||||
font-size: 110%;
|
||||
}
|
||||
.apidocs .methods .extends .method,
|
||||
.apidocs .properties .extends .property,
|
||||
.apidocs .attrs .extends .attr,
|
||||
.apidocs .events .extends .event {
|
||||
font-weight: bold;
|
||||
}
|
||||
.apidocs .methods .extends .inherited,
|
||||
.apidocs .properties .extends .inherited,
|
||||
.apidocs .attrs .extends .inherited,
|
||||
.apidocs .events .extends .inherited {
|
||||
font-weight: normal;
|
||||
}
|
||||
#hd {
|
||||
padding: 0 15px 1px 20px;
|
||||
background-color:#396EA0;
|
||||
margin-bottom:20px;
|
||||
}
|
||||
#hd img {
|
||||
margin-top:15px;
|
||||
}
|
||||
/* -- API Docs CSS ---------------------------------------------------------- */
|
||||
/*
|
||||
This file is organized so that more generic styles are nearer the top, and more
|
||||
specific styles are nearer the bottom of the file. This allows us to take full
|
||||
advantage of the cascade to avoid redundant style rules. Please respect this
|
||||
convention when making changes.
|
||||
*/
|
||||
/* -- Generic TabView styles ------------------------------------------------ */
|
||||
/*
|
||||
These styles apply to all API doc tabviews. To change styles only for a
|
||||
specific tabview, see the other sections below.
|
||||
*/
|
||||
.yui3-js-enabled .apidocs .tabview {
|
||||
visibility: hidden;
|
||||
/* Hide until the TabView finishes rendering. */
|
||||
|
||||
_visibility: visible;
|
||||
}
|
||||
.apidocs .tabview.yui3-tabview-content {
|
||||
visibility: visible;
|
||||
}
|
||||
.apidocs .tabview .yui3-tabview-panel {
|
||||
background: #fff;
|
||||
padding: 1em;
|
||||
border: 1px solid #c3c3c3 !important;
|
||||
}
|
||||
/* -- Generic Content Styles ------------------------------------------------ */
|
||||
/* Headings */
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
border: none;
|
||||
color: #30418C;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
}
|
||||
.link-docs {
|
||||
float: right;
|
||||
font-size: 15px;
|
||||
margin: 4px 4px 6px;
|
||||
padding: 6px 30px 5px;
|
||||
}
|
||||
.apidocs {
|
||||
zoom: 1;
|
||||
}
|
||||
/* Generic box styles. */
|
||||
.apidocs .box {
|
||||
border: 1px solid;
|
||||
border-radius: 3px;
|
||||
margin: 1em 0;
|
||||
padding: 0 1em;
|
||||
}
|
||||
/* A flag is a compact, capsule-like indicator of some kind. It's used to
|
||||
indicate private and protected items, item return types, etc. in an
|
||||
attractive and unobtrusive way. */
|
||||
.apidocs .flag {
|
||||
background: #999;
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
font-size: 11px;
|
||||
margin: 0 0.5em;
|
||||
padding: 4px 6px;
|
||||
position: relative;
|
||||
top: -2px;
|
||||
}
|
||||
/* Class/module metadata such as "Uses", "Extends", "Defined in", etc. */
|
||||
.apidocs .meta {
|
||||
border: none;
|
||||
border-top: 1px solid #c3c3c3;
|
||||
color: #555;
|
||||
font-size: 11px;
|
||||
padding: 1em 0;
|
||||
}
|
||||
.apidocs .meta p {
|
||||
margin: 0;
|
||||
}
|
||||
/* Deprecation warning. */
|
||||
.apidocs .box.deprecated,
|
||||
.apidocs .flag.deprecated {
|
||||
background: #fdac9f;
|
||||
border: 1px solid #fd7775;
|
||||
}
|
||||
.apidocs .box.deprecated p {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
.apidocs .flag.deprecated {
|
||||
color: #444444;
|
||||
}
|
||||
/* Module/Class intro description. */
|
||||
.apidocs .intro {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0 !important;
|
||||
}
|
||||
/* Loading spinners. */
|
||||
#bd.loading .apidocs,
|
||||
#api-list.loading .yui3-tabview-panel {
|
||||
background: #ffffff url(../img/spinner.gif) no-repeat center 70px;
|
||||
min-height: 150px;
|
||||
}
|
||||
#bd.loading .apidocs .content,
|
||||
#api-list.loading .yui3-tabview-panel .apis {
|
||||
display: none;
|
||||
}
|
||||
.apidocs .no-visible-items {
|
||||
color: #666;
|
||||
}
|
||||
/* Generic inline list. */
|
||||
.apidocs ul.inline {
|
||||
display: inline;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.apidocs ul.inline li {
|
||||
display: inline;
|
||||
}
|
||||
/* Comma-separated list. */
|
||||
.apidocs ul.commas li:after {
|
||||
content: ',';
|
||||
}
|
||||
.apidocs ul.commas li:last-child:after {
|
||||
content: '';
|
||||
}
|
||||
/* Keyboard shortcuts. */
|
||||
kbd .cmd {
|
||||
font-family: Monaco, Helvetica;
|
||||
}
|
||||
/* -- Generic Access Level styles ------------------------------------------- */
|
||||
.apidocs .item.protected,
|
||||
.apidocs .item.private,
|
||||
.apidocs .index-item.protected,
|
||||
.apidocs .index-item.deprecated,
|
||||
.apidocs .index-item.private {
|
||||
display: none;
|
||||
}
|
||||
.show-deprecated .item.deprecated,
|
||||
.show-deprecated .index-item.deprecated,
|
||||
.show-protected .item.protected,
|
||||
.show-protected .index-item.protected,
|
||||
.show-private .item.private,
|
||||
.show-private .index-item.private {
|
||||
display: block;
|
||||
}
|
||||
.hide-inherited .item.inherited,
|
||||
.hide-inherited .index-item.inherited {
|
||||
display: none;
|
||||
}
|
||||
/* -- Generic Item Index styles --------------------------------------------- */
|
||||
.apidocs .index h3 {
|
||||
/*border-bottom: 1px solid #efefef;*/
|
||||
color: #444444;
|
||||
margin: 0 0 0.6em;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
.apidocs .index .no-visible-items {
|
||||
margin-top: 2em;
|
||||
}
|
||||
.apidocs .index-list {
|
||||
border-color: #efefef;
|
||||
font-size: 12px;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-moz-column-count: 4;
|
||||
-moz-column-gap: 10px;
|
||||
-moz-column-width: 170px;
|
||||
-ms-column-count: 4;
|
||||
-ms-column-gap: 10px;
|
||||
-ms-column-width: 170px;
|
||||
-o-column-count: 4;
|
||||
-o-column-gap: 10px;
|
||||
-o-column-width: 170px;
|
||||
-webkit-column-count: 4;
|
||||
-webkit-column-gap: 10px;
|
||||
-webkit-column-width: 170px;
|
||||
column-count: 4;
|
||||
column-gap: 10px;
|
||||
column-width: 170px;
|
||||
}
|
||||
.apidocs .no-columns .index-list {
|
||||
-moz-column-count: 1;
|
||||
-ms-column-count: 1;
|
||||
-o-column-count: 1;
|
||||
-webkit-column-count: 1;
|
||||
column-count: 1;
|
||||
}
|
||||
.apidocs .index-item {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.apidocs .index-item .flag {
|
||||
background: none;
|
||||
border: none;
|
||||
color: #afafaf;
|
||||
display: inline;
|
||||
margin: 0 0 0 0.2em;
|
||||
padding: 0;
|
||||
}
|
||||
/* -- Generic API item styles ----------------------------------------------- */
|
||||
.apidocs .args {
|
||||
display: inline;
|
||||
margin: 0 0.5em;
|
||||
}
|
||||
.apidocs .flag.chainable {
|
||||
background: #46ca3b;
|
||||
}
|
||||
.apidocs .flag.protected {
|
||||
background: #9b86fc;
|
||||
}
|
||||
.apidocs .flag.private {
|
||||
background: #fd6b1b;
|
||||
}
|
||||
.apidocs .flag.async {
|
||||
background: #356de4;
|
||||
}
|
||||
.apidocs .flag.required {
|
||||
background: #e60923;
|
||||
}
|
||||
.apidocs .item {
|
||||
/*border-bottom: 1px solid #efefef;*/
|
||||
margin: 1.5em 0 2em;
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
.apidocs .item h4,
|
||||
.apidocs .item h5,
|
||||
.apidocs .item h6 {
|
||||
color: #444444;
|
||||
font-family: inherit;
|
||||
font-size: 100%;
|
||||
}
|
||||
.apidocs .item .description p,
|
||||
.apidocs .item pre.code {
|
||||
margin: 1em 0 0;
|
||||
}
|
||||
.apidocs .item .meta {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
.apidocs .item .name {
|
||||
display: inline;
|
||||
font-size: 16px;
|
||||
}
|
||||
.apidocs .item .type,
|
||||
.apidocs .item .type a,
|
||||
.apidocs .returns-inline {
|
||||
color: #555;
|
||||
}
|
||||
.apidocs .item .type,
|
||||
.apidocs .returns-inline {
|
||||
font-size: 11px;
|
||||
margin: 0 0 0 0;
|
||||
}
|
||||
.apidocs .item .type a {
|
||||
border-bottom: 1px dotted #afafaf;
|
||||
}
|
||||
.apidocs .item .type a:hover {
|
||||
border: none;
|
||||
}
|
||||
/* -- Item Parameter List --------------------------------------------------- */
|
||||
.apidocs .params-list {
|
||||
list-style: square;
|
||||
margin: 1em 0 0 2em;
|
||||
padding: 0;
|
||||
}
|
||||
.apidocs .param {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.apidocs .param .type,
|
||||
.apidocs .param .type a {
|
||||
color: #666;
|
||||
}
|
||||
.apidocs .param .type {
|
||||
margin: 0 0 0 0.5em;
|
||||
*margin-left: 0.5em;
|
||||
}
|
||||
.apidocs .param-name {
|
||||
font-weight: bold;
|
||||
}
|
||||
/* -- Item "Emits" block ---------------------------------------------------- */
|
||||
.apidocs .item .emits {
|
||||
background: #f9f9f9;
|
||||
border-color: #eaeaea;
|
||||
}
|
||||
/* -- Item "Returns" block -------------------------------------------------- */
|
||||
.apidocs .item .returns .type,
|
||||
.apidocs .item .returns .type a {
|
||||
font-size: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
/* -- Class Constructor block ----------------------------------------------- */
|
||||
.apidocs .constructor .item {
|
||||
border: none;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
/* -- File Source View ------------------------------------------------------ */
|
||||
.apidocs .file pre.code,
|
||||
#doc .apidocs .file pre.prettyprint {
|
||||
background: inherit;
|
||||
border: none;
|
||||
overflow: visible;
|
||||
padding: 0;
|
||||
}
|
||||
.apidocs .L0,
|
||||
.apidocs .L1,
|
||||
.apidocs .L2,
|
||||
.apidocs .L3,
|
||||
.apidocs .L4,
|
||||
.apidocs .L5,
|
||||
.apidocs .L6,
|
||||
.apidocs .L7,
|
||||
.apidocs .L8,
|
||||
.apidocs .L9 {
|
||||
background: inherit;
|
||||
}
|
||||
/* -- Submodule List -------------------------------------------------------- */
|
||||
.apidocs .module-submodule-description {
|
||||
font-size: 12px;
|
||||
margin: 0.3em 0 1em;
|
||||
}
|
||||
.apidocs .module-submodule-description p:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
/* -- Sidebar TabView ------------------------------------------------------- */
|
||||
#api-tabview {
|
||||
margin-top: 0 /*0.6em;*/
|
||||
}
|
||||
#api-tabview-filter {
|
||||
padding: 0 0 1em;
|
||||
}
|
||||
#api-filter {
|
||||
width: 100%;
|
||||
font-size: 16px;
|
||||
border: 1px solid #bebebe;
|
||||
padding: 5px;
|
||||
border-radius: 5px;
|
||||
border-top-width: 2px;
|
||||
}
|
||||
/* -- Content TabView ------------------------------------------------------- */
|
||||
|
||||
/* -- Source File Contents -------------------------------------------------- */
|
||||
.prettyprint li.L0,
|
||||
.prettyprint li.L1,
|
||||
.prettyprint li.L2,
|
||||
.prettyprint li.L3,
|
||||
.prettyprint li.L5,
|
||||
.prettyprint li.L6,
|
||||
.prettyprint li.L7,
|
||||
.prettyprint li.L8 {
|
||||
list-style: decimal;
|
||||
}
|
||||
/* -- API options ----------------------------------------------------------- */
|
||||
#api-options {
|
||||
font-size: 11px;
|
||||
margin-top: 0.5em;
|
||||
position: absolute;
|
||||
right: 2em;
|
||||
}
|
||||
/*#api-options label { margin-right: 0.6em; }*/
|
||||
/* -- API list -------------------------------------------------------------- */
|
||||
#api-list {
|
||||
margin-top: -2em;
|
||||
*zoom: 1;
|
||||
}
|
||||
#api-modules {
|
||||
/*border-bottom: 1px solid #c3c3c3;*/
|
||||
}
|
||||
.apis {
|
||||
font-size: 12px;
|
||||
line-height: 1.4;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0.5em 0 0.5em 0.4em;
|
||||
}
|
||||
.apis a {
|
||||
border: 1px solid transparent;
|
||||
display: block;
|
||||
margin: 0 0 0 -4px;
|
||||
padding: 0.4em;
|
||||
text-decoration: none;
|
||||
_border: none;
|
||||
_display: inline;
|
||||
color: #444444 !important;
|
||||
overflow: hidden;
|
||||
}
|
||||
.apis a:hover,
|
||||
.apis a:focus {
|
||||
background: #444444;
|
||||
color: white !important;
|
||||
color: #444444;
|
||||
outline: none;
|
||||
}
|
||||
.api-list-item a:hover,
|
||||
.api-list-item a:focus {
|
||||
font-weight: bold;
|
||||
}
|
||||
.apis .message {
|
||||
color: #888;
|
||||
}
|
||||
.apis .result a {
|
||||
padding: 3px 5px 2px;
|
||||
}
|
||||
.apis .result .type {
|
||||
right: 4px;
|
||||
top: 7px;
|
||||
}
|
||||
.api-list-item .yui3-highlight {
|
||||
font-weight: bold;
|
||||
}
|
||||
/* -- YUI Overrides -------------------------------------------------------------- */
|
||||
.yui3-skin-sam .yui3-tab-selected .yui3-tab-label {
|
||||
border: none !important;
|
||||
}
|
||||
.yui3-skin-sam .yui3-tab-selected {
|
||||
margin-bottom:0 !important;
|
||||
}
|
||||
.yui3-skin-sam .yui3-tab-label {
|
||||
padding: 1em !important;
|
||||
border: none !important;
|
||||
background: none !important;
|
||||
background-color: #c3c3c3 !important;
|
||||
}
|
||||
.yui3-skin-sam .yui3-tab-label:hover {
|
||||
background-color: #444444 !important;
|
||||
color: white !important;
|
||||
}
|
||||
/* Important Library Specifics, find and replace
|
||||
@color-CreateJS: #e7841d;
|
||||
@color-EaselJS: #3399ff;
|
||||
@color-TweenJS: #f12528;
|
||||
@color-SoundJS: #8765d6;
|
||||
@color-PreloadJS: #bb2ee5;
|
||||
@color-Zoe: #00b224;
|
||||
*/
|
||||
.yui3-skin-sam .yui3-tab-selected .yui3-tab-label,
|
||||
.yui3-skin-sam .yui3-tab-selected .yui3-tab-label:focus,
|
||||
.yui3-skin-sam .yui3-tab-selected .yui3-tab-label:hover {
|
||||
background: none !important;
|
||||
border: none !important;
|
||||
background-color: #2269AF !important;
|
||||
}
|
||||
.yui3-skin-sam .yui3-tabview-list {
|
||||
/*border-bottom: 5px solid #3399ff !important;*/
|
||||
border:0 !important;
|
||||
}
|
BIN
docs/assets/favicon.png
Normal file
BIN
docs/assets/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 218 B |
BIN
docs/assets/img/spinner.gif
Normal file
BIN
docs/assets/img/spinner.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
10
docs/assets/index.html
Normal file
10
docs/assets/index.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Redirector</title>
|
||||
<meta http-equiv="refresh" content="0;url=../">
|
||||
</head>
|
||||
<body>
|
||||
<a href="../">Click here to redirect</a>
|
||||
</body>
|
||||
</html>
|
52
docs/assets/js/api-filter.js
Normal file
52
docs/assets/js/api-filter.js
Normal file
@ -0,0 +1,52 @@
|
||||
YUI.add('api-filter', function (Y) {
|
||||
|
||||
Y.APIFilter = Y.Base.create('apiFilter', Y.Base, [Y.AutoCompleteBase], {
|
||||
// -- Initializer ----------------------------------------------------------
|
||||
initializer: function () {
|
||||
this._bindUIACBase();
|
||||
this._syncUIACBase();
|
||||
},
|
||||
getDisplayName: function(name) {
|
||||
|
||||
Y.each(Y.YUIDoc.meta.allModules, function(i) {
|
||||
if (i.name === name && i.displayName) {
|
||||
name = i.displayName;
|
||||
}
|
||||
});
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
}, {
|
||||
// -- Attributes -----------------------------------------------------------
|
||||
ATTRS: {
|
||||
resultHighlighter: {
|
||||
value: 'phraseMatch'
|
||||
},
|
||||
|
||||
// May be set to "classes" or "modules".
|
||||
queryType: {
|
||||
value: 'classes'
|
||||
},
|
||||
|
||||
source: {
|
||||
valueFn: function() {
|
||||
var self = this;
|
||||
return function(q) {
|
||||
var data = Y.YUIDoc.meta[self.get('queryType')],
|
||||
out = [];
|
||||
Y.each(data, function(v) {
|
||||
if (v.toLowerCase().indexOf(q.toLowerCase()) > -1) {
|
||||
out.push(v);
|
||||
}
|
||||
});
|
||||
return out;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}, '3.4.0', {requires: [
|
||||
'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources'
|
||||
]});
|
251
docs/assets/js/api-list.js
Normal file
251
docs/assets/js/api-list.js
Normal file
@ -0,0 +1,251 @@
|
||||
YUI.add('api-list', function (Y) {
|
||||
|
||||
var Lang = Y.Lang,
|
||||
YArray = Y.Array,
|
||||
|
||||
APIList = Y.namespace('APIList'),
|
||||
|
||||
classesNode = Y.one('#api-classes'),
|
||||
inputNode = Y.one('#api-filter'),
|
||||
modulesNode = Y.one('#api-modules'),
|
||||
tabviewNode = Y.one('#api-tabview'),
|
||||
|
||||
tabs = APIList.tabs = {},
|
||||
|
||||
filter = APIList.filter = new Y.APIFilter({
|
||||
inputNode : inputNode,
|
||||
maxResults: 1000,
|
||||
|
||||
on: {
|
||||
results: onFilterResults
|
||||
}
|
||||
}),
|
||||
|
||||
search = APIList.search = new Y.APISearch({
|
||||
inputNode : inputNode,
|
||||
maxResults: 100,
|
||||
|
||||
on: {
|
||||
clear : onSearchClear,
|
||||
results: onSearchResults
|
||||
}
|
||||
}),
|
||||
|
||||
tabview = APIList.tabview = new Y.TabView({
|
||||
srcNode : tabviewNode,
|
||||
panelNode: '#api-tabview-panel',
|
||||
render : true,
|
||||
|
||||
on: {
|
||||
selectionChange: onTabSelectionChange
|
||||
}
|
||||
}),
|
||||
|
||||
focusManager = APIList.focusManager = tabviewNode.plug(Y.Plugin.NodeFocusManager, {
|
||||
circular : true,
|
||||
descendants: '#api-filter, .yui3-tab-panel-selected .api-list-item a, .yui3-tab-panel-selected .result a',
|
||||
keys : {next: 'down:40', previous: 'down:38'}
|
||||
}).focusManager,
|
||||
|
||||
LIST_ITEM_TEMPLATE =
|
||||
'<li class="api-list-item {typeSingular}">' +
|
||||
'<a href="{rootPath}{typePlural}/{name}.html">{displayName}</a>' +
|
||||
'</li>';
|
||||
|
||||
// -- Init ---------------------------------------------------------------------
|
||||
|
||||
// Duckpunch FocusManager's key event handling to prevent it from handling key
|
||||
// events when a modifier is pressed.
|
||||
Y.before(function (e, activeDescendant) {
|
||||
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
|
||||
return new Y.Do.Prevent();
|
||||
}
|
||||
}, focusManager, '_focusPrevious', focusManager);
|
||||
|
||||
Y.before(function (e, activeDescendant) {
|
||||
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
|
||||
return new Y.Do.Prevent();
|
||||
}
|
||||
}, focusManager, '_focusNext', focusManager);
|
||||
|
||||
// Create a mapping of tabs in the tabview so we can refer to them easily later.
|
||||
tabview.each(function (tab, index) {
|
||||
var name = tab.get('label').toLowerCase();
|
||||
|
||||
tabs[name] = {
|
||||
index: index,
|
||||
name : name,
|
||||
tab : tab
|
||||
};
|
||||
});
|
||||
|
||||
// Switch tabs on Ctrl/Cmd-Left/Right arrows.
|
||||
tabviewNode.on('key', onTabSwitchKey, 'down:37,39');
|
||||
|
||||
// Focus the filter input when the `/` key is pressed.
|
||||
Y.one(Y.config.doc).on('key', onSearchKey, 'down:83');
|
||||
|
||||
// Keep the Focus Manager up to date.
|
||||
inputNode.on('focus', function () {
|
||||
focusManager.set('activeDescendant', inputNode);
|
||||
});
|
||||
|
||||
// Update all tabview links to resolved URLs.
|
||||
tabview.get('panelNode').all('a').each(function (link) {
|
||||
link.setAttribute('href', link.get('href'));
|
||||
});
|
||||
|
||||
// -- Private Functions --------------------------------------------------------
|
||||
function getFilterResultNode() {
|
||||
return filter.get('queryType') === 'classes' ? classesNode : modulesNode;
|
||||
}
|
||||
|
||||
// -- Event Handlers -----------------------------------------------------------
|
||||
function onFilterResults(e) {
|
||||
var frag = Y.one(Y.config.doc.createDocumentFragment()),
|
||||
resultNode = getFilterResultNode(),
|
||||
typePlural = filter.get('queryType'),
|
||||
typeSingular = typePlural === 'classes' ? 'class' : 'module';
|
||||
|
||||
if (e.results.length) {
|
||||
YArray.each(e.results, function (result) {
|
||||
frag.append(Lang.sub(LIST_ITEM_TEMPLATE, {
|
||||
rootPath : APIList.rootPath,
|
||||
displayName : filter.getDisplayName(result.highlighted),
|
||||
name : result.text,
|
||||
typePlural : typePlural,
|
||||
typeSingular: typeSingular
|
||||
}));
|
||||
});
|
||||
} else {
|
||||
frag.append(
|
||||
'<li class="message">' +
|
||||
'No ' + typePlural + ' found.' +
|
||||
'</li>'
|
||||
);
|
||||
}
|
||||
|
||||
resultNode.empty(true);
|
||||
resultNode.append(frag);
|
||||
|
||||
focusManager.refresh();
|
||||
}
|
||||
|
||||
function onSearchClear(e) {
|
||||
|
||||
focusManager.refresh();
|
||||
}
|
||||
|
||||
function onSearchKey(e) {
|
||||
var target = e.target;
|
||||
|
||||
if (target.test('input,select,textarea')
|
||||
|| target.get('isContentEditable')) {
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
inputNode.focus();
|
||||
focusManager.refresh();
|
||||
}
|
||||
|
||||
function onSearchResults(e) {
|
||||
var frag = Y.one(Y.config.doc.createDocumentFragment());
|
||||
|
||||
if (e.results.length) {
|
||||
YArray.each(e.results, function (result) {
|
||||
frag.append(result.display);
|
||||
});
|
||||
} else {
|
||||
frag.append(
|
||||
'<li class="message">' +
|
||||
'No results found. Maybe you\'ll have better luck with a ' +
|
||||
'different query?' +
|
||||
'</li>'
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
focusManager.refresh();
|
||||
}
|
||||
|
||||
function onTabSelectionChange(e) {
|
||||
var tab = e.newVal,
|
||||
name = tab.get('label').toLowerCase();
|
||||
|
||||
tabs.selected = {
|
||||
index: tab.get('index'),
|
||||
name : name,
|
||||
tab : tab
|
||||
};
|
||||
|
||||
switch (name) {
|
||||
case 'classes': // fallthru
|
||||
case 'modules':
|
||||
filter.setAttrs({
|
||||
minQueryLength: 0,
|
||||
queryType : name
|
||||
});
|
||||
|
||||
search.set('minQueryLength', -1);
|
||||
|
||||
// Only send a request if this isn't the initially-selected tab.
|
||||
if (e.prevVal) {
|
||||
filter.sendRequest(filter.get('value'));
|
||||
}
|
||||
break;
|
||||
|
||||
case 'everything':
|
||||
filter.set('minQueryLength', -1);
|
||||
search.set('minQueryLength', 1);
|
||||
|
||||
if (search.get('value')) {
|
||||
search.sendRequest(search.get('value'));
|
||||
} else {
|
||||
inputNode.focus();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// WTF? We shouldn't be here!
|
||||
filter.set('minQueryLength', -1);
|
||||
search.set('minQueryLength', -1);
|
||||
}
|
||||
|
||||
if (focusManager) {
|
||||
setTimeout(function () {
|
||||
focusManager.refresh();
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
|
||||
function onTabSwitchKey(e) {
|
||||
var currentTabIndex = tabs.selected.index;
|
||||
|
||||
if (!(e.ctrlKey || e.metaKey)) {
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
switch (e.keyCode) {
|
||||
case 37: // left arrow
|
||||
if (currentTabIndex > 0) {
|
||||
tabview.selectChild(currentTabIndex - 1);
|
||||
inputNode.focus();
|
||||
}
|
||||
break;
|
||||
|
||||
case 39: // right arrow
|
||||
if (currentTabIndex < (Y.Object.size(tabs) - 2)) {
|
||||
tabview.selectChild(currentTabIndex + 1);
|
||||
inputNode.focus();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}, '3.4.0', {requires: [
|
||||
'api-filter', 'api-search', 'event-key', 'node-focusmanager', 'tabview'
|
||||
]});
|
98
docs/assets/js/api-search.js
Normal file
98
docs/assets/js/api-search.js
Normal file
@ -0,0 +1,98 @@
|
||||
YUI.add('api-search', function (Y) {
|
||||
|
||||
var Lang = Y.Lang,
|
||||
Node = Y.Node,
|
||||
YArray = Y.Array;
|
||||
|
||||
Y.APISearch = Y.Base.create('apiSearch', Y.Base, [Y.AutoCompleteBase], {
|
||||
// -- Public Properties ----------------------------------------------------
|
||||
RESULT_TEMPLATE:
|
||||
'<li class="result {resultType}">' +
|
||||
'<a href="{url}">' +
|
||||
'<h3 class="title">{name}</h3>' +
|
||||
'<span class="type">{resultType}</span>' +
|
||||
'<div class="description">{description}</div>' +
|
||||
'<span class="className">{class}</span>' +
|
||||
'</a>' +
|
||||
'</li>',
|
||||
|
||||
// -- Initializer ----------------------------------------------------------
|
||||
initializer: function () {
|
||||
this._bindUIACBase();
|
||||
this._syncUIACBase();
|
||||
},
|
||||
|
||||
// -- Protected Methods ----------------------------------------------------
|
||||
_apiResultFilter: function (query, results) {
|
||||
// Filter components out of the results.
|
||||
return YArray.filter(results, function (result) {
|
||||
return result.raw.resultType === 'component' ? false : result;
|
||||
});
|
||||
},
|
||||
|
||||
_apiResultFormatter: function (query, results) {
|
||||
return YArray.map(results, function (result) {
|
||||
var raw = Y.merge(result.raw), // create a copy
|
||||
desc = raw.description || '';
|
||||
|
||||
// Convert description to text and truncate it if necessary.
|
||||
desc = Node.create('<div>' + desc + '</div>').get('text');
|
||||
|
||||
if (desc.length > 65) {
|
||||
desc = Y.Escape.html(desc.substr(0, 65)) + ' …';
|
||||
} else {
|
||||
desc = Y.Escape.html(desc);
|
||||
}
|
||||
|
||||
raw['class'] || (raw['class'] = '');
|
||||
raw.description = desc;
|
||||
|
||||
// Use the highlighted result name.
|
||||
raw.name = result.highlighted;
|
||||
|
||||
return Lang.sub(this.RESULT_TEMPLATE, raw);
|
||||
}, this);
|
||||
},
|
||||
|
||||
_apiTextLocator: function (result) {
|
||||
return result.displayName || result.name;
|
||||
}
|
||||
}, {
|
||||
// -- Attributes -----------------------------------------------------------
|
||||
ATTRS: {
|
||||
resultFormatter: {
|
||||
valueFn: function () {
|
||||
return this._apiResultFormatter;
|
||||
}
|
||||
},
|
||||
|
||||
resultFilters: {
|
||||
valueFn: function () {
|
||||
return this._apiResultFilter;
|
||||
}
|
||||
},
|
||||
|
||||
resultHighlighter: {
|
||||
value: 'phraseMatch'
|
||||
},
|
||||
|
||||
resultListLocator: {
|
||||
value: 'data.results'
|
||||
},
|
||||
|
||||
resultTextLocator: {
|
||||
valueFn: function () {
|
||||
return this._apiTextLocator;
|
||||
}
|
||||
},
|
||||
|
||||
source: {
|
||||
value: '/api/v1/search?q={query}&count={maxResults}'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}, '3.4.0', {requires: [
|
||||
'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources',
|
||||
'escape'
|
||||
]});
|
365
docs/assets/js/apidocs.js
Normal file
365
docs/assets/js/apidocs.js
Normal file
@ -0,0 +1,365 @@
|
||||
YUI().use(
|
||||
'yuidoc-meta',
|
||||
'api-list', 'history-hash', 'node-screen', 'node-style', 'pjax',
|
||||
function (Y) {
|
||||
|
||||
var win = Y.config.win,
|
||||
localStorage = win.localStorage,
|
||||
|
||||
bdNode = Y.one('#bd'),
|
||||
|
||||
pjax,
|
||||
defaultRoute,
|
||||
|
||||
classTabView,
|
||||
selectedTab;
|
||||
|
||||
// Kill pjax functionality unless serving over HTTP.
|
||||
if (!Y.getLocation().protocol.match(/^https?\:/)) {
|
||||
Y.Router.html5 = false;
|
||||
}
|
||||
|
||||
// Create the default route with middleware which enables syntax highlighting
|
||||
// on the loaded content.
|
||||
defaultRoute = Y.Pjax.defaultRoute.concat(function (req, res, next) {
|
||||
prettyPrint();
|
||||
bdNode.removeClass('loading');
|
||||
|
||||
next();
|
||||
});
|
||||
|
||||
pjax = new Y.Pjax({
|
||||
container : '#docs-main',
|
||||
contentSelector: '#docs-main > .content',
|
||||
linkSelector : '#bd a',
|
||||
titleSelector : '#xhr-title',
|
||||
|
||||
navigateOnHash: true,
|
||||
root : '/',
|
||||
routes : [
|
||||
// -- / ----------------------------------------------------------------
|
||||
{
|
||||
path : '/(index.html)?',
|
||||
callbacks: defaultRoute
|
||||
},
|
||||
|
||||
// -- /classes/* -------------------------------------------------------
|
||||
{
|
||||
path : '/classes/:class.html*',
|
||||
callbacks: [defaultRoute, 'handleClasses']
|
||||
},
|
||||
|
||||
// -- /files/* ---------------------------------------------------------
|
||||
{
|
||||
path : '/files/*file',
|
||||
callbacks: [defaultRoute, 'handleFiles']
|
||||
},
|
||||
|
||||
// -- /modules/* -------------------------------------------------------
|
||||
{
|
||||
path : '/modules/:module.html*',
|
||||
callbacks: defaultRoute
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// -- Utility Functions --------------------------------------------------------
|
||||
|
||||
pjax.checkVisibility = function (tab) {
|
||||
tab || (tab = selectedTab);
|
||||
|
||||
if (!tab) { return; }
|
||||
|
||||
var panelNode = tab.get('panelNode'),
|
||||
visibleItems;
|
||||
|
||||
// If no items are visible in the tab panel due to the current visibility
|
||||
// settings, display a message to that effect.
|
||||
visibleItems = panelNode.all('.item,.index-item').some(function (itemNode) {
|
||||
if (itemNode.getComputedStyle('display') !== 'none') {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
panelNode.all('.no-visible-items').remove();
|
||||
|
||||
if (!visibleItems) {
|
||||
if (Y.one('#index .index-item')) {
|
||||
panelNode.append(
|
||||
'<div class="no-visible-items">' +
|
||||
'<p>' +
|
||||
'Some items are not shown due to the current visibility ' +
|
||||
'settings. Use the checkboxes at the upper right of this ' +
|
||||
'page to change the visibility settings.' +
|
||||
'</p>' +
|
||||
'</div>'
|
||||
);
|
||||
} else {
|
||||
panelNode.append(
|
||||
'<div class="no-visible-items">' +
|
||||
'<p>' +
|
||||
'This class doesn\'t provide any methods, properties, ' +
|
||||
'attributes, or events.' +
|
||||
'</p>' +
|
||||
'</div>'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Hide index sections without any visible items.
|
||||
Y.all('.index-section').each(function (section) {
|
||||
var items = 0,
|
||||
visibleItems = 0;
|
||||
|
||||
section.all('.index-item').each(function (itemNode) {
|
||||
items += 1;
|
||||
|
||||
if (itemNode.getComputedStyle('display') !== 'none') {
|
||||
visibleItems += 1;
|
||||
}
|
||||
});
|
||||
|
||||
section.toggleClass('hidden', !visibleItems);
|
||||
section.toggleClass('no-columns', visibleItems < 4);
|
||||
});
|
||||
};
|
||||
|
||||
pjax.initClassTabView = function () {
|
||||
if (!Y.all('#classdocs .api-class-tab').size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (classTabView) {
|
||||
classTabView.destroy();
|
||||
selectedTab = null;
|
||||
}
|
||||
|
||||
classTabView = new Y.TabView({
|
||||
srcNode: '#classdocs',
|
||||
|
||||
on: {
|
||||
selectionChange: pjax.onTabSelectionChange
|
||||
}
|
||||
});
|
||||
|
||||
pjax.updateTabState();
|
||||
classTabView.render();
|
||||
};
|
||||
|
||||
pjax.initLineNumbers = function () {
|
||||
var hash = win.location.hash.substring(1),
|
||||
container = pjax.get('container'),
|
||||
hasLines, node;
|
||||
|
||||
// Add ids for each line number in the file source view.
|
||||
container.all('.linenums>li').each(function (lineNode, index) {
|
||||
lineNode.set('id', 'l' + (index + 1));
|
||||
lineNode.addClass('file-line');
|
||||
hasLines = true;
|
||||
});
|
||||
|
||||
// Scroll to the desired line.
|
||||
if (hasLines && /^l\d+$/.test(hash)) {
|
||||
if ((node = container.getById(hash))) {
|
||||
win.scroll(0, node.getY());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
pjax.initRoot = function () {
|
||||
var terminators = /^(?:classes|files|modules)$/,
|
||||
parts = pjax._getPathRoot().split('/'),
|
||||
root = [],
|
||||
i, len, part;
|
||||
|
||||
for (i = 0, len = parts.length; i < len; i += 1) {
|
||||
part = parts[i];
|
||||
|
||||
if (part.match(terminators)) {
|
||||
// Makes sure the path will end with a "/".
|
||||
root.push('');
|
||||
break;
|
||||
}
|
||||
|
||||
root.push(part);
|
||||
}
|
||||
|
||||
pjax.set('root', root.join('/'));
|
||||
};
|
||||
|
||||
pjax.updateTabState = function (src) {
|
||||
var hash = win.location.hash.substring(1),
|
||||
defaultTab, node, tab, tabPanel;
|
||||
|
||||
function scrollToNode() {
|
||||
if (node.hasClass('protected')) {
|
||||
Y.one('#api-show-protected').set('checked', true);
|
||||
pjax.updateVisibility();
|
||||
}
|
||||
|
||||
if (node.hasClass('private')) {
|
||||
Y.one('#api-show-private').set('checked', true);
|
||||
pjax.updateVisibility();
|
||||
}
|
||||
|
||||
setTimeout(function () {
|
||||
// For some reason, unless we re-get the node instance here,
|
||||
// getY() always returns 0.
|
||||
var node = Y.one('#classdocs').getById(hash);
|
||||
win.scrollTo(0, node.getY() - 70);
|
||||
}, 1);
|
||||
}
|
||||
|
||||
if (!classTabView) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (src === 'hashchange' && !hash) {
|
||||
defaultTab = 'index';
|
||||
} else {
|
||||
if (localStorage) {
|
||||
defaultTab = localStorage.getItem('tab_' + pjax.getPath()) ||
|
||||
'index';
|
||||
} else {
|
||||
defaultTab = 'index';
|
||||
}
|
||||
}
|
||||
|
||||
if (hash && (node = Y.one('#classdocs').getById(hash))) {
|
||||
if ((tabPanel = node.ancestor('.api-class-tabpanel', true))) {
|
||||
if ((tab = Y.one('#classdocs .api-class-tab.' + tabPanel.get('id')))) {
|
||||
if (classTabView.get('rendered')) {
|
||||
Y.Widget.getByNode(tab).set('selected', 1);
|
||||
} else {
|
||||
tab.addClass('yui3-tab-selected');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scroll to the desired element if this is a hash URL.
|
||||
if (node) {
|
||||
if (classTabView.get('rendered')) {
|
||||
scrollToNode();
|
||||
} else {
|
||||
classTabView.once('renderedChange', scrollToNode);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tab = Y.one('#classdocs .api-class-tab.' + defaultTab);
|
||||
|
||||
if (classTabView.get('rendered')) {
|
||||
Y.Widget.getByNode(tab).set('selected', 1);
|
||||
} else {
|
||||
tab.addClass('yui3-tab-selected');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
pjax.updateVisibility = function () {
|
||||
var container = pjax.get('container');
|
||||
|
||||
container.toggleClass('hide-inherited',
|
||||
!Y.one('#api-show-inherited').get('checked'));
|
||||
|
||||
container.toggleClass('show-deprecated',
|
||||
Y.one('#api-show-deprecated').get('checked'));
|
||||
|
||||
container.toggleClass('show-protected',
|
||||
Y.one('#api-show-protected').get('checked'));
|
||||
|
||||
container.toggleClass('show-private',
|
||||
Y.one('#api-show-private').get('checked'));
|
||||
|
||||
pjax.checkVisibility();
|
||||
};
|
||||
|
||||
// -- Route Handlers -----------------------------------------------------------
|
||||
|
||||
pjax.handleClasses = function (req, res, next) {
|
||||
var status = res.ioResponse.status;
|
||||
|
||||
// Handles success and local filesystem XHRs.
|
||||
if (!status || (status >= 200 && status < 300)) {
|
||||
pjax.initClassTabView();
|
||||
}
|
||||
|
||||
next();
|
||||
};
|
||||
|
||||
pjax.handleFiles = function (req, res, next) {
|
||||
var status = res.ioResponse.status;
|
||||
|
||||
// Handles success and local filesystem XHRs.
|
||||
if (!status || (status >= 200 && status < 300)) {
|
||||
pjax.initLineNumbers();
|
||||
}
|
||||
|
||||
next();
|
||||
};
|
||||
|
||||
// -- Event Handlers -----------------------------------------------------------
|
||||
|
||||
pjax.onNavigate = function (e) {
|
||||
var hash = e.hash,
|
||||
originTarget = e.originEvent && e.originEvent.target,
|
||||
tab;
|
||||
|
||||
if (hash) {
|
||||
tab = originTarget && originTarget.ancestor('.yui3-tab', true);
|
||||
|
||||
if (hash === win.location.hash) {
|
||||
pjax.updateTabState('hashchange');
|
||||
} else if (!tab) {
|
||||
win.location.hash = hash;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
// Only scroll to the top of the page when the URL doesn't have a hash.
|
||||
this.set('scrollToTop', !e.url.match(/#.+$/));
|
||||
|
||||
bdNode.addClass('loading');
|
||||
};
|
||||
|
||||
pjax.onOptionClick = function (e) {
|
||||
pjax.updateVisibility();
|
||||
};
|
||||
|
||||
pjax.onTabSelectionChange = function (e) {
|
||||
var tab = e.newVal,
|
||||
tabId = tab.get('contentBox').getAttribute('href').substring(1);
|
||||
|
||||
selectedTab = tab;
|
||||
|
||||
// If switching from a previous tab (i.e., this is not the default tab),
|
||||
// replace the history entry with a hash URL that will cause this tab to
|
||||
// be selected if the user navigates away and then returns using the back
|
||||
// or forward buttons.
|
||||
if (e.prevVal && localStorage) {
|
||||
localStorage.setItem('tab_' + pjax.getPath(), tabId);
|
||||
}
|
||||
|
||||
pjax.checkVisibility(tab);
|
||||
};
|
||||
|
||||
// -- Init ---------------------------------------------------------------------
|
||||
|
||||
pjax.on('navigate', pjax.onNavigate);
|
||||
|
||||
pjax.initRoot();
|
||||
pjax.upgrade();
|
||||
pjax.initClassTabView();
|
||||
pjax.initLineNumbers();
|
||||
pjax.updateVisibility();
|
||||
|
||||
Y.APIList.rootPath = pjax.get('root');
|
||||
|
||||
Y.one('#api-options').delegate('click', pjax.onOptionClick, 'input');
|
||||
|
||||
Y.on('hashchange', function (e) {
|
||||
pjax.updateTabState('hashchange');
|
||||
}, win);
|
||||
|
||||
});
|
17
docs/assets/js/yui-prettify.js
vendored
Normal file
17
docs/assets/js/yui-prettify.js
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
YUI().use('node', function(Y) {
|
||||
var code = Y.all('.prettyprint.linenums');
|
||||
if (code.size()) {
|
||||
code.each(function(c) {
|
||||
var lis = c.all('ol li'),
|
||||
l = 1;
|
||||
lis.each(function(n) {
|
||||
n.prepend('<a name="LINENUM_' + l + '"></a>');
|
||||
l++;
|
||||
});
|
||||
});
|
||||
var h = location.hash;
|
||||
location.hash = '';
|
||||
h = h.replace('LINE_', 'LINENUM_');
|
||||
location.hash = h;
|
||||
}
|
||||
});
|
130
docs/assets/vendor/prettify/CHANGES.html
vendored
Normal file
130
docs/assets/vendor/prettify/CHANGES.html
vendored
Normal file
@ -0,0 +1,130 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Change Log</title>
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<a style="float:right" href="README.html">README</a>
|
||||
|
||||
<h1>Known Issues</h1>
|
||||
<ul>
|
||||
<li>Perl formatting is really crappy. Partly because the author is lazy and
|
||||
partly because Perl is
|
||||
<a href="http://www.perlmonks.org/?node_id=663393">hard</a> to parse.
|
||||
<li>On some browsers, <code><code></code> elements with newlines in the text
|
||||
which use CSS to specify <code>white-space:pre</code> will have the newlines
|
||||
improperly stripped if the element is not attached to the document at the time
|
||||
the stripping is done. Also, on IE 6, all newlines will be stripped from
|
||||
<code><code></code> elements because of the way IE6 produces
|
||||
<code>innerHTML</code>. Workaround: use <code><pre></code> for code with
|
||||
newlines.
|
||||
</ul>
|
||||
|
||||
<h1>Change Log</h1>
|
||||
<h2>29 March 2007</h2>
|
||||
<ul>
|
||||
<li>Added <a href="tests/prettify_test.html#PHP">tests</a> for PHP support
|
||||
to address
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=3"
|
||||
>issue 3</a>.
|
||||
<li>Fixed
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=6"
|
||||
>bug</a>: <code>prettyPrintOne</code> was not halting. This was not
|
||||
reachable through the normal entry point.
|
||||
<li>Fixed
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=4"
|
||||
>bug</a>: recursing into a script block or PHP tag that was not properly
|
||||
closed would not silently drop the content.
|
||||
(<a href="tests/prettify_test.html#issue4">test</a>)
|
||||
<li>Fixed
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=8"
|
||||
>bug</a>: was eating tabs
|
||||
(<a href="tests/prettify_test.html#issue8">test</a>)
|
||||
<li>Fixed entity handling so that the caveat
|
||||
<blockquote>
|
||||
<p>Caveats: please properly escape less-thans. <tt>x&lt;y</tt>
|
||||
instead of <tt>x<y</tt>, and use <tt>"</tt> instead of
|
||||
<tt>&quot;</tt> for string delimiters.</p>
|
||||
</blockquote>
|
||||
is no longer applicable.
|
||||
<li>Added noisefree's C#
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=4"
|
||||
>patch</a>
|
||||
<li>Added a <a href="http://google-code-prettify.googlecode.com/files/prettify-small.zip">distribution</a> that has comments and
|
||||
whitespace removed to reduce download size from 45.5kB to 12.8kB.
|
||||
</ul>
|
||||
<h2>4 Jul 2008</h2>
|
||||
<ul>
|
||||
<li>Added <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=17">language specific formatters</a> that are triggered by the presence
|
||||
of a <code>lang-<language-file-extension></code></li>
|
||||
<li>Fixed <a href="http://code.google.com/p/google-code-prettify/issues/detail?id=29">bug</a>: python handling of <code>'''string'''</code>
|
||||
<li>Fixed bug: <code>/</code> in regex <code>[charsets] should not end regex</code>
|
||||
</ul>
|
||||
<h2>5 Jul 2008</h2>
|
||||
<ul>
|
||||
<li>Defined language extensions for Lisp and Lua</code>
|
||||
</ul>
|
||||
<h2>14 Jul 2008</h2>
|
||||
<ul>
|
||||
<li>Language handlers for F#, OCAML, SQL</code>
|
||||
<li>Support for <code>nocode</code> spans to allow embedding of line
|
||||
numbers and code annotations which should not be styled or otherwise
|
||||
affect the tokenization of prettified code.
|
||||
See the issue 22
|
||||
<a href="tests/prettify_test.html#issue22">testcase</a>.</code>
|
||||
</ul>
|
||||
<h2>6 Jan 2009</h2>
|
||||
<ul>
|
||||
<li>Language handlers for Visual Basic, Haskell, CSS, and WikiText</li>
|
||||
<li>Added <tt>.mxml</tt> extension to the markup style handler for
|
||||
Flex <a href="http://en.wikipedia.org/wiki/MXML">MXML files</a>. See
|
||||
<a
|
||||
href="http://code.google.com/p/google-code-prettify/issues/detail?id=37"
|
||||
>issue 37</a>.
|
||||
<li>Added <tt>.m</tt> extension to the C style handler so that Objective
|
||||
C source files properly highlight. See
|
||||
<a
|
||||
href="http://code.google.com/p/google-code-prettify/issues/detail?id=58"
|
||||
>issue 58</a>.
|
||||
<li>Changed HTML lexer to use the same embedded source mechanism as the
|
||||
wiki language handler, and changed to use the registered
|
||||
CSS handler for STYLE element content.
|
||||
</ul>
|
||||
<h2>21 May 2009</h2>
|
||||
<ul>
|
||||
<li>Rewrote to improve performance on large files.
|
||||
See <a href="http://mikesamuel.blogspot.com/2009/05/efficient-parsing-in-javascript.html">benchmarks</a>.</li>
|
||||
<li>Fixed bugs with highlighting of Haskell line comments, Lisp
|
||||
number literals, Lua strings, C preprocessor directives,
|
||||
newlines in Wiki code on Windows, and newlines in IE6.</li>
|
||||
</ul>
|
||||
<h2>14 August 2009</h2>
|
||||
<ul>
|
||||
<li>Fixed prettifying of <code><code></code> blocks with embedded newlines.
|
||||
</ul>
|
||||
<h2>3 October 2009</h2>
|
||||
<ul>
|
||||
<li>Fixed prettifying of XML/HTML tags that contain uppercase letters.
|
||||
</ul>
|
||||
<h2>19 July 2010</h2>
|
||||
<ul>
|
||||
<li>Added support for line numbers. Bug
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=22"
|
||||
>22</a></li>
|
||||
<li>Added YAML support. Bug
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=123"
|
||||
>123</a></li>
|
||||
<li>Added VHDL support courtesy Le Poussin.</li>
|
||||
<li>IE performance improvements. Bug
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=102"
|
||||
>102</a> courtesy jacobly.</li>
|
||||
<li>A variety of markup formatting fixes courtesy smain and thezbyg.</li>
|
||||
<li>Fixed copy and paste in IE[678].
|
||||
<li>Changed output to use <code>&#160;</code> instead of
|
||||
<code>&nbsp;</code> so that the output works when embedded in XML.
|
||||
Bug
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/detail?id=108"
|
||||
>108</a>.</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
202
docs/assets/vendor/prettify/COPYING
vendored
Normal file
202
docs/assets/vendor/prettify/COPYING
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
203
docs/assets/vendor/prettify/README.html
vendored
Normal file
203
docs/assets/vendor/prettify/README.html
vendored
Normal file
@ -0,0 +1,203 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Javascript code prettifier</title>
|
||||
|
||||
<link href="src/prettify.css" type="text/css" rel="stylesheet" />
|
||||
|
||||
<script src="src/prettify.js" type="text/javascript"></script>
|
||||
|
||||
<style type="text/css">
|
||||
body { margin-left: .5in }
|
||||
h1, h2, h3, h4, .footer { margin-left: -.4in; }
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body onload="prettyPrint()" bgcolor="white">
|
||||
<small style="float: right">Languages : <a href="README-zh-Hans.html">CH</a></small>
|
||||
<h1>Javascript code prettifier</h1>
|
||||
|
||||
<h2>Setup</h2>
|
||||
<ol>
|
||||
<li><a href="http://code.google.com/p/google-code-prettify/downloads/list">Download</a> a distribution
|
||||
<li>Include the script and stylesheets in your document
|
||||
(you will need to make sure the css and js file are on your server, and
|
||||
adjust the paths in the <tt>script</tt> and <tt>link</tt> tag)
|
||||
<pre class="prettyprint">
|
||||
<link href="prettify.css" type="text/css" rel="stylesheet" />
|
||||
<script type="text/javascript" src="prettify.js"></script></pre>
|
||||
<li>Add <code class="prettyprint lang-html">onload="prettyPrint()"</code> to your
|
||||
document's body tag.
|
||||
<li>Modify the stylesheet to get the coloring you prefer</li>
|
||||
</ol>
|
||||
|
||||
<h2>Usage</h2>
|
||||
<p>Put code snippets in
|
||||
<tt><pre class="prettyprint">...</pre></tt>
|
||||
or <tt><code class="prettyprint">...</code></tt>
|
||||
and it will automatically be pretty printed.
|
||||
|
||||
<table summary="code examples">
|
||||
<tr>
|
||||
<th>The original
|
||||
<th>Prettier
|
||||
<tr>
|
||||
<td><pre style="border: 1px solid #888;padding: 2px"
|
||||
><a name="voila1"></a>class Voila {
|
||||
public:
|
||||
// Voila
|
||||
static const string VOILA = "Voila";
|
||||
|
||||
// will not interfere with embedded <a href="#voila1">tags</a>.
|
||||
}</pre>
|
||||
|
||||
<td><pre class="prettyprint"><a name="voila2"></a>class Voila {
|
||||
public:
|
||||
// Voila
|
||||
static const string VOILA = "Voila";
|
||||
|
||||
// will not interfere with embedded <a href="#voila2">tags</a>.
|
||||
}</pre>
|
||||
</table>
|
||||
|
||||
<h2>FAQ</h2>
|
||||
<h3 id="langs">Which languages does it work for?</h3>
|
||||
<p>The comments in <tt>prettify.js</tt> are authoritative but the lexer
|
||||
should work on a number of languages including C and friends,
|
||||
Java, Python, Bash, SQL, HTML, XML, CSS, Javascript, and Makefiles.
|
||||
It works passably on Ruby, PHP, VB, and Awk and a decent subset of Perl
|
||||
and Ruby, but, because of commenting conventions, doesn't work on
|
||||
Smalltalk, or CAML-like languages.</p>
|
||||
|
||||
<p>LISPy languages are supported via an extension:
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-lisp.js"
|
||||
><code>lang-lisp.js</code></a>.</p>
|
||||
<p>And similarly for
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-css.js"
|
||||
><code>CSS</code></a>,
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-hs.js"
|
||||
><code>Haskell</code></a>,
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-lua.js"
|
||||
><code>Lua</code></a>,
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-ml.js"
|
||||
><code>OCAML, SML, F#</code></a>,
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-vb.js"
|
||||
><code>Visual Basic</code></a>,
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-sql.js"
|
||||
><code>SQL</code></a>,
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-proto.js"
|
||||
><code>Protocol Buffers</code></a>, and
|
||||
<a href="http://code.google.com/p/google-code-prettify/source/browse/trunk/src/lang-wiki.js"
|
||||
><code>WikiText</code></a>..
|
||||
|
||||
<p>If you'd like to add an extension for your favorite language, please
|
||||
look at <tt>src/lang-lisp.js</tt> and file an
|
||||
<a href="http://code.google.com/p/google-code-prettify/issues/list"
|
||||
>issue</a> including your language extension, and a testcase.</p>
|
||||
|
||||
<h3>How do I specify which language my code is in?</h3>
|
||||
<p>You don't need to specify the language since <code>prettyprint()</code>
|
||||
will guess. You can specify a language by specifying the language extension
|
||||
along with the <code>prettyprint</code> class like so:</p>
|
||||
<pre class="prettyprint lang-html"
|
||||
><pre class="prettyprint <b>lang-html</b>">
|
||||
The lang-* class specifies the language file extensions.
|
||||
File extensions supported by default include
|
||||
"bsh", "c", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html",
|
||||
"java", "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh",
|
||||
"xhtml", "xml", "xsl".
|
||||
</pre></pre>
|
||||
|
||||
<h3>It doesn't work on <tt><obfuscated code sample></tt>?</h3>
|
||||
<p>Yes. Prettifying obfuscated code is like putting lipstick on a pig
|
||||
— i.e. outside the scope of this tool.</p>
|
||||
|
||||
<h3>Which browsers does it work with?</h3>
|
||||
<p>It's been tested with IE 6, Firefox 1.5 & 2, and Safari 2.0.4.
|
||||
Look at <a href="tests/prettify_test.html">the test page</a> to see if it
|
||||
works in your browser.</p>
|
||||
|
||||
<h3>What's changed?</h3>
|
||||
<p>See the <a href="CHANGES.html">change log</a></p>
|
||||
|
||||
<h3>Why doesn't Prettyprinting of strings work on WordPress?</h3>
|
||||
<p>Apparently wordpress does "smart quoting" which changes close quotes.
|
||||
This causes end quotes to not match up with open quotes.
|
||||
<p>This breaks prettifying as well as copying and pasting of code samples.
|
||||
See
|
||||
<a href="http://wordpress.org/support/topic/125038"
|
||||
>WordPress's help center</a> for info on how to stop smart quoting of code
|
||||
snippets.</p>
|
||||
|
||||
<h3 id="linenums">How do I put line numbers in my code?</h3>
|
||||
<p>You can use the <code>linenums</code> class to turn on line
|
||||
numbering. If your code doesn't start at line number 1, you can
|
||||
add a colon and a line number to the end of that class as in
|
||||
<code>linenums:52</code>.
|
||||
|
||||
<p>For example
|
||||
<pre class="prettyprint"><pre class="prettyprint linenums:<b>4</b>"
|
||||
>// This is line 4.
|
||||
foo();
|
||||
bar();
|
||||
baz();
|
||||
boo();
|
||||
far();
|
||||
faz();
|
||||
<pre></pre>
|
||||
produces
|
||||
<pre class="prettyprint linenums:4"
|
||||
>// This is line 4.
|
||||
foo();
|
||||
bar();
|
||||
baz();
|
||||
boo();
|
||||
far();
|
||||
faz();
|
||||
</pre>
|
||||
|
||||
<h3>How do I prevent a portion of markup from being marked as code?</h3>
|
||||
<p>You can use the <code>nocode</code> class to identify a span of markup
|
||||
that is not code.
|
||||
<pre class="prettyprint"><pre class=prettyprint>
|
||||
int x = foo(); /* This is a comment <span class="nocode">This is not code</span>
|
||||
Continuation of comment */
|
||||
int y = bar();
|
||||
</pre></pre>
|
||||
produces
|
||||
<pre class="prettyprint">
|
||||
int x = foo(); /* This is a comment <span class="nocode">This is not code</span>
|
||||
Continuation of comment */
|
||||
int y = bar();
|
||||
</pre>
|
||||
|
||||
<p>For a more complete example see the issue22
|
||||
<a href="tests/prettify_test.html#issue22">testcase</a>.</p>
|
||||
|
||||
<h3>I get an error message "a is not a function" or "opt_whenDone is not a function"</h3>
|
||||
<p>If you are calling <code>prettyPrint</code> via an event handler, wrap it in a function.
|
||||
Instead of doing
|
||||
<blockquote>
|
||||
<code class="prettyprint lang-js"
|
||||
>addEventListener('load', prettyPrint, false);</code>
|
||||
</blockquote>
|
||||
wrap it in a closure like
|
||||
<blockquote>
|
||||
<code class="prettyprint lang-js"
|
||||
>addEventListener('load', function (event) { prettyPrint() }, false);</code>
|
||||
</blockquote>
|
||||
so that the browser does not pass an event object to <code>prettyPrint</code> which
|
||||
will confuse it.
|
||||
|
||||
<br><br><br>
|
||||
|
||||
<div class="footer">
|
||||
<!-- Created: Tue Oct 3 17:51:56 PDT 2006 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Wed Jul 19 13:56:00 PST 2010
|
||||
<!-- hhmts end -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
1
docs/assets/vendor/prettify/prettify-min.css
vendored
Normal file
1
docs/assets/vendor/prettify/prettify-min.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
|
1
docs/assets/vendor/prettify/prettify-min.js
vendored
Normal file
1
docs/assets/vendor/prettify/prettify-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1050
docs/classes/Attribute.html
Normal file
1050
docs/classes/Attribute.html
Normal file
File diff suppressed because it is too large
Load Diff
2917
docs/classes/Comment.html
Normal file
2917
docs/classes/Comment.html
Normal file
File diff suppressed because it is too large
Load Diff
3321
docs/classes/Document.html
Normal file
3321
docs/classes/Document.html
Normal file
File diff suppressed because it is too large
Load Diff
963
docs/classes/HTML5Error.html
Normal file
963
docs/classes/HTML5Error.html
Normal file
@ -0,0 +1,963 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="http://yui.yahooapis.com/3.8.0/build/cssgrids/cssgrids-min.css">
|
||||
<link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
|
||||
<link rel="stylesheet" href="../assets/css/main.css" id="site_styles">
|
||||
<link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
|
||||
<script src="http://yui.yahooapis.com/3.10.1/build/yui/yui-min.js"></script>
|
||||
<title>Canteen HTML5 API v${version} API Documentation : HTML5Error</title>
|
||||
</head>
|
||||
<body class="yui3-skin-sam">
|
||||
|
||||
<div id="doc">
|
||||
<div id="hd" class="yui3-g header">
|
||||
<div class="yui3-u-3-4">
|
||||
|
||||
<h1><a href=""><img src="../assets/css/logo.png" title="Canteen HTML5 API"></a></h1>
|
||||
|
||||
</div>
|
||||
<div class="yui3-u-1-4 version">
|
||||
<em>API Documentation for: ${version}</em>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bd" class="yui3-g">
|
||||
|
||||
<div class="yui3-u-1-4">
|
||||
<div id="docs-sidebar" class="sidebar apidocs">
|
||||
<div id="api-list">
|
||||
<h2 class="off-left">APIs</h2>
|
||||
<div id="api-tabview" class="tabview">
|
||||
<div id="api-tabview-filter">
|
||||
<input type="search" id="api-filter" placeholder="Type to filter APIs">
|
||||
</div>
|
||||
<ul class="tabs">
|
||||
<li><a href="#api-classes">Classes</a></li>
|
||||
<li><a href="#api-modules">Namespaces</a></li>
|
||||
</ul>
|
||||
<div id="api-tabview-panel">
|
||||
<ul id="api-classes" class="apis classes">
|
||||
|
||||
<li><a href="../classes/Attribute.html">Attribute</a></li>
|
||||
|
||||
<li><a href="../classes/Comment.html">Comment</a></li>
|
||||
|
||||
<li><a href="../classes/Document.html">Document</a></li>
|
||||
|
||||
<li><a href="../classes/html.html">html</a></li>
|
||||
|
||||
<li><a href="../classes/HTML5Error.html">HTML5Error</a></li>
|
||||
|
||||
<li><a href="../classes/Node.html">Node</a></li>
|
||||
|
||||
<li><a href="../classes/NodeContainer.html">NodeContainer</a></li>
|
||||
|
||||
<li><a href="../classes/SimpleList.html">SimpleList</a></li>
|
||||
|
||||
<li><a href="../classes/Table.html">Table</a></li>
|
||||
|
||||
<li><a href="../classes/Text.html">Text</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
<ul id="api-modules" class="apis modules">
|
||||
|
||||
<li><a href="../modules/Canteen_HTML5.html">Canteen\HTML5</a></li>
|
||||
|
||||
<li><a href="../modules/global.html">global</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="yui3-u-3-4">
|
||||
<div id="api-options">
|
||||
Show:
|
||||
<label for="api-show-inherited">
|
||||
<input type="checkbox" id="api-show-inherited" checked>
|
||||
Inherited
|
||||
</label>
|
||||
|
||||
<label for="api-show-protected">
|
||||
<input type="checkbox" id="api-show-protected">
|
||||
Protected
|
||||
</label>
|
||||
|
||||
<label for="api-show-private">
|
||||
<input type="checkbox" id="api-show-private">
|
||||
Private
|
||||
</label>
|
||||
<label for="api-show-deprecated">
|
||||
<input type="checkbox" id="api-show-deprecated">
|
||||
Deprecated
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<div class="apidocs">
|
||||
<div id="docs-main">
|
||||
<div class="content">
|
||||
<h1>HTML5Error Class</h1>
|
||||
<div class="box meta">
|
||||
|
||||
|
||||
|
||||
<div class="extends">
|
||||
Extends Exception
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Namespace: <a href="../modules/Canteen\HTML5.html">Canteen\HTML5</a>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="box intro">
|
||||
<p>Exceptions with using the HTML5 API.</p>
|
||||
<pre class="code prettyprint"><code>try
|
||||
{
|
||||
html('invalid', 'something');
|
||||
}
|
||||
catch(Canteen\HTML5\HTML5Error $e)
|
||||
{
|
||||
$e->getMessage();
|
||||
}</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="constructor">
|
||||
<h2>Constructor</h2>
|
||||
<div id="method_HTML5Error" class="method item">
|
||||
<h3 class="name"><code>HTML5Error</code></h3>
|
||||
|
||||
|
||||
<div class="args">
|
||||
<span class="paren">(</span><ul class="args-list inline commas">
|
||||
|
||||
<li class="arg">
|
||||
|
||||
<code>code</code>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="arg">
|
||||
|
||||
<code class="optional">[data='']</code>
|
||||
|
||||
</li>
|
||||
|
||||
</ul><span class="paren">)</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="params">
|
||||
<h4>Parameters:</h4>
|
||||
|
||||
<ul class="params-list">
|
||||
|
||||
<li class="param">
|
||||
|
||||
<code class="param-name">code</code>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="param-description">
|
||||
<p>The code of the error</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="param">
|
||||
|
||||
<code class="param-name optional">[data='']</code>
|
||||
<span class="type"><a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String" class="crosslink external" target="_blank">String</a></span>
|
||||
<span class="flag optional" title="This parameter is optional.">optional</span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="param-description">
|
||||
<p>Additional data to associate with this error</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="classdocs" class="tabview">
|
||||
<ul class="api-class-tabs">
|
||||
<li class="api-class-tab index"><a href="#index">Index</a></li>
|
||||
|
||||
|
||||
|
||||
<li class="api-class-tab properties"><a href="#properties">Properties</a></li>
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
<div>
|
||||
<div id="index" class="api-class-tabpanel index">
|
||||
<h2 class="off-left">Item Index</h2>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="index-section properties">
|
||||
<h3>Properties</h3>
|
||||
|
||||
<ul class="index-list properties extends">
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_EMPTY_ATTRIBUTE_NAME">EMPTY_ATTRIBUTE_NAME</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_EMPTY_ATTRIBUTE_VALUE">EMPTY_ATTRIBUTE_VALUE</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_EMPTY_CHILD">EMPTY_CHILD</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_EMPTY_NODE_TAG">EMPTY_NODE_TAG</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_EMPTY_PARENT">EMPTY_PARENT</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_INVALID_GETTER">INVALID_GETTER</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_INVALID_NODE">INVALID_NODE</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_INVALID_SETTER">INVALID_SETTER</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_INVALID_TAG">INVALID_TAG</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property private">
|
||||
<a href="#property_messages">messages</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_OUT_OF_BOUNDS">OUT_OF_BOUNDS</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="index-item property">
|
||||
<a href="#property_UNKNOWN">UNKNOWN</a>
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="properties" class="api-class-tabpanel">
|
||||
<h2 class="off-left">Properties</h2>
|
||||
|
||||
|
||||
<div id="property_EMPTY_ATTRIBUTE_NAME" class="property item">
|
||||
<h3 class="name"><code>EMPTY_ATTRIBUTE_NAME</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The database connection failed</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_EMPTY_ATTRIBUTE_VALUE" class="property item">
|
||||
<h3 class="name"><code>EMPTY_ATTRIBUTE_VALUE</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The alias for a database is invalid</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_EMPTY_CHILD" class="property item">
|
||||
<h3 class="name"><code>EMPTY_CHILD</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The child node is empty</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_EMPTY_NODE_TAG" class="property item">
|
||||
<h3 class="name"><code>EMPTY_NODE_TAG</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>When trying to create a node, the name is empty</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_EMPTY_PARENT" class="property item">
|
||||
<h3 class="name"><code>EMPTY_PARENT</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The parent cannot be empty</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_INVALID_GETTER" class="property item">
|
||||
<h3 class="name"><code>INVALID_GETTER</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The mysql where trying to execute was a problem</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_INVALID_NODE" class="property item">
|
||||
<h3 class="name"><code>INVALID_NODE</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The node is not of instance type Node</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_INVALID_SETTER" class="property item">
|
||||
<h3 class="name"><code>INVALID_SETTER</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The database name we're trying to switch to is invalid</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_INVALID_TAG" class="property item">
|
||||
<h3 class="name"><code>INVALID_TAG</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The html tag name is invalid</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_messages" class="property item private">
|
||||
<h3 class="name"><code>messages</code></h3>
|
||||
<span class="type">Dictionary</span>
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag private">private</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>Look-up for error messages</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_OUT_OF_BOUNDS" class="property item">
|
||||
<h3 class="name"><code>OUT_OF_BOUNDS</code></h3>
|
||||
<span class="type">Int</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>THe addChildAt is out of bounds</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="property_UNKNOWN" class="property item">
|
||||
<h3 class="name"><code>UNKNOWN</code></h3>
|
||||
<span class="type"><a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String" class="crosslink external" target="_blank">String</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flag final">final</span>
|
||||
|
||||
|
||||
|
||||
<span class="flag static">static</span>
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
<p>The label for an error that is unknown or unfound in messages</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="../assets/vendor/prettify/prettify-min.js"></script>
|
||||
<script>prettyPrint();</script>
|
||||
<script src="../assets/js/yui-prettify.js"></script>
|
||||
<script src="../assets/../api.js"></script>
|
||||
<script src="../assets/js/api-filter.js"></script>
|
||||
<script src="../assets/js/api-list.js"></script>
|
||||
<script src="../assets/js/api-search.js"></script>
|
||||
<script src="../assets/js/apidocs.js"></script>
|
||||
</body>
|
||||
</html>
|
2069
docs/classes/Node.html
Normal file
2069
docs/classes/Node.html
Normal file
File diff suppressed because it is too large
Load Diff
2997
docs/classes/NodeContainer.html
Normal file
2997
docs/classes/NodeContainer.html
Normal file
File diff suppressed because it is too large
Load Diff
2974
docs/classes/SimpleList.html
Normal file
2974
docs/classes/SimpleList.html
Normal file
File diff suppressed because it is too large
Load Diff
2973
docs/classes/Table.html
Normal file
2973
docs/classes/Table.html
Normal file
File diff suppressed because it is too large
Load Diff
1956
docs/classes/Text.html
Normal file
1956
docs/classes/Text.html
Normal file
File diff suppressed because it is too large
Load Diff
339
docs/classes/html.html
Normal file
339
docs/classes/html.html
Normal file
@ -0,0 +1,339 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="http://yui.yahooapis.com/3.8.0/build/cssgrids/cssgrids-min.css">
|
||||
<link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
|
||||
<link rel="stylesheet" href="../assets/css/main.css" id="site_styles">
|
||||
<link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
|
||||
<script src="http://yui.yahooapis.com/3.10.1/build/yui/yui-min.js"></script>
|
||||
<title>Canteen HTML5 API v${version} API Documentation : html</title>
|
||||
</head>
|
||||
<body class="yui3-skin-sam">
|
||||
|
||||
<div id="doc">
|
||||
<div id="hd" class="yui3-g header">
|
||||
<div class="yui3-u-3-4">
|
||||
|
||||
<h1><a href=""><img src="../assets/css/logo.png" title="Canteen HTML5 API"></a></h1>
|
||||
|
||||
</div>
|
||||
<div class="yui3-u-1-4 version">
|
||||
<em>API Documentation for: ${version}</em>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bd" class="yui3-g">
|
||||
|
||||
<div class="yui3-u-1-4">
|
||||
<div id="docs-sidebar" class="sidebar apidocs">
|
||||
<div id="api-list">
|
||||
<h2 class="off-left">APIs</h2>
|
||||
<div id="api-tabview" class="tabview">
|
||||
<div id="api-tabview-filter">
|
||||
<input type="search" id="api-filter" placeholder="Type to filter APIs">
|
||||
</div>
|
||||
<ul class="tabs">
|
||||
<li><a href="#api-classes">Classes</a></li>
|
||||
<li><a href="#api-modules">Namespaces</a></li>
|
||||
</ul>
|
||||
<div id="api-tabview-panel">
|
||||
<ul id="api-classes" class="apis classes">
|
||||
|
||||
<li><a href="../classes/Attribute.html">Attribute</a></li>
|
||||
|
||||
<li><a href="../classes/Comment.html">Comment</a></li>
|
||||
|
||||
<li><a href="../classes/Document.html">Document</a></li>
|
||||
|
||||
<li><a href="../classes/html.html">html</a></li>
|
||||
|
||||
<li><a href="../classes/HTML5Error.html">HTML5Error</a></li>
|
||||
|
||||
<li><a href="../classes/Node.html">Node</a></li>
|
||||
|
||||
<li><a href="../classes/NodeContainer.html">NodeContainer</a></li>
|
||||
|
||||
<li><a href="../classes/SimpleList.html">SimpleList</a></li>
|
||||
|
||||
<li><a href="../classes/Table.html">Table</a></li>
|
||||
|
||||
<li><a href="../classes/Text.html">Text</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
<ul id="api-modules" class="apis modules">
|
||||
|
||||
<li><a href="../modules/Canteen_HTML5.html">Canteen\HTML5</a></li>
|
||||
|
||||
<li><a href="../modules/global.html">global</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="yui3-u-3-4">
|
||||
<div id="api-options">
|
||||
Show:
|
||||
<label for="api-show-inherited">
|
||||
<input type="checkbox" id="api-show-inherited" checked>
|
||||
Inherited
|
||||
</label>
|
||||
|
||||
<label for="api-show-protected">
|
||||
<input type="checkbox" id="api-show-protected">
|
||||
Protected
|
||||
</label>
|
||||
|
||||
<label for="api-show-private">
|
||||
<input type="checkbox" id="api-show-private">
|
||||
Private
|
||||
</label>
|
||||
<label for="api-show-deprecated">
|
||||
<input type="checkbox" id="api-show-deprecated">
|
||||
Deprecated
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<div class="apidocs">
|
||||
<div id="docs-main">
|
||||
<div class="content">
|
||||
<h1>html Class</h1>
|
||||
<div class="box meta">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Namespace: <a href="../modules/global.html">global</a>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="box intro">
|
||||
<p>This is the global function is the main entry for interacting with the HTML5 for PHP library.
|
||||
using <code>html()</code> global function you can create HTML5 quickly and easily. For more
|
||||
examples and instruction on how to use this library, please refer to the the
|
||||
<a href="https://github.com/bigtimebuddy/CanteenHTML5">GitHub project</a>.
|
||||
To install the library simply include <code>html.php</code>, this takes care of any autoloading that's needed
|
||||
for the rest of the library.</p>
|
||||
<pre class="code prettyprint"><code>echo html('img src=home.jpg');
|
||||
echo html('img', 'src=home.jpg');
|
||||
echo html('a', array('href'=>'about.html'));</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="constructor">
|
||||
<h2>Constructor</h2>
|
||||
<div id="method_html" class="method item">
|
||||
<h3 class="name"><code>html</code></h3>
|
||||
|
||||
|
||||
<div class="args">
|
||||
<span class="paren">(</span><ul class="args-list inline commas">
|
||||
|
||||
<li class="arg">
|
||||
|
||||
<code>tag</code>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="arg">
|
||||
|
||||
<code class="optional">[childrenOrAttributes=null]</code>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="arg">
|
||||
|
||||
<code class="optional">[attributes=null]</code>
|
||||
|
||||
</li>
|
||||
|
||||
</ul><span class="paren">)</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<span class="returns-inline">
|
||||
<span class="type"><a href="../classes/Node.html" class="crosslink">Node</a></span>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="meta">
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="description">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="params">
|
||||
<h4>Parameters:</h4>
|
||||
|
||||
<ul class="params-list">
|
||||
|
||||
<li class="param">
|
||||
|
||||
<code class="param-name">tag</code>
|
||||
<span class="type"><a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String" class="crosslink external" target="_blank">String</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="param-description">
|
||||
<p>The name of the tag as a string for example 'tr', 'table', can be followed
|
||||
by CSS selector, e.g. 'a#backButton' or 'a.button'</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="param">
|
||||
|
||||
<code class="param-name optional">[childrenOrAttributes=null]</code>
|
||||
<span class="type">Dictionary | <a href="../classes/Node.html" class="crosslink">Node</a> | <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String" class="crosslink external" target="_blank">String</a> | <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array" class="crosslink external" target="_blank">Array</a></span>
|
||||
<span class="flag optional" title="This parameter is optional.">optional</span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="param-description">
|
||||
<p>If the tag is a NodeContainer, this can be an array
|
||||
of attributes, another html node or some text. If the tag is a single node, this can
|
||||
be an array or chain of attributes</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li class="param">
|
||||
|
||||
<code class="param-name optional">[attributes=null]</code>
|
||||
<span class="type">Dictionary | <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String" class="crosslink external" target="_blank">String</a></span>
|
||||
<span class="flag optional" title="This parameter is optional.">optional</span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="param-description">
|
||||
<p>The attributes list for container tags (e.g., 'class:selected')</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="returns">
|
||||
<h4>Returns:</h4>
|
||||
|
||||
<div class="returns-description">
|
||||
|
||||
|
||||
<span class="type"><a href="../classes/Node.html" class="crosslink">Node</a></span>:
|
||||
|
||||
<p>Return the html node</p>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="classdocs" class="tabview">
|
||||
<ul class="api-class-tabs">
|
||||
<li class="api-class-tab index"><a href="#index">Index</a></li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
<div>
|
||||
<div id="index" class="api-class-tabpanel index">
|
||||
<h2 class="off-left">Item Index</h2>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="../assets/vendor/prettify/prettify-min.js"></script>
|
||||
<script>prettyPrint();</script>
|
||||
<script src="../assets/js/yui-prettify.js"></script>
|
||||
<script src="../assets/../api.js"></script>
|
||||
<script src="../assets/js/api-filter.js"></script>
|
||||
<script src="../assets/js/api-list.js"></script>
|
||||
<script src="../assets/js/api-search.js"></script>
|
||||
<script src="../assets/js/apidocs.js"></script>
|
||||
</body>
|
||||
</html>
|
1531
docs/data.json
Normal file
1531
docs/data.json
Normal file
File diff suppressed because it is too large
Load Diff
138
docs/index.html
Normal file
138
docs/index.html
Normal file
@ -0,0 +1,138 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="http://yui.yahooapis.com/3.8.0/build/cssgrids/cssgrids-min.css">
|
||||
<link rel="stylesheet" href="./assets/vendor/prettify/prettify-min.css">
|
||||
<link rel="stylesheet" href="./assets/css/main.css" id="site_styles">
|
||||
<link rel="shortcut icon" type="image/png" href="./assets/favicon.png">
|
||||
<script src="http://yui.yahooapis.com/3.10.1/build/yui/yui-min.js"></script>
|
||||
<title>Canteen HTML5 API v${version} API Documentation : </title>
|
||||
</head>
|
||||
<body class="yui3-skin-sam">
|
||||
|
||||
<div id="doc">
|
||||
<div id="hd" class="yui3-g header">
|
||||
<div class="yui3-u-3-4">
|
||||
|
||||
<h1><a href=""><img src="./assets/css/logo.png" title="Canteen HTML5 API"></a></h1>
|
||||
|
||||
</div>
|
||||
<div class="yui3-u-1-4 version">
|
||||
<em>API Documentation for: ${version}</em>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bd" class="yui3-g">
|
||||
|
||||
<div class="yui3-u-1-4">
|
||||
<div id="docs-sidebar" class="sidebar apidocs">
|
||||
<div id="api-list">
|
||||
<h2 class="off-left">APIs</h2>
|
||||
<div id="api-tabview" class="tabview">
|
||||
<div id="api-tabview-filter">
|
||||
<input type="search" id="api-filter" placeholder="Type to filter APIs">
|
||||
</div>
|
||||
<ul class="tabs">
|
||||
<li><a href="#api-classes">Classes</a></li>
|
||||
<li><a href="#api-modules">Namespaces</a></li>
|
||||
</ul>
|
||||
<div id="api-tabview-panel">
|
||||
<ul id="api-classes" class="apis classes">
|
||||
|
||||
<li><a href="./classes/Attribute.html">Attribute</a></li>
|
||||
|
||||
<li><a href="./classes/Comment.html">Comment</a></li>
|
||||
|
||||
<li><a href="./classes/Document.html">Document</a></li>
|
||||
|
||||
<li><a href="./classes/html.html">html</a></li>
|
||||
|
||||
<li><a href="./classes/HTML5Error.html">HTML5Error</a></li>
|
||||
|
||||
<li><a href="./classes/Node.html">Node</a></li>
|
||||
|
||||
<li><a href="./classes/NodeContainer.html">NodeContainer</a></li>
|
||||
|
||||
<li><a href="./classes/SimpleList.html">SimpleList</a></li>
|
||||
|
||||
<li><a href="./classes/Table.html">Table</a></li>
|
||||
|
||||
<li><a href="./classes/Text.html">Text</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
<ul id="api-modules" class="apis modules">
|
||||
|
||||
<li><a href="./modules/Canteen_HTML5.html">Canteen\HTML5</a></li>
|
||||
|
||||
<li><a href="./modules/global.html">global</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="yui3-u-3-4">
|
||||
<div id="api-options">
|
||||
Show:
|
||||
<label for="api-show-inherited">
|
||||
<input type="checkbox" id="api-show-inherited" checked>
|
||||
Inherited
|
||||
</label>
|
||||
|
||||
<label for="api-show-protected">
|
||||
<input type="checkbox" id="api-show-protected">
|
||||
Protected
|
||||
</label>
|
||||
|
||||
<label for="api-show-private">
|
||||
<input type="checkbox" id="api-show-private">
|
||||
Private
|
||||
</label>
|
||||
<label for="api-show-deprecated">
|
||||
<input type="checkbox" id="api-show-deprecated">
|
||||
Deprecated
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<div class="apidocs">
|
||||
<div id="docs-main">
|
||||
<div class="content">
|
||||
<div class="apidocs">
|
||||
<div id="docs-main" class="content">
|
||||
|
||||
|
||||
<h2>Keyboard Shortcuts</h2>
|
||||
|
||||
<ul>
|
||||
<li><p>Press <kbd>s</kbd> to focus the API search box.</p></li>
|
||||
|
||||
<li><p>Use <kbd>Up</kbd> and <kbd>Down</kbd> to select classes, modules, and search results.</p></li>
|
||||
|
||||
<li class="mac-only"><p>With the API search box or sidebar focused, use <kbd><span class="cmd">⌘</span>-Left</kbd> or <kbd><span class="cmd">⌘</span>-Right</kbd> to switch sidebar tabs.</p></li>
|
||||
|
||||
<li class="pc-only"><p>With the API search box or sidebar focused, use <kbd>Ctrl+Left</kbd> and <kbd>Ctrl+Right</kbd> to switch sidebar tabs.</p></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./assets/vendor/prettify/prettify-min.js"></script>
|
||||
<script>prettyPrint();</script>
|
||||
<script src="./assets/js/yui-prettify.js"></script>
|
||||
<script src="./assets/../api.js"></script>
|
||||
<script src="./assets/js/api-filter.js"></script>
|
||||
<script src="./assets/js/api-list.js"></script>
|
||||
<script src="./assets/js/api-search.js"></script>
|
||||
<script src="./assets/js/apidocs.js"></script>
|
||||
</body>
|
||||
</html>
|
207
docs/modules/Canteen_HTML5.html
Normal file
207
docs/modules/Canteen_HTML5.html
Normal file
@ -0,0 +1,207 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="http://yui.yahooapis.com/3.8.0/build/cssgrids/cssgrids-min.css">
|
||||
<link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
|
||||
<link rel="stylesheet" href="../assets/css/main.css" id="site_styles">
|
||||
<link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
|
||||
<script src="http://yui.yahooapis.com/3.10.1/build/yui/yui-min.js"></script>
|
||||
<title>Canteen HTML5 API v${version} API Documentation : Canteen_HTML5</title>
|
||||
</head>
|
||||
<body class="yui3-skin-sam">
|
||||
|
||||
<div id="doc">
|
||||
<div id="hd" class="yui3-g header">
|
||||
<div class="yui3-u-3-4">
|
||||
|
||||
<h1><a href=""><img src="../assets/css/logo.png" title="Canteen HTML5 API"></a></h1>
|
||||
|
||||
</div>
|
||||
<div class="yui3-u-1-4 version">
|
||||
<em>API Documentation for: ${version}</em>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bd" class="yui3-g">
|
||||
|
||||
<div class="yui3-u-1-4">
|
||||
<div id="docs-sidebar" class="sidebar apidocs">
|
||||
<div id="api-list">
|
||||
<h2 class="off-left">APIs</h2>
|
||||
<div id="api-tabview" class="tabview">
|
||||
<div id="api-tabview-filter">
|
||||
<input type="search" id="api-filter" placeholder="Type to filter APIs">
|
||||
</div>
|
||||
<ul class="tabs">
|
||||
<li><a href="#api-classes">Classes</a></li>
|
||||
<li><a href="#api-modules">Namespaces</a></li>
|
||||
</ul>
|
||||
<div id="api-tabview-panel">
|
||||
<ul id="api-classes" class="apis classes">
|
||||
|
||||
<li><a href="../classes/Attribute.html">Attribute</a></li>
|
||||
|
||||
<li><a href="../classes/Comment.html">Comment</a></li>
|
||||
|
||||
<li><a href="../classes/Document.html">Document</a></li>
|
||||
|
||||
<li><a href="../classes/html.html">html</a></li>
|
||||
|
||||
<li><a href="../classes/HTML5Error.html">HTML5Error</a></li>
|
||||
|
||||
<li><a href="../classes/Node.html">Node</a></li>
|
||||
|
||||
<li><a href="../classes/NodeContainer.html">NodeContainer</a></li>
|
||||
|
||||
<li><a href="../classes/SimpleList.html">SimpleList</a></li>
|
||||
|
||||
<li><a href="../classes/Table.html">Table</a></li>
|
||||
|
||||
<li><a href="../classes/Text.html">Text</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
<ul id="api-modules" class="apis modules">
|
||||
|
||||
<li><a href="../modules/Canteen_HTML5.html">Canteen\HTML5</a></li>
|
||||
|
||||
<li><a href="../modules/global.html">global</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="yui3-u-3-4">
|
||||
<div id="api-options">
|
||||
Show:
|
||||
<label for="api-show-inherited">
|
||||
<input type="checkbox" id="api-show-inherited" checked>
|
||||
Inherited
|
||||
</label>
|
||||
|
||||
<label for="api-show-protected">
|
||||
<input type="checkbox" id="api-show-protected">
|
||||
Protected
|
||||
</label>
|
||||
|
||||
<label for="api-show-private">
|
||||
<input type="checkbox" id="api-show-private">
|
||||
Private
|
||||
</label>
|
||||
<label for="api-show-deprecated">
|
||||
<input type="checkbox" id="api-show-deprecated">
|
||||
Deprecated
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<div class="apidocs">
|
||||
<div id="docs-main">
|
||||
<div class="content">
|
||||
<h1>Canteen_HTML5 Namespace</h1>
|
||||
<div class="box clearfix meta">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="box intro">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="yui3-g">
|
||||
<div class="yui3-u-1-2">
|
||||
|
||||
<p>This namespace provides the following classes:</p>
|
||||
|
||||
<ul class="module-classes">
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/Attribute.html">
|
||||
Attribute
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/Comment.html">
|
||||
Comment
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/Document.html">
|
||||
Document
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/HTML5Error.html">
|
||||
HTML5Error
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/Node.html">
|
||||
Node
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/NodeContainer.html">
|
||||
NodeContainer
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/SimpleList.html">
|
||||
SimpleList
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/Table.html">
|
||||
Table
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/Text.html">
|
||||
Text
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="yui3-u-1-2">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="../assets/vendor/prettify/prettify-min.js"></script>
|
||||
<script>prettyPrint();</script>
|
||||
<script src="../assets/js/yui-prettify.js"></script>
|
||||
<script src="../assets/../api.js"></script>
|
||||
<script src="../assets/js/api-filter.js"></script>
|
||||
<script src="../assets/js/api-list.js"></script>
|
||||
<script src="../assets/js/api-search.js"></script>
|
||||
<script src="../assets/js/apidocs.js"></script>
|
||||
</body>
|
||||
</html>
|
159
docs/modules/global.html
Normal file
159
docs/modules/global.html
Normal file
@ -0,0 +1,159 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="http://yui.yahooapis.com/3.8.0/build/cssgrids/cssgrids-min.css">
|
||||
<link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
|
||||
<link rel="stylesheet" href="../assets/css/main.css" id="site_styles">
|
||||
<link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
|
||||
<script src="http://yui.yahooapis.com/3.10.1/build/yui/yui-min.js"></script>
|
||||
<title>Canteen HTML5 API v${version} API Documentation : global</title>
|
||||
</head>
|
||||
<body class="yui3-skin-sam">
|
||||
|
||||
<div id="doc">
|
||||
<div id="hd" class="yui3-g header">
|
||||
<div class="yui3-u-3-4">
|
||||
|
||||
<h1><a href=""><img src="../assets/css/logo.png" title="Canteen HTML5 API"></a></h1>
|
||||
|
||||
</div>
|
||||
<div class="yui3-u-1-4 version">
|
||||
<em>API Documentation for: ${version}</em>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bd" class="yui3-g">
|
||||
|
||||
<div class="yui3-u-1-4">
|
||||
<div id="docs-sidebar" class="sidebar apidocs">
|
||||
<div id="api-list">
|
||||
<h2 class="off-left">APIs</h2>
|
||||
<div id="api-tabview" class="tabview">
|
||||
<div id="api-tabview-filter">
|
||||
<input type="search" id="api-filter" placeholder="Type to filter APIs">
|
||||
</div>
|
||||
<ul class="tabs">
|
||||
<li><a href="#api-classes">Classes</a></li>
|
||||
<li><a href="#api-modules">Namespaces</a></li>
|
||||
</ul>
|
||||
<div id="api-tabview-panel">
|
||||
<ul id="api-classes" class="apis classes">
|
||||
|
||||
<li><a href="../classes/Attribute.html">Attribute</a></li>
|
||||
|
||||
<li><a href="../classes/Comment.html">Comment</a></li>
|
||||
|
||||
<li><a href="../classes/Document.html">Document</a></li>
|
||||
|
||||
<li><a href="../classes/html.html">html</a></li>
|
||||
|
||||
<li><a href="../classes/HTML5Error.html">HTML5Error</a></li>
|
||||
|
||||
<li><a href="../classes/Node.html">Node</a></li>
|
||||
|
||||
<li><a href="../classes/NodeContainer.html">NodeContainer</a></li>
|
||||
|
||||
<li><a href="../classes/SimpleList.html">SimpleList</a></li>
|
||||
|
||||
<li><a href="../classes/Table.html">Table</a></li>
|
||||
|
||||
<li><a href="../classes/Text.html">Text</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
<ul id="api-modules" class="apis modules">
|
||||
|
||||
<li><a href="../modules/Canteen_HTML5.html">Canteen\HTML5</a></li>
|
||||
|
||||
<li><a href="../modules/global.html">global</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="yui3-u-3-4">
|
||||
<div id="api-options">
|
||||
Show:
|
||||
<label for="api-show-inherited">
|
||||
<input type="checkbox" id="api-show-inherited" checked>
|
||||
Inherited
|
||||
</label>
|
||||
|
||||
<label for="api-show-protected">
|
||||
<input type="checkbox" id="api-show-protected">
|
||||
Protected
|
||||
</label>
|
||||
|
||||
<label for="api-show-private">
|
||||
<input type="checkbox" id="api-show-private">
|
||||
Private
|
||||
</label>
|
||||
<label for="api-show-deprecated">
|
||||
<input type="checkbox" id="api-show-deprecated">
|
||||
Deprecated
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<div class="apidocs">
|
||||
<div id="docs-main">
|
||||
<div class="content">
|
||||
<h1>global Namespace</h1>
|
||||
<div class="box clearfix meta">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="box intro">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="yui3-g">
|
||||
<div class="yui3-u-1-2">
|
||||
|
||||
<p>This namespace provides the following classes:</p>
|
||||
|
||||
<ul class="module-classes">
|
||||
|
||||
<li class="module-class">
|
||||
<a href="../classes/html.html">
|
||||
html
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="yui3-u-1-2">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="../assets/vendor/prettify/prettify-min.js"></script>
|
||||
<script>prettyPrint();</script>
|
||||
<script src="../assets/js/yui-prettify.js"></script>
|
||||
<script src="../assets/../api.js"></script>
|
||||
<script src="../assets/js/api-filter.js"></script>
|
||||
<script src="../assets/js/api-list.js"></script>
|
||||
<script src="../assets/js/api-search.js"></script>
|
||||
<script src="../assets/js/apidocs.js"></script>
|
||||
</body>
|
||||
</html>
|
52
examples/document.php
Normal file
52
examples/document.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
include '../lib/html.php';
|
||||
|
||||
use Canteen\HTML5\Document;
|
||||
use Canteen\HTML5\SimpleList;
|
||||
use Canteen\HTML5\Table;
|
||||
|
||||
// Create a new document
|
||||
$doc = new Document('Test Document');
|
||||
$doc->beautify = true;
|
||||
|
||||
// Add a link to the page
|
||||
$link = html('a#google.external rel=external', 'Link', 'class="test something" target=blank rel=test');
|
||||
$link->href = 'http://google.com';
|
||||
$link->appendTo($doc->body);
|
||||
|
||||
// Create an unordered list for an array of items
|
||||
// the array can be other html elements or text
|
||||
$list = new SimpleList(
|
||||
array(
|
||||
html('b', 'first'),
|
||||
'second',
|
||||
'third',
|
||||
array(
|
||||
'sub-third',
|
||||
'sub-forth'
|
||||
)
|
||||
)
|
||||
);
|
||||
$list->appendTo($doc->body);
|
||||
|
||||
// Create a sample table with some rows of dummy data
|
||||
$table = new Table(
|
||||
array(
|
||||
array('id'=>1, 'first'=>'James', 'last'=>'Smith'),
|
||||
array('id'=>2, 'first'=>'Mary', 'last'=>'Denver'),
|
||||
array('id'=>3, 'first'=>'Charlie', 'last'=>'Rose')
|
||||
),
|
||||
array('ID', 'First Name', 'Last Name')
|
||||
);
|
||||
|
||||
// We'll set some of the table properties
|
||||
$table->style = 'border:1px solid black';
|
||||
$table->border = 0;
|
||||
$table->id = 'people';
|
||||
$table->appendTo($doc->body);
|
||||
|
||||
// Output the result formatted nice with indents
|
||||
echo $doc;
|
||||
|
||||
?>
|
170
src/Canteen/HTML5/Attribute.php
Normal file
170
src/Canteen/HTML5/Attribute.php
Normal file
@ -0,0 +1,170 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* An HTML attribute used on the Node, this is used internally.
|
||||
* Do not initiate this class directly, use the `html()` function
|
||||
* to create attributes on elements.
|
||||
*
|
||||
* echo html('a', 'Link', 'class=button href="about.html"');
|
||||
*
|
||||
* echo html('a', 'Link')
|
||||
* ->setAttribute('class', 'button')
|
||||
* ->setAttribute('href', 'about.html');
|
||||
*
|
||||
* @class Attribute
|
||||
* @constructor
|
||||
* @param {String} [name=null] The name of the attribute
|
||||
* @param {String} [value=null] The value of the attribute
|
||||
*/
|
||||
class Attribute
|
||||
{
|
||||
/**
|
||||
* The name of the attribute
|
||||
* @property {String} _name
|
||||
* @private
|
||||
*/
|
||||
private $_name;
|
||||
|
||||
/**
|
||||
* The value of the attribute
|
||||
* @property {String} _value
|
||||
* @private
|
||||
*/
|
||||
private $_value;
|
||||
|
||||
public function __construct($name = null, $value = null)
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the attribute to an HTML tag attribute string
|
||||
* @method __toString
|
||||
* @return {String} String representation of attribute
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return " " . $this->_name . "=\"" . $this->_value . "\"";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of this attribute
|
||||
* @method getName
|
||||
* @return {String} The attribute's name
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the name of this attribute, cannot be empty
|
||||
* @method setName
|
||||
* @param {String} [name=null] The name of the attribute
|
||||
*/
|
||||
public function setName($name = null)
|
||||
{
|
||||
if (is_null($name) || empty($name))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::EMPTY_ATTRIBUTE_NAME);
|
||||
}
|
||||
$this->_name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of this attribute
|
||||
* @method getValue
|
||||
* @protected
|
||||
* @return {String} The value of attribute
|
||||
*/
|
||||
protected function getValue()
|
||||
{
|
||||
return $this->_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of this attribute, this cannot be empty
|
||||
* @method setValue
|
||||
* @protected
|
||||
* @param {String} value The value to set
|
||||
*/
|
||||
protected function setValue($value)
|
||||
{
|
||||
$this->_value = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a string into an associative array
|
||||
* @method shorthand
|
||||
* @static
|
||||
* @param {String} str The string, delineated by semicolons, and colons for attributes:values
|
||||
* @return {Dictionary} The collection of attributes
|
||||
*/
|
||||
static public function shorthand($str)
|
||||
{
|
||||
$res = array();
|
||||
|
||||
// Match the name=value in the attributes string
|
||||
preg_match_all('/([a-z]+[a-z\-]*)\=("[^\"]*"|\'[^\']*\'|[^\s\"\']*)/',$str, $arr);
|
||||
|
||||
foreach($arr[1] as $i=>$name)
|
||||
{
|
||||
$value = $arr[2][$i];
|
||||
|
||||
// Remove containing quotes if present
|
||||
if (preg_match('/^[\'\"][^\n]*[\'\"]$/', $value))
|
||||
{
|
||||
$value = substr($value, 1, -1);
|
||||
}
|
||||
$res[$name] = $value;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* General purpose getter for getting attribute->name and attribute->value
|
||||
* @public __get
|
||||
* @param {String} name The name of the property to get
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
if (method_exists($this , $method =('get' . ucfirst($name))))
|
||||
return $this->$method();
|
||||
else
|
||||
throw new HTML5Error(HTML5Error::INVALID_GETTER, $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* General purpose setter for setting attribute->name and attribute->value
|
||||
* @public __set
|
||||
* @param {String} name The name of the attribute
|
||||
* @param {String} value The value of the attribute
|
||||
*/
|
||||
public function __set($name, $value)
|
||||
{
|
||||
if (method_exists($this , $method =('set' . ucfirst($name))))
|
||||
return $this->$method($value);
|
||||
else
|
||||
throw new HTML5Error(HTML5Error::INVALID_SETTER, $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* See if a property exists
|
||||
* @method __isset
|
||||
* @param {String} name The name of the property
|
||||
*/
|
||||
public function __isset($name)
|
||||
{
|
||||
return method_exists($this , 'get' . ucfirst($name))
|
||||
|| method_exists($this , 'set' . ucfirst($name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
38
src/Canteen/HTML5/Comment.php
Normal file
38
src/Canteen/HTML5/Comment.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* Special node type representing an HTML5 inline comment.
|
||||
* Do not initiate this class directly, use the `html('comment')` function:
|
||||
*
|
||||
* echo html('comment', 'Hidden HTML comment here');
|
||||
*
|
||||
* @class Comment
|
||||
* @extends NodeContainer
|
||||
* @constructor
|
||||
* @param {String} text the plain text string
|
||||
*/
|
||||
class Comment extends NodeContainer
|
||||
{
|
||||
public function __construct($text)
|
||||
{
|
||||
parent::__construct($text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write to HTML
|
||||
* @method __toString
|
||||
* @return {String} The string representation of this HTML node
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return '<!-- '.$this->_tag.' -->';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
112
src/Canteen/HTML5/Document.php
Normal file
112
src/Canteen/HTML5/Document.php
Normal file
@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* Create an HTML document. Basic barebones structure.
|
||||
* Located in the namespace __Canteen\HTML5__.
|
||||
*
|
||||
* $doc = new HTML5\Document('Untitled');
|
||||
* $doc->head->addChild(html('script src=main.js'));
|
||||
* $doc->body->addChild(html('div#frame'));
|
||||
* echo $doc;
|
||||
*
|
||||
* @class Document
|
||||
* @extends NodeContainer
|
||||
* @constructor
|
||||
* @param {String} [title=''] The title of the document
|
||||
* @param {String} [charset='utf-8'] The character encoding set of this HTML document
|
||||
* @param {Boolean} [beautify=false] If we should add whitespace to the output to make it look nice markup.
|
||||
*/
|
||||
class Document extends NodeContainer
|
||||
{
|
||||
/**
|
||||
* The document type
|
||||
* @property {NodeContainer} docType
|
||||
*/
|
||||
private $docType;
|
||||
|
||||
/**
|
||||
* The head node
|
||||
* @property {NodeContainer} head
|
||||
*/
|
||||
public $head;
|
||||
|
||||
/**
|
||||
* The body node
|
||||
* @property {NodeContainer} body
|
||||
*/
|
||||
public $body;
|
||||
|
||||
/**
|
||||
* The title node
|
||||
* @property {NodeContainer} title
|
||||
*/
|
||||
public $title;
|
||||
|
||||
/**
|
||||
* Beautify the output
|
||||
* @property {Boolean} beautify
|
||||
*/
|
||||
public $beautify = false;
|
||||
|
||||
/**
|
||||
* Constructor for Docs
|
||||
*/
|
||||
public function __construct($title='', $charset='utf-8', $beautify=false)
|
||||
{
|
||||
parent::__construct('html', null, null, 'manifest');
|
||||
|
||||
$this->docType = html('doctype');
|
||||
$this->head = html('head');
|
||||
$this->body = html('body');
|
||||
$this->title = html('title', $title);
|
||||
|
||||
$this->head->addChild(html('meta', 'charset='.$charset));
|
||||
$this->head->addChild($this->title);
|
||||
|
||||
$this->addChild($this->head);
|
||||
$this->addChild($this->body);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write to HTML
|
||||
* @method __toString
|
||||
* @return {String} The string representation of this HTML node
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
$result = $this->docType . parent::__toString();
|
||||
if ($this->beautify)
|
||||
$result = self::beautify($result);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Beautifies an HTML string into a human-readable and indented work of art.
|
||||
* @method beautify
|
||||
* @static
|
||||
* @param {String} html The XML-compatible HTML as a string
|
||||
* @return {String} The formatted string
|
||||
*/
|
||||
public static function beautify($html)
|
||||
{
|
||||
// Conver the HTML -> SimpleXML -> DOMDocument
|
||||
$dom = dom_import_simplexml(new \SimpleXMLElement($html))->ownerDocument;
|
||||
|
||||
// Format the DOMDocument
|
||||
$dom->formatOutput = true;
|
||||
|
||||
// Save the output as XML
|
||||
$buffer = $dom->saveXML();
|
||||
|
||||
// Remove the first line which has the XML declaration
|
||||
return substr($buffer, strpos($buffer, "\n")+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
144
src/Canteen/HTML5/HTML5Error.php
Normal file
144
src/Canteen/HTML5/HTML5Error.php
Normal file
@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* Exceptions with using the HTML5 API.
|
||||
*
|
||||
* try
|
||||
* {
|
||||
* html('invalid', 'something');
|
||||
* }
|
||||
* catch(Canteen\HTML5\HTML5Error $e)
|
||||
* {
|
||||
* $e->getMessage();
|
||||
* }
|
||||
*
|
||||
* @class HTML5Error
|
||||
* @extends Exception
|
||||
* @constructor
|
||||
* @param {int} code The code of the error
|
||||
* @param {String} [data=''] Additional data to associate with this error
|
||||
*/
|
||||
class HTML5Error extends \Exception
|
||||
{
|
||||
/**
|
||||
* The database connection failed
|
||||
* @property {int} EMPTY_ATTRIBUTE_NAME
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const EMPTY_ATTRIBUTE_NAME = 500;
|
||||
|
||||
/**
|
||||
* The alias for a database is invalid
|
||||
* @property {int} EMPTY_ATTRIBUTE_VALUE
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const EMPTY_ATTRIBUTE_VALUE = 501;
|
||||
|
||||
/**
|
||||
* The database name we're trying to switch to is invalid
|
||||
* @property {int} INVALID_SETTER
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const INVALID_SETTER = 502;
|
||||
|
||||
/**
|
||||
* The mysql where trying to execute was a problem
|
||||
* @property {int} INVALID_GETTER
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const INVALID_GETTER = 503;
|
||||
|
||||
/**
|
||||
* The html tag name is invalid
|
||||
* @property {int} INVALID_TAG
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const INVALID_TAG = 504;
|
||||
|
||||
/**
|
||||
* When trying to create a node, the name is empty
|
||||
* @property {int} EMPTY_NODE_TAG
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const EMPTY_NODE_TAG = 505;
|
||||
|
||||
/**
|
||||
* The parent cannot be empty
|
||||
* @property {int} EMPTY_PARENT
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const EMPTY_PARENT = 506;
|
||||
|
||||
/**
|
||||
* THe addChildAt is out of bounds
|
||||
* @property {int} OUT_OF_BOUNDS
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const OUT_OF_BOUNDS = 507;
|
||||
|
||||
/**
|
||||
* The child node is empty
|
||||
* @property {int} EMPTY_CHILD
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const EMPTY_CHILD = 508;
|
||||
|
||||
/**
|
||||
* The node is not of instance type Node
|
||||
* @property {int} INVALID_NODE
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const INVALID_NODE = 509;
|
||||
|
||||
/**
|
||||
* Look-up for error messages
|
||||
* @property {Dictionary} messages
|
||||
* @private
|
||||
* @static
|
||||
*/
|
||||
private static $messages = array(
|
||||
self::EMPTY_ATTRIBUTE_NAME => 'Attribute names cannot be empty',
|
||||
self::EMPTY_ATTRIBUTE_VALUE => 'Attribute values cannot be empty',
|
||||
self::INVALID_SETTER => 'Cannot set the property because name is invalid',
|
||||
self::INVALID_GETTER => 'Cannot get the property because name is invalid',
|
||||
self::INVALID_TAG => 'Not a valid HTML5 tag name',
|
||||
self::EMPTY_NODE_TAG => 'Node tag is empty',
|
||||
self::EMPTY_PARENT => 'The parent cannot be empty',
|
||||
self::OUT_OF_BOUNDS => 'The index is out of bounds',
|
||||
self::EMPTY_CHILD => 'Cannot addChild an empty child node',
|
||||
self::INVALID_NODE => 'Child node must be a valid tag'
|
||||
);
|
||||
|
||||
/**
|
||||
* The label for an error that is unknown or unfound in messages
|
||||
* @property {String} UNKNOWN
|
||||
* @static
|
||||
* @final
|
||||
*/
|
||||
const UNKNOWN = 'Unknown error';
|
||||
|
||||
public function __construct($code, $data='')
|
||||
{
|
||||
$message = (isset(self::$messages[$code]) ? self::$messages[$code]: self::UNKNOWN)
|
||||
. ($data ? ' : ' . $data : $data);
|
||||
parent::__construct($message, $code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
346
src/Canteen/HTML5/Node.php
Normal file
346
src/Canteen/HTML5/Node.php
Normal file
@ -0,0 +1,346 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* A generic html tag with any children or closing tag. (e.g., img, br, hr).
|
||||
* Do not initiate this class directly, use the `html()` function:
|
||||
*
|
||||
* echo html('br');
|
||||
*
|
||||
* @class Node
|
||||
* @constructor
|
||||
* @param {String} [tag=null] The name of the tag
|
||||
* @param {Array|String} [attributes=null] The collection of tag attributes
|
||||
* @param {String} [validAttrs=null] The list of non-global valid attributes for the tag, comma separated
|
||||
*/
|
||||
class Node
|
||||
{
|
||||
/**
|
||||
* The string name of the tag
|
||||
* @property {String} _tag
|
||||
* @protected
|
||||
*/
|
||||
protected $_tag;
|
||||
|
||||
/**
|
||||
* The collection of Attributes objects
|
||||
* @property {Array} _attributes
|
||||
* @protected
|
||||
*/
|
||||
protected $_attributes;
|
||||
|
||||
/**
|
||||
* The parent node, if any
|
||||
* @property {NodeContainer} _parent
|
||||
* @protected
|
||||
*/
|
||||
protected $_parent;
|
||||
|
||||
/**
|
||||
* The collection of valid attributes names for given tag
|
||||
* @property {Array} _validAttrs
|
||||
* @protected
|
||||
*/
|
||||
protected $_validAttrs;
|
||||
|
||||
/**
|
||||
* The default valid attributes
|
||||
* @property {String} GLOBAL_ATTRS
|
||||
* @final
|
||||
* @static
|
||||
*/
|
||||
const GLOBAL_ATTRS = 'accesskey,class,contenteditable,contextmenu,dir,draggable,dropzone,hidden,id,lang,spellcheck,style,tabindex,title,translate';
|
||||
|
||||
public function __construct($tag = null, $attributes = null, $validAttrs = null)
|
||||
{
|
||||
if ($this->isEmpty($tag))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::EMPTY_NODE_TAG);
|
||||
}
|
||||
$this->_parent = null;
|
||||
$this->_tag = $tag;
|
||||
$this->_attributes = array();
|
||||
|
||||
$validAttrs = is_string($validAttrs) ? explode(',', $validAttrs) : $validAttrs;
|
||||
$this->_validAttrs = explode(',', self::GLOBAL_ATTRS);
|
||||
|
||||
if ($validAttrs !== null)
|
||||
{
|
||||
$this->_validAttrs = array_merge($this->_validAttrs, $validAttrs);
|
||||
}
|
||||
|
||||
if ($attributes !== null)
|
||||
{
|
||||
if (is_string($attributes))
|
||||
{
|
||||
$attributes = Attribute::shorthand($attributes);
|
||||
}
|
||||
|
||||
if (is_array($attributes))
|
||||
{
|
||||
$this->setAttributes($attributes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the parent node of this node, if
|
||||
* a parent exists. If no parent exists,
|
||||
* this function returns null.
|
||||
* @method getParent
|
||||
* @private
|
||||
* @return {NodeContainer} The parent node object
|
||||
*/
|
||||
private function getParent()
|
||||
{
|
||||
return $this->_parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the parent of this Node. Note that this
|
||||
* function is protected and can only be called by
|
||||
* classes that extend Node. The parent cannot
|
||||
* be null; this function will throw an Exception
|
||||
* if the parent node is empty.
|
||||
* @method setParent
|
||||
* @protected
|
||||
* @param {NodeContainer} [parent=null] The parent container node
|
||||
*/
|
||||
protected function setParent(NodeContainer $parent = null)
|
||||
{
|
||||
if ($this->isEmpty($parent))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::EMPTY_PARENT);
|
||||
}
|
||||
$this->_parent = $parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a name and value pair, sets an attribute on this Node.
|
||||
* The name and value cannot be empty; if so, this function
|
||||
* will throw an Exception. Note if the attribute already exists
|
||||
* and the caller wants to set an attribute of the same name,
|
||||
* this function will not create a new Attribute, but rather
|
||||
* update the value of the existing named attribute.
|
||||
*
|
||||
* @method setAttribute
|
||||
* @param {String} [name=null] The name of the attribute to add
|
||||
* @param {String} [value=null] The value of the attribute
|
||||
* @param {Node} The instance of this node
|
||||
*/
|
||||
public function setAttribute($name = null, $value = null)
|
||||
{
|
||||
if ($this->isEmpty($name))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::EMPTY_ATTRIBUTE_NAME);
|
||||
}
|
||||
foreach($this->_attributes as $i=>$attribute)
|
||||
{
|
||||
if ($attribute->name === $name)
|
||||
{
|
||||
if (!$this->isEmpty($value))
|
||||
$attribute->value = $value;
|
||||
else
|
||||
unset($this->_attributes[$i]);
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
$this->_attributes[] = new Attribute($name, $value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch and attribute by name from this Node. The attribute
|
||||
* name cannot be null; if so, this function will throw an
|
||||
* Exception.
|
||||
* @method getAttribute
|
||||
* @param {String} [name=null] The name of the attribute to fetch
|
||||
* @return {String} The attribute's value, if any or null
|
||||
*/
|
||||
protected function getAttribute($name = null)
|
||||
{
|
||||
$returnAttr = null;
|
||||
|
||||
if ($this->isEmpty($name))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::EMPTY_ATTRIBUTE_NAME);
|
||||
}
|
||||
foreach($this->_attributes as $attribute)
|
||||
{
|
||||
if ($attribute->name === $name)
|
||||
{
|
||||
$returnAttr = $attribute->value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $returnAttr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the list of all attributes.
|
||||
* @method setAttributes
|
||||
* @param {Dictionary} values An attributes array(name=>value, name=>value)
|
||||
* @return {Node} The instance of this Node
|
||||
*/
|
||||
public function setAttributes($values)
|
||||
{
|
||||
if (is_array($values))
|
||||
{
|
||||
foreach($values as $name=>$value)
|
||||
{
|
||||
$this->setAttribute($name, $value);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the a data-* HTML5 Attribute
|
||||
* @param {String} name The name of the data, for instance "id" is an attribute "data-id"
|
||||
* @param {String} value The value of the attribute
|
||||
* @return {Node} The instance of this Node
|
||||
*/
|
||||
public function setData($name, $value)
|
||||
{
|
||||
return $this->setAttribute('data-'.$name, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add this child to a node container at the end
|
||||
* @method appendTo
|
||||
* @param {NodeContainer} container The node container to add to
|
||||
* @return {Node} The instance of this Node
|
||||
*/
|
||||
public function appendTo(NodeContainer $container)
|
||||
{
|
||||
$container->addChild($this);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add this child to the beginning of a node container
|
||||
* @method prependTo
|
||||
* @param {NodeContainer} container The node container to prepend to to
|
||||
* @return {Node} The instance of this Node
|
||||
*/
|
||||
public function prependTo(NodeContainer $container)
|
||||
{
|
||||
$container->addChildAt($this, 0);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data-* HTML5 attribute value, if set
|
||||
* @method getData
|
||||
* @param {String} name The name of the data attribute
|
||||
* @return {String} The value of the data
|
||||
*/
|
||||
public function getData($name)
|
||||
{
|
||||
return $this->getAttribute('data-'.$name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write to HTML
|
||||
* @method __toString
|
||||
* @return {String} The string representation of this HTML node
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return $this->writeOpen();
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the writing the tag
|
||||
* @method writeOpen
|
||||
* @protected
|
||||
* @param {Boolean} [selfClose=true] If the tag is a self closing tag (e.g., br, img, hr)
|
||||
* @return {String} The buffer of HTML
|
||||
*/
|
||||
protected function writeOpen($selfClose=true)
|
||||
{
|
||||
$buffer = '<';
|
||||
$buffer .= $this->_tag;
|
||||
foreach($this->_attributes as $attribute)
|
||||
{
|
||||
$buffer .= (string)$attribute;
|
||||
}
|
||||
$buffer .= ($selfClose ? ' />' : '>');
|
||||
return $buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* General purpose getter to get attribute values
|
||||
* @method __get
|
||||
* @param {String} name The name of the property to set
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
if (in_array($name, $this->_validAttrs) || strpos($name, 'data-') === 0)
|
||||
{
|
||||
return $this->getAttribute($name);
|
||||
}
|
||||
return parent::__get($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* General purpose setter to set attribute values
|
||||
* @method __set
|
||||
* @param {String} name The name of the attribute
|
||||
* @param {String} value The value of the attribute
|
||||
*/
|
||||
public function __set($name, $value)
|
||||
{
|
||||
if (in_array($name, $this->_validAttrs) || strpos($name, 'data-') === 0)
|
||||
{
|
||||
return $this->setAttribute($name, $value);
|
||||
}
|
||||
return parent::__set($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* See if a property exists
|
||||
* @method __isset
|
||||
* @param {String} name The name of the attribute
|
||||
*/
|
||||
public function __isset($name)
|
||||
{
|
||||
return in_array($name, $this->_validAttrs) || parent::__isset($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a variable is really "empty". Code borrowed from PHP.net at
|
||||
* http://us3.php.net/manual/en/function.empty.php#90767 because we were
|
||||
* previously using empty() to see if a variable is empty or not. But
|
||||
* empty() dosen't work for attributes that have a value of "0", so we need
|
||||
* something more robust here.
|
||||
* <ul>
|
||||
* <li>an unset variable -> empty</li>
|
||||
* <li>null -> empty</li>
|
||||
* <li>0 -> NOT empty</li>
|
||||
* <li>"0" -> NOT empty</li>
|
||||
* <li>false -> empty</li>
|
||||
* <li>true -> NOT empty</li>
|
||||
* <li>'string value' -> NOT empty</li>
|
||||
* <li>" "(white space) -> empty</li>
|
||||
* <li>array()(empty array) -> empty</li>
|
||||
* </ul>
|
||||
* @method isEmpty
|
||||
* @protected
|
||||
* @param {mixed} var The variable to check for empty on
|
||||
*/
|
||||
protected function isEmpty($var)
|
||||
{
|
||||
return (!isset($var) || is_null($var) ||
|
||||
(!is_object($var) && is_string($var) && trim($var) == '' && !is_bool($var)) ||
|
||||
(is_bool($var) && $var === false) ||
|
||||
(is_array($var) && empty($var)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
238
src/Canteen/HTML5/NodeContainer.php
Normal file
238
src/Canteen/HTML5/NodeContainer.php
Normal file
@ -0,0 +1,238 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* Represents an HTML that that can contain other tags (e.g., br, p, div).
|
||||
* Do not initiate this class directly, use the `html()` function:
|
||||
*
|
||||
* $div = html('div');
|
||||
*
|
||||
* @class NodeContainer
|
||||
* @extends Node
|
||||
* @constructor
|
||||
* @param {String} [tag=null] The name of the tag element
|
||||
* @param {Node|Array} [children=null] The collection of children or single child
|
||||
* @param {String|Dictionary} [attributes=null] The tag attributes
|
||||
* @param {String} [validAttrs=null] Valid attributes specific to the HTML5 element, comma separated
|
||||
*/
|
||||
class NodeContainer extends Node
|
||||
{
|
||||
/**
|
||||
* The collection of children nodes
|
||||
* @property {Array} _children
|
||||
* @private
|
||||
*/
|
||||
private $_children;
|
||||
|
||||
public function __construct($tag = null, $children = null, $attributes = null, $validAttrs=null)
|
||||
{
|
||||
if ($this->isEmpty($tag))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::EMPTY_NODE_TAG);
|
||||
}
|
||||
parent::__construct($tag, $attributes, $validAttrs);
|
||||
|
||||
$this->_children = array();
|
||||
|
||||
if (!$this->isEmpty($children))
|
||||
{
|
||||
if (!is_array($children))
|
||||
{
|
||||
$children = array($children);
|
||||
}
|
||||
if (is_array($children))
|
||||
{
|
||||
foreach($children as $child)
|
||||
{
|
||||
$this->addChild($child);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add's a child to this NodeContainer. The child to add cannot be null.
|
||||
* @method addChild
|
||||
* @param {Node|String|Number|Boolean} childNode The child Node to add
|
||||
* @return {NodeContainer} The instance of this container
|
||||
*/
|
||||
public function addChild($childNode)
|
||||
{
|
||||
array_push($this->_children, $this->prepareChild($childNode));
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a child at a specific index
|
||||
* @method addChildAt
|
||||
* @param {Node|String|Number|Boolean} childNode The child Node to add
|
||||
* @param {int} index The index to add child at, 0 is top
|
||||
* @return {NodeContainer} The instance of this container
|
||||
*/
|
||||
public function addChildAt($childNode, $index)
|
||||
{
|
||||
if ($index < 0)
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::OUT_OF_BOUNDS, $index);
|
||||
}
|
||||
$childNode = $this->prepareChild($childNode);
|
||||
if ($index == 0)
|
||||
{
|
||||
array_unshift($this->_children, $childNode);
|
||||
}
|
||||
else if ($index > $len)
|
||||
{
|
||||
$this->addChild($childNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
array_splice($this->_children, $index , 0, array($childNode));
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Before adding a child, we should do some checking for basic types
|
||||
* and convert it into a more useable Node object.
|
||||
* @method prepareChild
|
||||
* @protected
|
||||
* @param {Node|String|Number|Boolean} childNode The child node to add
|
||||
* @return {Node} The child node
|
||||
*/
|
||||
protected function prepareChild($childNode)
|
||||
{
|
||||
if ($this->isEmpty($childNode))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::EMPTY_CHILD);
|
||||
}
|
||||
if (is_bool($childNode))
|
||||
{
|
||||
$childNode = new Text($childNode ? 'true' : 'false');
|
||||
}
|
||||
else if (is_string($childNode) || is_numeric($childNode))
|
||||
{
|
||||
$childNode = new Text($childNode);
|
||||
}
|
||||
if (!($childNode instanceof Node))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::INVALID_NODE);
|
||||
}
|
||||
$childNode->setParent($this);
|
||||
return $childNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the first instance of child from this.
|
||||
* Once the first instance of the child
|
||||
* is removed, this function will return. It returns
|
||||
* true if a child was removed and false if no child
|
||||
* was removed.
|
||||
* @method removeChild
|
||||
* @param {Node} [childNode=null] The node to remove
|
||||
* @return {Boolean} If successfully removed
|
||||
*/
|
||||
public function removeChild(Node $childNode = null)
|
||||
{
|
||||
if ($this->isEmpty($childNode))
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::EMPTY_CHILD);
|
||||
}
|
||||
|
||||
for($i = 0; $i < count($this->_children); $i++)
|
||||
{
|
||||
$child = $this->_children[$i];
|
||||
if ($child === $childNode)
|
||||
{
|
||||
unset($this->_children[$i]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a child as a specific index
|
||||
* @method removeChildAt
|
||||
* @param {int} index The index to remove child at
|
||||
* @return {NodeContainer} The instance of the node container
|
||||
*/
|
||||
public function removeChildAt($index)
|
||||
{
|
||||
if ($index >= $this->_children || $index < 0)
|
||||
{
|
||||
throw new HTML5Error(HTML5Error::OUT_OF_BOUNDS, $index);
|
||||
}
|
||||
array_splice($this->_children, $index, 1);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all children attached to this Node container
|
||||
* @method removeChildren
|
||||
* @return {NodeContainer} The instance of the node container
|
||||
*/
|
||||
public function removeChildren()
|
||||
{
|
||||
unset($this->_children);
|
||||
$this->_children = array();
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of all children attached to this Node container.
|
||||
* @method getChildren
|
||||
* @return {Array} The collection of Node objects
|
||||
*/
|
||||
public function getChildren()
|
||||
{
|
||||
return $this->_children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a child of this Node container at given
|
||||
* index. If no index is passed in, getChild()
|
||||
* will return the child at index zero (0).
|
||||
* @method getChildAt
|
||||
* @param {int} [index=0] The index to fetch child Node at
|
||||
* @return {Node} The child Node
|
||||
*/
|
||||
public function getChildAt($index = 0)
|
||||
{
|
||||
return $this->_children[$index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the writing of this container as HTML
|
||||
* @method writeClose
|
||||
* @protected
|
||||
* @return {String} The closing HTML tag element
|
||||
*/
|
||||
protected function writeClose()
|
||||
{
|
||||
return "</" . $this->_tag . ">";
|
||||
}
|
||||
|
||||
/**
|
||||
* Write to HTML
|
||||
* @method __toString
|
||||
* @return {String} The string representation of this HTML node
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
$buffer = $this->writeOpen(false);
|
||||
foreach($this->_children as $child)
|
||||
{
|
||||
$buffer .= $child->__toString();
|
||||
}
|
||||
$buffer .= $this->writeClose();
|
||||
|
||||
return $buffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
73
src/Canteen/HTML5/SimpleList.php
Normal file
73
src/Canteen/HTML5/SimpleList.php
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* Convenience class for creating an ordered or un-ordered list.
|
||||
*
|
||||
* $list = new Canteen\HTML5\SimpleList(
|
||||
* array(
|
||||
* html('b', 'first'),
|
||||
* 'second',
|
||||
* 'third',
|
||||
* array(
|
||||
* 'sub-third',
|
||||
* 'sub-forth'
|
||||
* )
|
||||
* )
|
||||
* );
|
||||
*
|
||||
* @class SimpleList
|
||||
* @extends NodeContainer
|
||||
* @constructor
|
||||
* @param {Array} [elements=null] The array of child Nodes, Strings, etc.
|
||||
* @param {String|Dictionary} [attributes=null] The optional attributes
|
||||
* @param {String} [type='ul'] The type of list, either ul or ol
|
||||
*/
|
||||
class SimpleList extends NodeContainer
|
||||
{
|
||||
public function __construct($elements=null, $attributes=null, $type='ul')
|
||||
{
|
||||
parent::__construct($type, null, $attributes,
|
||||
$type == 'ol' ? 'reversed,start,type' : null);
|
||||
|
||||
if ($elements != null)
|
||||
{
|
||||
assert(is_array($elements));
|
||||
|
||||
foreach($elements as $child)
|
||||
{
|
||||
$this->addChild($child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Override for the prepareChild method on NodeContainer which
|
||||
* wraps each elements in a list item
|
||||
* @method prepareChild
|
||||
* @protected
|
||||
* @param {Node|String|Number|Boolean|Array} childNode The child node to add, an array will get converted into another list elements.
|
||||
* @return {Node} The child node
|
||||
*/
|
||||
protected function prepareChild($childNode)
|
||||
{
|
||||
// Recursively create new lists for each array
|
||||
if (is_array($childNode))
|
||||
{
|
||||
$list = new SimpleList($childNode, null, $this->_tag);
|
||||
return $this->prepareChild($list);
|
||||
}
|
||||
else
|
||||
{
|
||||
$childNode = parent::prepareChild($childNode);
|
||||
return html('li', $childNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
86
src/Canteen/HTML5/Table.php
Normal file
86
src/Canteen/HTML5/Table.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* Convenience class for building a Table. Useful for display
|
||||
* rows of data from a database or another collection
|
||||
* of associative arrays.
|
||||
*
|
||||
* $table = new Canteen\HTML5\Table(
|
||||
* array(
|
||||
* array('id'=>1, 'first'=>'James', 'last'=>'Smith'),
|
||||
* array('id'=>2, 'first'=>'Mary', 'last'=>'Denver'),
|
||||
* array('id'=>3, 'first'=>'Charlie', 'last'=>'Rose')
|
||||
* ),
|
||||
* array('ID', 'First Name', 'Last Name')
|
||||
* );
|
||||
*
|
||||
* @class Table
|
||||
* @extends NodeContainer
|
||||
* @constructor
|
||||
* @param {Array} data The collection of Dictionary objects
|
||||
* @param {Array} [headers=null] An optional collection of header labels for each value
|
||||
* @param {String} [checkbox=null] If we should add a checkbox to each row, this is the name
|
||||
* of the attribute to use as a value. For instance `array('id'=>2)` is
|
||||
* `<input type="checkbox" name="id[]" value="2">`
|
||||
*/
|
||||
class Table extends NodeContainer
|
||||
{
|
||||
public function __construct($data, $headers=null, $checkbox=null)
|
||||
{
|
||||
parent::__construct('table', null, null, 'border');
|
||||
|
||||
if ($headers != null && is_array($headers))
|
||||
{
|
||||
$head = html('thead');
|
||||
$this->addChild($head);
|
||||
|
||||
$row = html('tr');
|
||||
|
||||
if ($checkbox != null)
|
||||
{
|
||||
$row->addChild(html('th', html('span', $checkbox)));
|
||||
}
|
||||
|
||||
foreach($headers as $header)
|
||||
{
|
||||
$row->addChild(html('th', $header));
|
||||
}
|
||||
$head->addChild($row);
|
||||
}
|
||||
|
||||
$body = html('tbody');
|
||||
|
||||
foreach($data as $d)
|
||||
{
|
||||
$row = html('tr');
|
||||
|
||||
if ($checkbox != null)
|
||||
{
|
||||
$td = html('td',
|
||||
html(
|
||||
'input',
|
||||
'type=checkbox name='.$checkbox.'[] value='.$d[$checkbox]
|
||||
),
|
||||
'class='.$checkbox
|
||||
);
|
||||
$row->addChild($td);
|
||||
}
|
||||
foreach($d as $name=>$value)
|
||||
{
|
||||
if ($name == $checkbox) continue;
|
||||
$td = html('td', $value, 'class='.$name);
|
||||
$row->addChild($td);
|
||||
}
|
||||
$body->addChild($row);
|
||||
}
|
||||
$this->addChild($body);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
39
src/Canteen/HTML5/Text.php
Normal file
39
src/Canteen/HTML5/Text.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module Canteen\HTML5
|
||||
*/
|
||||
namespace Canteen\HTML5
|
||||
{
|
||||
/**
|
||||
* Special Node representing plain text. Do not initiate this
|
||||
* class directly, it is created whenever a text is passed into
|
||||
* a container tag:
|
||||
*
|
||||
* echo html('p', 'Some Text Here');
|
||||
*
|
||||
* @class Text
|
||||
* @extends Node
|
||||
* @constructor
|
||||
* @param {String} text the plain text string
|
||||
*/
|
||||
class Text extends Node
|
||||
{
|
||||
public function __construct($text)
|
||||
{
|
||||
parent::__construct($text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write to HTML
|
||||
* @method __toString
|
||||
* @return {String} The string representation of this HTML node
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return $this->_tag;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
237
src/Canteen/HTML5/html.php
Normal file
237
src/Canteen/HTML5/html.php
Normal file
@ -0,0 +1,237 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @module global
|
||||
*/
|
||||
|
||||
/**
|
||||
* Auto load the assets in this library
|
||||
*/
|
||||
spl_autoload_register(function($name)
|
||||
{
|
||||
// Ignore class names not in the HTML5 namespace
|
||||
if (!preg_match('/^HTML5\\\/', $name)) return;
|
||||
|
||||
// Remove the HTML5 namespace
|
||||
$name = preg_replace('/^HTML5\\\/', '', $name);
|
||||
|
||||
// Convert the rest to directories
|
||||
$name = str_replace("\\", '/', $name);
|
||||
|
||||
// Include the class relative to here
|
||||
include __DIR__.'/'.$name.'.php';
|
||||
});
|
||||
|
||||
use Canteen\HTML5\NodeContainer;
|
||||
use Canteen\HTML5\Node;
|
||||
use Canteen\HTML5\Comment;
|
||||
use Canteen\HTML5\HTML5Error;
|
||||
use Canteen\HTML5\Text;
|
||||
use Canteen\HTML5\Attribute;
|
||||
|
||||
/**
|
||||
* This is the global function is the main entry for interacting with the HTML5 for PHP library.
|
||||
* using `html()` global function you can create HTML5 quickly and easily. For more
|
||||
* examples and instruction on how to use this library, please refer to the the
|
||||
* <a href="https://github.com/Canteen/CanteenHTML5">GitHub project</a>.
|
||||
* To install the library simply include `html.php`, this takes care of any autoloading that's needed
|
||||
* for the rest of the library.
|
||||
*
|
||||
* echo html('img src=home.jpg');
|
||||
* echo html('img', 'src=home.jpg');
|
||||
* echo html('a', array('href'=>'about.html'));
|
||||
*
|
||||
*
|
||||
*
|
||||
* @class html
|
||||
* @constructor
|
||||
* @param {String} tag The name of the tag as a string for example 'tr', 'table', can be followed
|
||||
* by CSS selector, e.g. 'a#backButton' or 'a.button'
|
||||
* @param {Dictionary|Node|String|Array} [childrenOrAttributes=null] If the tag is a NodeContainer, this can be an array
|
||||
* of attributes, another html node or some text. If the tag is a single node, this can
|
||||
* be an array or chain of attributes
|
||||
* @param {Dictionary|String} [attributes=null] The attributes list for container tags (e.g., 'class:selected')
|
||||
* @return {Node} Return the html node
|
||||
*/
|
||||
function html($tag, $childrenOrAttributes=null, $attributes=null)
|
||||
{
|
||||
// Get the tag ID from the tag string
|
||||
// for instance 'a.button rel=external', a.button is the tagId, the rest are the attributes
|
||||
$endPos = strpos(trim($tag), ' ');
|
||||
|
||||
// The tag attributes
|
||||
$tagAttributes = array();
|
||||
|
||||
// If the tag also has some attributes
|
||||
if ($endPos !== false)
|
||||
{
|
||||
$tagOriginal = $tag;
|
||||
$tag = substr($tag, 0, $endPos);
|
||||
$tagAttributes = Attribute::shorthand(substr($tagOriginal, $endPos + 1));
|
||||
}
|
||||
|
||||
// Match the tag name without the CSS selectors
|
||||
preg_match('/^([a-z1-6]{1,10})(.*)/', $tag, $tagParts);
|
||||
|
||||
// Valid class ane id names must begin with a -, _, or a-z letter
|
||||
preg_match_all('/(\.|\#)\-?[\_a-zA-Z]+[\_a-zA-Z0-9\-]*/', $tagParts[2], $selectors);
|
||||
|
||||
$s = false; // if the html is a single tag like <br>
|
||||
$tag = strtolower($tagParts[1]); // the name of the tag
|
||||
$a = ''; // Valid extra attributes for tags
|
||||
switch($tag)
|
||||
{
|
||||
case 'a': $a = 'href,hreflang,media,rel,target,type'; break;
|
||||
case 'abbr': break;
|
||||
case 'address': break;
|
||||
case 'area': $s = true; $a = 'alt,coords,href,hreflang,media,rel,shape,target,type'; break;
|
||||
case 'article': break;
|
||||
case 'aside': break;
|
||||
case 'audio': $a = 'autoplay,controls,loop,muted,preload,src'; break;
|
||||
case 'b': break;
|
||||
case 'base': $s = true; $a = 'href,target'; break;
|
||||
case 'bdo': break;
|
||||
case 'blockquote': $a = 'cite'; break;
|
||||
case 'body': break;
|
||||
case 'br': $s = true; break;
|
||||
case 'button': $a = 'autofocus,disabled,form,formaction,formenctype,formmethod,formnovalidate,formtarget,name,type,value'; break;
|
||||
case 'canvas': $a = 'height,width'; break;
|
||||
case 'caption': break;
|
||||
case 'cite': break;
|
||||
case 'code': break;
|
||||
case 'col': $s = true; break;
|
||||
case 'colgroup': $a = 'span'; break;
|
||||
case 'command': $s = true; $a = 'checked,disabled,icon,label,radiogroup,type'; break;
|
||||
case 'comment': return new Comment($childrenOrAttributes);
|
||||
case 'doctype': return '<!DOCTYPE html>';
|
||||
case 'datalist': break;
|
||||
case 'dd': break;
|
||||
case 'del': $a = 'cite,datetime'; break;
|
||||
case 'dfn': break;
|
||||
case 'div': break;
|
||||
case 'dl': break;
|
||||
case 'dt': break;
|
||||
case 'em': break;
|
||||
case 'embed': $s = true; $a = 'height,src,type,width'; break;
|
||||
case 'fieldset': $a = 'disabled,form_id,text'; break;
|
||||
case 'figcaption': break;
|
||||
case 'figure': break;
|
||||
case 'footer': break;
|
||||
case 'form': $a = 'accept,accept-charset,action,autocomplete,enctype,method,name,novalidate,target'; break;
|
||||
case 'h1': break;
|
||||
case 'h2': break;
|
||||
case 'h3': break;
|
||||
case 'h4': break;
|
||||
case 'h5': break;
|
||||
case 'h6': break;
|
||||
case 'head': break;
|
||||
case 'header': break;
|
||||
case 'hgroup': break;
|
||||
case 'hr': $s = true; break;
|
||||
case 'html': $a = 'manifest'; break;
|
||||
case 'img': $s = true; $a = 'alt,crossorigin,height,src,usemap,width'; break;
|
||||
case 'i': break;
|
||||
case 'input': $s = true; $a = 'accept,alt,autocomplete,autofocus,checked,disabled,form,formaction,formenctype,formmethod,formnovalidate,formtarget,height,list,max,maxlength,min,multiple,name,pattern,placeholder,readonly,required,size,src,step,type,value,width'; break;
|
||||
case 'keygen': $s = true; $a = 'autofocus,challenge,disabled,form,keytype,name'; break;
|
||||
case 'label': $a = 'for,form'; break;
|
||||
case 'legend': break;
|
||||
case 'li': break;
|
||||
case 'link': $s = true; $a = 'href,hreflang,media,rel,sizes,type'; break;
|
||||
case 'map': $a = 'name'; break;
|
||||
case 'mark': break;
|
||||
case 'menu': break;
|
||||
case 'meta': $s = true; $a = 'charset,content,http-equiv,name'; break;
|
||||
case 'meter': $a = 'form,heigh,low,max,min,optimum,value'; break;
|
||||
case 'nav': break;
|
||||
case 'noscript': break;
|
||||
case 'object': $a = 'data,form,height,name,type,usemap,width'; break;
|
||||
case 'ol': $a = 'reversed,start,type'; break;
|
||||
case 'optgroup': $a = 'disabled,label'; break;
|
||||
case 'option': $a = 'disabled,label,selected,value'; break;
|
||||
case 'output': $a = 'for,form,name'; break;
|
||||
case 'p': break;
|
||||
case 'param': $s = true; $a = 'name,value'; break;
|
||||
case 'pre': break;
|
||||
case 'progress': $a = 'max,value'; break;
|
||||
case 'q': $a = 'cite'; break;
|
||||
case 'rp': break;
|
||||
case 'rt': break;
|
||||
case 'ruby': break;
|
||||
case 's': break;
|
||||
case 'sample': break;
|
||||
case 'script': $a = 'async,charset,defer,src,type'; break;
|
||||
case 'section': break;
|
||||
case 'select': $a = 'autofocus,disabled,form,multiple,name,required,size'; break;
|
||||
case 'small': break;
|
||||
case 'source': $s = true; $a = 'media,src,type'; break;
|
||||
case 'span': break;
|
||||
case 'strong': break;
|
||||
case 'style': $a = 'media,scoped,type'; break;
|
||||
case 'sub': break;
|
||||
case 'table': $a = 'border'; break;
|
||||
case 'tbody': break;
|
||||
case 'td': $a = 'colspan,headers,scope'; break;
|
||||
case 'text': return new Text($childrenOrAttributes);
|
||||
case 'textarea': $a = 'autofocus,cols,disabled,form,maxlength,name,placeholder,readonly,required,row,wrap'; break;
|
||||
case 'tfoot': break;
|
||||
case 'th': $a = 'colspan,headers,rowspan,scope'; break;
|
||||
case 'thead': break;
|
||||
case 'time': $a = 'datetime'; break;
|
||||
case 'title': break;
|
||||
case 'tr': break;
|
||||
case 'track': $s = true; $a = 'default,kind,label,src,srclang'; break;
|
||||
case 'u': break;
|
||||
case 'ul': break;
|
||||
case 'var': break;
|
||||
case 'video': $a = 'autoplay,controls,height,loop,muted,poster,preload,src,width'; break;
|
||||
case 'wbr': $s = true; break;
|
||||
default:
|
||||
throw new HTML5Error(HTML5Error::INVALID_TAG, $tag);
|
||||
break;
|
||||
}
|
||||
|
||||
// Create the attributes collection, either string or array
|
||||
$attributes = $s ? $childrenOrAttributes : $attributes;
|
||||
|
||||
// If there are attributes and they are in a string format
|
||||
// convert to an attributes array
|
||||
if ($attributes !== null && is_string($attributes))
|
||||
{
|
||||
$attributes = Attribute::shorthand($attributes);
|
||||
}
|
||||
|
||||
// Combine the attributes and the tags
|
||||
if (is_array($attributes))
|
||||
{
|
||||
$attributes = array_merge($tagAttributes, $attributes);
|
||||
}
|
||||
// Or just add any tag attributes
|
||||
else if (count($tagAttributes))
|
||||
{
|
||||
$attributes = $tagAttributes;
|
||||
}
|
||||
|
||||
// Create the node or container
|
||||
$node = ($s) ?
|
||||
new Node($tag, $attributes, $a) :
|
||||
new NodeContainer($tag, $childrenOrAttributes, $attributes, $a);
|
||||
|
||||
// Take the selectors convert them into id or class
|
||||
foreach($selectors[0] as $selector)
|
||||
{
|
||||
switch($selector[0])
|
||||
{
|
||||
case '#' :
|
||||
$node->id = substr($selector, 1);
|
||||
break;
|
||||
case '.' :
|
||||
if ($node->class) $node->class .= ' ';
|
||||
$node->class .= substr($selector, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
?>
|
Loading…
Reference in New Issue
Block a user