diff options
| author | Misko Hevery | 2013-05-24 12:41:38 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2013-05-28 22:28:32 -0700 | 
| commit | e46100f7097d9a8f174bdb9e15d4c6098395c3f2 (patch) | |
| tree | 781564141fc9cf580886201d97f7d45064218d82 /src/jqLite.js | |
| parent | b8ea7f6aba2e675b85826b0bee1f21ddd7b866a5 (diff) | |
| download | angular.js-e46100f7097d9a8f174bdb9e15d4c6098395c3f2.tar.bz2 | |
feat($compile): support multi-element directive
By appending  directive-start and directive-end to a
directive it is now possible to have the directive
act on a group of elements.
It is now possible to iterate over multiple elements like so:
<table>
  <tr ng-repeat-start="item in list">I get repeated</tr>
  <tr ng-repeat-end>I also get repeated</tr>
</table>
Diffstat (limited to 'src/jqLite.js')
| -rw-r--r-- | src/jqLite.js | 50 | 
1 files changed, 29 insertions, 21 deletions
diff --git a/src/jqLite.js b/src/jqLite.js index cf9d1fa1..4959a2ed 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -165,7 +165,8 @@ function JQLite(element) {      div.innerHTML = '<div> </div>' + element; // IE insanity to make NoScope elements work!      div.removeChild(div.firstChild); // remove the superfluous div      JQLiteAddNodes(this, div.childNodes); -    this.remove(); // detach the elements from the temporary DOM div. +    var fragment = jqLite(document.createDocumentFragment()); +    fragment.append(this); // detach the elements from the temporary DOM div.    } else {      JQLiteAddNodes(this, element);    } @@ -456,24 +457,26 @@ forEach({      }    }, -  text: extend((msie < 9) -      ? function(element, value) { -        if (element.nodeType == 1 /** Element */) { -          if (isUndefined(value)) -            return element.innerText; -          element.innerText = value; -        } else { -          if (isUndefined(value)) -            return element.nodeValue; -          element.nodeValue = value; -        } +  text: (function() { +    var NODE_TYPE_TEXT_PROPERTY = []; +    if (msie < 9) { +      NODE_TYPE_TEXT_PROPERTY[1] = 'innerText';    /** Element **/ +      NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue';    /** Text **/ +    } else { +      NODE_TYPE_TEXT_PROPERTY[1] =                 /** Element **/ +      NODE_TYPE_TEXT_PROPERTY[3] = 'textContent';  /** Text **/ +    } +    getText.$dv = ''; +    return getText; + +    function getText(element, value) { +      var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType] +      if (isUndefined(value)) { +        return textProp ? element[textProp] : '';        } -      : function(element, value) { -        if (isUndefined(value)) { -          return element.textContent; -        } -        element.textContent = value; -      }, {$dv:''}), +      element[textProp] = value; +    } +  })(),    val: function(element, value) {      if (isUndefined(value)) { @@ -518,8 +521,14 @@ forEach({          return this;        } else {          // we are a read, so read the first child. -        if (this.length) -          return fn(this[0], arg1, arg2); +        var value = fn.$dv; +        // Only if we have $dv do we iterate over all, otherwise it is just the first element. +        var jj = value == undefined ? Math.min(this.length, 1) : this.length; +        for (var j = 0; j < jj; j++) { +          var nodeValue = fn(this[j], arg1, arg2); +          value = value ? value + nodeValue : nodeValue; +        } +        return value;        }      } else {        // we are a write, so apply to all children @@ -529,7 +538,6 @@ forEach({        // return self for chaining        return this;      } -    return fn.$dv;    };  });  | 
