function layout2columns($module) { return dom('table')->append(array_map(function ($field) { $domLabel = $field->config['display:title']; if (is_string($domLabel)) { $domLabel = dom('label', $domLabel); } return dom('tr', dom('th', $domLabel), dom('td', dom('input'))); }, $module->fields)); }
static function render($dom) { if ($dom instanceof widget) { $dom = $dom->get('dom'); } $str = "<!doctype html>\n"; $scripts = array(); foreach ($dom->requiredJsFiles() as $C) { $scripts[] = dom('script')->attr('src', Dom::$jsFiles[$C]); } $str .= dom('html', dom('head', dom('title', 'tinyTinyFw'), $scripts), dom('body')->css(array('color' => 'hsl(0,0%,40%)', 'overflow-y' => 'scroll', 'background' => 'hsl(180,10%,90%)', 'font-family' => 'tahoma'))->append($dom)); return $str; }
return str::equals('close', $self->get('type')); }); $template->let('normalBg', function ($self) { return $self->get('type:CLOSE') ? 'hsl(0,30%,40%)' : 'hsl(200,30%,35%)'; }); $template->let('normalBorder', function ($self) { $normalBorder = $self->get('type:CLOSE') ? 'solid 2px hsl(200,40%,80%)' : 'solid 2px hsl(200,40%,35%)'; }); $template->let('hoverBorder', 'solid 2px hsl(50,80%,80%)'); $template->let('dom', function ($self) { $dom = new dom('a'); $dom->jsCall('toggler', array('states' => $self->get('states'), 'currentIndex' => 0)); $dom->attr('data-widget', 'toggleButton'); $dom->attr('onmouseover', "this.style.border = '{$hoverBorder}'; this.style.letterSpacing = '1px';"); $dom->attr('onmouseout', "this.style.border = '{$normalBorder}'; this.style.letterSpacing = '2px';"); $dom->css(array('width' => $self->get('width') . 'em', 'cursor' => "default", '-webkit-border-radius' => $self->get('type:CLOSE') ? '0 8px 0 20px' : '4px 4px 0 0', 'display' => 'inline-block', 'vertical-align' => 'text-top', 'letter-spacing' => '2px', 'text-align' => 'center', 'font-size' => $self->get('fontSize') . 'px', 'padding' => $self->get('type:CLOSE') ? '2px 0px 4px 4px' : '2px 0', 'border' => $self->get('normalBorder'), 'color' => $self->get('type:CLOSE') ? 'hsl(200,40%,85%)' : 'hsl(200,40%,80%)', 'margin' => $self->get('type:CLOSE') ? '1px' : '0 8px', 'background' => $self->get('normalBg'))); return $dom; }); return $template; }); $widgets->let('window', function () { $template = new widget(); $template->expect('content'); $template->let('dom', function ($self) { $dom = new dom('div'); $dom->css(array('position' => 'relative', '-webkit-border-radius' => '8px', 'border-bottom' => 'solid 2px hsl(200,35%,55%)', 'background' => 'hsl(200,35%,75%)', 'padding' => '0', 'overflow' => 'hidden')); $dom->append(dom('div')->css(array('float' => 'right', 'margin' => '0', 'padding' => '0'))->append(widget('toggleButton')->let('states', array('Close'))->let('type', 'close')), dom('div')->css(array('position' => 'absolute', 'right' => '0', 'bottom' => '0', 'margin' => '0', 'padding' => '0'))->append(widget('toggleButton')->let('states', array('Fullscreen', 'Inline'))), dom('div')->css(array('padding' => '1em', 'padding-bottom' => '10em'))->append($self->get('content'))); return $dom; }); return $template; });
<?php require_once dirname(__FILE__) . '/../../_lib/tinyTinyFw.php'; echo dom('table')->css(array('font-family' => 'Verdana'))->append(map(range(0, 10), function ($i) { $begin = 33; $perRow = 20; $x = $begin + $i * $perRow; return dom('tr')->append(dom('th', $x))->append(map(range($x, $x + $perRow), function ($j) { // TODO: Find out how to get unicode characters to show up. return dom('td', chr($j)); })); }));
function get_text($html_dom, $length) { $html_dom = "<div class='get_text_box'>" . $html_dom . "</div>"; $el = array(array('el' => '.get_text_box', 'attr' => 'text', 'name' => 'content')); $arr = dom($html_dom, $el); $content = $arr[0]['content']; if ($length && $length > 0) { $content = cutstr($content, $length, ''); } return $content; }
<?php require_once dirname(__FILE__) . '/../_lib/tinyTinyFw.php'; require_once dirname(__FILE__) . '/properties.php'; $modules->let('user:join', function () { $module = new module(); $module->let('fields', fields('username', 'email')); // Called when there is no form submission. $module->let('whenIdle', function ($self) { return widget('window')->let('content', dom('div', layout2columns($self->get('fields')), dom('pre')->css(array('border' => 'solid 1px gray', 'padding' => '0.5em'))->append('$_REQUEST = ' . var_export($_REQUEST, true)))); }); $module->let('whenError', function ($self) { return widget('message:error', "Sorry, there has been an error."); }); // Called after form submission and input validation is ok. $module->let('whenOk', function ($self, $values) { // $values['username']->property; // Each $value has already gone through // validators defined by the value's underlying property -- see properties.php. $user = user::Create($values); // Can return either a layout function or dom. return dom('div')->append(dom('message:ok', "Thank you."), dom('message:info', "Don't forget to join a club.")); }); return $module; });