123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /* ************************************************************************
- qooxdoo - the new era of web development
- http://qooxdoo.org
- Copyright:
- 2004-2012 1&1 Internet AG, Germany, http://www.1und1.de
- License:
- LGPL: http://www.gnu.org/licenses/lgpl.html
- EPL: http://www.eclipse.org/org/documents/epl-v10.php
- See the LICENSE file in the project's top-level directory for details.
- Authors:
- * Martin Wittemann (martinwittemann)
- ======================================================================
- This class contains code based on the following work:
- * Mustache.js version 0.8.0
- Code:
- https://github.com/janl/mustache.js
- Copyright:
- (c) 2009 Chris Wanstrath (Ruby)
- (c) 2010 Jan Lehnardt (JavaScript)
- License:
- MIT: http://www.opensource.org/licenses/mit-license.php
- ----------------------------------------------------------------------
- Copyright (c) 2009 Chris Wanstrath (Ruby)
- Copyright (c) 2010 Jan Lehnardt (JavaScript)
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- ************************************************************************ */
- /**
- * The is a template class which can be used for HTML templating. In fact,
- * this is a wrapper for mustache.js which is a "framework-agnostic way to
- * render logic-free views".
- *
- * Here is a basic example how to use it:
- * Template:
- * <pre class="javascript">
- * var template = "Hi, my name is {{name}}!";
- * var view = {name: "qooxdoo"};
- * qx.bom.Template.render(template, view);
- * // return "Hi, my name is qooxdoo!"
- * </pre>
- *
- * For further details, please visit the mustache.js documentation here:
- * https://github.com/janl/mustache.js/blob/master/README.md
- *
- * @ignore(module)
- */
- qx.Bootstrap.define("qx.bom.Template", {
- statics : {
- /** Contains the mustache.js version. */
- version: null,
- /**
- * Original and only template method of mustache.js. For further
- * documentation, please visit https://github.com/janl/mustache.js
- *
- * @signature function(template, view, partials)
- * @param template {String} The String containing the template.
- * @param view {Object} The object holding the data to render.
- * @param partials {Object} Object holding parts of a template.
- * @return {String} The parsed template.
- */
- render: null,
- /**
- * Combines {@link #render} and {@link #get}. Input is equal to {@link #render}
- * and output is equal to {@link #get}. The advantage over {@link #get}
- * is that you don't need a HTML template but can use a template
- * string and still get a DOM element. Keep in mind that templates
- * can only have one root element.
- *
- * @param template {String} The String containing the template.
- * @param view {Object} The object holding the data to render.
- * @param partials {Object} Object holding parts of a template.
- * @return {Element} A DOM element holding the parsed template data.
- */
- renderToNode : function(template, view, partials) {
- var renderedTmpl = this.render(template, view, partials);
- return this._createNodeFromTemplate(renderedTmpl);
- },
- /**
- * Helper method which provides you with a direct access to templates
- * stored as HTML in the DOM. The DOM node with the given ID will be used
- * as a template, parsed and a new DOM node will be returned containing the
- * parsed data. Keep in mind to have only one root DOM element in the the
- * template.
- * Additionally, you should not put the template into a regular, hidden
- * DOM element because the template may not be valid HTML due to the containing
- * mustache tags. We suggest to put it into a script tag with the type
- * <code>text/template</code>.
- *
- * @param id {String} The id of the HTML template in the DOM.
- * @param view {Object} The object holding the data to render.
- * @param partials {Object} Object holding parts of a template.
- * @return {Element} A DOM element holding the parsed template data.
- */
- get : function(id, view, partials) {
- // get the content stored in the DOM
- var template = document.getElementById(id);
- return this.renderToNode(template.innerHTML, view, partials);
- },
- /**
- * Accepts a parsed template and returns a (potentially nested) node.
- *
- * @param template {String} The String containing the template.
- * @return {Element} A DOM element holding the parsed template data.
- */
- _createNodeFromTemplate : function(template) {
- // template is text only (no html elems) so use text node
- if (template.search(/<|>/) === -1) {
- return document.createTextNode(template);
- }
- // template has html elems so convert string into DOM nodes
- var helper = qx.dom.Element.create("div");
- helper.innerHTML = template;
- return helper.children[0];
- }
- }
- });
- (function() {
- // prevent using CommonJS exports object,
- // by shadowing global exports object
- var exports;
- // prevent using AMD compatible loader,
- // by shadowing global define function
- var define;
- /**
- * Below is the original mustache.js code. Snapshot date is mentioned in
- * the head of this file.
- * @ignore(exports)
- * @ignore(define.*)
- * @ignore(module.*)
- * @lint ignoreNoLoopBlock()
- */
|