All Projects → Reon90 → tung

Reon90 / tung

Licence: MIT license
A javascript library for rendering html

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to tung

Htm
Hyperscript Tagged Markup: JSX alternative using standard tagged templates, with compiler support.
Stars: ✭ 7,299 (+25068.97%)
Mutual labels:  virtual-dom, jsx
Cascade
A modern library for creating user interfaces.
Stars: ✭ 50 (+72.41%)
Mutual labels:  virtual-dom, jsx
Muve
Muve is a micro library for building interactive javascript applications.
Stars: ✭ 11 (-62.07%)
Mutual labels:  virtual-dom, jsx
virtual-jade
Compile Jade templates to Hyperscript for Virtual DOM libraries
Stars: ✭ 31 (+6.9%)
Mutual labels:  virtual-dom, snabbdom
Omi
Front End Cross-Frameworks Framework - 前端跨框架跨平台框架
Stars: ✭ 12,153 (+41806.9%)
Mutual labels:  virtual-dom, jsx
Vidom
Library to build UI based on virtual DOM
Stars: ✭ 408 (+1306.9%)
Mutual labels:  virtual-dom, jsx
Wonders
🌈 Declarative JavaScript framework to build command-line applications.
Stars: ✭ 34 (+17.24%)
Mutual labels:  virtual-dom, jsx
snabbdom-pragma
'NotReact.createElement' jsx pragma although for snabbdom
Stars: ✭ 47 (+62.07%)
Mutual labels:  jsx, snabbdom
Gantt
Gantt chart library using jsx support SVG, Canvas and SSR
Stars: ✭ 148 (+410.34%)
Mutual labels:  virtual-dom, jsx
Virtual Dom
关于Vue,React,Preact和Omi等框架源码的解读
Stars: ✭ 139 (+379.31%)
Mutual labels:  virtual-dom, jsx
react-lite
A simple implementation of react
Stars: ✭ 51 (+75.86%)
Mutual labels:  virtual-dom, jsx
Ng Vdom
(Developer Preview) A virtual-DOM extension for Angular, also work as React bridge.
Stars: ✭ 249 (+758.62%)
Mutual labels:  virtual-dom, jsx
Inferno
🔥 An extremely fast, React-like JavaScript library for building modern user interfaces
Stars: ✭ 15,206 (+52334.48%)
Mutual labels:  jsx, javascript-library
Vhtml
Render JSX/Hyperscript to HTML strings, without VDOM 🌈
Stars: ✭ 556 (+1817.24%)
Mutual labels:  virtual-dom, jsx
React Border Wrapper
A wrapper for placing elements along div borders.
Stars: ✭ 147 (+406.9%)
Mutual labels:  jsx, javascript-library
Preact
⚛️ Fast 3kB React alternative with the same modern API. Components & Virtual DOM.
Stars: ✭ 30,527 (+105165.52%)
Mutual labels:  virtual-dom, jsx
Redux React Starter
DEPRECATED use the new https://github.com/didierfranc/react-webpack-4
Stars: ✭ 137 (+372.41%)
Mutual labels:  virtual-dom, jsx
Gccx
Transforms CPX (JSX like syntax) into asm-dom Virtual DOM
Stars: ✭ 234 (+706.9%)
Mutual labels:  virtual-dom, jsx
core
Server side rendering with The Elm Architecture in Deno
Stars: ✭ 16 (-44.83%)
Mutual labels:  virtual-dom, jsx
enterprise
Enterprise-grade component library for the Infor Design System
Stars: ✭ 117 (+303.45%)
Mutual labels:  javascript-library

logo

tung

A javascript library for rendering html. Tung helps to divide html and javascript development. In order to start working with tung, you only need to know two methods, setView and setState.

Install

npm install tung

Of course, that you need to convert html to js.

npm install babel-tung

There is config for Webpack and Gulp

Features

• based on snabbdom, a fast and simple virtual DOM library;

• pure html: block defines context, variables, components;

• pure javascript: no jsx, defines only state for rendering html;

• stateful and stateless components;

Use cases

• you don't like jsx;

• you have html developers in your team;

• you like React patterns, but you looking for something different;

Usage

Demo

<!-- page.tpl -->
<div>
    <div class="users">
        <Card block="users" />
    </div>
    <Btn block="btn" />
</div>

<!-- btn.tpl -->
<span class="btn">{this.text}</span>

<!-- card.tpl -->
<div class="item item--admin">
    <img src={this.img} width="50" height="50" />
    <span class="item__content">{this.name}<span block="isAdmin"> &bull; admin</span></span>
    <Btn block="btn"/>
    <Btn block="delete"/>
</div>
import {Tung} from 'tung';
import card from './card';
import page from './tpl/page';
import btn from './tpl/components/btn';

class Users extends Tung {
    constructor(container) {
        super(container);

        this.setView(page, btn, card); // IMPORTANT
        
        fetch('https://api.github.com/users/octocat/following')
            .then(response => response.json())
            .then(users => this.ready(users))
            .catch(console.error);
    }

    ready(users) {
        users[Symbol.iterator] = this.getUsers;
        this.usersIterator = users[Symbol.iterator]();

        this.setState({ // IMPORTANT
            users: [this.buildUser(this.usersIterator.next().value)],
            btn: {
                text: 'Load more',
                on: { click: this.handleEvent }
            }
        });
    }
    
    buildUser(user) {
        return {
            name: user.login,
            img: user.avatar_url,
            url: user.html_url,
            isAdmin: user.site_admin,
            id: user.id,
            onDeleteProfile: [this.onDeleteProfile, this]
        };
    }
    
    handleEvent(e) {
        let user = this.usersIterator.next();
        if (user.done) {
            delete this.state.btn;
        }
        this.state.users.push(this.buildUser(user.value));
        this.setState(this.state); // IMPORTANT
    }
    
    onDeleteProfile(e) {
        let index = this.state.users.findIndex(user => user.id === e.target.data.id);
        this.state.users.splice(index, 1);
        this.setState(this.state); // IMPORTANT
    }

    * getUsers() {
        for (let i = 0; i < this.length; i++) {
            if (this.length === i + 1) {
                return this[i];
            } else {
                yield this[i];
            }
        }
    }
}

new Users(root);

API

methods

name argument description
setView function Defines which components will use
setState object Render html from object

hooks (not called for root)

name argument description
init null Called when component was created
destroy null Called when component was removed

props

name type description
refs object Stores stateful children components
els object Stores DOM elements

html syntax

name type description
block attribute Name of context
Component tag Name of component
this object Access to context

state properties

name type description
on object { on: { click: this.onClick } }
attrs object { attrs: { placeholder: 'Text' } }
props object { props: { data: { id: 12345 } } }
class object { class: { toggle: true } }
style object { style: { display: 'none' } }

Feel free to offer new features 🤔

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].