1.1.26 • Published 4 years ago

@triskel/app v1.1.26

Weekly downloads
318
License
MIT
Repository
github
Last release
4 years ago

@triskel/app

Compact, reliable and customizable HTML minifier.

npm bundlephobia GitHub license

Build Status Coverage Status dependencies Status

Installation

npm install @triskel/app --save-dev

RenderApp

RenderApp creates an instance with a context for rendering

var APP = require('@triskel/app');

TriskelApp instance:

Methods

  • APP.render( parent_node, Triskel Structured Nodes (TSList) )
  • APP.defineFilter(filter_name String, filter Function)
    • filter_name, String name for identify filter
    • filterFunction(input_var / usually a string /)
  • APP.eval(expression String) returns a function that and evaluates data with passed expression

    APP.defineFilter('uppercase', function (text) {
      return text.toUpperCase();
    });
    
    var renderName = APP.eval(' person.first_name | uppercase ');
    
    renderName({ person: { first_name: 'John' } });
    // results: 'JOHN'
  • APP.withNode(withNode Function) passed withNode(node TSList Node)

    TSList Node Types:

    • Node Element: { $: 'input', attrs: { required: '' } }

    • Text Node: Strings in TSList are converted to { text: 'Lorem ipsum...' }

    • Comment Node: { comments: 'This is a JS comment' }

    Returned Object determines what to do with node to be rendered

    with_node Object {
      `replace_by_comment`: <String|false|undefined>,
      `initNode`: <Function (node_el HTMLElement, node Object, render_options Object, with_node Object)>
    }
    APP.withNode(function (node) {
      if( node.$ === 'div' ) return {
        replace_by_comment: 'replaced div: ' + node._,
      };
    });
    
    '<div>lorem ipsum...</div><span>foobar</span>'
    
    // resulting DOM:
    // <!--replaced div: lorem ipsum...--><span>foobar</span>
    APP.withNode(function (node) {
      if( node.attrs && node.attrs['data-click'] === 'log' ) return {
        initNode: function (button_el, node /* TSList Node */, render_options /* options passed to APP.render */) {
          button_el.addEventListener('click', function (e) {
            console.log('button clicked', button_el);
            });
        },
      };
    });
    
    // previous code will log in console every click for nodes with attribute [data-click=log]:
    // <div><button data-click="log"></button></div>
  • APP.component(tag_name String, options Object or initNode Function)

    • options Object
      {
        'template': <TSlist>,
        `controller`: initNode `Function`,
        'data': <Object>, // Data to be rendered
      }

    Component example

    APP.component('my-div', {
      template: [
        { $: 'ul', _: [
          { $: 'li', _: 'First name: {{ person.first_name }}' },
          { $: 'li', _: 'Last name: {{ person.last_name }}' },
          { $: 'li', _: 'Age: {{ person.birthday | ageDiff }}' },
        ] }
      ],
      data: {
        person: {
          first_name: 'John',
          last_name: 'Smith',
          birthday: '1980-01-01'
        }
      },
    });
  • APP.directive(attribute_match String, initNode Function, withNode Function)

    • attribute_match: string received will be evaluated as /^attribute_match$/
    • withNode: Special withNode that receives: this.attr_key and this.attr_value

Directive example

APP.directive('if-mobile', function (node_el) {

  if( this.attr_value === 'log' ) {
    console.log('node has being rendered')
  }

}, function withNode (node) {
  console.log(this.attr_key); // results: 'if-mobile'
  console.log(this.attr_value); // results: <value of attribute>

  if( matchMedia('(max-width: 768px)').matches ) return {
    replace_by_comment: 'if-mobile: ' + this.attr_value,
  };
});
1.1.26

4 years ago

1.1.24

4 years ago

1.1.23

4 years ago

1.1.22

5 years ago

1.1.21

5 years ago

1.1.20

5 years ago

1.1.19

5 years ago

1.1.18

5 years ago

1.1.17

5 years ago

1.1.16

5 years ago

1.1.15

5 years ago

1.1.14

5 years ago

1.1.13

5 years ago

1.1.12

5 years ago

1.1.11

5 years ago

1.1.10

5 years ago

1.1.9

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.75

5 years ago

1.0.74

5 years ago

1.0.73

5 years ago

1.0.72

6 years ago

1.0.71

6 years ago

1.0.70

6 years ago

1.0.69

6 years ago

1.0.68

6 years ago

1.0.67

6 years ago

1.0.66

6 years ago

1.0.65

6 years ago

1.0.64

6 years ago

1.0.63

6 years ago

1.0.62

6 years ago

1.0.61

6 years ago

1.0.60

6 years ago

1.0.59

6 years ago

1.0.58

6 years ago

1.0.57

6 years ago

1.0.56

6 years ago

1.0.55

6 years ago

1.0.54

6 years ago

1.0.53

6 years ago

1.0.52

6 years ago

1.0.51

6 years ago

1.0.50

6 years ago

1.0.49

6 years ago

1.0.48

6 years ago

1.0.47

6 years ago

1.0.46

6 years ago

1.0.45

6 years ago

1.0.44

6 years ago

1.0.43

6 years ago

1.0.42

6 years ago

1.0.41

6 years ago

1.0.40

6 years ago

1.0.39

6 years ago

1.0.38

6 years ago

1.0.37

6 years ago

1.0.36

6 years ago

1.0.35

6 years ago

1.0.34

6 years ago

1.0.33

6 years ago

1.0.32

6 years ago

1.0.31

6 years ago

1.0.30

6 years ago

1.0.29

6 years ago

1.0.28

6 years ago

1.0.27

6 years ago

1.0.26

6 years ago

1.0.25

6 years ago

1.0.24

6 years ago

1.0.23

6 years ago

1.0.22

6 years ago

1.0.21

6 years ago

1.0.20

6 years ago

1.0.19

6 years ago

1.0.18

6 years ago

1.0.17

6 years ago

1.0.16

6 years ago

1.0.15

6 years ago

1.0.14

6 years ago

1.0.13

6 years ago

1.0.12

6 years ago

1.0.11

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago