JSJaC

## JSJaCBuilder.js

#### Summary

No overview generated for 'JSJaCBuilder.js'

    /* Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
     *
     * 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.
     */

    /**
     * @private
     * This code is taken from {@link
     * http://wiki.script.aculo.us/scriptaculous/show/Builder
     * script.aculo.us' Dom Builder} and has been modified to suit our
     * needs.<br/>
     * The original parts of the code do have the following
     * copyright and license notice:<br/>
     * Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us,
     * http://mir.acu lo.us) <br/>
     * script.aculo.us is freely distributable under the terms of an
     * MIT-style license.<br>
     * For details, see the script.aculo.us web site:
     * http://script.aculo.us/<br>
     */
    var JSJaCBuilder = {
      /**
       * @private
       */
      buildNode: function(doc, elementName) {

        var element, ns = arguments[4];

        // attributes (or text)
        if(arguments[2])
          if(JSJaCBuilder._isStringOrNumber(arguments[2]) ||
             (arguments[2] instanceof Array)) {
            element = this._createElement(doc, elementName, ns);
            JSJaCBuilder._children(doc, element, arguments[2]);
          } else {
            ns = arguments[2]['xmlns'] || ns;
            element = this._createElement(doc, elementName, ns);
            for(attr in arguments[2]) {
              if (arguments[2].hasOwnProperty(attr) && attr != 'xmlns')
                element.setAttribute(attr, arguments[2][attr]);
            }
          }
        else
          element = this._createElement(doc, elementName, ns);
        // text, or array of children
        if(arguments[3])
          JSJaCBuilder._children(doc, element, arguments[3], ns);

        return element;
      },

      _createElement: function(doc, elementName, ns) {
        try {
          if (ns)
            return doc.createElementNS(ns, elementName);
        } catch (ex) { }

        var el = doc.createElement(elementName);

        if (ns)
          el.setAttribute("xmlns", ns);

        return el;
      },

      /**
       * @private
       */
      _text: function(doc, text) {
        return doc.createTextNode(text);
      },

      /**
       * @private
       */
      _children: function(doc, element, children, ns) {
        if(typeof children=='object') { // array can hold nodes and text
          for (var i in children) {
            if (children.hasOwnProperty(i)) {
              var e = children[i];
              if (typeof e=='object') {
                if (e instanceof Array) {
                  var node = JSJaCBuilder.buildNode(doc, e[0], e[1], e[2], ns);
                  element.appendChild(node);
                } else {
                  element.appendChild(e);
                }
              } else {
                if(JSJaCBuilder._isStringOrNumber(e)) {
                  element.appendChild(JSJaCBuilder._text(doc, e));
                }
              }
            }
          }
        } else {
          if(JSJaCBuilder._isStringOrNumber(children)) {
            element.appendChild(JSJaCBuilder._text(doc, children));
          }
        }
      },

      _attributes: function(attributes) {
        var attrs = [];
        for(attribute in attributes)
          if (attributes.hasOwnProperty(attribute))
            attrs.push(attribute +
              '="' + attributes[attribute].toString().htmlEnc() + '"');
        return attrs.join(" ");
      },

      _isStringOrNumber: function(param) {
        return(typeof param=='string' || typeof param=='number');
      }
    };

JSJaC

Documentation generated by JSDoc on Tue Jan 5 02:48:26 2021