diff --git a/packages/playground/examples/bubble-sort.tsx b/packages/playground/examples/bubble-sort.tsx new file mode 100644 index 0000000000..df2350b763 --- /dev/null +++ b/packages/playground/examples/bubble-sort.tsx @@ -0,0 +1,90 @@ +async function bubbleSort(arr, options) { + const max = arr.length - 1 + for (let j = 0; j < max; j++) { + let done = true + for (let i = 0; i < max - j; i++) { + options.check(i, i + 1) + if (arr[i] > arr[i + 1]) { + await swap(arr, i, i + 1) + done = false + } + } + if (done) { + options.done(arr) + break + } + } + return arr +} + +function swap(arr, indexA, indexB) { + return new Promise(resolve => { + setTimeout(() => { + const temp = arr[indexA]; + arr[indexA] = arr[indexB] + arr[indexB] = temp + resolve() + }, 20) + }) +} + +class Store { + data = { + arr: [2, 7, 12, 9, 16, 19, 8, 13, 11, 5, 15, 17, 14, 18, 6, 3, 10, 1, 4], + indexA: -1, + indexB: -1, + sorting: false + } + sort = () => { + this.data.sorting = true + bubbleSort(this.data.arr, { + done: () => { + this.data.indexA = -1 + this.data.indexB = -1 + this.ui.update() + }, + check: (indexA, indexB) => { + this.data.indexA = indexA + this.data.indexB = indexB + this.ui.update() + } + }) + } +} + +@tag('my-element') +class extends WeElement { + static css = ` + .bar { + display: inline-block; + margin-left: 1px; + background: #777; + width: 10px; + } + + .active{ + background: red; + }` + + installed() { + this.store.ui = this + } + + render(prop, store) { + return ( +
+
+ {store.data.arr.map((item, index) => ( +
+ ))} +
+ + +
+ ) + } +} + +render(, 'body', new Store) \ No newline at end of file diff --git a/packages/playground/index.html b/packages/playground/index.html index 4654437a1c..2470eb5bae 100644 --- a/packages/playground/index.html +++ b/packages/playground/index.html @@ -117,7 +117,8 @@
  • Hello OMI
  • Slot
  • Fragment
  • -
  • UnsafeHTML
  • +
  • Unsafe HTML
  • +
  • Bubble Sort