-
fe7cfac3a315d0c397cc0c5410e5864bfc4b6f72: v1.0.0-beta.1
-
300d9bbdd842809ed42f742aa93413b1b99f1eba: prerelease
-
3601e1818e53fe180f44067ad4e2082ccd156185: correct commit release
-
c79591803010c69ca95a034d360f9c75cff4fab9: 1.0.0-beta.1
-
12b4140cbb936a2e62082cd74a264a3e710b2f53: 1.0.0-alpha
-
760d774cb0c3f3870a6e08b49c61c4e6646a4426: remove tag
-
7cca02bd59053610450013ce5c6f91544fb2daf5: push tags
-
630df3c6eb4212cabe54557180e278b9d7b4bc45: 1.0.0-beta.1
-
ef0807c3cbdda6c344a01c1d3fd5d059d2b6a9fe: 1.0.0-alpha
-
1207ad84597848fdfa8212fd398d840ca068b583: stringify log
-
83eac6fb2916ebc26d12e532f594f17a5870c33e: remove web from master
-
45130c40d11de19d77d7a75e97bc5bbb0f552935: push after build
-
2b1b1e57f70a65403c4a9a8e1c501c52a9bbd89f: Moon v1
-
806aef1999d6202282c407e7a1a918340f34a5e5: tab
-
7587745802f403c0d32cccc7a4f7ec1c60b173b0: Merge branch 'master' into rewrite
-
3d3bbe6886022d255cb53b3a9ee7ebd51c56c427: add build scripts
-
a1cd9c54d07bb0252b08f10d679e8ab12b2e89db: release script
-
8db839f11bbcaa7e68586926c9cf7d4abf8789de: update css re
-
aea1806be7a3a6a878291d5947c679c74c54d96d: remove unused file
-
4c48829386d43c7b74141948a1521541e7e1a791: new hot API
-
1de8c9b327cdf3d5c65e2d4bd0b5018e70c2b224: add hot utilities
-
f61723da6b42243593503ff721edc9656991386f: use scope css
-
b98736086e5e202ebcd4ded692db511435cabbf9: export css scoper
-
bca589226eda7f30c7543db32f14f3e649fa7e9d: export css
-
e293cf1f609f807276871efc3db1d7a37182c3c5: export file info
-
6e73fbb269d2803d878400d4e320e3d3a6d68e02: export libraries
-
5491005af8c0f8a95a0246188ed7897a533f5a1e: remove deps
-
06d37ade486bb1cdbd182cb8349ebf111b692e01: add css rule when scoping
-
21683b380c49c118f9b9be8ef0dd28c3b3013420: require correctly, compile correctly
-
e6fccfbe5a73ae429cf18fe3dc85a77716d8e0b8: fix syntax
-
2a75c5d05908fa3780eeb932f8e79101652b53b1: require correctly
-
eaeb87365074dd194a36ed5db4bb9bc03716b9e0: add css scoper
-
d6201efa7cc26f1e44f9c14fd77845218be18c35: work on css mvl
-
4960970b1f9d434740316b46c2379ec9a2044e9e: export parser and generator
-
7c7bef3b0559817438f03e850dacc108f5413ac5: use contents
-
4b871c97fa9afca5d428e4a1a3a1ffc4d30405f1: add start instruction
-
2868428165d0dda2963caf133c5f972b407a4183: compile created files
-
a206f796c69a2a0e81eb2f8b37092e9624ce5eda: consistent descriptions
-
c6afd1063e0074e3e532acff2e0f5bd86af669bb: moon-cli
-
792803678333861d830d1f4ab7b582daf705eaf7: deps
-
a9122a3bc6fdb572e376b8191e5209d53a451d4a: add readme for moon-mvl
-
f1630ece082817a3a95d8fd4cc1232ba3e92e03d: add mvl
-
01063d90ce7b4e5e886e512921678196b87ed13b: move release script
-
60ef57abd860cd7a3e83c406b26bddf58183208a: scripts
-
25da18214982b9c6a09edebe67f55b6345556690: infrastructure
-
9c99ab180f9cf05e378b783f9e9e99c58a4ab69d: finish up guide
-
d393cfe3cc2ee8cd4c6e9f5ac6f91cc573cce67a: begin guide
-
ec62a881cc20356fb0e31958215b04387ef4d8dc: add coming soon
-
9661801931beb825be1d9aaf55e68d7584e4d1c4: add examples section
-
fa17f7e55bd41148ed3133a5b29ba510ddd9c2c5: finish up component docs for now
-
c79eb0a93134d6f16ee0170a6c7a8d90afe5f358: add component arguments section
-
cbdcaebe30db3d6b83a5d59a82b94b1f4741817f: update button styles
-
0f2059c17e773547aaf9b43167bf3d9dfd762810: add component definition doc
-
c4fe44de3efe796dce9b59ba5e7e04abbf246c07: write about alternate syntax
-
8380f6c3eea82bcdd0fd0d9d3064e5951b7c73b1: add runnable examples and loops
-
fd983fd3874344344125c0eda292920395a0f542: finish up view events
-
dedc90a7c70489cecb2ef9d95dda35702172c52b: add more data docs
-
bbffecbab71a5c325a8613eac81c81a752f8875c: add data
-
f0c96cb5324dc4438a6e328c2787e3b853c9989d: add events
-
69cdf35b345ca362f99f72ab4b0e8c508df31c9d: organize
-
941dc5ce56c84c4c49c21dc790fe1ff3e35d6abc: remove local
-
7d009a74388c48d6fed3345eb8324b89cdc03fa4: fix syntax highlighting and begin view section
-
83783055e1e6200b3091dfce490bca4198e575ca: add about
-
661631e161cca3b2e4881fcd9acd24799d033d58: basic structure
-
40fbdb4ce685ccf5a80cef6afc025ef9fc21c85a: start guide
-
61d0eed716517ff13e93aaeea7c8745d1544c513: slight redesign
-
378cfe07f7f828b0496370a070a97c8843b135c4: spacing in fast example
-
132019085b3c1a3828658bf44e0e9e6912c916a3: update fast compiled result
-
37f305105045e4393b3410fca2be81ee62ae94cd: update cta links
-
c0af2f6a9e5e8401d4c02bcaeb08f59b8cb3595e: update fast example
-
4a76c41cb497e4e67c3b5ea090fda4b0ae28f71e: add nav
-
67de7da665c41d1f52d391f7495f3a2fa74b7293: update header styles
-
93a3bfdcb5f55ba60bb4d41e286cd7f9e152c129: update example style
-
878d64cd1bdf6e1b0915a2923510748d6c34305b: update website
-
e4b97d73ecc108e80f9fbd5f61ab943ea7679bff: update code colors
-
b5c71406a270899e1d12a9a27cfd691f6e2803fe: update logo & colors
-
3151bab94632bca8766a26bf162536b5e0cb0d21: update todo
-
b8b70d7567535a442c715b32ea3e7e08fd4e67bb: fix component initial update
-
d6200cc9c8ce5e25a60fe0a39e793c58cba64671: add basic components
-
1305a50b87ae73a82d288c37a27d3b39d6573fdd: reorganize directive runtimes
-
3562b2c1c29aa0b03b4dab7e53bc01a44e5e9cc2: use correct view create API
-
3cc843c805d4e8f307eb8bdb3b7bdd6bb80b9193: remove reference from API
-
d7749e22f48dc1f4987b8a242f63231ac015f6cd: create using root and reference
-
446d549a6cc95b1eedd1d2f1073c0bb872312b41: allow precompiled views
-
a7d6267b322339ee37cd5149481ebbbbf5d4fe71: update todo example
-
871e5984e668d05a03b1ae5a208f091511e739cc: optimize events and create bind event
-
b7fc498c01cfa2964fcb35a378a1c6f88b45e40b: update example
-
ac2cc373ae11793fe3a3885132b0393a45e412e7: fix #for/@event locals
-
f0614751295ea1d2906e4b49c6c78d1d123a1d46: add variable support to #for
-
aebb99ed61a151a7f63880d2bcef176bf1f57085: add basic #for
-
ad94c7aa7037021cc18479ed6ae686280d3d764e: spacing
-
0b19e6c18dea481ad3d840d364892f45a91a1eae: build
-
24053df9c175caf10e6b2977565b4d1b7e33706c: update option shape and correctly implement directives
-
42b41573f8ae676e0089cbb8b43bd3672d410c2a: use variable based compiler
-
bb448e86ffb94e03743d6de5c8ffdd9283860f01: consistent colors
-
fdfc6cc7d604bd57804b79546f701b4a076b313f: make button brighter
-
506cd379efcf06a2007423f762f770572afad767: add #elseif
, make attribute values selfish, and fix attribute with value bug
-
bb2265c694c89f38083b18b92e1a3fc69000dec2: update spacing
-
127ef76615bdd12aeebacc6b3a2eceacae327278: update landing
-
6d4ea3e2e507ceff207ff1e65ba5bae6154c5151: add web section
-
c8b174bb206a5d04f5b12c19972d70a3a878c469: add basic landing page
-
83b18232876ee59aa8b62b2c0ca4450d45e3c345: add events system + #if
/#else
-
e171bf501187d4724097588fa5b9b3422436feda: update website
-
5b08686eb3b429500b2616442f97d1c73b5eec59: add #if
-
b55f09fcf9f1af090896e5011b997543379cccdf: clean up conditional implementation
-
f2e8484125ef6f867edf66f2aa34ab4d2966a7f4: set
-> update
-
047ac2e2c7e00a57f95f5a53f1ae0857705f89d8: add #if
, #elseif
, and #else
create
-
17c25441749de0e61c439f7ed09fc2edd3eeba53: add #if #else
-
de6c133c3d851151950d080e1fe3f8418ff7d15d: new syntax: events -> attributes & directive -> elements/attributes
-
24c9e4e8a729bf0f6922f8bcdc48691e9a68caa1: add destroy directives and user-defined m-text
& m-comment
-
878ec4f31d37aff3a50e2a725a01fef0551a353f: new directive system and create/update/destroy
-
afaecd9411bb2bb0f35f178ab33f39e0904f9dcb: new directive system + destroy
-
16271e867262d4f84c48710715bf39fb10b1387b: add m-root
, locals with $
, and change directive system
-
ca1b73f520823f8ebc4be7539a3cd1118e0d7bba: ignore whitespace-only nodes
-
cc3070fe9df92d11ddcb76c2fa01185a984df3a2: update component API and add mount in create
-
9762139f072706b52b976219b84ad1c1fe4ffd1d: use m.cae
-
7c6ae4863017b84762e01ed8bc8cb25516988642: don't update directive in create
-
bca8d2030135a4f13b75fb726b90e5283944e0ad: update directive system and change locals & structure
-
c099ac3634092d760722c4fc6a09e7a5dd5188b3: cleaner implementation of directives
-
1755adbabc0019cbfb28301e1b4e42ceb3dd1e0e: add updated
hook
-
544ce31b0c19c8b5a5049ac3c29daec13327bb5f: remove mount and add created
hook
-
7b3fa8ee2db25bf0f5d32557c6f22c9d2c51e661: add events
-
ef28850466b432d38abf3fde86906a6c7d048a2e: change API for options object, view array, and actions
-
d2a92b7342d6933323b473d467b73e7615138553: update attributes, add m-on
attribute
-
c1235821fc22aa7b9ec5b1ccebdba08f4b52cd64: compile arguments & events, consistent formatting
-
8118cad352238516fbf06e6e6a7e7c3bc5705b87: update dynamic expressions and attribute expressions
-
4b41d731fad61d772df9ab9ce241c50246d8e172: concise code for creating attributes
-
2ee4e9edb9879c1dacfffe4fc6927a1b22722ffe: correctly mark attribute as dynamic
-
72aca99405d5da5adb36a99a60fe649415ee39cb: correctly mark attributes as expressions and dynamic
-
347af976fb01938a0a52f1755627fca9e5fb5fac: create attributes, fix generated code formatting, and create case for no attributes
-
f2ee4dd7f586323b30db0a4a3781cda07bc0e618: parse attributes
-
f3692d5eedea58f10c3bbcaab69056215731a712: add global components
-
a260014c3ba4ba27582227544d7a6ba3a0a85cb0: remove m
from locals
-
b859484384c3cc46adc804d084d5a06be6675ba2: create component constructor
-
60c2c603900e80a0ecfa06c26ea3249e3ddf93d3: remove unnecessary exports
-
a446ca4484849aa682c425ad093929af2fc98251: create with dynamic content
-
1369fd243d27f53faf269c25b05f787e3110f263: split up generator
-
03a05909c00bb2b1842e18d6a0a051ce6a63563b: split up parser
-
612b95a8eacbe4dbd4fc874cb0109a39fe141e2a: add eslint
-
455d5705d9138ec325086f7792a7b35c1f1f7b43: remove gulp
-
b35fe7e70d35ba2eeeeebd811ae91d4fe5d809cf: add default data and data in root
-
588d008ec7673112dabaeeaaa6cde365edd276e9: correct dependency path
-
3ed828bded01067d499e6343085b4c9b8c1aebcd: build
-
4fd3e6bb72435c9c860888517c871bcb14a3925a: use mapReduce & DOM utilities, correctly mount fragment
-
4d53a3c61e41029307def97f73bc289df8d2d083: add DOM utilities and initial update
-
f05b0281ff41e470097452644abf6cb0110796b2: add mapReduce to utilities
-
463b553dfd3565df386b3d0974280ae2ac21d00b: add update
-
6def4af80c2e8ab222c26027e3d4942264d7e9d5: generate create + mount for expressions and generate dependencies
-
9ab89e5c5d30f8bf2695305c6af43a3b142f395a: remove instance from locals
-
91238d885e5bceb53206da7c0553f958e3b7d731: generate fragments
-
c1e5a81b34af15e8c5cc8b52e39cc500054a8156: add fragments in parser
-
c438218c55c4b36a1acc7eceab57c81c3cd4c922: parse expressions
-
1da4378a753d9e8c06907a5d8fe1b8ce959fa70d: remove unused regex
-
01367160a1326485b219a1da6b47b1fc5e6f5225: parse comments
-
6eb47d2c9948b7e56e3f0632239eb2c92dbf6bc6: add escapes
-
71f14723bbee06ddcb560f67a4fabf521cd2f5c0: build
-
ebe2a2f7e07095236cf10906a6d730296d96b708: better error message
-
a00d869a23d6bfe0b31019610511831effaa69eb: add text content
-
1f0857df3f43a00c79b58fb6908fe44694c3591b: correctly mount to root
-
1e4114a50df00041fa6e7b6ab1b4a1909bba9e0b: add mount
-
4807076a2561b6dd5122d8df6db370ea9c903d57: generator for creation
-
e20a58b565f367ba7b34fa0b8f03951ba0329761: add root instance
-
74bf27ddba04d7a59374efd07c4000968e0d905d: add create, mount, and update
-
9392d5f483b02341ad1c6972faaa8b7a1148709c: m-fragment -> array
-
462b86e1ad71eb49a8d74e6a284a73bdbce3c3de: build
-
69fdd4266d5ccc591ed1bc04516431a638c4454e: add basic incomplete generator
-
5c069211a31434fe52a72d2f5776fe87994ec250: add parse index to parse elements
-
a8a52fcceaf2d0c7045efca5aebb782591441318: add component and root instance constructor
-
7189dca04d4532bae9db634dcde3820b1b8b77bf: add sizes to build
-
107c1e54ec43d18398cb287faa4203acaff7ae73: remove global
-
f86bc7aa479fc97674bbd7ae5789a29139e14856: update structure
-
ca49d0f4d699555069652885f4372735aa664904: remove file names from imports
-
1470b533387a680f6ff7151b05831ad1031e63c4: add compiler shell
-
0e080bc8993880ebdaec0909b0450a3e03365927: export parser
-
adde9e421ea838a59d79607e082f6225e2b77ffd: correct error message for unclosed tag
-
c621cce98c4803cbce9f73ce0196b963baf28180: use config in util
-
946b5a51ad0f7e2bbf19868d29afbc2250a2745d: install global API
-
c13ac49fe6d28b9a2d039cc128b80ed596fdcf47: basic Moon template parser
-
57f89a4bad6e72bb5311b8facad9ff461718cc5b: add error utility
-
50d19e10ad3f16ef0d23dfc4c3515d52e3b9de59: add Moon configuration
-
5285c631717ba99e52f454fb3a820ff15c84558f: use env variable MOON_ENV
-
e3b28565f470b8239730b2fccc7ffca098c39f8c: add plugins and env
-
a95445827ac429389dfb2fb023d4c5db80da691a: improve style
-
166dc848ad9f50b91ef2bf712c2dcf0e6897531c: remove current Moon API from tests
-
2ec94b4b21efa2c4bf087254f2b7f27bff331262: stop saucelabs for rewrite
-
a0f4eedd9e83332da2ba9c6799a116f9b82b34ad: update browser support table
-
1299977884459933cb4a0bf50d8e5a9f1db61399: refactor index code
-
bfb231e3b86def95d7a702f9b609949b51c4c3ef: development + production build system
-
8a43b17913f5f34583055f4a2647c7228a0aeb85: update build system
-
a81a4561ae2a6dc68e53ec6a0677941ff9d143b9: remove old build scripts
-
02ff14fa82cfb8279240d2f59f4bfd2bfde8801c: update karma configs
-
c501192536e6f58817565a85a5a34f406c7439f7: update travis scripts
-
413bedc4f47e9915b469f6e83496761a169289d5: rewrite build scripts
-
8f0ec5ea46fbc5546977e5a67f34c0cad35378b1: remove benchmarks
-
2a493ce349e0c67c4bdbd7985ab276d59621386a: rewrite source
-
10d3791a469a8c388e22c6a92f0cbcb90036e600: rewrite test structure
-
f3b700d3ceffff21501a5c9a79df2819d9810c34: rewrite package details
-
029aae61924935a3b82e163d204ed512d9aebc1a: remove file structure for now
-
e7776767f494a76ae8d72e49d4048f2eb56c7b36: wording in description
-
babbf8b1c02342af944ea547c8d9cf5a2867fd6f: see documentation
-
16abac3c5aaae8301381185faeefdad3e24a4bbf: update website (fixes #219)
-
c910a5aa8fce730727fd0a9a4ed093d6cdcf638b: update website URL (#218)
-
3365188de2791a3373e9d0ab03ee5ef12c67778a: 2018 in license
-
7a1eafaef80e5c46288410f2f0df7a9fd86d4977: 2018
-
76651e4abaa775c60a08469fff243783699b79d6: consistent spacing
-
02e22ad554fb1f59a5e854288180376093c4b113: simpler subheading
-
aac29ee5e03ed3c7e305e02b9320ae6b2951337a: refactor: use convention for chars
-
e6208979ff29f45584c92238871b8123c1bf26f8: feat: static flags & m-dom directive
- Compiler
m
is now a global variable
- Lexer
- Parser
- Every node has
data
with no flags
- Generator
generateNodeState
- Compiles text values
- Compiles inserts
- Compiles attributes
- Compiles directives
- Compiles before + during special directives
- Creates a list of after special directives
- Compiles child states and adds static flags
generateNode
- Converts compiled nodes into function calls
- Calls special directives after
- Returns static node if static flag is present
generate
- Marks tree as static if state is static
- Uses
generateNodeState
and generateNode
- Directives
m-if
/m-else
- Only generates output for
m-else
- Outer if/else nodes are always dynamic
m-for
- Always dynamic
- Allows
generateNodeState
to restore locals
m-on
+ m-bind
- Uses new naming conventions
m-dom
- Adds dom property
- Replacement for
m-literal:prop.dom="value"
m-literal
- Only for literal attributes
- Virtual DOM
- HyperMoon for text nodes requires
- type -> type of node ("#text")
- data -> data of node (only flags)
- value -> value of node (text content)
-
f6adec5bd5170860fd7446f75c0c366226a1a0ec: fix: change flag values
-
a5192d8164097ee1ddc16154bf84ed759afcb25c: refactor: order constants
-
64fb32d08539cdc08faa661854fd2c1202dfdc1d: fix markup
-
51b3ae4617aab2f37e35ae78a96909bec7446e19: comparison to other libraries
-
b50906d0fd287b5ac6ba587fe4ed7dcbade065af: change description for CLI
-
597756c967fdb2dc99941dcf4b752f6c7953834f: refactor: add flags correctly
-
5dccf1d764e9b5fed60a33da24c4833b0150c6d8: refactor: vnode data flags
-
d459e2dc234ee546b2f1d338cc7123ed875646d7: perf: remove replace for static nodes
-
33555213a687b211c7cb6999f69aef9979c25337: add virtual DOM hoisting tests
-
fe3f4eeb43638d02b80445ccfe9512fad6351ea5: wording for virtual dom trees
-
37b0513cbae00cda15e05842931a9566def77041: explain uses
-
17b3b442567d73217450e09c10b1ada2c359d848: update explanation
-
1ddb983e8a0b83b607475f3fda8ce5e56115fa32: change explanation for another library
-
d63c607e63b1da3d60bdf70f241c006dd1737cea: correct comment
-
18514af87879b471b73c9b8f7294f5473a009902: change description for router
-
c135b3fad1e16572a41b3ad3d76e5ac924c977fe: fix test quotes
-
9ae71c40a8d63a3b670bd6508f77000e6723f803: fix: allow whitespace between aliases in for
-
b5664511157b09887a0b40392fb9097021ae27f3: refactor: Consistent Naming for hydrate
& patch
-
451aad12f77fe810825e79eec9930ef7dbb542d3: refactor: Functions & Consistent Naming
patchChildren
-> patches children
operationNode
& operationVNode
operationNode
-> handles low-level DOM operation
operationVNode
-> handles mounting/destroying components along with DOM
- consistent naming -> root path + properties in camel case
-
74ed50ce8c3846c4083d38043d69ddfb13b9bce4: fix: escape non-breaking spaces (fixes #190)
-
7cefee2b604bd351fd51646119d47a48eaf17bc9: Add Support Section
-
ac315d3ed14eddfa045a2658ab2e05a250f10e66: Revert "add patreon link"
This reverts commit bd6dc53b784035dfd956ca287837c883bee3636c.
-
bd6dc53b784035dfd956ca287837c883bee3636c: add patreon link
-
48e450edc1cc9a8cb78c62ebc26ba0792c49886e: fix: create static empty node for (fixes #179)
-
5b305a6b6e426692c6ca2c639f2b3ed768974b09: Optimize loop benchmark
-
dc360377a5a4081bf38e2409c161b81ef5c89470: breaking: Template Compilation
- generator state
staticNodes
-> static node code
dependencies
-> method and prop dependencies
exclude
-> global variables and keywords
locals
-> local variables
on
directive
event
variable is available, but not by default
-
99d361bcdbcd76b0ac9aedd02f2192747356441e: fix: compile DOM props once
-
40d27744823164555d6163854924eea4482623e8: fix: deoptimize dynamic DOM props
-
f2b68c7e917c843533c84fd57b8b7954a6fcc6c5: improve dbMon implementation
-
04482efe65018d645458a983bf917191f3e082d4: breaking: Rewrite Generator and Optimizer (fixes #146)
- Compiler
- template
- fix bug and mark as dynamic even if referring to a prop that has been referenced before
- lexer
- parser
- parse text nodes with a type of
#text
- store index in node
- generator
- rewritten
attrs
can be undefined
- hoist static nodes (#146)
- generates all children and becomes dynamic if a child is dynamic
- if dynamic then hoist static children
- if static then return as usual to let caller handle it
- stores static nodes in
instance.compiledRender.staticNodes
and initializes them at runtime
- optimize by joining with a separator instead of substrings
- returns output and boolean representing if the node is dynamic
- directives
before
special directives are expected to return a boolean representing if the element is dynamic or not
during
special directives are expected to return an object containing the output and a boolean representing if the element is dynamic or not
if
/else
- if the condition is static
- it will be evaluated once
- no optimization will be done directly to the nodes so that the parent can handle it
- if the condition is dynamic
- if either the if or else node is static, then it will be optimized and hoisted
for
, on
, bind
, literal
- remove
m-show
- Virtual DOM
- patch props
- if vnode attributes are undefined
- if node attributes aren't undefined, remove all of them
- if vnode attributes are defined
- if node attributes are undefined
- if node attributes are defined
- add non
false
vnode attributes that have changed or need to be added
- remove
false
vnode attributes along with vnode attributes that no longer exist
- execute directives
- add/update DOM props
- Tests
- update all tests for new API
-
373c098754c8732ffe4466a8467698cf7d00b305: add tests for having multiple dependencies
-
ef7fae8fddd6fe845eed343e2be1625123930bb5: add tests for static directive
-
3ab98797c30e50746bec44bab6ee54026f634739: add tests for computed property cache
-
c3c45070de96a7b2bddebd1b8383172fcfeded46: fix: warn when root element is text
-
517f30d655ed20d5357fc9463ac1c247a7ede8d4: add tests for updating the default insertion
-
cb518d13c933c00bb66426514fdaa6411f85fbf8: add utility to capture errors when testing, and add tests for unknown directives
-
031cfc00c3396de7695b176583a8960d67b3ab4e: simplify intuitive API feature
-
af0ce48c674e2b7a14b05625bbbcb890a3ec8b35: add Slack badge to README
-
f8887635cb8aa67843477dd6ae5a70d7fda4d2f5: add tests for errors when data isn't a function in components
-
85d155e25bf05c1ae18fdf6df858c9105a981ebf: add tests for removing events for a type, and referencing undefined values
-
591149457e57c1f1daebc0fb53dcf850bdcc5301: add tests for invalid expressions
-
64438cdcd05cb552935f160fb4789ea6f0f6ff1e: add tests for empty attributes
-
554f003721f260719209ebd0564b96944164d3a9: test unclosed mustaches
-
a05cc3bf77d50d3674d5f6937ad69c2e6f4c836d: mute logs in tests
-
250a30b40453ac781dcac5a3229ae139ec3ed0ad: refactor: tests for self closing elements
-
3e931b515c5bcb278d499babacb7fb4f6c3a56c2: fix: remove "m-else" from directives list when compiling
- "m-if" already handles "m-else"
-
74fbbea12a6bd96fe7e69f4ad9603700549b9a0f: add tests for destroying components by replacing and removing
-
68bcfad6779e261cfd5f8ee67f25eedde1c3f72a: add tests for xlink:href
-
f7a9ee44f2b8b34d48c9a5d620f2fd589216e97b: add tests for removing items from a list
-
3305b1d24b2b7bbeaeebabd5e294c61912f8dc68: refactor: rename delimiter to separator
-
2ac841d84fdbaaa2c0d2c204020d3e4182761664: improve test suite output
-
a5d2b8905a98f0a3c93006a6d608719bdd1a6500: fix: don't check for different root when building (root element can only change during hydration due to component mounting)
-
18ffb75ed7286409f8d730785be8550d191a3da6: breaking: simplify event emitter payload system (fixes #153)
- payload does not need to be an object
- normal event handlers are passed with the payload as the only parameter
- global event handlers are passed with the type of event and the payload
-
9136b0b60e92d364c965d00418a160ba02157996: refactor: remove jsdoc comments from global API
-
50c91f55bb218adb872dc9b936cfe1d1f6d9a67a: breaking: Rewrite Virtual DOM Engine (fixes #158)
- Root
- any root element doesn't have "moon" with a reference to the instance anymore
- VNode:
- "meta" has been renamed to "data"
- "eventListeners" has been renamed to "events"
- Hydrate:
- hydrates children, and does work in loop
- uses inline DOM utilities
- Patch:
- rewritten
- uses inline DOM utilities
- doesn't use "dynamic" in favor of VNode reference check (#146)
- components
- if the component has props, it is a deoptimization and the component will be updated (#158)
- patches events (in case they changed)
- Components:
- if creating a component using the constructor, the following options are available
- required options
- "props" - values of props to merge with data
- "events" - default events
- "insert" - the default insert
- optional options
- "root" - root element to mount component to
- all components are expected to be pure, meaning that the output depends on the props and state only. the component won't be updated if none of these aspects are dynamic
- functional components are removed
- Compiler:
- Parser:
- will no longer deoptimize if an HTML element is custom (components are expected to be pure, so they are optimized depending on if the props and inserts are dynamic)
-
d50505e83619a25e85550731c203230de62bc99d: refactor: add note about parser stack for non void elements
-
8aa0f8fc9024cdcfb356dd3924bdc09abad778fd: fix: allow empty attributes (closes #157)
-
6f5acef24bfb5877bf7d22a98daa71f6bdd12fe7: add more details about the 'util' folder
-
8d1a65e9955c8f318c1d0b90add718799b43b7a2: fix: don't run browser support tests on PR's (fixes #156)
-
a19acffb50ceb96f47a0ea93e9debb5cd9bd24da: refactor: move hydration to mount
-
959830911b9b431cba797cc75ea7f279a89f5981: refactor: consistent naming when diffing props
-
bff7b0985fa883801250e6d2862390eb710ea694: fix: edge cases for diffing engine
- update DOM props and directives
- always diff children, even if innerHTML or textContent DOM property was set
-
342f08093be445def80882efd125fb75b9c570c4: feat: efficient component mounting (fixes #150)
- component constructor can take "events" to add before "init"
- "init" is called before "mounted"
- props, events, and inserts are available in "init"
-
7022c3effae25f7b5d01da4652cb9230c8913d57: update variable order in release script
-
37e696c4d773f9cdf01c6697a444816ba29a6085: refactor: beautiful changelog generator
-
71ee4fbc9ac261dedeff64a251491c4b331da3f0: refactor: add implementation details about parser
-
a902ea23b11e487e42220d6fdc088c197700eacf: refactor: compiler and generator
-
dba4241eacca54d66ac8cdb6005b13eaa42430e8: fix: make compiler output cleaner (#144)
- only concat when needed
- no inefficient checks for dynamic nodes, template compiler returns dynamic state
-
663709095bc4f315097cc5926b3b666f42807885: breaking: remove event modifiers
- simplifies "m-on"
- can easily be added in event listener code
- keeps core minimal
-
a83fd4e129bb7c51ca2e5ea646a59e6f07ad1e13: breaking: New Method API (fixes #141)
- methods are stored in "instance.methods" and are callable (the context is changed)
- methods are constants and cannot change
- "m-on" will optimize all method calls unless they pass a dynamic property as a parameter
- methods and data can have the same name, but it is considered a bad practice
-
cf276f7c0da2044cba5b63058914a9401183dc76: use es5 tests
-
4d10341cabe2c9a1d14c961da3a8bf3e63d78fae: make tests IE compatible
-
66f9d09f9b68b5023ad4ce077d7e762782088fcb: fix: correctly parse multiple void elements
- tags are now case-sensitive
-
a1a8994e5ada32451e014a54a9bd336e2c15c4bf: breaking: Rewrite Moon (fixes #127, fixes #132)
- compiler
- lexer
- rewritten
- ignores whitespace-only text nodes
- can handle any whitespace (#127)
- parser
- rewritten
- uses a stack to keep track of nodes
- doesn't warn about extra closing tags
- generator
- cleaner implementation
- cleaner specification for
state
and special directives
- template compiler
- rewritten
- uses a single pass and eats leading/trailing whitespace
- directives
- fix edge cases
- beautify code more
- global API
- remove "Moon.util.extend" (not used in core)
- make component creation faster
- instance methods
- event system
- refactor ".on"
- refactor ".emit"
- mount
- refactor
- increase performance by caching
- build
- removed "patch" in favor of "build"
- handles hydration, diffing, and replacing the root element
- observer
- refactor
- remove unused code
- remove unused methods
- computed properties
- simpler caching system
- when requested:
- if cache is cleared:
- captures dependencies for property
- any ".get" will add the property as a dependency of the key
- if not, use cached value
- any ".set" notification will clear the cache for a key if it is not already cleared
- methods
- DOM utilities
- "appendChild" and "replaceChild" accept a vnode instead of a node to check for components in an efficient way (#132, #120)
- "appendChild"
- if component is found, create a dummy node and mount it
- "replaceChild"
- if component is found, mount it on the replacing node (will diff itself)
- utilities
- virtual DOM
- refactor
- remove unused runtime utility
- change code style
- warn on missing directive
- remove TEXT_TYPE constant
- hydrate
- efficiently hydrate children
- diff
- use "dynamic" property to indicate deoptimization
- replace "isSVG" with "SVG" meta property
-
010a11b9372e7365e8d42cc78387a930ac6b5d16: fix: use 'meta.node' when removing an extra child when diffing (fixes #126)
-
39b654a50e9e9fd9128a1446a508f191ff383de4: breaking: remove 'instance.callMethod' in favor of 'instance.get(method)()'
- cleaner
m-on
code
- warnings when method is undefined in templates
-
f89d24e0701347e1b00ee14771b20296a981f711: fix: edge cases for mounting components (fixes #122, closes #120)
- appendChild
- if a component is present, it mounts the component onto a created DOM node with no event listeners or props (no call to 'createNode')
- if a component is not present, it will append a created node as usual
- replaceChild
- if a component is present, it will mount the component onto the node to be replaced, and the component's diff will take care of the rest
- if a component is not present, it will replace a child with a created node as usual
- tests
- add tests for append/replace component mounts
-
56d0bb4dbe23b29defaf13340317f56dd688b0c2: update tests to use m-bind
-
289a5321a6a72991db414245124469b60e0eea08: breaking: use 'bind' instead of 'model'
-
a67e761729db3900099ee57009b047d74aeaeb1b: breaking: use 'Moon.extend' for creating components
-
3fc782ce16f060c00b1fd048d2df0cad421fdbdd: perf: advanced compiler optimizations for special directives
- special directives do not deoptimize by default
- it is up to the special directive to decide
- this is made possible by the hydration engine, which handles the initial render regardless of optimization
compileTemplateExpression
returns a boolean showing if the template was static or dynamic
- deoptimization is only done if the element must be diffed every time (m-if, m-for, m-model)
- m-if, m-for, and m-model deoptimize
- m-on deoptimizes only if dynamic parameters are involved
- m-literal only deoptimizes if a dynamic property is being set
- add dbmon repaint rate
-
f3fa265b4a753abe6a95124408db173f280b2707: refactor: double quotes for strings, and single quotes for characters
-
d26dd245169511256c9992a71566ea723180ad12: fix: optimize on m-ifs next to each other
- they will both be replaced by text, not each other (like m-else, which needs to be deoptimized)
-
c23e57790cfcc1ea03accb80693fc189ff3c5087: refactor: remove unnecessary code (#117)
-
81fd585816ebe13a2499254e3bf3fac8438bbda8: refactor: remove unused variables and const for in
-
a28ac72dbf523383ec87b64dc8566e614c67124f: add tests for merging w/ existing events
-
5b24e1e23c1a9781977af52a21215a5caeae2fd2: fix: merge events for parent-child components correctly (#120)
-
5bc255b31fc2e4da7684020aa368730a87d22844: refactor: don't initialize counter
-
4a42985da8ee9e108f65d1b666347f19cf7cdd2d: breaking: remove support for custom keycodes
-
de6471e919d08f9f24f8d0fa5eb3a06bcfef4955: fix: optimization for m-if/m-else, implementation of m-for, add m-static, and introduce data storage for special directives
- m-if/m-else
- doesn't use a stack
- two m-ifs next to each other (seperated by text) are deoptimized, and so is any m-if/m-else pair
- an m-ifs seperated by an element are optimized
- works by setting a property in the data on the most outer deoptimized m-if/m-else, and re
setting the 'dynamic' property when done processing
- in case of two or more m-ifs, the last m-if will reset the 'dynamic' property, while all of them are deoptimized
- m-for
- doesn't use a static
- stores data in 'prop.data.forInfo'
- m-static
- used to manually override all deoptimizations for an element
- sets 'static' property of state
- resets 'static' property of state when most outer m-static is done processing (done by storing 'prop.data.staticSet')
- data storage for special directives
- introduced above, special directives can have a shared state throughout each state (beforeGenerate, duringPropGenerate, afterGenerate)
-
401fb4488eab9dc1856f165e4fba92f505741112: change wording
-
53881ab2f70b424573899bee8e2bf889763f1768: refactor: make parser conditions more specific, remove dynamic input tests for m-model (for now)
-
563313b441f1149726df8d3379343703f43946eb: refactor: rewrite m-model to work with new 'set' method
- if key is dynamic
- creates temporary 'modelValue' variable to hold value of base
- sets keypath of 'modelValue'
- calls 'set' on base and 'modelValue'
- if key is static
- calls 'set' on base and input value depending on input type
-
455a945b30882e0bb16c42ae0d6f2e5f4f0f39fa: refactor: refer to generation nodes as 'node' instead of 'vnode'
-
df11ccc72e7049069f610986fd76326846e5ab62: refactor: remove string conversion
-
9ae5922fa2e2a0aa4f47aeaf324bfe56aa3583b1: refactor: remove unused variable in 'm-if'
-
878b4baef3a90e05e8e1500d296433012c27b61c: feat: allow 'root' to be specified when creating a component constructor
- if specified, component will be mounted after init
- add tests
-
7966be9644855787fb50184bb3e36b8b652755ea: refactor: diff props
- only remove/not set props if they are 'false'
-
7364d5d4247e2aacac89001d127c806e0f9b58ed: refactor: remove shared state 'output' from template compiler
-
19360fe69f7c2aa46fdbcfdbddc421f0f32d9a6f: refactor: inline extractAttrs
-
4638a89c38c255d377e25287fb2a99e6a2df877a: fix: add tests for 'set' with object syntax
-
191b81d69e4272c4186dbcc062308a65746fd1e5: fix: warn when method has same key as a data property (fixes #115)
-
2a0f7cc96a66e987f832a0237efd143a02d31827: refactor: make error message for referencing undefined value more clear
-
02c7d2a004bce4747148b6873de1db4ddb37abc8: breaking: remove m-html in favor of m-literal:innerHTML.dom
- refactor setting DOM properties
-
3d668324082c48e852c0201814713ddc3f7a159f: refactor: generator and formalize directive spec
-
state has structure of:
{
index: 0, // index of current node being processed
dynamic: false, // value to override optimization
exclude: [], // global variables to exclude from generator
dependencies: [] // all state dependencies
}
-
use stack for m-for to track iteratable, aliases, and exclude
-
make "event" a global exclude
-
remove escaped double quotes
-
fef152501c082829c927733e0b02b3e71d238c0a: add information about new categories in CONTRIBUTING guide
-
6114798ea52eab816149bbda99d1925b348f9d18: update release script for docs and refactor categories
-
84234ee197e5b9ee85f3ffa5b587ae7ee474638e: temporarily remove model dynamic tests
-
d81083c0f1e667f903f6ad23bc4b7827d6c7c967: feat: allow objects in 'set' instead of keypaths
- shallow merge
- works with observer
- works with computed properties
-
dc2596f07ca07f65b4dad3ac722db0d1e90d9db9: fix: cache 'component'
-
a94c626958e660dc1efce6c7d3031493d01f8d88: fix: refactor virtual DOM engine and make creating components from instances simpler
- virtual DOM 'patch'
- replaces root element of when hydrating and diffing
- virtual DOM 'hydrate'
- no return value
- assume component creation
- doesn't handle 'null'
- DOM utilities
- 'replaceChild' and 'appendChild'
- correctly check for components
- instance 'destroy'
- correctly removes 'moon' from bound DOM node
-
e2f51665f82fea0aebc57056b09cd206fe935610: compile m-model correctly
-
15fccbec3c2399e6a896a9e7ea33e68038816bba: fix: refactor everything to declare variables in correct block scoping
-
aebc0e146068f491db958140268494b47208a91b: rename el to root for benchmarks (#109)
-
c9f837f644faed72177f50fd701168ee0559e3da: README: Fix capitalization for 'JavaScript' (#112)
-
585dbfb4ae2bb72fc86a41d707f88ddefa113e78: breaking: replace slots with insertion system
- component will render default insert
-
444e0093292758129ca2f35d34b07eed95dcd1fe: fix: warn on unknown directive
-
5639021ccb7107020a8a2722f3d48e58ae17edd6: fix: change shape of vnodes to be more memory efficient
- text nodes only have meta and value
- normal nodes don't have a value
- isSVG is 'undefined' or 1
-
86532b0108b41860d80729ae3464e221de45dbc4: breaking: rename 'el' to 'root' and remove 'props' in favor of 'options.props'
- more descriptive name
- no need for user to access props on instance
-
f62b63e676b68a159d25eb27cffc4456de6ac356: fix: remove double assignments
-
f6abebe687b09b5b4e4302e53d8a94491ca35c80: fix: optimization technique for m-if/m-else
- any m-if's with the same parent seperated by text (or nothing) will be deoptimized
- any m-else will be deoptimized
- any m-if's with the same parent seperated by an element will be optimized
-
500bfbe1e6ab337478d4833f2475e6f3cb3a1da4: fix: meta.shouldRender can be '1' or 'undefined'
- makes render functions much smaller
-
b6155824d1f1179b2edaf78f0cbeff60d33a79b9: feat: add 'm-else', and fix optimizer edge case
- two m-if's inside of the same element (next to each other or seperated by only text), or an m-else will be deoptimized as an element can replace another at anytime, and can sometimes be skipped
- an m-if by itself, or an m-if seperated by an element (other than text) will be optimized
- m-else will act as an 'else' statement for any previous 'm-if'. the only allowed seperator between any 'm-if' and 'm-else' is text (including whitespace and line breaks)
-
85008bf4d43a1802c16eec0b7824e733a437cbc4: clean up wording in readme
-
d01cc664a5318c7dd5b971160274ef2b7f6ea6ba: feat: add .dom modifier for m-literal to set a property on a DOM element instead of an attribute
-
cd105b9d7c08e681ecc7fda404f8c33c77538f5e: fix: call computed setter in right context
-
f53cb7b4d381ac7d8a77dea2433e39645746a1b5: breaking: remove '$' prefix from all properties
-
6cdbadf0888f21227284d08c588ed2c747d36c2c: fix: update username when referring to voke
-
23d2b399a432e53051dd8b956dfae573a8235650: fix: use block scoping
-
2ee78dc23c4dfbdc2f9b6cab7a2292ad971dfdd5: fix: cache options when rendering a functional component
-
c4aa2e838410f159d4f0dc1111de8400fb961e5d: fix: require data to be a function for functional components
-
eeb2d226a32ecfce2b4df16ba60ab9708da5ac2d: update browser support matrix
-
136a1db042a4c87d45067d07a027075e11bb91a3: update username for npm
-
856f90171bc76d5defc28bf08443085aa32b0eb5: update new username
-
8409b5e592dee7f4609227b5551e833594e61bea: fix: replace lookup and copy for a single lookup
-
1facdc16e4a5e5164021d53d47bdfb8893dce220: add svg compiler tests
-
25f32f3f34a9df571652fe17b626d4e068245dc9: add tests for deoptimizing on unknown html
-
651d29a393c7d2b77ba2d1d1338210f0db81dcb7: better minification
-
850095a757a5c6bec2f72293752a74c56a2a95bd: fix: set svg elements correctly and deoptimize on components
-
ae84cfbbeae3e37feb40e87cd1cf0c8366a0c57b: fix: add a new event handler when a new one is present when diffing event listeners
-
d845a6321f9c7293af64b641578f1c63fceae108: fix: call updated hook when updated, not when mounted
-
48c6b5b4312d8e911d6517302103e9e2c28ba1eb: fix: correctly exclude items from scope throughout compilation process
-
8fc8c8613d382031af530c2ede81aa98297557c9: fix: spaces > tabs
-
0afedf9f3493eab6195bb4b6142e75b781220006: fix: remove unused variables in lexer
-
a72ec6c1397bbdb71f90583065cc81b3b5d30c71: fix: remove unused variable when scanning template state until condition
-
5b5411f901cd4e140d7b7e41a9c5c56487bee346: fix: remove unused regular expressions
-
704f3850eebfa6d353683982ec7ad13b67052a90: fix: remove unused argument in notify
-
8637d66603395769782c2f775e9127896a0723b4: fix: correctly exclude aliases from scope in m-for
-
ed26a5b1cf813220dfed65473595fa10e8642db7: fix: exclude special custom parameters from scope (fixes #92)
-
afacfbfb575bfa16eb918109bf323d4cf0e5d492: fix: call updated hook when built (including mount), and remove destroyed state and replace with queue
-
404ea12e67aef08a5d7953659528c54908140973: fix formatting
-
7981cc2f016c7c075677f728fef76661f1a7f4cd: fix: assume attrs if special directive generates during prop generation
-
f4ba9eefe0af8a33346acf392cc95827d7819fd9: fix: avoid string conversion in dom props when using html directive
-
965c7e7767b3eb17af532c949e457a70011678bc: fix: remove isString param from template compiler
-
498efdeb398aee2f821322d1f0e4fa1a8394500e: fix: remove unused regex
-
290fc93f8f68a7df631e15cf65ad17178631557d: fix: add runtime helpers in HyperMoon (fixes #89)
-
98637209b8ac12d6c9ea28799e2e8e239ba9f35d: fix: fix typo in diffing when appending children
-
7f6168a08f44e1d07f6954e83a2f383a749c5f1a: perf: optimize adding children to the end of a list when diffing
-
030d44e8dafe546152f2ca059ab6931c48e35a45: perf: improve performance of removing children at the end of a list when diffing
-
5c66f8cc49cdbcd0d8871d9fe4cfa12b5eca7cf3: perf: optimize hydration to use less loops
-
e0690f4a85e29e296f5ec7c662482a2bd63e5490: perf: cache oldChildren when appending
-
75d8370238b1feca243e36f0f3c7ce910b88324e: fix return types for diff
-
f00bca3075ec019bad0f984ddab171eeafd2dbb6: fix: correctly update reference to children when appending items to the end of a list
-
b99f926c8fa7fea3198e8cddb467b015fd7b91fa: build
-
2597831a6de704bb322d8297893cdb29bcf2c067: fix: update children when adding items to end of a list when diffing
-
e94948f876d1abfbc69b36a055d83e0962ca619f: perf: improve hydration engine performance by adding fast cases
-
b9fc46b9f9a6179a0b37010359cc1b9a8ab8b254: perf: rewrite diffing engine
improve performance by diffing children faster, and improve performance when creating children by caching common values