[ Index ]
 

Code source de Kupu-1.3.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/common/ -> kupuinspector.js (source)

   1  /*****************************************************************************
   2   *
   3   * Copyright (c) 2003-2005 Kupu Contributors. All rights reserved.
   4   *
   5   * This software is distributed under the terms of the Kupu
   6   * License. See LICENSE.txt for license text. For a list of Kupu
   7   * Contributors see CREDITS.txt.
   8   *
   9   *****************************************************************************/
  10  
  11  // $Id: kupuinspector.js 9879 2005-03-18 12:04:00Z yuppie $
  12  
  13  /* The Kupu Inspector tool 
  14  
  15      An Kupu Tool (plugin) that will can be used to show and set attributes
  16      on elements. It will show a list of the current element and all of its
  17      parents (starting with the body element and working to the current one)
  18      with input fields for a default set of attributes and, if defined, a
  19      set for that particular element type.
  20  */
  21  
  22  //----------------------------------------------------------------------------
  23  // Helper classes
  24  //----------------------------------------------------------------------------
  25  
  26  function Panel() {
  27      /* the container (user interface element) of the elements */
  28      this.elements = new Array();
  29      
  30      this.element = document.createElement('table');
  31      this.element.style.width = '100%';
  32      this.tbody = document.createElement('tbody');
  33      this.element.appendChild(this.tbody);
  34      
  35      this.addElement = function(element) {
  36          this.elements.push(element);
  37          for (var i=0; i < element.nodes.length; i++) {
  38              this.tbody.appendChild(element.nodes[i]);
  39          };
  40      };
  41  };
  42  
  43  function Element(node, panel, visibility) {
  44      /* an element in the panel (reflecting an element in the document) */
  45      this.panel = panel;
  46      this.node = node;
  47      this.nodes = new Array();
  48      this.default_visibility = visibility;
  49      
  50      // create a header
  51      var labelrow = document.createElement('tr');
  52      var labelcell = document.createElement('th');
  53      labelcell.style.textDecoration = 'underline';
  54      labelcell.style.cursor = 'default';
  55      labelcell.setAttribute('colSpan', '2');
  56      labelrow.appendChild(labelcell);
  57      var nodename = node.nodeName.toLowerCase();
  58      var labeltext = document.createTextNode(nodename);
  59      labelcell.appendChild(labeltext);
  60      
  61      this.nodes.push(labelrow);
  62  
  63      this._displayvar = _SARISSA_IS_IE ? 'block' : 'table-row';
  64      
  65      this.addAttribute = function(attr) {
  66          /* add an attribute */
  67          
  68          function changeHandler() {
  69              var name = this.getAttribute('name');
  70              var value = this.value;
  71              if (name == 'className') {
  72                  this.element.className = value;
  73              } else {
  74                  this.element.setAttribute(name, value);
  75              };
  76          };
  77          
  78          var row = document.createElement('tr');
  79          var style = this.default_visibility ? this._displayvar : 'none';
  80          row.style.display = style;
  81          var labelcell = document.createElement('td');
  82          labelcell.style.fontSize = '10px';
  83          row.appendChild(labelcell);
  84          var text = document.createTextNode(attr + ': ');
  85          labelcell.appendChild(text);
  86          labelcell.style.color = 'blue';
  87          var inputcell = document.createElement('td');
  88          inputcell.setAttribute('width', '100%');
  89          row.appendChild(inputcell);
  90          var input = document.createElement('input');
  91          input.setAttribute('type', 'text');
  92          input.setAttribute('value', attr == 'className' ? node.className : node.getAttribute(attr));
  93          input.setAttribute('name', attr);
  94          input.style.width = "100%";
  95          input.element = this.node;
  96          addEventHandler(input, 'change', changeHandler, input);
  97          inputcell.appendChild(input);
  98          this.nodes.push(row);
  99      };
 100  
 101      this.addStyle = function(stylename) {
 102          var row = document.createElement('tr');
 103          var style = this.default_visibility ? this._displayvar : 'none';
 104          row.style.display = style;
 105          var labelcell = document.createElement('td');
 106          labelcell.style.fontSize = '10px';
 107          row.appendChild(labelcell);
 108          var text = document.createTextNode(stylename + ': ');
 109          labelcell.appendChild(text);
 110          labelcell.style.color = 'red';
 111          var inputcell = document.createElement('td');
 112          //inputcell.setAttribute('width', '100%');
 113          row.appendChild(inputcell);
 114          var input = document.createElement('input');
 115          input.setAttribute('type', 'text');
 116          input.setAttribute('value', node.style[stylename]);
 117          input.setAttribute('name', stylename);
 118          input.style.width = "100%";
 119          input.element = this.node;
 120          addEventHandler(input, 'change', function() {this.element.style[this.getAttribute('name')] = this.value}, input);
 121          inputcell.appendChild(input);
 122          this.nodes.push(row);
 123      };
 124  
 125      this.setVisibility = function(visibility) {
 126          for (var i=1; i < this.nodes.length; i++) {
 127              this.nodes[i].style.display = visibility ? this._displayvar : 'none';
 128          };
 129      };
 130  
 131      this.setVisible = function() {
 132          for (var i=0; i < this.panel.elements.length; i++) {
 133              var el = this.panel.elements[i];
 134              if (el != this) {
 135                  el.setVisibility(false);
 136              };
 137              this.setVisibility(true);
 138          };
 139      };
 140  
 141      addEventHandler(labelrow, 'click', this.setVisible, this);
 142  };
 143  
 144  //----------------------------------------------------------------------------
 145  // The inspector
 146  //----------------------------------------------------------------------------
 147  
 148  function KupuInspector(inspectorelement) {
 149      /* the Inspector tool, a tool to set attributes on elements */
 150      
 151      this.element = getFromSelector(inspectorelement);
 152      this._lastnode = null;
 153  
 154      this.default_attrs = new Array('id', 'className');
 155      this.special_attrs = {'a': new Array('href', 'name', 'target'),
 156                              'img': new Array('url', 'width', 'height'),
 157                              'ul': new Array('type'),
 158                              'ol': new Array('type'),
 159                              'table': new Array('border', 'cellPadding', 'cellSpacing'),
 160                              'td': new Array('align')
 161                              };
 162      this.styles = new Array('background', 'borderWidth', 'borderColor', 
 163                                  'borderStyle', 'color', 'fontSize', 
 164                                  'fontFamily', 'float', 'height', 
 165                                  'lineHeight', 'margin', 'padding', 
 166                                  'textAlign', 'verticalAlign', 'whiteApace', 
 167                                  'width');
 168      
 169      this.updateState = function(selNode, event) {
 170          /* repopulate the inspector (if required) */
 171          if (selNode != this._lastnode) {
 172              // we need to repopulate
 173              this._lastnode = selNode
 174              this._clear();
 175              var panel = new Panel();
 176              var currnode = selNode;
 177              // walk up to the body, add the elements in an array so we can
 178              // walk through it backwards later on
 179              var els = new Array();
 180              while (currnode.nodeName.toLowerCase() != 'html') {
 181                  // only use element nodes
 182                  if (currnode.nodeType == 1) {
 183                      els.push(currnode);
 184                  };
 185                  currnode = currnode.parentNode;
 186              };
 187  
 188              for (var i=0; i < els.length; i++) {
 189                  // now build an element
 190                  var node = els[els.length - i - 1];
 191                  var nodename = node.nodeName.toLowerCase();
 192                  var visibility = (i == els.length - 1);
 193                  var element = new Element(node, panel, visibility);
 194                  
 195                  // walk through the default attrs
 196                  for (var j=0; j < this.default_attrs.length; j++) {
 197                      var attr = this.default_attrs[j];
 198                      element.addAttribute(attr);
 199                  };
 200                  // check if there are any special attrs for this type of element
 201                  if (nodename in this.special_attrs) {
 202                      var sattrs = this.special_attrs[nodename];
 203                      // add the attrs
 204                      for (var j=0; j < sattrs.length; j++) {
 205                          var attr = sattrs[j];
 206                          element.addAttribute(attr);
 207                      };
 208                  };
 209                  // and add all applicable styles
 210                  for (var j=0; j < this.styles.length; j++) {
 211                      var style = this.styles[j];
 212                      if (style in node.style) {
 213                          element.addStyle(style);
 214                      };
 215                  };
 216                  panel.addElement(element);
 217              };
 218              this.element.appendChild(panel.element);
 219          };
 220      };
 221  
 222      this._clear = function() {
 223          while (this.element.childNodes.length) {
 224              this.element.removeChild(this.element.childNodes[0]);
 225          };
 226      };
 227  };
 228  
 229  KupuInspector.prototype = new KupuTool;


Généré le : Sun Feb 25 15:30:41 2007 par Balluche grâce à PHPXref 0.7