docs: function(spec, toNumber) {
        var self = this;
        var element = self[0];
  
        if (element) {
          if (isString(spec)) {
            var match = /^(\W*)(.*)/.exec(replace(spec, /^%/,'@data-'));
            var prefix = match[1];
            var s;
  
            if (getter[prefix])
              s = getter[prefix](this, match[2]);
            else if (spec == '$')
              s = self['get']('className');
            else if (spec == '$$') {
              s = self['get']('@style');
            }
            else if (spec == '$$slide')
              s = self['get']('$height');
            else if (spec == '$$fade' || spec == '$$show') {
              if  (self['get']('$visibility') == 'hidden' || self['get']('$display') == 'none')
                s = 0;
              else if (spec == '$$fade') {
                s =
                  isNaN(self['get']('$opacity', true)) ? 1 : self['get']('$opacity', true);
              }
              else // $$show
                s = 1;
            }
            else if (prefix == '$') {
              s = _window['getComputedStyle'](element, _null)['getPropertyValue'](replace(match[2], /[A-Z]/g, function (match2) {  return '-' + match2.toLowerCase(); }));
            }
            else if (prefix == '@')
              s = element.getAttribute(match[2]);
            else
              s = element[match[2]];
            return toNumber ? extractNumber(s) : s;
          }
          else {
            var r = {};
            (isList(spec) ? flexiEach : eachObj)(spec, function(name) {
              r[name] = self['get'](name, toNumber);
            });
            return r;
          }
        }
      }