diff --git a/frameworks/ivi-v0.10.0-keyed/gulpfile.js b/frameworks/ivi-v0.10.0-keyed/gulpfile.js deleted file mode 100644 index a37f9911d..000000000 --- a/frameworks/ivi-v0.10.0-keyed/gulpfile.js +++ /dev/null @@ -1,42 +0,0 @@ -const gulp = require('gulp'); -const del = require('del'); -const rollup = require('rollup'); -const rollupNodeResolve = require('rollup-plugin-node-resolve-main-fields'); -const closureCompiler = require('google-closure-compiler').gulp(); - -gulp.task('clean', function () { - return del(['build', 'dist']); -}); - -gulp.task('bundle', ['clean'], function (done) { - return rollup.rollup({ - input: 'src/main.js', - plugins: [ - rollupNodeResolve({ - mainFields: ['es2016', 'module', 'main'], - }), - ] - }).then(function (bundle) { - return bundle.write({ - format: 'es', - file: 'build/bundle.js' - }); - }); -}); - -gulp.task('build', ['bundle'], function () { - return gulp.src(['src/env.js', 'build/bundle.js']) - .pipe(closureCompiler({ - js_output_file: 'main.js', - compilation_level: 'ADVANCED', - language_in: 'ECMASCRIPT_2017', - language_out: 'ECMASCRIPT5_STRICT', - use_types_for_optimization: true, - assume_function_wrapper: true, - isolation_mode: "IIFE", - warning_level: 'QUIET', - rewrite_polyfills: false, - new_type_inf: true - })) - .pipe(gulp.dest('dist')); -}); diff --git a/frameworks/ivi-v0.10.0-keyed/src/env.js b/frameworks/ivi-v0.10.0-keyed/src/env.js deleted file mode 100644 index 480790301..000000000 --- a/frameworks/ivi-v0.10.0-keyed/src/env.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Debug Mode - * - * @const {boolean} - */ -const DEBUG = false; - -/** - * Target Environment - * - * @const {string} - */ -const TARGET = "evergreen"; diff --git a/frameworks/ivi-v0.10.0-keyed/src/main.js b/frameworks/ivi-v0.10.0-keyed/src/main.js deleted file mode 100644 index a11b36d46..000000000 --- a/frameworks/ivi-v0.10.0-keyed/src/main.js +++ /dev/null @@ -1,79 +0,0 @@ -import { Component, component, connect, render, map, elementFactory, disableDirtyChecking } from "ivi"; -import * as h from "ivi-html"; -import * as Events from "ivi-events"; -import { store } from "./store"; - -const GlyphIcon = elementFactory(h.span("glyphicon glyphicon-remove").a({ "aria-hidden": "true" })); - -const Row = component(class extends Component { - constructor(props) { - super(props); - this.click = Events.onClick(() => { store.dispatch({ type: "select", item: this.props.item }); }); - this.del = Events.onClick(() => { store.dispatch({ type: "delete", item: this.props.item }); }); - } - - render() { - const { item, selected } = this.props; - return disableDirtyChecking( - h.tr(selected ? "danger" : "").c( - h.td("col-md-1").c(item.id), - h.td("col-md-4").c(h.a().e(this.click).c(item.label)), - h.td("col-md-1").c( - h.a().e(this.del).c(GlyphIcon()), - ), - h.td("col-md-6"), - ), - ); - } -}); - -const RowConnector = connect( - (prev, id) => { - const item = store.getState().data.value[id]; - const selected = store.getState().selected === item; - return (prev !== null && prev.item === item && prev.selected === selected) ? prev : - { item, selected }; - }, - (props) => Row(props), -); - -const RowListConnector = connect( - (prev) => { - const rows = store.getState().data; - return (prev !== null && prev.rows === rows) ? prev : - { rows, value: rows.value }; - }, - ({ value }) => h.tbody().c(map(value, (r, i) => RowConnector(i).k(r.id))), -); - -function button(text, id) { - return h.div("col-sm-6 smallpad").c( - h.button("btn btn-primary btn-block") - .e(Events.onClick(() => { store.dispatch({ type: id }); })) - .a({ "type": "button", "id": id }) - .c(text), - ); -} - -render( - h.div("container").c( - h.div("jumbotron").c( - h.div("row").c( - h.div("col-md-6").c(h.h1().c("ivi")), - h.div("col-md-6").c( - h.div("row").c( - button("Create 1,000 rows", "run"), - button("Create 10,000 rows", "runlots"), - button("Append 1,000 rows", "add"), - button("Update every 10th row", "update"), - button("Clear", "clear"), - button("Swap Rows", "swaprows"), - ), - ), - ), - ), - h.table("table table-hover table-striped test-data").c(RowListConnector()), - GlyphIcon("preloadicon glyphicon glyphicon-remove"), - ), - document.getElementById("main"), -); diff --git a/frameworks/ivi-v0.10.0-keyed/.gitignore b/frameworks/ivi-v0.13.0-keyed/.gitignore similarity index 100% rename from frameworks/ivi-v0.10.0-keyed/.gitignore rename to frameworks/ivi-v0.13.0-keyed/.gitignore diff --git a/frameworks/ivi-v0.10.0-keyed/index.html b/frameworks/ivi-v0.13.0-keyed/index.html similarity index 70% rename from frameworks/ivi-v0.10.0-keyed/index.html rename to frameworks/ivi-v0.13.0-keyed/index.html index e82ba3d70..0be5dfa2d 100644 --- a/frameworks/ivi-v0.10.0-keyed/index.html +++ b/frameworks/ivi-v0.13.0-keyed/index.html @@ -3,13 +3,13 @@ - ivi v0.9.1 + ivi
- + \ No newline at end of file diff --git a/frameworks/ivi-v0.10.0-keyed/package.json b/frameworks/ivi-v0.13.0-keyed/package.json similarity index 50% rename from frameworks/ivi-v0.10.0-keyed/package.json rename to frameworks/ivi-v0.13.0-keyed/package.json index 463d50667..98451f64a 100644 --- a/frameworks/ivi-v0.10.0-keyed/package.json +++ b/frameworks/ivi-v0.13.0-keyed/package.json @@ -9,22 +9,20 @@ "repository": "https://github.com/krausest/js-framework-benchmark", "keywords": [], "scripts": { - "build-dev": "gulp build", - "build-prod": "gulp build" + "build-dev": "rollup -c rollup.config.js", + "build-prod": "rollup -c rollup.config.js" }, "dependencies": { - "ivi-core": "0.10.0", - "ivi-scheduler": "0.10.0", - "ivi-html": "0.10.0", - "ivi-events": "0.10.0", - "ivi-state": "0.10.0", - "ivi": "0.10.0" + "ivi-core": "0.13.0", + "ivi-scheduler": "0.13.0", + "ivi-html": "0.13.0", + "ivi-state": "0.13.0", + "ivi": "0.13.0" }, "devDependencies": { - "del": "3.0.0", - "google-closure-compiler": "20180402.0.0", - "gulp": "3.9.1", - "rollup": "0.58.2", - "rollup-plugin-node-resolve-main-fields": "3.3.0" + "rollup": "0.59.4", + "rollup-plugin-node-resolve-main-fields": "3.3.0", + "rollup-plugin-replace": "2.0.0", + "rollup-plugin-terser": "1.0.1" } -} +} \ No newline at end of file diff --git a/frameworks/ivi-v0.13.0-keyed/rollup.config.js b/frameworks/ivi-v0.13.0-keyed/rollup.config.js new file mode 100644 index 000000000..721e4d8b0 --- /dev/null +++ b/frameworks/ivi-v0.13.0-keyed/rollup.config.js @@ -0,0 +1,39 @@ +import replace from 'rollup-plugin-replace'; +import nodeResolve from 'rollup-plugin-node-resolve-main-fields'; +import { terser } from 'rollup-plugin-terser'; + +export default { + input: 'src/main.js', + output: { + file: 'dist/main.js', + format: 'es', + }, + plugins: [ + replace({ + values: { + DEBUG: false, + TARGET: JSON.stringify('evergreen'), + }, + }), + nodeResolve({ + mainFields: ['es2016', 'module', 'main'], + }), + terser({ + parse: { + ecma: 8, + }, + compress: { + ecma: 5, + inline: true, + reduce_funcs: false, + passes: 5, + }, + output: { + ecma: 5, + comments: false, + }, + toplevel: true, + module: true, + }) + ], +}; diff --git a/frameworks/ivi-v0.13.0-keyed/src/main.js b/frameworks/ivi-v0.13.0-keyed/src/main.js new file mode 100644 index 000000000..050bacbaf --- /dev/null +++ b/frameworks/ivi-v0.13.0-keyed/src/main.js @@ -0,0 +1,78 @@ +import { Component, statefulComponent, connect, render, map, element, onClick, stopDirtyChecking } from "ivi"; +import { h1, div, span, table, tbody, tr, td, a, button } from "ivi-html"; +import { store } from "./store"; + +const GlyphIcon = element(span("glyphicon glyphicon-remove").a({ "aria-hidden": "true" })); + +const Row = statefulComponent(class extends Component { + constructor(props) { + super(props); + this.click = onClick(() => { store.dispatch({ type: "select", item: this.props.item }); }); + this.del = onClick(() => { store.dispatch({ type: "delete", item: this.props.item }); }); + } + + render() { + const { item, selected } = this.props; + return stopDirtyChecking( + tr(selected ? "danger" : "").c( + td("col-md-1").c(item.id), + td("col-md-4").c(a().e(this.click).c(item.label)), + td("col-md-1").c( + a().e(this.del).c(GlyphIcon()), + ), + td("col-md-6"), + ), + ); + } +}); + +const RowConnector = connect( + (prev, id) => { + const item = store.getState().data.value[id]; + const selected = store.getState().selected === item; + return (prev !== null && prev.item === item && prev.selected === selected) ? prev : + { item, selected }; + }, + Row, +); + +const RowListConnector = connect( + (prev) => { + const rows = store.getState().data; + return (prev !== null && prev.rows === rows) ? prev : + { rows, value: rows.value }; + }, + ({ value }) => tbody().c(map(value, (r, i) => RowConnector(i).k(r.id))), +); + +function Button(text, id) { + return div("col-sm-6 smallpad").c( + button("btn btn-primary btn-block") + .e(onClick(() => { store.dispatch({ type: id }); })) + .a({ "type": "button", "id": id }) + .c(text), + ); +} + +render( + div("container").c( + div("jumbotron").c( + div("row").c( + div("col-md-6").c(h1().c("ivi")), + div("col-md-6").c( + div("row").c( + Button("Create 1,000 rows", "run"), + Button("Create 10,000 rows", "runlots"), + Button("Append 1,000 rows", "add"), + Button("Update every 10th row", "update"), + Button("Clear", "clear"), + Button("Swap Rows", "swaprows"), + ), + ), + ), + ), + table("table table-hover table-striped test-data").c(RowListConnector()), + GlyphIcon("preloadicon glyphicon glyphicon-remove"), + ), + document.getElementById("main"), +); diff --git a/frameworks/ivi-v0.10.0-keyed/src/store.js b/frameworks/ivi-v0.13.0-keyed/src/store.js similarity index 97% rename from frameworks/ivi-v0.10.0-keyed/src/store.js rename to frameworks/ivi-v0.13.0-keyed/src/store.js index 0445147ee..8c5f33cf1 100644 --- a/frameworks/ivi-v0.10.0-keyed/src/store.js +++ b/frameworks/ivi-v0.13.0-keyed/src/store.js @@ -1,4 +1,4 @@ -import { updateNextFrame } from "ivi"; +import { update } from "ivi"; import { createStore, createBox } from "ivi-state"; function random(max) { @@ -59,5 +59,5 @@ export const store = createStore( } return state; }, - updateNextFrame, + update, ); diff --git a/webdriver-ts/src/common.ts b/webdriver-ts/src/common.ts index 66465cc4e..3ba9dbb2f 100644 --- a/webdriver-ts/src/common.ts +++ b/webdriver-ts/src/common.ts @@ -90,7 +90,7 @@ export let frameworks = [ f("hyperhtml-v2.4.0-keyed", true), f("inferno-v4.0.6-keyed", true), f("inferno-v4.0.6-non-keyed", false), - f("ivi-v0.10.0-keyed", true), + f("ivi-v0.13.0-keyed", true), f("knockout-v3.4.1-keyed", true), f("knockout-v3.4.2-ko-jsx-keyed", true), f("lit-html-v0.10.0-keyed", true),