Compare commits

...

588 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 ba1cab4fcb 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 d40df8622c 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 578e33eb4b 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 95e0cf5918 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 c8a1f9c3b8 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 23eed87017 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 dce00ac8b2 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 9352424aa7 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
366 changed files with 10271 additions and 97580 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