mustache_templates-8.x-1.0-beta4/js/magic/filter.js

js/magic/filter.js
/**
 * @file
 * Magic filters for Mustache templates.
 */

(function (sync) {
  var magicFilter = function (buffer, props) {
    return new Proxy(buffer, Object.assign({
      keys: [],
      available: {trim: 0, striptags: 0, nl2br: 0, spaceless: 0, upper: 0, lower: 0, capitalize: 0, truncate: 1, path: 0, plus: 1, minus: 1},
      cloned: false,
      get: function (buffer, property, receiver) {
        if (!this.cloned) {
          return magicFilter(buffer, {cloned: true})[property];
        }
        this.keys.push(property);
        if (this.available[property]) {
          return receiver;
        }
        return function (wrapper) {
          return function(wrapper, text, render) {
            var k, m, param, rendered = render(text);
            for (var i = 0; i < wrapper.keys.length; i++) {
              k = wrapper.keys[i];
              m = wrapper[k];
              if ((typeof m === 'function') && (typeof wrapper.available[k] === 'number')) {
                if (wrapper.available[k]) {
                  param = wrapper.keys[i + 1];
                }
                rendered = m(rendered, param);
              }
            }
            return rendered;
          }.bind(wrapper, wrapper);
        }.bind(this, this);
      },
      has: function(target, prop) {
        return true;
      },
      trim: function (text) {
        return text.trim();
      },
      striptags: function (text) {
        var el = document.createElement('div');
        el.innerHTML = text;
        return el.textContent || el.innerText;
      },
      nl2br: function (text) {
        return text.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1<br/>$2');
      },
      spaceless: function (text) {
        return text.replace(/>\s+</g,'><').trim();
      },
      upper: function (text) {
        return text.toUpperCase();
      },
      lower: function (text) {
        return text.toLowerCase();
      },
      capitalize: function (text) {
        return text.charAt(0).toUpperCase() + text.slice(1);
      },
      truncate: function (text, size) {
        if (typeof size === 'string') {
          size = parseInt(size);
        }
        if ((typeof size === 'number') && (text.length > size)) {
          text = (text += " ").substring(0, size);
          text = text.substring(0, Math.min(text.length, text.lastIndexOf(" ")));
          text += '...';
        }
        return text;
      },
      path: function (text) {
        return encodeURIComponent(text.toLowerCase()).replace('%2F', '/');
      },
      plus: function (text, number) {
        text = text.trim();
        if (isNaN(text) || isNaN(number)) {
          return text;
        }
        return +text + +number;
      },
      minus: function (text, number) {
        text = text.trim();
        if (isNaN(text) || isNaN(number)) {
          return text;
        }
        return +text - +number;
      }
    }, props));
  };
  sync.registry.magic.filter = function (buffer) {
    return magicFilter(buffer, {});
  };
}(mustacheSync));

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc