Commit 5f60949c by Иван Кубота

working Slider example. Start test coverage. Subproperties deep setting…

working Slider example. Start test coverage. Subproperties deep setting implementation and customization possibility
parent d220008f
......@@ -2,10 +2,16 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="60f6b3df-8be9-486a-9e3c-d8ae43c3e79e" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/test/const1.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test/creatingEl.jsx" afterDir="false" />
<change afterPath="$PROJECT_DIR$/webpack.test.config.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/F.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/F.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/index.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/index.jsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/test/const1.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/test/out" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/webpack.config.js" beforeDir="false" afterPath="$PROJECT_DIR$/webpack.config.js" afterDir="false" />
</list>
<ignored path="$PROJECT_DIR$/.tmp/" />
<ignored path="$PROJECT_DIR$/temp/" />
......@@ -17,14 +23,14 @@
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.3691057">
<splitter split-orientation="horizontal" split-proportion="0.44885993">
<split-first>
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/index.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="340">
<caret line="20" column="83" selection-start-line="20" selection-start-column="83" selection-end-line="20" selection-end-column="83" />
<state relative-caret-position="687">
<caret line="115" lean-forward="true" selection-start-line="115" selection-end-line="115" />
<folding>
<element signature="e#0#36#0" expanded="true" />
</folding>
......@@ -33,28 +39,10 @@
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Reactive.js">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret column="15" selection-start-column="15" selection-end-column="15" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/preact.d.ts._">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="10676">
<caret line="628" column="19" selection-start-line="628" selection-start-column="12" selection-end-line="628" selection-end-column="19" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102">
<caret line="6" column="10" selection-start-line="6" selection-start-column="5" selection-end-line="6" selection-end-column="10" />
<state relative-caret-position="47">
<caret line="26" column="25" selection-start-line="26" selection-start-column="25" selection-end-line="26" selection-end-column="25" />
</state>
</provider>
</entry>
......@@ -85,8 +73,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/webpack.config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="476">
<caret line="28" column="2" selection-start-line="28" selection-start-column="2" selection-end-line="28" selection-end-column="2" />
<state relative-caret-position="153">
<caret line="9" column="37" selection-start-line="9" selection-start-column="37" selection-end-line="9" selection-end-column="37" />
</state>
</provider>
</entry>
......@@ -94,8 +82,26 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/tsconfig.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="7" column="20" selection-start-line="7" selection-start-column="20" selection-end-line="7" selection-end-column="20" />
<state relative-caret-position="102">
<caret line="6" column="18" selection-start-line="6" selection-start-column="15" selection-end-line="6" selection-end-column="18" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/webpack.test.config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="5" selection-start-line="5" selection-end-line="5" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/F.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="319">
<caret line="307" column="8" selection-start-line="307" selection-start-column="8" selection-end-line="307" selection-end-column="8" />
</state>
</provider>
</entry>
......@@ -118,13 +124,22 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/typings.json">
<provider selected="true" editor-type-id="text-editor">
<state>
<state relative-caret-position="34">
<caret line="2" column="19" selection-start-line="2" selection-start-column="19" selection-end-line="2" selection-end-column="19" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Reactive.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="153">
<caret line="9" column="58" selection-start-line="9" selection-start-column="58" selection-end-line="9" selection-end-column="58" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
......@@ -151,20 +166,47 @@
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/F.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="475">
<caret line="230" column="34" selection-start-line="230" selection-start-column="34" selection-end-line="230" selection-end-column="34" />
<state relative-caret-position="453">
<caret line="341" column="25" selection-start-line="341" selection-start-column="25" selection-end-line="341" selection-end-column="25" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/test/creatingEl.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="544">
<caret line="84" column="55" selection-start-line="84" selection-start-column="40" selection-end-line="84" selection-end-column="55" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/node_modules/simplest-dom/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="396">
<caret line="182" column="28" selection-start-line="182" selection-start-column="16" selection-end-line="182" selection-end-column="28" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/test/const1.js">
<entry file="file://$PROJECT_DIR$/dist/bundle.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17">
<caret line="1" column="26" selection-start-line="1" selection-start-column="26" selection-end-line="1" selection-end-column="26" />
<caret line="1" column="34" selection-start-line="1" selection-start-column="34" selection-end-line="1" selection-end-column="34" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/node_modules/mocha/lib/runnable.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="248">
<caret line="386" column="20" selection-start-line="386" selection-start-column="20" selection-end-line="386" selection-end-column="20" />
</state>
</provider>
</entry>
......@@ -176,8 +218,8 @@
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/Rjsx.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="947">
<caret line="57" selection-start-line="57" selection-end-line="58" />
<state relative-caret-position="663">
<caret line="82" column="26" selection-start-line="82" selection-start-column="26" selection-end-line="82" selection-end-column="26" />
</state>
</provider>
</entry>
......@@ -199,17 +241,6 @@
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>setters</find>
<find>el:</find>
<find>afterSetKey</find>
<find>Reactivity</find>
<find>value</find>
<find>IntrinsicElements</find>
<find>;</find>
<find>innerText</find>
<find>tree =</find>
<find>Agg</find>
<find>Element</find>
<find>padding</find>
<find>margin</find>
<find>onClick</find>
......@@ -226,10 +257,25 @@
<find>13322</find>
<find>add</find>
<find>TaskManager</find>
<find>setters</find>
<find>.on</find>
<find>renderTo</find>
<find>Text</find>
<find>getBoundingClientRect</find>
<find>addChild</find>
<find>styleSetters</find>
<find>HTMLElement</find>
<find>cm</find>
<find>set:</find>
<find>res</find>
<find>style</find>
<find>back</find>
<find>text</find>
</findStrings>
<replaceStrings>
<replace>| Reactivity;</replace>
<replace>Rjsx</replace>
<replace>cmp</replace>
</replaceStrings>
</component>
<component name="Git.Settings">
......@@ -253,16 +299,18 @@
<option value="$PROJECT_DIR$/src/lib.d.ts" />
<option value="$PROJECT_DIR$/typings.json" />
<option value="$PROJECT_DIR$/tsconfig.json" />
<option value="$PROJECT_DIR$/package.json" />
<option value="$PROJECT_DIR$/src/Rjsx.d.ts" />
<option value="$PROJECT_DIR$/src/Rjsx.ts" />
<option value="$PROJECT_DIR$/src/preact.d.ts" />
<option value="$PROJECT_DIR$/src/index.tsx" />
<option value="$PROJECT_DIR$/webpack.config.js" />
<option value="$PROJECT_DIR$/src/cmp/Button.tsx" />
<option value="$USER_HOME$/Downloads/Telegram Desktop/chart_data.json" />
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/test/const1.js" />
<option value="$PROJECT_DIR$/webpack.test.config.js" />
<option value="$PROJECT_DIR$/webpack.config.js" />
<option value="$PROJECT_DIR$/package.json" />
<option value="$PROJECT_DIR$/test/creatingEl.jsx" />
<option value="$PROJECT_DIR$/src/F.js" />
<option value="$PROJECT_DIR$/src/index.jsx" />
</list>
......@@ -290,17 +338,13 @@
<path>
<item name="reactive" type="b2602c69:ProjectViewProjectNode" />
<item name="reactive" type="462c0819:PsiDirectoryNode" />
<item name="build0" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="reactive" type="b2602c69:ProjectViewProjectNode" />
<item name="reactive" type="462c0819:PsiDirectoryNode" />
<item name="dist" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="reactive" type="b2602c69:ProjectViewProjectNode" />
<item name="reactive" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="Rjsx.ts" type="620a8d5e:NestingTreeNode" />
</path>
<path>
<item name="reactive" type="b2602c69:ProjectViewProjectNode" />
......@@ -316,7 +360,8 @@
<component name="PropertiesComponent">
<property name="DefaultHtmlFileTemplate" value="HTML File" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/test" />
<property name="nodejs.mocha.mocha_node_package_dir" value="$PROJECT_DIR$/node_modules/mocha" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="nodejs_package_manager_path" value="npm" />
......@@ -340,6 +385,44 @@
</list>
</option>
</component>
<component name="RunManager" selected="Mocha.C:\code\reactive\test\**\*.{js,jsx}">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" type="mocha-javascript-test-runner" nameIsGenerated="true">
<node-interpreter>project</node-interpreter>
<node-options />
<mocha-package>$PROJECT_DIR$/node_modules/mocha-webpack</mocha-package>
<working-directory>$PROJECT_DIR$/</working-directory>
<pass-parent-env>true</pass-parent-env>
<ui>tdd</ui>
<extra-mocha-options>--webpack-config ./webpack.test.config.js</extra-mocha-options>
<test-kind>PATTERN</test-kind>
<test-pattern>$PROJECT_DIR$/test/**/*.{js,jsx}</test-pattern>
<method v="2" />
</configuration>
<configuration name="reactive" type="mocha-javascript-test-runner" temporary="true" nameIsGenerated="true">
<node-interpreter>project</node-interpreter>
<node-options />
<mocha-package>$PROJECT_DIR$/node_modules/mocha</mocha-package>
<working-directory>$PROJECT_DIR$</working-directory>
<pass-parent-env>true</pass-parent-env>
<ui>bdd</ui>
<extra-mocha-options />
<test-kind>SUITE</test-kind>
<test-file>$PROJECT_DIR$/test/creatingEl.jsx</test-file>
<test-names>
<name value="reactive" />
</test-names>
<method v="2" />
</configuration>
<list>
<item itemvalue="Mocha.C:\code\reactive\test\**\*.{js,jsx}" />
<item itemvalue="Mocha.reactive" />
</list>
<recent_temporary>
<list>
<item itemvalue="Mocha.reactive" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
......@@ -362,33 +445,67 @@
<workItem from="1554982784870" duration="5733000" />
<workItem from="1556229860266" duration="3807000" />
<workItem from="1557233390052" duration="5206000" />
<workItem from="1557261512369" duration="8169000" />
<workItem from="1557261512369" duration="21515000" />
<workItem from="1558366647257" duration="9105000" />
<workItem from="1559230950782" duration="26084000" />
</task>
<servers />
</component>
<component name="TestHistory">
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 16m 34s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 17m 13s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 17m 58s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 19m 43s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 20m 15s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 20m 31s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 21m 58s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 22m 24s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 14h 22m 42s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
<history-entry file="C__code_reactive_test______{js,jsx} - 2019.06.01 at 15h 30m 27s.xml">
<configuration name="C:\code\reactive\test\**\*.{js,jsx}" configurationId="mocha-javascript-test-runner" />
</history-entry>
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="109493000" />
<option name="totallyTimeSpent" value="158028000" />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="3456" height="1416" extended-state="6" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.10181393" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.10181393" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info id="npm" order="3" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.23070927" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.3998441" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Version Control" order="8" />
<window_info anchor="bottom" id="Terminal" order="9" visible="true" weight="0.1979735" />
<window_info anchor="bottom" id="Terminal" order="9" weight="0.1979735" />
<window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
<window_info anchor="bottom" id="TypeScript" order="11" />
<window_info anchor="bottom" id="TypeScript" order="11" weight="0.32969603" />
<window_info anchor="right" id="Commander" order="0" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
......@@ -473,24 +590,17 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Reactive.js">
<entry file="file://$PROJECT_DIR$/out2">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret column="15" selection-start-column="15" selection-end-column="15" />
<state relative-caret-position="7599">
<caret line="447" column="69" lean-forward="true" selection-start-line="447" selection-start-column="69" selection-end-line="447" selection-end-column="69" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/preact.d.ts._">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="10676">
<caret line="628" column="19" selection-start-line="628" selection-start-column="12" selection-end-line="628" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102">
<caret line="6" column="10" selection-start-line="6" selection-start-column="5" selection-end-line="6" selection-end-column="10" />
<state relative-caret-position="9792">
<caret line="576" column="46" selection-start-line="576" selection-start-column="46" selection-end-line="576" selection-end-column="46" />
</state>
</provider>
</entry>
......@@ -508,41 +618,62 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/@babel/preset-react/lib/index.js">
<provider selected="true" editor-type-id="text-editor" />
<entry file="file://$PROJECT_DIR$/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="7" column="26" selection-start-line="7" selection-start-column="26" selection-end-line="7" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/webpack.config.js">
<entry file="file://$PROJECT_DIR$/typings.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="476">
<caret line="28" column="2" selection-start-line="28" selection-start-column="2" selection-end-line="28" selection-end-column="2" />
<state relative-caret-position="34">
<caret line="2" column="19" selection-start-line="2" selection-start-column="19" selection-end-line="2" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tsconfig.json">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="7" column="20" selection-start-line="7" selection-start-column="20" selection-end-line="7" selection-end-column="20" />
<state relative-caret-position="85">
<caret line="5" selection-start-line="5" selection-end-line="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/index.html">
<entry file="file://$PROJECT_DIR$/src/Rjsx.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="7" column="26" selection-start-line="7" selection-start-column="26" selection-end-line="7" selection-end-column="26" />
<state relative-caret-position="1853">
<caret line="109" column="21" selection-start-line="109" selection-start-column="21" selection-end-line="109" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/typings.json">
<entry file="file://$PROJECT_DIR$/test/out">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret line="2" column="19" selection-start-line="2" selection-start-column="19" selection-end-line="2" selection-end-column="19" />
<state relative-caret-position="409">
<caret line="25333" column="57" selection-start-line="25333" selection-start-column="57" selection-end-line="25333" selection-end-column="57" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<entry file="file://$PROJECT_DIR$/test/const1.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="5" selection-start-line="5" selection-end-line="5" />
<state relative-caret-position="17">
<caret line="1" column="26" selection-start-line="1" selection-start-column="26" selection-end-line="1" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Reactive.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="153">
<caret line="9" column="58" selection-start-line="9" selection-start-column="58" selection-end-line="9" selection-end-column="58" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/@babel/preset-react/lib/index.js">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/tsconfig.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102">
<caret line="6" column="18" selection-start-line="6" selection-start-column="15" selection-end-line="6" selection-end-column="18" />
</state>
</provider>
</entry>
......@@ -553,45 +684,66 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/out2">
<entry file="file://$PROJECT_DIR$/node_modules/mocha/lib/runnable.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="7599">
<caret line="447" column="69" lean-forward="true" selection-start-line="447" selection-start-column="69" selection-end-line="447" selection-end-column="69" />
<state relative-caret-position="248">
<caret line="386" column="20" selection-start-line="386" selection-start-column="20" selection-end-line="386" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Rjsx.d.ts">
<entry file="file://$PROJECT_DIR$/dist/bundle.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1853">
<caret line="109" column="21" selection-start-line="109" selection-start-column="21" selection-end-line="109" selection-end-column="21" />
<state relative-caret-position="17">
<caret line="1" column="34" selection-start-line="1" selection-start-column="34" selection-end-line="1" selection-end-column="34" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/out">
<entry file="file://$PROJECT_DIR$/webpack.test.config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="409">
<caret line="25333" column="57" selection-start-line="25333" selection-start-column="57" selection-end-line="25333" selection-end-column="57" />
<state relative-caret-position="85">
<caret line="5" selection-start-line="5" selection-end-line="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/const1.js">
<entry file="file://$PROJECT_DIR$/webpack.config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17">
<caret line="1" column="26" selection-start-line="1" selection-start-column="26" selection-end-line="1" selection-end-column="26" />
<state relative-caret-position="153">
<caret line="9" column="37" selection-start-line="9" selection-start-column="37" selection-end-line="9" selection-end-column="37" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="47">
<caret line="26" column="25" selection-start-line="26" selection-start-column="25" selection-end-line="26" selection-end-column="25" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/simplest-dom/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="396">
<caret line="182" column="28" selection-start-line="182" selection-start-column="16" selection-end-line="182" selection-end-column="28" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/creatingEl.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="544">
<caret line="84" column="55" selection-start-line="84" selection-start-column="40" selection-end-line="84" selection-end-column="55" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/F.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="475">
<caret line="230" column="34" selection-start-line="230" selection-start-column="34" selection-end-line="230" selection-end-column="34" />
<state relative-caret-position="319">
<caret line="307" column="8" selection-start-line="307" selection-start-column="8" selection-end-line="307" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/index.jsx">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="340">
<caret line="20" column="83" selection-start-line="20" selection-start-column="83" selection-end-line="20" selection-end-column="83" />
<state relative-caret-position="687">
<caret line="115" lean-forward="true" selection-start-line="115" selection-end-line="115" />
<folding>
<element signature="e#0#36#0" expanded="true" />
</folding>
......
......@@ -995,6 +995,28 @@
"@babel/plugin-transform-typescript": "7.3.2"
}
},
"@babel/register": {
"version": "7.4.4",
"resolved": "https://registry.npmjs.org/@babel/register/-/register-7.4.4.tgz",
"integrity": "sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==",
"dev": true,
"requires": {
"core-js": "3.1.3",
"find-cache-dir": "2.0.0",
"lodash": "4.17.11",
"mkdirp": "0.5.1",
"pirates": "4.0.1",
"source-map-support": "0.5.10"
},
"dependencies": {
"core-js": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.3.tgz",
"integrity": "sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA==",
"dev": true
}
}
},
"@babel/template": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
......@@ -1353,6 +1375,15 @@
"integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
"dev": true
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "1.0.3"
}
},
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
......@@ -1435,6 +1466,12 @@
}
}
},
"assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
"assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
......@@ -2425,6 +2462,12 @@
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
"dev": true
},
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
......@@ -2598,6 +2641,20 @@
"integrity": "sha512-oXB23ImDJOgQpGjRv1tCtzAvJr4/OvrHi5SO2vUgB0g0xpdZZoA/BxfImiWfdwoYdUTtQrPsXsvYU/dmCSM8gg==",
"dev": true
},
"chai": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
"dev": true,
"requires": {
"assertion-error": "1.1.0",
"check-error": "1.0.2",
"deep-eql": "3.0.1",
"get-func-name": "2.0.0",
"pathval": "1.1.0",
"type-detect": "4.0.8"
}
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
......@@ -2609,6 +2666,12 @@
"supports-color": "5.5.0"
}
},
"check-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
"dev": true
},
"chokidar": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz",
......@@ -2967,6 +3030,15 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
"deep-eql": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
},
"deep-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
......@@ -3090,6 +3162,12 @@
"integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
"dev": true
},
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
......@@ -3101,6 +3179,15 @@
"randombytes": "2.1.0"
}
},
"dir-glob": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
"integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
"dev": true,
"requires": {
"path-type": "3.0.0"
}
},
"dns-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
......@@ -3171,6 +3258,12 @@
"minimalistic-crypto-utils": "1.0.1"
}
},
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
"dev": true
},
"emojis-list": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
......@@ -3259,6 +3352,12 @@
"estraverse": "4.2.0"
}
},
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
"esrecurse": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
......@@ -3616,6 +3715,23 @@
}
}
},
"flat": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
"integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
"dev": true,
"requires": {
"is-buffer": "2.0.3"
},
"dependencies": {
"is-buffer": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
"integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
"dev": true
}
}
},
"flush-write-stream": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
......@@ -4248,6 +4364,12 @@
"integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
"dev": true
},
"get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
......@@ -4355,6 +4477,12 @@
"integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=",
"dev": true
},
"growl": {
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
"handle-thing": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
......@@ -4451,6 +4579,12 @@
"minimalistic-assert": "1.0.1"
}
},
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
......@@ -4573,6 +4707,12 @@
"integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
"dev": true
},
"ignore": {
"version": "3.3.10",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
"dev": true
},
"import-local": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
......@@ -4915,6 +5055,16 @@
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "1.0.10",
"esprima": "4.0.1"
}
},
"jsesc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
......@@ -5002,6 +5152,15 @@
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
"dev": true
},
"log-symbols": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
"integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
"dev": true,
"requires": {
"chalk": "2.4.2"
}
},
"loglevel": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
......@@ -5256,6 +5415,347 @@
}
}
},
"mocha": {
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz",
"integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==",
"dev": true,
"requires": {
"ansi-colors": "3.2.3",
"browser-stdout": "1.3.1",
"debug": "3.2.6",
"diff": "3.5.0",
"escape-string-regexp": "1.0.5",
"find-up": "3.0.0",
"glob": "7.1.3",
"growl": "1.10.5",
"he": "1.2.0",
"js-yaml": "3.13.1",
"log-symbols": "2.2.0",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"ms": "2.1.1",
"node-environment-flags": "1.0.5",
"object.assign": "4.1.0",
"strip-json-comments": "2.0.1",
"supports-color": "6.0.0",
"which": "1.3.1",
"wide-align": "1.1.3",
"yargs": "13.2.2",
"yargs-parser": "13.0.0",
"yargs-unparser": "1.5.0"
},
"dependencies": {
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
"ms": "2.1.1"
}
},
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
},
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
"emoji-regex": "7.0.3",
"is-fullwidth-code-point": "2.0.0",
"strip-ansi": "5.2.0"
}
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
"ansi-regex": "4.1.0"
}
},
"supports-color": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
"integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
"dev": true,
"requires": {
"has-flag": "3.0.0"
}
},
"yargs": {
"version": "13.2.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz",
"integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==",
"dev": true,
"requires": {
"cliui": "4.1.0",
"find-up": "3.0.0",
"get-caller-file": "2.0.5",
"os-locale": "3.1.0",
"require-directory": "2.1.1",
"require-main-filename": "2.0.0",
"set-blocking": "2.0.0",
"string-width": "3.1.0",
"which-module": "2.0.0",
"y18n": "4.0.0",
"yargs-parser": "13.0.0"
}
},
"yargs-parser": {
"version": "13.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz",
"integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==",
"dev": true,
"requires": {
"camelcase": "5.0.0",
"decamelize": "1.2.0"
}
}
}
},
"mocha-webpack": {
"version": "2.0.0-beta.0",
"resolved": "https://registry.npmjs.org/mocha-webpack/-/mocha-webpack-2.0.0-beta.0.tgz",
"integrity": "sha512-2ezbW0h5cYWr874F/hzytQCqINxk+GVelMY4xWTSHwwH1LrPAOzjlUljZ+/PhpaP6QeqYbL5x5vK/bnaXqkfEw==",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"chalk": "2.4.2",
"chokidar": "2.1.2",
"glob-parent": "3.1.0",
"globby": "7.1.1",
"interpret": "1.2.0",
"is-glob": "4.0.0",
"loader-utils": "1.2.3",
"lodash": "4.17.11",
"memory-fs": "0.4.1",
"nodent-runtime": "3.2.1",
"normalize-path": "2.1.1",
"progress": "2.0.3",
"source-map-support": "0.5.10",
"strip-ansi": "4.0.0",
"toposort": "1.0.7",
"yargs": "11.1.0"
},
"dependencies": {
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
},
"cross-spawn": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"dev": true,
"requires": {
"lru-cache": "4.1.5",
"shebang-command": "1.2.0",
"which": "1.3.1"
}
},
"execa": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
"integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
"dev": true,
"requires": {
"cross-spawn": "5.1.0",
"get-stream": "3.0.0",
"is-stream": "1.1.0",
"npm-run-path": "2.0.2",
"p-finally": "1.0.0",
"signal-exit": "3.0.2",
"strip-eof": "1.0.0"
}
},
"find-up": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
"locate-path": "2.0.0"
}
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
"dev": true,
"requires": {
"array-union": "1.0.2",
"dir-glob": "2.2.2",
"glob": "7.1.3",
"ignore": "3.3.10",
"pify": "3.0.0",
"slash": "1.0.0"
}
},
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
"dev": true
},
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
"dev": true,
"requires": {
"invert-kv": "1.0.0"
}
},
"locate-path": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
"p-locate": "2.0.0",
"path-exists": "3.0.0"
}
},
"lru-cache": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
"requires": {
"pseudomap": "1.0.2",
"yallist": "2.1.2"
}
},
"mem": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
"integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
"dev": true,
"requires": {
"mimic-fn": "1.2.0"
}
},
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"requires": {
"remove-trailing-separator": "1.1.0"
}
},
"os-locale": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
"integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
"dev": true,
"requires": {
"execa": "0.7.0",
"lcid": "1.0.0",
"mem": "1.1.0"
}
},
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
"requires": {
"p-try": "1.0.0"
}
},
"p-locate": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
"p-limit": "1.3.0"
}
},
"p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
},
"y18n": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
"dev": true
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
},
"yargs": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
"integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
"dev": true,
"requires": {
"cliui": "4.1.0",
"decamelize": "1.2.0",
"find-up": "2.1.0",
"get-caller-file": "1.0.3",
"os-locale": "2.1.0",
"require-directory": "2.1.1",
"require-main-filename": "1.0.1",
"set-blocking": "2.0.0",
"string-width": "2.1.1",
"which-module": "2.0.0",
"y18n": "3.2.1",
"yargs-parser": "9.0.2"
}
},
"yargs-parser": {
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
"integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
"dev": true,
"requires": {
"camelcase": "4.1.0"
}
}
}
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
......@@ -5336,6 +5836,24 @@
"integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
"dev": true
},
"node-environment-flags": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
"integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
"dev": true,
"requires": {
"object.getownpropertydescriptors": "2.0.3",
"semver": "5.7.0"
},
"dependencies": {
"semver": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
"dev": true
}
}
},
"node-forge": {
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
......@@ -5381,6 +5899,12 @@
}
}
},
"node-modules-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
"integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
"dev": true
},
"node-releases": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.8.tgz",
......@@ -5390,6 +5914,12 @@
"semver": "5.6.0"
}
},
"nodent-runtime": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/nodent-runtime/-/nodent-runtime-3.2.1.tgz",
"integrity": "sha512-7Ws63oC+215smeKJQCxzrK21VFVlCFBkwl0MOObt0HOpVQXs3u483sAmtkF33nNqZ5rSOQjB76fgyPBmAUrtCA==",
"dev": true
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
......@@ -5463,6 +5993,18 @@
"isobject": "3.0.1"
}
},
"object.assign": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
"dev": true,
"requires": {
"define-properties": "1.1.3",
"function-bind": "1.1.1",
"has-symbols": "1.0.0",
"object-keys": "1.1.0"
}
},
"object.getownpropertydescriptors": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
......@@ -5704,6 +6246,21 @@
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
"dev": true
},
"path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
"requires": {
"pify": "3.0.0"
}
},
"pathval": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
"dev": true
},
"pbkdf2": {
"version": "3.0.17",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
......@@ -5738,6 +6295,15 @@
"pinkie": "2.0.4"
}
},
"pirates": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
"integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
"dev": true,
"requires": {
"node-modules-regexp": "1.0.0"
}
},
"pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
......@@ -5782,6 +6348,12 @@
"integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=",
"dev": true
},
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
"promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
......@@ -5804,6 +6376,12 @@
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"dev": true
},
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
"public-encrypt": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
......@@ -6324,6 +6902,11 @@
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
"simplest-dom": {
"version": "0.0.19",
"resolved": "https://registry.npmjs.org/simplest-dom/-/simplest-dom-0.0.19.tgz",
"integrity": "sha512-QqFNr+dLrz7wQ29dS1ru7FbSEeo2O13edjDCH/aRjMTNzRDDOUWFK85WG8BbUsYDuUemLNJpggjAttS/eyJUVg=="
},
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
......@@ -6638,6 +7221,12 @@
"extend-shallow": "3.0.2"
}
},
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
"ssri": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
......@@ -6747,6 +7336,12 @@
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
......@@ -6884,6 +7479,12 @@
"repeat-string": "1.6.1"
}
},
"toposort": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
"integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
"dev": true
},
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
......@@ -6902,6 +7503,12 @@
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true
},
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
"type-is": {
"version": "1.6.16",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
......@@ -7437,6 +8044,15 @@
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"requires": {
"string-width": "2.1.1"
}
},
"worker-farm": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
......@@ -7552,6 +8168,17 @@
"camelcase": "5.0.0",
"decamelize": "1.2.0"
}
},
"yargs-unparser": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz",
"integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==",
"dev": true,
"requires": {
"flat": "4.1.0",
"lodash": "4.17.11",
"yargs": "12.0.5"
}
}
}
}
......@@ -16,12 +16,21 @@
"pragma": "h"
}
],
["@babel/typescript", { "jsxPragma": "h" }]
[
"@babel/typescript",
{
"jsxPragma": "h"
}
]
],
"plugins": [
"@babel/plugin-proposal-class-properties",
["transform-react-jsx", { "pragma": "h" }]
[
"transform-react-jsx",
{
"pragma": "h"
}
]
]
},
"keywords": [],
......@@ -38,12 +47,19 @@
"babel-preset-env": "^1.7.0",
"babel-preset-preact": "^1.1.0",
"babel-preset-react": "^6.24.1",
"mocha": "^6.1.4",
"mocha-webpack": "^2.0.0-beta.0",
"source-map-loader": "^0.2.4",
"typescript": "^3.3.3333",
"webpack": "^4.29.6",
"webpack-cli": "^3.2.3",
"webpack-dev-server": "^3.2.1"
"webpack-dev-server": "^3.2.1",
"@babel/register": "^7.4.4",
"chai": "^4.2.0"
},
"types": "src/Rjsx.d.ts",
"typings": "./src/Rjsx.d.ts"
"typings": "./src/Rjsx.d.ts",
"dependencies": {
"simplest-dom": "0.0.19"
}
}
import {PropertySetterInterface, PropSettersInterface} from "./Rjsx";
const byPass = a => a;
const emptyFn = ()=>void 0;
export const Reactivity = function(args) {
this.args = args;
......@@ -19,11 +20,15 @@ Reactivity.prototype = {
};
let jobSwap = [];
const Task = function(fn, scope) {
this.fn = fn;
this.scope = scope;
};
export const TaskManager = {
jobs: [],
active: false,
add: function(task) {
TaskManager.jobs.push(task);
add: function(taskFn, scope) {
TaskManager.jobs.push(new Task(taskFn, scope));
if(!TaskManager.active) {
TaskManager.active = true;
requestAnimationFrame(TaskManager.work);
......@@ -36,8 +41,10 @@ export const TaskManager = {
jobSwap = jobs;
TaskManager.active = false;
for (let i = 0, _i = jobs.length; i < _i; i++) {
jobs[i]();
let i, _i, job;
for (i = 0, _i = jobs.length; i < _i; i++) {
job = jobs[i];
job.fn.call(job.scope);
}
}
};
......@@ -99,7 +106,7 @@ Reactive.prototype = {
}
},
on: function (key, fn) {
sub: function (key, fn) {
let FN, obj;// TODO unAny
if (arguments.length === 1) {
obj = {
......@@ -118,6 +125,17 @@ Reactive.prototype = {
return obj;
},
get: function(key) {
let ptr = this.state,
tokens = key.split('.'),
i = 0, _i = tokens.length;
for(;i<_i;i++){
ptr = ptr[tokens[i]];
if(ptr === void 0)
return;
}
return ptr;
},
set: function (obj, statePtr, settersPtr) {
let state, setters, key;
......@@ -145,21 +163,13 @@ Reactive.prototype = {
const theKey = key[keyCursor];
let lastVal = state[theKey];
if(key.length>keyCursor+1){
// Deeper
if(typeof state[theKey] !== 'object'){
state[theKey] = lastVal = {};
}
return this._setKey(key, keyCursor + 1, val, lastVal, setters[theKey] || {});
}
const isObjectVal = typeof val === 'object';
if (lastVal === val && !isObjectVal){
return null;
}
if (val instanceof Reactivity) {
val.scope = this;
val.key = key;
......@@ -167,15 +177,45 @@ Reactive.prototype = {
return true;
}
let keyInSetters = theKey in setters, setterIsFn = false;
if(keyInSetters){
setterIsFn = typeof setters[theKey] === 'function';
}
if(key.length>keyCursor+1){
// Deeper
if(typeof state[theKey] !== 'object'){
state[theKey] = lastVal = {};
}
if (!(keyInSetters) || !(setterIsFn)){
return this._setKey( key, keyCursor + 1, val, lastVal, setters[ theKey ] || {} );
}else if(setterIsFn){
let i, _i,
newVal = {},
newValPtr = newVal,
subKey;
for(i = 1, _i = key.length-1; i < _i; i++){
subKey = key[i];
newValPtr[subKey] = {};
}
newValPtr[key[i]] = val;
val = newVal;
}
}
val = this.beforeSetKey(theKey, val, lastVal);
state[theKey] = val;
if (theKey in setters) {
if(typeof setters[theKey] === 'function'){
setters[ theKey ].call( this, this, val, lastVal );
if (keyInSetters) {
if(setterIsFn){
let setterResult = setters[ theKey ].call( this, this, val, lastVal, theKey, state );
if(setterResult !== false){
state[ theKey ] = val;
}
}else{
state[theKey] = val;
if(isObjectVal){
if(typeof lastVal !== 'object'){
state[theKey] = lastVal = {};
......@@ -189,6 +229,7 @@ Reactive.prototype = {
}
}
} else {
state[theKey] = val;
this.afterSetKey(theKey, val, lastVal);
}
......@@ -213,23 +254,88 @@ export const Component = function(tagName){
if(tagName in Predefined){
this.def = Predefined[tagName];
}
this._laters = {};
};
const NumberIsPx = function(_, style, prop, val) {
//console.log(prop, val)
if(typeof val === 'number'){
style[prop] = val +'px';
}else{
style[prop] = val;
}
};
const emptyObj = {};
const styleSetters = {
width: NumberIsPx,
height: NumberIsPx,
left: NumberIsPx,
top: NumberIsPx,
bottom: NumberIsPx,
right: NumberIsPx
};
Component.prototype = new Reactive();
Object.assign(Component.prototype, {
_laterTrigger: false,
later: function(name, fn) {
if(!(name in this._laters)){
this._laters[name] = fn;
}
if(!this._laterTrigger){
TaskManager.add(this.laterProcessor, this);
this._laterTrigger = true;
}
},
laterProcessor: function() {
let taskName, _laters = this._laters;
this._laterTrigger = false;
this._laters = {};
for(taskName in _laters){
_laters[taskName].call(this)
}
},
nodeName: null,
el: null,
def: {},
children: null,
tree: null,
inDOM: false,
setters: {
dangerouslySetInnerHTML: (_, htmlText) => _.el.innerHTML = htmlText,
text: (_, val) => _.el.innerText = val,
style: (_, val)=>{
var style = _.el.style;
style: (_, val, lastVal, theKey, state)=>{
if(state.style === void 0){
state.style = {};
}
var style = _.el.style,
lastStyle = lastVal || emptyObj;
for(var i in val){
style[i] = val[i];
//console.log(i, val[i])
if(val[i] instanceof Reactivity){
val[i].scope = _;
val[i].key = ['style', i];
val[i].emit();
continue;
}
if(lastStyle[i] !== val[i]){
state.style[i] = val[i];
if( i in styleSetters ){
styleSetters[ i ].call( _, _, style, i, val[ i ] )
}else{
style[ i ] = val[ i ];
}
}
}
// manual assign
return false;
}
},
......@@ -245,9 +351,35 @@ Object.assign(Component.prototype, {
renderTo: function (where) {
where.appendChild(this.el);
},
mount: function(el) {
this.renderTo(el);
this.inDOM = true;
this._updateChildrenSize();
window.addEventListener('resize', ()=>{
this.later('resize', this._updateChildrenSize);
});
},
_updateChildrenSize: function() {
if(this.inDOM){
for( let i = 0, _i = this.children.length; i < _i; i++ ){
const child = this.children[ i ];
child._updateSize();
}
}
},
addChild: function (child) {
child.renderTo(this.el);
this.children.push(child);
if(this.inDOM){
child._updateSize();
}
},
_updateSize: function() {
const rect = this.getBoundingClientRect();
if( rect ){
this.set( { width: rect.width, height: rect.height } );
}
},
beforeSetKey: function (key, val, lastVal) {
if (key.substr(0, 2) === 'on') {
......@@ -263,12 +395,13 @@ Object.assign(Component.prototype, {
afterSetKey: function (key, val, lastVal) {
if (this.el) {
if (key.substr(0, 2) === 'on') {
//console.log(key)
const eventName = key.toLowerCase().substr(2);
if (lastVal) {
this.el.removeEventListener(eventName, lastVal);
this.un(eventName, lastVal);
}
this.on(eventName, val);
this.el.addEventListener(eventName, val);
} else {
//@ts-ignore
this.el[key] = val;
......@@ -279,21 +412,64 @@ Object.assign(Component.prototype, {
}
}
}
},
getBoundingClientRect: function() {
return this.el.getBoundingClientRect();
},
on: function(eventName, fn) {
this.el.addEventListener(eventName, fn);
},
un: function(eventName, fn) {
this.el.removeEventListener(eventName, fn);
},
once: function(eventName, fn) {
const wrap = () => {
fn.apply(this, arguments);
this.un(eventName, wrap);
};
this.on(eventName, wrap);
}
});
Component._morphFnsSugar = function(cfg) {
const res = {};
let key, tokens, i, _i;
for(key in cfg){
if(key.indexOf(',')>-1){
tokens = key.split(',');
for( i = 0, _i = tokens.length; i < _i; i++){
res[tokens[i]] = cfg[key]
}
}else{
res[key] = cfg[key];
}
}
return res;
};
Component.extend = function(name, cfg) {
const ctor = cfg.ctor || function() {
Component.call(this);
};
ctor.prototype = new Component();
const setters = Object.assign({}, ctor.prototype.setters, cfg.setters);
const setters = Object.assign(
{},
ctor.prototype.setters,
Component._morphFnsSugar(cfg.setters)
);
ctor.prototype.type = name;
Object.assign(ctor.prototype, cfg);
ctor.prototype.setters = setters;
ctor.extend = Component.extend;
return ctor;
};
export const TextNode = Component.extend('TextNode', {
setters: {
value: (_, val)=>_.el.textContent = val
......@@ -304,8 +480,15 @@ export const TextNode = Component.extend('TextNode', {
},
addChild: function (child) {
throw new Error('No children in text node');
}
},
afterSetKey: emptyFn,
getBoundingClientRect: ()=> null
});
const doc = new Component();
if(typeof document !== 'undefined'){
doc.el = document;
}
Component.prototype.doc = doc;
export const h = function(ctor, props){
let obj;
......
......@@ -11,22 +11,21 @@ class Item extends Component {
return <div>
{this.checkbox = <input disabled={false} type="checkbox"/>}<br/>
Title: <input value={R(()=>checkbox3.on('checked'))}/><br/>
Title: <input value={R(()=>checkbox3.sub('checked'))}/><br/>
{this.checkbox2 = <input type="checkbox"/>}<br/>
{checkbox3 = <input type="checkbox" checked={R(
this.checkbox2.on('checked'),
this.checkbox.on('checked'),
this.checkbox2.sub('checked'),
this.checkbox.sub('checked'),
(v1,v2)=>!!(v1^v2)
)}/>}<br/>
{<input type="checkbox" id="c4" checked={R(checkbox3.on('checked'))}/>}<br/><br/><br/><br/>
{<input type="checkbox" id="c4" checked={R(checkbox3.sub('checked'))}/>}<br/><br/><br/><br/>
</div>;
}
}
let but = <i text={2}>1</i>;
class UIComponent extends Component {
def = {
const UIComponent = Component.extend('UIComponent', {
def: {
disabled: false,
hidden: false,
label: {
......@@ -41,54 +40,109 @@ class UIComponent extends Component {
size: 'normal',
margin: {top: '16px'}
}
};
setters = {
hidden: (_, val) => _.el.style.display = val ? 'block' : 'none',
},
setters: {
hidden: (_, val) => _.el.style.display = val === false ? 'block' : 'none',
style: (_, val)=>{
}
}
}
});
class Check extends UIComponent {
setters = {
const Check = UIComponent.extend('Check', {
setters: {
value: (_, val)=>{
_.check.el.checked = val
},
label: {
text: (_, val)=>_.label.el.innerText = val
}
};
getters = {
},
getters: {
value: (_, val)=>_.check.el.checked
};
},
render(){
this.check = <input type="checkbox"/>;
this.set({value: R(this.check.on('checked'))})
this.set({value: R(this.check.sub('checked'))})
this.check.on('click', ()=>{console.log('lalka')} );
this.label = <span>456</span>;
return <label>{this.check}{this.label}</label>
}
}
});
const Slider = UIComponent.extend('Slider', {
def: {
from: 0,
to: 100,
step: 1,
value: 0,
sliderWidth: 10,
background: 'red'
},
recalc: function() {
if(this.state.value<this.state.from){
return this.set({value: this.state.from});
}
if(this.state.value>this.state.to){
return this.set({value: this.state.to});
}
class Slider extends UIComponent {
var delta = this.state.to - this.state.from;
this.mover.set({
style: {
left: (this.state.value-this.state.from)/delta*(this.state.width-this.state.sliderWidth)
}
});
},
setters: {
'from,to,step,value,width': (_)=>{
_.later('recalc', _.recalc);
}
},
render(){
return <div class="slider" style={{background: 'red'}}>
let sliderRect;
const moveFn = (e)=>{
const newRawVal = Math.max(0, Math.min(1,(e.clientX-sliderRect.left)/(sliderRect.width))),
delta = this.state.to - this.state.from,
newRangedVal = newRawVal*delta+this.state.from,
step = this.state.step,
newRoundedVal = Math.round(newRangedVal/step)*step;
this.set({value: newRoundedVal});
};
this.mover = <div
style={{cursor: 'pointer', width: 10, height: 10, border: '3px solid #fff', position: 'absolute', boxSizing: 'border-box'}}
onMouseDown={(e)=>{
console.log('down');
sliderRect = this.getBoundingClientRect();
this.doc.on('mousemove', moveFn);
this.doc.once('mouseup', ()=>{
this.doc.un('mousemove', moveFn);
});
this.set({width: sliderRect.width});
e.preventDefault();
}}
/>;
//console.log()
return <div class="slider" style={{background: R(this.sub('background')), position: 'relative', height: 10}}>
{this.mover}
</div>;
}
}
});
//
let chhh = <Check value={false} label={{text: R(()=>i.on('text'))}}/>;
let chhh = <Check value={false} label={{text: R(()=>i.sub('text'))}}/>;
console.log(chhh);
let slider1 = <Slider from={-10} to={100} step={1}/>;
let RS, GS, BS;
<div className='wrapper'>
<Check value={true} label={{text: 'Ti pidor'}} hidden={R(()=>chhh.on('value'))}/>
<Check value={true} label={{text: 'Ti pidor'}} hidden={R(()=>chhh.sub('value'))}/>
{chhh}
<Check value={R(()=>chhh.on('value'))}/>
<Check value={R(()=>chhh.sub('value'))}/>
{item = <Item/>}
{btn = <Button onClick={function(e,b,c){
item.checkbox.set({checked: !item.checkbox.state.checked})
......@@ -96,8 +150,57 @@ console.log(chhh);
<Item/>
<Item />
{but}
<Slider/>
</div>.renderTo(document.body);
{slider1}
<div>
<div>from: <b text={R(()=>slider1.sub('from'))}/></div>
<div>to: <b text={R(()=>slider1.sub('to'))}/></div>
<div>value: <b text={R(()=>slider1.sub('value'))}/></div>
<div>step: <b text={R(()=>slider1.sub('step'))}/></div>
</div>
{RS = <Slider from={0} to={255} step={1} value={123} background={R(
()=>RS.sub('value'),
(r)=>'rgba('+[r,0,0,1]+')'
)}/>}
{GS = <Slider from={0} to={255} step={1} value={123} background={R(
()=>GS.sub('value'),
(g)=>'rgba('+[0,g,0,1]+')'
)}/>}
{BS = <Slider from={0} to={255} step={1} value={123} background={R(
()=>BS.sub('value'),
(b)=>'rgba('+[0,0,b,1]+')'
)}/>}
<div style={{
width: 300,
height: 300,
padding: '30px',
position: 'absolute',
background: R(
()=>RS.sub('value'),
()=>GS.sub('value'),
()=>BS.sub('value'),
(r,g,b)=>'rgba('+[r,g,b,1]+')'
),
color: R(
()=>RS.sub('value'),
()=>GS.sub('value'),
()=>BS.sub('value'),
(r,g,b)=>'rgba('+[256-r,(256-r+g)%256,b,1]+')'
)
}}
text={R(
()=>RS.sub('value'),
()=>GS.sub('value'),
()=>BS.sub('value'),
(r,g,b)=>
`R: ${r}
G: ${g}
B: ${b}`
)}
/>
</div>.mount(document.body);
let counter = 0;
setInterval(()=>{
......@@ -110,7 +213,7 @@ setInterval(()=>{
setTimeout(()=>{
//debugger;
but.set({
text: R(but.on('text'), (v1)=>{
text: R(but.sub('text'), (v1)=>{
return (v1-0)+148
})
});
......
var x;
for(var i = 0; i < 0x13322; i++){
x+=i;
}
void 0;
\ No newline at end of file
import {assert} from 'chai';
//import {describe, it} from 'mocha';
import dom from 'simplest-dom';
global.document = new dom();
let animationFnList = [];
global.requestAnimationFrame = function(fn) {
animationFnList.push(fn);
};
const animate = function() {
const list = animationFnList;
animationFnList = [];
list.forEach(function(fn) {
fn();
});
};
import {h, R, Component} from '../src/F';
describe('creating element', function() {
it('should create element', function() {
let div = <div/>;
assert.equal(div.el.nodeName, 'div', 'create correct element');
});
it('should create nested elements', function() {
let div = <div><b/></div>;
assert.equal(div.el.nodeName, 'div', 'create correct element');
assert.equal(div.el.childNodes[0].nodeName, 'b', 'create correct child element');
});
it('should create and compose element with cls and content', function() {
let div = <div class="cls1">abc</div>;
assert.equal(div.el.outerHTML, '<div class="cls1">abc</div>', 'create correct element');
});
});
describe('reactive', function() {
it('should update dependency', function() {
let div1 = <div n="1" a={3} b={4}/>
let div = <div
n={R(div1.sub('n'))}
m={R(div1.sub('a'),div1.sub('b'), (a,b)=>a*b)}
/>;
assert.equal(div1.state.n, '1', 'setted correctly');
assert.equal(div.state.n, void 0, 'before property update');
assert.equal(div.state.m, void 0, 'before property update');
animate();
assert.equal(div.state.n, '1', 'setted correctly through dependency');
assert.equal(div.state.m, 3*4, 'setted correctly through dependency of two props');
const newVal = 22;
div1.set({n: newVal, a: div1.get('a')+1});
assert.equal(div1.get('a'), 4, 'setted correctly through dependency');
assert.equal(div.state.n, '1', 'setted correctly through dependency');
assert.equal(div.state.m, 3*4, 'setted correctly through dependency of two props');
animate();
assert.equal(div.state.n, newVal, 'setted correctly through dependency');
assert.equal(div.state.m, 4*4, 'setted correctly through dependency of two props');
})
});
describe('components', function() {
let MyCmp;
let nest1, nest2, nest3;
it('should extend Component', function(){
MyCmp = Component.extend( 'MyCmp', {
def: {
prop1: true,
prop2: false,
nest: nest1 = {
num: 1,
str: 'str'
},
prop3: void 0,
prop4: null,
nest2: nest2 = {
subNest2: nest3 = {
a: 42,
b: 33
}
}
},
setters: {
nest2: ( _, val, lastVal, theKey, state ) => {
if(!state.nest2){
state.nest2 = {};
}
Object.assign(state.nest2, val);
return false;
//Object.assign( _.state.nest, val )
},
style: ( _, val ) => {
}
},
render: () => {
return <div/>;
}
} );
var cm = <MyCmp/>;
assert.equal( cm.get( 'prop1' ), true, 'default bool prop' );
assert.equal( cm.get( 'prop2' ), false, 'default bool prop' );
assert.equal( cm.get( 'nest' ), nest1, 'nested prop' );
assert.equal( cm.get( 'nest.num' ), nest1.num, 'nested number prop' );
assert.equal( cm.get( 'nest.str' ), nest1.str, 'nested string prop' );
assert.equal( cm.get( 'prop3' ), void 0, 'undefined prop' );
assert.equal( cm.get( 'prop4' ), null, 'null prop' );
assert.deepEqual( cm.get( 'nest2' ), nest2, 'nested2 prop' );
assert.deepEqual( cm.get( 'nest2.subNest2' ), nest3, 'nested2 nested prop' );
assert.equal( cm.get( 'nest2.subNest2.a' ), nest3.a, 'nested2 nested number prop' );
assert.equal( cm.get( 'nest2.subNest2.b' ), nest3.b, 'nested2 nested number prop' );
});
it('should correctly overwrite props', function() {
let newNest1 = {num:3};
let cmp = <MyCmp prop2={false} nest={newNest1} nest2={
{x: 666}
}/>;
assert.equal(cmp.get('prop1'), true, 'default bool prop');
assert.equal(cmp.get('prop2'), false, 'default bool prop');
assert.deepEqual(cmp.get('nest'), newNest1, 'nested prop');
assert.equal(cmp.get('prop3'), void 0, 'undefined prop');
assert.equal(cmp.get('prop4'), null, 'null prop');
assert.deepEqual(cmp.get('nest2'), { subNest2: { a: 42, b: 33 }, x: 666 }, 'nested2 prop');
});
});
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
module.exports = {
entry: './src/index.jsx',
devtool: 'source-map',
devtool: '#inline-cheap-module-source-map',
module: {
rules: [
{
......@@ -21,7 +21,9 @@ module.exports = {
output: {
path: __dirname + '/dist',
publicPath: '/',
filename: 'bundle.js'
filename: 'bundle.js',
devtoolModuleFilenameTemplate : '[absolute-resource-path]',
devtoolFallbackModuleFilenameTemplate: '[absolute-resource-path]?[hash]'
},
devServer: {
contentBase: './dist'
......
// webpack.test.config.js
const config = require('./webpack.config.js');
config.target = 'node';
config.mode = 'development';
module.exports = config;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment