corn-wand/corn-wand

PHP functional library for generating HTML

0.5.1 2014-07-02 06:59 UTC

This package is not auto-updated.

Last update: 2024-03-27 09:43:47 UTC


README

Corn Wand is a PHP functional library for generating HTML.

Documentation

All functions have a DocBlock. So you can read the source code or generate documentation with phpDocumentor.

Requirements

PHP 5.3 or higher

Source Code

The project is on GitHub. The actual source code is in a single file.

Tests

All tests are in the test directory. Each test is a standalone PHP script. There is a test for each function; the name of the test script is the function name. Some tag functions don't have tests.

Installation

Install using composer:

{
    "require": {
        "corn-wand/corn-wand": "0.5.1",
    }
}

or you can install manually:

require 'corn-wand.php';

Tag Functions

There's a function for each HTML tag. Here's the list of supported tags:

a, abbr, address, area, article, aside, audio, b, base, bdi, bdo, blockquote, body, br, button, canvas, caption, cite, code, col, colgroup, content, data, datalist, dd, decorator, del, details, dfn, div, dl, dt, element, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, kbd, keygen, label, legend, li, link, main, map, mark, math, menu, menuitem, meta, meter, nav, noscript, object, ol, optgroup, option, output, p, param, pre, progress, q, rp, rt, ruby, s, samp, script, section, select, shadow, small, source, span, strong, style, sub, summary, sup, svg, table, tbody, td, template, textarea, tfoot, th, thead, time, title, tr, track, u, ul, var, video, wbr.

All tag function names are the name of the tag except for var. Use _var() instead. All the tag functions work the same way: if the first agrument is an array then it is the tag attributes. All other arguments are concatenated together to form the tag content. Examples:

echo c\br(); //<br/>
echo c\html(); //<html/>
echo c\p(); //<p/>
echo c\div('hello'); //<div>hello</div>
echo c\div(array('id' => 'hi')); //<div id="hi"/>
echo c\div(
    array('id' => 'hi'),
    'hello');

//<div id="hi">hello</div>
echo c\p('red ', 'yellow ', 'blue');

//<p>red yellow blue</p>
echo c\p(
    array('id' => 'colors'),
    'red ',
    'yellow ',
    'blue');

//<p id="colors">red yellow blue</p>
echo c\input(array(
    'id' => 'agree',
    'type' => 'checkbox',
    'checked'));

//<input id="agree" type="checkbox" checked/>
echo c\div(c\span('ok Dad'));

/*
<div>
    <span>ok Dad</span>
</div>
*/
echo 
c\ul(
    c\li('item 1'),
    c\li('item 2'),
    c\li('item 3'));

/*
<ul>
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
</ul>
*/
echo
c\html(
    array('lang' => 'en'),
    c\head(
        c\title('My Page')),
    c\body(
        c\h1('My Page')));

/*
<html lang="en">
    <head>
        <title>My Page</title>
    </head>
    <body>
        <h1>My Page</h1>
    </body>
</html>
*/

More Functions

There are many more functions. These functions return more intricate HTML.

html5()

html5() works like html() but has the HTML5 doctype in front:

echo c\html5(c\body('hi'));

/*
<!doctype html>
<html>
    <body>hi</body>
</html>
*/

hlink()

Get a hyperlink:

echo c\hlink('http://github.com');

//<a href="http://github.com">http://github.com</a>
echo c\hlink('http://github.com', 'GitHub');

//<a href="http://github.com">GitHub</a>

css() and js()

css() and js() work similarly:

echo c\css('one.css', 'two.css', 'three.css');

/*
<link rel="stylesheet" href="one.css"/>
<link rel="stylesheet" href="two.css"/>
<link rel="stylesheet" href="three.css"/>
*/
echo c\js('menu.js', 'game.js', 'slide-show.js');

/*
<script src="menu.js"></script>
<script src="game.js"></script>
<script src="slide-show.js"></script>
*/

You can use an array for these if you like:

$css = array('all.css', 'header.css', 'nav.css');
echo c\css($css);

/*
<link rel="stylesheet" href="all.css"/>
<link rel="stylesheet" href="header.css"/>
<link rel="stylesheet" href="nav.css"/>
*/

ulist() and olist()

Get <ul> or <ol> with items:

echo c\ulist('seven', 'six', 'five');

/*
<ul>
    <li>seven</li>
    <li>six</li>
    <li>five</li>
</ul>
*/
echo c\olist(
    'salsa',
    'bbq',
    'cheese',
    array('type' => 'i'));

/*
<ol type="i">
    <li>salsa</li>
    <li>bbq</li>
    <li>cheese</li>
</ol>
*/

You can use an array for the items:

$items = array('salsa', 'bbq', 'cheese');
echo c\olist(
    $items,
    array('type' => 'i'));

/*
<ol type="i">
    <li>salsa</li>
    <li>bbq</li>
    <li>cheese</li>
</ol>
*/

Use a nested array to set item attributes:

echo c\olist(array(
    'salsa',
    'bbq' => array('id' => 'mid'),
    'cheese'));

/*
<ol>
    <li>salsa</li>
    <li id="mid">bbq</li>
    <li>cheese</li>
</ol>
*/

focus()

Call JavaScript focus() on a CSS id:

echo c\focus('username');

//<script>document.getElementById('username').focus();</script>

linput() and dlinput()

linput() is for a label and an input:

echo c\linput(
    'First Name',
    array('value' => 'Fred'));

/*
<label>First Name</label>
<input value="Fred"/>
*/

Setting id will set other attributes:

echo c\linput(
    'First Name',
    array(
        'value' => 'Fred',
        'id' => 'first'));

/*
<label id="l_first" for="first">First Name</label>
<input value="Fred" id="first" name="first"/>
*/

dlinput() is the same but with a container div:

echo c\dlinput(
    'Email',
    array('id' => 'email'));

/*
<div id="c_email">
    <label id="l_email" for="email">Email</label>
    <input id="email" name="email"/>
</div>
*/

ltextarea() and dltextarea()

ltextarea() is for a label and a textarea:

echo c\ltextarea(
    'Your Message',
    array('name' => 'message'));

/*
<label>Your Message</label>
<textarea name="message"></textarea>
*/

Setting id will set other attributes:

echo c\ltextarea(
    'Your Message',
    array('id' => 'message'),
    'Hello there');

/*
<label id="l_message" for="message">Your Message</label>
<textarea id="message" name="message">Hello there</textarea>
*/

dltextarea() is the same but with a container div:

echo c\dltextarea(
    'Your Message',
    array('id' => 'message'));

/*
<div id="c_message">
    <label id="l_message" for="message">Your Message</label>
    <textarea id="message" name="message"></textarea>
</div>
*/

drop_down(), ldrop_down() and dldrop_down()

drop_down() is for a select tag:

echo c\drop_down(
    array(
        'small',
        'medium',
        'large'),
    array('id' => 'size'));

/*
<select id="size" name="size">
    <option value="0">small</option>
    <option value="1">medium</option>
    <option value="2">large</option>
</select>
*/

ldrop_down() adds a label:

echo c\ldrop_down(
    'Season',
    array(
        'f' => 'Fall',
        'w' => 'Winter',
        's' => 'Spring'),
    array('id' => 'season'));

/*
<label id="l_season" for="season">Season</label>
<select id="season" name="season">
    <option value="f">Fall</option>
    <option value="w">Winter</option>
    <option value="s">Spring</option>
</select>
*/

dldrop_down() adds a div and a label:

echo c\dldrop_down(
    'Sports',
    array(
        1 => 'soccer',
        'basketball',
        'baseball',
        'rugby'),
    array(
        'id' => 'sports',
        'multiple'),
    array(1, 2));

/*
<div id="c_sports">
    <label id="l_sports" for="sports">Sports</label>
    <select id="sports" multiple name="sports[]">
        <option value="1" selected>soccer</option>
        <option value="2" selected>basketball</option>
        <option value="3">baseball</option>
        <option value="4">rugby</option>
    </select>
</div>
*/

checkboxes(), scheckboxes() and dscheckboxes()

checkboxes() is for a group of checkboxes. Each checkbox renders using dlinput():

echo c\checkboxes(
    'color',
    array(
        'beige',
        'cyan',
        'puce'));

/*
<div id="c_color0">
    <label id="l_color0" for="color0">beige</label>
    <input id="color0" name="color[]" type="checkbox" value="0"/>
</div>
<div id="c_color1">
    <label id="l_color1" for="color1">cyan</label>
    <input id="color1" name="color[]" type="checkbox" value="1"/>
</div>
<div id="c_color2">
    <label id="l_color2" for="color2">puce</label>
    <input id="color2" name="color[]" type="checkbox" value="2"/>
</div>
*/

scheckboxes() adds a title span:

echo c\scheckboxes(
    'Pets',
    'pet',
    array(
        'dog' => 'Dog',
        'cat' => 'Cat',
        'fish' => 'Fish'));

/*
<span id="t_pet">Pets</span>
<div id="c_pet0">
    <label id="l_pet0" for="pet0">Dog</label>
    <input id="pet0" name="pet[]" type="checkbox" value="dog"/>
</div>
<div id="c_pet1">
    <label id="l_pet1" for="pet1">Cat</label>
    <input id="pet1" name="pet[]" type="checkbox" value="cat"/>
</div>
<div id="c_pet2">
    <label id="l_pet2" for="pet2">Fish</label>
    <input id="pet2" name="pet[]" type="checkbox" value="fish"/>
</div>
*/

dscheckboxes() adds a container div and a title span:

echo c\dscheckboxes(
    'Drinks',
    'drink',
    array(
        'water',
        'OJ',
        'milk'));

/*
<div id="c_drink">
    <span id="t_drink">Drinks</span>
    <div id="c_drink0">
        <label id="l_drink0" for="drink0">water</label>
        <input id="drink0" name="drink[]" type="checkbox" value="0"/>
    </div>
    <div id="c_drink1">
        <label id="l_drink1" for="drink1">OJ</label>
        <input id="drink1" name="drink[]" type="checkbox" value="1"/>
    </div>
    <div id="c_drink2">
        <label id="l_drink2" for="drink2">milk</label>
        <input id="drink2" name="drink[]" type="checkbox" value="2"/>
    </div>
</div>
*/

radio_buttons(), sradio_buttons() and dsradio_buttons()

radio_buttons() is for a group of radio buttons. Each radio button renders using dlinput():

echo c\radio_buttons(
    'bed',
    array(
        'single',
        'queen',
        'king'));

/*
<div id="c_bed0">
    <label id="l_bed0" for="bed0">single</label>
    <input id="bed0" name="bed" type="radio" value="0"/>
</div>
<div id="c_bed1">
    <label id="l_bed1" for="bed1">queen</label>
    <input id="bed1" name="bed" type="radio" value="1"/>
</div>
<div id="c_bed2">
    <label id="l_bed2" for="bed2">king</label>
    <input id="bed2" name="bed" type="radio" value="2"/>
</div>
*/

sradio_buttons() adds a title span:

echo c\sradio_buttons(
    'City',
    'city',
    array(
        'nyc' => 'New York',
        'queens' => 'Queens',
        'flagstaff' => 'Flagstaff'));

/*
<span id="t_city">City</span>
<div id="c_city0">
    <label id="l_city0" for="city0">New York</label>
    <input id="city0" name="city" type="radio" value="nyc"/>
</div>
<div id="c_city1">
    <label id="l_city1" for="city1">Queens</label>
    <input id="city1" name="city" type="radio" value="queens"/>
</div>
<div id="c_city2">
    <label id="l_city2" for="city2">Flagstaff</label>
    <input id="city2" name="city" type="radio" value="flagstaff"/>
</div>
*/

dsradio_buttons() adds a container div and a title span:

echo c\dsradio_buttons(
    'Planet',
    'planet',
    array(
        'Venus',
        'Mars',
        'Saturn'),
    0);

/*
<div id="c_planet">
    <span id="t_planet">Planet</span>
    <div id="c_planet0">
        <label id="l_planet0" for="planet0">Venus</label>
        <input id="planet0" name="planet" type="radio" value="0" checked/>
    </div>
    <div id="c_planet1">
        <label id="l_planet1" for="planet1">Mars</label>
        <input id="planet1" name="planet" type="radio" value="1"/>
    </div>
    <div id="c_planet2">
        <label id="l_planet2" for="planet2">Saturn</label>
        <input id="planet2" name="planet" type="radio" value="2"/>
    </div>
</div>
*/

LICENSE

MIT http://ryf.mit-license.org/