GithubHelp home page GithubHelp logo

o0101 / good.html Goto Github PK

View Code? Open in Web Editor NEW
20.0 2.0 2.0 1.75 MB

๐Ÿ’Ž Good.HTML. A nice framework without the bad stuff. Lots of custom elements, and nice templates. Good. HTML

Home Page: https://o0101.github.io/good.html/

License: MIT License

JavaScript 99.05% CSS 0.32% Shell 0.61% HTML 0.02%
web-components web-components-library custom-elements shadow-dom custom-elements-v1 self-closing html-css-javascript async html javascript

good.html's People

Contributors

o0101 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

fossabot ghotman

good.html's Issues

make rectangular selection with copy and paste

  • rectangular selection visual cue
  • copy (into json quoted string, csv format) and paste (from same format)
  • implement formula translation (moving a2 => c4, b5 -> d7)
  • apply formula translation on paste

fix type checking issue in BANG (e.g cells component) where we can set value to be any random JS value

After removing the elaborate type checking code for performance, the lack of type checks (we still have some, but not all we did before) allows some values to be passed through our process pipeline that would not have been before.

for instance, in the cells component (and this is the only real place it occurs because normally we don't permit setting arbitrary JS values in templates--the author decides what values to put there, not the user--but in cells the user decides) we can set a cell formula like so

A1: abcdef
A2: =/[a-z]/g
A3: =a1.match(a2)

the value of A3 will be an Array. Not a VVArray (array of components / HTML produced by VV), just an array. In this case of strings.

So what happens is our process code just gets stuck in an endless loop on this. Let's fix this.

[feature] add 'lazy' attribute for components for lazy-loading

this will pull that component out of the loading counts for the rest of the page, and give it its own counts scope which will be inherited by all subrequests of that component, effectively making the component and the rest of the page load separately.

Means you can put lazy on a massive component, load the rest of the page fast, while this other component loads essentially "in the background" without affecting the load time of the rest of the page.

FUCK YEAH! :P ;) xxx

[perf][correctness] consider re-adding idempotent state with equivalence checking for perf

So rather than doing merging as we recently transitioned to do (in order to not indicate to every sub view that a new state object has been passed to them (a new state reference)), we make it so that we can pass new references (clones), but that we check equivalence (likely JSON === JSON) to avoid attempting a re-render when nothing changed.

I think I'm doing this already. Possibly, because I'm using JSON equiv checks (which only prevents equivalence being incorrect claimed, but still permits difference to be incorrectly claimed (when the keys have the same values but present in the JSON in different orders)) to determine whether to render or not because: 1) I do have minimal re-renders and 2) the only signal for that, since the state object references are the same (because we are merging not cloning), is the JSON equivalence.

So I think to implement this all I need to do is remove any logic where a reference difference implies a logical difference from the equivalence checks.

let's cache imported styles

everytime we render a component we need to bring its stylesheet in (at least if it's a first time render). We should cache stylesheet URLs in a global cache.

make irregular selection

so we can select one cell or one rectangle and then we can add another such, and so on, forever

by holding down some key or by doing something on mobile i haven't worked out yet

we can also subtract selection parts from the selection

when pasting the gaps between regions are preserved

[perf] add flag to work scheduler to allow it to be switched off once component is built

so work scheduler falls back to good old list.map(func) if component already built.

so we have responsive loads and fast updates.

probably passing in some sort of node object into the state (under _node ?) so work scheduler can check this, (alreadyPrinted or whatever)

  • also see if there is any way to speed up updates on a large component, such as by only mapping / iterating those rows / cells, where the state they reference (state attr, state key, state object) has actually changed.

components for demos

  • autocomplete search component
  • infinite table component
  • multiple file upload with progress bar and preview component
  • single image upload with crop / filter component
  • blog/feed/CMS post component with client-side sanitization
  • text comment component with client-side sanitization

maybe need an "onrender" event

like when something changes...? but it's hard to specify. we have on bond for first time the tree is attached to DOM....

to do

  • bug with nodes removed not able to be re-added using vv, workaround is creating new keys to force new nodes
  • linkedCustomElement not update when we update the comment, so workaround is using start and end tags instead of bang tags
  • optimizations bug re #10 where nothing is updating, even tho state is

reduce confusing visual signals on row and column dragging

so when dragging for size:

  • adjacent column cannot become selected
  • we may highlight the entire dragged column
  • we definitely should highlight the column / row border at the point that is being dragged

this will help indicate to people where they should press next time and what area their action is affecting

performance

  • support passive event listeners
  • load only a small window out of infinite number of rows and columns
  • try preview / commit two phase resizing for performance and to avoid scroll snap jank issues
  • alternately try switching off scroll snap during resize dragging

Datensynchronisation

Keep a double end queue or a heap in order to keep the actual visual order of the available to be printed into the data sync

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.