JSFiddle - React, Tailwind, and code Playground
by gianlucaguarini
HTML
<script>/* Riot WIP, @license MIT, (c) 2015 Muut Inc. + contributors */
;(function(window) {
'use strict'
var riot = { version: 'WIP', settings: {} }
riot.observable = function(el) {
el = el || {}
var callbacks = {},
_id = 0
el.on = function(events, fn) {
if (typeof fn == 'function') {
fn._id = typeof fn._id == 'undefined' ? _id++ : fn._id
events.replace(/\S+/g, function(name, pos) {
(callbacks[name] = callbacks[name] || []).push(fn)
fn.typed = pos > 0
})
}
return el
}
el.off = function(events, fn) {
if (events == '*') callbacks = {}
else {
events.replace(/\S+/g, function(name) {
if (fn) {
var arr = callbacks[name]
for (var i = 0, cb; (cb = arr && arr[i]); ++i) {
if (cb._id == fn._id) { arr.splice(i, 1); i-- }
}
} else {
callbacks[name] = []
}
})
}
return el
}
// only single event supported
el.one = function(name, fn) {
function on() {
el.off(name, on)
fn.apply(el, arguments)
}
return el.on(name, on)
}
el.trigger = function(name) {
var args = [].slice.call(arguments, 1),
fns = callbacks[name] || []
for (var i = 0, fn; (fn = fns[i]); ++i) {
if (!fn.busy) {
fn.busy = 1
fn.apply(el, fn.typed ? [name].concat(args) : args)
if (fns[i] !== fn) { i-- }
fn.busy = 0
}
}
if (callbacks.all && name != 'all') {
el.trigger.apply(el, ['all', name].concat(args))
}
return el
}
return el
}
riot.mixin = (function() {
var mixins = {}
return function(name, mixin) {
if (!mixin) return mixins[name]
mixins[name] = mixin
}
})()
;(function(riot, evt, window) {
// browsers only
if (!window) return
var loc = window.location,
fns = riot.observable(),
win = window,
started = false,
current
function hash() {
return loc.href.split('#')[1] ||...
JavaScript
riot.tag('my-tag', '<div> <h1>Riot <button onclick="{ clicked }">reverse list</button> <span id="timestamp"></span></h1> <h2 each="{ opts.items }">Line #{ value }</h2> </div>', function (opts) {
var self = this,
x = new Date().getTime()
this.items = opts.items
this.clicked = function () {
x = new Date().getTime()
self.items = this.items.reverse()
}
this.on('updated', function () {
self.timestamp.innerHTML = ' - Reversing took ' + (new Date().getTime() - x) + 'ms'
})
})
var items = []
for (var i = 0; i < 10000; i++) {
items.push({
value: i
})
}
riot.mount('*', {
items: items
})