Вход Регистрация
Файл: public/js/3rd_party/scriptaculous/builder.js
Строк: 167
<?php
// script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Builder = {
  
NODEMAP: {
    
AREA'map',
    
CAPTION'table',
    
COL'table',
    
COLGROUP'table',
    
LEGEND'fieldset',
    
OPTGROUP'select',
    
OPTION'select',
    
PARAM'object',
    
TBODY'table',
    
TD'table',
    
TFOOT'table',
    
TH'table',
    
THEAD'table',
    
TR'table'
  
},
  
// note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
  //       due to a Firefox bug
  
node: function(elementName) {
    
elementName elementName.toUpperCase();

    
// try innerHTML approach
    
var parentTag this.NODEMAP[elementName] || 'div';
    var 
parentElement document.createElement(parentTag);
    try { 
// prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
      
parentElement.innerHTML "<" elementName "></" elementName ">";
    } catch(
e) {}
    var 
element parentElement.firstChild || null;

    
// see if browser added wrapping tags
    
if(element && (element.tagName.toUpperCase() != elementName))
      
element element.getElementsByTagName(elementName)[0];

    
// fallback to createElement approach
    
if(!elementelement document.createElement(elementName);

    
// abort if nothing could be created
    
if(!element) return;

    
// attributes (or text)
    
if(arguments[1])
      if(
this._isStringOrNumber(arguments[1]) ||
        (
arguments[1] instanceof Array) ||
        
arguments[1].tagName) {
          
this._children(elementarguments[1]);
        } else {
          var 
attrs this._attributes(arguments[1]);
          if(
attrs.length) {
            try { 
// prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
              
parentElement.innerHTML "<" +elementName " " +
                
attrs "></" elementName ">";
            } catch(
e) {}
            
element parentElement.firstChild || null;
            
// workaround firefox 1.0.X bug
            
if(!element) {
              
element document.createElement(elementName);
              for(
attr in arguments[1])
                
element[attr == 'class' 'className' attr] = arguments[1][attr];
            }
            if(
element.tagName.toUpperCase() != elementName)
              
element parentElement.getElementsByTagName(elementName)[0];
          }
        }

    
// text, or array of children
    
if(arguments[2])
      
this._children(elementarguments[2]);

     return $(
element);
  },
  
_text: function(text) {
     return 
document.createTextNode(text);
  },

  
ATTR_MAP: {
    
'className''class',
    
'htmlFor''for'
  
},

  
_attributes: function(attributes) {
    var 
attrs = [];
    for(
attribute in attributes)
      
attrs.push((attribute in this.ATTR_MAP this.ATTR_MAP[attribute] : attribute) +
          
'="' attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
    return attrs.join(" ");
  },
  _children: function(element, children) {
    if(children.tagName) {
      element.appendChild(children);
      return;
    }
    if(typeof children=='
object') { // array can hold nodes and text
      children.flatten().each( function(e) {
        if(typeof e=='
object')
          element.appendChild(e);
        else
          if(Builder._isStringOrNumber(e))
            element.appendChild(Builder._text(e));
      });
    } else
      if(Builder._isStringOrNumber(children))
        element.appendChild(Builder._text(children));
  },
  _isStringOrNumber: function(param) {
    return(typeof param=='
string' || typeof param=='number');
  },
  build: function(html) {
    var element = this.node('
div');
    $(element).update(html.strip());
    return element.down();
  },
  dump: function(scope) {
    if(typeof scope != '
object' && typeof scope != 'function') scope = window; //global scope

    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/s+/);

    tags.each( function(tag){
      scope[tag] = function() {
        return Builder.node.apply(Builder, [tag].concat($A(arguments)));
      };
    });
  }
};
?>
Онлайн: 1
Реклама