UNPKG

mmir-lib

Version:

MMIR (Mobile Multimodal Interaction and Relay) library

479 lines (464 loc) 16 kB
define( /** * This module holds functions / classes for template parsing. * * <p> * This module contains definitions for constants used in the Template Parser and Renderer. * * * * @namespace * @name mmir.parser * @example * //access the parser module * var someConst = mmir.require('mmirf/parserModule').element.INCLUDE_SCRIPT; * ... * */ function( ){ var parser = { /** * the root path for stylesheets: * will be prepended to file-paths when rendering <code>@style(file-path)</code> * * @static * @type String * @default "" * @memberOf mmir.parser */ stylesRoot: '', /** * @class * @name mmir.parser.Element * @static */ element: { //TODO detect&use Object.defineProperty (if positively detected), e.g.: // Object.defineProperty(parser.element, 'INCLUDE_SCRIPT', {value : 0, writable : false, configurable : false, enumerable : true}); /** * Constant for template expression type <tt>include script</tt>. * * <p> * The template expression generates a script TAG. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type INCLUDE_SCRIPT: * <ul> * <li><strong>scriptPath</strong>: the path / URL to the resource</li> * <li><strong>scriptPathType</strong>: the type of the <tt>scriptPath</tt> * field: one of <code>StringLiteral</code>, <code>Identifier</code>, <code>IdentifierNameAmpersatStart</code></li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ INCLUDE_SCRIPT : 0, /** * Constant for template expression type <tt>include style</tt>. * * <p> * The template expression generates a style reference, i.e. * a link TAG with <tt>rel</tt> attribute <code>stylesheet</code>. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type INCLUDE_STYLE: * <ul> * <li><strong>stylePath</strong>: </li> * <li><strong>stylePathType</strong>: the type of the <tt>stylePath</tt> * field: one of <code>StringLiteral</code>, <code>Identifier</code>, <code>IdentifierNameAmpersatStart</code></li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ INCLUDE_STYLE : 2, /** * Constant for template expression type <tt>localize</tt>. * * <p> * The template expression inserts a localized String. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type LOCALIZE: * <ul> * <li><strong>name</strong>: the name/identifier for the localized String</li> * <li><strong>nameType</strong>: the type of the <tt>name</tt> * field: one of <code>StringLiteral</code>, <code>Identifier</code>, <code>IdentifierNameAmpersatStart</code></li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ LOCALIZE : 4, /** * Constant for template expression type <tt>yield declaration</tt>. * * <p> * The template expression declares a yield section. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type YIELD_DECLARATION: * <ul> * <li><strong>name</strong>: the name/identifier for the yield section</li> * <li><strong>nameType</strong>: the type of the <tt>name</tt> * field: one of <code>StringLiteral</code>, <code>Identifier</code>, <code>IdentifierNameAmpersatStart</code></li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ YIELD_DECLARATION : 8, /** * Constant for template expression type <tt>yield content</tt>. * * <p> * The template expression specifies the content of a yield section. * * <p> * A yield section corresponds to a {@link mmir.view.ContentElement}: * Its content can itself contain HTML content as well as template expressions. * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ YIELD_CONTENT : 16, /** * Constant for template expression type <tt>code block</tt>. * * <p> * The template expression represents a compiled code block (script). * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type BLOCK: * <ul> * <li><strong>scriptContent</strong> {String}: <tt>OPTIONALLY</tt> the script code as a String</li> * <li><strong>scriptEval</strong> {Function}: the compiled script code in form of a function. The * function takes one argument: the current data-object.</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ BLOCK : 32, /** * Constant for template expression type <tt>code statement</tt>. * * <p> * The template expression represents a compiled code statement (script). * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type STATEMENT: * <ul> * <li><strong>scriptContent</strong> {String}: <tt>OPTIONALLY</tt> the script code as a String</li> * <li><strong>scriptEval</strong> {Function}: the compiled script code in form of a function. The * function takes one argument: the current data-object.</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ STATEMENT : 64, /** * Constant for template expression type <tt>helper</tt>. * * <p> * The template expression will invoke a function in the {@link mmir.ctrl.Helper} instance * (depending of the {@link mmir.ctrl.Controller}, in which's view definition this template expression is used). * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type HELPER: * <ul> * <li><strong>helper</strong>: the name of the helper function</li> * <li><strong>helperType</strong>: the type of the <tt>helper</tt> * field: one of <code>StringLiteral</code>, <code>Identifier</code>, <code>IdentifierNameAmpersatStart</code></li> * <li><strong>argsEval</strong> {Function}: OPTIONALLY compiled getter Function for retrieving the current ARGS * (optional argument) of the helper expression. The function takes one argument: the current data-object.</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ HELPER : 128, /** * Constant for template expression type <tt>if</tt>. * * <p> * The template expression represents an if-expression, including the content-block * that follows the condition-statement of the if-expression. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type IF: * <ul> * <li><strong>ifEval</strong> {Function}: the condition statement, that was compiled into a Function. The * function takes one argument: the current data-object.</li> * <li><strong>content</strong> {ContentElement}: the HTML / template content that should be render, in case the * if-expression evaluates to <code>true</code>.</li> * <li><strong>elseContent</strong> {@link mmir.parser.ParsingResult}: OPTIONALLY a ParsingResult * representing an else-expression, see {@link mmir.parser.Element.ELSE}.</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ IF : 256, /** * Constant for template expression type <tt>else</tt>. * * <p> * The template expression represents an else-expression (including its content-block); * an else-expression may occur in combination with an if-expression, see {@link mmir.parser.Element.IF}. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type ELSE: * <ul> * <li><strong>content</strong> {ContentElement}: the HTML / template content that should be render, in case the * if-expression (to which the else-expression belongs) evaluates to <code>false</code>.</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ ELSE : 512, /** * Constant for template expression type <tt>for</tt>. * * <p> * The template expression represents for-expression (including its content-block); * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type FOR: * <ul> * <li><strong>forControlType</strong> {String}: the type of for-loop, either <code>FORITER</code> or <code>FORSTEP</code></li> * <li><strong>forInitEval</strong> {Function}: the initialization statement of the for-expression, compiled into * a Function. The function takes one argument: the current data-object.</li> * * <li><code>FORITER</code>: <code>@for(PROP in OBJ){ ... }@</code> * <ul> * <li><strong>forIterator</strong> {Object}: an iterator object with functions <code>hasNext() : Boolean</code> and * <code>next() : String</code> (which returns the name of the property currently iterated).</li> * <li><strong>forPropName</strong> {String}: the variable name for the property which is currently iterated over.</li> * </ul> * </li> * <li><code>FORSTEP</code>: <code>@for(INIT; CONDITION; INCREMENT){ ... }@</code> * <ul> * <li><strong>forConditionEval</strong> {Function}: the condition statement of the for-expression, compiled into * a Function. The function takes one argument: the current data-object.</li> * <li><strong>forIncrementEval</strong> {Function}: the increment statement of the for-expression, compiled into * a Function. The function takes one argument: the current data-object.</li> * </ul> * </li> * <li><strong>content</strong> {ContentElement}: the HTML / template content that should be rendered * during each iteration of the for-loop.</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ FOR : 1024, /** * Constant for template expression type <tt>render</tt>. * * <p> * The template expression renders a <tt>partial view</tt> into a view. * * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type RENDER: * <ul> * <li><strong>partial</strong>: the name of the partial view</li> * <li><strong>partialType</strong>: the type of the <tt>partial</tt> * field: one of <code>StringLiteral</code>, <code>Identifier</code>, <code>IdentifierNameAmpersatStart</code></li> * <li><strong>controller</strong>: the name of the controller, to which the partial view definition belongs</li> * <li><strong>controllerType</strong>: the type of the <tt>controller</tt> * field: one of <code>StringLiteral</code>, <code>Identifier</code>, <code>IdentifierNameAmpersatStart</code></li> * <li><strong>argsEval</strong> {Function}: OPTIONALLY compiled getter Function for retrieving the current ARGS * (optional argument) of the render expression. The function takes one argument: the current data-object.</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ RENDER : 2048, /** * Constant for template expression type <tt>escape enter</tt>. * * <p> * The template expression represents an escape statement (when entering a template expression); * escaping means, that the following sequence is not interpreted as template expression. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type ESCAPE_ENTER: * <ul> * <li><strong>text</strong> {String}: the text that will be rendered (i.e. without the escape-character(s) itself).</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ ESCAPE_ENTER : 4096, /** * Constant for template expression type <tt>escape exit</tt>. * * <p> * The template expression represents an escape statement (when exiting a template expression); * escaping means, that the following sequence is not interpreted as template expression. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type ESCAPE_EXIT: * <ul> * <li><strong>text</strong> {String}: the text that will be rendered (i.e. without the escape-character(s) itself).</li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ ESCAPE_EXIT : 8192, /** * Constant for for-expression type <tt>iter</tt> ("iteration"). * * <p> * This type identifies an ITERATION type for-expression. * * * @memberOf mmir.parser.Element * @constant * @type Number * @public * * @see parser.element.FOR */ FOR_TYPE_ITER : 16384, /** * Constant for for-expression type <tt>step</tt> ("step-wise"). * * <p> * This type identifies an STEP-wise type for-expression. * * * @memberOf mmir.parser.Element * @constant * @type Number * @public * * @see parser.element.FOR */ FOR_TYPE_STEP : 32768, /** * Constant for template expression type <tt>variable declaration</tt>. * * <p> * The template expression represents a variable declaration. * * <p> * Properties of {@link mmir.parser.ParsingResult} objects with type VAR_DECLARATION: * <ul> * <li><strong>name</strong>: the name for the variable (without the leading <tt>@</tt> of template variables)</li> * <li><strong>nameType</strong>: the type of the <tt>name</tt> field: <code>StringLiteral</code></li> * </ul> * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ VAR_DECLARATION : 65536, /** * Constant for template expression type <tt>variable reference</tt>. * * <p> * This template expression is used within JavaScript code blocks / statements, * in order to replace the occurrence of the <tt>template variable</tt> by an * appropriate getter function, that retrieves the current value of the variable * during the execution of the script code. * * <p> * NOTE: this is used during compilation of the Function objects, used e.g. by BLOCK, STATEMENT, FOR etc. * * <p> * NOTE: the name of the variable is extracted from the raw-template text during processing/compilation * of the Functions. * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ VAR_REFERENCE : 131072, /** * Constant for template expression type <tt>comment</tt>. * * <p> * The template expression represents a template-comment: the content of the comment will be ignored * (that is: removed during processing of the template). * * @memberOf mmir.parser.Element * @constant * @type Number * @public */ COMMENT : 262144, /** * Constant for <tt>data</tt> name that is used to hold the <tt>current data</tt>: * this name will be used for the argument name of generated/compiled Functions, and in the Function code block * appropriate getter/setter expression will be inserted. * * @memberOf mmir.parser.Element * @constant * @type String * @public */ DATA_NAME : '__$$DATA$$__', /** * Constant for the name of the reserved <tt>data</tt> variable: the optional data argument is passed in * into rendering-calls for views, layouts etc. (see PresentationManager) * * @memberOf mmir.parser.Element * @constant * @type String * @public */ DATA_ARGUMENT_NAME : '@data', /** * Constant for the name of the reserved <tt>argument</tt> variable: some template expressions * have an (optional) <tt>argument</tt> argument, which can be accessed using the variable name * within the template expressions inner content-/code-blocks. * * @memberOf mmir.parser.Element * @constant * @type String * @public */ ARGUMENT_ARGUMENT_NAME : '@argument' }//END element: {... };//END: parser: {... return parser; });