(function(window, document) {
    "use strict";

    var _ = {
        version: "<%= pkg.version %>",
        slice: Array.prototype.slice,
        list: function(list) {
            if (list.isNodeList){ return list; }
            if (list.length === 1){ return _.node(list[0]); }
            list = _.slice.call(list);
            list.isNodeList = true;
            _.functions(list);
            return list;
        },
        node: function(node) {
            if (!node.isNode) {
                node.isNode = true;
                _.functions(node);
            }
            _.children(node);// make sure we're current
            return node;
        },
        functions: function(o) {
            for (var name in _.fn) {
                o[name] = _.fn[name].bind(o);
            }
        },
        children: function(node) {
            for(var i=0, m=node.childNodes.length, map={}; i<m; i++) {
                var child = node.childNodes[i],
                    type = _.type(child);
                (map[type]||(map[type]=[])).push(child);
            }
            Object.keys(map).forEach(function(key) {
                try {
                    Object.defineProperty(node, key, _.definition(map[key]));
                } catch (e) {}
            });
        },
        type: function(node) {
            return node.tagName ? node.tagName.toLowerCase() :
                   node.nodeType === 3 && node.textContent.trim() ? '_text' :
                   '_empty';
        },
        definition: function(children) {
            return {
                get: function(){ return _.list(children); },
                configurable: true
            };
        },
        fn: {
            each: function(fn) {
                var self = this.isNode ? [this] : this;
                self.forEach(function(el, i, arr) {
                    fn.call(self, _.node(el), i, arr);
                });
                return this;
            },
            find: function(selector) {
                var self = this.isNode ? [this] : this;
                for (var list=[],i=0,m=self.length; i<m; i++) {
                    list = list.concat(_.slice.call(self[i].querySelectorAll(selector)));
                }
                return _.list(list);
            },
            only: function(b, e) {
                var self = this.isNode ? [this] : this;
                return _.list(
                    b >= 0 || b < 0 ?
                        self.slice(b, e || (b + 1) || undefined) :
                        self.filter(
                            typeof b === "function" ? b :
                            function(el){ return el[_.matches](b); }
                        )
                );
            }
        }
    };

    var HTML = _.node(document.documentElement);// early, for use in head
    HTML._ = _;
    ['m','webkitM','mozM','msM'].forEach(function(prefix) {
        if (HTML[prefix+'atchesSelector']) {
            _.matches = prefix+'atchesSelector';
        }
    });
    if (typeof module !== 'undefined' && module.exports) {
        module.exports = HTML;
    } else {
        window.HTML = HTML;
    }
    // again, for use in body
    document.addEventListener("DOMContentLoaded", function(){ _.node(HTML); });

})(window, document);

@@ -1765,33 +1765,215 @@
  ? %5Bthis%5D : this
-;
+,%0A                    fields;%0A                if (typeof fn === %22string%22) %7B%0A                    fields = %5B%5D;%0A                    fn = _.field.apply(self, arguments);%0A                %7D
 %0A               
@@ -2028,16 +2028,26 @@
         
+ var ret =
  fn.call
@@ -2074,16 +2074,135 @@
 , arr);%0A
+                    if (fields && ret !== undefined) %7B%0A                        fields.push(ret);%0A                    %7D%0A
         
@@ -2235,16 +2235,51 @@
   return
+ fields && fields.length ? fields :
  this;%0A 
@@ -3053,32 +3053,982 @@
 ;%0A            %7D%0A
+        %7D,%0A        field: function(key) %7B%0A            var args = _.slice.call(arguments, 1);%0A            key = _.fn.each%5Bkey%5D %7C%7C key;// e.g. _.fn.each%5B'+class'%5D = 'classList.add';%0A            return function(el) %7B%0A                var prop = key, o = el;%0A                if (prop.indexOf('.') %3E 0) %7B%0A                    var props = prop.split('.');%0A                    while (props.length %3E 1 && (o = o%5Bprop = props.shift()%5D))%7B%7D%0A                    o = o %7C%7C el;%0A                    prop = o ? props%5B0%5D : key;%0A                %7D%0A                var val = o%5Bprop%5D;%0A                if (val !== undefined) %7B%0A                    if (typeof val === %22function%22) %7B return val.apply(o, args); %7D%0A                    else if (args.length) %7B o%5Bprop%5D = args%5B0%5D; %7D%0A                    else %7B return val; %7D%0A                %7D%0A                else if (args.length) %7B el.setAttribute(key, args%5B0%5D); %7D%0A                else %7B return el.getAttribute(key); %7D%0A            %7D;%0A
         %7D%0A    %7D;

add fancy pluck-ish features to each()