Skip to content

Commit 8c961b9

Browse files
committed
Add sprae-safe
1 parent 3afc524 commit 8c961b9

File tree

7 files changed

+844
-0
lines changed

7 files changed

+844
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="utf-8">
6+
<title>sprae</title>
7+
<link href="/css/currentStyle.css" rel="stylesheet">
8+
</head>
9+
10+
<body>
11+
<div id="main">
12+
<div class="container">
13+
<div class="jumbotron">
14+
<div class="row">
15+
<div class="col-md-6">
16+
<h1>sprae</h1>
17+
</div>
18+
<div class="col-md-6">
19+
<div class="row">
20+
<div class="col-sm-6 smallpad">
21+
<button :onclick="e => {run()}" type="button" class="btn btn-primary btn-block" id="run">Create 1,000
22+
rows</button>
23+
</div>
24+
<div class="col-sm-6 smallpad">
25+
<button :onclick="e => runLots()" type="button" class="btn btn-primary btn-block" id="runlots">Create
26+
10,000
27+
rows</button>
28+
</div>
29+
<div class="col-sm-6 smallpad">
30+
<button :onclick="e => add()" type="button" class="btn btn-primary btn-block" id="add">Append 1,000
31+
rows</button>
32+
</div>
33+
<div class="col-sm-6 smallpad">
34+
<button :onclick="e => update()" type="button" class="btn btn-primary btn-block" id="update">Update
35+
every 10th
36+
row</button>
37+
</div>
38+
<div class="col-sm-6 smallpad">
39+
<button :onclick="e => clear()" type="button" class="btn btn-primary btn-block"
40+
id="clear">Clear</button>
41+
</div>
42+
<div class="col-sm-6 smallpad">
43+
<button :onclick="e => swap()" type="button" class="btn btn-primary btn-block" id="swaprows">Swap
44+
Rows</button>
45+
</div>
46+
</div>
47+
</div>
48+
</div>
49+
</div>
50+
<table class="table table-hover table-striped test-data">
51+
<tr :each="item in rows" :class="selected && item.id == selected.id ? 'danger' : ''">
52+
<td class="col-md-1" :text="item.id"></td>
53+
<td class="col-md-4">
54+
<a role="select" :onclick="e => select(item)" :text="item.label"></a>
55+
</td>
56+
<td class="col-md-1">
57+
<a>
58+
<span role="delete" :onclick="e => remove(item)" class="glyphicon glyphicon-remove"
59+
aria-hidden="true"></span>
60+
</a>
61+
</td>
62+
<td class="col-md-6"></td>
63+
</tr>
64+
</table>
65+
</div>
66+
<span class="preloadicon glyphicon glyphicon-remove" aria-hidden="true"></span>
67+
</div>
68+
<script type="module" src="src/main.js"></script>
69+
</body>
70+
71+
</html>

frameworks/non-keyed/sprae-safe/package-lock.json

Lines changed: 69 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "js-framework-benchmark-non-keyed-sprae",
3+
"version": "1.0.0",
4+
"description": "Benchmark for sprae",
5+
"js-framework-benchmark": {
6+
"frameworkVersionFromPackage": "sprae",
7+
"frameworkHomeURL": "https://github.com/dy/sprae",
8+
"issues": [
9+
1139
10+
]
11+
},
12+
"keywords": [
13+
"vue"
14+
],
15+
"scripts": {
16+
"build-dev": "cp ./node_modules/sprae/dist/sprae.js ./src/sprae.js && cp ./node_modules/subscript/justin.min.js ./src/justin.js && cp ./node_modules/@preact/signals-core/dist/signals-core.mjs ./src/preact-signals.js",
17+
"build-prod": "cp ./node_modules/sprae/dist/sprae.min.js ./src/sprae.js && cp ./node_modules/subscript/justin.min.js ./src/justin.js && cp ./node_modules/@preact/signals-core/dist/signals-core.min.mjs ./src/preact-signals.js"
18+
},
19+
"type": "module",
20+
"dependencies": {
21+
"@preact/signals-core": "^1.6.0",
22+
"sprae": "^10.1.2",
23+
"subscript": "^8.3.5"
24+
}
25+
}

frameworks/non-keyed/sprae-safe/src/justin.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import sprae from './sprae.js'
2+
// import * as signals from './preact-signals.js'
3+
import compile from './justin.js'
4+
5+
sprae.use({ compile })
6+
7+
const adjectives = ['pretty', 'large', 'big', 'small', 'tall', 'short', 'long', 'handsome', 'plain', 'quaint', 'clean', 'elegant', 'easy', 'angry', 'crazy', 'helpful', 'mushy', 'odd', 'unsightly', 'adorable', 'important', 'inexpensive', 'cheap', 'expensive', 'fancy']
8+
const colours = ['red', 'yellow', 'blue', 'green', 'pink', 'brown', 'purple', 'brown', 'white', 'black', 'orange']
9+
const nouns = ['table', 'chair', 'house', 'bbq', 'desk', 'car', 'pony', 'cookie', 'sandwich', 'burger', 'pizza', 'mouse', 'keyboard']
10+
11+
let nextId = 1
12+
function buildData(count) {
13+
const data = []
14+
15+
for (let i = 0; i < count; i++) {
16+
data.push({
17+
id: nextId++,
18+
label: `${adjectives[_random(adjectives.length)]} ${colours[_random(colours.length)]} ${nouns[_random(nouns.length)]}`,
19+
})
20+
}
21+
22+
return data
23+
}
24+
25+
function _random(max) {
26+
return Math.round(Math.random() * 1000) % max
27+
}
28+
29+
sprae(document.getElementById('main'), {
30+
rows: [],
31+
selected: null,
32+
33+
remove(item) {
34+
const index = this.rows.findIndex(x => x.id == item.id)
35+
this.rows.splice(index, 1)
36+
},
37+
38+
select(item) {
39+
this.selected = item
40+
},
41+
42+
run() {
43+
this.rows = buildData(1000)
44+
this.selected = null
45+
},
46+
47+
add() {
48+
// this.rows.push(...buildData(1000))
49+
this.rows = this.rows.concat(buildData(1000))
50+
this.selected = null
51+
},
52+
53+
update() {
54+
for (let i = 0; i < this.rows.length; i += 10) {
55+
this.rows[i].label += ' !!!'
56+
}
57+
this.selected = null
58+
},
59+
60+
runLots() {
61+
this.rows = buildData(10000)
62+
this.selected = null
63+
},
64+
65+
clear() {
66+
this.rows = []
67+
this.selected = null
68+
},
69+
70+
swap() {
71+
if (this.rows.length > 998) {
72+
const a = this.rows[1]
73+
this.rows[1] = this.rows[998]
74+
this.rows[998] = a
75+
}
76+
}
77+
})

frameworks/non-keyed/sprae-safe/src/preact-signals.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)