1.1.26 • Published 5 years ago

@triskel/app v1.1.26

Weekly downloads
318
License
MIT
Repository
github
Last release
5 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

5 years ago

1.1.24

5 years ago

1.1.23

6 years ago

1.1.22

6 years ago

1.1.21

6 years ago

1.1.20

7 years ago

1.1.19

7 years ago

1.1.18

7 years ago

1.1.17

7 years ago

1.1.16

7 years ago

1.1.15

7 years ago

1.1.14

7 years ago

1.1.13

7 years ago

1.1.12

7 years ago

1.1.11

7 years ago

1.1.10

7 years ago

1.1.9

7 years ago

1.1.8

7 years ago

1.1.7

7 years ago

1.1.6

7 years ago

1.1.5

7 years ago

1.1.4

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.75

7 years ago

1.0.74

7 years ago

1.0.73

7 years ago

1.0.72

7 years ago

1.0.71

7 years ago

1.0.70

7 years ago

1.0.69

7 years ago

1.0.68

7 years ago

1.0.67

7 years ago

1.0.66

7 years ago

1.0.65

7 years ago

1.0.64

7 years ago

1.0.63

7 years ago

1.0.62

7 years ago

1.0.61

7 years ago

1.0.60

7 years ago

1.0.59

7 years ago

1.0.58

7 years ago

1.0.57

7 years ago

1.0.56

7 years ago

1.0.55

7 years ago

1.0.54

7 years ago

1.0.53

7 years ago

1.0.52

7 years ago

1.0.51

7 years ago

1.0.50

7 years ago

1.0.49

7 years ago

1.0.48

7 years ago

1.0.47

7 years ago

1.0.46

7 years ago

1.0.45

7 years ago

1.0.44

7 years ago

1.0.43

7 years ago

1.0.42

7 years ago

1.0.41

7 years ago

1.0.40

7 years ago

1.0.39

7 years ago

1.0.38

7 years ago

1.0.37

7 years ago

1.0.36

7 years ago

1.0.35

7 years ago

1.0.34

7 years ago

1.0.33

7 years ago

1.0.32

7 years ago

1.0.31

7 years ago

1.0.30

7 years ago

1.0.29

7 years ago

1.0.28

7 years ago

1.0.27

7 years ago

1.0.26

7 years ago

1.0.25

7 years ago

1.0.24

7 years ago

1.0.23

7 years ago

1.0.22

7 years ago

1.0.21

7 years ago

1.0.20

7 years ago

1.0.19

7 years ago

1.0.18

7 years ago

1.0.17

7 years ago

1.0.16

7 years ago

1.0.15

7 years ago

1.0.14

7 years ago

1.0.13

7 years ago

1.0.12

7 years ago

1.0.11

7 years ago

1.0.10

7 years ago

1.0.9

7 years ago

1.0.8

7 years ago

1.0.7

7 years ago

1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago