openrat-cms

# OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs

commit b8f609675d8e5de33412db89fcca3ec80c35c0b0
parent 4fcc499b123b60ce0c9a6271538a7a58b7e1b23c
Author: Jan Dankert <develop@jandankert.de>
Date:   Sat, 22 Feb 2020 00:46:59 +0100

Refactoring: Renaming template-engine to template_engine because '-' is no valid namespace char.

Diffstat:
dev-helper/create-output-files.sh | 6+++---
dev-helper/template-watcher.sh | 4++--
dev-helper/update.html | 4++--
modules/cms-ui/action/IndexAction.class.php | 4++--
modules/template-engine/CMSElement.class.php | 20--------------------
modules/template-engine/ConditionalAttribute.php | 32--------------------------------
modules/template-engine/Element.class.php | 217-------------------------------------------------------------------------------
modules/template-engine/EmptyElement.class.php | 23-----------------------
modules/template-engine/HtmlElement.class.php | 65-----------------------------------------------------------------
modules/template-engine/PHPBlockElement.class.php | 173-------------------------------------------------------------------------------
modules/template-engine/SimpleAttribute.php | 31-------------------------------
modules/template-engine/TemplateCompiler.php | 57---------------------------------------------------------
modules/template-engine/TemplateEngineInfo.class.php | 49-------------------------------------------------
modules/template-engine/components/XSDGenerator.php | 77-----------------------------------------------------------------------------
modules/template-engine/components/components.ini | 40----------------------------------------
modules/template-engine/components/html/Component.class.php | 81-------------------------------------------------------------------------------
modules/template-engine/components/html/FieldComponent.class.php | 14--------------
modules/template-engine/components/html/HtmlComponent.class.php | 10----------
modules/template-engine/components/html/NativeHtmlComponent.class.php | 21---------------------
modules/template-engine/components/html/button/Button.class.php | 63---------------------------------------------------------------
modules/template-engine/components/html/checkbox/Checkbox.class.php | 52----------------------------------------------------
modules/template-engine/components/html/column/Column.class.php | 55-------------------------------------------------------
modules/template-engine/components/html/column/column.js | 9---------
modules/template-engine/components/html/column/column.min.js | 2--
modules/template-engine/components/html/date/Date.class.php | 20--------------------
modules/template-engine/components/html/date/component-date.php | 75---------------------------------------------------------------------------
modules/template-engine/components/html/dummy/Dummy.class.php | 14--------------
modules/template-engine/components/html/editor/Editor.class.php | 63---------------------------------------------------------------
modules/template-engine/components/html/editor/editor.css | 33---------------------------------
modules/template-engine/components/html/editor/editor.js | 252-------------------------------------------------------------------------------
modules/template-engine/components/html/editor/editor.less | 45---------------------------------------------
modules/template-engine/components/html/editor/editor.min.css | 2--
modules/template-engine/components/html/editor/editor.min.js | 2--
modules/template-engine/components/html/else/Else.class.php | 17-----------------
modules/template-engine/components/html/focus/Focus.class.php | 15---------------
modules/template-engine/components/html/form/Form.class.php | 171-------------------------------------------------------------------------------
modules/template-engine/components/html/group/Group.class.php | 62--------------------------------------------------------------
modules/template-engine/components/html/group/group.css | 13-------------
modules/template-engine/components/html/group/group.js | 5-----
modules/template-engine/components/html/group/group.less | 22----------------------
modules/template-engine/components/html/group/group.min.css | 2--
modules/template-engine/components/html/group/group.min.js | 2--
modules/template-engine/components/html/header/Header.class.php | 38--------------------------------------
modules/template-engine/components/html/hidden/Hidden.class.php | 28----------------------------
modules/template-engine/components/html/if/If.class.php | 52----------------------------------------------------
modules/template-engine/components/html/image/Image.class.php | 107-------------------------------------------------------------------------------
modules/template-engine/components/html/image/image.css | 3---
modules/template-engine/components/html/image/image.js | 6------
modules/template-engine/components/html/image/image.less | 4----
modules/template-engine/components/html/image/image.min.css | 0
modules/template-engine/components/html/image/image.min.js | 2--
modules/template-engine/components/html/include/Include.class.php | 15---------------
modules/template-engine/components/html/input/Input.class.php | 91-------------------------------------------------------------------------------
modules/template-engine/components/html/inputarea/Inputarea.class.php | 74--------------------------------------------------------------------------
modules/template-engine/components/html/insert/Insert.class.php | 39---------------------------------------
modules/template-engine/components/html/label/Label.class.php | 43-------------------------------------------
modules/template-engine/components/html/link/Link.class.php | 189-------------------------------------------------------------------------------
modules/template-engine/components/html/link/link.js | 8--------
modules/template-engine/components/html/link/link.min.js | 2--
modules/template-engine/components/html/list/List.class.php | 30------------------------------
modules/template-engine/components/html/logo/Logo.class.php | 34----------------------------------
modules/template-engine/components/html/newline/Newline.class.php | 19-------------------
modules/template-engine/components/html/output/Output.class.php | 15---------------
modules/template-engine/components/html/page/Page.class.php | 15---------------
modules/template-engine/components/html/part/Part.class.php | 26--------------------------
modules/template-engine/components/html/password/Password.class.php | 40----------------------------------------
modules/template-engine/components/html/qrcode/Qrcode.class.php | 28----------------------------
modules/template-engine/components/html/qrcode/qrcode.js | 29-----------------------------
modules/template-engine/components/html/qrcode/qrcode.min.js | 2--
modules/template-engine/components/html/radio/Radio.class.php | 62--------------------------------------------------------------
modules/template-engine/components/html/radiobox/Radiobox.class.php | 57---------------------------------------------------------
modules/template-engine/components/html/row/Row.class.php | 26--------------------------
modules/template-engine/components/html/selectbox/Selectbox.class.php | 110-------------------------------------------------------------------------------
modules/template-engine/components/html/selector/Selector.class.php | 48------------------------------------------------
modules/template-engine/components/html/set/Set.class.php | 33---------------------------------
modules/template-engine/components/html/table/Table.class.php | 45---------------------------------------------
modules/template-engine/components/html/table/table.css | 176-------------------------------------------------------------------------------
modules/template-engine/components/html/table/table.js | 88-------------------------------------------------------------------------------
modules/template-engine/components/html/table/table.less | 222-------------------------------------------------------------------------------
modules/template-engine/components/html/table/table.min.css | 2--
modules/template-engine/components/html/table/table.min.js | 2--
modules/template-engine/components/html/text/Text.class.php | 112-------------------------------------------------------------------------------
modules/template-engine/components/html/tree/Tree.class.php | 22----------------------
modules/template-engine/components/html/tree/component-tree.php | 34----------------------------------
modules/template-engine/components/html/tree/tree.js | 8--------
modules/template-engine/components/html/tree/tree.min.js | 2--
modules/template-engine/components/html/upload/Upload.class.php | 35-----------------------------------
modules/template-engine/components/html/upload/upload.css | 7-------
modules/template-engine/components/html/upload/upload.js | 87-------------------------------------------------------------------------------
modules/template-engine/components/html/upload/upload.less | 7-------
modules/template-engine/components/html/upload/upload.min.css | 2--
modules/template-engine/components/html/upload/upload.min.js | 2--
modules/template-engine/components/html/user/User.class.php | 20--------------------
modules/template-engine/components/html/user/component-user.php | 17-----------------
modules/template-engine/components/html/window/Window.class.php | 18------------------
modules/template-engine/components/template.xsd | 1977-------------------------------------------------------------------------------
modules/template-engine/engine/TemplateEngine.class.php | 273-------------------------------------------------------------------------------
modules/template-engine/require.php | 11-----------
modules/template_engine/CMSElement.class.php | 20++++++++++++++++++++
modules/template_engine/ConditionalAttribute.php | 32++++++++++++++++++++++++++++++++
modules/template_engine/Element.class.php | 217+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/EmptyElement.class.php | 23+++++++++++++++++++++++
modules/template_engine/HtmlElement.class.php | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/PHPBlockElement.class.php | 173+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/SimpleAttribute.php | 31+++++++++++++++++++++++++++++++
modules/template_engine/TemplateCompiler.php | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/TemplateEngineInfo.class.php | 49+++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/XSDGenerator.php | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/components.ini | 40++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/Component.class.php | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/FieldComponent.class.php | 14++++++++++++++
modules/template_engine/components/html/HtmlComponent.class.php | 10++++++++++
modules/template_engine/components/html/NativeHtmlComponent.class.php | 21+++++++++++++++++++++
modules/template_engine/components/html/button/Button.class.php | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/checkbox/Checkbox.class.php | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/column/Column.class.php | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/column/column.js | 9+++++++++
modules/template_engine/components/html/column/column.min.js | 2++
modules/template_engine/components/html/date/Date.class.php | 20++++++++++++++++++++
modules/template_engine/components/html/date/component-date.php | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/dummy/Dummy.class.php | 14++++++++++++++
modules/template_engine/components/html/editor/Editor.class.php | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/editor/editor.css | 33+++++++++++++++++++++++++++++++++
modules/template_engine/components/html/editor/editor.js | 252+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/editor/editor.less | 45+++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/editor/editor.min.css | 2++
modules/template_engine/components/html/editor/editor.min.js | 2++
modules/template_engine/components/html/else/Else.class.php | 17+++++++++++++++++
modules/template_engine/components/html/focus/Focus.class.php | 15+++++++++++++++
modules/template_engine/components/html/form/Form.class.php | 171+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/group/Group.class.php | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/group/group.css | 13+++++++++++++
modules/template_engine/components/html/group/group.js | 5+++++
modules/template_engine/components/html/group/group.less | 22++++++++++++++++++++++
modules/template_engine/components/html/group/group.min.css | 2++
modules/template_engine/components/html/group/group.min.js | 2++
modules/template_engine/components/html/header/Header.class.php | 38++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/hidden/Hidden.class.php | 28++++++++++++++++++++++++++++
modules/template_engine/components/html/if/If.class.php | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/image/Image.class.php | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/image/image.css | 3+++
modules/template_engine/components/html/image/image.js | 6++++++
modules/template_engine/components/html/image/image.less | 4++++
modules/template_engine/components/html/image/image.min.css | 0
modules/template_engine/components/html/image/image.min.js | 2++
modules/template_engine/components/html/include/Include.class.php | 15+++++++++++++++
modules/template_engine/components/html/input/Input.class.php | 91+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/inputarea/Inputarea.class.php | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/insert/Insert.class.php | 39+++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/label/Label.class.php | 43+++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/link/Link.class.php | 189+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/link/link.js | 8++++++++
modules/template_engine/components/html/link/link.min.js | 2++
modules/template_engine/components/html/list/List.class.php | 30++++++++++++++++++++++++++++++
modules/template_engine/components/html/logo/Logo.class.php | 34++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/newline/Newline.class.php | 19+++++++++++++++++++
modules/template_engine/components/html/output/Output.class.php | 15+++++++++++++++
modules/template_engine/components/html/page/Page.class.php | 15+++++++++++++++
modules/template_engine/components/html/part/Part.class.php | 26++++++++++++++++++++++++++
modules/template_engine/components/html/password/Password.class.php | 40++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/qrcode/Qrcode.class.php | 28++++++++++++++++++++++++++++
modules/template_engine/components/html/qrcode/qrcode.js | 29+++++++++++++++++++++++++++++
modules/template_engine/components/html/qrcode/qrcode.min.js | 2++
modules/template_engine/components/html/radio/Radio.class.php | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/radiobox/Radiobox.class.php | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/row/Row.class.php | 26++++++++++++++++++++++++++
modules/template_engine/components/html/selectbox/Selectbox.class.php | 110+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/selector/Selector.class.php | 48++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/set/Set.class.php | 33+++++++++++++++++++++++++++++++++
modules/template_engine/components/html/table/Table.class.php | 45+++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/table/table.css | 176+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/table/table.js | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/table/table.less | 222+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/table/table.min.css | 2++
modules/template_engine/components/html/table/table.min.js | 2++
modules/template_engine/components/html/text/Text.class.php | 112+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/tree/Tree.class.php | 22++++++++++++++++++++++
modules/template_engine/components/html/tree/component-tree.php | 34++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/tree/tree.js | 8++++++++
modules/template_engine/components/html/tree/tree.min.js | 2++
modules/template_engine/components/html/upload/Upload.class.php | 35+++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/upload/upload.css | 7+++++++
modules/template_engine/components/html/upload/upload.js | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/components/html/upload/upload.less | 7+++++++
modules/template_engine/components/html/upload/upload.min.css | 2++
modules/template_engine/components/html/upload/upload.min.js | 2++
modules/template_engine/components/html/user/User.class.php | 20++++++++++++++++++++
modules/template_engine/components/html/user/component-user.php | 17+++++++++++++++++
modules/template_engine/components/html/window/Window.class.php | 18++++++++++++++++++
modules/template_engine/components/template.xsd | 1977+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/engine/TemplateEngine.class.php | 273+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/template_engine/require.php | 11+++++++++++
192 files changed, 6359 insertions(+), 6359 deletions(-)

diff --git a/dev-helper/create-output-files.sh b/dev-helper/create-output-files.sh @@ -31,7 +31,7 @@ function check jsfile="${jsfile%.*}" createfile $jsfile.min.js $jsfile.js done - for jsfile in `find ../modules/template-engine/components -name "*.js" -not -name "*.min.js"`; do + for jsfile in `find ../modules/template_engine/components -name "*.js" -not -name "*.min.js"`; do jsfile="${jsfile%.*}" createfile $jsfile.min.js $jsfile.js done @@ -58,7 +58,7 @@ function check done # CSS-Files - for lessfile in `find ../modules/template-engine/components -name "*.less"`; do + for lessfile in `find ../modules/template_engine/components -name "*.less"`; do lessfile="${lessfile%.*}" createfile $lessfile.css createfile $lessfile.min.css; @@ -92,7 +92,7 @@ function createfile function xsdfile { - xsd="../modules/template-engine/components/template.xsd" + xsd="../modules/template_engine/components/template.xsd" if [ -f $xsd ]; then chmod 666 -v $xsd fi diff --git a/dev-helper/template-watcher.sh b/dev-helper/template-watcher.sh @@ -10,10 +10,10 @@ CMS_URL=$1 while true; do - inotifywait --event modify -r ../modules/template-engine/ ../modules/cms-ui/themes/default/html/views/ + inotifywait --event modify -r ../modules/template_engine/ ../modules/cms-ui/themes/default/html/views/ echo File was changed. - curl $1/modules/template-engine/TemplateCompiler.php + curl $1/modules/template_engine/TemplateCompiler.php done diff --git a/dev-helper/update.html b/dev-helper/update.html @@ -6,11 +6,11 @@ <ul> <li> - <a href="../modules/template-engine/components/XSDGenerator.php">XSD Generator</a> + <a href="../modules/template_engine/components/XSDGenerator.php">XSD Generator</a> </li> <li> - <a href="../modules/template-engine/TemplateCompiler.php">Template Compiler</a> + <a href="../modules/template_engine/TemplateCompiler.php">Template Compiler</a> </li> </ul> diff --git a/modules/cms-ui/action/IndexAction.class.php b/modules/cms-ui/action/IndexAction.class.php @@ -191,7 +191,7 @@ class IndexAction extends Action // Komponentenbasiertes CSS foreach (TemplateEngineInfo::getComponentList() as $c) { - $componentCssFile = OR_HTML_MODULES_DIR . 'template-engine/components/html/' . $c . '/' . $c; + $componentCssFile = OR_HTML_MODULES_DIR . 'template_engine/components/html/' . $c . '/' . $c; if (is_file($componentCssFile . '.less')) $css[] = $componentCssFile; } @@ -521,7 +521,7 @@ class IndexAction extends Action // Komponentenbasiertes Javascript foreach ( TemplateEngineInfo::getComponentList() as $c) { - $componentJsFile = OR_HTML_MODULES_DIR . '/template-engine/components/html/' . $c . '/' . $c; + $componentJsFile = OR_HTML_MODULES_DIR . '/template_engine/components/html/' . $c . '/' . $c; if (is_file($componentJsFile . '.js')) $js[] = $componentJsFile; } diff --git a/modules/template-engine/CMSElement.class.php b/modules/template-engine/CMSElement.class.php @@ -1,19 +0,0 @@ -<?php - - -namespace modules\template_engine; - -use template_engine\components\ConditionalAttribute; - -class CMSElement extends HtmlElement -{ - public function __construct( $name ) - { - parent::__construct( $name ); - } - - public function addConditionalAttribute($name, $condition, $value ) { - $this->attributes[] = new ConditionalAttribute($condition,$name,$value); - return $this; - } -}- \ No newline at end of file diff --git a/modules/template-engine/ConditionalAttribute.php b/modules/template-engine/ConditionalAttribute.php @@ -1,31 +0,0 @@ -<?php - - -namespace template_engine\components; - - -use cms\template_engine\SimpleAttribute; -use modules\template_engine\Value; - -class ConditionalAttribute extends SimpleAttribute -{ - protected $condition; - - /** - * ConditionalAttribute constructor. - * @param $condition - * @param $name - * @param $value - */ - public function __construct($condition,$name,$value) - { - $this->condition = $condition; - parent::__construct($name,$value); - } - - - public function render() - { - return '<?php if('.$this->condition.'){ ?>'.parent::render().'<?php } ?>'; - } -}- \ No newline at end of file diff --git a/modules/template-engine/Element.class.php b/modules/template-engine/Element.class.php @@ -1,216 +0,0 @@ -<?php - - -namespace modules\template_engine; - - -use cms\template_engine\SimpleAttribute; - -class Element -{ - private $name; - /** - * @var array - */ - protected $attributes = []; - protected $content = ''; - - protected $selfClosing = false; - - /** - * @var array - */ - protected $children = []; - - - /** - * @param $element Element - */ - public function asChildOf($element ) { - $element->addChild($this); - return $this; - } - - public function addChild($child ) { - - if ( is_array( $child ) ) - $this->children += $child; - else - $this->children[] = $child; - - return $this; - } - - public function __construct( $name ) - { - $this->name = $name; - } - - protected function getAttributeValue($name ){ - return $this->attributes[$name]->render(); - } - - public function content( $content ) - { - $this->content = $content; - return $this; - } - - public function render() { - - $this->selfClosing = $this->selfClosing && !$this->content && !$this->children; - - $content = ''; - - if ( $this->name ) - $content .= '<'.$this->name. - array_reduce( array_keys($this->attributes),function($carry,$key){return $carry.' '.$this->getAttributeValue($key);},'').(($this->selfClosing ?' /':'').'>'); - - $content .= $this->getContent(); - - $content .= $this->renderChildren(); - - if ( $this->selfClosing ) - ; - else - if ( $this->name ) - $content .= '</'.$this->name.'>'; - - return $content; - } - - public function addAttribute($key, $value) { - $this->attributes[] = new SimpleAttribute($key,$value); - return $this; - } - - public function selfClosing($selfClosing) { - $this->selfClosing = boolval($selfClosing); - return $this; - } - - protected function getContent() - { - return $this->content; - } - - protected function renderChildren() - { - $content = ''; - - /** @var Element $child */ - foreach($this->children as $child ) { - $content .= $child->render(); - } - - return $content; - } -} - - - - -class Value { - private $value; - private $expressions = []; - - const CONTEXT_PHP = 0; - const CONTEXT_HTML = 1; - const CONTEXT_RAW = 2; - - public static function createExpression( $type, $name ) { - return $type.'{'.$name.'}'; - } - - public function __construct( $value ) - { - while( true ) { - if ( ! $value ) - break; - - $epos = strpos($value,'{',1); - $fpos = strpos($value,'}',1); - - if ( $epos === false || $fpos === false ) - break; - - $type = substr($value,$epos-1,1 ); - $name = substr($value,$epos+1,$fpos-$epos-1); - - $this->expressions[] = new ValueExpression($type,$name,$epos-1); - $value = substr($value,0,$epos-1).substr($value,$fpos+1); - } - $this->value = $value; - } - - - public function render( $context ) { - switch( $context ) { - case Value::CONTEXT_PHP: - return "'".array_reduce(array_reverse($this->expressions),function($carry,$expr) { - return substr($carry, 0,$expr->position)."'.".$expr->render().'.\''.substr($carry,$expr->position); - },$this->value)."'"; - - case Value::CONTEXT_HTML: - case Value::CONTEXT_RAW: - $escape = function($expr) use($context) { - if ( $context == self::CONTEXT_HTML ) - return 'encodeHtml(htmlentities('.$expr.'))'; - else - return $expr; - }; - return array_reduce(array_reverse($this->expressions),function($carry,$expr) use ($escape) { - //echo "carry:".$carry.";expr:".$expr->position.':'.$expr->name; - return substr($carry, 0,$expr->position)."<?php echo ".$escape($expr->render()).' ?>'.substr($carry,$expr->position); - },$this->value); - } - } -} - - - -class ValueExpression { - - public $type; - public $name; - public $position; - - const TYPE_DATA_VAR = '$'; - const TYPE_MESSAGE = '#'; - const TYPE_CONFIG = '%'; - - /** - * ValueExpression constructor. - * @param $type - * @param $name - * @param $position - */ - public function __construct($type, $name, $position) - { - $this->type = $type; - $this->name = $name; - $this->position = $position; - } - - public function render() - { - switch( $this->type ) { - case self::TYPE_DATA_VAR: - $parts = explode('.', $this->name); - - return array_reduce($parts, function ($carry, $item) { - if (!$carry) - return '@$' . $item; - else - return $carry.'[\'' . $item . '\']'; - }, ''); - case self::TYPE_MESSAGE: - return '@lang(\'' . $this->name . '\')'; - - case self::TYPE_CONFIG: - $config_parts = explode('/', $this->name); - return 'config(' . "'" . implode("'" . ',' . "'", $config_parts) . "'" . ')'; - } - } - -}- \ No newline at end of file diff --git a/modules/template-engine/EmptyElement.class.php b/modules/template-engine/EmptyElement.class.php @@ -1,23 +0,0 @@ -<?php - - -namespace modules\template_engine; - - -use cms\template_engine\SimpleAttribute; - - -/** - * An empty element. - * - * 'empty' means, the element has no tag and no text content. But it may (and should) contain child elements. - * - * @package modules\template_engine - */ -class EmptyElement extends Element -{ - public function __construct() - { - parent::__construct(null); - } -} diff --git a/modules/template-engine/HtmlElement.class.php b/modules/template-engine/HtmlElement.class.php @@ -1,64 +0,0 @@ -<?php - - -namespace modules\template_engine; - - -class HtmlElement extends Element -{ - private $styleClasses = []; - - /** - * Auto-escaping the content. - * - * @var bool - */ - private $escape = true; - - - public function addStyleClass( $clazz ) { - $this->styleClasses[] = $clazz; - return $this; - } - - - public function setEscaping( $escape ) { - $this->escape = $escape; - return $this; - } - - - public function getAttributeValue($name) - { - return parent::getAttributeValue(htmlspecialchars($name)); - } - - - public function __construct( $name ) - { - parent::__construct( $name ); - - // Only "void elements" are self-closable, see - // https://html.spec.whatwg.org/multipage/syntax.html#void-elements - if ( in_array($name,['area','base','br','col','embed','hr','img','input','link','meta','param','source','track','wbr'])) - $this->selfClosing = true; - } - - - protected function getContent() - { - $context = $this->escape ? Value::CONTEXT_HTML : Value::CONTEXT_RAW; - - return (new Value(parent::getContent()))->render( $context ); - } - - - public function render() - { - if ( $this->styleClasses ) - $this->addAttribute('class', implode(' ',$this->styleClasses) ); - - return parent::render(); - } - -}- \ No newline at end of file diff --git a/modules/template-engine/PHPBlockElement.class.php b/modules/template-engine/PHPBlockElement.class.php @@ -1,172 +0,0 @@ -<?php - - -namespace modules\template_engine; - - -class PHPBlockElement extends HtmlElement -{ - public $beforeBlock; - public $inBlock; - - public function __construct() - { - parent::__construct( null ); - } - - - public function render() - { - $content = ''; - - $content .= '<?php '.$this->beforeBlock.' { '.$this->inBlock.' ?>'; - - $content .= $this->renderChildren(); - - $content .= ' <?php } ?>'; - - return $content; - } - - - - - - public function textasvarname($value) - { - $expr = new Expression($value); - return $expr->getTextAsVarName(); - - } - - - public function varname($value) - { - $expr = new Expression($value); - return $expr->getVarName(); - } - - - - public function htmlvalue($value) - { - $expr = new Expression($value); - return $expr->getHTMLValue(); - } - - - - public function value( $value ) - { - $expr = new Expression($value); - return $expr->getPHPValue(); - } - - - public function includeResource($file ) - { - return "include_once( 'modules/template-engine/components/html/".$file."');"; - } - -} - - - -class Expression -{ - public $type; - public $value; - public $invert = false; - - public function getHTMLValue() - { - switch ($this->type) { - case 'text': - return $this->value; - - default: - return '<' . '?php echo ' . $this->getPHPValue() . ' ?>'; - } - } - - - public function __construct($value) - { - // Falls der Wert 'true' oder 'false' ist. - if (is_bool($value)) - $value = $value ? 'true' : 'false'; - - // Negierung berücksichtigen. - if (substr($value, 0, 4) == 'not:') { - $value = substr($value, 4); - $this->invert = true; - } - - if ($value && strlen($value) >= 3 && $value[1] == '{') { - $this->type = $value[0]; - $this->value = substr($value, 2, -1); - } else { - $this->type = 'text'; - $this->value = $value; - } - } - - - public function getVarName() - { - switch ($this->type) { - case '$': - return '$' . $this->value; - case 'text': - return $this->value; - default: - throw new \LogicException("Invalid expression type '$this->type' in attribute value. Allowed: text|var"); - } - } - - - public function getTextAsVarName() - { - switch ($this->type) { - case '$': - return '$$' . $this->value; - case 'text': - return '$' . $this->value; - default: - return $this->getPHPValue(); - } - } - - - public function getPHPValue() - { - $value = $this->value; - - $invert = $this->invert ? '!' : ''; - - switch ($this->type) { - case 'text': - // Sonderf�lle f�r die Attributwerte "true" und "false". - // Hinweis: Die Zeichenkette "false" entspricht in PHP true. - // Siehe http://de.php.net/manual/de/language.types.boolean.php - if ($value == 'true' || $value == 'false') - return $value; - else - return "'" . $value . "'"; - case '$': - return $invert . '$' . $value; - case 'size': - return '@count($' . $value . ')'; - case '#': - // macht aus "text1{var}text2" => "text1".$var."text2" - $value = preg_replace('/{(\w+)\}/', '\'.$\\1.\'', $value); - return 'lang(' . "'" . $value . "'" . ')'; - case '%': - $config_parts = explode('/', $value); - return $invert . 'config(' . "'" . implode("'" . ',' . "'", $config_parts) . "'" . ')'; - - default: - throw new \LogicException("Unknown expression type '{$this->type}' in attribute value. Allowed: var|function|method|text|size|property|message|messagevar|arrayvar|config or none"); - } - } -}- \ No newline at end of file diff --git a/modules/template-engine/SimpleAttribute.php b/modules/template-engine/SimpleAttribute.php @@ -1,30 +0,0 @@ -<?php - - -namespace cms\template_engine; - - -use modules\template_engine\Value; - -class SimpleAttribute -{ - - protected $name; - protected $value; - - /** - * SimpleAttribute constructor. - * @param $name - * @param $value - */ - public function __construct($name, $value) - { - $this->name = $name; - $this->value = $value; - } - - - public function render() { - return $this->name.'="'.(new Value($this->value))->render(Value::CONTEXT_HTML).'"'; - } -}- \ No newline at end of file diff --git a/modules/template-engine/TemplateCompiler.php b/modules/template-engine/TemplateCompiler.php @@ -1,57 +0,0 @@ -<?php - -header('Content-Type: text/plain'); - -/** - * Using the Component classes and generating a XSD-File. - */ -error_reporting(E_ALL); -ini_set('display_errors', 1); -ini_set('display_startup_errors', 1); - -use template_engine\TemplateEngine; - - - -$dir = __DIR__.'/../../modules/cms-ui/themes/default/html/views'; - -require('../../modules/util/require.php'); -require('../../modules/template-engine/require.php'); -require('../../modules/cms-core/require.php'); - -echo "Searching in $dir\n"; - -foreach(FileUtils::readDir( $dir ) as $action ) -{ - if ( !is_dir($dir.'/'.$action ) ) - continue; - - echo "Action: $action\n"; - - - foreach(FileUtils::readDir( $dir.'/'.$action ) as $file ) - { - if ( substr($file,-12 ) == '.tpl.src.xml' ) - { - $method = substr($file, 0,-12 ); - echo "\tMethod $method\n"; - - $templateFile = $dir.'/'.$action.'/'.$file; - $outFile = $dir.'/'.$action.'/'.$method.'.php'; - - $engine = new TemplateEngine(); - - // We are creating a fake request, because the template compiler needs to know - // the action and subaction in which it will be executed. - $fakeRequest = new \cms\action\RequestParams(); - $fakeRequest->action = $action; - $fakeRequest->method = $method; - $engine->request = $fakeRequest; - - echo "\t\tcompiling $templateFile\n\t\t to $outFile\n"; - - $engine->compile( $templateFile,$outFile ); - } - } -} - diff --git a/modules/template-engine/TemplateEngineInfo.class.php b/modules/template-engine/TemplateEngineInfo.class.php @@ -1,49 +0,0 @@ -<?php - -namespace template_engine; - -class TemplateEngineInfo -{ - - public static function getComponentList() - { - $components = parse_ini_file(__DIR__.'/components/components.ini'); - - return array_keys($components); - } - - - public static function getLESSFiles() - { - return self::getComponentFilesByExtension('.less'); - } - - public static function getJSFiles() - { - return self::getComponentFilesByExtension('.js'); - } - - - /** - * Gets all files with the specified extension. - * - * @param $extension string Extension - * @return array - */ - private static function getComponentFilesByExtension($extension ) - { - - $files = array(); - if ($handle = opendir(__DIR__.'/components/html')) { - - while (false !== ($entry = readdir($handle))) { - if ( substr($entry,-strlen($extension)) == $extension ) - $files[] = $entry; - } - - closedir($handle); - } - return $files; - } - -} diff --git a/modules/template-engine/components/XSDGenerator.php b/modules/template-engine/components/XSDGenerator.php @@ -1,76 +0,0 @@ -<?php -/** - * Using the Component classes and generating a XSD-File. - */ - -error_reporting(E_ALL); - -require('../../util/FileUtils.class.php'); - -// Baseclass of all components. -require('html/Component.class.php'); -require('html/HtmlComponent.class.php'); -require('html/FieldComponent.class.php'); -header('Content-Type: text/plain'); - -echo "XSD Generator\n\n"; - -$folder = FileUtils::readDir(__DIR__ . '/html'); - -$componentsFile = @fopen(__DIR__ . '/components.ini', 'w'); -$xsdFile = @fopen(__DIR__ . '/template.xsd', 'w'); - -fwrite($componentsFile, '# generated by XSDGenerator. do not change manually.' . "\n"); -fwrite($xsdFile, '<?xml version="1.0" encoding="utf-8"?> -<xsd:schema xmlns="http://www.openrat.de/template" - targetNamespace="http://www.openrat.de/template" xmlns:xsd="http://www.w3.org/2001/XMLSchema" - elementFormDefault="qualified" attributeFormDefault="unqualified">' . "\n"); - -foreach ($folder as $f) { - - $filename = __DIR__ . '/html/' . $f . '/' . ucfirst($f) . '.class.php'; - - if (!is_file($filename)) - continue; - - echo 'Working on component: ' . $f . "\n"; - fwrite($componentsFile, $f . " = \n"); - - fwrite($xsdFile, '<xsd:element name="' . $f . '" type="' . $f . 'Type" /><xsd:complexType name="' . $f . 'Type">'); - - // Allowed Child-Elements (all) - fwrite($xsdFile, '<xsd:choice maxOccurs="unbounded" minOccurs="0">'); - foreach ($folder as $f2) { - $filename2 = __DIR__ . '/html/' . $f2 . '/' . ucfirst($f2) . '.class.php'; - if (is_file($filename2)) - fwrite($xsdFile, '<xsd:element ref="' . $f2 . '" maxOccurs="unbounded" minOccurs="0" />'); - } - fwrite($xsdFile, '</xsd:choice>'); - - - $className = 'template_engine\\components\\' . ucfirst($f) . 'Component'; - include($filename); - $vars = get_class_vars($className); - foreach ($vars as $name => $value) { - if (is_bool($value)) - $xsdtype = 'xsd:boolean'; - elseif (is_numeric($value)) - $xsdtype = 'xsd:int'; - else - $xsdtype = 'xsd:string'; - - - fwrite($xsdFile, '<xsd:attribute name="' . $name . '" type="' . $xsdtype . '" />'); - } - - - fwrite($xsdFile, '</xsd:complexType>'); - -} - -fwrite($xsdFile, '</xsd:schema>'); - -fclose($xsdFile); -fclose($componentsFile); - -echo "Finished.\n";- \ No newline at end of file diff --git a/modules/template-engine/components/components.ini b/modules/template-engine/components/components.ini @@ -1,40 +0,0 @@ -# generated by XSDGenerator. do not change manually. -selector = -text = -dummy = -logo = -include = -else = -label = -editor = -newline = -link = -radio = -set = -checkbox = -input = -insert = -header = -date = -if = -qrcode = -list = -table = -inputarea = -window = -part = -user = -selectbox = -column = -radiobox = -image = -hidden = -row = -focus = -group = -button = -password = -form = -upload = -output = -tree = diff --git a/modules/template-engine/components/html/Component.class.php b/modules/template-engine/components/html/Component.class.php @@ -1,81 +0,0 @@ -<?php - -namespace template_engine\components; - -use cms\action\RequestParams; -use modules\template_engine\Element; - -abstract class Component -{ - private $childComponents = []; - private $depth; - - /** - * @param $component Component - */ - public function addChildComponent($component ) { - if ( $component ) - $this->childComponents[] = $component; - } - - /** - * @var RequestParams - */ - public $request; - - /** - * @var Element - */ - private $element; - - /** - * @var Element - */ - protected $adoptiveElement; - - public function __construct() - { - } - - public function getDepth() - { - return $this->depth; - } - - public function setDepth($depth) - { - $this->depth = $depth; - } - - public function createElement() { - return null; - } - - public function init() - { - $this->element = $this->createElement(); - - if ( $this->element) - $this->element->selfClosing(false); - - // if there is no special adoptive element, lets use the root element. - if ( ! $this->adoptiveElement ) - $this->adoptiveElement = $this->element; - } - - - /** - * Gets the element with all child elements from all child components. - * - * @return Element - */ - public function getElement() - { - /** @var Component $childComponent */ - foreach ($this->childComponents as $childComponent ) - $this->adoptiveElement->addChild( $childComponent->getElement() ); - - return $this->element; - } - -} diff --git a/modules/template-engine/components/html/FieldComponent.class.php b/modules/template-engine/components/html/FieldComponent.class.php @@ -1,14 +0,0 @@ -<?php - -namespace template_engine\components; - - -use modules\template_engine\Element; - -abstract class FieldComponent extends HtmlComponent -{ - - public $prefix; - public $name; - public $readonly = false; -} diff --git a/modules/template-engine/components/html/HtmlComponent.class.php b/modules/template-engine/components/html/HtmlComponent.class.php @@ -1,10 +0,0 @@ -<?php - -namespace template_engine\components; - -abstract class HtmlComponent extends Component -{ - - public $class; - -} diff --git a/modules/template-engine/components/html/NativeHtmlComponent.class.php b/modules/template-engine/components/html/NativeHtmlComponent.class.php @@ -1,21 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\HtmlElement; - -class NativeHtmlComponent extends HtmlComponent -{ - public $attributes; - public $tag; - - public function createElement() - { - $html = new HtmlElement( $this->tag ); - - foreach ($this->attributes as $attribute) - $html->addAttribute( $attribute->name,$attribute->value ); - - return $html; - } -} diff --git a/modules/template-engine/components/html/button/Button.class.php b/modules/template-engine/components/html/button/Button.class.php @@ -1,62 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\Element; - -/* @DEPRECATED */ -class ButtonComponent extends Component -{ - - public $type = 'submit'; - public $class = 'ok'; - public $src; - public $text = 'button_ok'; - public $value = 'ok'; - - private $tmp_src; - - public function createElement() - { - return new Element(null); - } - - protected function unused_begin() - { - echo <<<'HTML' - <div class="invisible"> -HTML; - - if ($this->type == 'ok') - $this->type = 'submit'; - - if (! empty($this->src)) - { - $this->type = 'image'; - $this->tmp_src = $image_dir . 'icon_' . $this->src . IMG_ICON_EXT; - } - else - { - $this->tmp_src = ''; - } - - if (! empty($this->type)) - { - ?> -<input type="<?php echo $this->type ?>" <?php if(isset($this->src)) { ?> - src="<?php $this->tmp_src ?>" <?php } ?> - name="<?php echo $this->value ?>" class="%class%" - title="<?php echo lang($this->text.'_DESC') ?>" - value="&nbsp;&nbsp;&nbsp;&nbsp;<?php echo langHtml($this->text) ?>&nbsp;&nbsp;&nbsp;&nbsp;" /><?php unset($this->src); ?> - <?php - -} - } - - protected function end() - { - echo "</div>"; - } -} - -?>- \ No newline at end of file diff --git a/modules/template-engine/components/html/checkbox/Checkbox.class.php b/modules/template-engine/components/html/checkbox/Checkbox.class.php @@ -1,52 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class CheckboxComponent extends Component -{ - - public $default = false; - public $name; - public $readonly = false; - public $required = false; - public $label; - - public function createElement() - { - $checkbox = (new CMSElement('input'))->addAttribute('type','checkbox'); - - $checkbox->addAttribute('name',$this->name); - if ( $this->readonly ) - $checkbox->addAttribute('disabled','disabled'); - $checkbox->addAttribute('value','1'); - - if ( $this->default ) - $checkbox->addAttribute('checked',$this->default); - else { - $condition = '$'.$this->name; - $checkbox->addConditionalAttribute('checked', $condition, '1'); - } - - if ( $this->required ) - $checkbox->addAttribute( 'required','required'); - - if ( $this->readonly && $this->required ) { - $hidden = (new CMSElement('input'))->addAttribute('type','hidden')->addAttribute('name',$this->name)->addAttribute('value','1'); - $checkbox->addChild( $hidden ); - } - - if ( $this->label ) { - $label = new CMSElement('label'); - $label->addStyleClass('or-form-row')->addStyleClass('or-form-checkbox'); - $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); - $label->addChild($checkbox); - return $label; - } - - return $checkbox; - } -} diff --git a/modules/template-engine/components/html/column/Column.class.php b/modules/template-engine/components/html/column/Column.class.php @@ -1,54 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; - -class ColumnComponent extends Component -{ - public $width; - public $style; - public $class; - public $colspan; - public $rowspan; - public $header = false; - public $title; - public $url; - public $action; - public $id; - public $name; - - public function createElement() - { - $column = new CMSElement( ($this->header?'th':'td') ); - - if ( $this->width ) - $column->addAttribute('width',$this->width); - - if ( $this->style ) - $column->addAttribute('style',$this->style); - - if ( $this->colspan ) - $column->addAttribute('colspan',$this->colspan); - - if ( $this->rowspan ) - $column->addAttribute('rowspan',$this->rowspan); - - if ( $this->rowspan ) - $column->addAttribute('rowspan',$this->rowspan); - if ( $this->title ) - $column->addAttribute('title',$this->title); - - if ( $this->id ) - { - $column->addAttribute('data-name' ,$this->name ); - $column->addAttribute('data-action',$this->action); - $column->addAttribute('data-id' ,$this->id ); - $column->addStyleClass('clickable'); - } - if ( $this->class ) - $column->addStyleClass( $this->class ); - - return $column; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/column/column.js b/modules/template-engine/components/html/column/column.js @@ -1,8 +0,0 @@ -// View loaded... -Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - - - // Clickable Columns. - // done by orLinkify-Plugin in link.js - -});- \ No newline at end of file diff --git a/modules/template-engine/components/html/column/column.min.js b/modules/template-engine/components/html/column/column.min.js @@ -1 +0,0 @@ -;Openrat.Workbench.afterViewLoadedHandler.add(function(e){});- \ No newline at end of file diff --git a/modules/template-engine/components/html/date/Date.class.php b/modules/template-engine/components/html/date/Date.class.php @@ -1,19 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\PHPBlockElement; - -class DateComponent extends Component -{ - public $date; - - public function createElement() - { - $date = new PHPBlockElement(); - $date->beforeBlock = $date->includeResource( 'date/component-date.php'); - $date->inBlock = 'component_date('.$date->value($this->date).');'; - - return $date; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/date/component-date.php b/modules/template-engine/components/html/date/component-date.php @@ -1,74 +0,0 @@ -<?php -function component_date( $time ) -{ - if ( $time==0) - echo lang('GLOBAL_UNKNOWN'); - else - { - // Benutzereinstellung 'Zeitzonen-Offset' auswerten. - if ( isset($_COOKIE['or_timezone_offset']) ) - { - $time -= (int)date('Z'); - $time += ((int)$_COOKIE['or_timezone_offset']*60); - } - - echo '<span class="sort-value">'.str_pad($time, 20, "0", STR_PAD_LEFT).'</span>'; // For sorting a table. - - echo '<span title="'; - $dl = date(lang('DATE_FORMAT_LONG'),$time); - $dl = str_replace('{weekday}',lang('DATE_WEEKDAY'.strval(date('w',$time))),$dl); - $dl = str_replace('{month}' ,lang('DATE_MONTH' .strval(date('n',$time))),$dl); -// $dl = str_replace(' ','&nbsp;',$dl); - echo $dl; - unset($dl); - - - $sekunden = time()-$time; - $minuten = intval($sekunden/60); - $stunden = intval($minuten /60); - $tage = intval($stunden /24); - $monate = intval($tage /30); - $jahre = intval($monate /12); - - echo ' ('; - - - if ( $sekunden == 1 ) - echo $sekunden.' '.lang('GLOBAL_SECOND'); - elseif ( $sekunden < 60 ) - echo $sekunden.' '.lang('GLOBAL_SECONDS'); - - elseif ( $minuten == 1 ) - echo $minuten.' '.lang('GLOBAL_MINUTE'); - elseif ( $minuten < 60 ) - echo $minuten.' '.lang('GLOBAL_MINUTES'); - - elseif ( $stunden == 1 ) - echo $stunden.' '.lang('GLOBAL_HOUR'); - elseif ( $stunden < 60 ) - echo $stunden.' '.lang('GLOBAL_HOURS'); - - elseif ( $tage == 1 ) - echo $tage.' '.lang('GLOBAL_DAY'); - elseif ( $tage < 60 ) - echo $tage.' '.lang('GLOBAL_DAYS'); - - elseif ( $monate == 1 ) - echo $monate.' '.lang('GLOBAL_MONTH'); - elseif ( $monate < 12 ) - echo $monate.' '.lang('GLOBAL_MONTHS'); - - elseif ( $jahre == 1 ) - echo $jahre.' '.lang('GLOBAL_YEAR'); - else - echo $jahre.' '.lang('GLOBAL_YEARS'); - - echo ')'; - - - echo '">'; - echo date(lang('DATE_FORMAT'),$time); - echo '</span>'; - } -} -?>- \ No newline at end of file diff --git a/modules/template-engine/components/html/dummy/Dummy.class.php b/modules/template-engine/components/html/dummy/Dummy.class.php @@ -1,13 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\Element; - -class DummyComponent extends Component -{ - public function createElement() - { - return new Element(null); - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/editor/Editor.class.php b/modules/template-engine/components/html/editor/Editor.class.php @@ -1,62 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class EditorComponent extends FieldComponent -{ - public $type; - public $name; - public $mode ='htmlmixed'; - public $extension =''; - public $mimetype = ''; - - public function createElement() - { - $textarea = new CMSElement('textarea'); - $textarea->addAttribute('name',$this->name); - - $textarea->addStyleClass('editor')->setEscaping(false); - - switch( $this->type ) - { - case 'html': - $textarea->addStyleClass('html-editor')->addAttribute('id','pageelement_edit_editor'); - - - break; - - case 'wiki': - $textarea->addStyleClass('wiki-editor'); - break; - - case 'text': - case 'raw': - $textarea->addStyleClass('text-editor'); - break; - - case 'markdown': - $textarea->setEscaping(true)->addStyleClass('markdown-editor'); - break; - - case 'code': - $textarea->setEscaping(true); - $textarea->addStyleClass('code-editor') - ->addAttribute('data-extension',$this->extension) - ->addAttribute('data-mimetype',$this->mimetype) - ->addAttribute('data-mode',$this->mode); - break; - - - default: - throw new \LogicException("Unknown editor type: ".$this->type); - } - - $textarea->content(Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); - - return $textarea; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/editor/editor.css b/modules/template-engine/components/html/editor/editor.css @@ -1,32 +0,0 @@ -.editor__text-editor { - width: 100%; - height: 300px; -} -/* ACE-Editor */ -textarea.editor__code-editor { - display: none; - /* Textarea nicht anzeigen, da durch Editor im DIV ersetzt */ -} -div.editor__code-editor { - position: absolute; - height: 500px; - width: 100%; - font-size: 14px; - z-index: 256; -} -textarea.editor__text-editor, -textarea.editor__wiki-editor, -textarea.editor__html-editor { - width: 100%; -} -a.editorlink:active, -a.editorlink:hover { - font-weight: normal; - text-decoration: none; -} -a.editorlink:link, -a.editorlink:visited { - font-weight: normal; - text-decoration: none; -} -/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%22editor.less%22%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22AACA%3BCACC%3BCACA%3B%3B%3BAAID%2CQAAQ%3BCACP%3B%3B%3BAAID%2CGAAG%3BCAED%3BCACE%3BCACA%3BCACA%3BCACA%3B%3BAAKJ%2CQAAQ%3BAACR%2CQAAQ%3BAACR%2CQAAQ%3BCAEP%3B%3BAAID%2CCAAC%2CWAAW%3BAACZ%2CCAAC%2CWAAW%3BCAEX%3BCACA%3B%3BAAGD%2CCAAC%2CWAAW%3BAACZ%2CCAAC%2CWAAW%3BCAEX%3BCACA%22%7D */- \ No newline at end of file diff --git a/modules/template-engine/components/html/editor/editor.js b/modules/template-engine/components/html/editor/editor.js @@ -1,251 +0,0 @@ -Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - - $(element).find('textarea').orAutoheight(); - - - // Codemirror-Editor anzeigen - $(element).find("textarea.editor.code-editor").each( function() { - - let mode = $(this).data('mode'); - - let mimetype = $(this).data('mimetype'); - if(mimetype.length>0) - mode = mimetype; - - let textareaEl = this; - - let editor = CodeMirror.fromTextArea( textareaEl, { - lineNumbers: true, - viewportMargin: Infinity, - mode: mode - /** settings **/ }) - - editor.on('change',function() { - // copy back to textarea on form submit... - let newValue = editor.getValue(); - $(textareaEl).val( newValue ); - } ); - - - $(editor.getWrapperElement()).droppable({ - accept: '.or-draggable', - hoverClass: 'or-droppable--hover', - activeClass: 'or-droppable--active', - - drop: function (event, ui) { - - let dropped = ui.draggable; - - // Insert id of dragged element into cursor position - let pos = editor.getCursor(); - editor.setSelection(pos, pos); - let insertText = dropped.data('id') - let toInsert = ''+insertText; - editor.replaceSelection(toInsert); - //editor.setCursor(pos+toInsert.length); geht nicht. - } - - }); - - - } ); - - // Markdown-Editor anzeigen - $(element).find("textarea.editor.markdown-editor").each( function() { - - let textarea = this; - let toolbar = [{ - name: "bold", - action: SimpleMDE.toggleBold, - className: "image-icon image-icon--editor-bold", - title: "Bold", - }, - { - name: "italic", - action: SimpleMDE.toggleItalic, - className: "image-icon image-icon--editor-italic", - title: "Italic", - }, - { - name: "heading", - action: SimpleMDE.toggleHeadingBigger, - className: "image-icon image-icon--editor-headline", - title: "Headline", - }, - "|", // Separator - { - name: "quote", - action: SimpleMDE.toggleBlockquote, - className: "image-icon image-icon--editor-quote", - title: "Quote", - }, - { - name: "code", - action: SimpleMDE.toggleCodeBlock, - className: "image-icon image-icon--editor-code", - title: "Code", - }, - "|", // Separator - { - name: "generic list", - action: SimpleMDE.toggleUnorderedList, - className: "image-icon image-icon--editor-unnumberedlist", - title: "Unnumbered list", - }, - { - name: "numbered list", - action: SimpleMDE.toggleOrderedList, - className: "image-icon image-icon--editor-numberedlist", - title: "Numbered list", - }, - "|", // Separator - { - name: "table", - action: SimpleMDE.drawTable, - className: "image-icon image-icon--editor-table", - title: "Table", - }, - { - name: "horizontalrule", - action: SimpleMDE.drawHorizontalRule, - className: "image-icon image-icon--editor-horizontalrule", - title: "Horizontal rule", - }, - "|", // Separator - { - name: "undo", - action: SimpleMDE.undo, - className: "image-icon image-icon--editor-undo", - title: "Undo", - }, - { - name: "redo", - action: SimpleMDE.redo, - className: "image-icon image-icon--editor-redo", - title: "Redo", - }, - "|", // Separator - { - name: "link", - action: SimpleMDE.drawLink, - className: "image-icon image-icon--editor-link", - title: "Link", - }, - { - name: "image", - action: SimpleMDE.drawImage, - className: "image-icon image-icon--editor-image", - title: "Image", - }, - - /* - "|", // Separator - { - name: "preview", - action: SimpleMDE.togglePreview, - className: "image-icon image-icon--editor-preview", - title: "Preview", - }, - { - name: "sidebyside", - action: SimpleMDE.toggleSideBySide, - className: "image-icon image-icon--editor-sidebyside", - title: "Side by side", - }, - { - name: "fullscreen", - action: SimpleMDE.toggleFullScreen, - className: "image-icon image-icon--editor-fullscreen", - title: "Fullscreen", - }, - */ - "|", // Separator - { - name: "guide", - action: "https://simplemde.com/markdown-guide", - className: "image-icon image-icon--editor-help", - title: "Howto markdown", - }, - ]; - - let mde = new SimpleMDE( - { - element: $(this)[0], - toolbar: toolbar, - autoDownloadFontAwesome: false - } - ); - - let codemirror = mde.codemirror; - - $(codemirror.getWrapperElement()).droppable({ - accept: '.or-draggable', - hoverClass: 'or-droppable--hover', - activeClass: 'or-droppable--active', - - drop: function (event, ui) { - - let dropped = ui.draggable; - - let insertText = ''; - let id = dropped.data('id'); - let url = '__OID__'+id+'__'; - if ( dropped.data('type') == 'image') - insertText = '![]('+url+')'; - else - insertText = '['+id+']('+url+')'; - - // Insert id of dragged element into cursor position - let pos = codemirror.getCursor(); - codemirror.setSelection(pos, pos); - codemirror.replaceSelection( insertText); - } - }); - - codemirror.on('change',function() { - // copy back to textarea on form submit... - let newValue = codemirror.getValue(); - $(textarea).val( newValue ); - } ); - } ); - - // HTML-Editor anzeigen - $(element).find("textarea.editor.html-editor").each( function() { - - let textarea = this; - - $.trumbowyg.svgPath = './modules/editor/trumbowyg/ui/icons.svg'; - $(textarea).trumbowyg(); - - $(textarea).closest('form').find('.trumbowyg-editor').droppable({ - accept: '.or-draggable', - hoverClass: 'or-droppable--hover', - activeClass: 'or-droppable--active', - - drop: function (event, ui) { - - let dropped = ui.draggable; - let id = dropped.data('id'); - let url = './?_='+dropped.data('type')+'-'+id+'&subaction=show&embed=1&__OID__'+id+'__='+id; - let insertText = ''; - if ( dropped.data('type') == 'image') - insertText = '<img src="'+url+'" alt="" />'; - else - insertText = '<a href="'+url+'" />'+id+'</a>'; - - $(textarea).trumbowyg('execCmd', { - cmd: 'insertHTML', - param: insertText, - forceCss: false, - }); - } - }); - - - - - - } ); - - -});- \ No newline at end of file diff --git a/modules/template-engine/components/html/editor/editor.less b/modules/template-engine/components/html/editor/editor.less @@ -1,45 +0,0 @@ - -.editor__text-editor { - width:100%; - height:300px; -} - -/* ACE-Editor */ -textarea.editor__code-editor { - display:none; /* Textarea nicht anzeigen, da durch Editor im DIV ersetzt */ -} - - -div.editor__code-editor -{ - position: absolute; - height: 500px; - width: 100%; - font-size:14px; - z-index: 256; -} - - - -textarea.editor__text-editor, -textarea.editor__wiki-editor, -textarea.editor__html-editor -{ - width:100%; -} - - -a.editorlink:active, -a.editorlink:hover -{ - font-weight:normal; - text-decoration:none; -} - -a.editorlink:link, -a.editorlink:visited -{ - font-weight:normal; - text-decoration:none; -} - diff --git a/modules/template-engine/components/html/editor/editor.min.css b/modules/template-engine/components/html/editor/editor.min.css @@ -1 +0,0 @@ -.editor__text-editor{width: 100%;height: 300px}textarea.editor__code-editor{display: none}div.editor__code-editor{position: absolute;height: 500px;width: 100%;font-size: 14px;z-index: 256}textarea.editor__text-editor,textarea.editor__wiki-editor,textarea.editor__html-editor{width: 100%}a.editorlink:active,a.editorlink:hover{font-weight: normal;text-decoration: none}a.editorlink:link,a.editorlink:visited{font-weight: normal;text-decoration: none}- \ No newline at end of file diff --git a/modules/template-engine/components/html/editor/editor.min.js b/modules/template-engine/components/html/editor/editor.min.js @@ -1 +0,0 @@ -;Openrat.Workbench.afterViewLoadedHandler.add(function(e){$(e).find('textarea').orAutoheight();$(e).find('textarea.editor.code-editor').each(function(){let mode=$(this).data('mode');let mimetype=$(this).data('mimetype');if(mimetype.length>0)mode=mimetype;let textareaEl=this;let editor=CodeMirror.fromTextArea(textareaEl,{lineNumbers:!0,viewportMargin:Infinity,mode:mode});editor.on('change',function(){let newValue=editor.getValue();$(textareaEl).val(newValue)});$(editor.getWrapperElement()).droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let pos=editor.getCursor();editor.setSelection(pos,pos);let insertText=dropped.data('id');let toInsert=''+insertText;editor.replaceSelection(toInsert)}})});$(e).find('textarea.editor.markdown-editor').each(function(){let textarea=this;let toolbar=[{name:'bold',action:SimpleMDE.toggleBold,className:'image-icon image-icon--editor-bold',title:'Bold',},{name:'italic',action:SimpleMDE.toggleItalic,className:'image-icon image-icon--editor-italic',title:'Italic',},{name:'heading',action:SimpleMDE.toggleHeadingBigger,className:'image-icon image-icon--editor-headline',title:'Headline',},'|',{name:'quote',action:SimpleMDE.toggleBlockquote,className:'image-icon image-icon--editor-quote',title:'Quote',},{name:'code',action:SimpleMDE.toggleCodeBlock,className:'image-icon image-icon--editor-code',title:'Code',},'|',{name:'generic list',action:SimpleMDE.toggleUnorderedList,className:'image-icon image-icon--editor-unnumberedlist',title:'Unnumbered list',},{name:'numbered list',action:SimpleMDE.toggleOrderedList,className:'image-icon image-icon--editor-numberedlist',title:'Numbered list',},'|',{name:'table',action:SimpleMDE.drawTable,className:'image-icon image-icon--editor-table',title:'Table',},{name:'horizontalrule',action:SimpleMDE.drawHorizontalRule,className:'image-icon image-icon--editor-horizontalrule',title:'Horizontal rule',},'|',{name:'undo',action:SimpleMDE.undo,className:'image-icon image-icon--editor-undo',title:'Undo',},{name:'redo',action:SimpleMDE.redo,className:'image-icon image-icon--editor-redo',title:'Redo',},'|',{name:'link',action:SimpleMDE.drawLink,className:'image-icon image-icon--editor-link',title:'Link',},{name:'image',action:SimpleMDE.drawImage,className:'image-icon image-icon--editor-image',title:'Image',},'|',{name:'guide',action:'https://simplemde.com/markdown-guide',className:'image-icon image-icon--editor-help',title:'Howto markdown',},];let mde=new SimpleMDE({element:$(this)[0],toolbar:toolbar,autoDownloadFontAwesome:!1});let codemirror=mde.codemirror;$(codemirror.getWrapperElement()).droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let insertText='';let id=dropped.data('id');let url='__OID__'+id+'__';if(dropped.data('type')=='image')insertText='![]('+url+')';else insertText='['+id+']('+url+')';let pos=codemirror.getCursor();codemirror.setSelection(pos,pos);codemirror.replaceSelection(insertText)}});codemirror.on('change',function(){let newValue=codemirror.getValue();$(textarea).val(newValue)})});$(e).find('textarea.editor.html-editor').each(function(){let textarea=this;$.trumbowyg.svgPath='./modules/editor/trumbowyg/ui/icons.svg';$(textarea).trumbowyg();$(textarea).closest('form').find('.trumbowyg-editor').droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let id=dropped.data('id');let url='./?_='+dropped.data('type')+'-'+id+'&subaction=show&embed=1&__OID__'+id+'__='+id;let insertText='';if(dropped.data('type')=='image')insertText='<img src="'+url+'" alt="" />';else insertText='<a href="'+url+'" />'+id+'</a>';$(textarea).trumbowyg('execCmd',{cmd:'insertHTML',param:insertText,forceCss:!1,})}})})});- \ No newline at end of file diff --git a/modules/template-engine/components/html/else/Else.class.php b/modules/template-engine/components/html/else/Else.class.php @@ -1,16 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\PHPBlockElement; - -class ElseComponent extends Component -{ - - public function createElement() - { - $else = new PHPBlockElement(); - $else->beforeBlock = 'if(!$if' . $this->getDepth() . ')'; - return $else; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/focus/Focus.class.php b/modules/template-engine/components/html/focus/Focus.class.php @@ -1,14 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\Element; - -class FocusComponent extends Component -{ - - public function createElement() - { - return new Element(null); - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/form/Form.class.php b/modules/template-engine/components/html/form/Form.class.php @@ -1,170 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\HtmlElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class FormComponent extends Component -{ - - public $method = 'POST'; - - public $name = ''; - - public $action = null; - - public $subaction = null; - - public $id = '<?php echo OR_ID ?>'; - - public $languageid = null; - public $modelid = null; - - public $label = '#{button_ok}'; - - public $apply = false; - public $cancel = true; - public $readonly = false; - - /** - * 'view' = Loads Action in the same view - * 'top' = Replaces whole workbench. - * @var string - */ - public $target = 'view'; - - public $enctype = 'application/x-www-form-urlencoded'; - - public $async = false; - - public $autosave = false; - - public $type = ''; - - public $afterSuccess; - - - public function createElement() - { - if ( ! $this->action ) - $this->action = $this->request->action; - - if ( ! $this->subaction ) - $this->subaction = $this->request->method; - - if ( ! $this->id ) - $this->id = $this->request->id; - - $form = new CMSElement('form'); - - if ($this->type == 'upload') - $this->submitFunction = ''; - - $form->addAttribute('name', $this->name); - $form->addAttribute('target', '_self'); - $form->addAttribute('data-target', $this->target); - $form->addAttribute('action', './'); - $form->addAttribute('data-method', $this->subaction); - $form->addAttribute('data-action', $this->action); - $form->addAttribute('data-id', $this->id); - $form->addAttribute('method', $this->method); - $form->addAttribute('enctype', $this->enctype); - $form->addStyleClass('or-form')->addStyleClass($this->action); - $form->addAttribute('data-async', $this->async); - $form->addAttribute('data-autosave', $this->autosave); - - if ($this->afterSuccess) - $form->addAttribute('data-after-success', $this->afterSuccess); - - if ($this->languageid) - $form->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'hidden') - ->addAttribute('name', REQ_PARAM_LANGUAGE_ID) - ->addAttribute('value', $this->languageid) - ); - - if ($this->modelid) - $form->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'hidden') - ->addAttribute('name', REQ_PARAM_MODEL_ID) - ->addAttribute('value', $this->modelid) - ); - - $form->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'hidden') - ->addAttribute('name', REQ_PARAM_TOKEN) - ->addAttribute('value', '<?php echo token();?>') // TODO escaping - ); - - $form->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'hidden') - ->addAttribute('name', REQ_PARAM_ACTION) - ->addAttribute('value', $this->action) - ); - $form->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'hidden') - ->addAttribute('name', REQ_PARAM_SUBACTION) - ->addAttribute('value', $this->subaction) - ); - $form->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'hidden') - ->addAttribute('name', REQ_PARAM_ID) - ->addAttribute('value', $this->id) - ); - - $actionBar = (new HtmlElement('div'))->addStyleClass('or-form-actionbar'); - - // Cancel-Button nicht anzeigen, wenn cancel==false. - if ($this->cancel) { - $actionBar->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'button') - ->addStyleClass('or-form-btn') - ->addStyleClass('or-form-btn--secondary') - ->addStyleClass('or-form-btn--cancel') - ->addAttribute('value', - Value::createExpression(ValueExpression::TYPE_MESSAGE, 'CANCEL') - ) - ); - } - - if ($this->apply && !$this->readonly) { - $actionBar->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'button') - ->addStyleClass('or-form-btn') - ->addStyleClass('or-form-btn--primary') - ->addStyleClass('or-form-btn--apply') - ->addAttribute('value', - Value::createExpression(ValueExpression::TYPE_MESSAGE, 'APPLY') - ) - ); - } - - if (!$this->readonly) { - $actionBar->addChild( - (new CMSElement('input')) - ->addAttribute('type', 'submit') - ->addStyleClass('or-form-btn') - ->addStyleClass('or-form-btn--primary') - ->addStyleClass('or-form-btn--save') - ->addAttribute('value', $this->label) - ); - } - - $this->adoptiveElement = (new HtmlElement('div'))->asChildOf($form); - - $form->addChild( $actionBar ); - - return $form; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/group/Group.class.php b/modules/template-engine/components/html/group/Group.class.php @@ -1,61 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\HtmlElement; - -/** - * A group. - */ -class GroupComponent extends Component -{ - - public $open = true; - public $show = true; - public $title; - public $icon; - - public function createElement() - { - $fieldset = new HtmlElement('fieldset'); - $fieldset->addStyleClass('or-group'); - $fieldset->addStyleClass('toggle-open-close'); - - if ( $this->open ) - $fieldset->addStyleClass('open'); - else - $fieldset->addStyleClass('closed'); - - if ( $this->show ) - $fieldset->addStyleClass('show' ); - - if ( $this->title ) - { - $legend = new HtmlElement('legend'); - $legend->addStyleClass('on-click-open-close'); - $legend->content( $this->title ); - - $image = new CMSElement('img'); - if ( $this->icon ) - $image->addAttribute('src','themes/default/images/icon/method/'.$this->icon.'.svg" />'); - $legend->addChild( $image ); - - $arrowRight = (new HtmlElement('div'))->addStyleClass('arrow')->addStyleClass('arrow-right')->addStyleClass('on-closed'); - $legend->addChild($arrowRight ); - - $arrowDown = (new HtmlElement('div'))->addStyleClass('arrow')->addStyleClass('arrow-down' )->addStyleClass('on-open' ); - $legend->addChild($arrowDown ); - - $fieldset->addChild( $legend ); - } - - $group = new HtmlElement('div'); - $group->addStyleClass('closable')->asChildOf($fieldset); - - $this->adoptiveElement = $group; - - return $fieldset; - } - -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/group/group.css b/modules/template-engine/components/html/group/group.css @@ -1,12 +0,0 @@ -.or-group { - border: 1px solid; - border-bottom: 0; - border-left: 0; - border-right: 0; - margin-top: 20px; - margin-bottom: 20px; - margin-left: 0px; - margin-right: 0px; - padding: 10px; -} -/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%22group.less%22%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22AAAA%3BCAEC%2CiBAAA%3BCAEA%3BCACA%3BCACA%3BCAEA%3BCACA%3BCACA%3BCACA%3BCACA%22%7D */- \ No newline at end of file diff --git a/modules/template-engine/components/html/group/group.js b/modules/template-engine/components/html/group/group.js @@ -1,5 +0,0 @@ -Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - - registerOpenClose( $(element).find('.or-group.toggle-open-close') ); - -}); diff --git a/modules/template-engine/components/html/group/group.less b/modules/template-engine/components/html/group/group.less @@ -1,22 +0,0 @@ -.or-group -{ - border:1px solid; - - border-bottom:0; - border-left:0; - border-right:0; - - margin-top:20px; - margin-bottom:20px; - margin-left:0px; - margin-right:0px; - padding:10px; -} - - - - - - - - diff --git a/modules/template-engine/components/html/group/group.min.css b/modules/template-engine/components/html/group/group.min.css @@ -1 +0,0 @@ -.or-group{border: 1px solid;border-bottom: 0;border-left: 0;border-right: 0;margin-top: 20px;margin-bottom: 20px;margin-left: 0px;margin-right: 0px;padding: 10px}- \ No newline at end of file diff --git a/modules/template-engine/components/html/group/group.min.js b/modules/template-engine/components/html/group/group.min.js @@ -1 +0,0 @@ -;Openrat.Workbench.afterViewLoadedHandler.add(function(e){registerOpenClose($(e).find('.or-group.toggle-open-close'))});- \ No newline at end of file diff --git a/modules/template-engine/components/html/header/Header.class.php b/modules/template-engine/components/html/header/Header.class.php @@ -1,37 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\Element; - -class HeaderComponent extends Component -{ - public $views; - - public function createElement() - { - return new Element(null); - } - - public function begin() - { - if(false) // DEACTIVATED - if (isset($this->views)) { - echo '<div class="headermenu">'; - - foreach (explode(',', $this->views) as $view) { - echo '<div class="toolbar-icon clickable">'; - echo '<a href="javascript:void(0);" title="<?php echo lang(\'MENU_' . strtoupper($view ). '\') ?>" data-type="dialog" data-name="<?php echo lang(\'MENU_' . strtoupper($view ). '\') ?>" data-method="' . $view . '">'; - echo '<img src="./themes/default/images/icon/action/' . $view . '.svg" title="<?php echo lang(\'MENU_' . $view . '_DESC\') ?>" /><?php echo lang(\'MENU_' . $view . '\') ?>'; - echo '</a>'; - echo '</div>'; - } - echo '</div>'; - - } - - } -} - - -?>- \ No newline at end of file diff --git a/modules/template-engine/components/html/hidden/Hidden.class.php b/modules/template-engine/components/html/hidden/Hidden.class.php @@ -1,27 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class HiddenComponent extends FieldComponent -{ - public $default; - - public function createElement() - { - $input = (new CMSElement('input'))->addAttribute('type','hidden'); - $input->addAttribute('name',$this->name); - - if ($this->default) - $input->addAttribute('value',$this->default); - else - $input->addAttribute('value',Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); - - //$input->addWrapper( (new HtmlElement('div'))->addStyleClass('inputholder')); - - return $input; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/if/If.class.php b/modules/template-engine/components/html/if/If.class.php @@ -1,52 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\PHPBlockElement; - -class IfComponent extends Component -{ - public $true; - public $false; - public $contains; - public $value; - public $empty; - public $equals; - public $lessthan; - public $greaterthan; - public $present; - public $not; - - - public function createElement() - { - $if = new PHPBlockElement(); - - $expr = '$if'.$this->getDepth().'='.(!isset($this->not)?'':'!').'('; - if ( $this->true ) - $expr .= $if->value($this->true); - elseif ($this->false) - $expr .= '!' . $if->value($this->false); - elseif ($this->contains) - $expr .= 'in_array('.$if->value($this->value).',explode(",",'.$if->value($this->contains).')'; - elseif ($this->equals) - $expr .= '' . $if->value($this->value).'=='.$if->value($this->equals); - elseif ($this->lessthan) - $expr .= 'intval(' . $if->value($this->lessthan).')>intval('.$if->value($this->value).')'; - elseif ($this->greaterthan) - $expr .= 'intval(' . $if->value($this->greaterthan).')<intval('.$if->value($this->value).')'; - elseif (! empty($this->present)) - $expr .= 'isset(' . '$'.$this->present.')'; // 'isset' verwenden! Nicht empty(), da false empty ist. - elseif (! empty($this->empty)) - $expr .= '(' . $if->textasvarname($this->empty).')==FALSE'; - elseif ($this->value) - $expr .= $if->value($this->value); - else - throw new \LogicException("Element 'if' has not enough parameters."); - $expr .= ');'; - - $if->beforeBlock = $expr . ' if($if'.$this->getDepth().')'; - - return $if; - } -} diff --git a/modules/template-engine/components/html/image/Image.class.php b/modules/template-engine/components/html/image/Image.class.php @@ -1,106 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; - -class ImageComponent extends Component -{ - public $class; - public $menu; - public $action; - public $method; - public $config; - public $file; - public $url; - public $icon; - public $type; - public $elementtype; - public $fileext; - public $tree; - public $notice; - public $size; - public $title; - - public function createElement() - { - $styleClasses = []; - $tagName = 'img'; - $file = ''; - $selfClosing = true; - - if ( $this->menu ) - { - $tagName = 'i'; - $styleClasses = ['image-icon','image-icon--menu-'.$this->menu]; - $selfClosing = false; - } - elseif ( $this->elementtype ) - { - $tagName = 'i'; - $styleClasses = ['image-icon','image-icon--action-el_'.$this->elementtype]; - $selfClosing = false; - } - elseif ( $this->action ) - { - $tagName = 'i'; - $styleClasses = ['image-icon','image-icon--action-'.$this->action]; - $selfClosing = false; - } - elseif ( $this->method ) - { - $tagName = 'i'; - $styleClasses = ['image-icon','image-icon--method-'.$this->method]; - $selfClosing = false; - } - elseif ( $this->type ) - { - $file = OR_THEMES_DIR.'default/images/icon_'.$this->type.IMG_ICON_EXT; - } - elseif ( $this->icon ) - { - $file = OR_THEMES_DIR.'default/images/icon/'.$this->icon.IMG_ICON_EXT; - } - elseif ( $this->notice ) - { - $file = OR_THEMES_DIR.'default/images/notice_'.$this->notice.IMG_ICON_EXT; - } - elseif ( $this->tree ) - { - $file = OR_THEMES_DIR.'default/images/tree_'.$this->tree.IMG_EXT; - } - elseif ( $this->url ) - { - $file = $this->url; - } - elseif ( $this->fileext ) - { - $file = OR_THEMES_DIR.'default/images/icon/'.$this->fileext; - } - elseif ( $this->file ) - { - $file = OR_THEMES_DIR.'default/images/icon/'.$this->file.IMG_ICON_EXT; - } - - if ( $this->class ) - { - $styleClasses .= ' '.$this->class; - } - - - $image = new CMSElement($tagName ); - - foreach( $styleClasses as $styleClass ) - $image->addStyleClass($styleClass); - - if($this->title) - $image->addAttribute('title',$this->title); - - if ( $file) - $image->addAttribute('src',$file); - - $image->selfClosing( $selfClosing ); - - return $image; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/image/image.css b/modules/template-engine/components/html/image/image.css @@ -1,2 +0,0 @@ - -/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22%22%7D */- \ No newline at end of file diff --git a/modules/template-engine/components/html/image/image.js b/modules/template-engine/components/html/image/image.js @@ -1,5 +0,0 @@ -/* -$(document).on('orViewLoaded',function(event, data) { - -}); -*/- \ No newline at end of file diff --git a/modules/template-engine/components/html/image/image.less b/modules/template-engine/components/html/image/image.less @@ -1,3 +0,0 @@ -img.image-icon { - -} - \ No newline at end of file diff --git a/modules/template-engine/components/html/image/image.min.css b/modules/template-engine/components/html/image/image.min.css diff --git a/modules/template-engine/components/html/image/image.min.js b/modules/template-engine/components/html/image/image.min.js @@ -1 +0,0 @@ -;- \ No newline at end of file diff --git a/modules/template-engine/components/html/include/Include.class.php b/modules/template-engine/components/html/include/Include.class.php @@ -1,15 +0,0 @@ -<?php - -namespace template_engine\components; - -/** - * Pseudo-Component. - * The include component is a pseudo component. The template compiler will resolve this component first and is including another xml source file. - */ -class IncludeComponent extends Component -{ - - public $file; - -} - diff --git a/modules/template-engine/components/html/input/Input.class.php b/modules/template-engine/components/html/input/Input.class.php @@ -1,90 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\HtmlElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class InputComponent extends FieldComponent -{ - public $default; - - public $type = 'text'; - - public $index; - - public $name; - - public $prefix; - - public $value; - - public $size; - - public $minlength = 0; - public $maxlength = 256; - - public $onchange; - - public $hint; - - public $icon; - - public $required = false; - - public $focus = false; - - public $label; - - - - public function createElement() - { - $input = (new CMSElement('input')); - - $input->addAttribute('name',$this->name); - if ( $this->readonly ) - $input->addAttribute('disabled','disabled'); - - if ( $this->required ) - $input->addAttribute( 'required','required'); - - if ( $this->hint ) - $input->addAttribute( 'placeholder',$this->hint ); - - if($this->focus) - $input->addAttribute( 'autofocus','autofocus'); - - - $input->addAttribute('type',$this->type); - $input->addAttribute('maxlength',$this->maxlength); - - if ( $this->minlength ) - $input->addAttribute('minlength',$this->minlength); - - if ( $this->class ) - $input->addStyleClass($this->class); - - if (isset($this->default)) - $input->addAttribute('value',$this->default); - else - $input->addAttribute('value',Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); - - // Unused: - //if(isset($this->icon)) - // echo '<img src="'.OR_THEMES_DIR.'default/images/icon_'.$this->htmlvalue($this->icon). IMG_ICON_EXT .'" width="16" height="16" />'; - - - if ( $this->label ) { - $label = new CMSElement('label'); - $label->addStyleClass('or-form-row')->addStyleClass('or-form-input'); - $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); - $input->asChildOf($label); - return $label; - } - - return (new HtmlElement('div'))->addStyleClass('inputholder')->addChild($input); - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/inputarea/Inputarea.class.php b/modules/template-engine/components/html/inputarea/Inputarea.class.php @@ -1,73 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class InputareaComponent extends FieldComponent -{ - - public $rows = 10; - - public $cols = 40; - - public $value; - - public $index; - - public $onchange; - - public $prefix; - - public $class = 'inputarea'; - - public $required = false; - - public $default; - - public $maxlength = 0; - - public $label; - - - public function createElement() - { - $textarea = (new CMSElement('textarea')); - - $textarea->addAttribute('name',$this->name); - $textarea->addAttribute('disabled',$this->readonly); - $textarea->addAttribute('maxlength',$this->maxlength); - - if ( $this->required ) - $textarea->addAttribute( 'required','required'); - - if ( $this->readonly && $this->required ) { - $hidden = (new CMSElement('input'))->addAttribute('type','hidden')->addAttribute('name',$this->name)->addAttribute('value','1'); - $textarea->addChild( $hidden ); - } - - if ($this->class ) - $textarea->addStyleClass($this->class); - - - - if (isset($this->default)) - $textarea->content($this->default); - else - $textarea->content(Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); - - - if ( $this->label ) { - $label = new CMSElement('label'); - $label->addStyleClass('or-form-row')->addStyleClass('or-form-checkbox'); - $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); - - $textarea->asChildOf($label); - return $label; - } - - return $textarea; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/insert/Insert.class.php b/modules/template-engine/components/html/insert/Insert.class.php @@ -1,39 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; - -class InsertComponent extends Component -{ - public $name; - public $url; - public $function; - - public function createElement() - { - if ( $this->function ) - { - // JS-Function einbinden - $script = new CMSElement('script'); - $script->addAttribute('type','text/javascript')->addAttribute('name','JavaScript'); - $script->content( $this->function.'();' ); - - return $script; - } - elseif ( $this->url ) - { - // IFrame - $iframe = new CMSElement('iframe'); - $iframe->selfClosing(false); - if ( $this->name ) - $iframe->addAttribute('name', $this->name); - if ( $this->url ) - $iframe->addAttribute('src' ,$this->url); - - return $iframe; - } - else - return null; - } -} diff --git a/modules/template-engine/components/html/label/Label.class.php b/modules/template-engine/components/html/label/Label.class.php @@ -1,42 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class LabelComponent extends Component -{ - - /** - * @deprecated - * @var - */ - public $for; - - /** - * @deprecated - * @var - */ - public $value; - - public $key; - - public $text; - - public function createElement() - { - $label = new CMSElement('label'); - $label->addStyleClass('label'); - - if ( $this->key ) - $label->content(Value::createExpression(ValueExpression::TYPE_MESSAGE,$this->key)); - - if ($this->text) - $label->content($this->text); - - return $label; - } - -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/link/Link.class.php b/modules/template-engine/components/html/link/Link.class.php @@ -1,189 +0,0 @@ -<?php - -namespace template_engine\components; - -use Html; -use JSON; -use modules\template_engine\CMSElement; - -/** - * Erzeugt einen HTML-Link. - * - * @author dankert - * - */ -class LinkComponent extends Component -{ - - public $var1; - - public $var2; - - public $var3; - - public $var4; - - public $var5; - - public $value1; - - public $value2; - - public $value3; - - public $value4; - - public $value5; - - public $target; - - public $type; - - public $action; - - public $subaction; - - public $title; - - public $class; - - public $url; - - public $config; - - public $id; - - public $accesskey; - - public $name; - - public $anchor; - - public $frame = '_self'; - - public $modal = false; - - public $afterSuccess; - - - - public function createElement() - { - - $link = new CMSElement('a'); - if ( $this->afterSuccess ) - $link->addAttribute('data-after-success',$this->afterSuccess); - - if ( $this->class ) - $link->addStyleClass($this->class); - - if ( $this->title ) - $link->addAttribute('title',$this->title); - - if ( $this->accesskey ) - $link->addAttribute('accesskey',$this->accesskey); - - if ( $this->frame ) - $link->addAttribute('target',$this->frame); - - if ( $this->name ) - $link->addAttribute('date-name',$this->name)->addAttribute('name',$this->name); - - if ( $this->url ) - $link->addAttribute('data-url',$this->url); - - if ( $this->type ) - $link->addAttribute('data-type',$this->type); - - if ( $this->action ) - $link->addAttribute('data-action',$this->action); - else - $link->addAttribute('data-action',''); - - if ( $this->subaction ) - $link->addAttribute('data-method',$this->subaction); - else - $link->addAttribute('data-method',''); - - if ( $this->id ) - $link->addAttribute('data-id',$this->id); - else - $link->addAttribute('data-id',''); - - $json = new JSON(); - $arrayvalues = array(); - foreach( $this->getExtraParamArray() as $varname => $varvalue ) - $arrayvalues[ $varname ] = $varvalue; - $link->addAttribute('data-extra',str_replace('"',"'",str_replace(array("\t", "\r", "\n"),'',$json->encode($arrayvalues)))); - - switch ($this->type) - { - case 'post': - - // Zusammenbau eines einzeligen JSON-Strings. - // Aufpassen: Keine doppelten Hochkommas, keine Zeilenumbrüche. - $data = '{'; - - $data.= "\"action\":\""; - if (! empty($this->action)) - $data.= $this->action; - else - $data.= $this->request->action; - $data.= "\","; - - $data.= "\"subaction\":\""; - if (! empty($this->subaction)) - $data.= $this->subaction; - else - $data.= $this->request->method; - $data.= "\","; - - $data.= "\"id\":\""; - if (! empty($this->id)) - $data.= $this->id; - else - $data.= ""; - $data.= "\","; - - $data.= '\"'.REQ_PARAM_TOKEN . "\":\"" . '<?php echo token() ?>' . "\","; - - foreach( $this->getExtraParamArray() as $varname => $varvalue ) - $data.= "\"".$varname."\":\"" . $varvalue . "\","; - - $data.= "\"none\":\"0\"}\""; - - $link->addAttribute('data-data',$data); - break; - - case 'html': - case 'external': - - $link->addAttribute('href',$this->url); - break; - - default: - $link->addAttribute('href','/#/'.$this->action.'/'.$this->id); - - } - - return $link; - } - - private function getExtraParamArray() - { - $vars = array(); - if (! empty($this->var1)) $vars[$this->var1] = $this->value1; - if (! empty($this->var2)) $vars[$this->var2] = $this->value2; - if (! empty($this->var3)) $vars[$this->var3] = $this->value3; - if (! empty($this->var4)) $vars[$this->var4] = $this->value4; - if (! empty($this->var5)) $vars[$this->var5] = $this->value5; - - // Bei Dialogen kann der Dialog auch beim Öffnen in einem neuen Fenster direkt geöffnet werden. - if ( $this->type=='dialog') - $vars += array('dialogAction'=>$this->action,'dialogMethod'=>$this->subaction); - - return $vars; - } -} -?> - diff --git a/modules/template-engine/components/html/link/link.js b/modules/template-engine/components/html/link/link.js @@ -1,8 +0,0 @@ -Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - - // Links aktivieren... - $(element).find('.clickable').orLinkify(); - -}); - - diff --git a/modules/template-engine/components/html/link/link.min.js b/modules/template-engine/components/html/link/link.min.js @@ -1 +0,0 @@ -;Openrat.Workbench.afterViewLoadedHandler.add(function(e){$(e).find('.clickable').orLinkify()});- \ No newline at end of file diff --git a/modules/template-engine/components/html/list/List.class.php b/modules/template-engine/components/html/list/List.class.php @@ -1,29 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\PHPBlockElement; - -class ListComponent extends Component -{ - - public $list; - - public $extract = false; - - public $key = 'list_key'; - - public $value = 'list_value'; - - public function createElement() - { - $list = new PHPBlockElement(); - $list->beforeBlock = 'foreach($'.$this->list.' as $' . $this->key . '=>$' . $this->value . ')'; - - if ($this->extract) - $list->inBlock = 'extract($' . $this->value . ');'; - - return $list; - } - -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/logo/Logo.class.php b/modules/template-engine/components/html/logo/Logo.class.php @@ -1,34 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement;use modules\template_engine\HtmlElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class LogoComponent extends Component -{ - public $name; - - public function createElement() - { - $logo = new CMSElement('div'); - $logo->addStyleClass('line logo'); - - $label = (new HtmlElement('div'))->addStyleClass('label'); - - $image = (new CMSElement('img'))->addAttribute('src','themes/default/images/logo_'.$this->name.'.png')->addAttribute('border','0'); - $label->addChild($image); - - $logo->addChild($label); - - $holder = (new HtmlElement('div'))->addStyleClass('input'); - $logo->addChild($holder); - - $holder->addChild( (new CMSElement('h2'))->content(Value::createExpression( ValueExpression::TYPE_MESSAGE,'logo_'.$this->name ))); - $holder->addChild( (new CMSElement('p') )->content(Value::createExpression( ValueExpression::TYPE_MESSAGE,'logo_'.$this->name.'_text'))); - - return $logo; - } - -} diff --git a/modules/template-engine/components/html/newline/Newline.class.php b/modules/template-engine/components/html/newline/Newline.class.php @@ -1,19 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\Element; -use modules\template_engine\HtmlElement; - -/** - * Newline-Component - */ -class NewlineComponent extends Component -{ - - public function createElement() - { - return (new HtmlElement('br')); - } -} - diff --git a/modules/template-engine/components/html/output/Output.class.php b/modules/template-engine/components/html/output/Output.class.php @@ -1,14 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\Element; - -class OutputComponent extends Component -{ - public function createElement() - { - // No content. - return new Element(null ); - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/page/Page.class.php b/modules/template-engine/components/html/page/Page.class.php @@ -1,15 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\Element; - -class PageComponent extends Component -{ - public function createElement() - { - // No content. - return new Element(null ); - } -} - diff --git a/modules/template-engine/components/html/part/Part.class.php b/modules/template-engine/components/html/part/Part.class.php @@ -1,26 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\HtmlElement; - -class PartComponent extends Component -{ - public $class = ''; - public $id; - - public function createElement() - { - $element = (new CMSElement('div'))->selfClosing(false); - - foreach( explode(',',$this->class ) as $styleClass ) - $element->addStyleClass( $styleClass ); - - if ( $this->id ) - $element->addAttribute('id',$this->id); - - return $element; - } - -} diff --git a/modules/template-engine/components/html/password/Password.class.php b/modules/template-engine/components/html/password/Password.class.php @@ -1,39 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\HtmlElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class PasswordComponent extends FieldComponent -{ - - public $default; - - public $size = 40; - - public $maxlength = 256; - - public function createElement() - { - $input = (new CMSElement('input'))->addAttribute('type','password'); - - $input->addAttribute('name',$this->name); - /*echo ' id="<?php echo REQUEST_ID ?>_' . $this->htmlvalue($this->name) . '"'; - */ - - $input->addAttribute('size',$this->size); - $input->addAttribute('maxlength',$this->maxlength); - $input->addStyleClass($this->class); - - - if ($this->default) - $input->addAttribute('value',$this->default); - else - $input->addAttribute('value',Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); - - return (new HtmlElement('div'))->addStyleClass('inputholder')->addChild($input); - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/qrcode/Qrcode.class.php b/modules/template-engine/components/html/qrcode/Qrcode.class.php @@ -1,27 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class QrcodeComponent extends Component -{ - - public $value; - - - public function createElement() - { - $qrcode = (new CMSElement('i')) - ->addStyleClass('image-icon') - ->addStyleClass('image-icon--menu-qrcode') - ->addStyleClass('or-qrcode') - ->addStyleClass('or-info') - ->addAttribute('data-qrcode', $this->value) - ->addAttribute('title', Value::createExpression(ValueExpression::TYPE_MESSAGE, 'QRCODE_SHOW')); - - return $qrcode; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/qrcode/qrcode.js b/modules/template-engine/components/html/qrcode/qrcode.js @@ -1,28 +0,0 @@ - -Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - - - // Show QR-Code - $(element).find('.or-qrcode').mouseover( function() { - - let element = this; - if ( $(element).children().length > 0 ) - return; - - let wrapper = $('<div class="or-info-popup"></div>'); - - $(element).append(wrapper); - - var qrcodetext = $(element).attr('data-qrcode'); - - $(wrapper).qrcode( { render : 'div', - text : qrcodetext, - fill : 'currentColor' } ); - - - // Title is disturbing the qr-code. Do not inherit it. - wrapper.attr('title',''); - - } ); - -} );- \ No newline at end of file diff --git a/modules/template-engine/components/html/qrcode/qrcode.min.js b/modules/template-engine/components/html/qrcode/qrcode.min.js @@ -1 +0,0 @@ -;Openrat.Workbench.afterViewLoadedHandler.add(function(r){$(r).find('.or-qrcode').mouseover(function(){let r=this;if($(r).children().length>0)return;let wrapper=$('<div class="or-info-popup"></div>');$(r).append(wrapper);var e=$(r).attr('data-qrcode');$(wrapper).qrcode({render:'div',text:e,fill:'currentColor'});wrapper.attr('title','')})});- \ No newline at end of file diff --git a/modules/template-engine/components/html/radio/Radio.class.php b/modules/template-engine/components/html/radio/Radio.class.php @@ -1,62 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class RadioComponent extends FieldComponent -{ - - // Bisher nicht in Benutzung. - public $readonly = false; - - public $value; - - public $prefix=''; - - public $suffix=''; - - public $class = ''; - - public $onchange; - - public $children; - - public $checked; - - public $label = ''; - - - - public function createElement() - { - - $radio = (new CMSElement('input'))->addAttribute('type','radio'); - - - $radio->addAttribute('name',$this->name); - $radio->addAttribute('disabled',$this->readonly); - $radio->addAttribute('value',$this->value); - $radio->addAttribute('checked',Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); - - if ( $this->readonly && $this->required ) { - $hidden = (new CMSElement('input'))->addAttribute('type','hidden')->addAttribute('name',$this->name)->addAttribute('value','1'); - $radio->addChild( $hidden ); - } - - if ( $this->class ) - $radio->addStyleClass($this->class); - - if ( $this->label ) { - $label = new CMSElement('label'); - $label->addStyleClass('or-form-row')->addStyleClass('or-form-radio'); - $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); - $radio->asChildOf($label); - return $label; - } - - return $radio; - } -} diff --git a/modules/template-engine/components/html/radiobox/Radiobox.class.php b/modules/template-engine/components/html/radiobox/Radiobox.class.php @@ -1,56 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\PHPBlockElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class RadioboxComponent extends Component -{ - - public $list; - - public $name; - - public $default; - - /** - * @deprecated - */ - public $onchange; - - public $title; - - public $class; - - - public function createElement() - { - $radiobox = new PHPBlockElement(); - - $radiobox->beforeBlock = 'foreach( $'.$this->list.' as $_key=>$_value)'; - - if ( $this->default ) - $value = $this->default; - else - $value = '$'.$this->name; - - $label = (new CMSElement('label'))->asChildOf( $radiobox ); - - (new CMSElement('input')) - ->addAttribute('type','radio')->addAttribute('name',$this->name) - ->addAttribute('value',Value::createExpression(ValueExpression::TYPE_DATA_VAR,'_key')) - ->addConditionalAttribute('checked','$_key=='.$value,'checked') - ->asChildOf($label); - - (new CMSElement('span')) - ->content( Value::createExpression(ValueExpression::TYPE_DATA_VAR,'_value')) - ->asChildOf( $label ); - (new CMSElement('br')) - ->asChildOf( $radiobox ); - - return $radiobox; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/row/Row.class.php b/modules/template-engine/components/html/row/Row.class.php @@ -1,26 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; - -class RowComponent extends Component -{ - - public $class = ''; - - public $id = ''; - - public function createElement() - { - $row = new CMSElement('tr' ); - - if ($this->class) - $row->addStyleClass($this->class); - - if ($this->id) - $row->addAttribute('data-id',$this->id); - - return $row; - } -} diff --git a/modules/template-engine/components/html/selectbox/Selectbox.class.php b/modules/template-engine/components/html/selectbox/Selectbox.class.php @@ -1,110 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\PHPBlockElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class SelectboxComponent extends Component -{ - - public $list; - - public $name; - - public $default; - - /** - * Titel - * @var unknown - */ - public $title; - - /** - * Style-Klasse - */ - public $class; - - /** - * Leere Auswahlmöglichkeit hinzufügen. - * @var string - */ - public $addempty = false; - - /** - * Mehrfachauswahl möglich? - * @var string - */ - public $multiple = false; - - /** - * Größe des Eingabefeldes - * @var integer - */ - public $size = 1; - - /** - * Ob es sich bei den Option-Werten um Sprachschlüssel handelt. - * @var string - */ - public $lang = false; - - - public $label; - - - - public function createElement() - { - $selectbox = (new CMSElement('select')); - - - $selectbox->addAttribute('name',$this->name); - //$selectbox->addAttribute('disabled',$this->readonly); - - - if ( $this->class ) - $selectbox->addStyleClass($this->class); - - if ( $this->title ) - $selectbox->addAttribute('title',$this->title); - - if ( $this->multiple ) - $selectbox->addAttribute('multiple','multiple'); - - $selectbox->addAttribute('size',$this->size); - - if ( $this->addempty ) - $selectbox->addChild( (new CMSElement('option'))->addAttribute('value','')->content( Value::createExpression(ValueExpression::TYPE_MESSAGE,'LIST_ENTRY_EMPTY'))); - - $optionLoop = (new PHPBlockElement())->asChildOf($selectbox); - - if ( $this->default ) - $value = $this->default; - else - $value = '$'.$this->name; - - // Create the option list. - $optionLoop->beforeBlock = 'foreach($'.$this->list.' as $_key=>$_value)'; - $option = (new CMSElement('option')) - ->addAttribute('value',Value::createExpression( ValueExpression::TYPE_DATA_VAR,'_key')) - ->content(Value::createExpression( ValueExpression::TYPE_DATA_VAR,'_value')) - ->addConditionalAttribute('selected','$_key=='.$value,'selected'); - - $optionLoop->addChild($option); - - // Wrap into a label, if necessary. - if ( $this->label ) { - $label = new CMSElement('label'); - $label->addStyleClass('or-form-row')->addStyleClass('or-form-input'); - $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); - $label->addChild( $selectbox ); - return $label; - } - else { - return $selectbox; - } - } -} diff --git a/modules/template-engine/components/html/selector/Selector.class.php b/modules/template-engine/components/html/selector/Selector.class.php @@ -1,47 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; - -class SelectorComponent extends Component -{ - - public $types; - - public $name; - - public $id; - - public $folderid; - - public $param; - - public function createElement() - { - return new CMSElement(null); - } - - public function unused____begin() - { - $types = mlvalue($this->types); - $name = $this->htmlvalue($this->name); - $id = $this->htmlvalue($this->id); - $folderid = $this->htmlvalue($this->folderid); - $param = $this->htmlvalue($this->param); - - echo <<<HTML -<div class="selector"> -<div class="inputholder or-droppable"> -<input type="hidden" class="or-selector-link-value" name="{$param}" value="{$id}" /> -<input type="text" class="or-selector-link-name" value="{$name}" placeholder="{$name}" /> -</div> -<div class="dropdown"></div> -<div class="tree selector" data-types="{types}" data-init-id="{$id}" data-init-folderid="{$folderid}"> -</div> -</div> -HTML; - } -} - -?>- \ No newline at end of file diff --git a/modules/template-engine/components/html/set/Set.class.php b/modules/template-engine/components/html/set/Set.class.php @@ -1,32 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\PHPBlockElement; - -class SetComponent extends Component -{ - public $var; - public $value; - public $key; - - - public function createElement() - { - $set = new PHPBlockElement(); - - if ($this->value) - { - if ($this->key) - $set->inBlock = '$'.$set->varname($this->var).'= '.$set->value($this->value).'['.$set->value($this->key).'];'; - else - $set->inBlock = '$'.$set->varname($this->var).'= '.$set->value($this->value).';'; - } - else { - // Unset - $set->inBlock = 'unset($'.$set->varname($this->var).')'; - } - - return $set; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/table/Table.class.php b/modules/template-engine/components/html/table/Table.class.php @@ -1,44 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; -use modules\template_engine\HtmlElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class TableComponent extends HtmlComponent -{ - public $filter = true; - - public $width = '100%'; - - - public function createElement() - { - $tableWrapper = (new HtmlElement('div'))->addStyleClass('or-table-wrapper'); - - if ( $this->filter) - { - $filterInput = (new CMSElement('input'))->addAttribute('type','search')->addAttribute('name','filter')->addAttribute('placeholder',Value::createExpression(ValueExpression::TYPE_MESSAGE,'SEARCH_FILTER')); - $filter = (new HtmlElement('div'))->addStyleClass('or-table-filter')->addChild( $filterInput ); - $tableWrapper->addChild($filter); - } - - $tableContent = (new HtmlElement('div'))->addStyleClass('or-table-area'); - - $table = new CMSElement('table'); - - $tableWrapper->addChild( $tableContent->addChild( $table) ); - - if ( $this->class) - $table->addStyleClass($this->class); - - if ( $this->width) - $table->addAttribute('width',$this->width); - - $this->adoptiveElement = $table; - - return $tableWrapper; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/table/table.css b/modules/template-engine/components/html/table/table.css @@ -1,175 +0,0 @@ -.or-table-wrapper .or-table-area { - /* Responsive Tables */ - /* T a b l e s */ -} -@media screen and (max-width: 40em) { - .or-table-wrapper .or-table-area { - overflow-x: auto; - } -} -.or-table-wrapper .or-table-area table { - overflow: auto; - border: 2px; - width: 100%; - /* Notizen */ - /* Kalender */ - /* Notizen */ - /* Kalender */ - /* Message of the day */ - /* D i f f */ - /* Hilfe-Texte */ - /* Logo */ -} -.or-table-wrapper .or-table-area table tr.headline > td, -.or-table-wrapper .or-table-area table tr > th { - padding: 3px; - font-weight: bold; -} -.or-table-wrapper .or-table-area table tr.headline > td.sort-asc > span:last-child:after, -.or-table-wrapper .or-table-area table tr > th.sort-asc > span:last-child:after { - content: " \2193"; -} -.or-table-wrapper .or-table-area table tr.headline > td.sort-desc > span:last-child:after, -.or-table-wrapper .or-table-area table tr > th.sort-desc > span:last-child:after { - content: " \2191"; -} -.or-table-wrapper .or-table-area table tr.data > td { - padding: 3px; -} -.or-table-wrapper .or-table-area table tr > td { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - max-width: 0; -} -.or-table-wrapper .or-table-area table td.readonly { - font-style: italic; - font-weight: normal; -} -.or-table-wrapper .or-table-area table td.default { - font-style: normal; - font-weight: normal; -} -.or-table-wrapper .or-table-area table td.changed { - font-style: normal; - font-weight: bold; -} -.or-table-wrapper .or-table-area table td.notice { - margin: 0px; - padding: 5%; - text-align: center; -} -.or-table-wrapper .or-table-area table.notice { - width: 100%; - border: 1px solid; - border-spacing: 0px; -} -.or-table-wrapper .or-table-area table.notice th { - padding: 2px; - white-space: nowrap; - border-bottom: 1px solid #000000; - font-weight: normal; - text-align: left; -} -.or-table-wrapper .or-table-area table.notice tr.warning { - margin: 0px; - padding: 0px; -} -.or-table-wrapper .or-table-area table.calendar { - table-layout: fixed; - border-collapse: collapse; - text-align: center; -} -.or-table-wrapper .or-table-area table.calendar td { - border: 1px dotted; -} -.or-table-wrapper .or-table-area table td.notice { - margin: 0px; - padding: 5%; - text-align: center; -} -.or-table-wrapper .or-table-area table.notice { - width: 100%; - border: 1px solid; - border-spacing: 0px; -} -.or-table-wrapper .or-table-area table.notice th { - padding: 2px; - white-space: nowrap; - border-bottom: 1px solid #000000; - font-weight: normal; - text-align: left; -} -.or-table-wrapper .or-table-area table.notice tr.warning { - margin: 0px; - padding: 0px; -} -.or-table-wrapper .or-table-area table.calendar { - table-layout: fixed; - border-collapse: collapse; - text-align: center; -} -.or-table-wrapper .or-table-area table.calendar td { - border: 1px dotted; -} -.or-table-wrapper .or-table-area table td.motd { - border-left: 3px solid red; - border-right: 3px solid red; - font-weight: bold; - padding: 10px; - margin: 10px; -} -.or-table-wrapper .or-table-area table td:hover > div.onrowvisible { - visibility: visible; -} -.or-table-wrapper .or-table-area table tr.diff { - /* Unveränderter Text */ - /* Entfernter Text */ - /* Hinzugefuegter Text */ - /* Geaenderter Text */ -} -.or-table-wrapper .or-table-area table tr.diff > td.line { - background-color: #000000; - padding-right: 2px; - border-right: 3px solid #000000; - text-align: right; - margin-right: 2px; -} -.or-table-wrapper .or-table-area table tr.diff > td.old { - background-color: red; -} -.or-table-wrapper .or-table-area table tr.diff td.new { - background-color: green; -} -.or-table-wrapper .or-table-area table tr.diff td.notequal { - background-color: yellow; -} -.or-table-wrapper .or-table-area table tr td.help { - font-style: italic; -} -.or-table-wrapper .or-table-area table tr.headline td.help { - /* - border-bottom:1px solid @color-overridden-by-theme; - */ - font-style: normal; -} -.or-table-wrapper .or-table-area table td.logo { - padding: 10px; - margin: 0px; -} -.or-table-wrapper .or-table-filter { - width: 100%; - text-align: right; -} -.or-table-wrapper .or-table-filter input { - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - -khtml-border-radius: 3px; - padding: 0.5em; - margin: 1em; - background-color: #000000; - color: #000000; - border: 1px solid #000000; -} -/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%22table.less%22%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22AASA%2CiBAEI%3B%3B%3B%3BAAQI%2CmBALoC%3BCAKpC%2CiBARJ%3BEAKQ%3B%3B%3BAAPZ%2CiBAEI%2CeASI%3BCACI%3BCACA%3BCACA%3B%3B%3B%3B%3B%3B%3B%3B%3B%3BAAdZ%2CiBAEI%2CeASI%2CMAKI%2CGAAE%2CSAAY%3BAAhB1B%2CiBAEI%2CeASI%2CMAMI%2CGAAK%3BCAED%3BCACA%3B%3BAAEA%2CiBApBZ%2CeASI%2CMAKI%2CGAAE%2CSAAY%2CKAMT%2CSAAY%2COAAI%2CWAAW%3BAAA5B%2CiBApBZ%2CeASI%2CMAMI%2CGAAK%2CKAKA%2CSAAY%2COAAI%2CWAAW%3BCACxB%2CSAAS%2CQAAT%3B%3BAAEJ%2CiBAvBZ%2CeASI%2CMAKI%2CGAAE%2CSAAY%2CKAST%2CUAAa%2COAAI%2CWAAW%3BAAA7B%2CiBAvBZ%2CeASI%2CMAMI%2CGAAK%2CKAQA%2CUAAa%2COAAI%2CWAAW%3BCACzB%2CSAAS%2CQAAT%3B%3BAA1BpB%2CiBAEI%2CeASI%2CMAmBI%2CGAAE%2CKAAQ%3BCACN%3B%3BAA%5C%2FBhB%2CiBAEI%2CeASI%2CMAuBI%2CGAAK%3BCACD%3BCACA%3BCACA%3BCACA%3B%3BAAtChB%2CiBAEI%2CeASI%2CMA8BI%2CGAAE%3BCACE%3BCACA%3B%3BAA3ChB%2CiBAEI%2CeASI%2CMAkCI%2CGAAE%3BCACE%3BCACA%3B%3BAA%5C%2FChB%2CiBAEI%2CeASI%2CMAsCI%2CGAAE%3BCACE%3BCACA%3B%3BAAnDhB%2CiBAEI%2CeASI%2CMA2CI%2CGAAE%3BCACE%3BCACA%3BCACA%3B%3BAAGJ%2CiBA1DR%2CeASI%2CMAiDK%3BCACG%3BCACA%2CiBAAA%3BCACA%3B%3BAAHJ%2CiBA1DR%2CeASI%2CMAiDK%2COAIG%3BCACI%3BCACA%3BCACA%2CgCAAA%3BCACA%3BCACA%3B%3BAATR%2CiBA1DR%2CeASI%2CMAiDK%2COAeG%2CGAAE%3BCACE%3BCACA%3B%3BAAKR%2CiBAhFR%2CeASI%2CMAuEK%3BCACG%3BCACA%3BCACA%3B%3BAAHJ%2CiBAhFR%2CeASI%2CMAuEK%2CSAKG%3BCACI%2CkBAAA%3B%3BAAxFpB%2CiBAEI%2CeASI%2CMAkFI%2CGAAE%3BCACE%3BCACA%3BCACA%3B%3BAAGJ%2CiBAjGR%2CeASI%2CMAwFK%3BCACG%3BCACA%2CiBAAA%3BCACA%3B%3BAAGJ%2CiBAvGR%2CeASI%2CMA8FK%2COAAQ%3BCACL%3BCACA%3BCACA%2CgCAAA%3BCACA%3BCACA%3B%3BAAMJ%2CiBAlHR%2CeASI%2CMAyGK%2COAAQ%2CGAAE%3BCACP%3BCACA%3B%3BAAIJ%2CiBAxHR%2CeASI%2CMA%2BGK%3BCACG%3BCACA%3BCACA%3B%3BAAGJ%2CiBA9HR%2CeASI%2CMAqHK%2CSAAU%3BCACP%2CkBAAA%3B%3BAAjIhB%2CiBAEI%2CeASI%2CMAyHI%2CGAAE%3BCACE%2C0BAAA%3BCACA%2C2BAAA%3BCACA%3BCACA%3BCACA%3B%3BAAzIhB%2CiBAEI%2CeASI%2CMAgII%2CGAAE%2CMAAS%2CMAAG%3BCACV%3B%3BAA5IhB%2CiBAEI%2CeASI%2CMAqII%2CGAAE%3B%3B%3B%3B%3B%3BAAhJd%2CiBAEI%2CeASI%2CMAqII%2CGAAE%2CKACI%2CKAAE%3BCACA%2CyBAAA%3BCACA%3BCACA%2C%2BBAAA%3BCACA%3BCACA%3B%3BAAtJpB%2CiBAEI%2CeASI%2CMAqII%2CGAAE%2CKAcI%2CKAAE%3BCACA%3B%3BAA%5C%2FJpB%2CiBAEI%2CeASI%2CMAqII%2CGAAE%2CKAmBE%2CGAAE%3BCACE%3B%3BAApKpB%2CiBAEI%2CeASI%2CMAqII%2CGAAE%2CKAwBE%2CGAAE%3BCACE%3B%3BAAzKpB%2CiBAEI%2CeASI%2CMAmKI%2CGAAG%2CGAAE%3BCACD%3B%3BAA%5C%2FKhB%2CiBAEI%2CeASI%2CMAuKI%2CGAAE%2CSAAU%2CGAAE%3B%3B%3B%3BCAIV%3B%3BAAtLhB%2CiBAEI%2CeASI%2CMAgLI%2CGAAE%3BCACE%3BCACA%3B%3BAA7LhB%2CiBAsMI%3BCACI%3BCACA%3B%3BAAxMR%2CiBAsMI%2CiBAII%3BCAhNJ%2CkBAAA%3BCACA%2CuBAAA%3BCACA%2C0BAAA%3BCACA%2CyBAAA%3BCA%2BMQ%3BCACA%3BCACA%2CyBAAA%3BCACA%2CcAAA%3BCACA%2CyBAAA%22%7D */- \ No newline at end of file diff --git a/modules/template-engine/components/html/table/table.js b/modules/template-engine/components/html/table/table.js @@ -1,87 +0,0 @@ -Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - - - // Manuelles Sortieren von Tabellen per Drag and drop. - $(element).find('table.or-table--sortable > tbody').sortable(); - - - $(element).find('table.or-table--sortable > tbody').closest('form').submit( function() { - - // Analyse the order of the objects in this folder. - var order = new Array(); - - $(this).find('table.or-table--sortable').find('tbody > tr.data').each(function () { - let objectid = $(this).data('id'); - order.push(objectid); - }); - - // Set the comma-separated list of objects into a input field. - $(this).find('input[name=order]').val(order.join(',')); - } - ); - - - // Alle Checkboxen setzen oder nicht setzen. - $(element).find('tr.headline > td > input.checkbox').click( function() { - $(this).closest('table').find('tr.data > td > input.checkbox').attr('checked',Boolean( $(this).attr('checked') ) ); - }); - - /** - * Table-Filter. - */ - $(element).find('.or-table-filter > input').keyup( function() { - - let filterExpression = $(this).val().toLowerCase(); - - let table = $(this).parents('.or-table-wrapper').find('table'); - table.addClass('loader'); - - setTimeout( () => { - table.find('tr:not(.headline)').filter(function () { - $(this).toggle($(this).text().toLowerCase().indexOf(filterExpression) > -1) - }) - table.removeClass('loader'); - }, 50); - - } ); - - - /** - * Table-Sortierung. - */ - $(element).find('table > tbody > tr.headline > td, table > tbody > tr > th').click( function() { - - let column = $(this); - let table = column.parents('table'); - table.addClass('loader'); - - let isAscending = !column.hasClass('sort-asc'); - table.find('tr.headline > td, tr > th').removeClass('sort-asc sort-desc'); - if ( isAscending ) column.addClass('sort-asc'); else column.addClass('sort-desc'); - - setTimeout(function () { // Sorting should be asynchronous, because we do not want to block the UI. - - let rows = table.find('tr:gt(0)').toArray().sort(comparer(column.index())) - if (!isAscending) { - rows = rows.reverse() - } - for (var i = 0; i < rows.length; i++) { - table.append(rows[i]) - } - table.removeClass('loader'); - }, 50); - - } ); - - function comparer(index) { - return function(a, b) { - let valA = getCellValue(a, index), valB = getCellValue(b, index) - return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB) - } - } - - function getCellValue(row, index) { - return $(row).children('td').eq(index).text(); - } - -});- \ No newline at end of file diff --git a/modules/template-engine/components/html/table/table.less b/modules/template-engine/components/html/table/table.less @@ -1,221 +0,0 @@ -@color-overridden-by-theme: black; - -.border-radius (@radius) { - border-radius: @radius; - -moz-border-radius: @radius; - -webkit-border-radius: @radius; - -khtml-border-radius: @radius; -} - -.or-table-wrapper { - - .or-table-area { - - /* Responsive Tables */ - @media screen and (max-width: 40em) { - - overflow-x: auto; - } - - /* T a b l e s */ - table { - overflow: auto; - border: 2px; - width: 100%; - - tr.headline > td, - tr > th { - - padding: 3px; - font-weight: bold; - - &.sort-asc > span:last-child:after { - content: " \2193"; - } - &.sort-desc > span:last-child:after { - content: " \2191"; - } - } - - tr.data > td { - padding: 3px; - } - - tr > td { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - max-width: 0; - } - - td.readonly { - font-style: italic; - font-weight: normal; - } - td.default { - font-style: normal; - font-weight: normal; - } - td.changed { - font-style: normal; - font-weight: bold; - } - /* Notizen */ - td.notice { - margin: 0px; - padding: 5%; - text-align: center; - } - - &.notice { - width: 100%; - border: 1px solid; - border-spacing: 0px; - th { - padding: 2px; - white-space: nowrap; - border-bottom: 1px solid @color-overridden-by-theme; - font-weight: normal; - text-align: left; - } - - tr.error { - } - - tr.warning { - margin: 0px; - padding: 0px; - } - } - - /* Kalender */ - &.calendar { - table-layout: fixed; - border-collapse: collapse; - text-align: center; - - td { - border: 1px dotted; - } - } - - /* Notizen */ - td.notice { - margin: 0px; - padding: 5%; - text-align: center; - } - - &.notice { - width: 100%; - border: 1px solid; - border-spacing: 0px; - } - - &.notice th { - padding: 2px; - white-space: nowrap; - border-bottom: 1px solid @color-overridden-by-theme; - font-weight: normal; - text-align: left; - } - - &.notice tr.error { - } - - &.notice tr.warning { - margin: 0px; - padding: 0px; - } - - /* Kalender */ - &.calendar { - table-layout: fixed; - border-collapse: collapse; - text-align: center; - } - - &.calendar td { - border: 1px dotted; - } - /* Message of the day */ - td.motd { - border-left: 3px solid red; - border-right: 3px solid red; - font-weight: bold; - padding: 10px; - margin: 10px; - } - td:hover > div.onrowvisible { - visibility: visible; - } - - /* D i f f */ - tr.diff { - > td.line { - background-color: @color-overridden-by-theme; - padding-right: 2px; - border-right: 3px solid @color-overridden-by-theme; - text-align: right; - margin-right: 2px; - } - - /* Unveränderter Text */ - > td.equal { - } - - /* Entfernter Text */ - > td.old { - background-color: red; - } - - /* Hinzugefuegter Text */ - td.new { - background-color: green; - } - - /* Geaenderter Text */ - td.notequal { - background-color: yellow; - } - } - - /* Hilfe-Texte */ - tr td.help { - font-style: italic; - } - - tr.headline td.help { - /* - border-bottom:1px solid @color-overridden-by-theme; - */ - font-style: normal; - - } - - /* Logo */ - td.logo { - padding: 10px; - margin: 0px; - } - - - - } - - } - - .or-table-filter { - width: 100%; - text-align: right; - - input { - .border-radius(3px); - padding: 0.5em; - margin: 1em; - background-color: @color-overridden-by-theme; - color: @color-overridden-by-theme; - border: 1px solid @color-overridden-by-theme; - } - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/table/table.min.css b/modules/template-engine/components/html/table/table.min.css @@ -1 +0,0 @@ -@media screen and (max-width: 40em){.or-table-wrapper .or-table-area{overflow-x: auto}}.or-table-wrapper .or-table-area table{overflow: auto;border: 2px;width: 100%}.or-table-wrapper .or-table-area table tr.headline > td,.or-table-wrapper .or-table-area table tr > th{padding: 3px;font-weight: bold}.or-table-wrapper .or-table-area table tr.headline > td.sort-asc > span:last-child:after,.or-table-wrapper .or-table-area table tr > th.sort-asc > span:last-child:after{content: " \2193"}.or-table-wrapper .or-table-area table tr.headline > td.sort-desc > span:last-child:after,.or-table-wrapper .or-table-area table tr > th.sort-desc > span:last-child:after{content: " \2191"}.or-table-wrapper .or-table-area table tr.data > td{padding: 3px}.or-table-wrapper .or-table-area table tr > td{white-space: nowrap;text-overflow: ellipsis;overflow: hidden;max-width: 0}.or-table-wrapper .or-table-area table td.readonly{font-style: italic;font-weight: normal}.or-table-wrapper .or-table-area table td.default{font-style: normal;font-weight: normal}.or-table-wrapper .or-table-area table td.changed{font-style: normal;font-weight: bold}.or-table-wrapper .or-table-area table td.notice{margin: 0px;padding: 5%;text-align: center}.or-table-wrapper .or-table-area table.notice{width: 100%;border: 1px solid;border-spacing: 0px}.or-table-wrapper .or-table-area table.notice th{padding: 2px;white-space: nowrap;border-bottom: 1px solid #000;font-weight: normal;text-align: left}.or-table-wrapper .or-table-area table.notice tr.warning{margin: 0px;padding: 0px}.or-table-wrapper .or-table-area table.calendar{table-layout: fixed;border-collapse: collapse;text-align: center}.or-table-wrapper .or-table-area table.calendar td{border: 1px dotted}.or-table-wrapper .or-table-area table td.notice{margin: 0px;padding: 5%;text-align: center}.or-table-wrapper .or-table-area table.notice{width: 100%;border: 1px solid;border-spacing: 0px}.or-table-wrapper .or-table-area table.notice th{padding: 2px;white-space: nowrap;border-bottom: 1px solid #000;font-weight: normal;text-align: left}.or-table-wrapper .or-table-area table.notice tr.warning{margin: 0px;padding: 0px}.or-table-wrapper .or-table-area table.calendar{table-layout: fixed;border-collapse: collapse;text-align: center}.or-table-wrapper .or-table-area table.calendar td{border: 1px dotted}.or-table-wrapper .or-table-area table td.motd{border-left: 3px solid #f00;border-right: 3px solid #f00;font-weight: bold;padding: 10px;margin: 10px}.or-table-wrapper .or-table-area table td:hover > div.onrowvisible{visibility: visible}.or-table-wrapper .or-table-area table tr.diff > td.line{background-color: #000;padding-right: 2px;border-right: 3px solid #000;text-align: right;margin-right: 2px}.or-table-wrapper .or-table-area table tr.diff > td.old{background-color: red}.or-table-wrapper .or-table-area table tr.diff td.new{background-color: green}.or-table-wrapper .or-table-area table tr.diff td.notequal{background-color: yellow}.or-table-wrapper .or-table-area table tr td.help{font-style: italic}.or-table-wrapper .or-table-area table tr.headline td.help{font-style: normal}.or-table-wrapper .or-table-area table td.logo{padding: 10px;margin: 0px}.or-table-wrapper .or-table-filter{width: 100%;text-align: right}.or-table-wrapper .or-table-filter input{border-radius: 3px;-moz-border-radius: 3px;-webkit-border-radius: 3px;-khtml-border-radius: 3px;padding: 0.5em;margin: 1em;background-color: #000;color: #000;border: 1px solid #000}- \ No newline at end of file diff --git a/modules/template-engine/components/html/table/table.min.js b/modules/template-engine/components/html/table/table.min.js @@ -1 +0,0 @@ -;Openrat.Workbench.afterViewLoadedHandler.add(function(t){$(t).find('table.or-table--sortable > tbody').sortable();$(t).find('table.or-table--sortable > tbody').closest('form').submit(function(){var t=[];$(this).find('table.or-table--sortable').find('tbody > tr.data').each(function(){let objectid=$(this).data('id');t.push(objectid)});$(this).find('input[name=order]').val(t.join(','))});$(t).find('tr.headline > td > input.checkbox').click(function(){$(this).closest('table').find('tr.data > td > input.checkbox').attr('checked',Boolean($(this).attr('checked')))});$(t).find('.or-table-filter > input').keyup(function(){let filterExpression=$(this).val().toLowerCase();let table=$(this).parents('.or-table-wrapper').find('table');table.addClass('loader');setTimeout(()=>{table.find('tr:not(.headline)').filter(function(){$(this).toggle($(this).text().toLowerCase().indexOf(filterExpression)>-1)});table.removeClass('loader')},50)});$(t).find('table > tbody > tr.headline > td, table > tbody > tr > th').click(function(){let column=$(this);let table=column.parents('table');table.addClass('loader');let isAscending=!column.hasClass('sort-asc');table.find('tr.headline > td, tr > th').removeClass('sort-asc sort-desc');if(isAscending)column.addClass('sort-asc');else column.addClass('sort-desc');setTimeout(function(){let rows=table.find('tr:gt(0)').toArray().sort(a(column.index()));if(!isAscending){rows=rows.reverse()};for(var t=0;t<rows.length;t++){table.append(rows[t])};table.removeClass('loader')},50)});function a(t){return function(a,l){let valA=e(a,t),valB=e(l,t);return $.isNumeric(valA)&&$.isNumeric(valB)?valA-valB:valA.toString().localeCompare(valB)}};function e(t,e){return $(t).children('td').eq(e).text()}});- \ No newline at end of file diff --git a/modules/template-engine/components/html/text/Text.class.php b/modules/template-engine/components/html/text/Text.class.php @@ -1,112 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement;use modules\template_engine\HtmlElement; -use modules\template_engine\Value; -use modules\template_engine\ValueExpression; - -class TextComponent extends HtmlComponent -{ - public $prefix = ''; - public $suffix = ''; - public $title; - public $type; - public $escape = true; - public $var; - public $text; - public $key; - public $raw; - public $value; - public $maxlength; // DEPRECATED - use CSS. - public $accesskey; - public $cut = 'both'; - public $label; - public $newline = true; - - public function createElement() - { - - switch( $this->type ) - { - case 'none': - case 'raw': - $tag = ''; - break; - case 'emphatic': - $tag = 'em'; - break; - case 'italic': - $tag = 'em'; - break; - case 'strong': - $tag = 'strong'; - break; - case 'bold': - $tag = 'strong'; - break; - case 'tt': - $tag = 'tt'; - break; - case 'teletype': - $tag = 'tt'; - break; - case 'preformatted': - $tag = 'pre'; - break; - case 'code': - $tag = 'code'; - break; - default: - $tag = 'span'; - } - - $text = new CMSElement($tag); - - $text->setEscaping($this->escape); - - - if ( $this->class) - $text->addStyleClass( $this->class); - - if ( $this->title ) - $text->addAttribute('title',$this->title); - - //if ( $this->newline) - // $functions[] = 'nl2br(@)'; - - - //if ( !empty($this->accesskey) ) - // $functions[] = "Text::accessKey('".$this->accesskey."',@)"; - - if ( $this->key ) - $text->content( Value::createExpression(ValueExpression::TYPE_MESSAGE,$this->key) ); - - elseif ( $this->text ) - $text->content( Value::createExpression(ValueExpression::TYPE_MESSAGE,$this->text) ); - - elseif ( $this->var ) - $text->content( Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->var) ); - - elseif ( $this->raw ) - $text->content( str_replace('_',' ',$this->raw) ); - - elseif ( $this->value ) - $text->content( $this->value ); - - - if ( $this->label ) { - $span = (new HtmlElement('span' ))->addStyleClass('or-form-input'); - $label = (new HtmlElement('label'))->addChild($span)->addStyleClass('or-form-row')->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content('message:'.$this->label)); - - $this->adoptiveElement = $text; - return $label; - - }else { - return $text; - } - - } -} - - diff --git a/modules/template-engine/components/html/tree/Tree.class.php b/modules/template-engine/components/html/tree/Tree.class.php @@ -1,21 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; - -class TreeComponent extends Component -{ - public $tree; - - public function createElement() - { - return new CMSElement(null); - } - - public function unsed__begin() - { - parent::includeResource('tree/component-tree.php'); - echo '<?php component_tree('.$this->value($this->tree).') ?>'; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/tree/component-tree.php b/modules/template-engine/components/html/tree/component-tree.php @@ -1,33 +0,0 @@ -<?php - -function component_tree( $contents ) -{ - echo '<ul class="tree">'; - foreach( $contents as $key=>$el) { - - $selected = isset($el['self']); - if ($selected ) - echo '<li class="">'; - else - echo '<li>'; - - echo '<div class="tree" />'; - echo '<div class="entry clickable'.($selected?' selected':'').'"'; - echo ' data-name="'.$el['name'].'"'; - echo ' data-action="'.$el['type'].'"'; - echo ' data-id="'.$el['id'].'"'; - echo '>'; - echo '<img src="'.OR_THEMES_DIR.'default/images/icon_'.$el['type'].'.png" />'; - echo $el['name']; - echo '</div>'; - - if ( isset($el['children']) ) - { - component_tree($el['children'] ); - } - - echo '</li>'; - } - echo '</ul>'; -} -?>- \ No newline at end of file diff --git a/modules/template-engine/components/html/tree/tree.js b/modules/template-engine/components/html/tree/tree.js @@ -1,7 +0,0 @@ -// View loaded... -Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - - - // Clickable. - // done by link.js -});- \ No newline at end of file diff --git a/modules/template-engine/components/html/tree/tree.min.js b/modules/template-engine/components/html/tree/tree.min.js @@ -1 +0,0 @@ -;Openrat.Workbench.afterViewLoadedHandler.add(function(e){});- \ No newline at end of file diff --git a/modules/template-engine/components/html/upload/Upload.class.php b/modules/template-engine/components/html/upload/Upload.class.php @@ -1,34 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\CMSElement; - -class UploadComponent extends Component -{ - public $size = 40; - public $name = ''; - public $multiple = false; - public $class = 'upload'; - public $maxlength = 0; - - public function createElement() - { - $input = new CMSElement('input'); - - $input->selfClosing(true); - $input->addStyleClass( $this->class ); - - if ( $this->multiple ) - $input->addAttribute( 'multiple','multiple' ); - - $input->addAttribute('id',REQUEST_ID.'_'.$this->name); - $input->addAttribute('name',$this->name); - $input->addAttribute('size',$this->size); - - if ( $this->maxlength ) - $input->addAttribute( 'maxlength',$this->maxlength ); - - return $input; - } -}- \ No newline at end of file diff --git a/modules/template-engine/components/html/upload/upload.css b/modules/template-engine/components/html/upload/upload.css @@ -1,6 +0,0 @@ -div.or-dropzone-upload > div.input { - width: 100%; - height: 100px; - border: 1px dotted; -} -/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%22upload.less%22%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22AAAA%2CGAAG%2CmBAAsB%2CMAAG%3BCAE3B%3BCACA%3BCAEA%2CkBAAA%22%7D */- \ No newline at end of file diff --git a/modules/template-engine/components/html/upload/upload.js b/modules/template-engine/components/html/upload/upload.js @@ -1,87 +0,0 @@ -Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { - - - var form = $(element).find('form'); - - // Dateiupload über Drag and Drop - var dropzone = $(element).find('div.or-dropzone-upload > div.input'); - dropzone.on('dragenter', function (e) - { - e.stopPropagation(); - e.preventDefault(); - $(this).css('border', '1px dotted gray'); - }); - dropzone.on('dragover', function (e) - { - e.stopPropagation(); - e.preventDefault(); - }); - dropzone.on('drop', function (e) - { - $(this).css('border','1px dotted red'); - e.preventDefault(); - var files = e.originalEvent.dataTransfer.files; - - //We need to send dropped files to Server - handleFileUpload(form,files); - }); - - - // Dateiupload über File-Input-Button - $(element).find('input[type=file]').change( function() { - - var files = $(this).prop('files'); - - handleFileUpload(form,files); - }); - -}); - - - - - - -function handleFileUpload(form,files) -{ - for (var i = 0, f; f = files[i]; i++) - { - var form_data = new FormData(); - form_data.append('file' , f); - form_data.append('action' ,'folder'); - form_data.append('subaction',$(form).data('method')); - form_data.append('output' ,'json'); - form_data.append('token' ,$(form).find('input[name=token]').val() ); - form_data.append('id' ,$(form).find('input[name=id]' ).val() ); - - var status = $('<div class="notice info"><div class="text loader"></div></div>'); - $('#noticebar').prepend(status); // Notice anhängen. - $(status).show(); - - $.ajax( { 'type':'POST',url:'./api/', cache:false,contentType: false, processData: false, data:form_data, success:function(data, textStatus, jqXHR) - { - $(status).remove(); - let oform = new Openrat.Form(); - oform.doResponse(data,textStatus,form); - }, - error:function(jqXHR, textStatus, errorThrown) { - $(form).closest('div.content').removeClass('loader'); - $(status).remove(); - - var msg; - try - { - var error = jQuery.parseJSON( jqXHR.responseText ); - msg = error.error + '/' + error.description + ': ' + error.reason; - } - catch( e ) - { - msg = jqXHR.responseText; - } - - Openrat.Workbench.notify('Upload error',msg); - } - - } ); - } -} diff --git a/modules/template-engine/components/html/upload/upload.less b/modules/template-engine/components/html/upload/upload.less @@ -1,7 +0,0 @@ -div.or-dropzone-upload > div.input -{ - width: 100%; - height: 100px; - - border:1px dotted; -} diff --git a/modules/template-engine/components/html/upload/upload.min.css b/modules/template-engine/components/html/upload/upload.min.css @@ -1 +0,0 @@ -div.or-dropzone-upload > div.input{width: 100%;height: 100px;border: 1px dotted}- \ No newline at end of file diff --git a/modules/template-engine/components/html/upload/upload.min.js b/modules/template-engine/components/html/upload/upload.min.js @@ -1 +0,0 @@ -;Openrat.Workbench.afterViewLoadedHandler.add(function(e){var o=$(e).find('form'),n=$(e).find('div.or-dropzone-upload > div.input');n.on('dragenter',function(e){e.stopPropagation();e.preventDefault();$(this).css('border','1px dotted gray')});n.on('dragover',function(e){e.stopPropagation();e.preventDefault()});n.on('drop',function(e){$(this).css('border','1px dotted red');e.preventDefault();var n=e.originalEvent.dataTransfer.files;handleFileUpload(o,n)});$(e).find('input[type=file]').change(function(){var e=$(this).prop('files');handleFileUpload(o,e)})});function handleFileUpload(e,a){for(var r=0,t;t=a[r];r++){var n=new FormData();n.append('file',t);n.append('action','folder');n.append('subaction',$(e).data('method'));n.append('output','json');n.append('token',$(e).find('input[name=token]').val());n.append('id',$(e).find('input[name=id]').val());var o=$('<div class="notice info"><div class="text loader"></div></div>');$('#noticebar').prepend(o);$(o).show();$.ajax({'type':'POST',url:'./api/',cache:!1,contentType:!1,processData:!1,data:n,success:function(n,a,r){$(o).remove();let oform=new Openrat.Form();oform.doResponse(n,a,e)},error:function(n,t,d){$(e).closest('div.content').removeClass('loader');$(o).remove();var r;try{var a=jQuery.parseJSON(n.responseText);r=a.error+'/'+a.description+': '+a.reason}catch(i){r=n.responseText};Openrat.Workbench.notify('Upload error',r)}})}};- \ No newline at end of file diff --git a/modules/template-engine/components/html/user/User.class.php b/modules/template-engine/components/html/user/User.class.php @@ -1,20 +0,0 @@ -<?php - -namespace template_engine\components; - -use modules\template_engine\PHPBlockElement; - -class UserComponent extends Component -{ - public $user; - public $id; - - public function createElement() - { - $user = new PHPBlockElement(); - $user->beforeBlock = $user->includeResource( 'user/component-user.php'); - $user->inBlock = 'component_user('.$user->value($this->user).');'; - - return $user; - } -} diff --git a/modules/template-engine/components/html/user/component-user.php b/modules/template-engine/components/html/user/component-user.php @@ -1,16 +0,0 @@ -<?php -function component_user( $user ) -{ - extract( $user ); - - if ( empty($name) ) - $name = lang('GLOBAL_UNKNOWN'); - if ( empty($fullname) ) - $fullname = lang('GLOBAL_NO_DESCRIPTION_AVAILABLE'); - - if ( !empty($mail) && config('security','user','show_mail' ) ) - echo "<a href=\"mailto:$mail\" title=\"$fullname\">$name</a>"; - else - echo "<span title=\"$fullname\">$name</span>"; -} -?>- \ No newline at end of file diff --git a/modules/template-engine/components/html/window/Window.class.php b/modules/template-engine/components/html/window/Window.class.php @@ -1,18 +0,0 @@ -<?php - -namespace template_engine\components; - - -use modules\template_engine\Element; - -class WindowComponent extends Component -{ - - public function createElement() - { - // No content. - return new Element(null ); - } -} - - diff --git a/modules/template-engine/components/template.xsd b/modules/template-engine/components/template.xsd @@ -1,1976 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<xsd:schema xmlns="http://www.openrat.de/template" - targetNamespace="http://www.openrat.de/template" xmlns:xsd="http://www.w3.org/2001/XMLSchema" - elementFormDefault="qualified" attributeFormDefault="unqualified"> - <xsd:element name="selector" type="selectorType"/> - <xsd:complexType name="selectorType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="types" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="folderid" type="xsd:string"/> - <xsd:attribute name="param" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="text" type="textType"/> - <xsd:complexType name="textType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="suffix" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="escape" type="xsd:boolean"/> - <xsd:attribute name="var" type="xsd:string"/> - <xsd:attribute name="text" type="xsd:string"/> - <xsd:attribute name="key" type="xsd:string"/> - <xsd:attribute name="raw" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="maxlength" type="xsd:string"/> - <xsd:attribute name="accesskey" type="xsd:string"/> - <xsd:attribute name="cut" type="xsd:string"/> - <xsd:attribute name="label" type="xsd:string"/> - <xsd:attribute name="newline" type="xsd:boolean"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="dummy" type="dummyType"/> - <xsd:complexType name="dummyType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="logo" type="logoType"/> - <xsd:complexType name="logoType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="include" type="includeType"/> - <xsd:complexType name="includeType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="file" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="else" type="elseType"/> - <xsd:complexType name="elseType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="label" type="labelType"/> - <xsd:complexType name="labelType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="for" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="key" type="xsd:string"/> - <xsd:attribute name="text" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="editor" type="editorType"/> - <xsd:complexType name="editorType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="mode" type="xsd:string"/> - <xsd:attribute name="extension" type="xsd:string"/> - <xsd:attribute name="mimetype" type="xsd:string"/> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="readonly" type="xsd:boolean"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="newline" type="newlineType"/> - <xsd:complexType name="newlineType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="link" type="linkType"/> - <xsd:complexType name="linkType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="var1" type="xsd:string"/> - <xsd:attribute name="var2" type="xsd:string"/> - <xsd:attribute name="var3" type="xsd:string"/> - <xsd:attribute name="var4" type="xsd:string"/> - <xsd:attribute name="var5" type="xsd:string"/> - <xsd:attribute name="value1" type="xsd:string"/> - <xsd:attribute name="value2" type="xsd:string"/> - <xsd:attribute name="value3" type="xsd:string"/> - <xsd:attribute name="value4" type="xsd:string"/> - <xsd:attribute name="value5" type="xsd:string"/> - <xsd:attribute name="target" type="xsd:string"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="action" type="xsd:string"/> - <xsd:attribute name="subaction" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="url" type="xsd:string"/> - <xsd:attribute name="config" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="accesskey" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="anchor" type="xsd:string"/> - <xsd:attribute name="frame" type="xsd:string"/> - <xsd:attribute name="modal" type="xsd:boolean"/> - <xsd:attribute name="afterSuccess" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="radio" type="radioType"/> - <xsd:complexType name="radioType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="readonly" type="xsd:boolean"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="suffix" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="onchange" type="xsd:string"/> - <xsd:attribute name="children" type="xsd:string"/> - <xsd:attribute name="checked" type="xsd:string"/> - <xsd:attribute name="label" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="set" type="setType"/> - <xsd:complexType name="setType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="var" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="key" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="checkbox" type="checkboxType"/> - <xsd:complexType name="checkboxType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="default" type="xsd:boolean"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="readonly" type="xsd:boolean"/> - <xsd:attribute name="required" type="xsd:boolean"/> - <xsd:attribute name="label" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="input" type="inputType"/> - <xsd:complexType name="inputType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="index" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="size" type="xsd:string"/> - <xsd:attribute name="maxlength" type="xsd:int"/> - <xsd:attribute name="onchange" type="xsd:string"/> - <xsd:attribute name="hint" type="xsd:string"/> - <xsd:attribute name="icon" type="xsd:string"/> - <xsd:attribute name="required" type="xsd:boolean"/> - <xsd:attribute name="focus" type="xsd:boolean"/> - <xsd:attribute name="label" type="xsd:string"/> - <xsd:attribute name="readonly" type="xsd:boolean"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="insert" type="insertType"/> - <xsd:complexType name="insertType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="url" type="xsd:string"/> - <xsd:attribute name="function" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="header" type="headerType"/> - <xsd:complexType name="headerType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="views" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="date" type="dateType"/> - <xsd:complexType name="dateType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="date" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="if" type="ifType"/> - <xsd:complexType name="ifType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="true" type="xsd:string"/> - <xsd:attribute name="false" type="xsd:string"/> - <xsd:attribute name="contains" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="empty" type="xsd:string"/> - <xsd:attribute name="equals" type="xsd:string"/> - <xsd:attribute name="lessthan" type="xsd:string"/> - <xsd:attribute name="greaterthan" type="xsd:string"/> - <xsd:attribute name="present" type="xsd:string"/> - <xsd:attribute name="not" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="qrcode" type="qrcodeType"/> - <xsd:complexType name="qrcodeType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="list" type="listType"/> - <xsd:complexType name="listType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="list" type="xsd:string"/> - <xsd:attribute name="extract" type="xsd:boolean"/> - <xsd:attribute name="key" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="table" type="tableType"/> - <xsd:complexType name="tableType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="filter" type="xsd:boolean"/> - <xsd:attribute name="width" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="inputarea" type="inputareaType"/> - <xsd:complexType name="inputareaType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="rows" type="xsd:int"/> - <xsd:attribute name="cols" type="xsd:int"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="index" type="xsd:string"/> - <xsd:attribute name="onchange" type="xsd:string"/> - <xsd:attribute name="prefix" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="maxlength" type="xsd:int"/> - <xsd:attribute name="label" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="readonly" type="xsd:boolean"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="window" type="windowType"/> - <xsd:complexType name="windowType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="part" type="partType"/> - <xsd:complexType name="partType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="user" type="userType"/> - <xsd:complexType name="userType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="user" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="selectbox" type="selectboxType"/> - <xsd:complexType name="selectboxType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="list" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="addempty" type="xsd:boolean"/> - <xsd:attribute name="multiple" type="xsd:boolean"/> - <xsd:attribute name="size" type="xsd:int"/> - <xsd:attribute name="lang" type="xsd:boolean"/> - <xsd:attribute name="label" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="column" type="columnType"/> - <xsd:complexType name="columnType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="width" type="xsd:string"/> - <xsd:attribute name="style" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="colspan" type="xsd:string"/> - <xsd:attribute name="rowspan" type="xsd:string"/> - <xsd:attribute name="header" type="xsd:boolean"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="url" type="xsd:string"/> - <xsd:attribute name="action" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="radiobox" type="radioboxType"/> - <xsd:complexType name="radioboxType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="list" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="onchange" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="image" type="imageType"/> - <xsd:complexType name="imageType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="menu" type="xsd:string"/> - <xsd:attribute name="action" type="xsd:string"/> - <xsd:attribute name="method" type="xsd:string"/> - <xsd:attribute name="config" type="xsd:string"/> - <xsd:attribute name="file" type="xsd:string"/> - <xsd:attribute name="url" type="xsd:string"/> - <xsd:attribute name="icon" type="xsd:string"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="elementtype" type="xsd:string"/> - <xsd:attribute name="fileext" type="xsd:string"/> - <xsd:attribute name="tree" type="xsd:string"/> - <xsd:attribute name="notice" type="xsd:string"/> - <xsd:attribute name="size" type="xsd:string"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="hidden" type="hiddenType"/> - <xsd:complexType name="hiddenType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="row" type="rowType"/> - <xsd:complexType name="rowType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="focus" type="focusType"/> - <xsd:complexType name="focusType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="group" type="groupType"/> - <xsd:complexType name="groupType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="open" type="xsd:boolean"/> - <xsd:attribute name="show" type="xsd:boolean"/> - <xsd:attribute name="title" type="xsd:string"/> - <xsd:attribute name="icon" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="button" type="buttonType"/> - <xsd:complexType name="buttonType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="src" type="xsd:string"/> - <xsd:attribute name="text" type="xsd:string"/> - <xsd:attribute name="value" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="password" type="passwordType"/> - <xsd:complexType name="passwordType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="default" type="xsd:string"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="size" type="xsd:int"/> - <xsd:attribute name="maxlength" type="xsd:int"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="form" type="formType"/> - <xsd:complexType name="formType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="method" type="xsd:string"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="action" type="xsd:string"/> - <xsd:attribute name="subaction" type="xsd:string"/> - <xsd:attribute name="id" type="xsd:string"/> - <xsd:attribute name="languageid" type="xsd:string"/> - <xsd:attribute name="modelid" type="xsd:string"/> - <xsd:attribute name="label" type="xsd:string"/> - <xsd:attribute name="apply" type="xsd:boolean"/> - <xsd:attribute name="cancel" type="xsd:boolean"/> - <xsd:attribute name="readonly" type="xsd:boolean"/> - <xsd:attribute name="target" type="xsd:string"/> - <xsd:attribute name="enctype" type="xsd:string"/> - <xsd:attribute name="async" type="xsd:boolean"/> - <xsd:attribute name="autosave" type="xsd:boolean"/> - <xsd:attribute name="type" type="xsd:string"/> - <xsd:attribute name="afterSuccess" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="upload" type="uploadType"/> - <xsd:complexType name="uploadType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="size" type="xsd:int"/> - <xsd:attribute name="name" type="xsd:string"/> - <xsd:attribute name="multiple" type="xsd:boolean"/> - <xsd:attribute name="class" type="xsd:string"/> - <xsd:attribute name="maxlength" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="output" type="outputType"/> - <xsd:complexType name="outputType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> - <xsd:element name="tree" type="treeType"/> - <xsd:complexType name="treeType"> - <xsd:choice maxOccurs="unbounded" minOccurs="0"> - <xsd:element ref="selector" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="text" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="dummy" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="logo" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="include" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="else" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="label" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="editor" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="newline" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="link" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radio" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="set" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="checkbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="input" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="insert" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="header" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="date" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="if" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="qrcode" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="list" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="table" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="inputarea" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="window" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="part" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="user" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="selectbox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="column" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="radiobox" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="image" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="hidden" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="row" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="focus" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="group" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="button" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="password" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="form" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="upload" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="output" maxOccurs="unbounded" minOccurs="0"/> - <xsd:element ref="tree" maxOccurs="unbounded" minOccurs="0"/> - </xsd:choice> - <xsd:attribute name="tree" type="xsd:string"/> - <xsd:attribute name="request" type="xsd:string"/> - </xsd:complexType> -</xsd:schema>- \ No newline at end of file diff --git a/modules/template-engine/engine/TemplateEngine.class.php b/modules/template-engine/engine/TemplateEngine.class.php @@ -1,273 +0,0 @@ -<?php - - -namespace template_engine; -use DomainException; -use DOMDocument; -use DOMElement; -use Exception; -use LogicException; -use modules\template_engine\EmptyElement; -use modules\template_engine\HtmlElement; -use modules\template_engine\PHPBlockElement; -use SimpleXMLElement; -use \template_engine\components\Component; -use template_engine\components\NativeHtmlComponent; - -/** - * Wandelt eine Vorlage in ein PHP-Skript um. - * - * Die Vorlage wird gesparst, Elemente werden geladen und in die Zieldatei kopiert. - * - * @author Jan Dankert - * @package openrat.services - */ -class TemplateEngine -{ - // For now we are only supporting HTML rendering. - public $renderType = 'html'; - - public $config = array(); - public $request; - - private $srcFilename; - private $debug = false; - - const CSS_PREFIX = 'or-'; - - - /** - * Erzeugt einen Templateparser. - */ - public function __construct() - { - } - - /** - * Compile the template. - * From a XML source file we are generating a PHP file. - * - * @param $srcXmlFilename string Filename of template source - * @param $tplOutName string Filename of template code - */ - public function compile($srcXmlFilename, $tplOutName ) - { - $this->srcFilename = $srcXmlFilename; - - // Imports the base class of all component types. - require_once (dirname(__FILE__).'/../components/'.$this->renderType.'/Component.class.' . PHP_EXT); - require_once (dirname(__FILE__).'/../components/'.$this->renderType.'/HtmlComponent.class.' . PHP_EXT); - require_once (dirname(__FILE__).'/../components/'.$this->renderType.'/NativeHtmlComponent.class.' . PHP_EXT); - require_once (dirname(__FILE__).'/../components/'.$this->renderType.'/FieldComponent.class.' . PHP_EXT); - - // We are now building a complete DOM tree and this is the root element. - $rootElement = new PHPBlockElement(); - - // The generated template should only be executable in our CMS environment (for security reasons). - $rootElement->beforeBlock = 'if (!defined(\'OR_TITLE\')) die(\'Forbidden\');'; - - try - { - $confCompiler = $this->config; - - if (is_file($srcXmlFilename)) - $srcFilename = $srcXmlFilename; - else - // Wenn Vorlage (noch) nicht existiert - throw new LogicException("Template not found: $srcXmlFilename"); - - // Vorlage und Zieldatei oeffnen - $document = $this->loadDocument($srcFilename); - - // creating a tree of components - $rootComponent = $this->processElement( $document->documentElement ); - - // converting the component tree to a element tree - $rootElement->addChild( $rootComponent->getElement() ); - - $filename = $tplOutName; - - if (is_file($filename) && ! is_writable($filename)) - throw new LogicException("Template output file is read-only: $filename"); - - $writtenBytes = file_put_contents( $filename, $rootElement->render() ); - - if ( $writtenBytes === FALSE ) - throw new LogicException("Unable writing to output file: '$filename'"); - - // CHMOD ausfuehren. - if ( @$confCompiler['chmod'] ) - if (! @chmod($filename, octdec($confCompiler['chmod']))) - throw new \InvalidArgumentException("Template {$srcXmlFilename} failed to compile: CHMOD '{$confCompiler['chmod']}' failed on file {$filename}."); - } - catch (Exception $e) - { - echo $e->getTraceAsString(); - throw new LogicException("Template '$srcXmlFilename' failed to compile", 0, $e); - } - } - - - /** - * @param DOMElement $element - * @param int $depth - */ - private function processElement( $element, $depth = 0 ) { - - // Only process DOM Elements (ignoring Text, Comments, ...) - if ( $element->nodeType == XML_ELEMENT_NODE ) - ; - else - return null; - - // The namespace decides what to do with this element: - if ( $element->namespaceURI == 'http://www.openrat.de/template') - return $this->processCMSElement( $element, $depth ); - elseif ( $element->namespaceURI == 'http://www.w3.org/1999/xhtml') - return $this->processHTMLElement( $element, $depth ); - else - throw new LogicException("Unknown Element ".$element->tagName.' in NS '.$element->namespaceURI ); - } - - - - private function processCMSElement(DOMElement $element, $depth) - { - $attributes = $element->attributes; - $tag = $element->localName; - - if ( $tag == 'include') { - - $filename = dirname($this->srcFilename) . '/' . $attributes['file']->value . '.inc.xml'; - if ( ! is_file( $filename )) - throw new LogicException('Includefile not found: '.$filename ); - - $element = $this->loadDocument($filename)->documentElement; - $attributes = $element->attributes; - $tag = $element->localName; - } - - $className = ucfirst($tag); - $classFilename = dirname(__FILE__).'/../components/'.$this->renderType."/$tag/$className.class." . PHP_EXT; - - if (!is_file($classFilename)) - throw new LogicException("Component Class File '$classFilename' does not exist." ); - - require_once ($classFilename); - - $className = 'template_engine\components\\'.$className .'Component'; - /* @var $component Component */ - $component = new $className(); - $component->setDepth($depth+1); - $component->request = $this->request; - - foreach ($attributes as $attribute) - { - $attributeValue = $attribute->value; - $attributeName = $attribute->name; - - // Aus String 'true' und 'false' typechtes Boolean machen. - // Sonst wäre 'false'==true! - if ($attributeValue == 'false') $attributeValue = false; - if ($attributeValue == 'true') $attributeValue = true; - - $component->$attributeName = $attributeValue; - } - - $component->init(); - - foreach( $element->childNodes as $child ) { - $component->addChildComponent( $this->processElement( $child,$depth ) ); - } - return $component; - } - - - /** - * Creates a new HTML element. - * @param $element DOMElement - * @param $depth - * @return NativeHtmlComponent - */ - private function processHTMLElement($element, $depth) - { - $component = new NativeHtmlComponent(); - - $component->tag = $element->localName; - $component->attributes = $element->attributes; - $component->init(); - - return $component; - } - - /** - * Diese Funktion lädt die Vorlagedatei. - */ - private function loadDocument( $filename ) - { - return $this->loadXmlDocument( $filename ); - } - - - /** - * Laden und Parsen eines XML-Dokumentes. - * - * @return DOMDocument - */ - private function loadXmlDocument( $filename ) - { - if (!is_file($filename)) - throw new LogicException("XML file '$filename' was not found.'"); - - $document = new DOMDocument(); - $document->load( $filename ); - return $document; - } - - - /** - * Führt das gewünschte Template aus und schreibt das Ergebnis auf die Standardausgabe. - * - * In Development-Mode the template is compiled. - * - * @param $srcFile string Quelldateiname des Templates (im XML-Format) - * @param $outputData array Ausgabedaten - */ - public function executeTemplate($srcFile, $outputData) - { - // Converting filename: '/path/file.src.xml' => '/path/file.php'. - $templateFile = dirname( $srcFile ).'/'.substr( basename($srcFile),0,strpos( basename($srcFile),'.')).'.php'; - - // In development mode, we are compiling every template on the fly. - if (DEVELOPMENT && false /*use dedicated template compiler in update.html */) { - - // Compile the template. - // From a XML source file we are generating a PHP file. - try - { - $this->compile($srcFile, $templateFile); - unset($te); - } catch (Exception $e) { - throw new DomainException("Compilation failed for Template '$srcFile'.", 0, $e); - } - - } - - // Spätestens jetzt muss das Template vorhanden sein. - if (!is_file($templateFile)) - throw new LogicException("Template file '$templateFile' was not found."); - - if ( DEVELOPMENT ) - // save a few bytes in production mode ;) - header("X-CMS-Template-File: " . $templateFile); - - // Übertragen der Ausgabe-Variablen in den aktuellen Kontext - // - extract($outputData); - - // Include the template - require_once($templateFile); - } - -} - diff --git a/modules/template-engine/require.php b/modules/template-engine/require.php @@ -1,11 +0,0 @@ -<?php - -include( dirname(__FILE__) . '/TemplateEngineInfo.class.php'); -include( dirname(__FILE__) . '/engine/TemplateEngine.class.php'); -include( dirname(__FILE__) . '/Element.class.php'); -include( dirname(__FILE__) . '/HtmlElement.class.php'); -include( dirname(__FILE__) . '/CMSElement.class.php'); -include( dirname(__FILE__) . '/EmptyElement.class.php'); -include( dirname(__FILE__) . '/PHPBlockElement.class.php'); -include( dirname(__FILE__) . '/SimpleAttribute.php'); -include( dirname(__FILE__) . '/ConditionalAttribute.php'); diff --git a/modules/template_engine/CMSElement.class.php b/modules/template_engine/CMSElement.class.php @@ -0,0 +1,19 @@ +<?php + + +namespace modules\template_engine; + +use template_engine\components\ConditionalAttribute; + +class CMSElement extends HtmlElement +{ + public function __construct( $name ) + { + parent::__construct( $name ); + } + + public function addConditionalAttribute($name, $condition, $value ) { + $this->attributes[] = new ConditionalAttribute($condition,$name,$value); + return $this; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/ConditionalAttribute.php b/modules/template_engine/ConditionalAttribute.php @@ -0,0 +1,31 @@ +<?php + + +namespace template_engine\components; + + +use cms\template_engine\SimpleAttribute; +use modules\template_engine\Value; + +class ConditionalAttribute extends SimpleAttribute +{ + protected $condition; + + /** + * ConditionalAttribute constructor. + * @param $condition + * @param $name + * @param $value + */ + public function __construct($condition,$name,$value) + { + $this->condition = $condition; + parent::__construct($name,$value); + } + + + public function render() + { + return '<?php if('.$this->condition.'){ ?>'.parent::render().'<?php } ?>'; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/Element.class.php b/modules/template_engine/Element.class.php @@ -0,0 +1,216 @@ +<?php + + +namespace modules\template_engine; + + +use cms\template_engine\SimpleAttribute; + +class Element +{ + private $name; + /** + * @var array + */ + protected $attributes = []; + protected $content = ''; + + protected $selfClosing = false; + + /** + * @var array + */ + protected $children = []; + + + /** + * @param $element Element + */ + public function asChildOf($element ) { + $element->addChild($this); + return $this; + } + + public function addChild($child ) { + + if ( is_array( $child ) ) + $this->children += $child; + else + $this->children[] = $child; + + return $this; + } + + public function __construct( $name ) + { + $this->name = $name; + } + + protected function getAttributeValue($name ){ + return $this->attributes[$name]->render(); + } + + public function content( $content ) + { + $this->content = $content; + return $this; + } + + public function render() { + + $this->selfClosing = $this->selfClosing && !$this->content && !$this->children; + + $content = ''; + + if ( $this->name ) + $content .= '<'.$this->name. + array_reduce( array_keys($this->attributes),function($carry,$key){return $carry.' '.$this->getAttributeValue($key);},'').(($this->selfClosing ?' /':'').'>'); + + $content .= $this->getContent(); + + $content .= $this->renderChildren(); + + if ( $this->selfClosing ) + ; + else + if ( $this->name ) + $content .= '</'.$this->name.'>'; + + return $content; + } + + public function addAttribute($key, $value) { + $this->attributes[] = new SimpleAttribute($key,$value); + return $this; + } + + public function selfClosing($selfClosing) { + $this->selfClosing = boolval($selfClosing); + return $this; + } + + protected function getContent() + { + return $this->content; + } + + protected function renderChildren() + { + $content = ''; + + /** @var Element $child */ + foreach($this->children as $child ) { + $content .= $child->render(); + } + + return $content; + } +} + + + + +class Value { + private $value; + private $expressions = []; + + const CONTEXT_PHP = 0; + const CONTEXT_HTML = 1; + const CONTEXT_RAW = 2; + + public static function createExpression( $type, $name ) { + return $type.'{'.$name.'}'; + } + + public function __construct( $value ) + { + while( true ) { + if ( ! $value ) + break; + + $epos = strpos($value,'{',1); + $fpos = strpos($value,'}',1); + + if ( $epos === false || $fpos === false ) + break; + + $type = substr($value,$epos-1,1 ); + $name = substr($value,$epos+1,$fpos-$epos-1); + + $this->expressions[] = new ValueExpression($type,$name,$epos-1); + $value = substr($value,0,$epos-1).substr($value,$fpos+1); + } + $this->value = $value; + } + + + public function render( $context ) { + switch( $context ) { + case Value::CONTEXT_PHP: + return "'".array_reduce(array_reverse($this->expressions),function($carry,$expr) { + return substr($carry, 0,$expr->position)."'.".$expr->render().'.\''.substr($carry,$expr->position); + },$this->value)."'"; + + case Value::CONTEXT_HTML: + case Value::CONTEXT_RAW: + $escape = function($expr) use($context) { + if ( $context == self::CONTEXT_HTML ) + return 'encodeHtml(htmlentities('.$expr.'))'; + else + return $expr; + }; + return array_reduce(array_reverse($this->expressions),function($carry,$expr) use ($escape) { + //echo "carry:".$carry.";expr:".$expr->position.':'.$expr->name; + return substr($carry, 0,$expr->position)."<?php echo ".$escape($expr->render()).' ?>'.substr($carry,$expr->position); + },$this->value); + } + } +} + + + +class ValueExpression { + + public $type; + public $name; + public $position; + + const TYPE_DATA_VAR = '$'; + const TYPE_MESSAGE = '#'; + const TYPE_CONFIG = '%'; + + /** + * ValueExpression constructor. + * @param $type + * @param $name + * @param $position + */ + public function __construct($type, $name, $position) + { + $this->type = $type; + $this->name = $name; + $this->position = $position; + } + + public function render() + { + switch( $this->type ) { + case self::TYPE_DATA_VAR: + $parts = explode('.', $this->name); + + return array_reduce($parts, function ($carry, $item) { + if (!$carry) + return '@$' . $item; + else + return $carry.'[\'' . $item . '\']'; + }, ''); + case self::TYPE_MESSAGE: + return '@lang(\'' . $this->name . '\')'; + + case self::TYPE_CONFIG: + $config_parts = explode('/', $this->name); + return 'config(' . "'" . implode("'" . ',' . "'", $config_parts) . "'" . ')'; + } + } + +}+ \ No newline at end of file diff --git a/modules/template_engine/EmptyElement.class.php b/modules/template_engine/EmptyElement.class.php @@ -0,0 +1,23 @@ +<?php + + +namespace modules\template_engine; + + +use cms\template_engine\SimpleAttribute; + + +/** + * An empty element. + * + * 'empty' means, the element has no tag and no text content. But it may (and should) contain child elements. + * + * @package modules\template_engine + */ +class EmptyElement extends Element +{ + public function __construct() + { + parent::__construct(null); + } +} diff --git a/modules/template_engine/HtmlElement.class.php b/modules/template_engine/HtmlElement.class.php @@ -0,0 +1,64 @@ +<?php + + +namespace modules\template_engine; + + +class HtmlElement extends Element +{ + private $styleClasses = []; + + /** + * Auto-escaping the content. + * + * @var bool + */ + private $escape = true; + + + public function addStyleClass( $clazz ) { + $this->styleClasses[] = $clazz; + return $this; + } + + + public function setEscaping( $escape ) { + $this->escape = $escape; + return $this; + } + + + public function getAttributeValue($name) + { + return parent::getAttributeValue(htmlspecialchars($name)); + } + + + public function __construct( $name ) + { + parent::__construct( $name ); + + // Only "void elements" are self-closable, see + // https://html.spec.whatwg.org/multipage/syntax.html#void-elements + if ( in_array($name,['area','base','br','col','embed','hr','img','input','link','meta','param','source','track','wbr'])) + $this->selfClosing = true; + } + + + protected function getContent() + { + $context = $this->escape ? Value::CONTEXT_HTML : Value::CONTEXT_RAW; + + return (new Value(parent::getContent()))->render( $context ); + } + + + public function render() + { + if ( $this->styleClasses ) + $this->addAttribute('class', implode(' ',$this->styleClasses) ); + + return parent::render(); + } + +}+ \ No newline at end of file diff --git a/modules/template_engine/PHPBlockElement.class.php b/modules/template_engine/PHPBlockElement.class.php @@ -0,0 +1,172 @@ +<?php + + +namespace modules\template_engine; + + +class PHPBlockElement extends HtmlElement +{ + public $beforeBlock; + public $inBlock; + + public function __construct() + { + parent::__construct( null ); + } + + + public function render() + { + $content = ''; + + $content .= '<?php '.$this->beforeBlock.' { '.$this->inBlock.' ?>'; + + $content .= $this->renderChildren(); + + $content .= ' <?php } ?>'; + + return $content; + } + + + + + + public function textasvarname($value) + { + $expr = new Expression($value); + return $expr->getTextAsVarName(); + + } + + + public function varname($value) + { + $expr = new Expression($value); + return $expr->getVarName(); + } + + + + public function htmlvalue($value) + { + $expr = new Expression($value); + return $expr->getHTMLValue(); + } + + + + public function value( $value ) + { + $expr = new Expression($value); + return $expr->getPHPValue(); + } + + + public function includeResource($file ) + { + return "include_once( 'modules/template_engine/components/html/".$file."');"; + } + +} + + + +class Expression +{ + public $type; + public $value; + public $invert = false; + + public function getHTMLValue() + { + switch ($this->type) { + case 'text': + return $this->value; + + default: + return '<' . '?php echo ' . $this->getPHPValue() . ' ?>'; + } + } + + + public function __construct($value) + { + // Falls der Wert 'true' oder 'false' ist. + if (is_bool($value)) + $value = $value ? 'true' : 'false'; + + // Negierung berücksichtigen. + if (substr($value, 0, 4) == 'not:') { + $value = substr($value, 4); + $this->invert = true; + } + + if ($value && strlen($value) >= 3 && $value[1] == '{') { + $this->type = $value[0]; + $this->value = substr($value, 2, -1); + } else { + $this->type = 'text'; + $this->value = $value; + } + } + + + public function getVarName() + { + switch ($this->type) { + case '$': + return '$' . $this->value; + case 'text': + return $this->value; + default: + throw new \LogicException("Invalid expression type '$this->type' in attribute value. Allowed: text|var"); + } + } + + + public function getTextAsVarName() + { + switch ($this->type) { + case '$': + return '$$' . $this->value; + case 'text': + return '$' . $this->value; + default: + return $this->getPHPValue(); + } + } + + + public function getPHPValue() + { + $value = $this->value; + + $invert = $this->invert ? '!' : ''; + + switch ($this->type) { + case 'text': + // Sonderf�lle f�r die Attributwerte "true" und "false". + // Hinweis: Die Zeichenkette "false" entspricht in PHP true. + // Siehe http://de.php.net/manual/de/language.types.boolean.php + if ($value == 'true' || $value == 'false') + return $value; + else + return "'" . $value . "'"; + case '$': + return $invert . '$' . $value; + case 'size': + return '@count($' . $value . ')'; + case '#': + // macht aus "text1{var}text2" => "text1".$var."text2" + $value = preg_replace('/{(\w+)\}/', '\'.$\\1.\'', $value); + return 'lang(' . "'" . $value . "'" . ')'; + case '%': + $config_parts = explode('/', $value); + return $invert . 'config(' . "'" . implode("'" . ',' . "'", $config_parts) . "'" . ')'; + + default: + throw new \LogicException("Unknown expression type '{$this->type}' in attribute value. Allowed: var|function|method|text|size|property|message|messagevar|arrayvar|config or none"); + } + } +}+ \ No newline at end of file diff --git a/modules/template_engine/SimpleAttribute.php b/modules/template_engine/SimpleAttribute.php @@ -0,0 +1,30 @@ +<?php + + +namespace cms\template_engine; + + +use modules\template_engine\Value; + +class SimpleAttribute +{ + + protected $name; + protected $value; + + /** + * SimpleAttribute constructor. + * @param $name + * @param $value + */ + public function __construct($name, $value) + { + $this->name = $name; + $this->value = $value; + } + + + public function render() { + return $this->name.'="'.(new Value($this->value))->render(Value::CONTEXT_HTML).'"'; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/TemplateCompiler.php b/modules/template_engine/TemplateCompiler.php @@ -0,0 +1,57 @@ +<?php + +header('Content-Type: text/plain'); + +/** + * Using the Component classes and generating a XSD-File. + */ +error_reporting(E_ALL); +ini_set('display_errors', 1); +ini_set('display_startup_errors', 1); + +use template_engine\TemplateEngine; + + + +$dir = __DIR__.'/../../modules/cms-ui/themes/default/html/views'; + +require('../../modules/util/require.php'); +require('../../modules/template_engine/require.php'); +require('../../modules/cms-core/require.php'); + +echo "Searching in $dir\n"; + +foreach(FileUtils::readDir( $dir ) as $action ) +{ + if ( !is_dir($dir.'/'.$action ) ) + continue; + + echo "Action: $action\n"; + + + foreach(FileUtils::readDir( $dir.'/'.$action ) as $file ) + { + if ( substr($file,-12 ) == '.tpl.src.xml' ) + { + $method = substr($file, 0,-12 ); + echo "\tMethod $method\n"; + + $templateFile = $dir.'/'.$action.'/'.$file; + $outFile = $dir.'/'.$action.'/'.$method.'.php'; + + $engine = new TemplateEngine(); + + // We are creating a fake request, because the template compiler needs to know + // the action and subaction in which it will be executed. + $fakeRequest = new \cms\action\RequestParams(); + $fakeRequest->action = $action; + $fakeRequest->method = $method; + $engine->request = $fakeRequest; + + echo "\t\tcompiling $templateFile\n\t\t to $outFile\n"; + + $engine->compile( $templateFile,$outFile ); + } + } +} + diff --git a/modules/template_engine/TemplateEngineInfo.class.php b/modules/template_engine/TemplateEngineInfo.class.php @@ -0,0 +1,49 @@ +<?php + +namespace template_engine; + +class TemplateEngineInfo +{ + + public static function getComponentList() + { + $components = parse_ini_file(__DIR__.'/components/components.ini'); + + return array_keys($components); + } + + + public static function getLESSFiles() + { + return self::getComponentFilesByExtension('.less'); + } + + public static function getJSFiles() + { + return self::getComponentFilesByExtension('.js'); + } + + + /** + * Gets all files with the specified extension. + * + * @param $extension string Extension + * @return array + */ + private static function getComponentFilesByExtension($extension ) + { + + $files = array(); + if ($handle = opendir(__DIR__.'/components/html')) { + + while (false !== ($entry = readdir($handle))) { + if ( substr($entry,-strlen($extension)) == $extension ) + $files[] = $entry; + } + + closedir($handle); + } + return $files; + } + +} diff --git a/modules/template_engine/components/XSDGenerator.php b/modules/template_engine/components/XSDGenerator.php @@ -0,0 +1,76 @@ +<?php +/** + * Using the Component classes and generating a XSD-File. + */ + +error_reporting(E_ALL); + +require('../../util/FileUtils.class.php'); + +// Baseclass of all components. +require('html/Component.class.php'); +require('html/HtmlComponent.class.php'); +require('html/FieldComponent.class.php'); +header('Content-Type: text/plain'); + +echo "XSD Generator\n\n"; + +$folder = FileUtils::readDir(__DIR__ . '/html'); + +$componentsFile = @fopen(__DIR__ . '/components.ini', 'w'); +$xsdFile = @fopen(__DIR__ . '/template.xsd', 'w'); + +fwrite($componentsFile, '# generated by XSDGenerator. do not change manually.' . "\n"); +fwrite($xsdFile, '<?xml version="1.0" encoding="utf-8"?> +<xsd:schema xmlns="http://www.openrat.de/template" + targetNamespace="http://www.openrat.de/template" xmlns:xsd="http://www.w3.org/2001/XMLSchema" + elementFormDefault="qualified" attributeFormDefault="unqualified">' . "\n"); + +foreach ($folder as $f) { + + $filename = __DIR__ . '/html/' . $f . '/' . ucfirst($f) . '.class.php'; + + if (!is_file($filename)) + continue; + + echo 'Working on component: ' . $f . "\n"; + fwrite($componentsFile, $f . " = \n"); + + fwrite($xsdFile, '<xsd:element name="' . $f . '" type="' . $f . 'Type" /><xsd:complexType name="' . $f . 'Type">'); + + // Allowed Child-Elements (all) + fwrite($xsdFile, '<xsd:choice maxOccurs="unbounded" minOccurs="0">'); + foreach ($folder as $f2) { + $filename2 = __DIR__ . '/html/' . $f2 . '/' . ucfirst($f2) . '.class.php'; + if (is_file($filename2)) + fwrite($xsdFile, '<xsd:element ref="' . $f2 . '" maxOccurs="unbounded" minOccurs="0" />'); + } + fwrite($xsdFile, '</xsd:choice>'); + + + $className = 'template_engine\\components\\' . ucfirst($f) . 'Component'; + include($filename); + $vars = get_class_vars($className); + foreach ($vars as $name => $value) { + if (is_bool($value)) + $xsdtype = 'xsd:boolean'; + elseif (is_numeric($value)) + $xsdtype = 'xsd:int'; + else + $xsdtype = 'xsd:string'; + + + fwrite($xsdFile, '<xsd:attribute name="' . $name . '" type="' . $xsdtype . '" />'); + } + + + fwrite($xsdFile, '</xsd:complexType>'); + +} + +fwrite($xsdFile, '</xsd:schema>'); + +fclose($xsdFile); +fclose($componentsFile); + +echo "Finished.\n";+ \ No newline at end of file diff --git a/modules/template_engine/components/components.ini b/modules/template_engine/components/components.ini @@ -0,0 +1,40 @@ +# generated by XSDGenerator. do not change manually. +selector = +text = +dummy = +logo = +include = +else = +label = +editor = +newline = +link = +radio = +set = +checkbox = +input = +insert = +header = +date = +if = +qrcode = +list = +table = +inputarea = +window = +part = +user = +selectbox = +column = +radiobox = +image = +hidden = +row = +focus = +group = +button = +password = +form = +upload = +output = +tree = diff --git a/modules/template_engine/components/html/Component.class.php b/modules/template_engine/components/html/Component.class.php @@ -0,0 +1,81 @@ +<?php + +namespace template_engine\components; + +use cms\action\RequestParams; +use modules\template_engine\Element; + +abstract class Component +{ + private $childComponents = []; + private $depth; + + /** + * @param $component Component + */ + public function addChildComponent($component ) { + if ( $component ) + $this->childComponents[] = $component; + } + + /** + * @var RequestParams + */ + public $request; + + /** + * @var Element + */ + private $element; + + /** + * @var Element + */ + protected $adoptiveElement; + + public function __construct() + { + } + + public function getDepth() + { + return $this->depth; + } + + public function setDepth($depth) + { + $this->depth = $depth; + } + + public function createElement() { + return null; + } + + public function init() + { + $this->element = $this->createElement(); + + if ( $this->element) + $this->element->selfClosing(false); + + // if there is no special adoptive element, lets use the root element. + if ( ! $this->adoptiveElement ) + $this->adoptiveElement = $this->element; + } + + + /** + * Gets the element with all child elements from all child components. + * + * @return Element + */ + public function getElement() + { + /** @var Component $childComponent */ + foreach ($this->childComponents as $childComponent ) + $this->adoptiveElement->addChild( $childComponent->getElement() ); + + return $this->element; + } + +} diff --git a/modules/template_engine/components/html/FieldComponent.class.php b/modules/template_engine/components/html/FieldComponent.class.php @@ -0,0 +1,14 @@ +<?php + +namespace template_engine\components; + + +use modules\template_engine\Element; + +abstract class FieldComponent extends HtmlComponent +{ + + public $prefix; + public $name; + public $readonly = false; +} diff --git a/modules/template_engine/components/html/HtmlComponent.class.php b/modules/template_engine/components/html/HtmlComponent.class.php @@ -0,0 +1,10 @@ +<?php + +namespace template_engine\components; + +abstract class HtmlComponent extends Component +{ + + public $class; + +} diff --git a/modules/template_engine/components/html/NativeHtmlComponent.class.php b/modules/template_engine/components/html/NativeHtmlComponent.class.php @@ -0,0 +1,21 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\HtmlElement; + +class NativeHtmlComponent extends HtmlComponent +{ + public $attributes; + public $tag; + + public function createElement() + { + $html = new HtmlElement( $this->tag ); + + foreach ($this->attributes as $attribute) + $html->addAttribute( $attribute->name,$attribute->value ); + + return $html; + } +} diff --git a/modules/template_engine/components/html/button/Button.class.php b/modules/template_engine/components/html/button/Button.class.php @@ -0,0 +1,62 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\Element; + +/* @DEPRECATED */ +class ButtonComponent extends Component +{ + + public $type = 'submit'; + public $class = 'ok'; + public $src; + public $text = 'button_ok'; + public $value = 'ok'; + + private $tmp_src; + + public function createElement() + { + return new Element(null); + } + + protected function unused_begin() + { + echo <<<'HTML' + <div class="invisible"> +HTML; + + if ($this->type == 'ok') + $this->type = 'submit'; + + if (! empty($this->src)) + { + $this->type = 'image'; + $this->tmp_src = $image_dir . 'icon_' . $this->src . IMG_ICON_EXT; + } + else + { + $this->tmp_src = ''; + } + + if (! empty($this->type)) + { + ?> +<input type="<?php echo $this->type ?>" <?php if(isset($this->src)) { ?> + src="<?php $this->tmp_src ?>" <?php } ?> + name="<?php echo $this->value ?>" class="%class%" + title="<?php echo lang($this->text.'_DESC') ?>" + value="&nbsp;&nbsp;&nbsp;&nbsp;<?php echo langHtml($this->text) ?>&nbsp;&nbsp;&nbsp;&nbsp;" /><?php unset($this->src); ?> + <?php + +} + } + + protected function end() + { + echo "</div>"; + } +} + +?>+ \ No newline at end of file diff --git a/modules/template_engine/components/html/checkbox/Checkbox.class.php b/modules/template_engine/components/html/checkbox/Checkbox.class.php @@ -0,0 +1,52 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class CheckboxComponent extends Component +{ + + public $default = false; + public $name; + public $readonly = false; + public $required = false; + public $label; + + public function createElement() + { + $checkbox = (new CMSElement('input'))->addAttribute('type','checkbox'); + + $checkbox->addAttribute('name',$this->name); + if ( $this->readonly ) + $checkbox->addAttribute('disabled','disabled'); + $checkbox->addAttribute('value','1'); + + if ( $this->default ) + $checkbox->addAttribute('checked',$this->default); + else { + $condition = '$'.$this->name; + $checkbox->addConditionalAttribute('checked', $condition, '1'); + } + + if ( $this->required ) + $checkbox->addAttribute( 'required','required'); + + if ( $this->readonly && $this->required ) { + $hidden = (new CMSElement('input'))->addAttribute('type','hidden')->addAttribute('name',$this->name)->addAttribute('value','1'); + $checkbox->addChild( $hidden ); + } + + if ( $this->label ) { + $label = new CMSElement('label'); + $label->addStyleClass('or-form-row')->addStyleClass('or-form-checkbox'); + $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); + $label->addChild($checkbox); + return $label; + } + + return $checkbox; + } +} diff --git a/modules/template_engine/components/html/column/Column.class.php b/modules/template_engine/components/html/column/Column.class.php @@ -0,0 +1,54 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; + +class ColumnComponent extends Component +{ + public $width; + public $style; + public $class; + public $colspan; + public $rowspan; + public $header = false; + public $title; + public $url; + public $action; + public $id; + public $name; + + public function createElement() + { + $column = new CMSElement( ($this->header?'th':'td') ); + + if ( $this->width ) + $column->addAttribute('width',$this->width); + + if ( $this->style ) + $column->addAttribute('style',$this->style); + + if ( $this->colspan ) + $column->addAttribute('colspan',$this->colspan); + + if ( $this->rowspan ) + $column->addAttribute('rowspan',$this->rowspan); + + if ( $this->rowspan ) + $column->addAttribute('rowspan',$this->rowspan); + if ( $this->title ) + $column->addAttribute('title',$this->title); + + if ( $this->id ) + { + $column->addAttribute('data-name' ,$this->name ); + $column->addAttribute('data-action',$this->action); + $column->addAttribute('data-id' ,$this->id ); + $column->addStyleClass('clickable'); + } + if ( $this->class ) + $column->addStyleClass( $this->class ); + + return $column; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/column/column.js b/modules/template_engine/components/html/column/column.js @@ -0,0 +1,8 @@ +// View loaded... +Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { + + + // Clickable Columns. + // done by orLinkify-Plugin in link.js + +});+ \ No newline at end of file diff --git a/modules/template_engine/components/html/column/column.min.js b/modules/template_engine/components/html/column/column.min.js @@ -0,0 +1 @@ +;Openrat.Workbench.afterViewLoadedHandler.add(function(e){});+ \ No newline at end of file diff --git a/modules/template_engine/components/html/date/Date.class.php b/modules/template_engine/components/html/date/Date.class.php @@ -0,0 +1,19 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\PHPBlockElement; + +class DateComponent extends Component +{ + public $date; + + public function createElement() + { + $date = new PHPBlockElement(); + $date->beforeBlock = $date->includeResource( 'date/component-date.php'); + $date->inBlock = 'component_date('.$date->value($this->date).');'; + + return $date; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/date/component-date.php b/modules/template_engine/components/html/date/component-date.php @@ -0,0 +1,74 @@ +<?php +function component_date( $time ) +{ + if ( $time==0) + echo lang('GLOBAL_UNKNOWN'); + else + { + // Benutzereinstellung 'Zeitzonen-Offset' auswerten. + if ( isset($_COOKIE['or_timezone_offset']) ) + { + $time -= (int)date('Z'); + $time += ((int)$_COOKIE['or_timezone_offset']*60); + } + + echo '<span class="sort-value">'.str_pad($time, 20, "0", STR_PAD_LEFT).'</span>'; // For sorting a table. + + echo '<span title="'; + $dl = date(lang('DATE_FORMAT_LONG'),$time); + $dl = str_replace('{weekday}',lang('DATE_WEEKDAY'.strval(date('w',$time))),$dl); + $dl = str_replace('{month}' ,lang('DATE_MONTH' .strval(date('n',$time))),$dl); +// $dl = str_replace(' ','&nbsp;',$dl); + echo $dl; + unset($dl); + + + $sekunden = time()-$time; + $minuten = intval($sekunden/60); + $stunden = intval($minuten /60); + $tage = intval($stunden /24); + $monate = intval($tage /30); + $jahre = intval($monate /12); + + echo ' ('; + + + if ( $sekunden == 1 ) + echo $sekunden.' '.lang('GLOBAL_SECOND'); + elseif ( $sekunden < 60 ) + echo $sekunden.' '.lang('GLOBAL_SECONDS'); + + elseif ( $minuten == 1 ) + echo $minuten.' '.lang('GLOBAL_MINUTE'); + elseif ( $minuten < 60 ) + echo $minuten.' '.lang('GLOBAL_MINUTES'); + + elseif ( $stunden == 1 ) + echo $stunden.' '.lang('GLOBAL_HOUR'); + elseif ( $stunden < 60 ) + echo $stunden.' '.lang('GLOBAL_HOURS'); + + elseif ( $tage == 1 ) + echo $tage.' '.lang('GLOBAL_DAY'); + elseif ( $tage < 60 ) + echo $tage.' '.lang('GLOBAL_DAYS'); + + elseif ( $monate == 1 ) + echo $monate.' '.lang('GLOBAL_MONTH'); + elseif ( $monate < 12 ) + echo $monate.' '.lang('GLOBAL_MONTHS'); + + elseif ( $jahre == 1 ) + echo $jahre.' '.lang('GLOBAL_YEAR'); + else + echo $jahre.' '.lang('GLOBAL_YEARS'); + + echo ')'; + + + echo '">'; + echo date(lang('DATE_FORMAT'),$time); + echo '</span>'; + } +} +?>+ \ No newline at end of file diff --git a/modules/template_engine/components/html/dummy/Dummy.class.php b/modules/template_engine/components/html/dummy/Dummy.class.php @@ -0,0 +1,13 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\Element; + +class DummyComponent extends Component +{ + public function createElement() + { + return new Element(null); + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/editor/Editor.class.php b/modules/template_engine/components/html/editor/Editor.class.php @@ -0,0 +1,62 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class EditorComponent extends FieldComponent +{ + public $type; + public $name; + public $mode ='htmlmixed'; + public $extension =''; + public $mimetype = ''; + + public function createElement() + { + $textarea = new CMSElement('textarea'); + $textarea->addAttribute('name',$this->name); + + $textarea->addStyleClass('editor')->setEscaping(false); + + switch( $this->type ) + { + case 'html': + $textarea->addStyleClass('html-editor')->addAttribute('id','pageelement_edit_editor'); + + + break; + + case 'wiki': + $textarea->addStyleClass('wiki-editor'); + break; + + case 'text': + case 'raw': + $textarea->addStyleClass('text-editor'); + break; + + case 'markdown': + $textarea->setEscaping(true)->addStyleClass('markdown-editor'); + break; + + case 'code': + $textarea->setEscaping(true); + $textarea->addStyleClass('code-editor') + ->addAttribute('data-extension',$this->extension) + ->addAttribute('data-mimetype',$this->mimetype) + ->addAttribute('data-mode',$this->mode); + break; + + + default: + throw new \LogicException("Unknown editor type: ".$this->type); + } + + $textarea->content(Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); + + return $textarea; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/editor/editor.css b/modules/template_engine/components/html/editor/editor.css @@ -0,0 +1,32 @@ +.editor__text-editor { + width: 100%; + height: 300px; +} +/* ACE-Editor */ +textarea.editor__code-editor { + display: none; + /* Textarea nicht anzeigen, da durch Editor im DIV ersetzt */ +} +div.editor__code-editor { + position: absolute; + height: 500px; + width: 100%; + font-size: 14px; + z-index: 256; +} +textarea.editor__text-editor, +textarea.editor__wiki-editor, +textarea.editor__html-editor { + width: 100%; +} +a.editorlink:active, +a.editorlink:hover { + font-weight: normal; + text-decoration: none; +} +a.editorlink:link, +a.editorlink:visited { + font-weight: normal; + text-decoration: none; +} +/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%22editor.less%22%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22AACA%3BCACC%3BCACA%3B%3B%3BAAID%2CQAAQ%3BCACP%3B%3B%3BAAID%2CGAAG%3BCAED%3BCACE%3BCACA%3BCACA%3BCACA%3B%3BAAKJ%2CQAAQ%3BAACR%2CQAAQ%3BAACR%2CQAAQ%3BCAEP%3B%3BAAID%2CCAAC%2CWAAW%3BAACZ%2CCAAC%2CWAAW%3BCAEX%3BCACA%3B%3BAAGD%2CCAAC%2CWAAW%3BAACZ%2CCAAC%2CWAAW%3BCAEX%3BCACA%22%7D */+ \ No newline at end of file diff --git a/modules/template_engine/components/html/editor/editor.js b/modules/template_engine/components/html/editor/editor.js @@ -0,0 +1,251 @@ +Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { + + $(element).find('textarea').orAutoheight(); + + + // Codemirror-Editor anzeigen + $(element).find("textarea.editor.code-editor").each( function() { + + let mode = $(this).data('mode'); + + let mimetype = $(this).data('mimetype'); + if(mimetype.length>0) + mode = mimetype; + + let textareaEl = this; + + let editor = CodeMirror.fromTextArea( textareaEl, { + lineNumbers: true, + viewportMargin: Infinity, + mode: mode + /** settings **/ }) + + editor.on('change',function() { + // copy back to textarea on form submit... + let newValue = editor.getValue(); + $(textareaEl).val( newValue ); + } ); + + + $(editor.getWrapperElement()).droppable({ + accept: '.or-draggable', + hoverClass: 'or-droppable--hover', + activeClass: 'or-droppable--active', + + drop: function (event, ui) { + + let dropped = ui.draggable; + + // Insert id of dragged element into cursor position + let pos = editor.getCursor(); + editor.setSelection(pos, pos); + let insertText = dropped.data('id') + let toInsert = ''+insertText; + editor.replaceSelection(toInsert); + //editor.setCursor(pos+toInsert.length); geht nicht. + } + + }); + + + } ); + + // Markdown-Editor anzeigen + $(element).find("textarea.editor.markdown-editor").each( function() { + + let textarea = this; + let toolbar = [{ + name: "bold", + action: SimpleMDE.toggleBold, + className: "image-icon image-icon--editor-bold", + title: "Bold", + }, + { + name: "italic", + action: SimpleMDE.toggleItalic, + className: "image-icon image-icon--editor-italic", + title: "Italic", + }, + { + name: "heading", + action: SimpleMDE.toggleHeadingBigger, + className: "image-icon image-icon--editor-headline", + title: "Headline", + }, + "|", // Separator + { + name: "quote", + action: SimpleMDE.toggleBlockquote, + className: "image-icon image-icon--editor-quote", + title: "Quote", + }, + { + name: "code", + action: SimpleMDE.toggleCodeBlock, + className: "image-icon image-icon--editor-code", + title: "Code", + }, + "|", // Separator + { + name: "generic list", + action: SimpleMDE.toggleUnorderedList, + className: "image-icon image-icon--editor-unnumberedlist", + title: "Unnumbered list", + }, + { + name: "numbered list", + action: SimpleMDE.toggleOrderedList, + className: "image-icon image-icon--editor-numberedlist", + title: "Numbered list", + }, + "|", // Separator + { + name: "table", + action: SimpleMDE.drawTable, + className: "image-icon image-icon--editor-table", + title: "Table", + }, + { + name: "horizontalrule", + action: SimpleMDE.drawHorizontalRule, + className: "image-icon image-icon--editor-horizontalrule", + title: "Horizontal rule", + }, + "|", // Separator + { + name: "undo", + action: SimpleMDE.undo, + className: "image-icon image-icon--editor-undo", + title: "Undo", + }, + { + name: "redo", + action: SimpleMDE.redo, + className: "image-icon image-icon--editor-redo", + title: "Redo", + }, + "|", // Separator + { + name: "link", + action: SimpleMDE.drawLink, + className: "image-icon image-icon--editor-link", + title: "Link", + }, + { + name: "image", + action: SimpleMDE.drawImage, + className: "image-icon image-icon--editor-image", + title: "Image", + }, + + /* + "|", // Separator + { + name: "preview", + action: SimpleMDE.togglePreview, + className: "image-icon image-icon--editor-preview", + title: "Preview", + }, + { + name: "sidebyside", + action: SimpleMDE.toggleSideBySide, + className: "image-icon image-icon--editor-sidebyside", + title: "Side by side", + }, + { + name: "fullscreen", + action: SimpleMDE.toggleFullScreen, + className: "image-icon image-icon--editor-fullscreen", + title: "Fullscreen", + }, + */ + "|", // Separator + { + name: "guide", + action: "https://simplemde.com/markdown-guide", + className: "image-icon image-icon--editor-help", + title: "Howto markdown", + }, + ]; + + let mde = new SimpleMDE( + { + element: $(this)[0], + toolbar: toolbar, + autoDownloadFontAwesome: false + } + ); + + let codemirror = mde.codemirror; + + $(codemirror.getWrapperElement()).droppable({ + accept: '.or-draggable', + hoverClass: 'or-droppable--hover', + activeClass: 'or-droppable--active', + + drop: function (event, ui) { + + let dropped = ui.draggable; + + let insertText = ''; + let id = dropped.data('id'); + let url = '__OID__'+id+'__'; + if ( dropped.data('type') == 'image') + insertText = '![]('+url+')'; + else + insertText = '['+id+']('+url+')'; + + // Insert id of dragged element into cursor position + let pos = codemirror.getCursor(); + codemirror.setSelection(pos, pos); + codemirror.replaceSelection( insertText); + } + }); + + codemirror.on('change',function() { + // copy back to textarea on form submit... + let newValue = codemirror.getValue(); + $(textarea).val( newValue ); + } ); + } ); + + // HTML-Editor anzeigen + $(element).find("textarea.editor.html-editor").each( function() { + + let textarea = this; + + $.trumbowyg.svgPath = './modules/editor/trumbowyg/ui/icons.svg'; + $(textarea).trumbowyg(); + + $(textarea).closest('form').find('.trumbowyg-editor').droppable({ + accept: '.or-draggable', + hoverClass: 'or-droppable--hover', + activeClass: 'or-droppable--active', + + drop: function (event, ui) { + + let dropped = ui.draggable; + let id = dropped.data('id'); + let url = './?_='+dropped.data('type')+'-'+id+'&subaction=show&embed=1&__OID__'+id+'__='+id; + let insertText = ''; + if ( dropped.data('type') == 'image') + insertText = '<img src="'+url+'" alt="" />'; + else + insertText = '<a href="'+url+'" />'+id+'</a>'; + + $(textarea).trumbowyg('execCmd', { + cmd: 'insertHTML', + param: insertText, + forceCss: false, + }); + } + }); + + + + + + } ); + + +});+ \ No newline at end of file diff --git a/modules/template_engine/components/html/editor/editor.less b/modules/template_engine/components/html/editor/editor.less @@ -0,0 +1,45 @@ + +.editor__text-editor { + width:100%; + height:300px; +} + +/* ACE-Editor */ +textarea.editor__code-editor { + display:none; /* Textarea nicht anzeigen, da durch Editor im DIV ersetzt */ +} + + +div.editor__code-editor +{ + position: absolute; + height: 500px; + width: 100%; + font-size:14px; + z-index: 256; +} + + + +textarea.editor__text-editor, +textarea.editor__wiki-editor, +textarea.editor__html-editor +{ + width:100%; +} + + +a.editorlink:active, +a.editorlink:hover +{ + font-weight:normal; + text-decoration:none; +} + +a.editorlink:link, +a.editorlink:visited +{ + font-weight:normal; + text-decoration:none; +} + diff --git a/modules/template_engine/components/html/editor/editor.min.css b/modules/template_engine/components/html/editor/editor.min.css @@ -0,0 +1 @@ +.editor__text-editor{width: 100%;height: 300px}textarea.editor__code-editor{display: none}div.editor__code-editor{position: absolute;height: 500px;width: 100%;font-size: 14px;z-index: 256}textarea.editor__text-editor,textarea.editor__wiki-editor,textarea.editor__html-editor{width: 100%}a.editorlink:active,a.editorlink:hover{font-weight: normal;text-decoration: none}a.editorlink:link,a.editorlink:visited{font-weight: normal;text-decoration: none}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/editor/editor.min.js b/modules/template_engine/components/html/editor/editor.min.js @@ -0,0 +1 @@ +;Openrat.Workbench.afterViewLoadedHandler.add(function(e){$(e).find('textarea').orAutoheight();$(e).find('textarea.editor.code-editor').each(function(){let mode=$(this).data('mode');let mimetype=$(this).data('mimetype');if(mimetype.length>0)mode=mimetype;let textareaEl=this;let editor=CodeMirror.fromTextArea(textareaEl,{lineNumbers:!0,viewportMargin:Infinity,mode:mode});editor.on('change',function(){let newValue=editor.getValue();$(textareaEl).val(newValue)});$(editor.getWrapperElement()).droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let pos=editor.getCursor();editor.setSelection(pos,pos);let insertText=dropped.data('id');let toInsert=''+insertText;editor.replaceSelection(toInsert)}})});$(e).find('textarea.editor.markdown-editor').each(function(){let textarea=this;let toolbar=[{name:'bold',action:SimpleMDE.toggleBold,className:'image-icon image-icon--editor-bold',title:'Bold',},{name:'italic',action:SimpleMDE.toggleItalic,className:'image-icon image-icon--editor-italic',title:'Italic',},{name:'heading',action:SimpleMDE.toggleHeadingBigger,className:'image-icon image-icon--editor-headline',title:'Headline',},'|',{name:'quote',action:SimpleMDE.toggleBlockquote,className:'image-icon image-icon--editor-quote',title:'Quote',},{name:'code',action:SimpleMDE.toggleCodeBlock,className:'image-icon image-icon--editor-code',title:'Code',},'|',{name:'generic list',action:SimpleMDE.toggleUnorderedList,className:'image-icon image-icon--editor-unnumberedlist',title:'Unnumbered list',},{name:'numbered list',action:SimpleMDE.toggleOrderedList,className:'image-icon image-icon--editor-numberedlist',title:'Numbered list',},'|',{name:'table',action:SimpleMDE.drawTable,className:'image-icon image-icon--editor-table',title:'Table',},{name:'horizontalrule',action:SimpleMDE.drawHorizontalRule,className:'image-icon image-icon--editor-horizontalrule',title:'Horizontal rule',},'|',{name:'undo',action:SimpleMDE.undo,className:'image-icon image-icon--editor-undo',title:'Undo',},{name:'redo',action:SimpleMDE.redo,className:'image-icon image-icon--editor-redo',title:'Redo',},'|',{name:'link',action:SimpleMDE.drawLink,className:'image-icon image-icon--editor-link',title:'Link',},{name:'image',action:SimpleMDE.drawImage,className:'image-icon image-icon--editor-image',title:'Image',},'|',{name:'guide',action:'https://simplemde.com/markdown-guide',className:'image-icon image-icon--editor-help',title:'Howto markdown',},];let mde=new SimpleMDE({element:$(this)[0],toolbar:toolbar,autoDownloadFontAwesome:!1});let codemirror=mde.codemirror;$(codemirror.getWrapperElement()).droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let insertText='';let id=dropped.data('id');let url='__OID__'+id+'__';if(dropped.data('type')=='image')insertText='![]('+url+')';else insertText='['+id+']('+url+')';let pos=codemirror.getCursor();codemirror.setSelection(pos,pos);codemirror.replaceSelection(insertText)}});codemirror.on('change',function(){let newValue=codemirror.getValue();$(textarea).val(newValue)})});$(e).find('textarea.editor.html-editor').each(function(){let textarea=this;$.trumbowyg.svgPath='./modules/editor/trumbowyg/ui/icons.svg';$(textarea).trumbowyg();$(textarea).closest('form').find('.trumbowyg-editor').droppable({accept:'.or-draggable',hoverClass:'or-droppable--hover',activeClass:'or-droppable--active',drop:function(e,t){let dropped=t.draggable;let id=dropped.data('id');let url='./?_='+dropped.data('type')+'-'+id+'&subaction=show&embed=1&__OID__'+id+'__='+id;let insertText='';if(dropped.data('type')=='image')insertText='<img src="'+url+'" alt="" />';else insertText='<a href="'+url+'" />'+id+'</a>';$(textarea).trumbowyg('execCmd',{cmd:'insertHTML',param:insertText,forceCss:!1,})}})})});+ \ No newline at end of file diff --git a/modules/template_engine/components/html/else/Else.class.php b/modules/template_engine/components/html/else/Else.class.php @@ -0,0 +1,16 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\PHPBlockElement; + +class ElseComponent extends Component +{ + + public function createElement() + { + $else = new PHPBlockElement(); + $else->beforeBlock = 'if(!$if' . $this->getDepth() . ')'; + return $else; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/focus/Focus.class.php b/modules/template_engine/components/html/focus/Focus.class.php @@ -0,0 +1,14 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\Element; + +class FocusComponent extends Component +{ + + public function createElement() + { + return new Element(null); + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/form/Form.class.php b/modules/template_engine/components/html/form/Form.class.php @@ -0,0 +1,170 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\HtmlElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class FormComponent extends Component +{ + + public $method = 'POST'; + + public $name = ''; + + public $action = null; + + public $subaction = null; + + public $id = '<?php echo OR_ID ?>'; + + public $languageid = null; + public $modelid = null; + + public $label = '#{button_ok}'; + + public $apply = false; + public $cancel = true; + public $readonly = false; + + /** + * 'view' = Loads Action in the same view + * 'top' = Replaces whole workbench. + * @var string + */ + public $target = 'view'; + + public $enctype = 'application/x-www-form-urlencoded'; + + public $async = false; + + public $autosave = false; + + public $type = ''; + + public $afterSuccess; + + + public function createElement() + { + if ( ! $this->action ) + $this->action = $this->request->action; + + if ( ! $this->subaction ) + $this->subaction = $this->request->method; + + if ( ! $this->id ) + $this->id = $this->request->id; + + $form = new CMSElement('form'); + + if ($this->type == 'upload') + $this->submitFunction = ''; + + $form->addAttribute('name', $this->name); + $form->addAttribute('target', '_self'); + $form->addAttribute('data-target', $this->target); + $form->addAttribute('action', './'); + $form->addAttribute('data-method', $this->subaction); + $form->addAttribute('data-action', $this->action); + $form->addAttribute('data-id', $this->id); + $form->addAttribute('method', $this->method); + $form->addAttribute('enctype', $this->enctype); + $form->addStyleClass('or-form')->addStyleClass($this->action); + $form->addAttribute('data-async', $this->async); + $form->addAttribute('data-autosave', $this->autosave); + + if ($this->afterSuccess) + $form->addAttribute('data-after-success', $this->afterSuccess); + + if ($this->languageid) + $form->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'hidden') + ->addAttribute('name', REQ_PARAM_LANGUAGE_ID) + ->addAttribute('value', $this->languageid) + ); + + if ($this->modelid) + $form->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'hidden') + ->addAttribute('name', REQ_PARAM_MODEL_ID) + ->addAttribute('value', $this->modelid) + ); + + $form->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'hidden') + ->addAttribute('name', REQ_PARAM_TOKEN) + ->addAttribute('value', '<?php echo token();?>') // TODO escaping + ); + + $form->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'hidden') + ->addAttribute('name', REQ_PARAM_ACTION) + ->addAttribute('value', $this->action) + ); + $form->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'hidden') + ->addAttribute('name', REQ_PARAM_SUBACTION) + ->addAttribute('value', $this->subaction) + ); + $form->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'hidden') + ->addAttribute('name', REQ_PARAM_ID) + ->addAttribute('value', $this->id) + ); + + $actionBar = (new HtmlElement('div'))->addStyleClass('or-form-actionbar'); + + // Cancel-Button nicht anzeigen, wenn cancel==false. + if ($this->cancel) { + $actionBar->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'button') + ->addStyleClass('or-form-btn') + ->addStyleClass('or-form-btn--secondary') + ->addStyleClass('or-form-btn--cancel') + ->addAttribute('value', + Value::createExpression(ValueExpression::TYPE_MESSAGE, 'CANCEL') + ) + ); + } + + if ($this->apply && !$this->readonly) { + $actionBar->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'button') + ->addStyleClass('or-form-btn') + ->addStyleClass('or-form-btn--primary') + ->addStyleClass('or-form-btn--apply') + ->addAttribute('value', + Value::createExpression(ValueExpression::TYPE_MESSAGE, 'APPLY') + ) + ); + } + + if (!$this->readonly) { + $actionBar->addChild( + (new CMSElement('input')) + ->addAttribute('type', 'submit') + ->addStyleClass('or-form-btn') + ->addStyleClass('or-form-btn--primary') + ->addStyleClass('or-form-btn--save') + ->addAttribute('value', $this->label) + ); + } + + $this->adoptiveElement = (new HtmlElement('div'))->asChildOf($form); + + $form->addChild( $actionBar ); + + return $form; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/group/Group.class.php b/modules/template_engine/components/html/group/Group.class.php @@ -0,0 +1,61 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\HtmlElement; + +/** + * A group. + */ +class GroupComponent extends Component +{ + + public $open = true; + public $show = true; + public $title; + public $icon; + + public function createElement() + { + $fieldset = new HtmlElement('fieldset'); + $fieldset->addStyleClass('or-group'); + $fieldset->addStyleClass('toggle-open-close'); + + if ( $this->open ) + $fieldset->addStyleClass('open'); + else + $fieldset->addStyleClass('closed'); + + if ( $this->show ) + $fieldset->addStyleClass('show' ); + + if ( $this->title ) + { + $legend = new HtmlElement('legend'); + $legend->addStyleClass('on-click-open-close'); + $legend->content( $this->title ); + + $image = new CMSElement('img'); + if ( $this->icon ) + $image->addAttribute('src','themes/default/images/icon/method/'.$this->icon.'.svg" />'); + $legend->addChild( $image ); + + $arrowRight = (new HtmlElement('div'))->addStyleClass('arrow')->addStyleClass('arrow-right')->addStyleClass('on-closed'); + $legend->addChild($arrowRight ); + + $arrowDown = (new HtmlElement('div'))->addStyleClass('arrow')->addStyleClass('arrow-down' )->addStyleClass('on-open' ); + $legend->addChild($arrowDown ); + + $fieldset->addChild( $legend ); + } + + $group = new HtmlElement('div'); + $group->addStyleClass('closable')->asChildOf($fieldset); + + $this->adoptiveElement = $group; + + return $fieldset; + } + +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/group/group.css b/modules/template_engine/components/html/group/group.css @@ -0,0 +1,12 @@ +.or-group { + border: 1px solid; + border-bottom: 0; + border-left: 0; + border-right: 0; + margin-top: 20px; + margin-bottom: 20px; + margin-left: 0px; + margin-right: 0px; + padding: 10px; +} +/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%22group.less%22%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22AAAA%3BCAEC%2CiBAAA%3BCAEA%3BCACA%3BCACA%3BCAEA%3BCACA%3BCACA%3BCACA%3BCACA%22%7D */+ \ No newline at end of file diff --git a/modules/template_engine/components/html/group/group.js b/modules/template_engine/components/html/group/group.js @@ -0,0 +1,5 @@ +Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { + + registerOpenClose( $(element).find('.or-group.toggle-open-close') ); + +}); diff --git a/modules/template_engine/components/html/group/group.less b/modules/template_engine/components/html/group/group.less @@ -0,0 +1,22 @@ +.or-group +{ + border:1px solid; + + border-bottom:0; + border-left:0; + border-right:0; + + margin-top:20px; + margin-bottom:20px; + margin-left:0px; + margin-right:0px; + padding:10px; +} + + + + + + + + diff --git a/modules/template_engine/components/html/group/group.min.css b/modules/template_engine/components/html/group/group.min.css @@ -0,0 +1 @@ +.or-group{border: 1px solid;border-bottom: 0;border-left: 0;border-right: 0;margin-top: 20px;margin-bottom: 20px;margin-left: 0px;margin-right: 0px;padding: 10px}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/group/group.min.js b/modules/template_engine/components/html/group/group.min.js @@ -0,0 +1 @@ +;Openrat.Workbench.afterViewLoadedHandler.add(function(e){registerOpenClose($(e).find('.or-group.toggle-open-close'))});+ \ No newline at end of file diff --git a/modules/template_engine/components/html/header/Header.class.php b/modules/template_engine/components/html/header/Header.class.php @@ -0,0 +1,37 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\Element; + +class HeaderComponent extends Component +{ + public $views; + + public function createElement() + { + return new Element(null); + } + + public function begin() + { + if(false) // DEACTIVATED + if (isset($this->views)) { + echo '<div class="headermenu">'; + + foreach (explode(',', $this->views) as $view) { + echo '<div class="toolbar-icon clickable">'; + echo '<a href="javascript:void(0);" title="<?php echo lang(\'MENU_' . strtoupper($view ). '\') ?>" data-type="dialog" data-name="<?php echo lang(\'MENU_' . strtoupper($view ). '\') ?>" data-method="' . $view . '">'; + echo '<img src="./themes/default/images/icon/action/' . $view . '.svg" title="<?php echo lang(\'MENU_' . $view . '_DESC\') ?>" /><?php echo lang(\'MENU_' . $view . '\') ?>'; + echo '</a>'; + echo '</div>'; + } + echo '</div>'; + + } + + } +} + + +?>+ \ No newline at end of file diff --git a/modules/template_engine/components/html/hidden/Hidden.class.php b/modules/template_engine/components/html/hidden/Hidden.class.php @@ -0,0 +1,27 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class HiddenComponent extends FieldComponent +{ + public $default; + + public function createElement() + { + $input = (new CMSElement('input'))->addAttribute('type','hidden'); + $input->addAttribute('name',$this->name); + + if ($this->default) + $input->addAttribute('value',$this->default); + else + $input->addAttribute('value',Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); + + //$input->addWrapper( (new HtmlElement('div'))->addStyleClass('inputholder')); + + return $input; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/if/If.class.php b/modules/template_engine/components/html/if/If.class.php @@ -0,0 +1,52 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\PHPBlockElement; + +class IfComponent extends Component +{ + public $true; + public $false; + public $contains; + public $value; + public $empty; + public $equals; + public $lessthan; + public $greaterthan; + public $present; + public $not; + + + public function createElement() + { + $if = new PHPBlockElement(); + + $expr = '$if'.$this->getDepth().'='.(!isset($this->not)?'':'!').'('; + if ( $this->true ) + $expr .= $if->value($this->true); + elseif ($this->false) + $expr .= '!' . $if->value($this->false); + elseif ($this->contains) + $expr .= 'in_array('.$if->value($this->value).',explode(",",'.$if->value($this->contains).')'; + elseif ($this->equals) + $expr .= '' . $if->value($this->value).'=='.$if->value($this->equals); + elseif ($this->lessthan) + $expr .= 'intval(' . $if->value($this->lessthan).')>intval('.$if->value($this->value).')'; + elseif ($this->greaterthan) + $expr .= 'intval(' . $if->value($this->greaterthan).')<intval('.$if->value($this->value).')'; + elseif (! empty($this->present)) + $expr .= 'isset(' . '$'.$this->present.')'; // 'isset' verwenden! Nicht empty(), da false empty ist. + elseif (! empty($this->empty)) + $expr .= '(' . $if->textasvarname($this->empty).')==FALSE'; + elseif ($this->value) + $expr .= $if->value($this->value); + else + throw new \LogicException("Element 'if' has not enough parameters."); + $expr .= ');'; + + $if->beforeBlock = $expr . ' if($if'.$this->getDepth().')'; + + return $if; + } +} diff --git a/modules/template_engine/components/html/image/Image.class.php b/modules/template_engine/components/html/image/Image.class.php @@ -0,0 +1,106 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; + +class ImageComponent extends Component +{ + public $class; + public $menu; + public $action; + public $method; + public $config; + public $file; + public $url; + public $icon; + public $type; + public $elementtype; + public $fileext; + public $tree; + public $notice; + public $size; + public $title; + + public function createElement() + { + $styleClasses = []; + $tagName = 'img'; + $file = ''; + $selfClosing = true; + + if ( $this->menu ) + { + $tagName = 'i'; + $styleClasses = ['image-icon','image-icon--menu-'.$this->menu]; + $selfClosing = false; + } + elseif ( $this->elementtype ) + { + $tagName = 'i'; + $styleClasses = ['image-icon','image-icon--action-el_'.$this->elementtype]; + $selfClosing = false; + } + elseif ( $this->action ) + { + $tagName = 'i'; + $styleClasses = ['image-icon','image-icon--action-'.$this->action]; + $selfClosing = false; + } + elseif ( $this->method ) + { + $tagName = 'i'; + $styleClasses = ['image-icon','image-icon--method-'.$this->method]; + $selfClosing = false; + } + elseif ( $this->type ) + { + $file = OR_THEMES_DIR.'default/images/icon_'.$this->type.IMG_ICON_EXT; + } + elseif ( $this->icon ) + { + $file = OR_THEMES_DIR.'default/images/icon/'.$this->icon.IMG_ICON_EXT; + } + elseif ( $this->notice ) + { + $file = OR_THEMES_DIR.'default/images/notice_'.$this->notice.IMG_ICON_EXT; + } + elseif ( $this->tree ) + { + $file = OR_THEMES_DIR.'default/images/tree_'.$this->tree.IMG_EXT; + } + elseif ( $this->url ) + { + $file = $this->url; + } + elseif ( $this->fileext ) + { + $file = OR_THEMES_DIR.'default/images/icon/'.$this->fileext; + } + elseif ( $this->file ) + { + $file = OR_THEMES_DIR.'default/images/icon/'.$this->file.IMG_ICON_EXT; + } + + if ( $this->class ) + { + $styleClasses .= ' '.$this->class; + } + + + $image = new CMSElement($tagName ); + + foreach( $styleClasses as $styleClass ) + $image->addStyleClass($styleClass); + + if($this->title) + $image->addAttribute('title',$this->title); + + if ( $file) + $image->addAttribute('src',$file); + + $image->selfClosing( $selfClosing ); + + return $image; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/image/image.css b/modules/template_engine/components/html/image/image.css @@ -0,0 +1,2 @@ + +/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22%22%7D */+ \ No newline at end of file diff --git a/modules/template_engine/components/html/image/image.js b/modules/template_engine/components/html/image/image.js @@ -0,0 +1,5 @@ +/* +$(document).on('orViewLoaded',function(event, data) { + +}); +*/+ \ No newline at end of file diff --git a/modules/template_engine/components/html/image/image.less b/modules/template_engine/components/html/image/image.less @@ -0,0 +1,3 @@ +img.image-icon { + +} + \ No newline at end of file diff --git a/modules/template_engine/components/html/image/image.min.css b/modules/template_engine/components/html/image/image.min.css diff --git a/modules/template_engine/components/html/image/image.min.js b/modules/template_engine/components/html/image/image.min.js @@ -0,0 +1 @@ +;+ \ No newline at end of file diff --git a/modules/template_engine/components/html/include/Include.class.php b/modules/template_engine/components/html/include/Include.class.php @@ -0,0 +1,15 @@ +<?php + +namespace template_engine\components; + +/** + * Pseudo-Component. + * The include component is a pseudo component. The template compiler will resolve this component first and is including another xml source file. + */ +class IncludeComponent extends Component +{ + + public $file; + +} + diff --git a/modules/template_engine/components/html/input/Input.class.php b/modules/template_engine/components/html/input/Input.class.php @@ -0,0 +1,90 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\HtmlElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class InputComponent extends FieldComponent +{ + public $default; + + public $type = 'text'; + + public $index; + + public $name; + + public $prefix; + + public $value; + + public $size; + + public $minlength = 0; + public $maxlength = 256; + + public $onchange; + + public $hint; + + public $icon; + + public $required = false; + + public $focus = false; + + public $label; + + + + public function createElement() + { + $input = (new CMSElement('input')); + + $input->addAttribute('name',$this->name); + if ( $this->readonly ) + $input->addAttribute('disabled','disabled'); + + if ( $this->required ) + $input->addAttribute( 'required','required'); + + if ( $this->hint ) + $input->addAttribute( 'placeholder',$this->hint ); + + if($this->focus) + $input->addAttribute( 'autofocus','autofocus'); + + + $input->addAttribute('type',$this->type); + $input->addAttribute('maxlength',$this->maxlength); + + if ( $this->minlength ) + $input->addAttribute('minlength',$this->minlength); + + if ( $this->class ) + $input->addStyleClass($this->class); + + if (isset($this->default)) + $input->addAttribute('value',$this->default); + else + $input->addAttribute('value',Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); + + // Unused: + //if(isset($this->icon)) + // echo '<img src="'.OR_THEMES_DIR.'default/images/icon_'.$this->htmlvalue($this->icon). IMG_ICON_EXT .'" width="16" height="16" />'; + + + if ( $this->label ) { + $label = new CMSElement('label'); + $label->addStyleClass('or-form-row')->addStyleClass('or-form-input'); + $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); + $input->asChildOf($label); + return $label; + } + + return (new HtmlElement('div'))->addStyleClass('inputholder')->addChild($input); + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/inputarea/Inputarea.class.php b/modules/template_engine/components/html/inputarea/Inputarea.class.php @@ -0,0 +1,73 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class InputareaComponent extends FieldComponent +{ + + public $rows = 10; + + public $cols = 40; + + public $value; + + public $index; + + public $onchange; + + public $prefix; + + public $class = 'inputarea'; + + public $required = false; + + public $default; + + public $maxlength = 0; + + public $label; + + + public function createElement() + { + $textarea = (new CMSElement('textarea')); + + $textarea->addAttribute('name',$this->name); + $textarea->addAttribute('disabled',$this->readonly); + $textarea->addAttribute('maxlength',$this->maxlength); + + if ( $this->required ) + $textarea->addAttribute( 'required','required'); + + if ( $this->readonly && $this->required ) { + $hidden = (new CMSElement('input'))->addAttribute('type','hidden')->addAttribute('name',$this->name)->addAttribute('value','1'); + $textarea->addChild( $hidden ); + } + + if ($this->class ) + $textarea->addStyleClass($this->class); + + + + if (isset($this->default)) + $textarea->content($this->default); + else + $textarea->content(Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); + + + if ( $this->label ) { + $label = new CMSElement('label'); + $label->addStyleClass('or-form-row')->addStyleClass('or-form-checkbox'); + $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); + + $textarea->asChildOf($label); + return $label; + } + + return $textarea; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/insert/Insert.class.php b/modules/template_engine/components/html/insert/Insert.class.php @@ -0,0 +1,39 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; + +class InsertComponent extends Component +{ + public $name; + public $url; + public $function; + + public function createElement() + { + if ( $this->function ) + { + // JS-Function einbinden + $script = new CMSElement('script'); + $script->addAttribute('type','text/javascript')->addAttribute('name','JavaScript'); + $script->content( $this->function.'();' ); + + return $script; + } + elseif ( $this->url ) + { + // IFrame + $iframe = new CMSElement('iframe'); + $iframe->selfClosing(false); + if ( $this->name ) + $iframe->addAttribute('name', $this->name); + if ( $this->url ) + $iframe->addAttribute('src' ,$this->url); + + return $iframe; + } + else + return null; + } +} diff --git a/modules/template_engine/components/html/label/Label.class.php b/modules/template_engine/components/html/label/Label.class.php @@ -0,0 +1,42 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class LabelComponent extends Component +{ + + /** + * @deprecated + * @var + */ + public $for; + + /** + * @deprecated + * @var + */ + public $value; + + public $key; + + public $text; + + public function createElement() + { + $label = new CMSElement('label'); + $label->addStyleClass('label'); + + if ( $this->key ) + $label->content(Value::createExpression(ValueExpression::TYPE_MESSAGE,$this->key)); + + if ($this->text) + $label->content($this->text); + + return $label; + } + +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/link/Link.class.php b/modules/template_engine/components/html/link/Link.class.php @@ -0,0 +1,189 @@ +<?php + +namespace template_engine\components; + +use Html; +use JSON; +use modules\template_engine\CMSElement; + +/** + * Erzeugt einen HTML-Link. + * + * @author dankert + * + */ +class LinkComponent extends Component +{ + + public $var1; + + public $var2; + + public $var3; + + public $var4; + + public $var5; + + public $value1; + + public $value2; + + public $value3; + + public $value4; + + public $value5; + + public $target; + + public $type; + + public $action; + + public $subaction; + + public $title; + + public $class; + + public $url; + + public $config; + + public $id; + + public $accesskey; + + public $name; + + public $anchor; + + public $frame = '_self'; + + public $modal = false; + + public $afterSuccess; + + + + public function createElement() + { + + $link = new CMSElement('a'); + if ( $this->afterSuccess ) + $link->addAttribute('data-after-success',$this->afterSuccess); + + if ( $this->class ) + $link->addStyleClass($this->class); + + if ( $this->title ) + $link->addAttribute('title',$this->title); + + if ( $this->accesskey ) + $link->addAttribute('accesskey',$this->accesskey); + + if ( $this->frame ) + $link->addAttribute('target',$this->frame); + + if ( $this->name ) + $link->addAttribute('date-name',$this->name)->addAttribute('name',$this->name); + + if ( $this->url ) + $link->addAttribute('data-url',$this->url); + + if ( $this->type ) + $link->addAttribute('data-type',$this->type); + + if ( $this->action ) + $link->addAttribute('data-action',$this->action); + else + $link->addAttribute('data-action',''); + + if ( $this->subaction ) + $link->addAttribute('data-method',$this->subaction); + else + $link->addAttribute('data-method',''); + + if ( $this->id ) + $link->addAttribute('data-id',$this->id); + else + $link->addAttribute('data-id',''); + + $json = new JSON(); + $arrayvalues = array(); + foreach( $this->getExtraParamArray() as $varname => $varvalue ) + $arrayvalues[ $varname ] = $varvalue; + $link->addAttribute('data-extra',str_replace('"',"'",str_replace(array("\t", "\r", "\n"),'',$json->encode($arrayvalues)))); + + switch ($this->type) + { + case 'post': + + // Zusammenbau eines einzeligen JSON-Strings. + // Aufpassen: Keine doppelten Hochkommas, keine Zeilenumbrüche. + $data = '{'; + + $data.= "\"action\":\""; + if (! empty($this->action)) + $data.= $this->action; + else + $data.= $this->request->action; + $data.= "\","; + + $data.= "\"subaction\":\""; + if (! empty($this->subaction)) + $data.= $this->subaction; + else + $data.= $this->request->method; + $data.= "\","; + + $data.= "\"id\":\""; + if (! empty($this->id)) + $data.= $this->id; + else + $data.= ""; + $data.= "\","; + + $data.= '\"'.REQ_PARAM_TOKEN . "\":\"" . '<?php echo token() ?>' . "\","; + + foreach( $this->getExtraParamArray() as $varname => $varvalue ) + $data.= "\"".$varname."\":\"" . $varvalue . "\","; + + $data.= "\"none\":\"0\"}\""; + + $link->addAttribute('data-data',$data); + break; + + case 'html': + case 'external': + + $link->addAttribute('href',$this->url); + break; + + default: + $link->addAttribute('href','/#/'.$this->action.'/'.$this->id); + + } + + return $link; + } + + private function getExtraParamArray() + { + $vars = array(); + if (! empty($this->var1)) $vars[$this->var1] = $this->value1; + if (! empty($this->var2)) $vars[$this->var2] = $this->value2; + if (! empty($this->var3)) $vars[$this->var3] = $this->value3; + if (! empty($this->var4)) $vars[$this->var4] = $this->value4; + if (! empty($this->var5)) $vars[$this->var5] = $this->value5; + + // Bei Dialogen kann der Dialog auch beim Öffnen in einem neuen Fenster direkt geöffnet werden. + if ( $this->type=='dialog') + $vars += array('dialogAction'=>$this->action,'dialogMethod'=>$this->subaction); + + return $vars; + } +} +?> + diff --git a/modules/template_engine/components/html/link/link.js b/modules/template_engine/components/html/link/link.js @@ -0,0 +1,8 @@ +Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { + + // Links aktivieren... + $(element).find('.clickable').orLinkify(); + +}); + + diff --git a/modules/template_engine/components/html/link/link.min.js b/modules/template_engine/components/html/link/link.min.js @@ -0,0 +1 @@ +;Openrat.Workbench.afterViewLoadedHandler.add(function(e){$(e).find('.clickable').orLinkify()});+ \ No newline at end of file diff --git a/modules/template_engine/components/html/list/List.class.php b/modules/template_engine/components/html/list/List.class.php @@ -0,0 +1,29 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\PHPBlockElement; + +class ListComponent extends Component +{ + + public $list; + + public $extract = false; + + public $key = 'list_key'; + + public $value = 'list_value'; + + public function createElement() + { + $list = new PHPBlockElement(); + $list->beforeBlock = 'foreach($'.$this->list.' as $' . $this->key . '=>$' . $this->value . ')'; + + if ($this->extract) + $list->inBlock = 'extract($' . $this->value . ');'; + + return $list; + } + +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/logo/Logo.class.php b/modules/template_engine/components/html/logo/Logo.class.php @@ -0,0 +1,34 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement;use modules\template_engine\HtmlElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class LogoComponent extends Component +{ + public $name; + + public function createElement() + { + $logo = new CMSElement('div'); + $logo->addStyleClass('line logo'); + + $label = (new HtmlElement('div'))->addStyleClass('label'); + + $image = (new CMSElement('img'))->addAttribute('src','themes/default/images/logo_'.$this->name.'.png')->addAttribute('border','0'); + $label->addChild($image); + + $logo->addChild($label); + + $holder = (new HtmlElement('div'))->addStyleClass('input'); + $logo->addChild($holder); + + $holder->addChild( (new CMSElement('h2'))->content(Value::createExpression( ValueExpression::TYPE_MESSAGE,'logo_'.$this->name ))); + $holder->addChild( (new CMSElement('p') )->content(Value::createExpression( ValueExpression::TYPE_MESSAGE,'logo_'.$this->name.'_text'))); + + return $logo; + } + +} diff --git a/modules/template_engine/components/html/newline/Newline.class.php b/modules/template_engine/components/html/newline/Newline.class.php @@ -0,0 +1,19 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\Element; +use modules\template_engine\HtmlElement; + +/** + * Newline-Component + */ +class NewlineComponent extends Component +{ + + public function createElement() + { + return (new HtmlElement('br')); + } +} + diff --git a/modules/template_engine/components/html/output/Output.class.php b/modules/template_engine/components/html/output/Output.class.php @@ -0,0 +1,14 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\Element; + +class OutputComponent extends Component +{ + public function createElement() + { + // No content. + return new Element(null ); + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/page/Page.class.php b/modules/template_engine/components/html/page/Page.class.php @@ -0,0 +1,15 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\Element; + +class PageComponent extends Component +{ + public function createElement() + { + // No content. + return new Element(null ); + } +} + diff --git a/modules/template_engine/components/html/part/Part.class.php b/modules/template_engine/components/html/part/Part.class.php @@ -0,0 +1,26 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\HtmlElement; + +class PartComponent extends Component +{ + public $class = ''; + public $id; + + public function createElement() + { + $element = (new CMSElement('div'))->selfClosing(false); + + foreach( explode(',',$this->class ) as $styleClass ) + $element->addStyleClass( $styleClass ); + + if ( $this->id ) + $element->addAttribute('id',$this->id); + + return $element; + } + +} diff --git a/modules/template_engine/components/html/password/Password.class.php b/modules/template_engine/components/html/password/Password.class.php @@ -0,0 +1,39 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\HtmlElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class PasswordComponent extends FieldComponent +{ + + public $default; + + public $size = 40; + + public $maxlength = 256; + + public function createElement() + { + $input = (new CMSElement('input'))->addAttribute('type','password'); + + $input->addAttribute('name',$this->name); + /*echo ' id="<?php echo REQUEST_ID ?>_' . $this->htmlvalue($this->name) . '"'; + */ + + $input->addAttribute('size',$this->size); + $input->addAttribute('maxlength',$this->maxlength); + $input->addStyleClass($this->class); + + + if ($this->default) + $input->addAttribute('value',$this->default); + else + $input->addAttribute('value',Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); + + return (new HtmlElement('div'))->addStyleClass('inputholder')->addChild($input); + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/qrcode/Qrcode.class.php b/modules/template_engine/components/html/qrcode/Qrcode.class.php @@ -0,0 +1,27 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class QrcodeComponent extends Component +{ + + public $value; + + + public function createElement() + { + $qrcode = (new CMSElement('i')) + ->addStyleClass('image-icon') + ->addStyleClass('image-icon--menu-qrcode') + ->addStyleClass('or-qrcode') + ->addStyleClass('or-info') + ->addAttribute('data-qrcode', $this->value) + ->addAttribute('title', Value::createExpression(ValueExpression::TYPE_MESSAGE, 'QRCODE_SHOW')); + + return $qrcode; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/qrcode/qrcode.js b/modules/template_engine/components/html/qrcode/qrcode.js @@ -0,0 +1,28 @@ + +Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { + + + // Show QR-Code + $(element).find('.or-qrcode').mouseover( function() { + + let element = this; + if ( $(element).children().length > 0 ) + return; + + let wrapper = $('<div class="or-info-popup"></div>'); + + $(element).append(wrapper); + + var qrcodetext = $(element).attr('data-qrcode'); + + $(wrapper).qrcode( { render : 'div', + text : qrcodetext, + fill : 'currentColor' } ); + + + // Title is disturbing the qr-code. Do not inherit it. + wrapper.attr('title',''); + + } ); + +} );+ \ No newline at end of file diff --git a/modules/template_engine/components/html/qrcode/qrcode.min.js b/modules/template_engine/components/html/qrcode/qrcode.min.js @@ -0,0 +1 @@ +;Openrat.Workbench.afterViewLoadedHandler.add(function(r){$(r).find('.or-qrcode').mouseover(function(){let r=this;if($(r).children().length>0)return;let wrapper=$('<div class="or-info-popup"></div>');$(r).append(wrapper);var e=$(r).attr('data-qrcode');$(wrapper).qrcode({render:'div',text:e,fill:'currentColor'});wrapper.attr('title','')})});+ \ No newline at end of file diff --git a/modules/template_engine/components/html/radio/Radio.class.php b/modules/template_engine/components/html/radio/Radio.class.php @@ -0,0 +1,62 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class RadioComponent extends FieldComponent +{ + + // Bisher nicht in Benutzung. + public $readonly = false; + + public $value; + + public $prefix=''; + + public $suffix=''; + + public $class = ''; + + public $onchange; + + public $children; + + public $checked; + + public $label = ''; + + + + public function createElement() + { + + $radio = (new CMSElement('input'))->addAttribute('type','radio'); + + + $radio->addAttribute('name',$this->name); + $radio->addAttribute('disabled',$this->readonly); + $radio->addAttribute('value',$this->value); + $radio->addAttribute('checked',Value::createExpression(ValueExpression::TYPE_DATA_VAR,$this->name)); + + if ( $this->readonly && $this->required ) { + $hidden = (new CMSElement('input'))->addAttribute('type','hidden')->addAttribute('name',$this->name)->addAttribute('value','1'); + $radio->addChild( $hidden ); + } + + if ( $this->class ) + $radio->addStyleClass($this->class); + + if ( $this->label ) { + $label = new CMSElement('label'); + $label->addStyleClass('or-form-row')->addStyleClass('or-form-radio'); + $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); + $radio->asChildOf($label); + return $label; + } + + return $radio; + } +} diff --git a/modules/template_engine/components/html/radiobox/Radiobox.class.php b/modules/template_engine/components/html/radiobox/Radiobox.class.php @@ -0,0 +1,56 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\PHPBlockElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class RadioboxComponent extends Component +{ + + public $list; + + public $name; + + public $default; + + /** + * @deprecated + */ + public $onchange; + + public $title; + + public $class; + + + public function createElement() + { + $radiobox = new PHPBlockElement(); + + $radiobox->beforeBlock = 'foreach( $'.$this->list.' as $_key=>$_value)'; + + if ( $this->default ) + $value = $this->default; + else + $value = '$'.$this->name; + + $label = (new CMSElement('label'))->asChildOf( $radiobox ); + + (new CMSElement('input')) + ->addAttribute('type','radio')->addAttribute('name',$this->name) + ->addAttribute('value',Value::createExpression(ValueExpression::TYPE_DATA_VAR,'_key')) + ->addConditionalAttribute('checked','$_key=='.$value,'checked') + ->asChildOf($label); + + (new CMSElement('span')) + ->content( Value::createExpression(ValueExpression::TYPE_DATA_VAR,'_value')) + ->asChildOf( $label ); + (new CMSElement('br')) + ->asChildOf( $radiobox ); + + return $radiobox; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/row/Row.class.php b/modules/template_engine/components/html/row/Row.class.php @@ -0,0 +1,26 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; + +class RowComponent extends Component +{ + + public $class = ''; + + public $id = ''; + + public function createElement() + { + $row = new CMSElement('tr' ); + + if ($this->class) + $row->addStyleClass($this->class); + + if ($this->id) + $row->addAttribute('data-id',$this->id); + + return $row; + } +} diff --git a/modules/template_engine/components/html/selectbox/Selectbox.class.php b/modules/template_engine/components/html/selectbox/Selectbox.class.php @@ -0,0 +1,110 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\PHPBlockElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class SelectboxComponent extends Component +{ + + public $list; + + public $name; + + public $default; + + /** + * Titel + * @var unknown + */ + public $title; + + /** + * Style-Klasse + */ + public $class; + + /** + * Leere Auswahlmöglichkeit hinzufügen. + * @var string + */ + public $addempty = false; + + /** + * Mehrfachauswahl möglich? + * @var string + */ + public $multiple = false; + + /** + * Größe des Eingabefeldes + * @var integer + */ + public $size = 1; + + /** + * Ob es sich bei den Option-Werten um Sprachschlüssel handelt. + * @var string + */ + public $lang = false; + + + public $label; + + + + public function createElement() + { + $selectbox = (new CMSElement('select')); + + + $selectbox->addAttribute('name',$this->name); + //$selectbox->addAttribute('disabled',$this->readonly); + + + if ( $this->class ) + $selectbox->addStyleClass($this->class); + + if ( $this->title ) + $selectbox->addAttribute('title',$this->title); + + if ( $this->multiple ) + $selectbox->addAttribute('multiple','multiple'); + + $selectbox->addAttribute('size',$this->size); + + if ( $this->addempty ) + $selectbox->addChild( (new CMSElement('option'))->addAttribute('value','')->content( Value::createExpression(ValueExpression::TYPE_MESSAGE,'LIST_ENTRY_EMPTY'))); + + $optionLoop = (new PHPBlockElement())->asChildOf($selectbox); + + if ( $this->default ) + $value = $this->default; + else + $value = '$'.$this->name; + + // Create the option list. + $optionLoop->beforeBlock = 'foreach($'.$this->list.' as $_key=>$_value)'; + $option = (new CMSElement('option')) + ->addAttribute('value',Value::createExpression( ValueExpression::TYPE_DATA_VAR,'_key')) + ->content(Value::createExpression( ValueExpression::TYPE_DATA_VAR,'_value')) + ->addConditionalAttribute('selected','$_key=='.$value,'selected'); + + $optionLoop->addChild($option); + + // Wrap into a label, if necessary. + if ( $this->label ) { + $label = new CMSElement('label'); + $label->addStyleClass('or-form-row')->addStyleClass('or-form-input'); + $label->addChild( (new CMSElement('span'))->addStyleClass('or-form-label')->content($this->label)); + $label->addChild( $selectbox ); + return $label; + } + else { + return $selectbox; + } + } +} diff --git a/modules/template_engine/components/html/selector/Selector.class.php b/modules/template_engine/components/html/selector/Selector.class.php @@ -0,0 +1,47 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; + +class SelectorComponent extends Component +{ + + public $types; + + public $name; + + public $id; + + public $folderid; + + public $param; + + public function createElement() + { + return new CMSElement(null); + } + + public function unused____begin() + { + $types = mlvalue($this->types); + $name = $this->htmlvalue($this->name); + $id = $this->htmlvalue($this->id); + $folderid = $this->htmlvalue($this->folderid); + $param = $this->htmlvalue($this->param); + + echo <<<HTML +<div class="selector"> +<div class="inputholder or-droppable"> +<input type="hidden" class="or-selector-link-value" name="{$param}" value="{$id}" /> +<input type="text" class="or-selector-link-name" value="{$name}" placeholder="{$name}" /> +</div> +<div class="dropdown"></div> +<div class="tree selector" data-types="{types}" data-init-id="{$id}" data-init-folderid="{$folderid}"> +</div> +</div> +HTML; + } +} + +?>+ \ No newline at end of file diff --git a/modules/template_engine/components/html/set/Set.class.php b/modules/template_engine/components/html/set/Set.class.php @@ -0,0 +1,32 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\PHPBlockElement; + +class SetComponent extends Component +{ + public $var; + public $value; + public $key; + + + public function createElement() + { + $set = new PHPBlockElement(); + + if ($this->value) + { + if ($this->key) + $set->inBlock = '$'.$set->varname($this->var).'= '.$set->value($this->value).'['.$set->value($this->key).'];'; + else + $set->inBlock = '$'.$set->varname($this->var).'= '.$set->value($this->value).';'; + } + else { + // Unset + $set->inBlock = 'unset($'.$set->varname($this->var).')'; + } + + return $set; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/table/Table.class.php b/modules/template_engine/components/html/table/Table.class.php @@ -0,0 +1,44 @@ +<?php + +namespace template_engine\components; + +use modules\template_engine\CMSElement; +use modules\template_engine\HtmlElement; +use modules\template_engine\Value; +use modules\template_engine\ValueExpression; + +class TableComponent extends HtmlComponent +{ + public $filter = true; + + public $width = '100%'; + + + public function createElement() + { + $tableWrapper = (new HtmlElement('div'))->addStyleClass('or-table-wrapper'); + + if ( $this->filter) + { + $filterInput = (new CMSElement('input'))->addAttribute('type','search')->addAttribute('name','filter')->addAttribute('placeholder',Value::createExpression(ValueExpression::TYPE_MESSAGE,'SEARCH_FILTER')); + $filter = (new HtmlElement('div'))->addStyleClass('or-table-filter')->addChild( $filterInput ); + $tableWrapper->addChild($filter); + } + + $tableContent = (new HtmlElement('div'))->addStyleClass('or-table-area'); + + $table = new CMSElement('table'); + + $tableWrapper->addChild( $tableContent->addChild( $table) ); + + if ( $this->class) + $table->addStyleClass($this->class); + + if ( $this->width) + $table->addAttribute('width',$this->width); + + $this->adoptiveElement = $table; + + return $tableWrapper; + } +}+ \ No newline at end of file diff --git a/modules/template_engine/components/html/table/table.css b/modules/template_engine/components/html/table/table.css @@ -0,0 +1,175 @@ +.or-table-wrapper .or-table-area { + /* Responsive Tables */ + /* T a b l e s */ +} +@media screen and (max-width: 40em) { + .or-table-wrapper .or-table-area { + overflow-x: auto; + } +} +.or-table-wrapper .or-table-area table { + overflow: auto; + border: 2px; + width: 100%; + /* Notizen */ + /* Kalender */ + /* Notizen */ + /* Kalender */ + /* Message of the day */ + /* D i f f */ + /* Hilfe-Texte */ + /* Logo */ +} +.or-table-wrapper .or-table-area table tr.headline > td, +.or-table-wrapper .or-table-area table tr > th { + padding: 3px; + font-weight: bold; +} +.or-table-wrapper .or-table-area table tr.headline > td.sort-asc > span:last-child:after, +.or-table-wrapper .or-table-area table tr > th.sort-asc > span:last-child:after { + content: " \2193"; +} +.or-table-wrapper .or-table-area table tr.headline > td.sort-desc > span:last-child:after, +.or-table-wrapper .or-table-area table tr > th.sort-desc > span:last-child:after { + content: " \2191"; +} +.or-table-wrapper .or-table-area table tr.data > td { + padding: 3px; +} +.or-table-wrapper .or-table-area table tr > td { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + max-width: 0; +} +.or-table-wrapper .or-table-area table td.readonly { + font-style: italic; + font-weight: normal; +} +.or-table-wrapper .or-table-area table td.default { + font-style: normal; + font-weight: normal; +} +.or-table-wrapper .or-table-area table td.changed { + font-style: normal; + font-weight: bold; +} +.or-table-wrapper .or-table-area table td.notice { + margin: 0px; + padding: 5%; + text-align: center; +} +.or-table-wrapper .or-table-area table.notice { + width: 100%; + border: 1px solid; + border-spacing: 0px; +} +.or-table-wrapper .or-table-area table.notice th { + padding: 2px; + white-space: nowrap; + border-bottom: 1px solid #000000; + font-weight: normal; + text-align: left; +} +.or-table-wrapper .or-table-area table.notice tr.warning { + margin: 0px; + padding: 0px; +} +.or-table-wrapper .or-table-area table.calendar { + table-layout: fixed; + border-collapse: collapse; + text-align: center; +} +.or-table-wrapper .or-table-area table.calendar td { + border: 1px dotted; +} +.or-table-wrapper .or-table-area table td.notice { + margin: 0px; + padding: 5%; + text-align: center; +} +.or-table-wrapper .or-table-area table.notice { + width: 100%; + border: 1px solid; + border-spacing: 0px; +} +.or-table-wrapper .or-table-area table.notice th { + padding: 2px; + white-space: nowrap; + border-bottom: 1px solid #000000; + font-weight: normal; + text-align: left; +} +.or-table-wrapper .or-table-area table.notice tr.warning { + margin: 0px; + padding: 0px; +} +.or-table-wrapper .or-table-area table.calendar { + table-layout: fixed; + border-collapse: collapse; + text-align: center; +} +.or-table-wrapper .or-table-area table.calendar td { + border: 1px dotted; +} +.or-table-wrapper .or-table-area table td.motd { + border-left: 3px solid red; + border-right: 3px solid red; + font-weight: bold; + padding: 10px; + margin: 10px; +} +.or-table-wrapper .or-table-area table td:hover > div.onrowvisible { + visibility: visible; +} +.or-table-wrapper .or-table-area table tr.diff { + /* Unveränderter Text */ + /* Entfernter Text */ + /* Hinzugefuegter Text */ + /* Geaenderter Text */ +} +.or-table-wrapper .or-table-area table tr.diff > td.line { + background-color: #000000; + padding-right: 2px; + border-right: 3px solid #000000; + text-align: right; + margin-right: 2px; +} +.or-table-wrapper .or-table-area table tr.diff > td.old { + background-color: red; +} +.or-table-wrapper .or-table-area table tr.diff td.new { + background-color: green; +} +.or-table-wrapper .or-table-area table tr.diff td.notequal { + background-color: yellow; +} +.or-table-wrapper .or-table-area table tr td.help { + font-style: italic; +} +.or-table-wrapper .or-table-area table tr.headline td.help { + /* + border-bottom:1px solid @color-overridden-by-theme; + */ + font-style: normal; +} +.or-table-wrapper .or-table-area table td.logo { + padding: 10px; + margin: 0px; +} +.or-table-wrapper .or-table-filter { + width: 100%; + text-align: right; +} +.or-table-wrapper .or-table-filter input { + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -khtml-border-radius: 3px; + padding: 0.5em; + margin: 1em; + background-color: #000000; + color: #000000; + border: 1px solid #000000; +} +/*# sourceMappingURL=data:application/json,%7B%22version%22%3A3%2C%22sources%22%3A%5B%22table.less%22%5D%2C%22names%22%3A%5B%5D%2C%22mappings%22%3A%22AASA%2CiBAEI%3B%3B%3B%3BAAQI%2CmBALoC%3BCAKpC%2CiBARJ%3BEAKQ%3B%3B%3BAAPZ%2CiBAEI%2CeASI%3BCACI%3BCACA%3BCACA%3B%3B%3B%3B%3B%3B%3B%3B%3B%3BAAdZ%2CiBAEI%2CeASI%2CMAKI%2CGAAE%2CSAAY%3BAAhB1B%2CiBAEI%2CeASI%2CMAMI%2CGAAK%3BCAED%3BCACA%3B%3BAAEA%2CiBApBZ%2CeASI%2CMAKI%2CGAAE%2CSAAY%2CKAMT%2CSAAY%2COAAI%2CWAAW%3BAAA5B%2CiBApBZ%2CeASI%2CMAMI%2CGAAK%2CKAKA%2CSAAY%2COAAI%2CWAAW%3BCACxB%2CSAAS%2CQAAT%3B%3BAAEJ%2CiBAvBZ%2CeASI%2CMAKI%2CGAAE%2CSAAY%2CKAST%2CUAAa%2COAAI%2CWAAW%3BAAA7B%2CiBAvBZ%2CeASI%2CMAMI%2CGAAK%2CKAQA%2CUAAa%2COAAI%2CWAAW%3BCACzB%2CSAAS%2CQAAT%3B%3BAA1BpB%2CiBAEI%2CeASI%2CMAmBI%2CGAAE%2CKAAQ%3BCACN%3B%3BAA%5C%2FBhB%2CiBAEI%2CeASI%2CMAuBI%2CGAAK%3BCACD%3BCACA%3BCACA%3BCACA%3B%3BAAtChB%2CiBAEI%2CeASI%2CMA8BI%2CGAAE%3BCACE%3BCACA%3B%3BAA3ChB%2CiBAEI%2CeASI%2CMAkCI%2CGAAE%3BCACE%3BCACA%3B%3BAA%5C%2FChB%2CiBAEI%2CeASI%2CMAsCI%2CGAAE%3BCACE%3BCACA%3B%3BAAnDhB%2CiBAEI%2CeASI%2CMA2CI%2CGAAE%3BCACE%3BCACA%3BCACA%3B%3BAAGJ%2CiBA1DR%2CeASI%2CMAiDK%3BCACG%3BCACA%2CiBAAA%3BCACA%3B%3BAAHJ%2CiBA1DR%2CeASI%2CMAiDK%2COAIG%3BCACI%3BCACA%3BCACA%2CgCAAA%3BCACA%3BCACA%3B%3BAATR%2CiBA1DR%2CeASI%2CMAiDK%2COAeG%2CGAAE%3BCACE%3BCACA%3B%3BAAKR%2CiBAhFR%2CeASI%2CMAuEK%3BCACG%3BCACA%3BCACA%3B%3BAAHJ%2CiBAhFR%2CeASI%2CMAuEK%2CSAKG%3BCACI%2CkBAAA%3B%3BAAxFpB%2CiBAEI%2CeASI%2CMAkFI%2CGAAE%3BCACE%3BCACA%3BCACA%3B%3BAAGJ%2CiBAjGR%2CeASI%2CMAwFK%3BCACG%3BCACA%2CiBAAA%3BCACA%3B%3BAAGJ%2CiBAvGR%2CeASI%2CMA8FK%2COAAQ%3BCACL%3BCACA%3BCACA%2CgCAAA%3BCACA%3BCACA%3B%3BAAMJ%2CiBAlHR%2CeASI%2CMAyGK%2COAAQ%2CGAAE%3BCACP%3BCACA%3B%3BAAIJ%2CiBAxHR%2CeASI%2CMA%2BGK%3BCACG%3BCACA%3BCACA%3B%3BAAGJ%2CiBA9HR%2CeASI%2CMAqHK%2CSAAU%3BCACP%2CkBAAA%3B%3BAAjIhB%2CiBAEI%2CeASI%2CMAyHI%2CGAAE%3BCACE%2C0BAAA%3BCACA%2C2BAAA%3BCACA%3BCACA%3BCACA%3B%3BAAzIhB%2CiBAEI%2CeASI%2CMAgII%2CGAAE%2CMAAS%2CMAAG%3BCACV%3B%3BAA5IhB%2CiBAEI%2CeASI%2CMAqII%2CGAAE%3B%3B%3B%3B%3B%3BAAhJd%2CiBAEI%2CeASI%2CMAqII%2CGAAE%2CKACI%2CKAAE%3BCACA%2CyBAAA%3BCACA%3BCACA%2C%2BBAAA%3BCACA%3BCACA%3B%3BAAtJpB%2CiBAEI%2CeASI%2CMAqII%2CGAAE%2CKAcI%2CKAAE%3BCACA%3B%3BAA%5C%2FJpB%2CiBAEI%2CeASI%2CMAqII%2CGAAE%2CKAmBE%2CGAAE%3BCACE%3B%3BAApKpB%2CiBAEI%2CeASI%2CMAqII%2CGAAE%2CKAwBE%2CGAAE%3BCACE%3B%3BAAzKpB%2CiBAEI%2CeASI%2CMAmKI%2CGAAG%2CGAAE%3BCACD%3B%3BAA%5C%2FKhB%2CiBAEI%2CeASI%2CMAuKI%2CGAAE%2CSAAU%2CGAAE%3B%3B%3B%3BCAIV%3B%3BAAtLhB%2CiBAEI%2CeASI%2CMAgLI%2CGAAE%3BCACE%3BCACA%3B%3BAA7LhB%2CiBAsMI%3BCACI%3BCACA%3B%3BAAxMR%2CiBAsMI%2CiBAII%3BCAhNJ%2CkBAAA%3BCACA%2CuBAAA%3BCACA%2C0BAAA%3BCACA%2CyBAAA%3BCA%2BMQ%3BCACA%3BCACA%2CyBAAA%3BCACA%2CcAAA%3BCACA%2CyBAAA%22%7D */+ \ No newline at end of file diff --git a/modules/template_engine/components/html/table/table.js b/modules/template_engine/components/html/table/table.js @@ -0,0 +1,87 @@ +Openrat.Workbench.afterViewLoadedHandler.add( function(element ) { + + + // Manuelles Sortieren von Tabellen per Drag and drop. + $(element).find('table.or-table--sortable > tbody').sortable(); + + + $(element).find('table.or-table--sortable > tbody').closest('form').submit( function() { + + // Analyse the order of the objects in this folder. + var order = new Array(); + + $(this).find('table.or-table--sortable').find('tbody > tr.data').each(function () { + let objectid = $(this).data('id'); + order.push(objectid); + }); + + // Set the comma-separated list of objects into a input field. + $(this).find('input[name=order]').val(order.join(',')); + } + ); + + + // Alle Checkboxen setzen oder nicht setzen. + $(element).find('tr.headline > td > input.checkbox').click( function() { + $(this).closest('table').find('tr.data > td > input.checkbox').attr('checked',Boolean( $(this).attr('checked') ) ); + }); + + /** + * Table-Filter. + */ + $(element).find('.or-table-filter > input').keyup( function() { + + let filterExpression = $(this).val().toLowerCase(); + + let table = $(this).parents('.or-table-wrapper').find('table'); + table.addClass('loader'); + + setTimeout( () => { + table.find('tr:not(.headline)').filter(function () { + $(this).toggle($(this).text().toLowerCase().indexOf(filterExpression) > -1) + }) + table.removeClass('loader'); + }, 50); + + } ); + + + /** + * Table-Sortierung. + */ + $(element).find('table > tbody > tr.headline > td, table > tbody > tr > th').click( function() { + + let column = $(this); + let table = column.parents('table'); + table.addClass('loader'); + + let isAscending = !column.hasClass('sort-asc'); + table.find('tr.headline > td, tr > th').removeClass('sort-asc sort-desc'); + if ( isAscending ) column.addClass('sort-asc'); else column.addClass('sort-desc'); + + setTimeout(function () { // Sorting should be asynchronous, because we do not want to block the UI. + + let rows = table.find('tr:gt(0)').toArray().sort(comparer(column.index())) + if (!isAscending) { + rows = rows.reverse() + } + for (var i = 0; i < rows.length; i++) { + table.append(rows[i]) + } + table.removeClass('loader'); + }, 50); + + } ); + + function comparer(index) { + return function(a, b) { + let valA = getCellValue(a, index), valB = getCellValue(b, index) + return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB) + } + } + + function getCellValue(row, index) { + return $(row).children('td').eq(index).text(); + } + +});+ \ No newline at end of file diff --git a/modules/template_engine/components/html/table/table.less b/modules/template_engine/components/html/table/table.less @@ -0,0 +1,221 @@ +@color-overridden-by-theme: black; + +.border-radius (@radius) { + border-radius: @radius; + -moz-border-radius: @radius; + -webkit-border-radius: @radius; + -khtml-border-radius: @radius; +} + +.or-table-wrapper { + + .or-table-area { + + /* Responsive Tables */ + @media screen and (max-width: 40em) { + + overflow-x: auto; + } + + /* T a b l e s */ + table { + overflow: auto; + border: 2px; + width: 100%; + + tr.headline > td, + tr > th { + + padding: 3px; + font-weight: bold; + + &.sort-asc > span:last-child:after { + content: " \2193"; + } + &.sort-desc > span:last-child:after { + content: " \2191"; + } + } + + tr.data > td { + padding: 3px; + } + + tr > td { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + max-width: 0; + } + + td.readonly { + font-style: italic; + font-weight: normal; + } + td.default { + font-style: normal; + font-weight: normal; + } + td.changed { + font-style: normal; + font-weight: bold; + } + /* Notizen */ + td.notice { + margin: 0px; + padding: 5%; + text-align: center; + } + + &.notice { + width: 100%; + border: 1px solid; + border-spacing: 0px; + th { + padding: 2px; + white-space: nowrap; + border-bottom: 1px solid @color-overridden-by-theme; + font-weight: normal; + text-align: left; + } + + tr.error { + } + + tr.warning { + margin: 0px; + padding: 0px; + } + } + + /* Kalender */ + &.calendar { + table-layout: fixed; + border-collapse: collapse; + text-align: center; + + td { + border: 1px dotted; + } + } + + /* Notizen */ + td.notice { + margin: 0px; + padding: 5%; + text-align: center; + } + + &.notice { + width: 100%; + border: 1px solid; + border-spacing: 0px; + } + + &.notice th { + padding: 2px; + white-space: nowrap; + border-bottom: 1px solid @color-overridden-by-theme; + font-weight: normal; + text-align: left; + } + + &.notice tr.error { + } + + &.notice tr.warning { + margin: 0px; + padding: 0px; + } + + /* Kalender */ + &.calendar { + table-layout: fixed; + border-collapse: collapse; + text-align: center; + } +