580 Commits

Author SHA1 Message Date
Bohdan Liashenko
31ca6f4a78 Update README.md 2021-09-11 13:27:58 +02:00
Bohdan Liashenko
1f9bc3a2d3 Update README.md 2021-05-02 18:07:16 +02:00
Bohdan Liashenko
aad81bedbd Update README.md 2021-05-02 18:02:51 +02:00
Bohdan Liashenko
1158c5fc1d Update README.md 2021-04-27 19:22:55 +02:00
Bohdan Liashenko
a9727b990d Update README.md 2021-04-27 19:20:40 +02:00
Bogdan Lyashenko
a9f94a2cfa chore: version bump 2021-03-23 17:51:46 +01:00
Bogdan Lyashenko
eb0b9bfc40 Merge branch 'syarig-code-parse-php-namespace' 2021-03-23 14:24:17 +01:00
Bogdan Lyashenko
b4e1a99add fix: syntax changes 2021-03-23 14:23:58 +01:00
syarig
c21d3ff504 chore: remove npm scripts for docker 2021-01-03 19:55:02 +09:00
syarig
2957d95133 feat: changed to ran server-dev in Docker environment 2021-01-03 19:50:30 +09:00
syarig
d6ce727b0c refactor: improved to use cache that parsed code 2020-12-15 23:33:56 +09:00
syarig
c18c9fadd1 refactor: parse in php namespaces 2020-12-13 23:12:50 +09:00
syarig
dce33716d9 refactor: change public function names in namespaces 2020-12-13 00:49:59 +09:00
syarig
cf8ba61943 chore: remove example project code in src-php 2020-12-12 23:29:49 +09:00
syarig
26383aa79d feat: change behavior for dependency direct only 2020-12-12 12:53:32 +09:00
syarig
136bd77d5f feat: add namespaces, parser for php in code parse 2020-12-11 01:26:13 +09:00
syarig
ba6620f040 feat: add code parse php namespace 2020-12-07 23:09:15 +09:00
Bohdan Liashenko
4a8e7b7dc8 Update README.md 2020-05-23 18:50:38 +02:00
Bogdan Lyashenko
6ca48eb537 fix: build 2019-08-17 11:53:52 +02:00
Bogdan Lyashenko
2864a098ab 1.7.3 2019-08-17 11:52:57 +02:00
Bogdan Lyashenko
fec0cceba6 fix: docs 2019-08-17 11:47:34 +02:00
Bogdan Lyashenko
3bf39ce1b0 fix: readme change 2019-08-17 11:43:46 +02:00
Bogdan Lyashenko
3a047b5bbe chore: clean up 2019-08-17 11:39:39 +02:00
Bogdan Lyashenko
50145d4d1a 1.7.2 2019-08-12 20:55:38 +02:00
Bogdan Lyashenko
4df2e8a48b fix: saga 2019-08-12 20:55:31 +02:00
Bogdan Lyashenko
3dae451776 feat: hide source tree 2019-08-12 20:53:44 +02:00
Bogdan Lyashenko
4d038f37b3 feat: add file path to code preview 2019-08-12 19:49:45 +02:00
Bogdan Lyashenko
a09ef4df65 feat: add file path to code preview 2019-08-12 19:46:46 +02:00
Bogdan Lyashenko
628862d024 fix: underlay styles for namespace title 2019-08-10 20:29:53 +02:00
Bogdan Lyashenko
af83be1fcc 1.7.1 2019-08-10 20:17:33 +02:00
Bogdan Lyashenko
05cb5527e3 fix: peformance for flow steps 2019-08-10 20:17:21 +02:00
Bogdan Lyashenko
7d910a0f75 1.7.0 2019-08-06 20:31:37 +02:00
Bogdan Lyashenko
ab74f6426e 1.6.18 2019-08-06 20:26:39 +02:00
Bogdan Lyashenko
390bb8ff67 fix: left margin for svg 2019-08-06 20:26:30 +02:00
Bogdan Lyashenko
fcd108f9e7 fix: readme 2019-08-06 20:10:33 +02:00
Bogdan Lyashenko
dd2c6ee3d2 1.6.17 2019-08-06 20:08:17 +02:00
Bogdan Lyashenko
9917425cc8 fix: config file support 2019-08-06 20:07:45 +02:00
Bohdan Liashenko
3f54ca11a1 Merge pull request #85 from idoo/feature/config
WIP: feat: added codecrumbs.config
2019-08-06 19:05:41 +02:00
Bohdan Liashenko
e059f800d6 Merge branch 'master' into feature/config 2019-08-06 19:04:40 +02:00
Bogdan Lyashenko
f2dec10c05 feat: add extra persist list 2019-08-06 18:57:37 +02:00
Ivan Verevkin
d8117eac7d feat: added codecrumbs.config 2019-08-06 15:26:09 +02:00
Ivan Verevkin
354514818c feat: added codecrumbs.config 2019-08-06 13:48:29 +02:00
Ivan Verevkin
4ac814be93 feat: added codecrumbs.config 2019-08-06 12:20:52 +02:00
Ivan Verevkin
2f7387a67f feat: added codecrumbs.config 2019-08-06 11:59:06 +02:00
Bogdan Lyashenko
1cf779c5a6 test: test 2019-08-04 12:43:03 +02:00
Bogdan Lyashenko
64c9a75d92 test: test 2019-08-04 12:37:05 +02:00
Bogdan Lyashenko
5a8c4e6a9b 1.6.16 2019-08-04 12:20:57 +02:00
Bogdan Lyashenko
2fd728b5e8 feat: add tree diagram content id 2019-08-04 12:20:51 +02:00
Bogdan Lyashenko
9bda1672d5 1.6.15 2019-08-03 21:15:48 +02:00
Bogdan Lyashenko
101eade38f feat: v update info 2019-08-03 21:15:41 +02:00
Bogdan Lyashenko
6a1c8bcd75 1.6.14 2019-08-03 20:36:43 +02:00
Bogdan Lyashenko
c49a09e721 feat: add debug mode flag 2019-08-03 20:36:35 +02:00
Bogdan Lyashenko
d526ded04b chore: add hint about cc group 2019-08-03 19:36:01 +02:00
Ivan Verevkin
06344bee72 feat: added codecrumbs.config 2019-08-02 18:18:08 +02:00
Bogdan Lyashenko
f9f67ff9ea 1.6.13 2019-08-01 20:16:49 +02:00
Bogdan Lyashenko
9e519166d5 fix: flow without steps 2019-08-01 20:16:43 +02:00
Bogdan Lyashenko
1b649bbe96 1.6.12 2019-08-01 19:50:40 +02:00
Bogdan Lyashenko
9ed305c08b fix: unique keys for react lists 2019-08-01 19:50:32 +02:00
Bogdan Lyashenko
dfebfa20a2 fix: layout calc 2019-08-01 19:11:11 +02:00
Bogdan Lyashenko
564c81362e fix: geometry calc 2019-07-30 21:16:40 +02:00
Bogdan Lyashenko
d938ea3ef1 1.6.11 2019-07-28 11:23:57 +02:00
Bogdan Lyashenko
beceb476d9 feat: extend store 2019-07-28 11:23:21 +02:00
Bogdan Lyashenko
ca882e4568 1.6.10 2019-07-27 20:04:13 +02:00
Bogdan Lyashenko
227c626c3a fix: layout 2019-07-27 20:03:38 +02:00
Bogdan Lyashenko
c3606e3c3e fix: border for single space 2019-07-27 19:22:36 +02:00
Bogdan Lyashenko
ae9ffccf65 chore: js2flowchart update 2019-07-27 10:44:09 +02:00
Ivan Verevkin
897dcb8c3b feat: added codecrumbs.config 2019-07-26 14:18:51 +02:00
Bogdan Lyashenko
38e1fdeeda 1.6.9 2019-07-25 20:08:15 +02:00
Bogdan Lyashenko
c94e587675 fix: padding for geometry 2019-07-25 20:07:10 +02:00
Bohdan Liashenko
5354dad9fe Merge pull request #80 from idoo/chore/refactor-codecrumbs
chore: import only getCrumbs
2019-07-25 20:02:29 +02:00
Bohdan Liashenko
cbbab432e4 Merge pull request #81 from idoo/chore/upgrade-madge
chore: upgraded madge
2019-07-25 19:58:05 +02:00
Bogdan Lyashenko
e21ab82729 1.6.8 2019-07-25 19:37:38 +02:00
Bogdan Lyashenko
987a98732a fix: downgrade http-server to v0.9.0 2019-07-25 19:36:41 +02:00
Ivan Verevkin
3ddfda80ed chore: upgraded madge 2019-07-23 17:29:03 +02:00
Ivan Verevkin
3e5da523ce chore: import only getCrumbs 2019-07-23 14:00:05 +02:00
Bohdan Liashenko
6f6625d3db Merge pull request #79 from idoo/feature/lua
feat: added Lua support
2019-07-23 11:00:34 +02:00
Ivan Verevkin
e9b4331d60 Merge branch 'master' into feature/lua 2019-07-22 16:20:40 +02:00
Ivan Verevkin
b7e5b70df7 feat: added Lua support 2019-07-22 16:18:17 +02:00
Bogdan Lyashenko
ec04a20b8d 1.6.7 2019-07-20 11:15:27 +02:00
Bohdan Liashenko
7b51b8db72 Merge pull request #75 from idoo/feature/reason
feat: added OCaml support
2019-07-20 11:05:24 +02:00
Bogdan Lyashenko
fddb08554d fix: refactoring clean up 2019-07-20 10:52:55 +02:00
Ivan Verevkin
14116c24b8 Merge branch 'master' into feature/reason 2019-07-19 16:28:19 +02:00
Ivan Verevkin
9307cf6259 feat: added OCaml support 2019-07-19 16:24:29 +02:00
Bohdan Liashenko
39de752084 Merge pull request #72 from idoo/feature/perl
feature: added perl language
2019-07-18 16:51:59 +02:00
Bohdan Liashenko
d50783bb7f Merge pull request #74 from idoo/chore/refactor
refactor project source files
2019-07-18 16:50:53 +02:00
Ivan Verevkin
2f22563d8d chore: refactor project source 2019-07-18 15:36:04 +02:00
Bohdan Liashenko
a0c7c134d3 Update README.md 2019-07-17 16:29:02 +02:00
Ivan Verevkin
e8d08572c6 feature: added perl language 2019-07-17 14:52:30 +02:00
Bogdan Lyashenko
0191bde3e6 1.6.6 2019-07-16 21:07:55 +02:00
Bogdan Lyashenko
5c738d8f4d chore: build 2019-07-16 21:07:51 +02:00
Bogdan Lyashenko
6ca8817108 chore: build 2019-07-16 21:07:27 +02:00
Bogdan Lyashenko
b9f5c0b40e chore: add 0x to readme 2019-07-16 19:49:53 +02:00
Bogdan Lyashenko
c89cfec0c8 1.6.5 2019-07-16 19:41:54 +02:00
Bohdan Liashenko
85840a9fa6 Merge pull request #71 from idoo/chore/editorconfig
Added basic editorconfig
2019-07-16 16:23:13 +02:00
Bohdan Liashenko
a9ff99d48e Merge pull request #70 from idoo/feature/refactor
chore: extracted languages extensions and refactor code
2019-07-16 16:21:26 +02:00
Ivan Verevkin
160fdaef88 chore: added basic editorconfig 2019-07-16 16:11:08 +02:00
Ivan Verevkin
c020a739c4 chore: extracted languages extensions and refactor code 2019-07-16 16:06:44 +02:00
Ivan Verevkin
3b6e34fed8 Merge branch 'master' into feature/refactor 2019-07-16 15:45:17 +02:00
Ivan Verevkin
e4d09f118d chore: extracted languages extensions and refactor code 2019-07-16 15:42:35 +02:00
Bohdan Liashenko
662adb7bda Merge pull request #69 from idoo/feature/go
feat: added Go support
2019-07-15 15:37:59 +02:00
Ivan Verevkin
9c479f4462 feat: added Go support 2019-07-15 15:36:45 +02:00
Bogdan Lyashenko
447da26e16 1.6.4 2019-07-14 20:24:21 +02:00
Bogdan Lyashenko
9878e59a1b feat: expand codeblock on hover 2019-07-14 20:24:11 +02:00
Bogdan Lyashenko
af0530c764 1.6.3 2019-07-14 13:31:31 +02:00
Bogdan Lyashenko
30067567ab fix: layout geometry calc 2019-07-14 13:31:10 +02:00
Bogdan Lyashenko
501509f4df fix: fade in animations 2019-07-14 11:03:31 +02:00
Bogdan Lyashenko
b0edfdc976 fix: readme 2019-07-09 20:44:22 +02:00
Bogdan Lyashenko
4745ed2242 fix: readme 2019-07-09 20:42:54 +02:00
Bogdan Lyashenko
4112828108 1.6.2 2019-07-09 20:36:03 +02:00
Bogdan Lyashenko
17e5edc17d fix: ide integration 2019-07-09 20:35:54 +02:00
Bogdan Lyashenko
24a0f6f6c4 fix: readme fixes 2019-07-09 19:42:51 +02:00
Bogdan Lyashenko
76975298f0 1.6.1 2019-07-08 20:53:32 +02:00
Bogdan Lyashenko
770ae6d5cf fix: add test vue file 2019-07-08 20:53:13 +02:00
Bohdan Liashenko
25fdb28540 Merge pull request #68 from blackfyre/patch-1
Updated JS file list
2019-07-08 20:50:02 +02:00
Meki
6a026e0039 Updated JS file list
As per Bogdan's suggestion, the JS list has been expanded to support Vue single file components as well. https://github.com/Bogdan-Lyashenko/codecrumbs/issues/26#issuecomment-509145766
2019-07-08 11:28:50 +02:00
Bogdan Lyashenko
edb8cd0ba7 1.6.0 2019-07-07 14:05:25 +02:00
Bogdan Lyashenko
0908fcab89 feat: move to less 2019-07-07 14:05:04 +02:00
Bogdan Lyashenko
ceb18f613f 1.5.7 2019-07-02 20:42:20 +02:00
Bogdan Lyashenko
72776eee35 fix: build script 2019-07-02 20:41:58 +02:00
Bogdan Lyashenko
0cf67aa8bb fix: babel load 2019-06-30 21:09:45 +02:00
Bogdan Lyashenko
1893aef144 fix: server config 2019-06-30 15:47:43 +02:00
Bogdan Lyashenko
d2806e7fe0 fix: standalone flag 2019-06-30 14:05:35 +02:00
Bogdan Lyashenko
174e4be581 fix: meta version update 2019-06-30 13:57:31 +02:00
Bogdan Lyashenko
583b47bf2f 1.5.3 2019-06-30 13:55:01 +02:00
Bogdan Lyashenko
b623363369 fix: clen up 2019-06-30 13:54:56 +02:00
Bogdan Lyashenko
2b72adbfed 1.5.2 2019-06-23 19:02:24 +02:00
Bogdan Lyashenko
2b1f1a514d fix: version assigning logic 2019-06-23 19:01:46 +02:00
Bogdan Lyashenko
af452c014d 1.5.1 2019-06-23 18:42:19 +02:00
Bogdan Lyashenko
53cfa8deee fix: remove shared code 2019-06-23 18:42:05 +02:00
Bogdan Lyashenko
adefb7de07 1.5.0 2019-06-23 14:16:18 +02:00
Bogdan Lyashenko
d17ba78413 fix: relative path 2019-06-23 14:16:08 +02:00
Bogdan Lyashenko
56419385c3 1.4.7 2019-06-23 11:55:45 +02:00
Bogdan Lyashenko
4b55018014 fix: build for standalone 2019-06-23 11:54:44 +02:00
Bogdan Lyashenko
449b4157c3 1.4.6 2019-06-22 20:15:15 +02:00
Bogdan Lyashenko
cad0113d59 feat: add integration for io 2019-06-22 20:15:07 +02:00
Bogdan Lyashenko
4e98fd7839 1.4.5 2019-05-30 11:57:01 +02:00
Bogdan Lyashenko
366eb9d0dd fix: details for single crumbs 2019-05-30 11:56:51 +02:00
Bogdan Lyashenko
ed6cb9e00d 1.4.4 2019-05-23 20:17:54 +02:00
Bogdan Lyashenko
9267c05a9b fix: layout spacing 2019-05-23 20:17:44 +02:00
Bogdan Lyashenko
e2d574eb5d 1.4.3 2019-05-23 19:23:17 +02:00
Bohdan Liashenko
658fe92f9e Merge pull request #57 from jbcam/fix-cli-flag-ts
fix: ts cli settings
2019-05-23 19:22:05 +02:00
Jean Baptiste Camaret
1525572c03 fix cli settings 2019-05-21 11:36:42 +02:00
Bogdan Lyashenko
90b548973b 1.4.2 2019-05-20 19:29:03 +02:00
Bogdan Lyashenko
fa188868b1 fix: layout calc 2019-05-20 19:28:51 +02:00
Bogdan Lyashenko
719ee3456a 1.4.1 2019-05-20 19:18:20 +02:00
Bogdan Lyashenko
afc136d4f9 fix: geometry calc for layout 2019-05-20 19:17:33 +02:00
Bogdan Lyashenko
802ceb1ff5 fix: clean up 2019-05-20 19:08:12 +02:00
Bohdan Liashenko
adf9aac96a Merge pull request #53 from jbcam/add-tsConfig-suport-madge
feat: add support for madge to resolve tsConfig path aliases
2019-05-20 18:59:36 +02:00
Jean Baptiste Camaret
1898ff0813 updates post review 2019-05-17 11:33:44 +02:00
Bogdan Lyashenko
e97ada9654 1.4.0 2019-05-14 20:52:27 +02:00
Bogdan Lyashenko
1f79a454c4 fix: tree diagram width 2019-05-14 20:52:16 +02:00
Bogdan Lyashenko
029493f3ed feat: add code cmp 2019-05-14 20:38:31 +02:00
Bogdan Lyashenko
882332fc55 Merge branch 'master' into code-preview 2019-05-14 19:46:46 +02:00
Bogdan Lyashenko
a318765143 1.3.1 2019-05-14 19:38:33 +02:00
Bogdan Lyashenko
bafed33c1f fix: add default value for ccAlign point 2019-05-14 19:37:30 +02:00
Bogdan Lyashenko
43451bdaff fix: cc comments 2019-05-14 19:36:20 +02:00
Bogdan Lyashenko
a2c9b59a1e feat: code preview 2019-05-14 19:19:08 +02:00
Bogdan Lyashenko
164cb11cf3 fix: version 2019-05-12 18:01:33 +02:00
Bogdan Lyashenko
84fab1da37 fix: max width for ns 2019-05-12 15:05:35 +02:00
Bogdan Lyashenko
9843fb0144 fix: external edge 2019-05-12 13:24:18 +02:00
Bogdan Lyashenko
8b23750641 fix: colors for cc 2019-05-12 12:13:01 +02:00
Bogdan Lyashenko
3d775da19f fix: move steps calc to top 2019-05-05 20:33:29 +02:00
Bogdan Lyashenko
ec0880ade3 feat: new sorting for cc 2019-05-04 20:14:49 +02:00
Bogdan Lyashenko
58b6765a71 fix: remove height limit for cc details 2019-05-01 10:33:14 +02:00
Bogdan Lyashenko
bf28e81613 fix: switch namespace on file select 2019-04-21 12:37:04 +02:00
Bogdan Lyashenko
c862b5f657 1.2.13 2019-04-19 18:43:37 +02:00
Bogdan Lyashenko
a4cb4b0107 fix: add selected flow to download list 2019-04-19 18:43:30 +02:00
Bogdan Lyashenko
78221abba4 1.2.12 2019-04-19 18:06:58 +02:00
Bogdan Lyashenko
b37663d17e fix: add blank to links 2019-04-19 18:06:47 +02:00
Bogdan Lyashenko
e063ba4b65 1.2.11 2019-04-19 17:48:22 +02:00
Bogdan Lyashenko
458fbc836b fix: show next added flow 2019-04-19 17:48:18 +02:00
Jean Baptiste Camaret
e3cfb240d0 feat: add support for tsConfig path aliases 2019-04-18 16:39:41 +02:00
Bogdan Lyashenko
fcedde96bb fix: update link in readme 2019-04-14 20:36:55 +02:00
Bogdan Lyashenko
4cb8f3fc66 Merge branch 'master' of https://github.com/Bogdan-Lyashenko/codecrumbs 2019-04-14 14:07:08 +02:00
Bogdan Lyashenko
eca8898d3b fix: add unique key 2019-04-14 14:06:54 +02:00
Bohdan Liashenko
4e770b7aec Update README.md 2019-04-06 06:29:18 +02:00
Bohdan Liashenko
0a3dea0edb Update README.md 2019-04-06 06:27:08 +02:00
Bogdan Lyashenko
69ccaf85be feat: add dependencies support to TS 2019-04-04 19:56:29 +02:00
Bohdan Liashenko
40ed8505ed Merge pull request #51 from jbcam/add-ts-dependancies-support
feat: added ts dependencies support
2019-04-04 19:54:29 +02:00
Jean Baptiste Camaret
1c8bf6d539 merge master 2019-04-04 15:21:50 +02:00
Jean Baptiste Camaret
fa4712aa34 update post review 2019-04-04 15:08:37 +02:00
Jean Baptiste Camaret
662291458f feat: added ts dependencies support 2019-04-02 08:33:05 +02:00
Bogdan Lyashenko
e8ca1f927b fix: add decorator plugin to ast parser 2019-03-30 20:28:40 +01:00
Bogdan Lyashenko
017d83c060 fix: update version 2019-03-30 20:17:29 +01:00
Bogdan Lyashenko
528fe8bdf1 fix: add decorator plugin to ast parser 2019-03-30 20:16:59 +01:00
Bogdan Lyashenko
c54a1b7abc fix: add decorator plugin to ast parser 2019-03-30 20:07:15 +01:00
Bogdan Lyashenko
b978a7f64e feat: add feature to open file in codeeditor 2019-03-30 11:05:30 +01:00
Bogdan Lyashenko
2ac23c86ea feat: add haskell support 2019-03-26 20:17:37 +01:00
Bogdan Lyashenko
6b56945eb0 fix: languages regex 2019-03-26 20:05:44 +01:00
Bogdan Lyashenko
aca83fae6d fix: update readme 2019-03-25 19:23:48 +01:00
Bogdan Lyashenko
5850ff923f feat: add conenct client on fly 2019-03-24 18:40:29 +01:00
Bogdan Lyashenko
2329d24ce3 feat: add cc filtered in sidebar 2019-03-24 18:07:51 +01:00
Bogdan Lyashenko
8b0cf0b6cf feat: add select of external edge flow 2019-03-24 10:15:39 +01:00
Bogdan Lyashenko
128f88c99d feat: add x flag to cli 2019-03-23 19:13:42 +01:00
Bogdan Lyashenko
261d06cf5a feat: add cc flow edge select 2019-03-23 11:38:44 +01:00
Bogdan Lyashenko
856fd37297 Merge branch 'master' of https://github.com/Bogdan-Lyashenko/codecrumbs 2019-03-21 19:48:46 +01:00
Bogdan Lyashenko
e2a3e6bf05 feat: sort files tree by cc flow 2019-03-21 19:45:38 +01:00
Bohdan Liashenko
0732382216 Merge pull request #44 from pyjarrett/master
Clarifies required usage of relative paths as arguments.
2019-03-14 07:45:58 +01:00
Paul Jarrett
0ae080130b Clarifies required usage of relative paths as arguments. 2019-03-13 21:40:47 -04:00
Bogdan Lyashenko
fe12874400 fix: calc scroll position 2019-03-13 18:18:58 +01:00
Bogdan Lyashenko
4e6aa1dc93 build: version update 2019-03-10 18:28:54 +01:00
Bogdan Lyashenko
20fbd97b01 feat: hide unsupported features per lanaguage 2019-03-10 17:50:57 +01:00
Bogdan Lyashenko
94eea071b6 fix: update readme 2019-02-27 19:30:14 +01:00
Bogdan Lyashenko
d9e50dc4f9 feat: add fortran support 2019-02-27 19:26:15 +01:00
Bogdan Lyashenko
3b29dd616c fix: increase socket msg size 2019-02-26 19:54:47 +01:00
Bogdan Lyashenko
1a61830d7a fix: update readme 2019-02-25 21:03:18 +01:00
Bogdan Lyashenko
7c3f88c2bf feat: add csharp, kotlin, ruby 2019-02-25 21:00:27 +01:00
Bogdan Lyashenko
50da3e9504 feat: add setup logs 2019-02-25 20:17:17 +01:00
Bogdan Lyashenko
772010458c fix: change cli readme 2019-02-23 19:46:35 +01:00
Bogdan Lyashenko
6205c26675 fix: filter node_module, change parser for js 2019-02-23 09:52:58 +01:00
Bohdan Liashenko
6712ea9ad8 Add backers 2019-02-20 20:30:21 +01:00
Bohdan Liashenko
41ece67739 Merge pull request #23 from 0xflotus/patch-1
fixed yarn command
2019-02-20 07:47:25 +01:00
0xflotus
268837a62f fixed yarn command 2019-02-20 03:22:55 +01:00
Bohdan Liashenko
512c3ae318 Update README.md 2019-02-19 19:58:42 +01:00
Bogdan Lyashenko
27d1ef6c9b feat: add image for dev 2019-02-18 21:38:18 +01:00
Bogdan Lyashenko
18fe23f92f Merge branch 'master' of https://github.com/Bogdan-Lyashenko/codecrumbs 2019-02-18 20:48:53 +01:00
Bogdan Lyashenko
8f7676a36c fix: readme chanegs 2019-02-18 20:48:35 +01:00
Bohdan Liashenko
e4be7ef344 Update README.md 2019-02-17 21:51:25 +01:00
Bogdan Lyashenko
aa518b9eab feat: version update 2019-02-16 19:57:05 +01:00
Bogdan Lyashenko
0155b855de fix: add flow to readme 2019-02-16 19:47:02 +01:00
Bogdan Lyashenko
1af5427db4 feat: case studies 2019-02-16 16:54:18 +01:00
Bogdan Lyashenko
9ac59e5e72 feat: add dep ui 2019-02-16 16:46:58 +01:00
Bogdan Lyashenko
c43caa8a00 fix: cc ui explained 2019-02-16 16:24:45 +01:00
Bogdan Lyashenko
aff1da2fe4 fix: cc ui explained 2019-02-16 16:24:40 +01:00
Bogdan Lyashenko
e8f5d8a663 fix: add donate to readme 2019-02-16 15:59:22 +01:00
Bohdan Liashenko
f3bd318635 Update README.md 2019-02-16 14:55:14 +01:00
Bogdan Lyashenko
9e965e1799 fix: twitter url 2019-02-16 09:39:07 +01:00
Bogdan Lyashenko
9b5a6191d6 fix: twitter url 2019-02-16 09:30:09 +01:00
Bogdan Lyashenko
8f2939d958 feat: add logo 2019-02-16 09:25:16 +01:00
Bogdan Lyashenko
33b484a405 feat: add logo 2019-02-16 09:07:16 +01:00
Bogdan Lyashenko
62ffdc3ab6 fix: metadata for download feat 2019-02-15 19:45:48 +01:00
Bogdan Lyashenko
7373e083a1 fix: path starting from rel symbols 2019-02-15 19:27:15 +01:00
Bogdan Lyashenko
57e7da6068 fix: version update 2019-02-15 18:25:22 +01:00
Bogdan Lyashenko
b34aca68ec fix: pth separator 2019-02-15 18:24:31 +01:00
Bogdan Lyashenko
3c65ba210f fix: readme 2019-02-13 20:45:27 +01:00
Bogdan Lyashenko
fb0974b0ff fix: readme 2019-02-13 20:42:01 +01:00
Bogdan Lyashenko
6bcf4ef96e fix: readme 2019-02-13 20:28:20 +01:00
Bogdan Lyashenko
aab750f93b fix: standalone json 2019-02-12 20:39:31 +01:00
Bogdan Lyashenko
167f119163 feat: add path validation 2019-02-12 20:15:11 +01:00
Bogdan Lyashenko
e1b9dd6dc6 fix: font for cross platform 2019-02-12 19:52:34 +01:00
Bogdan Lyashenko
3d581e6ed2 fix: dep paths for windows 2019-02-12 19:21:23 +01:00
Bogdan Lyashenko
95651a9d12 fix: empty path fail 2019-02-11 20:27:29 +01:00
Bogdan Lyashenko
7490bf3ea1 fix: separator per platform for paths 2019-02-11 20:15:41 +01:00
Bogdan Lyashenko
3c2a6f76cc fix: update readme 2019-02-10 20:30:46 +01:00
Bohdan Liashenko
62a0deba57 Update readme 2019-02-10 19:06:46 +01:00
Bogdan Lyashenko
bcb581af03 fix: hide menu for mobile 2019-02-10 15:52:19 +01:00
Bogdan Lyashenko
78da65706d feat: add parsr fallbacl for js 2019-02-10 15:35:59 +01:00
Bogdan Lyashenko
8155ed3207 feat: finish multi lnaguage support 2019-02-09 21:13:41 +01:00
Bogdan Lyashenko
eed383522b fix: icons per file 2019-02-09 10:36:09 +01:00
Bogdan Lyashenko
55068ca6ca feat: pass language to code components 2019-02-08 21:38:04 +01:00
Bogdan Lyashenko
0fee30ab26 feat: add multi language parse, python case 2019-02-08 20:58:56 +01:00
Bogdan Lyashenko
f820124db9 fix: loading position for tree diagrams 2019-02-07 20:27:41 +01:00
Bogdan Lyashenko
0428ba5e5c feat: multy language support 2019-02-07 20:20:19 +01:00
Bogdan Lyashenko
3ff09c65fc feat: add details renderinf for cc 2019-02-04 20:28:05 +01:00
Bogdan Lyashenko
b09c41c353 fix: dependencies file code load 2019-02-03 11:24:46 +01:00
Bogdan Lyashenko
d9f48330f2 fix: standalone file code 2019-02-03 10:56:00 +01:00
Bogdan Lyashenko
c97c2e93c6 fix: reset databus on upload store 2019-02-02 19:25:09 +01:00
Bogdan Lyashenko
205176caab fix: path for client 2019-02-02 18:53:26 +01:00
Bogdan Lyashenko
c62cb76347 feat: version update 2019-02-02 18:19:18 +01:00
Bogdan Lyashenko
a85eba776a fix: add multi-codebase to readme 2019-02-02 18:06:35 +01:00
Bogdan Lyashenko
95282552a5 feat: add footer info 2019-02-02 17:36:30 +01:00
Bogdan Lyashenko
93c584efc7 fix: multiple file changes, replace watcher 2019-02-02 17:03:22 +01:00
Bogdan Lyashenko
b7f16f31d9 feat: add external edges for codecrumbs 2019-02-02 11:40:51 +01:00
Bogdan Lyashenko
012d8c81f5 fix: pretty print server example 2019-01-29 20:44:36 +01:00
Bogdan Lyashenko
b4c03fc922 fix: upload gif 2019-01-29 20:39:48 +01:00
Bogdan Lyashenko
3d2ff24531 feat: add standalone placeholder 2019-01-29 20:36:58 +01:00
Bogdan Lyashenko
9d56f4a1b2 feat: update readme 2019-01-29 19:30:07 +01:00
Bogdan Lyashenko
fcc726046b feat: update readme 2019-01-29 19:29:44 +01:00
Bogdan Lyashenko
a0f06ac704 feat: update readme 2019-01-29 19:28:36 +01:00
Bogdan Lyashenko
4542021a34 feat: update readme 2019-01-29 19:27:19 +01:00
Bogdan Lyashenko
b32cb1eede feat: update readme 2019-01-28 20:29:19 +01:00
Bogdan Lyashenko
b41d1b1309 feat: update readme 2019-01-28 20:28:31 +01:00
Bogdan Lyashenko
fe9bda3ab0 feat: update readme 2019-01-28 20:26:34 +01:00
Bogdan Lyashenko
6cc5f311fc fix: layout 2019-01-26 17:43:18 +01:00
Bogdan Lyashenko
4d6529d6d1 feat: add second namespace 2019-01-26 17:19:19 +01:00
Bogdan Lyashenko
97fa10fc55 fix: set active folders on select node 2019-01-26 16:24:30 +01:00
Bogdan Lyashenko
e0adf39626 feat: add scrollable container for namespaces 2019-01-26 15:49:56 +01:00
Bogdan Lyashenko
d4b27cf545 feat: add multiple diagrams 2019-01-25 18:20:03 +01:00
Bogdan Lyashenko
64a1cb27c2 feat: migrate file code fetching to sockets 2019-01-25 17:15:57 +01:00
Bogdan Lyashenko
c03248de48 feat: migrate download upload 2019-01-24 19:00:56 +01:00
Bogdan Lyashenko
17cb1075cf feat: migrate explorer bar 2019-01-24 18:42:30 +01:00
Bogdan Lyashenko
787560916b feat: migrate subpanel 2019-01-24 18:37:19 +01:00
Bogdan Lyashenko
06828c2d8b feat: migrate sidebar to namepsacw logic 2019-01-24 18:22:10 +01:00
Bogdan Lyashenko
baf6fbbb2b feat: show flowselect for single project only 2019-01-22 20:27:15 +01:00
Bogdan Lyashenko
5b26f6b203 feat: finish migrating view switches to nampespaces 2019-01-22 20:11:48 +01:00
Bogdan Lyashenko
423eb1ed7b feat: finish migrating tree diagram components 2019-01-21 20:02:08 +01:00
Bogdan Lyashenko
0142f55f09 Merge branch 'master' into multy-server 2019-01-21 19:14:59 +01:00
Bohdan Liashenko
8fd467b1d0 Merge pull request #11 from andrewmherren/line_endings
fix(#3): support consecutive codecrumbs
2019-01-21 19:09:14 +01:00
Bogdan Lyashenko
198632f94f feat: fix multy server for actions 2019-01-21 18:52:49 +01:00
andrewmherren
7c885ae2e6 fix(#3): support consecutive codecrumbs
removed babelTraverse and instead used ast.comments returned by babylon.parse()
2019-01-20 16:38:31 -08:00
Bogdan Lyashenko
36284e507d feat: add support of multiple servers 2019-01-19 19:43:53 +01:00
Bogdan Lyashenko
e6e4969695 Merge branch 'master' into multy-server 2019-01-19 11:26:05 +01:00
Bohdan Liashenko
370a8622c3 Merge pull request #9 from ghsamm/commitlint
feat: enable commitlint setup
2019-01-19 11:22:27 +01:00
Bogdan Lyashenko
93e0346538 Change gitignore props 2019-01-19 10:58:41 +01:00
Bogdan Lyashenko
d657a08d94 first 2019-01-19 10:44:16 +01:00
ghsamm
9eab89a72b feat: configure commitlint for husky 2019-01-19 08:52:25 +01:00
ghsamm
32267b766a install and config commitlint 2019-01-19 08:49:54 +01:00
ghsamm
b80ca1d852 install husky 2019-01-19 08:44:05 +01:00
Bohdan Liashenko
5cb179b055 Update README.md 2019-01-19 08:35:55 +01:00
Bohdan Liashenko
70ebc7b2ce Merge pull request #8 from ghsamm/ignore-dist
gitignore src/public/dist
2019-01-18 21:18:49 +01:00
Bohdan Liashenko
25eb5c845d Update README.md 2019-01-18 20:55:30 +01:00
ghsamm
d3d4e95a19 delete and gitignore src/public/dist 2019-01-18 02:53:23 +01:00
Bohdan Liashenko
357cf192ac Update package.json 2019-01-16 11:19:04 +01:00
Bohdan Liashenko
40aacdd809 Create LICENSE 2019-01-16 11:17:15 +01:00
Bohdan Liashenko
251a894262 Delete LICENSE 2019-01-16 11:16:22 +01:00
Bohdan Liashenko
bec6434f73 Merge pull request #4 from AGCB/master
grammar fixes for documentation
2019-01-16 09:14:38 +01:00
AGCB
b294c09e1a grammar fixes for documentation 2019-01-15 17:04:04 -08:00
Bogdan Lyashenko
62ec4aae1f Fix comment starting from space 2019-01-15 18:56:10 +01:00
Bogdan Lyashenko
8f20d6e43c Update readme 2019-01-14 20:18:27 +01:00
Bogdan Lyashenko
4cc8cc225c Update readme 2019-01-14 20:14:51 +01:00
Bohdan Liashenko
508a60ab2a Update README.md 2019-01-14 14:57:00 +01:00
Bohdan Liashenko
92f1389680 Update README.md 2019-01-14 14:56:02 +01:00
Bohdan Liashenko
5368193ad0 Update README.md 2019-01-14 13:57:28 +01:00
Bogdan Lyashenko
fd7fff3fb6 Layout fixes 2019-01-12 20:43:31 +01:00
Bogdan Lyashenko
b0056b66b8 Fix names in json 2019-01-06 13:21:56 +01:00
Bogdan Lyashenko
a2b9b065d0 Fix cc names 2019-01-06 13:19:17 +01:00
Bogdan Lyashenko
fb414b02d8 Add chunks for tabs in sidebar 2019-01-06 13:02:46 +01:00
Bogdan Lyashenko
946459a104 Fix link 2019-01-06 12:49:13 +01:00
Bogdan Lyashenko
415bd3b091 Add lines to cc 2019-01-06 12:45:54 +01:00
Bogdan Lyashenko
05a3f37a6e Fix standalone file loading 2019-01-05 16:35:40 +01:00
Bogdan Lyashenko
ef6fa75486 Update version 2019-01-05 12:51:02 +01:00
Bogdan Lyashenko
d755218f5f Fix icons resources 2019-01-05 12:17:22 +01:00
Bogdan Lyashenko
f61fbcc44f Fix public path for prod 2019-01-01 19:02:41 +01:00
Bogdan Lyashenko
ded7785170 Fix public path for prod 2019-01-01 18:57:16 +01:00
Bogdan Lyashenko
eb084c8a8c Fix public path for prod 2019-01-01 18:53:32 +01:00
Bogdan Lyashenko
66bcef28c6 Fix public path for prod 2019-01-01 18:48:15 +01:00
Bogdan Lyashenko
bfa0c4d9eb Fix public path for prod 2019-01-01 18:38:48 +01:00
Bogdan Lyashenko
2ed1c99435 Fix public path for prod 2019-01-01 18:26:52 +01:00
Bogdan Lyashenko
3aa171aef8 Fix public path for prod 2019-01-01 18:21:52 +01:00
Bohdan Liashenko
1312ff142c Set theme jekyll-theme-cayman 2018-12-31 17:36:23 +01:00
Bogdan Lyashenko
4d26b88153 Add standalone fixes 2018-12-31 17:34:05 +01:00
Bogdan Lyashenko
4bbc210ef1 Add dynamic loading 2018-12-31 15:14:31 +01:00
Bogdan Lyashenko
6b8e921cc4 Update react 2018-12-31 12:46:32 +01:00
Bogdan Lyashenko
09c663b11c Split webpack configs 2018-12-31 12:41:33 +01:00
Bogdan Lyashenko
8036ffc595 Add setup to app init 2018-12-31 12:06:22 +01:00
Bogdan Lyashenko
446e2e5970 Moving files around 2018-12-30 20:34:15 +01:00
Bogdan Lyashenko
d69598bd56 Moving files around 2018-12-30 20:27:57 +01:00
Bogdan Lyashenko
af18b825fe Add props param to selector 2018-12-30 19:38:36 +01:00
Bogdan Lyashenko
f5ccd6e4b7 Fix storing dep entry name 2018-12-30 19:24:10 +01:00
Bogdan Lyashenko
fd1561de07 Refactor state selectors 2018-12-30 17:01:00 +01:00
Bogdan Lyashenko
1e28ed8f25 Add store upload 2018-12-28 19:59:01 +01:00
Bogdan Lyashenko
f90dae3f96 Remove ast nodes from payload 2018-12-27 20:10:42 +01:00
Bogdan Lyashenko
08098584b3 Refactor actions 2018-12-27 19:46:19 +01:00
Bogdan Lyashenko
efef5f932f Add download setup feature 2018-12-26 20:09:20 +01:00
Bogdan Lyashenko
fe5fa2eecd Update version 2018-12-26 12:34:05 +01:00
Bogdan Lyashenko
c03a5cc434 Fix dep edges 2018-12-26 12:33:20 +01:00
Bogdan Lyashenko
49ee30bcf1 Fix dep edge 2018-12-10 20:49:19 +01:00
Bogdan Lyashenko
1b86bd7912 Add no trail selet 2018-12-08 20:14:38 +01:00
Bogdan Lyashenko
cd89395cf1 Fix cc flow sorting 2018-12-08 19:11:19 +01:00
Bogdan Lyashenko
b129dc5cc6 Refactor trees 2018-12-06 20:26:08 +01:00
Bogdan Lyashenko
58b81e6cf4 Add file code loading on connection select 2018-12-05 20:44:07 +01:00
Bogdan Lyashenko
38ec23f4fa Add file code for files with cc 2018-12-05 19:56:00 +01:00
Bogdan Lyashenko
b767fb4aca Move nodes data usage to filesMap 2018-12-05 19:51:40 +01:00
Bogdan Lyashenko
9c60f4d228 Fix client port 2018-12-04 19:30:43 +01:00
Bogdan Lyashenko
2e9d82bc31 Fix path in cli 2018-12-02 20:13:08 +01:00
Bogdan Lyashenko
413dc91a48 Add cli 2018-12-02 19:56:46 +01:00
Bogdan Lyashenko
184578fcc4 Add npm ignore 2018-12-01 18:11:27 +01:00
Bogdan Lyashenko
405ac1c0bd Add cli placeholder 2018-12-01 18:07:36 +01:00
Bogdan Lyashenko
acd8ddb7bb package json fixes 2018-12-01 12:55:50 +01:00
Bogdan Lyashenko
e8b8a195bc Refactor dependencies to parse file on select 2018-12-01 12:49:52 +01:00
Bogdan Lyashenko
d384ef2d59 Remove file code fetch if sidebar closed 2018-11-26 20:19:01 +01:00
Bogdan Lyashenko
f7a38f55b9 Fix broken dep tab 2018-11-26 19:57:52 +01:00
Bogdan Lyashenko
afae0ea8fb Add file code fetch 2018-11-26 19:51:32 +01:00
Bogdan Lyashenko
dd727b3fac Add api endpoint 2018-11-25 19:10:46 +01:00
Bogdan Lyashenko
2a2067cd0f Enable cc 2018-11-25 17:56:09 +01:00
Bogdan Lyashenko
f533eb0b05 Remove custom static server 2018-11-25 17:46:48 +01:00
Bogdan Lyashenko
36a628e5de Dependencies connections fixes 2018-11-25 16:49:35 +01:00
Bogdan Lyashenko
096bf67079 remove zoom 2018-11-15 17:14:33 +01:00
Bogdan Lyashenko
9254a6d1da Move cc 2018-11-10 14:35:06 +01:00
Bogdan Lyashenko
dfddb2b3af Update readme 2018-11-10 12:46:55 +01:00
Bogdan Lyashenko
fcd385b2b0 Fix rendering of steps 2018-11-08 20:52:59 +01:00
Bogdan Lyashenko
5b2e59ed55 Add cc paths 2018-11-03 14:18:38 +01:00
Bogdan Lyashenko
ee3e5ac150 Move font ssze to constant 2018-11-03 12:43:16 +01:00
Bogdan Lyashenko
e74c33a88b Add zoom 2018-11-03 09:40:19 +01:00
Bogdan Lyashenko
2f28609cd5 Add cover for folder namve 2018-10-28 11:16:18 +01:00
Bogdan Lyashenko
055d97075d Fix font size for Code 2018-10-28 11:08:58 +01:00
Bogdan Lyashenko
ab9cc5aab3 Fix folder index path 2018-10-28 11:06:11 +01:00
Bogdan Lyashenko
0e83ea4dd1 Add cc flow filter 2018-10-28 10:50:46 +01:00
Bogdan Lyashenko
e8e5b06a91 Remove aliases for example proj 2018-10-27 19:58:58 +02:00
Bogdan Lyashenko
9fca36b281 Move example proj dir 2018-10-27 19:41:09 +02:00
Bogdan Lyashenko
0e735102ff Fix smart folders 2018-10-27 18:24:30 +02:00
Bogdan Lyashenko
44fe38a5d9 Fix dep edges layout 2018-10-27 11:41:03 +02:00
Bogdan Lyashenko
80d24021ef Fix dep edges layout 2018-10-27 11:35:51 +02:00
Bogdan Lyashenko
ce2cf6d7a8 Fix cc line 2018-10-27 10:04:22 +02:00
Bogdan Lyashenko
f30aeb1d20 Fix cc 2018-10-25 20:25:27 +02:00
Bogdan Lyashenko
de8720ee60 Remove first level of opened folders 2018-10-25 20:20:19 +02:00
Bogdan Lyashenko
4c1b0b3e1f Clean up test files 2018-10-25 19:53:36 +02:00
Bogdan Lyashenko
545626a94e Add redux example project 2018-10-25 19:48:13 +02:00
Bogdan Lyashenko
b54c72c074 Move out ast config 2018-10-25 19:13:43 +02:00
Bogdan Lyashenko
d0a66c605e Add side bar explorer 2018-10-23 20:42:27 +02:00
Bogdan Lyashenko
44833471da Update readme 2018-10-23 19:23:30 +02:00
Bogdan Lyashenko
8fc0b33189 Update styling fc 2018-10-23 19:12:22 +02:00
Bogdan Lyashenko
35fad3ef5c Add flow chart 2018-10-22 21:44:34 +02:00
Bogdan Lyashenko
fb26280a78 Update git ignore with example project 2018-10-22 20:14:30 +02:00
Bogdan Lyashenko
e115ebc208 Fixes for example project 2018-10-22 20:12:45 +02:00
Bogdan Lyashenko
5ad9c7e4fc Fix tr-catch, folders closing 2018-10-22 19:14:42 +02:00
Bogdan Lyashenko
ae21729bd7 Dep edge fixes 2018-10-21 19:34:09 +02:00
Bogdan Lyashenko
6e750ff63b Dep edge fixes 2018-10-21 19:11:00 +02:00
Bogdan Lyashenko
26f45e7602 Icons fixes 2018-10-21 17:44:40 +02:00
Bogdan Lyashenko
4f87a5c2cd Add constants for opened state 2018-10-21 17:08:50 +02:00
Bogdan Lyashenko
311edd0dce Add smart folders open 2018-10-21 12:33:59 +02:00
Bogdan Lyashenko
7c18fa9002 Update config for AST parser 2018-10-20 18:09:14 +02:00
Bogdan Lyashenko
86ee569794 Improvments 2018-10-17 20:30:49 +02:00
Bogdan Lyashenko
2e71f596c1 Move entry point config to BE 2018-10-17 19:21:54 +02:00
Bogdan Lyashenko
5b367b61c9 Add grab cursor 2018-10-15 20:47:02 +02:00
Bogdan Lyashenko
aebd647d35 Fix file nodes map 2018-10-15 20:40:30 +02:00
Bogdan Lyashenko
cd5c5af94f Add crumbs tab 2018-10-15 20:34:19 +02:00
Bogdan Lyashenko
b897b513b8 Visual fixes 2018-10-15 19:12:33 +02:00
Bogdan Lyashenko
2cb1888f8d Add animations, key fixes 2018-10-14 19:07:36 +02:00
Bogdan Lyashenko
fa4e08c8e2 Add folders close on entry point change 2018-10-14 12:18:04 +02:00
Bogdan Lyashenko
84bc94538f Add folder closing logc 2018-10-14 11:03:15 +02:00
Bogdan Lyashenko
faac196af7 Move to opened foleds 2018-10-14 09:33:24 +02:00
Bogdan Lyashenko
3be0520b60 Add folder closing smart feature 2018-10-13 20:09:04 +02:00
Bogdan Lyashenko
8945082220 Add scroll 2018-10-11 20:39:58 +02:00
Bogdan Lyashenko
ada458bac6 Add sidebar selected tab key 2018-10-10 18:37:53 +02:00
Bogdan Lyashenko
e479093746 Add dep code pane 2018-10-09 17:48:09 +02:00
Bogdan Lyashenko
92adf9c8d5 Refacor code tab 2018-10-07 11:42:32 +02:00
Bogdan Lyashenko
641577665f Change minimize behaviou 2018-10-04 21:05:03 +02:00
Bogdan Lyashenko
e5de0b5f45 Higlight crum line, not next one 2018-10-04 20:48:24 +02:00
Bogdan Lyashenko
43b29fbecc Refactor redux connect 2018-10-04 20:40:49 +02:00
Bogdan Lyashenko
c50eee237c Fix for close all folders 2018-10-03 21:04:32 +02:00
Bogdan Lyashenko
2fa2ed62ba Add files map, clean up unused lists 2018-10-03 21:02:08 +02:00
Bogdan Lyashenko
205f1bef51 Add babel 7 2018-10-02 19:27:54 +02:00
Bogdan Lyashenko
7af202a198 Fix cc flow edges 2018-10-01 20:20:12 +02:00
Bogdan Lyashenko
03b4318c7a Add multi cc in one file 2018-09-30 20:47:19 +02:00
Bogdan Lyashenko
b2a3fe4ce8 Add flow selectors 2018-09-30 12:02:17 +02:00
Bogdan Lyashenko
648a6062a9 Move cc flow edges back under file names 2018-09-30 10:34:02 +02:00
Bogdan Lyashenko
5047a0ddbf Add cc edges 2018-09-29 19:01:04 +02:00
Bogdan Lyashenko
60269f2ada Fix purple for cc 2018-09-29 17:44:29 +02:00
Bogdan Lyashenko
3d0daa6d60 Add path title 2018-09-29 17:31:01 +02:00
Bogdan Lyashenko
063b147448 Add flow connections steps on tree 2018-09-29 14:55:58 +02:00
Bogdan Lyashenko
6094a6c2fd Add cc flow parsing to BE 2018-09-28 20:31:07 +02:00
Bogdan Lyashenko
976a1260b2 Add ui image 2018-09-28 20:02:40 +02:00
Bogdan Lyashenko
09b685ca86 Add show lines control 2018-09-28 19:48:24 +02:00
Bogdan Lyashenko
99a1812b35 Add config persistance to local storage 2018-09-26 20:48:39 +02:00
Bogdan Lyashenko
73861d6a18 Add dep sync 2018-09-26 20:31:07 +02:00
Bogdan Lyashenko
b7e775f854 Fix height for tree diagram containe 2018-09-26 20:15:23 +02:00
Bogdan Lyashenko
9468a589fc Add file watcher 2018-09-26 20:05:18 +02:00
Bogdan Lyashenko
af028923e5 rm yarn lock 2018-09-24 19:26:51 +02:00
Bogdan Lyashenko
9d46b7c195 rm yarn lock 2018-09-24 19:26:18 +02:00
Bogdan Lyashenko
b42975ac30 Test 2018-09-24 19:24:28 +02:00
Bogdan Lyashenko
91ff195ab8 fix 2018-09-24 19:04:03 +02:00
Bogdan Lyashenko
855835af53 fix 2018-09-24 19:02:26 +02:00
Bogdan Lyashenko
0c272532b3 Merge branch 'master' of https://github.com/Bogdan-Lyashenko/codecrumbs 2018-09-24 18:54:27 +02:00
Bogdan Lyashenko
74c823edeb ant update 2018-09-24 18:54:16 +02:00
Bogdan Lyashenko
8e624fdb49 ant update 2018-09-24 18:39:06 +02:00
Bogdan Lyashenko
cb66cdff20 ant update 2018-09-24 18:37:53 +02:00
Bogdan Lyashenko
abcc81649c Merge branch 'master' of https://github.com/Bogdan-Lyashenko/codecrumbs 2018-09-24 18:35:37 +02:00
Bogdan Lyashenko
737ade5c46 ant u[date 2018-09-24 18:29:14 +02:00
Bogdan Lyashenko
0be99d845d ant u[date 2018-09-24 18:29:14 +02:00
Bohdan Liashenko
4298b90a6f Add drag and drop 2018-09-23 13:10:02 +02:00
Bohdan Liashenko
23162bb324 Add drag and drop 2018-09-23 13:10:02 +02:00
Bohdan Liashenko
24d7f83394 Add layout calc 2018-09-23 10:24:27 +02:00
Bohdan Liashenko
c722103b39 Add layout calc 2018-09-23 10:24:27 +02:00
Bohdan Liashenko
ea00b664a3 Add side bar switch 2018-09-22 16:00:44 +02:00
Bohdan Liashenko
12facb0ecd Add side bar switch 2018-09-22 16:00:44 +02:00
Bogdan Lyashenko
6afc119adf Add copy to clipboard icon 2018-09-19 20:50:44 +02:00
Bogdan Lyashenko
88aac37021 Add copy to clipboard icon 2018-09-19 20:50:44 +02:00
Bogdan Lyashenko
b9319e801b Add under layer for unselect 2018-09-19 20:25:27 +02:00
Bogdan Lyashenko
25aa59c067 Add under layer for unselect 2018-09-19 20:25:27 +02:00
Bogdan Lyashenko
6d943da96e Unite icon and text dependency tree click 2018-09-19 20:05:14 +02:00
Bogdan Lyashenko
174525550c Unite icon and text dependency tree click 2018-09-19 20:05:14 +02:00
Bogdan Lyashenko
e37d73c7ac Add select of import on dep edge click 2018-09-18 21:08:42 +02:00
Bogdan Lyashenko
5168520efb Add select of import on dep edge click 2018-09-18 21:08:42 +02:00
Bogdan Lyashenko
5caf77d0c3 Fix code highlighting 2018-09-17 20:23:49 +02:00
Bogdan Lyashenko
15d181a415 Fix code highlighting 2018-09-17 20:23:49 +02:00
Bogdan Lyashenko
81aca317fc Fix selected entry point svg 2018-09-17 19:35:39 +02:00
Bogdan Lyashenko
0b9ac1206d Fix selected entry point svg 2018-09-17 19:35:39 +02:00
Bogdan Lyashenko
c95361d0f0 Add dependencies style fixes 2018-09-16 19:56:39 +02:00
Bogdan Lyashenko
d2a439c04e Add dependencies style fixes 2018-09-16 19:56:39 +02:00
Bogdan Lyashenko
b50417f1a0 Add dependencies style fixes 2018-09-16 19:40:44 +02:00
Bogdan Lyashenko
ae1f934b39 Add dependencies style fixes 2018-09-16 19:40:44 +02:00
Bogdan Lyashenko
df20030b9f Perf fixes for file nodes 2018-09-16 11:26:22 +02:00
Bogdan Lyashenko
091bffcb52 Perf fixes for file nodes 2018-09-16 11:26:22 +02:00
Bogdan Lyashenko
11d81a212e Perf fixes for file nodes 2018-09-16 10:20:44 +02:00
Bogdan Lyashenko
5b5239d18d Perf fixes for file nodes 2018-09-16 10:20:44 +02:00
Bogdan Lyashenko
f48f59d1a7 Add redux dev tools 2018-09-16 09:45:38 +02:00
Bogdan Lyashenko
8f6c48ad0a Add redux dev tools 2018-09-16 09:45:38 +02:00
Bogdan Lyashenko
3921ee099c Rename folders to camel case 2018-09-16 09:29:33 +02:00
Bogdan Lyashenko
8d6ad16498 Rename folders to camel case 2018-09-16 09:29:33 +02:00
Bogdan Lyashenko
0b397ac36a Update react, fix dep switch 2018-09-15 13:31:20 +02:00
Bogdan Lyashenko
d472987c2c Update react, fix dep switch 2018-09-15 13:31:20 +02:00
Bogdan Lyashenko
45b597d9ff Add dep tree edge selection 2018-09-15 13:24:47 +02:00
Bogdan Lyashenko
59cdb70f9e Add dep tree edge selection 2018-09-15 13:24:47 +02:00
Bogdan Lyashenko
09f17d60f8 Add dep edge select 2018-09-13 21:13:33 +02:00
Bogdan Lyashenko
5b45f88281 Add dep edge select 2018-09-13 21:13:33 +02:00
Bogdan Lyashenko
8802b797d1 Add source edge select 2018-09-12 20:30:39 +02:00
Bogdan Lyashenko
b5814cdb1f Add source edge select 2018-09-12 20:30:39 +02:00
Bogdan Lyashenko
f08e1bce8e Add file names for dep tree when source is off 2018-09-11 19:56:18 +02:00
Bogdan Lyashenko
224f2bfd51 Add file names for dep tree when source is off 2018-09-11 19:56:18 +02:00
Bogdan Lyashenko
18b9b8d0e2 Fix icons for code crumb and dep tree 2018-09-11 19:46:22 +02:00
Bogdan Lyashenko
f045304019 Fix icons for code crumb and dep tree 2018-09-11 19:46:22 +02:00
Bogdan Lyashenko
30cc932ef9 Fix dependencies tree bug 2018-09-10 21:15:35 +02:00
Bogdan Lyashenko
a49eab3955 Fix dependencies tree bug 2018-09-10 21:15:35 +02:00
Bogdan Lyashenko
5326bab255 Add scss loader and clean up css 2018-08-28 20:16:44 +02:00
Bogdan Lyashenko
684f9c791c Add scss loader and clean up css 2018-08-28 20:16:44 +02:00
Bogdan Lyashenko
683c53838b Move dim feature to source 2018-08-27 21:04:28 +02:00
Bogdan Lyashenko
e136eb090c Move dim feature to source 2018-08-27 21:04:28 +02:00
Bogdan Lyashenko
133963766a Add dim feature for source 2018-08-27 20:57:52 +02:00
Bogdan Lyashenko
77082119cc Add dim feature for source 2018-08-27 20:57:52 +02:00
Bogdan Lyashenko
31f4a4a37e Fix styles for top container 2018-08-27 20:42:22 +02:00
Bogdan Lyashenko
357a957afd Fix styles for top container 2018-08-27 20:42:22 +02:00
Bogdan Lyashenko
fdc2c8a554 Add dropdown menu 2018-08-27 20:22:01 +02:00
Bogdan Lyashenko
f5c87c1aeb Add dropdown menu 2018-08-27 20:22:01 +02:00
Bogdan Lyashenko
317cf4cb11 Add top bar for path breadcrumbs 2018-08-26 19:07:55 +02:00
Bogdan Lyashenko
0f3e71300f Add top bar for path breadcrumbs 2018-08-26 19:07:55 +02:00
Bogdan Lyashenko
5db767254c Add v shift for mapping dep edges 2018-08-25 19:18:12 +02:00
Bogdan Lyashenko
e5503fcff6 Add v shift for mapping dep edges 2018-08-25 19:18:12 +02:00
Bogdan Lyashenko
0b0e420a5a Refactor dep edges directions 2018-08-25 18:48:04 +02:00
Bogdan Lyashenko
70e24b3d0e Refactor dep edges directions 2018-08-25 18:48:04 +02:00
Bogdan Lyashenko
3b48625597 Dep edges 2018-08-19 19:26:59 +02:00
Bogdan Lyashenko
f499c818da Dep edges 2018-08-19 19:26:59 +02:00
Bogdan Lyashenko
4610f14394 Clean up wepback path 2018-08-18 19:40:13 +02:00
Bogdan Lyashenko
313526207f Clean up wepback path 2018-08-18 19:40:13 +02:00
Bohdan Liashenko
03d1fca234 Merge pull request #1 from Bogdan-Lyashenko/react-svg
React svg
2018-08-18 18:59:11 +02:00
Bohdan Liashenko
3c4acae3bd Merge pull request #1 from Bogdan-Lyashenko/react-svg
React svg
2018-08-18 18:59:11 +02:00
Bogdan Lyashenko
10c38506fa Finish cc tree 2018-08-18 18:35:35 +02:00
Bogdan Lyashenko
0a5e13dc04 Add few moew edges 2018-08-16 19:53:04 +02:00
Bogdan Lyashenko
9672e6b7f0 CC tree 2018-08-16 19:28:13 +02:00
Bogdan Lyashenko
a036070a33 Start moving codecrumbs 2018-08-15 21:00:40 +02:00
Bogdan Lyashenko
02a7dfdde7 Finish dep tree 2018-08-14 19:53:52 +02:00
Bogdan Lyashenko
739756e553 Move dep tree 2018-08-11 21:06:13 +02:00
Bogdan Lyashenko
d633557d30 Migrate source tree 2018-08-11 18:45:01 +02:00
Bogdan Lyashenko
b017014c60 Start refactoring 2018-08-09 19:16:55 +02:00
Bogdan Lyashenko
15a86e4830 Update formatting 2018-08-06 20:54:28 +02:00
Bogdan Lyashenko
86b3cec1e7 Change back test project 2018-08-06 20:24:56 +02:00
Bogdan Lyashenko
e38c6b4916 Layout changes 2018-06-10 16:26:21 +02:00
Bogdan Lyashenko
3acdfa09ae Remove recursion 2018-06-07 21:23:55 +02:00
Bogdan Lyashenko
1f5324a975 Refactoring 2018-06-07 21:12:48 +02:00
Bogdan Lyashenko
10d1ea5983 Fix m statte 2018-06-05 21:31:38 +02:00
Bogdan Lyashenko
a7605b589c Add hidden buttons 2018-06-05 19:56:25 +02:00
Bogdan Lyashenko
e5945e48dd Add show all depencdencies button 2018-06-04 21:24:03 +02:00
Bogdan Lyashenko
313c3b577b Add depencdencies limiter 2018-06-04 20:58:49 +02:00
Bogdan Lyashenko
d2e1866582 Add collapse expand actions 2018-06-03 19:01:31 +02:00
Bogdan Lyashenko
277bcd2759 Add close buttons 2018-06-02 21:10:52 +02:00
Bogdan Lyashenko
3223dcad66 Add sort of folders 2018-06-02 18:28:15 +02:00
Bogdan Lyashenko
cb93fded6c Update icon 2018-06-02 17:46:05 +02:00
Bogdan Lyashenko
2ef0ad78e1 Add sagas, closed folders 2018-06-02 11:48:20 +02:00
Bogdan Lyashenko
a88446478e Add all details check 2018-05-31 21:37:45 +02:00
Bogdan Lyashenko
fdcf280630 Fix popover 2018-05-31 20:02:57 +02:00
Bogdan Lyashenko
617d809569 Refactor tree diagram props 2018-05-31 19:38:06 +02:00
Bogdan Lyashenko
fa317e6518 Add sub switches 2018-05-30 21:53:06 +02:00
Bogdan Lyashenko
97cf0b346e Fix layout 2018-05-30 20:28:04 +02:00
Bogdan Lyashenko
beb34935a2 Add hjs 2018-05-29 22:07:09 +02:00
Bogdan Lyashenko
268687f6c3 Add hjs 2018-05-29 22:04:43 +02:00
Bogdan Lyashenko
12f5742c59 Add pop over 2018-05-27 20:54:04 +02:00
Bogdan Lyashenko
dac52c2b8b Add side bar 2018-05-27 20:37:19 +02:00
Bogdan Lyashenko
7c742dc880 Add shared set util 2018-05-27 18:45:43 +02:00
Bogdan Lyashenko
d66136e7bf Add sets 2018-05-27 15:19:22 +02:00
Bogdan Lyashenko
69fe1fd412 Add should update for cc 2018-05-27 13:19:21 +02:00
Bogdan Lyashenko
a943e4f946 Add names rednering for disabled source 2018-05-26 11:29:21 +02:00
Bogdan Lyashenko
5924cad2db Add data bus component 2018-05-26 11:03:44 +02:00
Bogdan Lyashenko
e12e658b56 Add redux 2018-05-25 22:01:35 +02:00
Bogdan Lyashenko
b8f03fd2ac Improve edge rendering for single nodes 2018-05-24 21:20:46 +02:00
Bogdan Lyashenko
9be8790052 Refactor diagram trees 2018-05-24 20:27:41 +02:00
Bogdan Lyashenko
fb8efe91aa Add loc displaying in codecrumbs 2018-05-22 21:26:58 +02:00
Bogdan Lyashenko
4437d60cf8 Add code crumbs tree 2018-05-21 21:10:01 +02:00
Bogdan Lyashenko
697282f6ef Add dependencies style fixes 2018-05-20 20:07:09 +02:00
Bogdan Lyashenko
5b0c720c4f Add dependencies fraph 2018-05-20 17:29:24 +02:00
Bogdan Lyashenko
a97a132320 Add Dependencies tree switch 2018-05-19 11:50:31 +02:00
Bogdan Lyashenko
2be239d1fe Add opacity fix for text 2018-05-17 21:37:31 +02:00
Bogdan Lyashenko
96ea6c0a92 Add svg layers. Dependencies graph 2018-05-17 21:23:50 +02:00
Bogdan Lyashenko
417b291f1f Fix folder icon size 2018-05-15 21:22:19 +02:00
Bogdan Lyashenko
f66af6c706 Refactired source graph 2018-05-15 21:19:02 +02:00
Bogdan Lyashenko
8b83889659 Align graph 2018-05-14 20:45:33 +02:00
Bogdan Lyashenko
aba076cf36 Add files watch 2018-05-12 20:52:19 +02:00
Bogdan Lyashenko
1838d3c26f Add tralling comment support 2018-05-10 14:20:17 +02:00
Bogdan Lyashenko
37a7901f5d Add webpack dependencies tree 2018-05-10 12:37:49 +02:00
Bogdan Lyashenko
2fef514437 Add switchers 2018-05-08 21:40:26 +02:00
Bogdan Lyashenko
437a32cb2b Refactoring: added dsit for ui, moved statics to fs in server 2018-05-08 20:40:33 +02:00
Bogdan Lyashenko
d66b71d0a1 Add UI lib 2018-05-07 20:39:50 +02:00
Bogdan Lyashenko
63516582cc Add react 2018-05-06 20:52:28 +02:00
Bogdan Lyashenko
cc30bd0a08 Add tree layout builder and svg 2018-05-06 14:12:10 +02:00
Bogdan Lyashenko
50af09ba70 Add codecrumbs parsing 2018-05-03 19:54:01 +02:00
Bogdan Lyashenko
11bcc10137 Remove debugger 2018-05-02 21:07:57 +02:00
Bogdan Lyashenko
dfc54b7b00 Add parsing 2018-05-02 21:05:07 +02:00
Bogdan Lyashenko
58bfbf0703 Add files structure reading 2018-05-01 21:07:11 +02:00
Bogdan Lyashenko
c22fe03bf3 Merge branch 'master' of https://github.com/Bogdan-Lyashenko/codecrumbs 2018-05-01 17:06:33 +02:00
Bogdan Lyashenko
caae675135 First commit 2018-05-01 17:04:23 +02:00
Bohdan Liashenko
bc0eff5c55 Initial commit 2018-05-01 17:00:36 +02:00
370 changed files with 10245 additions and 91600 deletions

8
.editorconfig Normal file
View File

@@ -0,0 +1,8 @@
root = true
[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

9
.gitignore vendored
View File

@@ -1,6 +1,15 @@
# Dependency directory
node_modules
# Build directories
src/public/dist/local/bundle/
build/
# example for dev
# example-project
# Remove some common IDE working directories
.idea
.DS_STORE
yarn.lock

5
.npmignore Normal file
View File

@@ -0,0 +1,5 @@
.idea
example-project
docs
src/public/js
build

11
Dockerfile Normal file
View File

@@ -0,0 +1,11 @@
FROM node:14-slim
WORKDIR /usr/src/codecrumbs
COPY package*.json ./
RUN yarn install
COPY . .
EXPOSE 2018 3018

42
LICENSE
View File

@@ -1,21 +1,29 @@
MIT License
BSD 3-Clause License
Copyright (c) 2018 Bohdan Liashenko
Copyright (c) 2019, Bohdan Liashenko
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

171
README.md
View File

@@ -1,2 +1,169 @@
# codecrumbs
Leave "breadcrumbs" in source code via comments to find your way out from code maze
[![npm version](https://badge.fury.io/js/codecrumbs.svg)](https://badge.fury.io/js/codecrumbs) [![Open Source Love](https://badges.frapsoft.com/os/v2/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) [<img src="https://img.shields.io/twitter/follow/bliashenko.svg?label=Stay%20Tuned&style=social">](https://twitter.com/bliashenko)
<p align="center">
<img src="/docs/logo-sm.png" width="250"/>
</p>
<h3 align="center">
<a href="#what">What</a>
<span> · </span>
<a href="#demo">Demo</a>
<span> · </span>
<a href="#get-started">Get started</a>
<span> · </span>
<a href="#features">Features</a>
<span> · </span>
<a href="#case-studies">Case studies</a>
<span> · </span>
<a href="#support">Support</a>
</h3>
**Have you ever got lost in a big or unknown codebase?** This tool will help you to solve that. Also, it will increase your development speed and give more knowledge about your application architecture.
> If you like this project, follow me on Twitter [@bliashenko](https://twitter.com/bliashenko) to hear about things I am building.
## Codecrumbs v2
Check out new version of this project as [standalone application](https://codecrumbs.io). Just in a few clicks you can start exploring a codebase in more efficient way, create interactive visual guides and share them with others on your own blog! See [quick guide here](https://codecrumbs.io/guides/web-app-with-github/).
<p align="center">
<a href="https://codecrumbs.io" target="_blank">
<img src="https://codecrumbs.io/external/img/common/app-ui-1.png" />
</a>
</p>
## Demo
Check out prepared example for [**standalone version running here**](https://codecrumbs.io/app).
## Codecrumbs v1
>**How it works?** You run `codecrumbs` command for a codebase, it analyzes source code and builds its visual representation. Write down a codecrumb-comment and codebase state will be reflected by visual client in browser on the fly.
>
> Check out [my talk at React-Finland](https://www.youtube.com/watch?v=S_1-1jzLxm4) for more details.
<img src="/docs/main-ui-3.png" width="100%"/>
## Get started
### Install and run
>Pre-condition: update/install `NodeJS` version to be >= *8.11.1*
1) Install ```codecrumbs``` globally (```yarn global add codecrumbs```)
2) Run ```codecrumbs -d project-src-dir -e project-src-dir/index.js```. Change parameters to match your project:```-d``` is *directory with source code*, ```-e``` is *entry point file* .
3) Go to [http://localhost:2018](http://localhost:2018/#) in the browser to check it out.
### Configuration
Run codecrumbs with CLI params or specify static config file `codecrumbs.config.js` (see example [here](/example-project/codecrumbs.config.js))
CLI | Config file | Description | Example
--- | --- | --- | ---
```d``` | ```projectDir``` | Relative path to project source code directory | ```-d src```
```e``` | ```entryPoint``` | Relative path to project source entry point file (must be inside ```dir```) | ```-e src/app.js```
```x``` | ```excludeDir``` | Relative path(or paths separated by ```,```) to directories for exclusion | ```-x src/doc,src/thirdparty```
```p``` | ```clientPort``` | Port for Codecrumbs client (optional, default *2018*) | ```-p 2019```
```n``` | ```projectNameAlias``` | Project name alias (optional, default same as ```-d``` value) | ```-n my-hello-world```
```C``` | - | Path to codecrumbs.config.js (optional, by default will try to find the file in PWD) | ```-C config/codecrumbs.config.js```
```D``` | ```debugModeEnabled``` | Enable debug mode for logs (optional, default is ```false```) | ```-D```
## Features
### Breadcrumbs and trails
<img src="/docs/cc-ui-3.png" width="750"/>
UI explained:
- enable "Codecrumbs" switch to have codecrumbs tree on the scheme (drop-down contains extra configuration)
- choose "current" codecrumbs trail to display (can be either trail or all other "simple" codecrumbs)
- select connection between two steps (code for two codecrumbs will be opened in "Sidebar" under "Crumbs" tab)
- set other options in dropdowns to configure behaviour of the diagram (show code blocks, details, etc.)
**How to get there?**
Leave breadcrumb in code by writing down a comment: ```//cc:[parameters;]```.
```cc``` (stands for "CodeCrumb") is a prefix which used by the parser; check example of parameters in the table below:
Example | Description | Use case
--- | --- | ---
```//cc:remember place``` | simple breadcrumb, ```remember place``` is a title of our first breadcrumb | Mark an important place to not forget where it was
```//cc:here is bug;well, seems like a bug in logic``` | simple breadcrumb, ```well, seems like a bug in logic``` is details for breadcrumb, separated by ```;``` | Add extra information, will be rendered in popups
```//cc:signin#3;enable route``` | trail of breadcrumbs,```signin``` is the **trail ID**, ```#3``` is order **number of step**, ```enable route``` is a title describing the step. | A sequence of codecrumbs, use to describe some data flow (e.g. user login, or form submit, etc.).
```//cc:signin#1;firebase sign in;+2;do call to firebase with credentials``` | trail of breadcrumbs,```+2``` is number of lines to highlight, separated by ```;``` | Use number of lines to highlight the code related to breadcrumb
> Note: current version supports single line comments only.
> Hint: you can use trail id without step number (e.g. ```//cc:groupname#;test```) just to group breadcrumbs, you always can add step numbers later when you know the correct order.
### Multi-codebase integration
You might be interested to study connections between several codebases (sub-modules), codecrumbs supports that.
Simply start codecrumbs multiple times (once for each codebase), it all **will be synced in one picture** inside the browser tab. To control a diagram UI - select it by clicking on it.
E.g. for client-server application, go to the source directory for your server code and run `codecrumbs -e your-server-src/index.py -d your-server-src`, same for client `codecrumbs -e src-client/index.js -d src-client`.
> **Note:** codebases can be located wherever you want (**no** need to have them like mono-repo, etc.), simply run `codecrumbs` for directory you need.
<img src="/docs/multi-codebase-cc-2.png" width="100%"/>
### Multi-language support
Current version supports next programming languages:
- `C#`
- `C++`
- `Fortran`
- `Go`
- `Haskell`
- `Java`
- `JavaScript`
- `Kotlin`
- `PHP`
- `Python`
- `Ruby`
- `TypeScript`
Please file an issue to support other language you would like to have.
### Dependencies
> Note: In current version only [JavaScript, TypeScript] offer this feature
<img src="/docs/dep-ui-2.png" width="100%"/>
UI explained:
- enable "Dependencies" switch
- select connection between modules (all involved files will be opened in "Sidebar", so you can see “what is imported” and “its implementation”)
### Flowchart
> Note: In current version only JavaScript offers this feature
<img src="/docs/flow-ui.png" width="100%"/>
[js2flowchart](https://github.com/Bogdan-Lyashenko/js-code-to-svg-flowchart) is used in the sidebar to draw flowchart for the selected file code.
## Support
Any support is very much appreciated! 👍 😘 ❤️
If you like this project, please, **put a :star: and tweet about it**. Thanks!
Please, consider [making financial donation](https://opencollective.com/codecrumbs), it will help further development of more cool features! We'll thank you by including your name/company logo here ☺️. Feel free to [ping me](https://www.linkedin.com/in/bohdan-liashenko-bb365854/) for discussion.
<a href="https://opencollective.com/codecrumbs/donate" target="_blank">
<img src="https://opencollective.com/codecrumbs/donate/button@2x.png?color=blue" width=300 />
</a>
#### Sponsors
Development supported by [0+X](https://0x.se)
<a href="https://0x.se" target="_blank">
<img src="https://avatars0.githubusercontent.com/u/16350669?s=200&v=4" width=100 />
</a>
#### Backers
<a href="https://opencollective.com/codecrumbs/backer/0/website" target="_blank"><img src="https://opencollective.com/codecrumbs/backer/0/avatar.svg"></a>
<a href="https://opencollective.com/codecrumbs/backer/1/website" target="_blank"><img src="https://opencollective.com/codecrumbs/backer/1/avatar.svg"></a>
<a href="https://opencollective.com/codecrumbs/sponsor/0/website" target="_blank"><img src="https://opencollective.com/codecrumbs/sponsor/0/avatar.svg"></a>
## Contribute
When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the [owner](https://github.com/Bogdan-Lyashenko/) of this repository before making a change. Ideas and suggestions are welcome.
To start development environment, clone the repo & run:
```javascript
yarn && yarn start
```
## WIP
Next features are developing:
- **VS Code extension** - some neat features right inside the code editor. Checkout [the repo here](https://github.com/Bogdan-Lyashenko/vs-code-codecrumbs).

1
_config.yml Normal file
View File

@@ -0,0 +1 @@
theme: jekyll-theme-cayman

57
cli/index.cli.js Executable file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env node
const path = require('path');
const program = require('commander');
const colors = require('colors');
const _ = require('lodash');
const showUpdatesInfo = require('./updatesInfo');
const server = require('../src/server');
showUpdatesInfo();
program
.option('-e, --entry [entryPoint]', 'Specify path to entry point file. E.g. `src/app.js`')
.option('-d, --dir [projectDir]', 'Specify path to project source code directory. E.g. `src`', '')
.option(
'-w, --webpack [webpackConfigFile]',
'Specify path to webpack config file. E.g. webpack.config.js'
)
.option(
'-t, --tsconfig [tsConfigFile]',
'Specify path to typeScript config file. E.g. tsConfig.json'
)
.option('-p, --port [defaultPort]', 'Specify port for Codecrumbs client. E.g. 3333', 2018)
.option('-i, --ideCmd [ideCmd]', 'IDE command to open file')
.option('-x, --excludeDir [excludeDirectories]', 'Exclude directories')
.option('-n, --projectName [projectNameAlias]', 'Project name alias')
.option('-C, --configFile [pathToConfigFile]', 'Path to codecrumbs.config.js')
.option('-D, --debugModeEnabled [debugModeEnabled]', 'Enable debug mode for logs.')
.parse(process.argv);
const pathToConfigFile = program.configFile || 'codecrumbs.config.js';
const configFileExists = server.checkIfPathExists(pathToConfigFile);
if ((!program.entry || !program.dir) && !configFileExists) {
console.log(
colors.magenta(
'Please specify `entryPoint` and `projectDir` params (e.g. `codecrumbs -e src/app.js -d src`). Or use `-C codecrumbs.config.js` instead.'
)
);
process.exit();
}
const configFromFile = configFileExists ? require(path.resolve(pathToConfigFile)) : {};
const configFromCLI = {
projectNameAlias: program.projectName,
entryPoint: program.entry,
projectDir: program.dir,
webpackConfigPath: program.webpack,
tsConfigPath: program.tsconfig,
clientPort: program.port,
excludeDir: program.excludeDir,
ideCmd: program.ideCmd,
debugModeEnabled: program.debugModeEnabled
};
server.setup(_.merge(configFromCLI, configFromFile), { isDev: false });

20
cli/updatesInfo.js Normal file
View File

@@ -0,0 +1,20 @@
const colors = require('colors');
const exec = require('child_process').exec;
module.exports = () => {
try {
exec('npm outdated codecrumbs').stdout.on('data', function(data) {
const list = data
.split(' ')
.filter(v => !!v)
.map(v => v.trim());
const latestVersion = list[list.length - 2];
console.log(
colors.cyan.underline(
`There is new version of codecrumbs (${latestVersion}) available! Please update to have all latest features and improvements!`
)
);
});
} catch (e) {}
};

3
commitlint.config.js Normal file
View File

@@ -0,0 +1,3 @@
module.exports = {
extends: ['@commitlint/config-conventional']
};

BIN
docs/cc-ui-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
docs/dep-ui-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
docs/dev.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

BIN
docs/flow-ui.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
docs/ide-integration.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

BIN
docs/live-changes.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 MiB

BIN
docs/logo-sm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
docs/main-ui-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

View File

@@ -0,0 +1,7 @@
module.exports = {
entryPoint: 'example-project/src-client/index.js',
projectDir: 'example-project/src-client',
clientPort: 1234,
projectNameAlias: 'example-project-for-client',
debugModeEnabled: true
};

View File

@@ -1,3 +0,0 @@
import move from '../zoom/move';
export default () => Promise.resolve({ data: [] });

View File

@@ -0,0 +1 @@
//cc:debug#0;step 0

View File

@@ -0,0 +1 @@
//cc:debug#2;step 2

View File

@@ -0,0 +1,3 @@
//cc:debug#4;step 4
//cc:debug#1;step 1

View File

@@ -0,0 +1 @@
//cc:debug#3;step 3

View File

View File

View File

@@ -1,10 +0,0 @@
import tabs from './views/tabs';
import dataModel from './dataModel/model';
const App = {
init() {
tabs.render(); //cc:render;CallLong line check out tabs.js for more details
}
};
App.init();

View File

@@ -0,0 +1,9 @@
#include <iostream>
using namespace std;
//cc:main function
int main()
{
cout << "Hello, World!";
return 0;
}

View File

@@ -0,0 +1,16 @@
//cc:main function
using System;
namespace HelloWorld
{
class Hello
{
static void Main()
{
Console.WriteLine("Hello World!");
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}

View File

@@ -0,0 +1,4 @@
! cc: main function
program hello
print *, "Hello World!"
end program hello

View File

@@ -0,0 +1,7 @@
package main
import "fmt"
// cc:main function
func main() {
fmt.Println("hello world")
}

View File

@@ -0,0 +1,2 @@
-- cc:main function
putStrLn "Hello, world!"

View File

@@ -0,0 +1,9 @@
public class HelloWorld {
//cc: main function
public static void main(String[] args) {
// Prints "Hello, World" to the terminal window.
System.out.println("Hello, World");
}
}

View File

@@ -0,0 +1,4 @@
//cc:main function
function greeting() {
console.log('Hello world!');
}

View File

@@ -0,0 +1,5 @@
//cc:main function
fun main(args : Array<String>) {
println("Hello, World!")
}

View File

@@ -0,0 +1,2 @@
-- hello world program
print ("Hello World!")

View File

@@ -0,0 +1,2 @@
/* cc:main function */
let hello = () => "Hello, World!";

View File

@@ -0,0 +1,7 @@
#!/usr/bin/perl
use strict;
use warnings;
# cc: main function.
print "Hello, World!\n";

View File

@@ -0,0 +1,5 @@
<?php
//cc:main function
echo "Hello World!";
echo "PHP is so easy!";
?>

View File

@@ -0,0 +1,10 @@
import sys
# cc:main function
def main(argv=None):
if argv is None:
argv = sys.argv
print "Hello, world"
return

View File

@@ -0,0 +1,3 @@
# cc:main function
puts 'Hello, world!'

View File

@@ -0,0 +1,4 @@
//cc:main function
function greeting() {
console.log('Hello world!');
}

View File

@@ -0,0 +1,6 @@
export const INIT_AUTH = 'INIT_AUTH';
export const SIGN_IN_ERROR = 'SIGN_IN_ERROR';
export const SIGN_IN_SUCCESS = 'SIGN_IN_SUCCESS';
export const SIGN_OUT_SUCCESS = 'SIGN_OUT_SUCCESS';

View File

@@ -0,0 +1,72 @@
import firebase from 'firebase';
import { firebaseAuth } from '../firebase';
import {
INIT_AUTH,
SIGN_IN_ERROR,
SIGN_IN_SUCCESS,
SIGN_OUT_SUCCESS
} from './action-types';
function authenticate(provider) {
return dispatch => {
//cc:signin#1;firebase sign in;+1;call to firebase with auth provider, proceed if success response
firebaseAuth.signInWithPopup(provider)
.then(result => dispatch(signInSuccess(result)))
.catch(error => dispatch(signInError(error)));
};
}
export function initAuth(user) {
return {
type: INIT_AUTH,
payload: user
};
}
export function signInError(error) {
return {
type: SIGN_IN_ERROR,
payload: error
};
}
export function signInSuccess(result) {
return {
type: SIGN_IN_SUCCESS,
payload: result.user
};
}
export function signInWithGithub() {
return authenticate(new firebase.auth.GithubAuthProvider());
}
export function signInWithGoogle() {
return authenticate(new firebase.auth.GoogleAuthProvider());
}
export function signInWithTwitter() {
return authenticate(new firebase.auth.TwitterAuthProvider());
}
export function signOut() {
return dispatch => {
firebaseAuth.signOut()
.then(() => dispatch(signOutSuccess()));
};
}
export function signOutSuccess() {
return {
type: SIGN_OUT_SUCCESS
};
}

View File

@@ -0,0 +1,16 @@
import { firebaseAuth } from '../firebase';
import * as authActions from './actions';
export function initAuth(dispatch) {
return new Promise((resolve, reject) => {
const unsubscribe = firebaseAuth.onAuthStateChanged(
authUser => {
dispatch(authActions.initAuth(authUser));
unsubscribe();
resolve();
},
error => reject(error)
);
});
}

View File

@@ -0,0 +1,8 @@
import * as authActions from './actions';
export { authActions };
export * from './action-types';
export { initAuth } from './auth';
export { authReducer } from './reducer';
export { getAuth, isAuthenticated } from './selectors';

View File

@@ -0,0 +1,26 @@
import { Record } from 'immutable';
import { INIT_AUTH, SIGN_IN_SUCCESS, SIGN_OUT_SUCCESS } from './action-types';
export const AuthState = new Record({
authenticated: false,
id: null
});
export function authReducer(state = new AuthState(), {payload, type}) {
switch (type) {
case INIT_AUTH:
case SIGN_IN_SUCCESS:
return state.merge({
authenticated: !!payload, //cc:signin#5;toggle 'authenticated' flag
id: payload ? payload.uid : null
});
case SIGN_OUT_SUCCESS:
return new AuthState();
default:
return state;
}
}

View File

@@ -0,0 +1,16 @@
import { createSelector } from 'reselect';
export function isAuthenticated(state) {
return getAuth(state).authenticated;
}
//=====================================
// MEMOIZED SELECTORS
//-------------------------------------
export const getAuth = createSelector(
state => state.auth,
auth => auth.toJS()
);

View File

@@ -0,0 +1,7 @@
//cc:firebase config;and some details
export const firebaseConfig = {
apiKey: 'AIzaSyBsVVpEDrlNPEmshLcmOuE0FxhjPn0AqMg',
authDomain: 'todo-react-redux.firebaseapp.com',
databaseURL: 'https://todo-react-redux.firebaseio.com',
storageBucket: 'firebase-todo-react-redux.appspot.com'
};

View File

@@ -0,0 +1,86 @@
import { firebaseDb } from './firebase';
export class FirebaseList {
constructor(actions, modelClass, path = null) {
this._actions = actions;
this._modelClass = modelClass;
this._path = path;
}
get path() {
return this._path;
}
set path(value) {
this._path = value;
}
push(value) {
return new Promise((resolve, reject) => {
firebaseDb.ref(this._path)
.push(value, error => error ? reject(error) : resolve());
});
}
remove(key) {
return new Promise((resolve, reject) => {
firebaseDb.ref(`${this._path}/${key}`)
.remove(error => error ? reject(error) : resolve());
});
}
set(key, value) {
return new Promise((resolve, reject) => {
firebaseDb.ref(`${this._path}/${key}`)
.set(value, error => error ? reject(error) : resolve());
});
}
update(key, value) {
return new Promise((resolve, reject) => {
firebaseDb.ref(`${this._path}/${key}`)
.update(value, error => error ? reject(error) : resolve());
});
}
subscribe(emit) {
let ref = firebaseDb.ref(this._path);
let initialized = false;
let list = [];
ref.once('value', () => {
initialized = true;
emit(this._actions.onLoad(list));
});
ref.on('child_added', snapshot => {
if (initialized) {
emit(this._actions.onAdd(this.unwrapSnapshot(snapshot)));
}
else {
list.push(this.unwrapSnapshot(snapshot));
}
});
ref.on('child_changed', snapshot => {
emit(this._actions.onChange(this.unwrapSnapshot(snapshot)));
});
ref.on('child_removed', snapshot => {
emit(this._actions.onRemove(this.unwrapSnapshot(snapshot)));
});
this._unsubscribe = () => ref.off();
}
unsubscribe() {
this._unsubscribe();
}
unwrapSnapshot(snapshot) {
let attrs = snapshot.val();
attrs.key = snapshot.key;
return new this._modelClass(attrs);
}
}

View File

@@ -0,0 +1,10 @@
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/database';
import { firebaseConfig } from './config';
export const firebaseApp = firebase.initializeApp(firebaseConfig);
export const firebaseAuth = firebase.auth();
export const firebaseDb = firebase.database();

View File

@@ -0,0 +1,2 @@
export { firebaseApp, firebaseAuth, firebaseDb } from './firebase';
export { FirebaseList } from './firebase-list';

View File

@@ -0,0 +1,4 @@
import createHistory from 'history/createBrowserHistory';
export default createHistory();

View File

@@ -0,0 +1,44 @@
import './views/styles/styles.css';
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { ConnectedRouter } from 'react-router-redux';
import { initAuth } from './auth';
import history from './history';
import configureStore from './store';
import registerServiceWorker from './utils/register-service-worker';
import App from './views/app';
const store = configureStore();
const rootElement = document.getElementById('root');
//cc:layout#0;start
function render(Component) {
ReactDOM.render(
<Provider store={store}>
<ConnectedRouter history={history}>
<div>
<Component/>
</div>
</ConnectedRouter>
</Provider>,
rootElement
);
}
if (module.hot) {
module.hot.accept('./views/app', () => {
render(require('./views/app').default);
})
}
registerServiceWorker();
initAuth(store.dispatch)
.then(() => render(App))
.catch(error => console.error(error));

View File

@@ -0,0 +1 @@
export const DISMISS_NOTIFICATION = 'DISMISS_NOTIFICATION';

View File

@@ -0,0 +1,8 @@
import { DISMISS_NOTIFICATION } from './action-types';
export function dismissNotification() {
return {
type: DISMISS_NOTIFICATION
};
}

View File

@@ -0,0 +1,7 @@
import * as notificationActions from './actions';
export { notificationActions };
export * from './action-types';
export { notificationReducer } from './reducer';
export { getNotification } from './selectors';

View File

@@ -0,0 +1,28 @@
import { Record } from 'immutable';
import { REMOVE_TASK_SUCCESS } from '../tasks';
import { DISMISS_NOTIFICATION } from './action-types';
export const NotificationState = new Record({
actionLabel: '',
display: false,
message: ''
});
export function notificationReducer(state = new NotificationState(), action) {
switch (action.type) {
case REMOVE_TASK_SUCCESS:
return state.merge({
actionLabel: 'Undo',
display: true,
message: 'Task deleted'
});
case DISMISS_NOTIFICATION:
return new NotificationState();
default:
return new NotificationState();
}
}

View File

@@ -0,0 +1,3 @@
export function getNotification(state) {
return state.notification;
}

View File

@@ -0,0 +1,13 @@
import { routerReducer } from 'react-router-redux';
import { combineReducers } from 'redux';
import { authReducer } from './auth';
import { notificationReducer } from './notification';
import { tasksReducer } from './tasks';
export default combineReducers({
auth: authReducer,
notification: notificationReducer,
routing: routerReducer,
tasks: tasksReducer
});

View File

@@ -0,0 +1,27 @@
import { routerMiddleware } from 'react-router-redux';
import { applyMiddleware, compose, createStore } from 'redux';
import thunk from 'redux-thunk';
import history from './history';
import reducers from './reducers';
export default (initialState = {}) => {
let middleware = applyMiddleware(thunk, routerMiddleware(history));
if (process.env.NODE_ENV !== 'production') {
const devToolsExtension = window.devToolsExtension;
if (typeof devToolsExtension === 'function') {
middleware = compose(middleware, devToolsExtension());
}
}
const store = createStore(reducers, initialState, middleware);
if (module.hot) {
module.hot.accept('./reducers', () => {
store.replaceReducer(require('./reducers').default);
});
}
return store;
};

View File

@@ -0,0 +1,14 @@
export const CREATE_TASK_ERROR = 'CREATE_TASK_ERROR';
export const CREATE_TASK_SUCCESS = 'CREATE_TASK_SUCCESS';
export const REMOVE_TASK_ERROR = 'REMOVE_TASK_ERROR';
export const REMOVE_TASK_SUCCESS = 'REMOVE_TASK_SUCCESS';
export const UNDELETE_TASK_ERROR = 'UNDELETE_TASK_ERROR';
export const UPDATE_TASK_ERROR = 'UPDATE_TASK_ERROR';
export const UPDATE_TASK_SUCCESS = 'UPDATE_TASK_SUCCESS';
export const FILTER_TASKS = 'FILTER_TASKS';
export const LOAD_TASKS_SUCCESS = 'LOAD_TASKS_SUCCESS';
export const UNLOAD_TASKS_SUCCESS = 'UNLOAD_TASKS_SUCCESS';

View File

@@ -0,0 +1,124 @@
import { getDeletedTask } from './selectors';
import { taskList } from './task-list';
import {
CREATE_TASK_ERROR,
CREATE_TASK_SUCCESS,
REMOVE_TASK_ERROR,
REMOVE_TASK_SUCCESS,
FILTER_TASKS,
LOAD_TASKS_SUCCESS,
UNDELETE_TASK_ERROR,
UNLOAD_TASKS_SUCCESS,
UPDATE_TASK_ERROR,
UPDATE_TASK_SUCCESS
} from './action-types';
export function createTask(title) {
return dispatch => {
taskList.push({completed: false, title})
.catch(error => dispatch(createTaskError(error)));
};
}
export function createTaskError(error) {
return {
type: CREATE_TASK_ERROR,
payload: error
};
}
export function createTaskSuccess(task) {
return {
type: CREATE_TASK_SUCCESS,
payload: task
};
}
export function removeTask(task) {
return dispatch => {
taskList.remove(task.key)
.catch(error => dispatch(removeTaskError(error)));
};
}
export function removeTaskError(error) {
return {
type: REMOVE_TASK_ERROR,
payload: error
};
}
export function removeTaskSuccess(task) {
return {
type: REMOVE_TASK_SUCCESS,
payload: task
};
}
export function undeleteTask() {
return (dispatch, getState) => {
const task = getDeletedTask(getState());
if (task) {
taskList.set(task.key, {completed: task.completed, title: task.title})
.catch(error => dispatch(undeleteTaskError(error)));
}
};
}
export function undeleteTaskError(error) {
return {
type: UNDELETE_TASK_ERROR,
payload: error
};
}
export function updateTaskError(error) {
return {
type: UPDATE_TASK_ERROR,
payload: error
};
}
export function updateTask(task, changes) {
return dispatch => {
taskList.update(task.key, changes)
.catch(error => dispatch(updateTaskError(error)));
};
}
export function updateTaskSuccess(task) {
return {
type: UPDATE_TASK_SUCCESS,
payload: task
};
}
export function loadTasksSuccess(tasks) {
return {
type: LOAD_TASKS_SUCCESS,
payload: tasks
};
}
export function filterTasks(filterType) {
return {
type: FILTER_TASKS,
payload: {filterType}
};
}
export function loadTasks() {
return (dispatch, getState) => {
const { auth } = getState();
taskList.path = `tasks/${auth.id}`;
taskList.subscribe(dispatch);
};
}
export function unloadTasks() {
taskList.unsubscribe();
return {
type: UNLOAD_TASKS_SUCCESS
};
}

View File

@@ -0,0 +1,8 @@
import * as tasksActions from './actions';
export { tasksActions };
export * from './action-types';
export { tasksReducer } from './reducer';
export { getTaskFilter, getVisibleTasks } from './selectors';
export { Task } from './task';

View File

@@ -0,0 +1,59 @@
import { List, Record } from 'immutable';
import { SIGN_OUT_SUCCESS } from '../auth/action-types';
import {
CREATE_TASK_SUCCESS,
REMOVE_TASK_SUCCESS,
FILTER_TASKS,
LOAD_TASKS_SUCCESS,
UPDATE_TASK_SUCCESS
} from './action-types';
export const TasksState = new Record({
deleted: null,
filter: '',
list: new List(),
previous: null
});
export function tasksReducer(state = new TasksState(), {payload, type}) {
switch (type) {
case CREATE_TASK_SUCCESS:
return state.merge({
deleted: null,
previous: null,
list: state.deleted && state.deleted.key === payload.key ?
state.previous :
state.list.unshift(payload)
});
case REMOVE_TASK_SUCCESS:
return state.merge({
deleted: payload,
previous: state.list,
list: state.list.filter(task => task.key !== payload.key)
});
case FILTER_TASKS:
return state.set('filter', payload.filterType || '');
case LOAD_TASKS_SUCCESS:
return state.set('list', new List(payload.reverse()));
case UPDATE_TASK_SUCCESS:
return state.merge({
deleted: null,
previous: null,
list: state.list.map(task => {
return task.key === payload.key ? payload : task;
})
});
case SIGN_OUT_SUCCESS:
return new TasksState();
default:
return state;
}
}

View File

@@ -0,0 +1,40 @@
import { createSelector } from 'reselect';
export function getTasks(state) {
return state.tasks;
}
export function getTaskList(state) {
return getTasks(state).list;
}
export function getTaskFilter(state) {
return getTasks(state).filter;
}
export function getDeletedTask(state) {
return getTasks(state).deleted;
}
//=====================================
// MEMOIZED SELECTORS
//-------------------------------------
export const getVisibleTasks = createSelector(
getTaskList,
getTaskFilter,
(tasks, filter) => {
switch (filter) {
case 'active':
return tasks.filter(task => !task.completed);
case 'completed':
return tasks.filter(task => task.completed);
default:
return tasks;
}
}
);

View File

@@ -0,0 +1,11 @@
import { FirebaseList } from '../firebase';
import * as taskActions from './actions';
import { Task } from './task';
export const taskList = new FirebaseList({
onAdd: taskActions.createTaskSuccess,
onChange: taskActions.updateTaskSuccess,
onLoad: taskActions.loadTasksSuccess,
onRemove: taskActions.removeTaskSuccess
}, Task);

View File

@@ -0,0 +1,8 @@
import { Record } from 'immutable';
export const Task = new Record({
completed: false,
key: null,
title: null
});

View File

@@ -0,0 +1,22 @@
<template>
<p>{{ greeting }} World!</p>
</template>
<script>
module.exports = {
data: function () {
return {
greeting: 'Hello'
}
}
}
</script>
//cc:test vue
<style scoped>
p {
font-size: 2em;
text-align: center;
}
</style>

View File

@@ -0,0 +1,10 @@
import React from 'react';
import { findRenderedComponentWithType, renderIntoDocument } from 'react-dom/test-utils';
export function createTestComponent(TestComponent, props) {
return findRenderedComponentWithType(
renderIntoDocument(<TestComponent {...props}/>),
TestComponent
);
}

View File

@@ -0,0 +1,97 @@
// In production, we register a service worker to serve assets from local cache.
// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on the "N+1" visit to a page, since previously
// cached resources are updated in the background.
// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
// This link also includes instructions on opting out of this behavior.
const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' ||
// 127.0.0.1/8 is considered localhost for IPv4.
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
);
export default function register() {
const publicUrl = new URL(process.env.PUBLIC_URL, window.location);
if (publicUrl.origin !== window.location.origin) return;
window.addEventListener('load', () => {
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
if (!isLocalhost) {
registerValidSW(swUrl);
} else {
checkValidServiceWorker(swUrl);
}
});
}
function registerValidSW(swUrl) {
navigator.serviceWorker
.register(swUrl)
.then(registration => {
registration.onupdatefound = () => {
const installingWorker = registration.installing;
installingWorker.onstatechange = () => {
if (installingWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
// At this point, the old content will have been purged and
// the fresh content will have been added to the cache.
// It's the perfect time to display a "New content is
// available; please refresh." message in your web app.
console.log('New content is available; please refresh.');
} else {
// At this point, everything has been precached.
// It's the perfect time to display a
// "Content is cached for offline use." message.
console.log('Content is cached for offline use.');
}
}
};
};
})
.catch(error => {
console.error('Error during service worker registration:', error);
});
}
function checkValidServiceWorker(swUrl) {
// Check if the service worker can be found. If it can't reload the page.
fetch(swUrl)
.then(response => {
// Ensure service worker exists, and that we really are getting a JS file.
if (
response.status === 404 ||
response.headers.get('content-type').indexOf('javascript') === -1
) {
// No service worker found. Probably a different app. Reload the page.
navigator.serviceWorker.ready.then(registration => {
registration.unregister().then(() => {
window.location.reload();
});
});
} else {
// Service worker found. Proceed as normal.
registerValidSW(swUrl);
}
})
.catch(() => {
console.log(
'No internet connection found. App is running in offline mode.'
);
});
}
export function unregister() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready.then(registration => {
registration.unregister();
});
}
}

View File

@@ -0,0 +1,50 @@
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
import { authActions, getAuth } from '../../auth';
import Header from '../components/header';
import RequireAuthRoute from '../components/require-auth-route';
import RequireUnauthRoute from '../components/require-unauth-route';
import SignInPage from '../pages/sign-in';
import TasksPage from '../pages/tasks';
//cc:layout#1;describe pages;some details long description for separare popup
const App = ({authenticated, signOut}) => (
<div>
<Header
authenticated={authenticated}
signOut={signOut}
/>
<main>
<RequireAuthRoute authenticated={authenticated} exact path="/" component={TasksPage}/>
<RequireUnauthRoute authenticated={authenticated} path="/sign-in" component={SignInPage}/>
</main>
</div>
);
App.propTypes = {
authenticated: PropTypes.bool.isRequired,
signOut: PropTypes.func.isRequired
};
//=====================================
// CONNECT
//-------------------------------------
const mapStateToProps = getAuth;
const mapDispatchToProps = {
signOut: authActions.signOut
};
//cc:here
export default withRouter(
connect(
mapStateToProps,
mapDispatchToProps
)(App)
);

View File

@@ -0,0 +1 @@
export { default } from './app';

View File

@@ -0,0 +1,25 @@
import React from 'react';
import classNames from 'classnames';
import PropTypes from 'prop-types';
import './button.css';
const Button = ({children, className, onClick, type = 'button'}) => {
const cssClasses = classNames('btn', className);
return (
<button className={cssClasses} onClick={onClick} type={type}>
{children}
</button>
);
};
Button.propTypes = {
children: PropTypes.node,
className: PropTypes.string,
onClick: PropTypes.func,
type: PropTypes.oneOf(['button', 'reset', 'submit'])
};
export default Button;

View File

@@ -0,0 +1,19 @@
@import 'views/styles/shared';
.btn {
@include button-base;
outline: none;
border: 0;
padding: 0;
overflow: hidden;
transform: translate(0, 0);
background: transparent;
}
.btn--icon {
border-radius: 40px;
padding: 8px;
width: 40px;
height: 40px;
}

View File

@@ -0,0 +1 @@
export { default } from './button';

View File

@@ -0,0 +1,10 @@
import React from 'react';
export default function GitHubLogo() {
return (
<svg viewBox="0 0 20 20">
<path d="M10 0C4.5 0 0 4.5 0 10c0 4.4 2.9 8.2 6.8 9.5.5.1.7-.2.7-.5v-1.9c-2.5.5-3.2-.6-3.4-1.1-.1-.3-.6-1.2-1-1.4-.4-.2-.9-.6 0-.7.8 0 1.3.7 1.5 1 .9 1.5 2.4 1.1 3 .9.1-.6.4-1.1.6-1.3-2.2-.3-4.6-1.2-4.6-5 0-1.1.4-2 1-2.7 0-.3-.4-1.3.2-2.7 0 0 .8-.3 2.8 1 .7-.2 1.6-.3 2.4-.3s1.7.1 2.5.3c1.9-1.3 2.8-1 2.8-1 .5 1.4.2 2.4.1 2.7.6.7 1 1.6 1 2.7 0 3.8-2.3 4.7-4.6 4.9.4.3.7.9.7 1.9v2.8c0 .3.2.6.7.5 4-1.3 6.8-5.1 6.8-9.5C20 4.5 15.5 0 10 0z" />
</svg>
);
}

View File

@@ -0,0 +1 @@
export { default } from './github-logo';

View File

@@ -0,0 +1,33 @@
import React from 'react';
import PropTypes from 'prop-types';
import Button from '../button';
import GitHubLogo from '../github-logo';
import './header.css';
const Header = ({authenticated, signOut}) => (
<header className="header">
<div className="g-row">
<div className="g-col">
<h1 className="header__title">Todo React Redux</h1>
<ul className="header__actions">
{authenticated ? <li><Button onClick={signOut}>Sign out</Button></li> : null}
<li>
<a className="link link--github" href="https://github.com/r-park/todo-react-redux">
<GitHubLogo />
</a>
</li>
</ul>
</div>
</div>
</header>
);
Header.propTypes = {
authenticated: PropTypes.bool.isRequired,
signOut: PropTypes.func.isRequired
};
export default Header;

View File

@@ -0,0 +1,73 @@
@import 'views/styles/shared';
.header {
padding: 10px 0;
height: 60px;
overflow: hidden;
line-height: 40px;
}
.header__title {
display: flex;
align-items: center;
float: left;
font-size: rem(14px);
font-weight: 400;
line-height: 40px;
text-rendering: auto;
transform: translate(0,0);
&:before {
display: inline-block;
border: 2px solid #eee;
margin-right: 8px;
border-radius: 100%;
height: 16px;
width: 16px;
content: ' ';
}
}
.header__actions {
@include clearfix;
float: right;
padding: 8px 0;
line-height: 24px;
li {
float: left;
list-style: none;
&:last-child {
margin-left: 12px;
padding-left: 12px;
border-left: 1px solid #333;
}
&:first-child {
border: none;
}
}
.btn {
display: block;
margin: 0;
color: #999;
font-size: rem(14px);
line-height: 24px;
}
.link {
display: block;
fill: #98999a;
transform: translate(0, 0);
}
.link--github {
padding-top: 1px;
width: 22px;
height: 24px;
}
}

View File

@@ -0,0 +1 @@
export { default } from './header';

View File

@@ -0,0 +1,17 @@
import React from 'react';
import classNames from 'classnames';
import PropTypes from 'prop-types';
const Icon = ({className, name}) => {
const cssClasses = classNames('material-icons', className);
return <span className={cssClasses}>{name}</span>;
};
Icon.propTypes = {
className: PropTypes.string,
name: PropTypes.string.isRequired
};
export default Icon;

View File

@@ -0,0 +1 @@
export { default } from './icon';

View File

@@ -0,0 +1 @@
export { default } from './notification';

View File

@@ -0,0 +1,58 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import './notification.css';
class Notification extends Component {
static propTypes = {
action: PropTypes.func.isRequired,
actionLabel: PropTypes.string.isRequired,
dismiss: PropTypes.func.isRequired,
display: PropTypes.bool.isRequired,
duration: PropTypes.number,
message: PropTypes.string.isRequired
};
componentDidMount() {
this.startTimer();
}
componentWillReceiveProps(nextProps) {
if (nextProps.display) {
this.startTimer();
}
}
componentWillUnmount() {
this.clearTimer();
}
clearTimer() {
if (this.timerId) {
clearTimeout(this.timerId);
}
}
startTimer() {
this.clearTimer();
this.timerId = setTimeout(() => {
this.props.dismiss();
}, this.props.duration || 5000);
}
render() {
return (
<div className="notification">
<p className="notification__message" ref={c => this.message = c}>{this.props.message}</p>
<button
className="btn notification__button"
onClick={this.props.action}
ref={c => this.button = c}
type="button">{this.props.actionLabel}</button>
</div>
);
}
}
export default Notification;

View File

@@ -0,0 +1,27 @@
@import 'views/styles/shared';
.notification {
@include clearfix;
position: fixed;
left: 50%;
top: 60px;
margin-left: -100px;
border: 1px solid #aaa;
padding: 10px 15px;
width: 200px;
font-size: rem(16px);
line-height: 24px;
}
.notification__message {
float: left;
}
.notification__button {
float: right;
font-size: rem(16px);
line-height: 24px;
text-transform: uppercase;
color: #85bf6b;
}

View File

@@ -0,0 +1 @@
export { default } from './require-auth-route';

View File

@@ -0,0 +1,22 @@
import React from 'react';
import { Route, Redirect } from 'react-router-dom'
//cc:signin#6;enable route;details
const RequireAuthRoute = ({component: Component, authenticated, ...rest}) => (
<Route
{...rest}
render={props => {
return authenticated ? (
<Component {...props}/>
) : (
<Redirect to={{
pathname: '/sign-in',
state: {from: props.location}
}}/>
)
}}
/>
);
export default RequireAuthRoute;

View File

@@ -0,0 +1 @@
export { default } from './require-unauth-route';

View File

@@ -0,0 +1,22 @@
import React from 'react';
import { Route, Redirect } from 'react-router-dom'
const RequireUnauthRoute = ({component: Component, authenticated, ...rest}) => (
<Route
{...rest}
render={props => {
return authenticated ? (
<Redirect to={{
pathname: '/',
state: {from: props.location}
}}/>
) : (
<Component {...props}/>
)
}}
/>
);
export default RequireUnauthRoute;

View File

@@ -0,0 +1 @@
export { default } from './task-filters';

View File

@@ -0,0 +1,21 @@
import React from 'react';
import PropTypes from 'prop-types';
import { NavLink } from 'react-router-dom';
import './task-filters.css';
const TaskFilters = ({filter}) => (
<ul className="task-filters">
<li><NavLink isActive={() => !filter} to="/">View All</NavLink></li>
<li><NavLink isActive={() => filter === 'active'} to={{pathname: '/', search: '?filter=active'}}>Active</NavLink></li>
<li><NavLink isActive={() => filter === 'completed'} to={{pathname: '/', search: '?filter=completed'}}>Completed</NavLink></li>
</ul>
);
TaskFilters.propTypes = {
filter: PropTypes.string
};
export default TaskFilters;

View File

@@ -0,0 +1,38 @@
@import 'views/styles/shared';
.task-filters {
@include clearfix;
margin-bottom: 45px;
padding-left: 1px;
font-size: rem(16px);
line-height: 24px;
list-style-type: none;
@include media-query(540) {
margin-bottom: 55px;
}
li {
float: left;
&:not(:first-child) {
margin-left: 12px;
}
&:not(:first-child):before {
padding-right: 12px;
content: '/';
font-weight: 300;
}
}
a {
color: #999;
text-decoration: none;
&.active {
color: #fff;
}
}
}

View File

@@ -0,0 +1 @@
export { default } from './task-form';

View File

@@ -0,0 +1,62 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import './task-form.css';
export class TaskForm extends Component {
static propTypes = {
handleSubmit: PropTypes.func.isRequired
};
constructor() {
super(...arguments);
this.state = {title: ''};
this.handleChange = this.handleChange.bind(this);
this.handleKeyUp = this.handleKeyUp.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
clearInput() {
this.setState({title: ''});
}
handleChange(event) {
this.setState({title: event.target.value});
}
handleKeyUp(event) {
if (event.keyCode === 27) this.clearInput();
}
handleSubmit(event) {
event.preventDefault();
const title = this.state.title.trim();
if (title.length) this.props.handleSubmit(title);
this.clearInput();
}
render() {
return (
<form className="task-form" onSubmit={this.handleSubmit} noValidate>
<input
autoComplete="off"
autoFocus
className="task-form__input"
maxLength="64"
onChange={this.handleChange}
onKeyUp={this.handleKeyUp}
placeholder="What needs to be done?"
ref={e => this.titleInput = e}
type="text"
value={this.state.title}
/>
</form>
);
}
}
export default TaskForm;

View File

@@ -0,0 +1,48 @@
@import 'views/styles/shared';
.task-form {
margin: 40px 0 10px;
@include media-query(540) {
margin: 80px 0 20px;
}
}
.task-form__input {
outline: none;
border: 0;
border-bottom: 1px dotted #666;
border-radius: 0;
padding: 0 0 5px 0;
width: 100%;
height: 50px;
font-family: inherit;
font-size: rem(24px);
font-weight: 300;
color: #fff;
background: transparent;
@include media-query(540) {
height: 61px;
font-size: rem(32px);
}
&::placeholder {
color: #999;
opacity: 1; // firefox native placeholder style has opacity < 1
}
&:focus::placeholder {
color: #777;
opacity: 1;
}
// webkit input doesn't inherit font-smoothing from ancestors
-webkit-font-smoothing: antialiased;
// remove `x`
&::-ms-clear {
display: none;
}
}

View File

@@ -0,0 +1 @@
export { default } from './task-item';

View File

@@ -0,0 +1,137 @@
import React, { Component } from 'react';
import classNames from 'classnames';
import PropTypes from 'prop-types';
import Button from '../button';
import Icon from '../icon';
import './task-item.css';
//cc:there is task;extra
export class TaskItem extends Component {
constructor() {
super(...arguments);
this.state = {editing: false};
this.edit = this.edit.bind(this);
this.handleKeyUp = this.handleKeyUp.bind(this);
this.remove = this.remove.bind(this);
this.save = this.save.bind(this);
this.stopEditing = this.stopEditing.bind(this);
this.toggleStatus = this.toggleStatus.bind(this);
}
edit() {
this.setState({editing: true});
}
handleKeyUp(event) {
if (event.keyCode === 13) {
this.save(event);
}
else if (event.keyCode === 27) {
this.stopEditing();
}
}
remove() {
this.props.removeTask(this.props.task);
}
save(event) {
if (this.state.editing) {
const { task } = this.props;
const title = event.target.value.trim();
if (title.length && title !== task.title) {
this.props.updateTask(task, {title});
}
this.stopEditing();
}
}
stopEditing() {
this.setState({editing: false});
}
toggleStatus() {
const { task } = this.props;
this.props.updateTask(task, {completed: !task.completed});
}
renderTitle(task) {
return (
<div className="task-item__title" tabIndex="0">
{task.title}
</div>
);
}
renderTitleInput(task) {
return (
<input
autoComplete="off"
autoFocus
className="task-item__input"
defaultValue={task.title}
maxLength="64"
onKeyUp={this.handleKeyUp}
type="text"
/>
);
}
render() {
const { editing } = this.state;
const { task } = this.props;
let containerClasses = classNames('task-item', {
'task-item--completed': task.completed,
'task-item--editing': editing
});
return (
<div className={containerClasses} tabIndex="0">
<div className="cell">
<Button
className={classNames('btn--icon', 'task-item__button', {'active': task.completed, 'hide': editing})}
onClick={this.toggleStatus}>
<Icon name="done" />
</Button>
</div>
<div className="cell">
{editing ? this.renderTitleInput(task) : this.renderTitle(task)}
</div>
<div className="cell">
<Button
className={classNames('btn--icon', 'task-item__button', {'hide': editing})}
onClick={this.edit}>
<Icon name="mode_edit" />
</Button>
<Button
className={classNames('btn--icon', 'task-item__button', {'hide': !editing})}
onClick={this.stopEditing}>
<Icon name="clear" />
</Button>
<Button
className={classNames('btn--icon', 'task-item__button', {'hide': editing})}
onClick={this.remove}>
<Icon name="delete" />
</Button>
</div>
</div>
);
}
}
TaskItem.propTypes = {
removeTask: PropTypes.func.isRequired,
task: PropTypes.object.isRequired,
updateTask: PropTypes.func.isRequired
};
export default TaskItem;

Some files were not shown because too many files have changed in this diff Show More