├── docs ├── search.md ├── concepts │ ├── components.csv │ ├── tech-spec.csv │ └── concepts.csv ├── README.md └── adr │ ├── 0014-sql-for-query.md │ ├── 0017-notion-blockmap-render.md │ ├── 0019-freeboard-with-mxgraph.md │ ├── 0007-quake-server-for-gui-&-tui.md │ ├── 0008-entrysets-for-entry-log-info.md │ ├── 0016-frontmatter-editor-for-fe.md │ ├── 0021-quake-init-with-install-meilisearch.md │ ├── 0002-quick-engine.md │ ├── 0018-calendar-view-api.md │ ├── 0009-indexmap-replace-hashmap-for-order.md │ ├── 0023-contract-design-for-flow.md │ ├── 0010-level-for-directory.md │ ├── 0011-search-engine.md │ ├── 0003-script-language.md │ ├── 0006-custom-editor.md │ ├── 0004-front-matter-design.md │ ├── 0020-flowy-view-for-ideas.md │ ├── 0005-content-&-structure-separate.md │ ├── 0022-flowy-board.md │ ├── 0013-markdown-processor.md │ └── README.md ├── quake_core ├── .gitignore ├── src │ ├── markdown │ │ ├── mod.rs │ │ ├── LICENSE-MIT │ │ └── README.md │ ├── parser │ │ ├── mod.rs │ │ └── errors.rs │ ├── transflow │ │ └── mod.rs │ ├── helper │ │ ├── mod.rs │ │ └── file_filter.rs │ ├── usecases │ │ ├── mod.rs │ │ ├── layout_usecases.rs │ │ └── entry_define_usecases.rs │ ├── errors.rs │ ├── quake_config.rs │ ├── entry │ │ ├── mod.rs │ │ ├── slug.rs │ │ └── entry_node_info.rs │ └── lib.rs ├── README.md ├── _fixtures │ └── transflow │ │ ├── show_calendar.code │ │ ├── get_todos_blogs_with_filter_map_param.code │ │ ├── get_todos_blogs_with_filter.code │ │ ├── get_todos_blogs_with_filter_map.code │ │ └── event_with_calendar.code └── Cargo.toml ├── examples ├── _plugins │ └── .gitkeep ├── _quake │ ├── references │ │ ├── code.yml │ │ ├── roadmap.yml │ │ ├── spike.yml │ │ ├── todo.yml │ │ ├── yiki.yml │ │ ├── bookmark.yml │ │ ├── framework_doc.yml │ │ ├── story.yml │ │ ├── testcases.yml │ │ ├── issue.yml │ │ └── quake_book.yml │ ├── dashboard.layout │ ├── element-define.yml │ ├── transflows.yaml │ └── transfuncs.js ├── code │ ├── entry-node-info.yaml │ ├── entries.csv │ └── 0001-phodal-com-process.md ├── graph │ ├── entry-node-info.yaml │ ├── entries.csv │ └── board │ │ └── 0001.json ├── issue │ ├── entry-node-info.yaml │ ├── entries.csv │ └── 0001-more-content-for-search-results.md ├── papers │ ├── entry-node-info.yaml │ ├── 0002-workflow-engine-spike.md │ ├── entries.csv │ └── 0001-a-system-for-query-analysis-and-visualization-of-multi-dimensional-relational-databases.md ├── roadmap │ ├── entry-node-info.yaml │ ├── entries.csv │ └── 0001-first-mvp.md ├── spike │ ├── entry-node-info.yaml │ ├── 0002-crawl-github-project-info.md │ ├── 0003-webcomponents-for-react-components.md │ ├── entries.csv │ └── 0001-pdf-to-txt.md ├── story │ ├── entry-node-info.yaml │ ├── 0010-crawl-links.md │ ├── 0015-dockerfile-for-auto-deploy.md │ ├── 0014-watch-dir-&-feed-to-searchengine.md │ ├── 0008-add-images-support.md │ ├── 0013-infinite-scroll-for-dashboard.md │ ├── 0023-create-quake-loging-attribute.md │ ├── 0011-custom-path-for-entry.md │ ├── 0021-make-transflow-in-auto-suggest-api.md │ ├── 0004-flowy-item.md │ ├── 0005-navigator-for-webapp.md │ ├── 0038-thinking-in-remove-of-entry.md │ ├── 0018-tql-for-search-query.md │ ├── 0007-migration-.quake.yaml-to-quake.toml.md │ ├── 0003-page-link-support.md │ ├── 0012-replace-search-api-with-entries-list-csv.md │ ├── 0041-build-check-for-startup.md │ ├── 0006-monorep-with-nxjs.md │ ├── 0027-create-web-componet-core-api.md │ ├── 0029-deploy-to-github-pages-as-demo.md │ ├── 0032-quake-links-as-a-entry-type-for-data.md │ ├── 0016-timeline-for-annual-review.md │ ├── 0042-transflow-support-for-password-manager.md │ ├── 0030-dump-data-for-github-pages.md │ ├── 0002-quake-render-for-entry.md │ ├── 0034-element-define-support-for-transflow-inheritance.md │ ├── 0020-search-rule-'filterableattributes'-by-entry-type.md │ ├── 0025-chinese-table-of-content-parser.md │ ├── 0001-typeform-for-entry-field.md │ ├── 0031-heading-support-for-pagelink.md │ ├── 0028-scripts-for-auto-offline-deps.md │ ├── 0024-pagelink-storage.md │ ├── 0036-auto-generate-pdf-papers-to-entry.md │ ├── 0019-filter-for-flow-codegen.md │ ├── 0026-transflow-support-httphttps-api-and-fetch-next.md │ └── 0009-pdf-spike.md ├── todo │ ├── entry-node-info.yaml │ ├── entries.csv │ └── 0001-time-support.md ├── yiki │ ├── entry-node-info.yaml │ ├── 0002-知识管理元框架.md │ ├── 0001-概念知识容量.md │ └── entries.csv ├── bookmark │ ├── entry-node-info.yaml │ ├── entries.csv │ └── 0001-the-infinite-game.md ├── quake_book │ ├── entry-node-info.yaml │ ├── 0008-quake-server-api.md │ ├── 0005-custom-quake-component.md │ ├── entries.csv │ └── 0002-setup.md ├── testcases │ ├── entry-node-info.yaml │ ├── entries.csv │ ├── 0001-pagelink.md │ └── 0002-test-embed-links-html.md └── framework_doc │ ├── entry-node-info.yaml │ └── entries.csv ├── quake_webapp ├── packages │ ├── .gitkeep │ ├── README.md │ ├── calendar │ │ ├── README.md │ │ ├── src │ │ │ └── react-app-env.d.ts │ │ ├── .editorconfig │ │ ├── config-overrides.js │ │ ├── .gitignore │ │ ├── tsconfig.json │ │ └── public │ │ │ └── index.html │ ├── timeline │ │ ├── README.md │ │ ├── src │ │ │ ├── react-app-env.d.ts │ │ │ └── QuakeTimeline.tsx │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── tsconfig.json │ │ ├── config-overrides.js │ │ └── public │ │ │ └── index.html │ └── quake-viewer │ │ ├── README.md │ │ ├── src │ │ └── react-app-env.d.ts │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── config-overrides.js │ │ ├── tsconfig.json │ │ └── public │ │ └── index.html ├── .npmrc ├── tsconfig.base.json ├── quake-board │ ├── src │ │ ├── types.ts │ │ ├── react-app-env.d.ts │ │ ├── setupTests.ts │ │ └── components │ │ │ ├── base-model │ │ │ ├── DiamondPortModel.ts │ │ │ ├── DiamondNodeFactory.tsx │ │ │ └── DiamondNodeModel.ts │ │ │ ├── SimplePortFactory.ts │ │ │ └── concept │ │ │ ├── ConceptNodeFactory.tsx │ │ │ ├── ConceptNodeModel.tsx │ │ │ └── Editor.tsx │ ├── public │ │ ├── robots.txt │ │ ├── favicon.ico │ │ └── manifest.json │ ├── docs │ │ └── README.md │ ├── .editorconfig │ ├── config-overrides.js │ ├── .gitignore │ ├── tsconfig.json │ └── README.md ├── quake-editor │ ├── src │ │ ├── types.ts │ │ ├── react-app-env.d.ts │ │ └── setupTests.ts │ ├── public │ │ ├── robots.txt │ │ ├── favicon.ico │ │ └── manifest.json │ ├── README.md │ ├── .editorconfig │ ├── config-overrides.js │ ├── .gitignore │ ├── tsconfig.json │ └── package.json ├── dashboard │ ├── src │ │ ├── index.ts │ │ ├── components │ │ │ ├── entry-card │ │ │ │ ├── entry-card.css │ │ │ │ └── readme.md │ │ │ ├── entry-list │ │ │ │ ├── entry-list.css │ │ │ │ ├── readme.md │ │ │ │ └── entry-list.tsx │ │ │ ├── simple-layout │ │ │ │ ├── simple-layout.css │ │ │ │ └── readme.md │ │ │ ├── utils │ │ │ │ ├── PadLeft.ts │ │ │ │ └── DateFormat.ts │ │ │ ├── quake-dashboard │ │ │ │ ├── quake-dashboard.css │ │ │ │ ├── readme.md │ │ │ │ ├── quake-core-wrapper.ts │ │ │ │ ├── quake-dashboard.spec.ts │ │ │ │ └── quake-dashboard.e2e.ts │ │ │ └── fetch-api │ │ │ │ └── readme.md │ │ └── index.html │ ├── .editorconfig │ ├── .prettierrc.json │ ├── .gitignore │ ├── tsconfig.json │ ├── stencil.config.ts │ ├── LICENSE │ └── package.json ├── quake-kbar │ ├── src │ │ ├── react-app-env.d.ts │ │ └── setupTests.ts │ ├── public │ │ ├── robots.txt │ │ ├── favicon.ico │ │ └── manifest.json │ ├── .editorconfig │ ├── config-overrides.js │ ├── .gitignore │ ├── tsconfig.json │ └── README.md ├── quake-render │ ├── src │ │ ├── index.ts │ │ ├── components │ │ │ ├── graph-bar │ │ │ │ ├── graph-bar.css │ │ │ │ └── readme.md │ │ │ ├── graph-line │ │ │ │ ├── graph-line.css │ │ │ │ └── readme.md │ │ │ ├── graph-transflow │ │ │ │ ├── graph-transflow.css │ │ │ │ ├── graph-transflow.tsx │ │ │ │ └── readme.md │ │ │ ├── embed-link │ │ │ │ ├── embed-link.css │ │ │ │ ├── test │ │ │ │ │ ├── embed-link.e2e.ts │ │ │ │ │ └── embed-link.spec.tsx │ │ │ │ ├── readme.md │ │ │ │ └── embed-link.tsx │ │ │ ├── graph-network │ │ │ │ ├── graph-network.css │ │ │ │ └── readme.md │ │ │ ├── data-grid │ │ │ │ ├── data-grid.css │ │ │ │ └── readme.md │ │ │ └── quake-render │ │ │ │ └── readme.md │ │ └── markdown │ │ │ ├── quake-down.spec.ts │ │ │ └── quake-down.type.ts │ ├── .editorconfig │ ├── .prettierrc.json │ ├── .gitignore │ ├── stencil.config.ts │ ├── readme.md │ ├── tsconfig.json │ ├── LICENSE │ └── package.json ├── type-creator │ ├── src │ │ ├── index.ts │ │ ├── components │ │ │ └── type-creator │ │ │ │ ├── readme.md │ │ │ │ └── type-creator.css │ │ ├── index.html │ │ └── components.d.ts │ ├── .editorconfig │ ├── .prettierrc.json │ ├── .gitignore │ ├── stencil.config.ts │ ├── tsconfig.json │ ├── LICENSE │ └── package.json ├── .editorconfig ├── .gitignore ├── package.json ├── nx.json └── transflow.lib.js ├── _fixtures ├── demo_quake │ ├── _quake │ │ ├── transfuncs.js │ │ ├── element-define.yml │ │ ├── references │ │ │ └── todo.yml │ │ └── dashboard.layout │ ├── todo │ │ ├── entry-node-info.yaml │ │ ├── entries.csv │ │ └── 0001-time-support.md │ ├── .quake.yaml │ └── entries-define.yaml ├── configs │ └── .quake.yaml ├── codegen │ ├── todos_element.js │ └── todos_blogs.js ├── transflows │ └── transflows.yaml └── import_test │ └── todo.json ├── quake_gui ├── .taurignore ├── .gitignore ├── src-tauri │ ├── build.rs │ ├── icons │ │ └── icon.png │ ├── .gitignore │ ├── src │ │ └── main.rs │ └── Cargo.toml ├── public │ └── yew.png ├── .vscode │ ├── settings.json │ └── extensions.json ├── src │ └── main.rs ├── Trunk.toml ├── index.html ├── README.md └── Cargo.toml ├── quake_tui ├── README.md ├── Cargo.toml └── src │ ├── ui.rs │ └── lib.rs ├── static_dump ├── transflow │ └── script │ │ └── custom_transfuncs.js ├── entry │ ├── defines │ └── todo │ │ └── 1 ├── action │ └── suggest ├── indexes │ └── todo │ │ └── search ├── references │ └── todo.json └── layout │ └── dashboard ├── .adr.json ├── libs ├── quake_processor │ ├── README.md │ ├── _fixtures │ │ └── Test_PDF.pdf │ ├── .gitignore │ ├── src │ │ ├── lib.rs │ │ ├── pdf_processor.rs │ │ └── process_engine.rs │ └── Cargo.toml ├── quake_importer │ ├── test_temp │ │ └── .gitignore │ ├── Cargo.toml │ ├── src │ │ └── onenote.rs │ └── README.md └── README.md ├── src ├── cli │ ├── helper │ │ ├── content_process.rs │ │ ├── mod.rs │ │ └── table_process.rs │ └── mod.rs ├── helper │ ├── exec_wrapper │ │ ├── mod.rs │ │ ├── editor_exec.rs │ │ └── exec_runner.rs │ └── mod.rs ├── usecases │ ├── mod.rs │ └── suggest_usecases.rs └── server │ └── layout_api.rs ├── quake_log ├── src │ └── lib.rs └── Cargo.toml ├── quake_gui_old ├── src │ ├── main.rs │ └── lib.rs ├── README.md └── Cargo.toml ├── quake_wasm ├── README.md ├── Cargo.toml └── demo │ └── index.html ├── rust-toolchain.toml ├── nix_config ├── shell.nix ├── flake.nix └── flake.lock ├── .quake.yaml ├── .gitignore ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── web.yml │ ├── lint.yml │ └── build.yml ├── LICENSE └── justfile /docs/search.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /quake_core/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/_plugins/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /quake_webapp/packages/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /quake_webapp/packages/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_fixtures/demo_quake/_quake/transfuncs.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /quake_webapp/packages/calendar/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /quake_webapp/packages/timeline/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /quake_webapp/packages/quake-viewer/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/_quake/references/code.yml: -------------------------------------------------------------------------------- 1 | --- 2 | {} 3 | -------------------------------------------------------------------------------- /examples/_quake/references/roadmap.yml: -------------------------------------------------------------------------------- 1 | --- 2 | {} 3 | -------------------------------------------------------------------------------- /examples/_quake/references/spike.yml: -------------------------------------------------------------------------------- 1 | --- 2 | {} 3 | -------------------------------------------------------------------------------- /examples/_quake/references/todo.yml: -------------------------------------------------------------------------------- 1 | --- 2 | {} 3 | -------------------------------------------------------------------------------- /examples/_quake/references/yiki.yml: -------------------------------------------------------------------------------- 1 | --- 2 | {} 3 | -------------------------------------------------------------------------------- /quake_gui/.taurignore: -------------------------------------------------------------------------------- 1 | /src 2 | /public 3 | /Cargo.toml -------------------------------------------------------------------------------- /quake_tui/README.md: -------------------------------------------------------------------------------- 1 | # Quake TUI 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static_dump/transflow/script/custom_transfuncs.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/_quake/references/bookmark.yml: -------------------------------------------------------------------------------- 1 | --- 2 | {} 3 | -------------------------------------------------------------------------------- /examples/code/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 3 3 | -------------------------------------------------------------------------------- /examples/graph/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 1 3 | -------------------------------------------------------------------------------- /examples/issue/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 1 3 | -------------------------------------------------------------------------------- /examples/papers/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 2 3 | -------------------------------------------------------------------------------- /examples/roadmap/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 1 3 | -------------------------------------------------------------------------------- /examples/spike/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 4 3 | -------------------------------------------------------------------------------- /examples/story/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 42 3 | -------------------------------------------------------------------------------- /examples/todo/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 1 3 | -------------------------------------------------------------------------------- /examples/yiki/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 2 3 | -------------------------------------------------------------------------------- /quake_webapp/.npmrc: -------------------------------------------------------------------------------- 1 | strict-peer-dependencies=false 2 | -------------------------------------------------------------------------------- /examples/_quake/references/framework_doc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | {} 3 | -------------------------------------------------------------------------------- /examples/bookmark/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 3 3 | -------------------------------------------------------------------------------- /examples/quake_book/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 8 3 | -------------------------------------------------------------------------------- /examples/testcases/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 2 3 | -------------------------------------------------------------------------------- /quake_gui/.gitignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | /target/ 3 | /Cargo.lock 4 | -------------------------------------------------------------------------------- /.adr.json: -------------------------------------------------------------------------------- 1 | {"language":"en","path":"docs/adr/","prefix":"","digits":4} -------------------------------------------------------------------------------- /_fixtures/demo_quake/todo/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 1 3 | -------------------------------------------------------------------------------- /examples/framework_doc/entry-node-info.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | index: 1 3 | -------------------------------------------------------------------------------- /libs/quake_processor/README.md: -------------------------------------------------------------------------------- 1 | # Processor 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /quake_webapp/tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": {} 3 | } -------------------------------------------------------------------------------- /src/cli/helper/content_process.rs: -------------------------------------------------------------------------------- 1 | pub struct FileContentProcess {} 2 | -------------------------------------------------------------------------------- /libs/quake_importer/test_temp/.gitignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | !.gitignore 3 | 4 | -------------------------------------------------------------------------------- /quake_log/src/lib.rs: -------------------------------------------------------------------------------- 1 | trait Logger { 2 | fn info(_str: String) {} 3 | } 4 | -------------------------------------------------------------------------------- /src/cli/helper/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod content_process; 2 | pub mod table_process; 3 | -------------------------------------------------------------------------------- /docs/concepts/components.csv: -------------------------------------------------------------------------------- 1 | type,code,description,notes 2 | 数据表格化,table_data,, 3 | -------------------------------------------------------------------------------- /quake_gui/src-tauri/build.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | tauri_build::build() 3 | } 4 | -------------------------------------------------------------------------------- /quake_gui_old/src/main.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | // launch(); 3 | () 4 | } 5 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/types.ts: -------------------------------------------------------------------------------- 1 | export type TocMenuItem = { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/src/types.ts: -------------------------------------------------------------------------------- 1 | export type TocMenuItem = { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/index.ts: -------------------------------------------------------------------------------- 1 | export { Components, JSX } from './components'; 2 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/index.ts: -------------------------------------------------------------------------------- 1 | export { Components, JSX } from './components'; 2 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/src/index.ts: -------------------------------------------------------------------------------- 1 | export { Components, JSX } from './components'; 2 | -------------------------------------------------------------------------------- /quake_gui/public/yew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/quake/HEAD/quake_gui/public/yew.png -------------------------------------------------------------------------------- /quake_webapp/packages/calendar/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /quake_webapp/packages/timeline/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/entry-card/entry-card.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/entry-list/entry-list.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /quake_webapp/packages/quake-viewer/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /quake_gui/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "emmet.includeLanguages": { 3 | "rust": "html" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /quake_wasm/README.md: -------------------------------------------------------------------------------- 1 | # Rust WASM 2 | 3 | > provide Quake core API for Web api in Web. 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-bar/graph-bar.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-line/graph-line.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /src/helper/exec_wrapper/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod editor_exec; 2 | mod exec_runner; 3 | pub(crate) mod meili_exec; 4 | -------------------------------------------------------------------------------- /quake_core/src/markdown/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod entry_reference; 2 | pub mod md_processor; 3 | pub mod references; 4 | -------------------------------------------------------------------------------- /quake_core/src/parser/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod ast; 2 | pub mod errors; 3 | pub mod quake; 4 | pub mod quake_parser; 5 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/simple-layout/simple-layout.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /quake_gui/src-tauri/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/quake/HEAD/quake_gui/src-tauri/icons/icon.png -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-transflow/graph-transflow.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /quake_gui/src-tauri/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/helper/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod entry_watcher; 2 | pub mod exec_wrapper; 3 | pub mod search_config; 4 | pub mod watcher_rule; 5 | -------------------------------------------------------------------------------- /quake_gui/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] 3 | } 4 | -------------------------------------------------------------------------------- /quake_gui/src/main.rs: -------------------------------------------------------------------------------- 1 | mod app; 2 | 3 | use app::App; 4 | 5 | fn main() { 6 | yew::Renderer::::new().render(); 7 | } 8 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/quake/HEAD/quake_webapp/quake-kbar/public/favicon.ico -------------------------------------------------------------------------------- /_fixtures/demo_quake/.quake.yaml: -------------------------------------------------------------------------------- 1 | workspace: "." 2 | search_url: "http://127.0.0.1:7700" 3 | server_location: "dist" 4 | editor: vim 5 | -------------------------------------------------------------------------------- /examples/roadmap/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","created_date","updated_date" 2 | 1,"first mvp","2021-12-07 21:19:14","2021-12-07 21:19:14" 3 | -------------------------------------------------------------------------------- /libs/quake_processor/_fixtures/Test_PDF.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/quake/HEAD/libs/quake_processor/_fixtures/Test_PDF.pdf -------------------------------------------------------------------------------- /quake_webapp/quake-board/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/quake/HEAD/quake_webapp/quake-board/public/favicon.ico -------------------------------------------------------------------------------- /quake_webapp/quake-editor/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phodal/quake/HEAD/quake_webapp/quake-editor/public/favicon.ico -------------------------------------------------------------------------------- /quake_core/src/transflow/mod.rs: -------------------------------------------------------------------------------- 1 | pub use flow::Transflow; 2 | 3 | pub mod element_define; 4 | pub mod flow; 5 | pub mod js_flow_codegen; 6 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/embed-link/embed-link.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | background: rgb(244,244,244); 4 | } 5 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "stable" 3 | components = ["rustfmt", "clippy", "llvm-tools-preview"] 4 | profile = "minimal" 5 | -------------------------------------------------------------------------------- /libs/quake_processor/.gitignore: -------------------------------------------------------------------------------- 1 | _fixtures/oopsla16-spreadsheet.pdf 2 | _fixtures/samples.pdf 3 | samples.txt 4 | _fixtures/polaris.pdf 5 | *.txt 6 | -------------------------------------------------------------------------------- /libs/quake_processor/src/lib.rs: -------------------------------------------------------------------------------- 1 | extern crate lopdf; 2 | extern crate pdf_extract; 3 | 4 | pub mod pdf_processor; 5 | pub mod process_engine; 6 | -------------------------------------------------------------------------------- /docs/concepts/tech-spec.csv: -------------------------------------------------------------------------------- 1 | type,code,description,notes 2 | 托盘,tray,在系统的状态栏中可访问系统的状态, 3 | 搜索框,search_box,用于搜索功能, 4 | 守护进程,daemon,后台运行, 5 | 分词,participle,, -------------------------------------------------------------------------------- /examples/todo/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","author","created_date","updated_date" 2 | 1,"time support","","2021-11-24 19:14:10","2021-11-24 19:14:10" 3 | -------------------------------------------------------------------------------- /_fixtures/configs/.quake.yaml: -------------------------------------------------------------------------------- 1 | workspace: "test_dir" 2 | search_url: "http://127.0.0.1:7700" 3 | server_location: "quake_webapp" 4 | editor: 5 | port: 9999 6 | -------------------------------------------------------------------------------- /_fixtures/demo_quake/todo/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","author","created_date","updated_date" 2 | 1,"time support","","2021-11-24 19:14:10","2021-11-24 19:14:10" 3 | -------------------------------------------------------------------------------- /quake_core/src/helper/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod file_filter; 2 | pub mod quake_time; 3 | 4 | pub use file_filter::filter_by_prefix; 5 | pub use quake_time::date_now; 6 | -------------------------------------------------------------------------------- /examples/graph/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","file","created_date","updated_date" 2 | 1,"init board data","board/0001.json","2022-01-14 08:32:51","2022-01-14 08:32:51" 3 | -------------------------------------------------------------------------------- /examples/framework_doc/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","created_date","updated_date","category" 2 | 1,"meilisearch","2021-12-07 21:18:03","2021-12-07 21:18:03","search engine" 3 | -------------------------------------------------------------------------------- /quake_core/src/usecases/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod entry_define_usecases; 2 | pub mod entry_usecases; 3 | pub mod entrysets; 4 | pub mod flow_usecases; 5 | pub mod layout_usecases; 6 | -------------------------------------------------------------------------------- /quake_gui_old/README.md: -------------------------------------------------------------------------------- 1 | # Quake gui 2 | 3 | ## Technical Spike 4 | 5 | - React integration: [dioxus-react-example](https://github.com/Eliot00/dioxus-react-example) 6 | -------------------------------------------------------------------------------- /src/usecases/mod.rs: -------------------------------------------------------------------------------- 1 | pub(crate) mod generate_usecases; 2 | pub(crate) mod processor_usecases; 3 | pub(crate) mod reference_usecases; 4 | pub(crate) mod suggest_usecases; 5 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/README.md: -------------------------------------------------------------------------------- 1 | # Editor 2 | 3 | to webcomponents: https://levelup.gitconnected.com/convert-existing-react-components-intowebcomponents-2b33b842ff9a 4 | 5 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-network/graph-network.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | 5 | .chart { 6 | width: 500px; 7 | height: 500px; 8 | } 9 | -------------------------------------------------------------------------------- /examples/yiki/0002-知识管理元框架.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 知识管理元框架 3 | author: Phodal HUANG 4 | created_date: 2021-11-30 20:25:23 5 | updated_date: 2021-12-01 11:08:40 6 | --- 7 | 8 | 允许自定义字段 9 | -------------------------------------------------------------------------------- /static_dump/entry/defines: -------------------------------------------------------------------------------- 1 | {"entries":[{"type":"todo","display":"","properties":[{"title":"Title"},{"author":"String"},{"content":"Body"},{"created_date":"Date"},{"updated_date":"Date"}]}]} -------------------------------------------------------------------------------- /quake_gui/Trunk.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | target = "./index.html" 3 | 4 | [watch] 5 | ignore = ["./src-tauri"] 6 | 7 | [serve] 8 | address = "127.0.0.1" 9 | port = 1420 10 | open = false 11 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Docs 2 | 3 | ## AppFlowy.IO 4 | 5 | ⭐️ The Open Source Notion Alternative ⭐️ 6 | 7 | [https://github.com/AppFlowy-IO/appflowy](https://github.com/AppFlowy-IO/appflowy) 8 | 9 | -------------------------------------------------------------------------------- /examples/story/0010-crawl-links.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: crawl links 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2021-12-03 13:02:42 7 | updated_date: 2021-12-03 13:02:42 8 | --- 9 | -------------------------------------------------------------------------------- /examples/todo/0001-time-support.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: time support 3 | author: 4 | content: 5 | created_date: 2021-11-24 19:14:10 6 | updated_date: 2021-11-24 19:14:10 7 | --- 8 | 9 | ahaha 10 | -------------------------------------------------------------------------------- /examples/yiki/0001-概念知识容量.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 概念知识容量表 3 | author: Phodal HUANG 4 | created_date: 2021-11-25 10:14:26 5 | updated_date: 2021-11-25 10:14:26 6 | --- 7 | 8 | 一个概念下,所能承载的知识量是有限的,所以要继续往下拆分。 9 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/utils/PadLeft.ts: -------------------------------------------------------------------------------- 1 | function padLeft(nr, n = 4, str) { 2 | return Array(n - String(nr).length + 1).join(str || '0') + nr; 3 | } 4 | 5 | export default padLeft; 6 | -------------------------------------------------------------------------------- /examples/testcases/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","created_date","updated_date" 2 | 1,"pagelink","2021-12-14 12:56:27","2021-12-14 12:56:27" 3 | 2,"test embed links html","2021-12-14 17:15:36","2021-12-14 17:15:36" 4 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/utils/DateFormat.ts: -------------------------------------------------------------------------------- 1 | import dayjs from "dayjs"; 2 | 3 | function format(str) { 4 | return dayjs(str * 1000).format('YYYY-MM-DD'); 5 | } 6 | 7 | export default format; 8 | -------------------------------------------------------------------------------- /examples/papers/0002-workflow-engine-spike.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: workflow engine spike 3 | file: pdca/Presto_SQL_on_Everything.pdf 4 | created_date: 2021-12-30 21:21:25 5 | updated_date: 2021-12-30 21:21:25 6 | --- 7 | -------------------------------------------------------------------------------- /static_dump/action/suggest: -------------------------------------------------------------------------------- 1 | {"entries":[{"type":"todo","display":"","properties":[{"title":"Title"},{"author":"String"},{"content":"Body"},{"created_date":"Date"},{"updated_date":"Date"}]}],"actions":["add","edit","show"]} -------------------------------------------------------------------------------- /static_dump/entry/todo/1: -------------------------------------------------------------------------------- 1 | {"title":"time support","author":"","created_date":"1637781250","updated_date":"1637781250","type":"todo","id":1,"content":"\n\nahaha\n\n[[todo:0001 \"links\"]]\n\n[[note:0002#Demo \"title\"]]\n"} -------------------------------------------------------------------------------- /examples/story/0015-dockerfile-for-auto-deploy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: dockerfile for auto deploy 3 | author: 4 | status: Todo 5 | priority: Low 6 | created_date: 2021-12-04 20:09:31 7 | updated_date: 2021-12-04 20:09:31 8 | --- 9 | -------------------------------------------------------------------------------- /examples/yiki/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","author","created_date","updated_date" 2 | 1,"概念知识容量表","Phodal HUANG","2021-11-25 10:14:26","2021-11-25 10:14:26" 3 | 2,"知识管理元框架","Phodal HUANG","2021-11-30 20:25:23","2021-12-01 11:08:40" 4 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/data-grid/data-grid.css: -------------------------------------------------------------------------------- 1 | @import '~ag-grid-community/dist/styles/ag-grid.css'; 2 | @import '~ag-grid-community/dist/styles/ag-theme-alpine.css'; 3 | 4 | :host { 5 | display: block; 6 | } 7 | -------------------------------------------------------------------------------- /static_dump/indexes/todo/search: -------------------------------------------------------------------------------- 1 | [{"title":"time support","author":"","created_date":"1637781250","updated_date":"1637781250","type":"todo","id":1,"content":"\n\nahaha\n\n[[todo:0001 \"links\"]]\n\n[[note:0002#Demo \"title\"]]\n"}] -------------------------------------------------------------------------------- /examples/_quake/references/story.yml: -------------------------------------------------------------------------------- 1 | --- 2 | "0003": 3 | source_type: story 4 | source_id: "0003" 5 | source_title: page link support 6 | references: 7 | - entry_type: "" 8 | entry_id: "" 9 | entry_title: "" 10 | -------------------------------------------------------------------------------- /examples/spike/0002-crawl-github-project-info.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: crawl GitHub project info 3 | author: 4 | content: 5 | done_by: 6 | created_date: 2021-12-02 10:21:37 7 | updated_date: 2021-12-02 10:21:37 8 | --- 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /examples/story/0014-watch-dir-&-feed-to-searchengine.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: watch dir & feed to searchengine 3 | author: Phodal 4 | status: Done 5 | priority: High 6 | created_date: 2021-12-04 15:19:45 7 | updated_date: 2021-12-04 15:19:45 8 | --- 9 | -------------------------------------------------------------------------------- /examples/_quake/references/testcases.yml: -------------------------------------------------------------------------------- 1 | --- 2 | "0001": 3 | source_type: testcases 4 | source_id: "0001" 5 | source_title: pagelink 6 | references: 7 | - entry_type: issue 8 | entry_id: "0001" 9 | entry_title: demo 10 | -------------------------------------------------------------------------------- /examples/story/0008-add-images-support.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: add images support 3 | author: 4 | status: Todo 5 | priority: Low 6 | created_date: 2021-12-03 13:01:43 7 | updated_date: 2021-12-03 13:01:43 8 | --- 9 | 10 | 11 | as title 12 | 13 | -------------------------------------------------------------------------------- /examples/story/0013-infinite-scroll-for-dashboard.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Infinite Scroll for Dashboard 3 | author: 4 | status: Done 5 | priority: High 6 | created_date: 2021-12-04 14:46:38 7 | updated_date: 2021-12-04 14:46:38 8 | --- 9 | 10 | -------------------------------------------------------------------------------- /examples/quake_book/0008-quake-server-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: quake server api 3 | created_date: 2022-01-23 13:02:50 4 | updated_date: 2022-01-23 13:02:50 5 | order: 6 | author: 7 | --- 8 | 9 | 10 | API: 11 | 12 | /entry/defines 13 | 14 | 15 | -------------------------------------------------------------------------------- /examples/story/0023-create-quake-loging-attribute.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: create quake loging attribute 3 | author: 4 | status: Doing 5 | priority: Low 6 | created_date: 2021-12-14 08:19:59 7 | updated_date: 2021-12-14 08:19:59 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/entry-list/readme.md: -------------------------------------------------------------------------------- 1 | # entry-list 2 | 3 | 4 | 5 | 6 | 7 | 8 | ---------------------------------------------- 9 | 10 | *Built with [StencilJS](https://stenciljs.com/)* 11 | -------------------------------------------------------------------------------- /quake_core/README.md: -------------------------------------------------------------------------------- 1 | # Transflow 2 | 3 | 4 | # Chart 5 | 6 | 7 | ### One 8 | 9 | chart 10 | .from('blog', 'todo') // source 11 | .select('') 12 | .chart('bar') 13 | .config(~json~) // optional 14 | 15 | ### Multiple 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /examples/issue/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","assignee","created_by","status","description","attachements","link","created_date","updated_date","priority" 2 | 1,"more content for search results","","Phodal","","","","","2021-12-09 15:25:33","2021-12-09 15:25:33","Low" 3 | -------------------------------------------------------------------------------- /examples/story/0011-custom-path-for-entry.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: custom path for entry 3 | author: 4 | status: Todo 5 | priority: Low 6 | created_date: 2021-12-03 16:49:36 7 | updated_date: 2021-12-03 16:49:36 8 | --- 9 | 10 | add config to entries define. 11 | -------------------------------------------------------------------------------- /static_dump/references/todo.json: -------------------------------------------------------------------------------- 1 | {"0001":{"source_type":"todo","source_id":"0001","source_title":"time support","references":[{"entry_type":"todo","entry_id":"0001","entry_title":"links"},{"entry_type":"note","entry_id":"0002","entry_title":"title","section":"Demo"}]}} -------------------------------------------------------------------------------- /examples/story/0021-make-transflow-in-auto-suggest-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: make transflow in auto_suggest api 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2021-12-08 23:39:40 7 | updated_date: 2021-12-08 23:39:40 8 | --- 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /_fixtures/demo_quake/_quake/element-define.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: quake-calendar 3 | events: [] 4 | attributes: 5 | - name: data 6 | data_properties: 7 | - title: String 8 | - content: String 9 | - created_date: String 10 | - updated_date: String 11 | -------------------------------------------------------------------------------- /_fixtures/demo_quake/todo/0001-time-support.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: time support 3 | author: 4 | content: 5 | created_date: 2021-11-24 19:14:10 6 | updated_date: 2021-11-24 19:14:10 7 | --- 8 | 9 | ahaha 10 | 11 | [[todo:0001 "links"]] 12 | 13 | [[note:0002#Demo "title"]] 14 | -------------------------------------------------------------------------------- /examples/story/0004-flowy-item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: flowy item 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-02 17:07:58 7 | updated_date: 2021-12-02 17:34:49 8 | --- 9 | 10 | # show items 11 | 12 | 13 | ```javascript 14 | ``` 15 | 16 | 17 | -------------------------------------------------------------------------------- /examples/story/0005-navigator-for-webapp.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: navigator for webapp 3 | author: 4 | status: Todo 5 | priority: Low 6 | created_date: 2021-12-02 19:45:54 7 | updated_date: 2021-12-02 19:45:54 8 | --- 9 | 10 | replace current home with new UI 11 | 12 | 13 | -------------------------------------------------------------------------------- /examples/story/0038-thinking-in-remove-of-entry.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: thinking in remove of entry 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2022-01-03 10:53:19 7 | updated_date: 2022-01-03 10:53:19 8 | --- 9 | 10 | update index rules? 11 | 12 | 13 | -------------------------------------------------------------------------------- /nix_config/shell.nix: -------------------------------------------------------------------------------- 1 | { pkgs ? import {} }: 2 | 3 | pkgs.mkShell { 4 | buildInputs = with pkgs; [ 5 | pkg-config 6 | openssl 7 | glib 8 | gdk-pixbuf 9 | libsoup 10 | gtk3 11 | webkitgtk 12 | libappindicator 13 | ]; 14 | } 15 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/docs/README.md: -------------------------------------------------------------------------------- 1 | # Spike 2 | 3 | ## Draw.io 4 | 5 | draw.io decode: [https://jgraph.github.io/drawio-tools/tools/convert.html](https://jgraph.github.io/drawio-tools/tools/convert.html) 6 | 7 | sample see in: [draw_io_sample.xml](./draw_io_sample.xml) 8 | -------------------------------------------------------------------------------- /examples/_quake/references/issue.yml: -------------------------------------------------------------------------------- 1 | --- 2 | "0001": 3 | source_type: issue 4 | source_id: "0001" 5 | source_title: more content for search results 6 | references: 7 | - entry_type: framework_doc 8 | entry_id: "0001" 9 | entry_title: meilisearch doc 10 | -------------------------------------------------------------------------------- /examples/code/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","created_date","updated_date" 2 | 1,"Phodal.com Process","2021-12-02 20:06:20","2021-12-02 20:06:20" 3 | 2,"ledge usage","2021-12-02 20:06:20","2021-12-02 20:06:20" 4 | 3,"pulldown markdown processor","2021-12-07 21:16:28","2021-12-07 21:16:28" 5 | -------------------------------------------------------------------------------- /quake_gui/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Tauri + Yew App 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /_fixtures/demo_quake/entries-define.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | entries: 3 | - type: todo 4 | display: "" 5 | properties: 6 | - title: Title 7 | - author: String 8 | - content: Body 9 | - created_date: Date 10 | - updated_date: Date 11 | actions: ~ 12 | -------------------------------------------------------------------------------- /examples/testcases/0001-pagelink.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: pagelink 3 | created_date: 2021-12-14 12:56:27 4 | updated_date: 2021-12-14 12:56:27 5 | --- 6 | 7 | 普通的跳转 8 | 9 | some_link [[issue:0001 "demo"]] fdas 10 | 11 | 这是一个新的套娃。 12 | 13 | ![[framework_doc:0001 "demo"]] 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/adr/0014-sql-for-query.md: -------------------------------------------------------------------------------- 1 | # 14. sql for query 2 | 3 | Date: 2021-11-29 4 | 5 | ## Status 6 | 7 | 2021-11-29 proposed 8 | 9 | ## Context 10 | 11 | Context here... 12 | 13 | ## Decision 14 | 15 | Decision here... 16 | 17 | ## Consequences 18 | 19 | Consequences here... 20 | -------------------------------------------------------------------------------- /examples/story/0018-tql-for-search-query.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: tql for search query 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2021-12-05 16:53:58 7 | updated_date: 2021-12-05 16:53:58 8 | --- 9 | 10 | 11 | create a simple Query for custom search 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /libs/README.md: -------------------------------------------------------------------------------- 1 | # Handling Documents Processing 2 | 3 | ## Docx to TXT 4 | 5 | GitHub: https://github.com/anvie/dotext 6 | 7 | ## PDF to TXT 8 | 9 | GitHub: https://github.com/jrmuizel/pdf-extract 10 | 11 | ## Media File 12 | 13 | GitHub: https://github.com/zmwangx/metadata 14 | 15 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /docs/adr/0017-notion-blockmap-render.md: -------------------------------------------------------------------------------- 1 | # 17. notion blockmap render 2 | 3 | Date: 2021-11-30 4 | 5 | ## Status 6 | 7 | 2021-11-30 proposed 8 | 9 | ## Context 10 | 11 | Context here... 12 | 13 | ## Decision 14 | 15 | Decision here... 16 | 17 | ## Consequences 18 | 19 | Consequences here... 20 | -------------------------------------------------------------------------------- /docs/adr/0019-freeboard-with-mxgraph.md: -------------------------------------------------------------------------------- 1 | # 19. freeboard with mxgraph 2 | 3 | Date: 2021-11-30 4 | 5 | ## Status 6 | 7 | 2021-11-30 proposed 8 | 9 | ## Context 10 | 11 | Context here... 12 | 13 | ## Decision 14 | 15 | Decision here... 16 | 17 | ## Consequences 18 | 19 | Consequences here... 20 | -------------------------------------------------------------------------------- /examples/story/0007-migration-.quake.yaml-to-quake.toml.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: migration Quake.toml to .quake.yaml 3 | author: 4 | status: Done 5 | priority: High 6 | created_date: 2021-12-02 23:42:57 7 | updated_date: 2021-12-02 23:42:57 8 | --- 9 | 10 | as you know, we have to differing config 11 | 12 | -------------------------------------------------------------------------------- /examples/story/0003-page-link-support.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page link support 3 | author: 4 | status: Done 5 | priority: Medium 6 | created_date: 2021-12-02 14:40:59 7 | updated_date: 2021-12-02 14:40:59 8 | --- 9 | 10 | such as page link in Notion: `[[]]` 11 | 12 | some_link [[issue:0001-demo]] fdas 13 | -------------------------------------------------------------------------------- /examples/story/0012-replace-search-api-with-entries-list-csv.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: replace search api with entries list csv 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-03 16:56:51 7 | updated_date: 2021-12-03 16:56:51 8 | --- 9 | 10 | create simple json builder from csv 11 | 12 | -------------------------------------------------------------------------------- /.quake.yaml: -------------------------------------------------------------------------------- 1 | workspace: "examples" 2 | search_url: "http://127.0.0.1:7700" 3 | server_location: "quake_webapp" 4 | editor: vim 5 | port: 9999 6 | app_debug_level: debug 7 | 8 | # aut feed changes 9 | auto_feed: true 10 | 11 | components: 12 | quake_editor: 13 | autosave: 14 | interval: 3000 # ms 15 | -------------------------------------------------------------------------------- /docs/adr/0007-quake-server-for-gui-&-tui.md: -------------------------------------------------------------------------------- 1 | # 7. quake server for gui & tui 2 | 3 | Date: 2021-11-21 4 | 5 | ## Status 6 | 7 | 2021-11-21 proposed 8 | 9 | ## Context 10 | 11 | Context here... 12 | 13 | ## Decision 14 | 15 | Decision here... 16 | 17 | ## Consequences 18 | 19 | Consequences here... 20 | -------------------------------------------------------------------------------- /examples/spike/0003-webcomponents-for-react-components.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: webcomponents for react components 3 | author: 4 | done_by: 5 | created_date: 2021-12-02 14:50:31 6 | updated_date: 2021-12-02 14:50:31 7 | --- 8 | 9 | such as: 10 | 11 | - https://github.com/Silind-Software/direflow 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/story/0041-build-check-for-startup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: build check for startup 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2022-01-19 23:38:44 7 | updated_date: 2022-01-19 23:38:44 8 | --- 9 | 10 | generate hash changes for last files, and check new hash for startup 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/adr/0008-entrysets-for-entry-log-info.md: -------------------------------------------------------------------------------- 1 | # 8. entrysets for entry log info 2 | 3 | Date: 2021-11-22 4 | 5 | ## Status 6 | 7 | 2021-11-22 proposed 8 | 9 | ## Context 10 | 11 | Context here... 12 | 13 | ## Decision 14 | 15 | Decision here... 16 | 17 | ## Consequences 18 | 19 | Consequences here... 20 | -------------------------------------------------------------------------------- /docs/adr/0016-frontmatter-editor-for-fe.md: -------------------------------------------------------------------------------- 1 | # 16. frontmatter editor for fe 2 | 3 | Date: 2021-11-30 4 | 5 | ## Status 6 | 7 | 2021-11-30 proposed 8 | 9 | ## Context 10 | 11 | low code editor by field 12 | 13 | ## Decision 14 | 15 | Decision here... 16 | 17 | ## Consequences 18 | 19 | Consequences here... 20 | -------------------------------------------------------------------------------- /examples/quake_book/0005-custom-quake-component.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Custom Quake component 3 | created_date: 2021-12-12 23:31:29 4 | updated_date: 2021-12-12 23:31:29 5 | order: 6 | author: 7 | --- 8 | 9 | 10 | ## React 11 | 12 | 13 | ## Angular 14 | 15 | 16 | ## Vue 17 | 18 | 19 | ## Stencil.js 20 | 21 | -------------------------------------------------------------------------------- /examples/spike/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","author","done_by","created_date","updated_date" 2 | 1,"PDF to txt","","","2021-12-02 10:16:34","2021-12-02 10:16:34" 3 | 2,"crawl GitHub project info","","","2021-12-02 10:21:37","2021-12-02 10:21:37" 4 | 3,"webcomponents for react components","","","2021-12-02 14:50:31","2021-12-02 14:50:31" 5 | -------------------------------------------------------------------------------- /_fixtures/demo_quake/_quake/references/todo.yml: -------------------------------------------------------------------------------- 1 | 0001: 2 | source_type: todo 3 | source_id: 0001 4 | source_title: time support 5 | references: 6 | - entry_type: todo 7 | entry_id: 0001 8 | entry_title: links 9 | - entry_type: note 10 | entry_id: 0002 11 | entry_title: title 12 | section: Demo 13 | -------------------------------------------------------------------------------- /docs/adr/0021-quake-init-with-install-meilisearch.md: -------------------------------------------------------------------------------- 1 | # 21. quake init with install meilisearch 2 | 3 | Date: 2021-12-01 4 | 5 | ## Status 6 | 7 | 2021-12-01 proposed 8 | 9 | ## Context 10 | 11 | Context here... 12 | 13 | ## Decision 14 | 15 | Decision here... 16 | 17 | ## Consequences 18 | 19 | Consequences here... 20 | -------------------------------------------------------------------------------- /docs/adr/0002-quick-engine.md: -------------------------------------------------------------------------------- 1 | # 2. quick engine 2 | 3 | Date: 2021-11-19 4 | 5 | ## Status 6 | 7 | 2021-11-19 proposed 8 | 9 | ## Context 10 | 11 | - 自定义数据格式的「构型结构」(configurational structure)功能。 12 | - 自定义执行动作的脚本引擎。 13 | 14 | ## Decision 15 | 16 | Decision here... 17 | 18 | ## Consequences 19 | 20 | Consequences here... 21 | -------------------------------------------------------------------------------- /docs/adr/0018-calendar-view-api.md: -------------------------------------------------------------------------------- 1 | # 18. calendar view api 2 | 3 | Date: 2021-11-30 4 | 5 | ## Status 6 | 7 | 2021-11-30 proposed 8 | 9 | ## Context 10 | 11 | Data search API by days 12 | 13 | all days in one date. 14 | 15 | ## Decision 16 | 17 | Decision here... 18 | 19 | ## Consequences 20 | 21 | Consequences here... 22 | -------------------------------------------------------------------------------- /examples/bookmark/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","created_date","updated_date","tag","author" 2 | 1,"The Infinite Game","2021-12-15 19:54:55","2021-12-15 19:54:55","","" 3 | 2,"Designing Data-Intensive Applications","data","","2021-12-15 19:54:55","2021-12-15 19:54:55" 4 | 3,"biz visual analysis","2021-12-25 15:16:05","2021-12-25 15:16:05","","" 5 | -------------------------------------------------------------------------------- /examples/story/0006-monorep-with-nxjs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: monorep with nxjs 3 | author: 4 | status: Doing 5 | priority: Low 6 | created_date: 2021-12-02 21:50:45 7 | updated_date: 2021-12-02 21:50:45 8 | --- 9 | 10 | 11 | simple: [https://nx.dev/l/a/getting-started/nx-setup](https://nx.dev/l/a/getting-started/nx-setup) 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/story/0027-create-web-componet-core-api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: create web component core api 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2021-12-16 09:15:39 7 | updated_date: 2021-12-22 08:18:24 8 | --- 9 | 10 | such as: 11 | 12 | - http services as data 13 | - fetch next services 14 | - as a slot 15 | 16 | -------------------------------------------------------------------------------- /quake_webapp/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /examples/papers/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","file","created_date","updated_date" 2 | 1,"A System for Query, Analysis and Visualization of Multi-dimensional Relational Databases","pdca/polaris.pdf","2021-12-30 21:11:19","2021-12-30 21:11:19" 3 | 2,"workflow engine spike",docs/Presto_SQL_on_Everything.pdf,"2021-12-30 21:21:25","2021-12-30 21:21:25" 4 | -------------------------------------------------------------------------------- /static_dump/layout/dashboard: -------------------------------------------------------------------------------- 1 | {"name":"Dashboard","rows":[{"columns":[{"name":"Calendar","flow":"show_calendar","width":12,"height":0,"component_type":"flow"}]},{"columns":[{"name":"Network","flow":"graph-network","width":4,"height":0,"component_type":"native"},{"name":"Timeline","flow":"show_timeline","width":8,"height":0,"component_type":"flow"}]}]} -------------------------------------------------------------------------------- /examples/papers/0001-a-system-for-query-analysis-and-visualization-of-multi-dimensional-relational-databases.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: A System for Query, Analysis and Visualization of Multi-dimensional Relational Databases 3 | file: "pdca/polaris.pdf" 4 | created_date: 2021-12-30 21:11:19 5 | updated_date: 2021-12-30 21:11:19 6 | --- 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /docs/adr/0009-indexmap-replace-hashmap-for-order.md: -------------------------------------------------------------------------------- 1 | # 9. indexmap replace hashmap for order 2 | 3 | Date: 2021-11-24 4 | 5 | ## Status 6 | 7 | 2021-11-24 proposed 8 | 9 | 2021-11-24 accepted 10 | 11 | ## Context 12 | 13 | Context here... 14 | 15 | ## Decision 16 | 17 | Decision here... 18 | 19 | ## Consequences 20 | 21 | Consequences here... 22 | -------------------------------------------------------------------------------- /docs/adr/0023-contract-design-for-flow.md: -------------------------------------------------------------------------------- 1 | # 23. contract design for flow 2 | 3 | Date: 2021-12-08 4 | 5 | ## Status 6 | 7 | 2021-12-08 proposed 8 | 9 | ## Context 10 | 11 | need to check actions value: 12 | 13 | in post, pre conditon 14 | 15 | ## Decision 16 | 17 | Decision here... 18 | 19 | ## Consequences 20 | 21 | Consequences here... 22 | -------------------------------------------------------------------------------- /quake_core/src/errors.rs: -------------------------------------------------------------------------------- 1 | use std::error::Error; 2 | use std::fmt; 3 | 4 | #[derive(Debug)] 5 | pub struct QuakeError(pub String); 6 | 7 | impl fmt::Display for QuakeError { 8 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 9 | write!(f, "There is an error: {}", self.0) 10 | } 11 | } 12 | 13 | impl Error for QuakeError {} 14 | -------------------------------------------------------------------------------- /quake_webapp/packages/calendar/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /quake_webapp/packages/quake-viewer/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /quake_webapp/packages/timeline/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "bracketSpacing": true, 4 | "jsxBracketSameLine": false, 5 | "jsxSingleQuote": false, 6 | "quoteProps": "consistent", 7 | "printWidth": 180, 8 | "semi": true, 9 | "singleQuote": true, 10 | "tabWidth": 2, 11 | "trailingComma": "all", 12 | "useTabs": false 13 | } 14 | -------------------------------------------------------------------------------- /docs/adr/0010-level-for-directory.md: -------------------------------------------------------------------------------- 1 | # 10. level for directory 2 | 3 | Date: 2021-11-24 4 | 5 | ## Status 6 | 7 | 2021-11-24 proposed 8 | 9 | ## Context 10 | 11 | Level for large projects: 12 | 13 | - topic 14 | - epic 15 | - theme 16 | - story 17 | 18 | ## Decision 19 | 20 | Decision here... 21 | 22 | ## Consequences 23 | 24 | Consequences here... 25 | -------------------------------------------------------------------------------- /examples/testcases/0002-test-embed-links-html.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test embed links html 3 | created_date: 2021-12-14 17:15:36 4 | updated_date: 2021-12-14 17:15:36 5 | --- 6 | 7 | 示例: 8 | 9 | ```html 10 | 11 | ``` 12 | 13 | 结果: 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "bracketSpacing": true, 4 | "jsxBracketSameLine": false, 5 | "jsxSingleQuote": false, 6 | "quoteProps": "consistent", 7 | "printWidth": 180, 8 | "semi": true, 9 | "singleQuote": true, 10 | "tabWidth": 2, 11 | "trailingComma": "all", 12 | "useTabs": false 13 | } 14 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "bracketSpacing": true, 4 | "jsxBracketSameLine": false, 5 | "jsxSingleQuote": false, 6 | "quoteProps": "consistent", 7 | "printWidth": 180, 8 | "semi": true, 9 | "singleQuote": true, 10 | "tabWidth": 2, 11 | "trailingComma": "all", 12 | "useTabs": false 13 | } 14 | -------------------------------------------------------------------------------- /examples/story/0029-deploy-to-github-pages-as-demo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: deploy to GitHub pages as demo. 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-16 14:23:48 7 | updated_date: 2021-12-22 08:18:24 8 | --- 9 | 10 | 11 | 1. compile `core/parser` to web assembly 12 | 2. `` for online deploy 13 | 3. convert data to json files. 14 | 15 | -------------------------------------------------------------------------------- /quake_gui/README.md: -------------------------------------------------------------------------------- 1 | # Tauri + Yew 2 | 3 | This template should help get you started developing with Tauri and Yew. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer). 8 | -------------------------------------------------------------------------------- /examples/_quake/references/quake_book.yml: -------------------------------------------------------------------------------- 1 | --- 2 | "0007": 3 | source_type: quake_book 4 | source_id: "0007" 5 | source_title: "Quake's markdown syntax" 6 | references: 7 | - entry_type: note 8 | entry_id: "0001" 9 | entry_title: markdown-syntax 10 | - entry_type: note 11 | entry_id: "0002" 12 | entry_title: title 13 | section: demo 14 | -------------------------------------------------------------------------------- /examples/code/0001-phodal-com-process.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Phodal.com Process 3 | created_date: 2021-12-02 20:06:20 4 | updated_date: 2021-12-02 20:06:20 5 | --- 6 | 7 | ```javascript 8 | let text = ""; 9 | $("h2.mdl-card__title-text > a").each(function(index, link) { 10 | text += `[${link.innerText}](${link.href}) \n\n` 11 | }); 12 | 13 | console.log(text); 14 | ``` 15 | 16 | -------------------------------------------------------------------------------- /docs/adr/0011-search-engine.md: -------------------------------------------------------------------------------- 1 | # 11. search engine 2 | 3 | Date: 2021-11-27 4 | 5 | ## Status 6 | 7 | 2021-11-27 proposed 8 | 9 | ## Context 10 | 11 | Context here... 12 | 13 | ## Decision 14 | 15 | Search Engine support: 16 | 17 | - [https://github.com/meilisearch/MeiliSearch](https://github.com/meilisearch/MeiliSearch) 18 | 19 | ## Consequences 20 | 21 | Consequences here... 22 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/entry-list/entry-list.tsx: -------------------------------------------------------------------------------- 1 | import { Component, Host, h } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'entry-list', 5 | styleUrl: 'entry-list.css', 6 | shadow: true, 7 | }) 8 | export class EntryList { 9 | 10 | render() { 11 | return ( 12 | 13 | 14 | 15 | ); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /docs/adr/0003-script-language.md: -------------------------------------------------------------------------------- 1 | # 3. script language 2 | 3 | Date: 2021-11-19 4 | 5 | ## Status 6 | 7 | 2021-11-19 proposed 8 | 9 | ## Context 10 | 11 | libs: 12 | 13 | - TypeScript by [Deno](https://github.com/denoland/deno) 14 | - Lua by [hlua](https://github.com/tomaka/hlua) 15 | 16 | ## Decision 17 | 18 | Decision here... 19 | 20 | ## Consequences 21 | 22 | Consequences here... 23 | -------------------------------------------------------------------------------- /examples/_quake/dashboard.layout: -------------------------------------------------------------------------------- 1 | layout Dashboard { 2 | --------------------------------------------------------------- 3 | | Calendar(flow("show_calendar"), 12x5) | 4 | --------------------------------------------------------------- 5 | | Network(flow("show_network"), 4x) | Timeline(flow("show_timeline"), 8x4) | 6 | --------------------------------------------------------------- 7 | } -------------------------------------------------------------------------------- /quake_webapp/.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | www/ 3 | loader/ 4 | 5 | *~ 6 | *.sw[mnpcod] 7 | *.log 8 | *.lock 9 | *.tmp 10 | *.tmp.* 11 | log.txt 12 | *.sublime-project 13 | *.sublime-workspace 14 | 15 | .stencil/ 16 | .idea/ 17 | .vscode/ 18 | .sass-cache/ 19 | .versions/ 20 | node_modules/ 21 | $RECYCLE.BIN/ 22 | 23 | .DS_Store 24 | Thumbs.db 25 | UserInterfaceState.xcuserstate 26 | .env 27 | offline 28 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | www/ 3 | loader/ 4 | 5 | *~ 6 | *.sw[mnpcod] 7 | *.log 8 | *.lock 9 | *.tmp 10 | *.tmp.* 11 | log.txt 12 | *.sublime-project 13 | *.sublime-workspace 14 | 15 | .stencil/ 16 | .idea/ 17 | .vscode/ 18 | .sass-cache/ 19 | .versions/ 20 | node_modules/ 21 | $RECYCLE.BIN/ 22 | 23 | .DS_Store 24 | Thumbs.db 25 | UserInterfaceState.xcuserstate 26 | .env 27 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | www/ 3 | loader/ 4 | 5 | *~ 6 | *.sw[mnpcod] 7 | *.log 8 | *.lock 9 | *.tmp 10 | *.tmp.* 11 | log.txt 12 | *.sublime-project 13 | *.sublime-workspace 14 | 15 | .stencil/ 16 | .idea/ 17 | .vscode/ 18 | .sass-cache/ 19 | .versions/ 20 | node_modules/ 21 | $RECYCLE.BIN/ 22 | 23 | .DS_Store 24 | Thumbs.db 25 | UserInterfaceState.xcuserstate 26 | .env 27 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | www/ 3 | loader/ 4 | 5 | *~ 6 | *.sw[mnpcod] 7 | *.log 8 | *.lock 9 | *.tmp 10 | *.tmp.* 11 | log.txt 12 | *.sublime-project 13 | *.sublime-workspace 14 | 15 | .stencil/ 16 | .idea/ 17 | .vscode/ 18 | .sass-cache/ 19 | .versions/ 20 | node_modules/ 21 | $RECYCLE.BIN/ 22 | 23 | .DS_Store 24 | Thumbs.db 25 | UserInterfaceState.xcuserstate 26 | .env 27 | -------------------------------------------------------------------------------- /_fixtures/demo_quake/_quake/dashboard.layout: -------------------------------------------------------------------------------- 1 | layout Dashboard { 2 | --------------------------------------------------------------- 3 | | Calendar(flow("show_calendar"), 12x) | 4 | --------------------------------------------------------------- 5 | | Network(, 4x) | Timeline(flow("show_timeline"), 8x) | 6 | --------------------------------------------------------------- 7 | } -------------------------------------------------------------------------------- /docs/adr/0006-custom-editor.md: -------------------------------------------------------------------------------- 1 | # 6. custom editor 2 | 3 | Date: 2021-11-21 4 | 5 | ## Status 6 | 7 | 2021-11-21 proposed 8 | 9 | 2021-11-24 accepted 10 | 11 | ## Context 12 | 13 | for mvp, we don't have time to develop a editor, so in this version, we can use a third party editor like in `git`. 14 | 15 | ## Decision 16 | 17 | Decision here... 18 | 19 | ## Consequences 20 | 21 | Consequences here... 22 | -------------------------------------------------------------------------------- /src/helper/exec_wrapper/editor_exec.rs: -------------------------------------------------------------------------------- 1 | use crate::helper::exec_wrapper::exec_runner; 2 | use std::error::Error; 3 | 4 | pub fn edit_file(editor: String, file: String) -> Result<(), Box> { 5 | if editor == "~" || editor.is_empty() { 6 | return Ok(()); 7 | } 8 | 9 | let cmd = format!("{:} {:?}", editor, file); 10 | exec_runner::cmd_runner(cmd)?; 11 | 12 | Ok(()) 13 | } 14 | -------------------------------------------------------------------------------- /examples/story/0032-quake-links-as-a-entry-type-for-data.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: quake links as a entry_type for data 3 | author: 4 | status: Doing 5 | priority: Low 6 | created_date: 2021-12-22 08:19:59 7 | updated_date: 2021-12-22 08:19:59 8 | --- 9 | 10 | all references can be call in transflow, such as: 11 | 12 | ``` 13 | from(rest("http://127.0.0.1:9999/reference/todo")).to() 14 | ``` 15 | 16 | -------------------------------------------------------------------------------- /quake_core/_fixtures/transflow/show_calendar.code: -------------------------------------------------------------------------------- 1 | const tl_show_calendar = async (context, commands) => { 2 | const el = document.createElement('quake-calendar'); 3 | 4 | let todos = await Quake.query('todo'); 5 | 6 | let blogs = await Quake.query('blog'); 7 | 8 | let data = from_todo_blog_to_quake_calendar(todos, blogs); 9 | el.setAttribute('data', JSON.stringify(data)); 10 | 11 | return el; 12 | } 13 | -------------------------------------------------------------------------------- /quake_core/src/quake_config.rs: -------------------------------------------------------------------------------- 1 | /// load from `.quake` 2 | #[derive(Debug, Serialize, Deserialize, Default)] 3 | pub struct QuakeConfig { 4 | // set default editor 5 | pub editor: String, 6 | pub workspace: String, 7 | pub search_url: String, 8 | pub server_location: String, 9 | // pub debug_level: String, 10 | #[serde(default)] 11 | pub auto_feed: bool, 12 | pub port: u32, 13 | } 14 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-transflow/graph-transflow.tsx: -------------------------------------------------------------------------------- 1 | import { Component, Host, h } from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'graph-transflow', 5 | styleUrl: 'graph-transflow.css', 6 | shadow: true, 7 | }) 8 | export class GraphTransflow { 9 | 10 | render() { 11 | return ( 12 | 13 | 14 | 15 | ); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /quake_core/src/entry/mod.rs: -------------------------------------------------------------------------------- 1 | use indexmap::IndexMap; 2 | 3 | pub use entry_define::EntryDefine; 4 | pub use entry_defines::EntryDefines; 5 | pub use entry_node_info::EntryNodeInfo; 6 | 7 | pub mod entry_by_path; 8 | pub mod entry_define; 9 | pub mod entry_defines; 10 | pub mod entry_file; 11 | pub mod entry_node_info; 12 | pub mod entry_paths; 13 | pub mod slug; 14 | 15 | pub type PropMap = IndexMap; 16 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/embed-link/test/embed-link.e2e.ts: -------------------------------------------------------------------------------- 1 | import { newE2EPage } from '@stencil/core/testing'; 2 | 3 | describe('embed-link', () => { 4 | it('renders', async () => { 5 | const page = await newE2EPage(); 6 | await page.setContent(''); 7 | 8 | const element = await page.find('embed-link'); 9 | expect(element).toHaveClass('hydrated'); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /examples/issue/0001-more-content-for-search-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: more content for search results 3 | assignee: 4 | created_by: Phodal 5 | status: 6 | description: 7 | attachements: 8 | link: 9 | created_date: 2021-12-09 15:25:33 10 | updated_date: 2021-12-09 15:25:33 11 | priority: Low 12 | --- 13 | 14 | see in [[framework_doc:0001 "meilisearch doc"]] for more 15 | 16 | a ![[testcases:0001 "pagelink"]] sample 17 | 18 | 19 | -------------------------------------------------------------------------------- /quake_core/src/lib.rs: -------------------------------------------------------------------------------- 1 | extern crate pest; 2 | #[macro_use] 3 | extern crate pest_derive; 4 | extern crate serde; 5 | #[macro_use] 6 | extern crate serde_derive; 7 | 8 | pub use parser::quake; 9 | pub use quake_config::QuakeConfig; 10 | 11 | pub mod entry; 12 | pub mod errors; 13 | pub mod helper; 14 | pub mod markdown; 15 | pub mod meta; 16 | pub mod parser; 17 | pub mod quake_config; 18 | pub mod transflow; 19 | pub mod usecases; 20 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/config-overrides.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | webpack: function(config, env) { 3 | config.optimization.splitChunks = { 4 | cacheGroups: { 5 | default: false 6 | } 7 | }; 8 | 9 | config.output = { 10 | ...config.output, 11 | filename: `static/quake-kbar.min.js`, 12 | }; 13 | 14 | config.optimization.runtimeChunk = false; 15 | return config; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /examples/story/0016-timeline-for-annual-review.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: timeline for annual review 3 | author: Phodal 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-04 23:33:09 7 | updated_date: 2021-12-04 23:33:09 8 | --- 9 | 10 | refs library: 11 | 12 | overview by points 13 | 14 | - https://github.com/prabhuignoto/react-chrono 15 | 16 | with calendar: 17 | 18 | - https://github.com/namespace-ee/react-calendar-timeline 19 | 20 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/config-overrides.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | webpack: function(config, env) { 3 | config.optimization.splitChunks = { 4 | cacheGroups: { 5 | default: false 6 | } 7 | }; 8 | 9 | config.output = { 10 | ...config.output, 11 | filename: `static/quake-board.min.js`, 12 | }; 13 | 14 | config.optimization.runtimeChunk = false; 15 | return config; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/config-overrides.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | webpack: function(config, env) { 3 | config.optimization.splitChunks = { 4 | cacheGroups: { 5 | default: false 6 | } 7 | }; 8 | 9 | config.output = { 10 | ...config.output, 11 | filename: `static/quake-editor.min.js`, 12 | }; 13 | 14 | config.optimization.runtimeChunk = false; 15 | return config; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .idea 3 | .local 4 | dev.db 5 | phodal.dev 6 | examples/blog/* 7 | examples/notes/* 8 | examples/microsoft_todo/* 9 | examples/onenote/* 10 | examples/papers/pdca 11 | .DS_Store 12 | libs/quake_importer/scripts/readnotes/* 13 | dbs/NoteStore.sqlite 14 | dbs/NoteStore.sqlite-shm 15 | dbs/NoteStore.sqlite-wal 16 | dbs 17 | dump.json 18 | quake_webapp/temp 19 | test_dir 20 | pagedump 21 | static_dump 22 | examples/demo_papers 23 | -------------------------------------------------------------------------------- /examples/_quake/element-define.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: quake-calendar 3 | events: [] 4 | attributes: 5 | - name: data, 6 | data_properties: 7 | - title: String 8 | - content: String 9 | - created_date: String 10 | - updated_date: String 11 | - name: quake-timeline 12 | events: [] 13 | attributes: 14 | - name: data, 15 | data_properties: 16 | - title: String 17 | - content: String 18 | - date: String 19 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/src/components/type-creator/readme.md: -------------------------------------------------------------------------------- 1 | # my-component 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Events 9 | 10 | | Event | Description | Type | 11 | | ----------- | ----------- | ------------------ | 12 | | `saveProps` | | `CustomEvent` | 13 | 14 | 15 | ---------------------------------------------- 16 | 17 | *Built with [StencilJS](https://stenciljs.com/)* 18 | -------------------------------------------------------------------------------- /quake_webapp/packages/calendar/config-overrides.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | webpack: function(config, env) { 4 | config.optimization.splitChunks = { 5 | cacheGroups: { 6 | default: false 7 | } 8 | }; 9 | 10 | config.output = { 11 | ...config.output, 12 | filename: `static/quake-calendar.min.js`, 13 | }; 14 | 15 | config.optimization.runtimeChunk = false; 16 | return config; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F41E Bug report" 3 | about: Create a report about something that is not working 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### Describe the bug 11 | A clear and concise description of what the bug is. 12 | 13 | ### Steps to reproduce (please include code) 14 | 15 | 16 | ### Environment 17 | - quake version: 18 | - Rust version: 19 | - OS: [e.g. OSX 10.13.4, Windows 10] 20 | -------------------------------------------------------------------------------- /examples/story/0042-transflow-support-for-password-manager.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: transflow support for password manager 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2022-01-21 11:01:55 7 | updated_date: 2022-01-21 11:01:55 8 | --- 9 | 10 | 11 | ``` 12 | from('password').filter('phodal').to(pycopy) 13 | ``` 14 | 15 | todo: 16 | 17 | - add filter for content only item or default to content 18 | - enable to target be a function 19 | 20 | 21 | -------------------------------------------------------------------------------- /examples/story/0030-dump-data-for-github-pages.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: dump data for github pages 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-18 23:28:14 7 | updated_date: 2021-12-22 08:18:24 8 | --- 9 | 10 | // 1. dump entries config; 11 | dump_entries_define(); 12 | // 2. dump quake information; 13 | dump_transflow(); 14 | dump_layout(); 15 | dump_links(); 16 | // 3. export all entry_type data to json 17 | dump_entries_data(); 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/adr/0004-front-matter-design.md: -------------------------------------------------------------------------------- 1 | # 4. Front Matter Design 2 | 3 | Date: 2021-11-20 4 | 5 | ## Status 6 | 7 | 2021-11-20 proposed 8 | 9 | 2021-11-24 accepted 10 | 11 | ## Context 12 | 13 | use markdown to simplify notes for items. 14 | 15 | - Jekyll Front Matter. sample: [https://jekyllrb.com/docs/front-matter/](https://jekyllrb.com/docs/front-matter/) 16 | 17 | ## Decision 18 | 19 | Decision here... 20 | 21 | ## Consequences 22 | 23 | Consequences here... 24 | -------------------------------------------------------------------------------- /examples/story/0002-quake-render-for-entry.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Quake render for Entry 3 | author: 4 | status: Done 5 | priority: Medium 6 | created_date: 2021-12-02 14:39:04 7 | updated_date: 2021-12-02 14:39:04 8 | --- 9 | 10 | for examples: 11 | 12 | React Notion Render: 13 | 14 | - [https://github.com/splitbee/react-notion](https://github.com/splitbee/react-notion) 15 | - [https://github.com/NotionX/react-notion-x](https://github.com/NotionX/react-notion-x) 16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/adr/0020-flowy-view-for-ideas.md: -------------------------------------------------------------------------------- 1 | # 20. flowy view for ideas 2 | 3 | Date: 2021-12-01 4 | 5 | ## Status 6 | 7 | 2021-12-01 proposed 8 | 9 | ## Context 10 | 11 | samples: [https://roadmap.meilisearch.com/tabs/5-ideas](https://roadmap.meilisearch.com/tabs/5-ideas) 12 | 13 | custom flow stage 14 | - view 15 | - rule 16 | 17 | first examples: blogs status change 18 | 19 | ## Decision 20 | 21 | Decision here... 22 | 23 | ## Consequences 24 | 25 | Consequences here... 26 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | package-lock.json 25 | dist/ 26 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | package-lock.json 25 | dist/ 26 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | package-lock.json 25 | dist/ 26 | -------------------------------------------------------------------------------- /src/cli/mod.rs: -------------------------------------------------------------------------------- 1 | use std::error::Error; 2 | 3 | use quake_core::quake::QuakeActionNode; 4 | use quake_core::QuakeConfig; 5 | 6 | pub mod entry_action; 7 | pub mod helper; 8 | pub mod quake_action; 9 | 10 | pub fn action(expr: QuakeActionNode, conf: QuakeConfig) -> Result<(), Box> { 11 | match expr.entry.as_str() { 12 | "quake" => quake_action::quake_action(expr.action, &conf), 13 | _ => entry_action::entry_action(&expr, conf), 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /examples/story/0034-element-define-support-for-transflow-inheritance.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: element define support for transflow inheritance 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-25 17:16:33 7 | updated_date: 2021-12-25 17:16:33 8 | --- 9 | 10 | 11 | Samples 12 | 13 | ```yaml 14 | - name: quake-calendar 15 | properties: 16 | - title: String 17 | - content: String 18 | - created_date: String 19 | - updated_date: String 20 | ``` 21 | 22 | -------------------------------------------------------------------------------- /quake_webapp/packages/calendar/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | package-lock.json 25 | dist/ 26 | -------------------------------------------------------------------------------- /quake_webapp/packages/timeline/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | package-lock.json 25 | dist/ 26 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/components/base-model/DiamondPortModel.ts: -------------------------------------------------------------------------------- 1 | import {DefaultLinkModel, LinkModel, PortModel, PortModelAlignment} from '@projectstorm/react-diagrams'; 2 | 3 | export class DiamondPortModel extends PortModel { 4 | constructor(alignment: PortModelAlignment) { 5 | super({ 6 | type: 'diamond', 7 | name: alignment, 8 | alignment: alignment 9 | }); 10 | } 11 | 12 | createLinkModel(): LinkModel { 13 | return new DefaultLinkModel(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/quake-dashboard/quake-dashboard.css: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | height: 100%; 4 | overflow: hidden; 5 | } 6 | 7 | .dark-button { 8 | --background: #000; 9 | } 10 | 11 | #submit-button { 12 | display: none; 13 | } 14 | 15 | #search-form { 16 | width: 80%; 17 | margin-bottom: 0; 18 | } 19 | 20 | ion-icon { 21 | font-size: 24px; 22 | padding: 4px; 23 | float: right; 24 | } 25 | 26 | ion-icon:hover { 27 | cursor: pointer; 28 | } 29 | -------------------------------------------------------------------------------- /nix_config/flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "my rust dev shell"; 3 | 4 | inputs = { 5 | nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 6 | flake-utils.url = "github:numtide/flake-utils"; 7 | }; 8 | 9 | outputs = { self, nixpkgs, flake-utils }: 10 | flake-utils.lib.eachDefaultSystem 11 | (system: 12 | let pkgs = nixpkgs.legacyPackages.${system}; in 13 | { 14 | devShell = import ./shell.nix { inherit pkgs; }; 15 | } 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /_fixtures/codegen/todos_element.js: -------------------------------------------------------------------------------- 1 | const tl_show_timeline = async (context, commands) => { 2 | const el = document.createElement('quake-calendar-timeline'); 3 | 4 | let todos = await Quake.query('todo'); 5 | let blogs = await Quake.query('blog'); 6 | let data = from_todo_blog_to_quake_calendar(todos, blogs); 7 | 8 | el.setAttribute('entries', JSON.stringify({ 9 | items: ['blog', 'todo'] 10 | })); 11 | el.setAttribute('data', JSON.stringify(data)); 12 | 13 | return el; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/src/components/type-creator/type-creator.css: -------------------------------------------------------------------------------- 1 | @import "~@quakeworks/form-js/dist/assets/dragula.css"; 2 | @import "~@quakeworks/form-js/dist/assets/form-js-editor.css"; 3 | @import "~@quakeworks/form-js/dist/assets/form-js.css"; 4 | 5 | :host { 6 | display: block; 7 | height: 100%; 8 | } 9 | 10 | .type-creator_form { 11 | height: calc(100% - 56px) !important; 12 | } 13 | 14 | .type-creator_submit { 15 | position: fixed; 16 | right: 10px; 17 | bottom: 10px; 18 | } 19 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/stencil.config.ts: -------------------------------------------------------------------------------- 1 | import { Config } from '@stencil/core'; 2 | 3 | export const config: Config = { 4 | namespace: 'type-creator', 5 | outputTargets: [ 6 | { 7 | type: 'dist', 8 | esmLoaderPath: '../loader', 9 | }, 10 | { 11 | type: 'dist-custom-elements', 12 | }, 13 | { 14 | type: 'docs-readme', 15 | }, 16 | { 17 | type: 'www', 18 | serviceWorker: null, // disable service workers 19 | }, 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /quake_webapp/packages/quake-viewer/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | package-lock.json 25 | dist/ 26 | public/volcano.pdf 27 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-transflow/readme.md: -------------------------------------------------------------------------------- 1 | # graph-transflow 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Dependencies 9 | 10 | ### Used by 11 | 12 | - [quake-render](../quake-render) 13 | 14 | ### Graph 15 | ```mermaid 16 | graph TD; 17 | quake-render --> graph-transflow 18 | style graph-transflow fill:#f9f,stroke:#333,stroke-width:4px 19 | ``` 20 | 21 | ---------------------------------------------- 22 | 23 | *Built with [StencilJS](https://stenciljs.com/)* 24 | -------------------------------------------------------------------------------- /quake_core/src/usecases/layout_usecases.rs: -------------------------------------------------------------------------------- 1 | use std::error::Error; 2 | use std::fs; 3 | use std::path::PathBuf; 4 | 5 | use crate::entry::entry_paths::EntryPaths; 6 | use crate::quake::SimpleLayout; 7 | 8 | pub fn dump_dashboard_layout(path: PathBuf) -> Result> { 9 | let path = path 10 | .join(EntryPaths::quake()) 11 | .join(EntryPaths::dashboard_layout()); 12 | 13 | let content = fs::read_to_string(path)?; 14 | SimpleLayout::from_text(content.as_str()) 15 | } 16 | -------------------------------------------------------------------------------- /docs/adr/0005-content-&-structure-separate.md: -------------------------------------------------------------------------------- 1 | # 5. content & structure separate 2 | 3 | Date: 2021-11-21 4 | 5 | ## Status 6 | 7 | 2021-11-21 proposed 8 | 9 | ## Context 10 | 11 | As a Git-base database, we proposed content & content's structure separate. For example, in book review, we can separate: 12 | 13 | - front matter. In any format, such as json, yaml or database 14 | - content file. `markdown` format 15 | 16 | ## Decision 17 | 18 | Decision here... 19 | 20 | ## Consequences 21 | 22 | Consequences here... 23 | -------------------------------------------------------------------------------- /quake_core/src/usecases/entry_define_usecases.rs: -------------------------------------------------------------------------------- 1 | use crate::entry::{entry_defines, EntryDefine}; 2 | use std::path::Path; 3 | 4 | pub fn find_entry_define(target_entry: &str, path: &Path) -> EntryDefine { 5 | let entries: Vec = entry_defines::from_path(path) 6 | .into_iter() 7 | .filter(|define| define.entry_type.eq(target_entry)) 8 | .collect(); 9 | 10 | if entries.is_empty() { 11 | EntryDefine::default() 12 | } else { 13 | entries[0].clone() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /examples/story/0020-search-rule-'filterableattributes'-by-entry-type.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: search rule 'filterableAttributes' by entry type 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-08 10:46:31 7 | updated_date: 2021-12-08 10:46:31 8 | --- 9 | 10 | when feed settings to project, we need to load entry_defines, add `filterableAttributes` for display 11 | 12 | in default, it can be : 13 | 14 | ```json 15 | "filterableAttributes": [ 16 | "created_date", 17 | "updated_date" 18 | ] 19 | ``` 20 | 21 | 22 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/stencil.config.ts: -------------------------------------------------------------------------------- 1 | import { Config } from '@stencil/core'; 2 | 3 | export const config: Config = { 4 | namespace: 'quake-render', 5 | testing: { 6 | 7 | }, 8 | outputTargets: [ 9 | { 10 | type: 'dist', 11 | esmLoaderPath: '../loader', 12 | }, 13 | { 14 | type: 'dist-custom-elements-bundle', 15 | }, 16 | { 17 | type: 'docs-readme', 18 | }, 19 | { 20 | type: 'www', 21 | serviceWorker: null, // disable service workers 22 | }, 23 | ], 24 | }; 25 | -------------------------------------------------------------------------------- /src/helper/exec_wrapper/exec_runner.rs: -------------------------------------------------------------------------------- 1 | use std::error::Error; 2 | use std::process::Command; 3 | 4 | pub fn cmd_runner(editor_cmd: String) -> Result<(), Box> { 5 | if cfg!(target_os = "windows") { 6 | Command::new("cmd") 7 | .args(["/C", editor_cmd.as_str()]) 8 | .spawn()? 9 | .wait()?; 10 | } else { 11 | Command::new("sh") 12 | .arg("-c") 13 | .arg(editor_cmd) 14 | .spawn()? 15 | .wait()?; 16 | }; 17 | 18 | Ok(()) 19 | } 20 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-network/readme.md: -------------------------------------------------------------------------------- 1 | # quake-graph 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | -------- | --------- | ----------- | ----- | ------------- | 12 | | `config` | `config` | | `any` | `{}` | 13 | | `data` | `data` | | `any` | `defaultData` | 14 | 15 | 16 | ---------------------------------------------- 17 | 18 | *Built with [StencilJS](https://stenciljs.com/)* 19 | -------------------------------------------------------------------------------- /libs/quake_processor/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_processor" 3 | version = "0.4.0" 4 | edition = "2018" 5 | authors = ["Phodal HUANG "] 6 | description = """ 7 | Simple knowledge management tool for geek. 8 | """ 9 | documentation = "https://github.com/phodal/quake" 10 | repository = "https://github.com/phodal/quake" 11 | readme = "README.md" 12 | license = "MIT" 13 | exclude = ["_fixtures/*"] 14 | autoexamples = true 15 | keywords = ["knowledge", "dashboard"] 16 | 17 | [dependencies] 18 | pdf-extract = "0.6.3" 19 | lopdf = "0.26" 20 | -------------------------------------------------------------------------------- /examples/roadmap/0001-first-mvp.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: first mvp 3 | created_date: 2021-12-07 21:19:14 4 | updated_date: 2021-12-07 21:19:14 5 | --- 6 | 7 | 8 | - [x] 导入 9 | - [x] Django/Mezzanine 10 | - [x] Apple Notes 11 | - [x] Microsoft Todo 12 | - [x] Microsoft Onenote 13 | - [x] 自定义条目类型 14 | - [x] CRUD 15 | - [x] dynamic update entries-define 16 | - [x] CLI 交互与列表呈现 17 | - [ ] MVP API 设计 18 | - [x] Web Server 19 | - [ ] ~~GraphQL~~ 20 | - [x] 基于 Git 的数据存储 21 | - [x] Search anywhere 22 | - [x] search frameworks 23 | - [x] auto suggest 24 | 25 | -------------------------------------------------------------------------------- /quake_gui/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_gui" 3 | version = "0.0.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | [dependencies] 8 | serde-wasm-bindgen = "0.4.3" 9 | js-sys = "0.3.59" 10 | serde = { version = "1.0.140", features = ["derive"] } 11 | wasm-bindgen = { version = "0.2.82", features = ["serde-serialize"] } 12 | wasm-bindgen-futures = "0.4.32" 13 | web-sys = "0.3.59" 14 | yew = { version="0.20.0", features = ["csr"] } 15 | 16 | #[workspace] 17 | #members = ["src-tauri"] 18 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/components/SimplePortFactory.ts: -------------------------------------------------------------------------------- 1 | import { DiagramEngine, PortModel } from '@projectstorm/react-diagrams'; 2 | import { AbstractModelFactory } from '@projectstorm/react-canvas-core'; 3 | 4 | export class SimplePortFactory extends AbstractModelFactory { 5 | cb: (initialConfig?: any) => PortModel; 6 | 7 | constructor(type: string, cb: (initialConfig?: any) => PortModel) { 8 | super(type); 9 | this.cb = cb; 10 | } 11 | 12 | generateModel(event: any): PortModel { 13 | return this.cb(event.initialConfig); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/readme.md: -------------------------------------------------------------------------------- 1 | # Quake Render 2 | 3 | - [x] Heading 4 | - [x] Paragraph 5 | - [x] BlockQuote 6 | - [x] HR 7 | - [x] BR 8 | - [x] Table 9 | - [x] Code 10 | - [x] List 11 | - [x] Flat List 12 | - [x] recursion List 13 | - [x] Admonition 14 | - [x] Page Link 15 | - [ ] Normal Chart 16 | - [ ] Bar Chart 17 | - ... 18 | - [ ] Advanced Chart 19 | - [ ] Map 20 | - [ ] Mindmap 21 | - [ ] Heatmap 22 | - [ ] fishbone 23 | - [ ] tech-radar 24 | - [ ] pipeline 25 | - [ ] mermaid 26 | - [ ] custom component 27 | - [ ] StepLine 28 | - [ ] TableStep 29 | -------------------------------------------------------------------------------- /examples/story/0025-chinese-table-of-content-parser.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chinese table of content parser 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2021-12-15 20:05:10 7 | updated_date: 2021-12-15 20:05:10 8 | --- 9 | 10 | 解析中文目录,形成思维导图? 11 | 12 | 使用的 tag ``@book-toc` 13 | 14 | 示例: 15 | 16 | ``` 17 | 第一部分 数据系统基础 18 | 第1章 可靠、可扩展与可维护的应用系统 ................... 11 19 | 认识数据系统 ...........................................12 20 | 可靠性 ..................................................14 21 | 可扩展性 ................................................18 22 | ``` 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /libs/quake_importer/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_importer" 3 | version = "0.1.0" 4 | edition = "2018" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | quake_core = { path = "../../quake_core", version = "0.5.0" } 10 | 11 | clap = { version = "4.0.18", features = ["derive"] } 12 | 13 | quake_microsoft_todo = "0.1.1" 14 | 15 | serde = { version = "1.0", features = ["derive"] } 16 | serde_json = "1.0" 17 | 18 | [dependencies.rusqlite] 19 | version = "0.25.3" 20 | features = ["bundled"] 21 | 22 | -------------------------------------------------------------------------------- /quake_core/_fixtures/transflow/get_todos_blogs_with_filter_map_param.code: -------------------------------------------------------------------------------- 1 | function from_todo_blog_to_quake_calendar(todos, blogs) { 2 | let results = []; 3 | for (let todo of todos) { 4 | results.push({ 5 | type: "todo", 6 | title: todo.title, 7 | content: todo.content 8 | }) 9 | } 10 | for (let blog of blogs) { 11 | results.push({ 12 | type: "blog", 13 | title: blog.title, 14 | content: blog.content.split("。") 15 | }) 16 | } 17 | results = results.concat(todos); 18 | results = results.concat(blogs); 19 | return results; 20 | } 21 | -------------------------------------------------------------------------------- /quake_gui/src-tauri/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr( 2 | all(not(debug_assertions), target_os = "windows"), 3 | windows_subsystem = "windows" 4 | )] 5 | 6 | // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command 7 | #[tauri::command] 8 | fn greet(name: &str) -> String { 9 | format!("Hello, {}! You've been greeted from Rust!", name) 10 | } 11 | 12 | fn main() { 13 | tauri::Builder::default() 14 | .invoke_handler(tauri::generate_handler![greet]) 15 | .run(tauri::generate_context!()) 16 | .expect("error while running tauri application"); 17 | } 18 | -------------------------------------------------------------------------------- /quake_core/_fixtures/transflow/get_todos_blogs_with_filter.code: -------------------------------------------------------------------------------- 1 | const tl_show_calendar = async (context, commands) => { 2 | const el = document.createElement('quake-calendar'); 3 | 4 | let todos = await Quake.query('todo', '', { 5 | filter: 'created_date > 1609459200 and created_date < 1640908800' 6 | }); 7 | 8 | let blogs = await Quake.query('blog', '', { 9 | filter: 'created_date > 1609459200 and created_date < 1640908800' 10 | }); 11 | 12 | let data = from_todo_blog_to_quake_calendar(todos, blogs); 13 | el.setAttribute('data', JSON.stringify(data)); 14 | 15 | return el; 16 | } 17 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowUnreachableCode": false, 5 | "declaration": false, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "dom", 9 | "es2017" 10 | ], 11 | "moduleResolution": "node", 12 | "module": "esnext", 13 | "target": "es2017", 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "jsx": "react", 17 | "jsxFactory": "h" 18 | }, 19 | "include": [ 20 | "src" 21 | ], 22 | "exclude": [ 23 | "node_modules" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowUnreachableCode": false, 5 | "declaration": false, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "dom", 9 | "es2017" 10 | ], 11 | "moduleResolution": "node", 12 | "module": "esnext", 13 | "target": "es2017", 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "jsx": "react", 17 | "jsxFactory": "h" 18 | }, 19 | "include": [ 20 | "src" 21 | ], 22 | "exclude": [ 23 | "node_modules" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "allowUnreachableCode": false, 5 | "declaration": false, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "dom", 9 | "es2017" 10 | ], 11 | "moduleResolution": "node", 12 | "module": "esnext", 13 | "target": "es2017", 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "jsx": "react", 17 | "jsxFactory": "h" 18 | }, 19 | "include": [ 20 | "src" 21 | ], 22 | "exclude": [ 23 | "node_modules" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /quake_log/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_log" 3 | version = "0.5.0" 4 | edition = "2021" 5 | authors = ["Inherd Group "] 6 | description = """ 7 | Simple knowledge management tool for geek. 8 | """ 9 | documentation = "https://github.com/phodal/quake" 10 | repository = "https://github.com/phodal/quake" 11 | readme = "README.md" 12 | license = "MIT" 13 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 14 | 15 | [dependencies] 16 | wasm-bindgen = "0.2" 17 | 18 | serde = "1.0" 19 | serde_json = "1.0" 20 | 21 | [lib] 22 | crate-type = ["cdylib"] 23 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Stencil Component Starter 7 | 8 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /_fixtures/codegen/todos_blogs.js: -------------------------------------------------------------------------------- 1 | function from_todo_blog_to_quake_calendar_timeline(todos, blogs) { 2 | let results = []; 3 | for (let todo of todos) { 4 | results.push({ 5 | type: "todo", 6 | title: todo.title, 7 | content: todo.content, 8 | start_time: todo.created_date, 9 | end_time: todo.updated_date 10 | }) 11 | } 12 | 13 | for (let blog of blogs) { 14 | results.push({ 15 | type: "blog", 16 | title: blog.title, 17 | content: blog.content, 18 | start_time: blog.created_date, 19 | end_time: blog.updated_date 20 | }) 21 | } 22 | return results; 23 | } 24 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /examples/story/0001-typeform-for-entry-field.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Typeform for entry field 3 | author: 4 | status: Spike 5 | priority: Medium 6 | created_date: 2021-12-02 14:35:50 7 | updated_date: 2021-12-02 14:35:50 8 | --- 9 | 10 | entry field (from entries-define.yaml) to form for web 11 | 12 | field example 13 | 14 | ```yaml 15 | fields: 16 | - title: Title 17 | - author: String 18 | - content: Body 19 | - status: Flow 20 | - priority: Flow 21 | - created_date: Date 22 | - updated_date: Date 23 | ``` 24 | 25 | library such as: 26 | 27 | - https://github.com/formium/formik 28 | - https://github.com/unform/unform 29 | 30 | 31 | -------------------------------------------------------------------------------- /examples/story/0031-heading-support-for-pagelink.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: heading support for pagelink 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-20 23:08:57 7 | updated_date: 2021-12-22 08:18:24 8 | --- 9 | 10 | refs samples: 11 | 12 | ```rust 13 | ^(?P[^#|]+)??(#(?P.+?))??(\|(?P.+?))??$ 14 | ``` 15 | 16 | Note#Heading|Label 17 | 18 | 19 | output 20 | 21 | ```bash 22 | Some(Captures({ 23 | 0: Some("Note#Heading|Label"), 24 | 1: Some("Note"), 25 | 2: Some("#Heading"), 26 | 3: Some("Heading"), 27 | 4: Some("|Label"), 28 | 5: Some("Label"), 29 | })), 30 | 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/embed-link/test/embed-link.spec.tsx: -------------------------------------------------------------------------------- 1 | import { newSpecPage } from '@stencil/core/testing'; 2 | import { EmbedLink } from '../embed-link'; 3 | 4 | describe('embed-link', () => { 5 | it('renders', async () => { 6 | const page = await newSpecPage({ 7 | components: [EmbedLink], 8 | html: ``, 9 | }); 10 | expect(page.root).toEqualHtml(` 11 | 12 | 13 | # 14 | 15 | 16 | 17 | `); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /quake_core/_fixtures/transflow/get_todos_blogs_with_filter_map.code: -------------------------------------------------------------------------------- 1 | function from_todo_blog_to_quake_calendar(todos, blogs) { 2 | let results = []; 3 | for (let todo of todos) { 4 | results.push({ 5 | type: "todo", 6 | title: todo.title, 7 | content: todo.content 8 | }) 9 | } 10 | for (let blog of blogs) { 11 | results.push({ 12 | type: "blog", 13 | title: blog.title, 14 | content: blog.content.uppercase().substring(1,150), 15 | created_date: blog.created_date 16 | }) 17 | } 18 | results = results.concat(todos); 19 | results = results.concat(blogs); 20 | return results; 21 | } 22 | -------------------------------------------------------------------------------- /quake_webapp/packages/quake-viewer/config-overrides.js: -------------------------------------------------------------------------------- 1 | const MiniCssExtractPlugin = require('mini-css-extract-plugin'); 2 | const {override, disableEsLint} = require("customize-cra"); 3 | 4 | function overrideExtra(config, env) { 5 | override( 6 | disableEsLint(), 7 | )(config, env); 8 | 9 | config.optimization.splitChunks = { 10 | cacheGroups: { 11 | default: false 12 | } 13 | }; 14 | 15 | config.output = { 16 | ...config.output, 17 | filename: `static/quake-viewer.min.js`, 18 | }; 19 | 20 | config.optimization.runtimeChunk = false; 21 | 22 | return config; 23 | } 24 | 25 | module.exports = overrideExtra 26 | -------------------------------------------------------------------------------- /examples/quake_book/entries.csv: -------------------------------------------------------------------------------- 1 | "id","title","created_date","updated_date","order","author" 2 | 1,"Overview","2021-12-10 19:20:14","2021-12-10 19:20:14",1,"" 3 | 2,"Setup","2021-12-10 19:21:23","2021-12-10 19:21:23","","" 4 | 3,"Transflow","2021-12-10 19:21:10","2021-12-26 23:35:39","","" 5 | 4,"Development","2021-12-10 19:21:29","2021-12-10 19:21:29","","" 6 | 5,"Custom Quake component","2021-12-12 23:31:29","2021-12-12 23:31:29","","" 7 | 6,"Type System","2021-12-13 08:11:40","2021-12-13 12:10:40","","" 8 | 7,"Quake's markdown syntax","2021-12-14 13:11:06","2021-12-14 13:11:06","","" 9 | 8,"quake server api","2022-01-23 13:02:50","2022-01-23 13:02:50","","" 10 | -------------------------------------------------------------------------------- /examples/story/0028-scripts-for-auto-offline-deps.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: scripts for auto offline deps 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2021-12-16 12:50:46 7 | updated_date: 2021-12-16 12:50:46 8 | --- 9 | 10 | 11 | 1. download ionic 12 | 13 | from: [https://registry.npmjs.org/@ionic/core/-/core-6.0.1.tgz](https://registry.npmjs.org/@ionic/core/-/core-6.0.1.tgz) 14 | 15 | 2. download others: 16 | 17 | https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js 18 | 19 | https://cdn.jsdelivr.net/npm/meilisearch@latest/dist/bundles/meilisearch.umd.js 20 | 21 | https://unpkg.com/@vaadin/router/dist/vaadin-router.umd.min.js 22 | 23 | 24 | -------------------------------------------------------------------------------- /quake_gui_old/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_gui_old" 3 | version = "0.1.0" 4 | edition = "2021" 5 | authors = ["Inherd Group "] 6 | description = """ 7 | Simple knowledge management tool for geek. 8 | """ 9 | documentation = "https://github.com/phodal/quake" 10 | repository = "https://github.com/phodal/quake" 11 | readme = "README.md" 12 | license = "MIT" 13 | exclude = ["_fixtures/*"] 14 | autoexamples = true 15 | keywords = ["knowledge", "dashboard"] 16 | 17 | [dependencies] 18 | dioxus = { git = "https://github.com/DioxusLabs/dioxus", features = ["desktop"] } 19 | native-dialog = "0.6.3" 20 | 21 | quake_core = { path = "../quake_core" } 22 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /quake_wasm/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_wasm" 3 | version = "0.5.0" 4 | edition = "2021" 5 | authors = ["Inherd Group "] 6 | description = """ 7 | Simple knowledge management tool for geek. 8 | """ 9 | documentation = "https://github.com/phodal/quake" 10 | repository = "https://github.com/phodal/quake" 11 | readme = "README.md" 12 | license = "MIT" 13 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 14 | 15 | [dependencies] 16 | quake_core = { path = "../quake_core", version = "0.5.0" } 17 | wasm-bindgen = "0.2" 18 | 19 | serde = "1.0" 20 | serde_json = "1.0" 21 | 22 | [lib] 23 | crate-type = ["cdylib"] 24 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /quake_core/_fixtures/transflow/event_with_calendar.code: -------------------------------------------------------------------------------- 1 | const tl_show_calendar = async (context, commands) => { 2 | const el = document.createElement('quake-calendar'); 3 | 4 | let todos = await Quake.query('todo'); 5 | 6 | let blogs = await Quake.query('blog'); 7 | 8 | let data = from_todo_blog_to_quake_calendar(todos, blogs); 9 | el.setAttribute('data', JSON.stringify(data)); 10 | 11 | el.addEventListener('onSave', function (event) { 12 | let data = event.detail; 13 | console.log(data); 14 | }); 15 | 16 | el.addEventListener('onChange', function (event) { 17 | let data = event.detail; 18 | console.log(data); 19 | }); 20 | 21 | return el; 22 | } 23 | -------------------------------------------------------------------------------- /quake_webapp/packages/calendar/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /quake_webapp/packages/timeline/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /_fixtures/transflows/transflows.yaml: -------------------------------------------------------------------------------- 1 | - name: "show_timeline" 2 | display: "Show timeline" 3 | target: "quake-calendar-timeline" 4 | defines_mapping: ~ 5 | flows: 6 | - name: "from_todo_blog_to_quake_calendar_timeline" 7 | from: [ "todo", "blog" ] 8 | to: "" 9 | mapping: 10 | - entry: "todo" 11 | source: ["title", "content", "created_date", "updated_date"] 12 | target: ["title", "content", "start_time", "end_time"] 13 | - entry: "blog" 14 | source: ["title", "content", "created_date", "updated_date"] 15 | target: ["title", "content", "start_time", "end_time"] 16 | filter: ~ 17 | 18 | -------------------------------------------------------------------------------- /quake_webapp/packages/quake-viewer/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/data-grid/readme.md: -------------------------------------------------------------------------------- 1 | # data-grid 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | -------- | --------- | ----------- | ------- | ------- | 12 | | `data` | -- | | `Table` | `null` | 13 | 14 | 15 | ## Dependencies 16 | 17 | ### Used by 18 | 19 | - [quake-render](../quake-render) 20 | 21 | ### Graph 22 | ```mermaid 23 | graph TD; 24 | quake-render --> data-grid 25 | style data-grid fill:#f9f,stroke:#333,stroke-width:4px 26 | ``` 27 | 28 | ---------------------------------------------- 29 | 30 | *Built with [StencilJS](https://stenciljs.com/)* 31 | -------------------------------------------------------------------------------- /examples/story/0024-pagelink-storage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: pagelink storage 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-14 23:26:04 7 | updated_date: 2021-12-22 08:18:24 8 | --- 9 | 10 | need a syntax or file for storage items: Hashmap for search and index 11 | 12 | graphviz 13 | 14 | ``` 15 | a -> b 16 | b -> c 17 | ``` 18 | 19 | Plantuml 20 | 21 | ``` 22 | a -> b 23 | b -> c 24 | ``` 25 | 26 | ## idea 0.1: all in one 27 | 28 | also need to index: 29 | 30 | ```yaml 31 | notes: 32 | - source: 01 33 | - target: 34 | - story: 01, 02, 03, 04 35 | ``` 36 | 37 | ## idea 0.2: one by one 38 | 39 | by paths: 40 | 41 | ```bash 42 | links 43 | ├── blog.yaml 44 | └── notes.yaml 45 | ``` 46 | -------------------------------------------------------------------------------- /libs/quake_importer/src/onenote.rs: -------------------------------------------------------------------------------- 1 | #[derive(Serialize, Deserialize, Debug)] 2 | #[serde(rename_all = "camelCase")] 3 | pub struct SectionVO { 4 | pub source_url: String, 5 | pub id: String, 6 | pub created_date_time: String, 7 | pub display_name: String, 8 | pub last_modified_date_time: String, 9 | pub parent_name: String, 10 | pub pages: Vec, 11 | } 12 | 13 | #[derive(Serialize, Deserialize, Debug)] 14 | #[serde(rename_all = "camelCase")] 15 | pub struct PageVO { 16 | pub source_url: String, 17 | pub id: String, 18 | pub created_date_time: String, 19 | pub last_modified_date_time: Option, 20 | pub title: String, 21 | pub content_url: String, 22 | } 23 | -------------------------------------------------------------------------------- /src/cli/helper/table_process.rs: -------------------------------------------------------------------------------- 1 | use std::fs::File; 2 | 3 | use comfy_table::Table; 4 | use csv::Reader; 5 | 6 | pub fn csv_to_terminal_table(rdr: &mut Reader) -> Table { 7 | let mut table = Table::new(); 8 | 9 | let mut header = vec![]; 10 | if let Ok(record) = rdr.headers() { 11 | for str in record { 12 | header.push(String::from(str)) 13 | } 14 | } 15 | 16 | table.set_header(header); 17 | 18 | for result in rdr.records() { 19 | let record = result.unwrap(); 20 | let mut row = vec![]; 21 | for str in &record { 22 | row.push(String::from(str)); 23 | } 24 | table.add_row(row); 25 | } 26 | 27 | table 28 | } 29 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/stencil.config.ts: -------------------------------------------------------------------------------- 1 | import { Config } from '@stencil/core'; 2 | 3 | export const config: Config = { 4 | namespace: 'dashboard', 5 | buildEs5: false, 6 | outputTargets: [ 7 | { 8 | type: 'dist', 9 | esmLoaderPath: '../loader', 10 | }, 11 | { 12 | type: 'dist-custom-elements-bundle', 13 | }, 14 | { 15 | type: 'docs-readme', 16 | }, 17 | { 18 | // copy wasm 19 | type: 'dist', 20 | copy: [ 21 | { src: '../node_modules/@quakeworks/quake_wasm/quake_wasm_bg.wasm', dest: 'quake_wasm_bg.wasm' } 22 | ] 23 | }, 24 | { 25 | type: 'www', 26 | serviceWorker: null, // disable service workers 27 | }, 28 | ], 29 | }; 30 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/simple-layout/readme.md: -------------------------------------------------------------------------------- 1 | # simple-layout 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | -------- | --------- | ----------- | -------- | ----------- | 12 | | `layout` | -- | | `Layout` | `undefined` | 13 | 14 | 15 | ## Dependencies 16 | 17 | ### Used by 18 | 19 | - [quake-dashboard](../quake-dashboard) 20 | 21 | ### Graph 22 | ```mermaid 23 | graph TD; 24 | quake-dashboard --> simple-layout 25 | style simple-layout fill:#f9f,stroke:#333,stroke-width:4px 26 | ``` 27 | 28 | ---------------------------------------------- 29 | 30 | *Built with [StencilJS](https://stenciljs.com/)* 31 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/components/base-model/DiamondNodeFactory.tsx: -------------------------------------------------------------------------------- 1 | import { DiamondNodeWidget } from './DiamondNodeWidget'; 2 | import { DiamondNodeModel } from './DiamondNodeModel'; 3 | import * as React from 'react'; 4 | import { AbstractReactFactory } from '@projectstorm/react-canvas-core'; 5 | import { DiagramEngine } from '@projectstorm/react-diagrams-core'; 6 | 7 | export class DiamondNodeFactory extends AbstractReactFactory { 8 | constructor() { 9 | super('diamond'); 10 | } 11 | 12 | generateReactWidget(event: any): JSX.Element { 13 | return ; 14 | } 15 | 16 | generateModel(event: any) { 17 | return new DiamondNodeModel(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /docs/adr/0022-flowy-board.md: -------------------------------------------------------------------------------- 1 | # 22. flowy board 2 | 3 | Date: 2021-12-01 4 | 5 | ## Status 6 | 7 | 2021-12-01 proposed 8 | 9 | 2021-12-07 done 10 | 11 | ## Context 12 | 13 | - Kanban 14 | - Roadmap 15 | - Todo 16 | 17 | https://roadmap.meilisearch.com/tabs/3-launched 18 | 19 | ``` 20 | - type: roadmap 21 | meta: board 22 | flow: 23 | - ideas 24 | - under_consideration 25 | - planned 26 | - in_progress 27 | - launched 28 | display: "" 29 | fields: 30 | - title: Title 31 | - author: String 32 | - content: Body 33 | - created_date: Date 34 | - updated_date: Date 35 | actions: ~ 36 | ``` 37 | 38 | ## Decision 39 | 40 | Decision here... 41 | 42 | ## Consequences 43 | 44 | Consequences here... 45 | -------------------------------------------------------------------------------- /libs/quake_importer/README.md: -------------------------------------------------------------------------------- 1 | # Quake Importer 2 | 3 | - [x] Django / Mezzanine Database 4 | - [ ] OneNote 5 | - [x] Microsoft Todo 6 | - [ ] Apple Calendar 7 | - [x] Apple Notes 8 | 9 | ## Custom DSL for merge field 10 | 11 | ## Export 12 | 13 | ### Microsoft Todo Export 14 | 15 | use `https://github.com/quakeworks/microsoft-todo-export` for Microsoft Todo 16 | 17 | ### Microsoft OneNote 18 | 19 | use `https://github.com/quakeworks/microsoft-todo-export` for Microsoft OneNote 20 | 21 | ### Apple Notes 22 | 23 | use `https://github.com/quakeworks/readnotes` for build `mac_apt.db` 24 | 25 | ``` 26 | git clone https://github.com/quakeworks/readnotes 27 | pip install -r requirements.txt 28 | 29 | python3 -B readnotes.py --user phodal --input "NoteStore.sqlite" --output . 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/components/base-model/DiamondNodeModel.ts: -------------------------------------------------------------------------------- 1 | import {NodeModel, NodeModelGenerics, PortModelAlignment} from '@projectstorm/react-diagrams'; 2 | import {DiamondPortModel} from './DiamondPortModel'; 3 | 4 | export interface DiamondNodeModelGenerics extends NodeModelGenerics { 5 | PORT: DiamondPortModel; 6 | } 7 | 8 | export class DiamondNodeModel extends NodeModel { 9 | constructor() { 10 | super({ 11 | type: 'diamond' 12 | }); 13 | 14 | this.addPort(new DiamondPortModel(PortModelAlignment.TOP)); 15 | this.addPort(new DiamondPortModel(PortModelAlignment.LEFT)); 16 | this.addPort(new DiamondPortModel(PortModelAlignment.BOTTOM)); 17 | this.addPort(new DiamondPortModel(PortModelAlignment.RIGHT)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Quake Dashboard 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-bar/readme.md: -------------------------------------------------------------------------------- 1 | # graph-bar 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | -------- | --------- | ----------- | -------- | ------- | 12 | | `config` | `config` | | `any` | `{}` | 13 | | `data` | -- | | `Table` | `null` | 14 | | `width` | `width` | | `number` | `300` | 15 | 16 | 17 | ## Dependencies 18 | 19 | ### Used by 20 | 21 | - [quake-render](../quake-render) 22 | 23 | ### Graph 24 | ```mermaid 25 | graph TD; 26 | quake-render --> graph-bar 27 | style graph-bar fill:#f9f,stroke:#333,stroke-width:4px 28 | ``` 29 | 30 | ---------------------------------------------- 31 | 32 | *Built with [StencilJS](https://stenciljs.com/)* 33 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/README.md: -------------------------------------------------------------------------------- 1 | # Board 2 | 3 | samples: http://tiddlymap.org/ 4 | 5 | Monoco Editor with Lowcode Editor 6 | 7 | ## Todos 8 | 9 | - [ ] UI 10 | - [ ] workspace: [https://github.com/projectstorm/react-workspaces](https://github.com/projectstorm/react-workspaces) 11 | - [ ] custom icons 12 | - [ ] DSL design 13 | - with ProseMirror or MonacoEditor 14 | - [ ] Custom Node render 15 | - [ ] Import and exporter 16 | - from draw.io or convert to draw.io ? 17 | 18 | ## DSL samples: 19 | 20 | mermaid like ? 21 | 22 | quake board language 23 | 24 | Graphviz like ? 25 | 26 | ```qbl 27 | focus "Concept": 28 | 29 | ``` 30 | 31 | ### Graphviz like 32 | 33 | parsers: 34 | 35 | - [dotparser](https://github.com/anvaka/dotparser) 36 | - [https://github.com/ts-graphviz/parser](https://github.com/ts-graphviz/parser) 37 | 38 | 39 | -------------------------------------------------------------------------------- /quake_webapp/quake-kbar/README.md: -------------------------------------------------------------------------------- 1 | # Board 2 | 3 | samples: http://tiddlymap.org/ 4 | 5 | Monoco Editor with Lowcode Editor 6 | 7 | ## Todos 8 | 9 | - [ ] UI 10 | - [ ] workspace: [https://github.com/projectstorm/react-workspaces](https://github.com/projectstorm/react-workspaces) 11 | - [ ] custom icons 12 | - [ ] DSL design 13 | - with ProseMirror or MonacoEditor 14 | - [ ] Custom Node render 15 | - [ ] Import and exporter 16 | - from draw.io or convert to draw.io ? 17 | 18 | ## DSL samples: 19 | 20 | mermaid like ? 21 | 22 | quake board language 23 | 24 | Graphviz like ? 25 | 26 | ```qbl 27 | focus "Concept": 28 | 29 | ``` 30 | 31 | ### Graphviz like 32 | 33 | parsers: 34 | 35 | - [dotparser](https://github.com/anvaka/dotparser) 36 | - [https://github.com/ts-graphviz/parser](https://github.com/ts-graphviz/parser) 37 | 38 | 39 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/graph-line/readme.md: -------------------------------------------------------------------------------- 1 | # graph-line 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | -------- | --------- | ----------- | -------- | ------- | 12 | | `config` | `config` | | `any` | `{}` | 13 | | `data` | -- | | `Table` | `null` | 14 | | `width` | `width` | | `number` | `300` | 15 | 16 | 17 | ## Dependencies 18 | 19 | ### Used by 20 | 21 | - [quake-render](../quake-render) 22 | 23 | ### Graph 24 | ```mermaid 25 | graph TD; 26 | quake-render --> graph-line 27 | style graph-line fill:#f9f,stroke:#333,stroke-width:4px 28 | ``` 29 | 30 | ---------------------------------------------- 31 | 32 | *Built with [StencilJS](https://stenciljs.com/)* 33 | -------------------------------------------------------------------------------- /examples/story/0036-auto-generate-pdf-papers-to-entry.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: auto generate pdf papers to entry 3 | author: 4 | status: Spike 5 | priority: Low 6 | created_date: 2021-12-29 08:20:11 7 | updated_date: 2021-12-29 20:06:11 8 | --- 9 | 10 | Set auto processing pdf files; 11 | 12 | 1. watch path for pdf files join 13 | 2. processing pdf content 14 | 3. rename pdf content papers 15 | 4. search support in quake 16 | 17 | ## DSL design 18 | 19 | ```yaml 20 | processors: 21 | file_engines: ['pdf', 'mobi', 'epub'] 22 | ``` 23 | 24 | 25 | 26 | ```yaml 27 | processors: 28 | file_flows: 29 | - from("file").to("content").processor(["epub", "pdf", "mobi"]) 30 | ``` 31 | 32 | also custom engine for whiteboard? 33 | 34 | ```yaml 35 | processors: 36 | file_flows: 37 | - from("graph").to("content").processor(component("whiteboard")) 38 | ``` 39 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/components/concept/ConceptNodeFactory.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { ConceptNodeModel } from "./ConceptNodeModel"; 3 | import { ConceptNodeWidget } from "./ConceptNodeWidget"; 4 | import { AbstractReactFactory } from "@projectstorm/react-canvas-core"; 5 | import { DiagramEngine } from "@projectstorm/react-diagrams-core"; 6 | 7 | export class ConceptNodeFactory extends AbstractReactFactory { 8 | constructor() { 9 | super("concept"); 10 | } 11 | 12 | generateModel(initialConfig: any) { 13 | return new ConceptNodeModel(); 14 | } 15 | 16 | generateReactWidget(event: any): JSX.Element { 17 | return ( 18 | 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /quake_tui/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_tui" 3 | version = "0.5.0" 4 | edition = "2018" 5 | authors = ["Inherd Group "] 6 | description = """ 7 | Simple knowledge management tool for geek. 8 | """ 9 | documentation = "https://github.com/phodal/quake" 10 | repository = "https://github.com/phodal/quake" 11 | readme = "README.md" 12 | license = "MIT" 13 | exclude = ["_fixtures/*"] 14 | autoexamples = true 15 | keywords = ["knowledge", "dashboard"] 16 | 17 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 18 | 19 | [dependencies] 20 | quake_core = { path = "../quake_core", version = "0.5.0" } 21 | 22 | crossterm = "0.22" 23 | tui = { version = "0.16", default-features = false, features = ['crossterm'] } 24 | unicode-width = "0.1.9" 25 | serde_yaml = "0.8" 26 | 27 | [dev-dependencies] 28 | rstest = "0.12.0" 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F680 Feature Request" 3 | about: "I have a suggestion (and may want to implement it \U0001F642)!" 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Feature Request 11 | 12 | **Is your feature request related to a problem? Please describe.** 13 | A clear and concise description of what the problem is. Ex. I have an issue when [...] 14 | 15 | **Describe the solution you'd like** 16 | A clear and concise description of what you want to happen. Add any considered drawbacks. 17 | 18 | **Describe alternatives you've considered** 19 | A clear and concise description of any alternative solutions or features you've considered. 20 | 21 | **Teachability, Documentation, Adoption, Migration Strategy** 22 | If you can, explain how users will be able to use this and possibly write out a version the docs. 23 | Maybe a screenshot or design? 24 | -------------------------------------------------------------------------------- /examples/story/0019-filter-for-flow-codegen.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: filter for flow codegen 3 | author: 4 | status: Done 5 | priority: Low 6 | created_date: 2021-12-08 10:01:36 7 | updated_date: 2021-12-08 10:01:36 8 | --- 9 | 10 | ## JSON Filter 11 | 12 | [https://platform.data-axle.com/people/docs/filter_dsl](https://platform.data-axle.com/people/docs/filter_dsl) 13 | 14 | samples 1 15 | 16 | ```bash 17 | curl -X GET https://api.data-axle.com/v1/people/search -d '{ 18 | "filter": { 19 | "relation": "equals", 20 | "attribute": "state", 21 | "value": "NY", 22 | "negated": true 23 | } 24 | }' 25 | ``` 26 | 27 | samples 2 28 | 29 | ```bash 30 | curl -X GET https://api.data-axle.com/v1/people/search -d '{ 31 | "filter": { 32 | "relation": "in", 33 | "attribute": "state", 34 | "value": ["WA", "OR", "ID", "CA"] 35 | } 36 | }' 37 | ``` 38 | 39 | map { 40 | created_date -> start_time 41 | } -------------------------------------------------------------------------------- /quake_webapp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quake_webapp", 3 | "version": "1.0.0", 4 | "description": "Framework Spikes", 5 | "main": "app.js", 6 | "scripts": { 7 | "rinstall": "pnpm recursive install", 8 | "rstart": "pnpm recursive run start", 9 | "local": "pnpm recursive run build && node build.js", 10 | "dist": "nx run-many --target=build --all && node build.js", 11 | "test": "echo \"Error: no test specified\" && exit 1" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "dependencies": { 16 | "cheerio": "^1.0.0-rc.10", 17 | "fs-extra": "^10.0.0" 18 | }, 19 | "devDependencies": { 20 | "@nrwl/cli": "latest", 21 | "@nrwl/nx-cloud": "latest", 22 | "@nrwl/tao": "latest", 23 | "@nrwl/workspace": "latest", 24 | "nx": "^15.3.0", 25 | "typescript": "4.2.4", 26 | "uglifyjs-webpack-plugin": "^2.2.0" 27 | }, 28 | "resolutions": { 29 | "eslint": "^7.11.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /quake_webapp/packages/timeline/config-overrides.js: -------------------------------------------------------------------------------- 1 | const MiniCssExtractPlugin = require('mini-css-extract-plugin'); 2 | const {override, disableEsLint} = require("customize-cra"); 3 | 4 | function overrideExtra(config, env) { 5 | if (env === 'production') { 6 | // or adjustStyleLoaders 7 | 8 | // config.plugins.push( 9 | // new MiniCssExtractPlugin({ 10 | // filename: "[name].[contenthash].css", 11 | // chunkFilename: "[id].[contenthash].css", 12 | // }) 13 | // ) 14 | } 15 | 16 | override( 17 | disableEsLint(), 18 | )(config, env); 19 | 20 | config.optimization.splitChunks = { 21 | cacheGroups: { 22 | default: false 23 | } 24 | }; 25 | 26 | config.output = { 27 | ...config.output, 28 | filename: `static/quake-timeline.min.js`, 29 | }; 30 | 31 | config.optimization.runtimeChunk = false; 32 | 33 | return config; 34 | } 35 | 36 | module.exports = overrideExtra 37 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/embed-link/readme.md: -------------------------------------------------------------------------------- 1 | # embed-link 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ----------- | ------------ | ----------- | -------- | ------- | 12 | | `entryId` | `entry-id` | | `number` | `0` | 13 | | `entryType` | `entry-type` | | `string` | `''` | 14 | 15 | 16 | ## Dependencies 17 | 18 | ### Depends on 19 | 20 | - [quake-render](../quake-render) 21 | 22 | ### Graph 23 | ```mermaid 24 | graph TD; 25 | embed-link --> quake-render 26 | quake-render --> data-grid 27 | quake-render --> graph-bar 28 | quake-render --> graph-line 29 | quake-render --> graph-transflow 30 | style embed-link fill:#f9f,stroke:#333,stroke-width:4px 31 | ``` 32 | 33 | ---------------------------------------------- 34 | 35 | *Built with [StencilJS](https://stenciljs.com/)* 36 | -------------------------------------------------------------------------------- /quake_wasm/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 26 | 27 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/embed-link/embed-link.tsx: -------------------------------------------------------------------------------- 1 | import {Component, Host, h, Prop, State} from '@stencil/core'; 2 | 3 | @Component({ 4 | tag: 'embed-link', 5 | styleUrl: 'embed-link.css', 6 | shadow: true, 7 | }) 8 | export class EmbedLink { 9 | @Prop() entryType: string = ''; 10 | @Prop() entryId: number = 0; 11 | 12 | @State() entry: { 13 | id: number, 14 | title: string, 15 | content: string 16 | } = { 17 | id: 0, 18 | title: '', 19 | content: '' 20 | } 21 | 22 | async componentWillLoad() { 23 | try { 24 | let response = await fetch(`/entry/${this.entryType}/${this.entryId}`) 25 | this.entry = await response.json(); 26 | } catch (error) { 27 | 28 | } 29 | } 30 | 31 | render() { 32 | return ( 33 | 34 | # {this.entry.title} 35 | 36 | 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /quake_gui/src-tauri/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_gui-tauri" 3 | version = "0.0.0" 4 | description = "A Tauri App" 5 | authors = ["h@phodal.com"] 6 | license = "" 7 | repository = "" 8 | edition = "2021" 9 | rust-version = "1.57" 10 | 11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 12 | 13 | [build-dependencies] 14 | tauri-build = {version = "1.2", features = [] } 15 | 16 | [dependencies] 17 | serde_json = "1.0" 18 | serde = { version = "1.0", features = ["derive"] } 19 | tauri = {version = "1.2", features = ["dialog-all"] } 20 | 21 | [features] 22 | # by default Tauri runs in production mode 23 | # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL 24 | default = [ "custom-protocol" ] 25 | # this feature is used used for production builds where `devPath` points to the filesystem 26 | # DO NOT remove this 27 | custom-protocol = [ "tauri/custom-protocol" ] 28 | -------------------------------------------------------------------------------- /quake_gui_old/src/lib.rs: -------------------------------------------------------------------------------- 1 | use dioxus::prelude::*; 2 | use quake_core::entry::{entry_paths::EntryPaths, EntryDefines}; 3 | use std::path::PathBuf; 4 | 5 | pub fn launch(workspace: PathBuf) { 6 | dioxus::desktop::launch_with_props(app, AppProps { workspace }, |c| { 7 | c.with_custom_head("".to_string()) 8 | }); 9 | } 10 | 11 | fn app(cx: Scope) -> Element { 12 | let defines = EntryDefines::from_path(&cx.props.workspace.join(EntryPaths::entries_define())); 13 | 14 | rsx!(cx, div { 15 | main { 16 | defines.entries.iter().map(|define| { 17 | rsx!( 18 | div { 19 | key: "{define.entry_type}", 20 | "{define.entry_type}" 21 | } 22 | ) 23 | }) 24 | } 25 | }) 26 | } 27 | 28 | struct AppProps { 29 | workspace: PathBuf, 30 | } 31 | -------------------------------------------------------------------------------- /quake_core/src/parser/errors.rs: -------------------------------------------------------------------------------- 1 | use std::error::Error as StdError; 2 | use std::fmt::{Debug, Formatter}; 3 | use std::{fmt, io}; 4 | 5 | pub struct QuakeParserError { 6 | msg: String, 7 | } 8 | 9 | impl QuakeParserError { 10 | pub fn new(msg: &str) -> Self { 11 | Self { 12 | msg: String::from(msg), 13 | } 14 | } 15 | } 16 | 17 | impl fmt::Display for QuakeParserError { 18 | fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { 19 | write!(fmt, "QuakeParserError: {}", self.msg) 20 | } 21 | } 22 | 23 | impl Debug for QuakeParserError { 24 | fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result { 25 | write!(fmt, "QuakeParserError: {}", self.msg) 26 | } 27 | } 28 | 29 | impl StdError for QuakeParserError {} 30 | 31 | impl From for QuakeParserError { 32 | fn from(err: io::Error) -> Self { 33 | Self { 34 | msg: format!("cause by: {}", err), 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /quake_webapp/nx.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@nrwl/workspace/presets/npm.json", 3 | "npmScope": "quake_webapp", 4 | "tasksRunnerOptions": { 5 | "default": { 6 | "runner": "@nrwl/nx-cloud", 7 | "options": { 8 | "cacheableOperations": [ 9 | "build", 10 | "test", 11 | "lint", 12 | "package", 13 | "prepare" 14 | ], 15 | "accessToken": "NWZhOTRlMDItNDgyNy00ZjMyLTk0ZWQtODJjMWZmZmQxMTNifHJlYWQtd3JpdGU=" 16 | } 17 | } 18 | }, 19 | "targetDependencies": { 20 | "build": [ 21 | { 22 | "target": "build", 23 | "projects": "dependencies" 24 | } 25 | ], 26 | "prepare": [ 27 | { 28 | "target": "prepare", 29 | "projects": "dependencies" 30 | } 31 | ], 32 | "package": [ 33 | { 34 | "target": "package", 35 | "projects": "dependencies" 36 | } 37 | ] 38 | }, 39 | "affected": { 40 | "defaultBase": "master" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /examples/bookmark/0001-the-infinite-game.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Infinite Game 3 | created_date: 2021-12-15 19:54:55 4 | updated_date: 2021-12-15 19:54:55 5 | tag: 6 | author: 7 | --- 8 | 9 | origin: ?? 10 | 11 | notes: ?? 12 | 13 | 一个组织的真正价值取决于他人想要为该组织做贡献,令其能够一直成功下去的意愿,而这个“一直”不仅指他们自己任职期间,也包括他们卸任之后的长远未来。 14 | 15 | 无限的视角可以解放我们的思维,让我们能够专注于更宏大的愿景,而非过度关注其他公司正在做些什么。以新技术为例,无限思维的玩家更擅长预测新技术在未来的应用,而非忙于应对新技术将对现有商业模式构成的挑战。 16 | 17 | 在选择领导方式时,我们必须考虑以下三点: 18 | 19 | 1. 某一特定游戏是有限的还是无限的不是由我们来决定的。 20 | 2. 我们可以选择是否要参与该游戏。 21 | 3. 如果决定参与,我们可以选择到底是运用有限思维还是无限思维。 22 | 23 | ## 崇高的事业 24 | 25 | 崇高的事业关乎的是迄今尚未实现的未来,因此我们并不知道它最终会呈现何种样貌。我们可以按照自己喜欢的方式,坚持不懈地建设,还可以在推进的过程中不断改进。 26 | 27 | 崇高的事业必须是: 28 | 支持某事的——积极的、乐观的; 29 | 有凝聚力的——欢迎所有愿意为之做出贡献的人; 30 | 服务导向的——为了他人的主要利益; 31 | 有适应力的——能够经受住政治、技术和文化的变迁; 32 | 理想主义的——宏伟、大胆但最终无法实现。 33 | 34 | 成为最好的并非崇高的事业 35 | 36 | 企业责任的定义必须包含以下几点。 37 | 38 | 1. 推进事业:给人们归属感,让他们感觉自己的生活和工作有超越劳动本身的价值。 39 | 2. 保护相关的人:企业的运营方式必须有助于保护员工、消费者,以及我们的生活环境和工作环境。 40 | 3. 创造利润:资金是企业维持独立发展所需的“燃料”,能够维持独立发展的企业才有可能继续推进前两个优先事项。 41 | 42 | 简言之: 43 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/markdown/quake-down.spec.ts: -------------------------------------------------------------------------------- 1 | import QuakeDown from './quake-down'; 2 | 3 | describe('render', () => { 4 | it('build heading', () => { 5 | let data = new QuakeDown('# heading+', () => "").build(); 6 | 7 | expect(data.length).toEqual(1); 8 | expect(data).toEqual([{type: 'heading', depth: 1, text: '', anchor: ''}]) 9 | }); 10 | 11 | it('build heading with links', () => { 12 | let quakeDown = new QuakeDown('# [heading+](https://quake.inherd.org)\n', () => ""); 13 | let data = quakeDown.build(); 14 | 15 | expect(data).toEqual([{type: 'heading', depth: 1, text: '', anchor: ''}]) 16 | }); 17 | 18 | it('build code type', () => { 19 | let quakeDown = new QuakeDown('```@graph(\'bar\')\n' + 20 | 'demo\n' + 21 | '```', () => ""); 22 | let data = quakeDown.build(); 23 | 24 | expect(data).toEqual([{ 25 | type: 'code', 26 | code_type: 'Graph', 27 | code_param: 'bar', 28 | lang: "@graph('bar')", 29 | text: 'demo' 30 | }]) 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /quake_core/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "quake_core" 3 | version = "0.5.0" 4 | edition = "2018" 5 | authors = ["Phodal HUANG "] 6 | description = """ 7 | Simple knowledge management tool for geek. 8 | """ 9 | documentation = "https://github.com/phodal/quake" 10 | repository = "https://github.com/phodal/quake" 11 | readme = "README.md" 12 | license = "MIT" 13 | exclude = ["_fixtures/*"] 14 | autoexamples = true 15 | keywords = ["knowledge", "dashboard"] 16 | 17 | [dependencies] 18 | serde = { version = "1.0", features = ["derive"] } 19 | serde_derive = "1.0" 20 | serde_yaml = "0.8" 21 | serde_json = "1.0" 22 | 23 | pest = "2.1.3" 24 | pest_derive = "2.1.0" 25 | 26 | regex = "1.0" 27 | 28 | lazy_static = "1.4.0" 29 | 30 | # date time 31 | chrono = "0.4" 32 | 33 | # hashmap in order 34 | indexmap = { version = "1.7.0", features = ["serde"] } 35 | 36 | # markdown parser 37 | pulldown-cmark = "0.8.0" 38 | pulldown-cmark-to-cmark = "7.1.1" 39 | 40 | # walkdir 41 | walkdir = "2" 42 | csv = "1.1" 43 | 44 | # jsonify 45 | json = "0.12.4" 46 | -------------------------------------------------------------------------------- /.github/workflows/web.yml: -------------------------------------------------------------------------------- 1 | name: web 2 | 3 | on: [ push, pull_request ] 4 | 5 | jobs: 6 | main: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | with: 11 | fetch-depth: 0 12 | 13 | - name: Cache pnpm modules 14 | uses: actions/cache@v2 15 | with: 16 | path: ~/.pnpm-store 17 | key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} 18 | restore-keys: | 19 | ${{ runner.os }}- 20 | 21 | - name: setup pnpm and install all dependencies 22 | uses: pnpm/action-setup@v2.0.1 23 | with: 24 | version: 6.0.2 25 | run_install: | 26 | - recursive: true 27 | 28 | - name: Derive appropriate SHAs for base and head for `nx affected` commands 29 | uses: nrwl/nx-set-shas@v2 30 | with: 31 | main-branch-name: 'master' 32 | 33 | - uses: actions/setup-node@v1 34 | with: 35 | node-version: '16' 36 | 37 | - run: cd quake_webapp && yarn run nx affected --target=build --parallel -------------------------------------------------------------------------------- /src/usecases/suggest_usecases.rs: -------------------------------------------------------------------------------- 1 | use std::fs; 2 | use std::path::PathBuf; 3 | 4 | use serde_derive::{Deserialize, Serialize}; 5 | 6 | use quake_core::entry::entry_paths::EntryPaths; 7 | use quake_core::entry::{EntryDefine, EntryDefines}; 8 | 9 | pub fn create_suggest(workspace: &str) -> ActionSuggest { 10 | let mut suggest = ActionSuggest::default(); 11 | let define_path = EntryPaths::entries_define(); 12 | let path = PathBuf::from(workspace).join(define_path); 13 | 14 | let entries_str = 15 | fs::read_to_string(path).unwrap_or_else(|_| panic!("cannot read {:}", define_path)); 16 | let entries: EntryDefines = serde_yaml::from_str(&entries_str).unwrap(); 17 | suggest.entries = entries.entries; 18 | 19 | let actions = vec!["add", "edit", "show"]; 20 | for action in actions { 21 | suggest.actions.push(action.to_string()); 22 | } 23 | 24 | suggest 25 | } 26 | 27 | #[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Default)] 28 | pub struct ActionSuggest { 29 | pub entries: Vec, 30 | pub actions: Vec, 31 | } 32 | -------------------------------------------------------------------------------- /quake_webapp/packages/calendar/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | React App 13 | 14 | 15 | You need to enable JavaScript to run this app. 16 | 17 | 18 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/quake-dashboard/readme.md: -------------------------------------------------------------------------------- 1 | # my-component 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ----------- | ------------ | ----------- | -------- | ------- | 12 | | `indexName` | `index-name` | | `string` | `""` | 13 | 14 | 15 | ## Events 16 | 17 | | Event | Description | Type | 18 | | ---------------- | ----------- | --------------------------- | 19 | | `dispatchAction` | | `CustomEvent` | 20 | 21 | 22 | ## Dependencies 23 | 24 | ### Depends on 25 | 26 | - [fetch-api](../fetch-api) 27 | - [simple-layout](../simple-layout) 28 | - [entry-card](../entry-card) 29 | 30 | ### Graph 31 | ```mermaid 32 | graph TD; 33 | quake-dashboard --> fetch-api 34 | quake-dashboard --> simple-layout 35 | quake-dashboard --> entry-card 36 | style quake-dashboard fill:#f9f,stroke:#333,stroke-width:4px 37 | ``` 38 | 39 | ---------------------------------------------- 40 | 41 | *Built with [StencilJS](https://stenciljs.com/)* 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Phodal HUANG 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /quake_webapp/packages/quake-viewer/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | React App 13 | 14 | 15 | You need to enable JavaScript to run this app. 16 | 17 | 18 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /examples/story/0026-transflow-support-httphttps-api-and-fetch-next.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: transflow support http/https api and fetch next 3 | author: 4 | status: Doing 5 | priority: Low 6 | created_date: 2021-12-16 00:14:27 7 | updated_date: 2021-12-22 08:18:24 8 | --- 9 | 10 | refs: [https://camel.apache.org/manual/rest-dsl.html](https://camel.apache.org/manual/rest-dsl.html) 11 | 12 | ```java 13 | rest("/say/hello") 14 | .get().route().transform().constant("Hello World"); 15 | rest("/say/bye") 16 | .get().consumes("application/json").route().transform().constant("Bye World").endRest() 17 | .post().to("mock:update"); 18 | ``` 19 | 20 | Samples: 21 | 22 | ``` 23 | from( 24 | rest('https://examples.com/api/blog').next()? 25 | ) 26 | .to() 27 | .map([]) 28 | ``` 29 | 30 | some config: 31 | 32 | 1. next link: `.next(field('@'))`; 33 | 2. offsets: `.next(param('offset', 40))`; 34 | 35 | and a fetch next API 36 | 37 | ``` 38 | @Event(): fetchSuccess={(data) => {}} 39 | @Props(): url; 40 | @Props(): type 41 | 42 | load global quake config; 43 | 44 | 45 | 46 | 47 | ``` 48 | 49 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/quake-dashboard/quake-core-wrapper.ts: -------------------------------------------------------------------------------- 1 | import init, {flow_to_code, parse_action} from "@quakeworks/quake_wasm"; 2 | import axios from "axios"; 3 | 4 | export async function init_wasm() { 5 | await init() 6 | } 7 | 8 | export async function parseAction(str: string) { 9 | if ((window as any).Quake?.pagedump) { 10 | return JSON.parse(parse_action(str)); 11 | } else { 12 | return axios.get('/action/query/', { 13 | params: { 14 | input: str 15 | } 16 | }).then((res) => {return res.data}); 17 | } 18 | } 19 | 20 | // demo: from('blog').to() 21 | export async function createTransflow(flow_name: string, flow: string) { 22 | if ((window as any).Quake?.pagedump) { 23 | let transflow = `transflow ${flow_name} { ${flow} } ` 24 | let defines = await axios.get('/entry/defines').then((res) => { 25 | return res.data; 26 | }); 27 | 28 | return flow_to_code(transflow, JSON.stringify(defines)); 29 | } else { 30 | return axios.post(`/transflow/translate/${flow_name}`, { 31 | flow: flow 32 | }).then((res) => {return res.data}); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/entry-card/readme.md: -------------------------------------------------------------------------------- 1 | # entry-card 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ---------- | ----------- | ----------- | -------- | ----------- | 12 | | `fileProp` | `file-prop` | | `string` | `undefined` | 13 | | `item` | `item` | | `any` | `undefined` | 14 | | `type` | `type` | | `string` | `undefined` | 15 | 16 | 17 | ## Events 18 | 19 | | Event | Description | Type | 20 | | ------------- | ----------- | --------------------- | 21 | | `triggerEdit` | | `CustomEvent` | 22 | | `triggerShow` | | `CustomEvent` | 23 | 24 | 25 | ## Dependencies 26 | 27 | ### Used by 28 | 29 | - [quake-dashboard](../quake-dashboard) 30 | 31 | ### Graph 32 | ```mermaid 33 | graph TD; 34 | quake-dashboard --> entry-card 35 | style entry-card fill:#f9f,stroke:#333,stroke-width:4px 36 | ``` 37 | 38 | ---------------------------------------------- 39 | 40 | *Built with [StencilJS](https://stenciljs.com/)* 41 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/components/concept/ConceptNodeModel.tsx: -------------------------------------------------------------------------------- 1 | import { NodeModel, DefaultPortModel } from "@projectstorm/react-diagrams"; 2 | import { BaseModelOptions } from "@projectstorm/react-canvas-core"; 3 | 4 | export interface ConceptNodeModelOptions extends BaseModelOptions { 5 | color?: string; 6 | } 7 | 8 | export class ConceptNodeModel extends NodeModel { 9 | color: string; 10 | 11 | constructor(options: ConceptNodeModelOptions = {}) { 12 | super({ 13 | ...options, 14 | type: "concept" 15 | }); 16 | this.color = options.color || "rgb(0,192,255)"; 17 | 18 | // setup an in and out port 19 | this.addPort( 20 | new DefaultPortModel({ 21 | in: true, 22 | name: "in" 23 | }) 24 | ); 25 | this.addPort( 26 | new DefaultPortModel({ 27 | in: false, 28 | name: "out" 29 | }) 30 | ); 31 | } 32 | 33 | serialize() { 34 | return { 35 | ...super.serialize(), 36 | color: this.color 37 | }; 38 | } 39 | 40 | deserialize(event: any): void { 41 | super.deserialize(event); 42 | this.color = event.data.color; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /quake_core/src/entry/slug.rs: -------------------------------------------------------------------------------- 1 | use lazy_static::lazy_static; 2 | use regex::Regex; 3 | 4 | lazy_static! { 5 | static ref SPECIAL: Regex = Regex::new("[\\s_-]+").unwrap(); // swap any length of whitespace, underscore, hyphen characters with a single _ 6 | static ref LEADING: Regex = Regex::new("^-+|-+$").unwrap(); 7 | } 8 | 9 | pub fn slugify(text: &str) -> String { 10 | let lower = text.trim().to_lowercase(); 11 | let result = SPECIAL.replace_all(lower.as_str(), "-").to_string(); 12 | let result = LEADING.replace_all(result.as_str(), "").to_string(); 13 | 14 | result 15 | .replace([' ', '?', '#', ':'], "-") 16 | .replace([',', '。'], "") 17 | .replace("-/-", "") 18 | .replace('/', "") 19 | .replace("——", "-") 20 | } 21 | 22 | #[cfg(test)] 23 | mod tests { 24 | use crate::entry::slug::slugify; 25 | 26 | #[test] 27 | fn chinese_slug() { 28 | let string = slugify("你無可奈何asd fsadf+"); 29 | assert_eq!("你無可奈何asd-fsadf+", string); 30 | } 31 | 32 | #[test] 33 | fn leading_slash() { 34 | let string = slugify("-love"); 35 | assert_eq!("love", string); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /quake_webapp/quake-board/src/components/concept/Editor.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import styled from "styled-components"; 3 | import { useCallback, useState } from "react"; 4 | 5 | export interface EditorProps { 6 | onChange: (value: string) => void; 7 | } 8 | 9 | const Editor = (props: EditorProps) => { 10 | const [value, setValue] = useState("text"); 11 | // const [editable, setEditable] = useState(false); 12 | 13 | const onChange = useCallback((event) => { 14 | setValue(event.target.value) 15 | }, [setValue]); 16 | // 17 | // const toggleEditable = useCallback((enable: boolean) => { 18 | // setEditable(enable) 19 | // }, [setEditable]); 20 | 21 | return { 25 | if (event.key === 'Enter' || event.key === 'Escape') { 26 | // toggleEditable(true) 27 | event.preventDefault() 28 | event.stopPropagation() 29 | } 30 | } } 31 | />; 32 | } 33 | 34 | const StyleInputBox = styled.textarea` 35 | background: transparent; 36 | width: 100%; 37 | border: none; 38 | ` 39 | 40 | export default Editor; 41 | -------------------------------------------------------------------------------- /quake_core/src/markdown/LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Nick Groenen 2 | 3 | Permission is hereby granted, free of charge, to any 4 | person obtaining a copy of this software and associated 5 | documentation files (the "Software"), to deal in the 6 | Software without restriction, including without 7 | limitation the rights to use, copy, modify, merge, 8 | publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software 10 | is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice 14 | shall be included in all copies or substantial portions 15 | of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 18 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 19 | TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 20 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 21 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 24 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 | DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/fetch-api/readme.md: -------------------------------------------------------------------------------- 1 | # fetch-api 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | -------------- | --------------- | ----------- | ---------- | ------- | 12 | | `entryType` | -- | | `string[]` | `[]` | 13 | | `searchEngine` | `search-engine` | | `boolean` | `false` | 14 | | `type` | `type` | | `string` | `''` | 15 | 16 | 17 | ## Events 18 | 19 | | Event | Description | Type | 20 | | ----------------- | ----------- | ------------------ | 21 | | `fetchAllSuccess` | | `CustomEvent` | 22 | | `fetchSuccess` | | `CustomEvent` | 23 | 24 | 25 | ## Dependencies 26 | 27 | ### Used by 28 | 29 | - [quake-dashboard](../quake-dashboard) 30 | 31 | ### Graph 32 | ```mermaid 33 | graph TD; 34 | quake-dashboard --> fetch-api 35 | style fetch-api fill:#f9f,stroke:#333,stroke-width:4px 36 | ``` 37 | 38 | ---------------------------------------------- 39 | 40 | *Built with [StencilJS](https://stenciljs.com/)* 41 | -------------------------------------------------------------------------------- /examples/spike/0001-pdf-to-txt.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PDF to txt 3 | author: 4 | content: 5 | done_by: 6 | created_date: 2021-12-02 10:16:34 7 | updated_date: 2021-12-02 10:16:34 8 | --- 9 | 10 | ## pdfminer.six 11 | 12 | - link: [https://github.com/pdfminer/pdfminer.six](https://github.com/pdfminer/pdfminer.six) 13 | - languages: Python 14 | - intro: Pdfminer.six is a community maintained fork of the original PDFMiner. It is a tool for extracting information from PDF documents. 15 | It focuses on getting and analyzing text data. Pdfminer.six extracts the text from a page directly from the sourcecode of the PDF. 16 | It can also be used to get the exact location, font or color of the text. 17 | 18 | ## pdf-extract 19 | 20 | - link: [https://github.com/CrossRef/pdfextract](https://github.com/CrossRef/pdfextract) 21 | - languages: Ruby 22 | - A tool and library that can extract various areas of text from a PDF, especially a scholarly article PDF. It performs structural 23 | - analysis to determine column bounds, headers, footers, sections, titles and so on. It can analyse and categorise sections into 24 | - reference and non-reference sections and can split reference sections into individual references. 25 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/markdown/quake-down.type.ts: -------------------------------------------------------------------------------- 1 | export enum CodeType { 2 | Unknown = "Unknown", 3 | Normal = "Normal", 4 | Graph = "Graph", 5 | Chart = "Chart", 6 | Example = "Example", 7 | Repl = "Repl", 8 | Transflow = "Transflow", 9 | Data = "Data", 10 | Run = "Run", 11 | } 12 | 13 | export function CodeTypeFromStr(text: String) { 14 | switch (text.toLocaleLowerCase()) { 15 | case "graph": 16 | return CodeType.Graph; 17 | case "chart": 18 | return CodeType.Chart; 19 | case "example": 20 | return CodeType.Example; 21 | case "repl": 22 | return CodeType.Repl; 23 | case "run": 24 | return CodeType.Run; 25 | case "transflow": 26 | return CodeType.Transflow; 27 | case "data": 28 | return CodeType.Data; 29 | default: 30 | return CodeType.Unknown; 31 | } 32 | } 33 | 34 | export namespace QuakeDownType { 35 | export interface Table { 36 | type: 'table', 37 | align: any[], 38 | rows: any[], 39 | header: any[], 40 | } 41 | export interface Code { 42 | type: 'code', 43 | code_type: CodeType, 44 | code_param: string, 45 | lang: string, 46 | text: string, 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /nix_config/flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "flake-utils": { 4 | "locked": { 5 | "lastModified": 1642700792, 6 | "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", 7 | "owner": "numtide", 8 | "repo": "flake-utils", 9 | "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "numtide", 14 | "repo": "flake-utils", 15 | "type": "github" 16 | } 17 | }, 18 | "nixpkgs": { 19 | "locked": { 20 | "lastModified": 1645334861, 21 | "narHash": "sha256-We9ECiMglthzbZ5S6Myqqf+RHzBFZPoM2qL5/jDkUjs=", 22 | "owner": "NixOS", 23 | "repo": "nixpkgs", 24 | "rev": "d5f237872975e6fb6f76eef1368b5634ffcd266f", 25 | "type": "github" 26 | }, 27 | "original": { 28 | "owner": "NixOS", 29 | "ref": "nixos-unstable", 30 | "repo": "nixpkgs", 31 | "type": "github" 32 | } 33 | }, 34 | "root": { 35 | "inputs": { 36 | "flake-utils": "flake-utils", 37 | "nixpkgs": "nixpkgs" 38 | } 39 | } 40 | }, 41 | "root": "root", 42 | "version": 7 43 | } 44 | -------------------------------------------------------------------------------- /quake_tui/src/ui.rs: -------------------------------------------------------------------------------- 1 | use crate::app::{App, Mode}; 2 | use crate::widgets::CmdLine; 3 | use tui::backend::Backend; 4 | use tui::layout::{Constraint, Direction, Layout}; 5 | use tui::Frame; 6 | use unicode_width::UnicodeWidthStr; 7 | 8 | pub fn draw(f: &mut Frame, app: &mut App) { 9 | let chunks = Layout::default() 10 | .direction(Direction::Vertical) 11 | .margin(2) 12 | .constraints([Constraint::Length(3), Constraint::Min(1)].as_ref()) 13 | .split(f.size()); 14 | f.render_stateful_widget(CmdLine, chunks[0], &mut app.state); 15 | f.render_stateful_widget(app.main_widget.clone(), chunks[1], &mut app.state); 16 | 17 | match app.state.mode { 18 | Mode::Normal => {} 19 | Mode::Command => f.set_cursor( 20 | chunks[0].x + app.state.message.width() as u16 + 1, 21 | chunks[0].y + 1, 22 | ), 23 | Mode::Insert => { 24 | let input_lines: Vec<&str> = app.main_widget.get_input().split('\n').collect(); 25 | f.set_cursor( 26 | chunks[1].x + input_lines.last().unwrap_or(&"").width() as u16 + 1, 27 | chunks[1].y + input_lines.len() as u16, 28 | ); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /quake_core/src/entry/entry_node_info.rs: -------------------------------------------------------------------------------- 1 | use std::fs; 2 | use std::path::Path; 3 | 4 | use serde_derive::{Deserialize, Serialize}; 5 | 6 | #[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Default)] 7 | pub struct EntryNodeInfo { 8 | pub index: usize, 9 | } 10 | 11 | impl EntryNodeInfo { 12 | pub fn new(index: usize) -> EntryNodeInfo { 13 | EntryNodeInfo { index } 14 | } 15 | pub fn inc(&mut self) { 16 | self.index += 1 17 | } 18 | } 19 | 20 | pub fn entry_info_from_path(entry_info_path: &Path) -> EntryNodeInfo { 21 | if !entry_info_path.exists() { 22 | let info = EntryNodeInfo::default(); 23 | let info_str = serde_yaml::to_string(&info).expect("cannot serial"); 24 | fs::write(entry_info_path, info_str).expect("cannot write to file"); 25 | return info; 26 | } 27 | 28 | let text = fs::read_to_string(entry_info_path).expect("cannot read entry-info.yaml"); 29 | serde_yaml::from_str(&text).unwrap() 30 | } 31 | 32 | pub fn save_entry_info(entry_info_path: &Path, entry_info: &mut EntryNodeInfo) { 33 | let result = serde_yaml::to_string(&entry_info).expect("cannot convert to yaml"); 34 | fs::write(entry_info_path, result).expect("cannot write to file"); 35 | } 36 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/quake-dashboard/quake-dashboard.spec.ts: -------------------------------------------------------------------------------- 1 | import { newSpecPage } from '@stencil/core/testing'; 2 | import { QuakeDashboard } from './quake-dashboard'; 3 | 4 | describe('type-creator', () => { 5 | it('renders', async () => { 6 | const { root } = await newSpecPage({ 7 | components: [QuakeDashboard], 8 | html: '', 9 | }); 10 | expect(root).toEqualHtml(` 11 | 12 | 13 | 14 | Hello, World! I'm 15 | 16 | 17 | 18 | `); 19 | }); 20 | 21 | it('renders with values', async () => { 22 | const { root } = await newSpecPage({ 23 | components: [QuakeDashboard], 24 | html: ``, 25 | }); 26 | expect(root).toEqualHtml(` 27 | 28 | 29 | 30 | Hello, World! I'm Stencil 'Don't call me a framework' JS 31 | 32 | 33 | 34 | `); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /docs/adr/0013-markdown-processor.md: -------------------------------------------------------------------------------- 1 | # 13. markdown processor 2 | 3 | Date: 2021-11-27 4 | 5 | ## Status 6 | 7 | 2021-11-27 proposed 8 | 9 | 2021-12-07 accepted 10 | 11 | ## Context 12 | 13 | markdown: 14 | 15 | - [pulldown-cmark](https://github.com/raphlinus/pulldown-cmark) this library is a pull parser for CommonMark, written in Rust. It comes with a simple command-line tool, useful for rendering to HTML, and is also designed to be easy to use from as a library. 16 | - [Comrak](https://github.com/kivikakk/comrak) is a CommonMark + GFM compatible Markdown parser and renderer. 17 | 18 | return to string 19 | 20 | - [pulldown-cmark-to-cmark](https://github.com/Byron/pulldown-cmark-to-cmark), A utility library which translates Event back to markdown. It's the prerequisite for writing markdown filters which can work as mdbook-preprocessors. 21 | 22 | parser html: 23 | 24 | - https://github.com/servo/html5ever 25 | 26 | samples: 27 | 28 | - https://github.com/zoni/obsidian-export 29 | 30 | syntax support: 31 | 32 | ```markdown 33 | Link to a page: [[Internal link]]. 34 | `` 35 | 36 | Embeds 37 | 38 | ``` 39 | ![[Obsidian#What is Obsidian]] 40 | ``` 41 | 42 | ## Decision 43 | 44 | Decision here... 45 | 46 | ## Consequences 47 | 48 | Consequences here... 49 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@quakeworks/dashboard", 3 | "version": "0.0.1", 4 | "description": "Quakeworks dashboard", 5 | "main": "dist/index.cjs.js", 6 | "module": "dist/custom-elements/index.js", 7 | "es2015": "dist/esm/index.mjs", 8 | "es2017": "dist/esm/index.mjs", 9 | "types": "dist/custom-elements/index.d.ts", 10 | "collection": "dist/collection/collection-manifest.json", 11 | "collection:main": "dist/collection/index.js", 12 | "unpkg": "dist/dashboard/dashboard.esm.js", 13 | "files": [ 14 | "dist/", 15 | "loader/" 16 | ], 17 | "scripts": { 18 | "build": "stencil build --docs", 19 | "start": "stencil build --dev --watch --serve --port 3000", 20 | "test": "stencil test --spec --e2e", 21 | "test.watch": "stencil test --spec --e2e --watchAll", 22 | "generate": "stencil generate" 23 | }, 24 | "dependencies": { 25 | "@ionic/core": "^5.9.1", 26 | "@quakeworks/quake_wasm": "^0.1.0", 27 | "@stencil/core": "^2.7.0", 28 | "axios": "^0.24.0", 29 | "dayjs": "^1.10.7", 30 | "meilisearch": "^0.23.0" 31 | }, 32 | "devDependencies": { 33 | "@types/jest": "^26.0.24", 34 | "jest": "^26.6.3", 35 | "jest-cli": "^26.6.3" 36 | }, 37 | "license": "MIT" 38 | } 39 | -------------------------------------------------------------------------------- /examples/graph/board/0001.json: -------------------------------------------------------------------------------- 1 | {"id":"744a62ce-8129-4028-98cb-b5ad47f9fdd1","offsetX":-2,"offsetY":3,"zoom":100,"gridSize":0,"layers":[{"id":"7e15415c-161c-4333-83bc-2afb5bf17d5b","type":"diagram-links","isSvg":true,"transformed":true,"models":{}},{"id":"50b1f18e-3599-4077-95b7-d2153e6aa4e2","type":"diagram-nodes","isSvg":false,"transformed":true,"models":{"0841f10a-ea45-4f83-b81d-75c65dcf5ebd":{"id":"0841f10a-ea45-4f83-b81d-75c65dcf5ebd","type":"default","extras":{"type":"out"},"x":730,"y":228,"ports":[{"id":"07403514-9765-40e3-9c61-1629bca5f2f3","type":"default","x":769.7166748046875,"y":252.5,"name":"Out","alignment":"right","parentNode":"0841f10a-ea45-4f83-b81d-75c65dcf5ebd","links":[],"in":false,"label":"Out"}],"name":"Source","color":"rgb(0,192,255)","portsInOrder":[],"portsOutOrder":["07403514-9765-40e3-9c61-1629bca5f2f3"]},"101475cc-ce41-4edc-8ff0-619d128a3376":{"id":"101475cc-ce41-4edc-8ff0-619d128a3376","type":"default","extras":{"type":"in"},"x":1084,"y":309,"ports":[{"id":"37b0d97d-b660-4c13-b725-698fdd4c56a0","type":"default","x":null,"y":null,"name":"In","alignment":"left","parentNode":"101475cc-ce41-4edc-8ff0-619d128a3376","links":[],"in":true,"label":"In"}],"name":"Target","color":"rgb(192,255,0)","portsInOrder":["37b0d97d-b660-4c13-b725-698fdd4c56a0"],"portsOutOrder":[]}}}]} -------------------------------------------------------------------------------- /_fixtures/import_test/todo.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "displayName": "Flagged Emails", 4 | "id": "AQMkADAwATM0MDAAMS04N2E2LWRhMDItMDACLTAwCgAuAAADlaHHnFnn1UuoFE2pMt0j5QEAaMraZPkN_0mltv0IMNqe5wAEmScfOgAAAA==", 5 | "wellknownListName": "flaggedEmails", 6 | "children": [] 7 | }, 8 | { 9 | "displayName": "任务", 10 | "id": "AQMkADAwATM0MDAAMS04N2E2LWRhMDItMDACLTAwCgAuAAADlaHHnFnn1UuoFE2pMt0j5QEAaMraZPkN_0mltv0IMNqe5wAAAgESAAAA", 11 | "wellknownListName": "defaultList", 12 | "children": [ 13 | { 14 | "body": { 15 | "content": "", 16 | "contentType": "text" 17 | }, 18 | "bodyLastModifiedDateTime": null, 19 | "completedDateTime": null, 20 | "createdDateTime": "2021-11-05T07:43:38.2189068Z", 21 | "dueDateTime": null, 22 | "id": "AQMkADAwATM0MDAAMS04N2E2LWRhMDItMDACLTAwCgBGAAADlaHHnFnn1UuoFE2pMt0j5QcAaMraZPkN_0mltv0IMNqe5wAAAgESAAAAaMraZPkN_0mltv0IMNqe5wAEy-HmfAAAAA==", 23 | "importance": "normal", 24 | "isReminderOn": false, 25 | "lastModifiedDateTime": "2021-11-05T07:53:39.9007193Z", 26 | "recurrence": null, 27 | "reminderDateTime": null, 28 | "status": "notStarted", 29 | "title": "Game Develop" 30 | } 31 | ] 32 | } 33 | ] -------------------------------------------------------------------------------- /quake_tui/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod app; 2 | mod entry_action; 3 | mod ui; 4 | mod widgets; 5 | 6 | use crate::app::App; 7 | use crossterm::{ 8 | event::{DisableMouseCapture, EnableMouseCapture}, 9 | execute, 10 | terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, 11 | }; 12 | use quake_core::QuakeConfig; 13 | use std::error::Error; 14 | use std::fs; 15 | use std::io; 16 | use tui::backend::CrosstermBackend; 17 | use tui::Terminal; 18 | 19 | pub fn tui_main_loop() -> Result<(), Box> { 20 | enable_raw_mode()?; 21 | let mut stdout = io::stdout(); 22 | execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; 23 | let backend = CrosstermBackend::new(stdout); 24 | let mut terminal = Terminal::new(backend)?; 25 | 26 | let config: QuakeConfig = serde_yaml::from_str(fs::read_to_string(".quake.yaml")?.as_str())?; 27 | let app = App::new(config); 28 | let res = app.run(&mut terminal); 29 | 30 | disable_raw_mode()?; 31 | execute!( 32 | terminal.backend_mut(), 33 | LeaveAlternateScreen, 34 | DisableMouseCapture 35 | )?; 36 | terminal.show_cursor()?; 37 | 38 | if let Err(err) = res { 39 | println!("{:?}", err); 40 | } 41 | 42 | Ok(()) 43 | } 44 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/src/components.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /* tslint:disable */ 3 | /** 4 | * This is an autogenerated file created by the Stencil compiler. 5 | * It contains typing information for all components that exist in this project. 6 | */ 7 | import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; 8 | export namespace Components { 9 | interface TypeCreator { 10 | } 11 | } 12 | declare global { 13 | interface HTMLTypeCreatorElement extends Components.TypeCreator, HTMLStencilElement { 14 | } 15 | var HTMLTypeCreatorElement: { 16 | prototype: HTMLTypeCreatorElement; 17 | new (): HTMLTypeCreatorElement; 18 | }; 19 | interface HTMLElementTagNameMap { 20 | "type-creator": HTMLTypeCreatorElement; 21 | } 22 | } 23 | declare namespace LocalJSX { 24 | interface TypeCreator { 25 | "onSaveProps"?: (event: CustomEvent) => void; 26 | } 27 | interface IntrinsicElements { 28 | "type-creator": TypeCreator; 29 | } 30 | } 31 | export { LocalJSX as JSX }; 32 | declare module "@stencil/core" { 33 | export namespace JSX { 34 | interface IntrinsicElements { 35 | "type-creator": LocalJSX.TypeCreator & JSXBase.HTMLAttributes; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /quake_webapp/dashboard/src/components/quake-dashboard/quake-dashboard.e2e.ts: -------------------------------------------------------------------------------- 1 | import { newE2EPage } from '@stencil/core/testing'; 2 | 3 | describe('type-creator', () => { 4 | it('renders', async () => { 5 | const page = await newE2EPage(); 6 | 7 | await page.setContent(''); 8 | const element = await page.find('type-creator'); 9 | expect(element).toHaveClass('hydrated'); 10 | }); 11 | 12 | it('renders changes to the name data', async () => { 13 | const page = await newE2EPage(); 14 | 15 | await page.setContent(''); 16 | const component = await page.find('type-creator'); 17 | const element = await page.find('type-creator >>> div'); 18 | expect(element.textContent).toEqual(`Hello, World! I'm `); 19 | 20 | component.setProperty('first', 'James'); 21 | await page.waitForChanges(); 22 | expect(element.textContent).toEqual(`Hello, World! I'm James`); 23 | 24 | component.setProperty('last', 'Quincy'); 25 | await page.waitForChanges(); 26 | expect(element.textContent).toEqual(`Hello, World! I'm James Quincy`); 27 | 28 | component.setProperty('middle', 'Earl'); 29 | await page.waitForChanges(); 30 | expect(element.textContent).toEqual(`Hello, World! I'm James Earl Quincy`); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /quake_webapp/transflow.lib.js: -------------------------------------------------------------------------------- 1 | // String 2 | Object.defineProperty(String.prototype, 'uppercase', { 3 | value() { 4 | return this.toUpperCase(); 5 | } 6 | }); 7 | Object.defineProperty(String.prototype, 'lowercase', { 8 | value() { 9 | return this.toLowerCase(); 10 | } 11 | }); 12 | 13 | // date 14 | Object.defineProperty(String.prototype, 'date', { 15 | value() { 16 | return new Date(this); 17 | } 18 | }); 19 | 20 | // number 21 | Object.defineProperty(String.prototype, 'float', { 22 | value() { 23 | return parseFloat(this); 24 | } 25 | }); 26 | Object.defineProperty(String.prototype, 'int', { 27 | value() { 28 | return parseInt(this); 29 | } 30 | }); 31 | 32 | // convert data 33 | Object.defineProperty(Number.prototype, 'date', { 34 | value() { 35 | return new Date(this); 36 | } 37 | }); 38 | 39 | Object.defineProperty(Number.prototype, 'sqrt', { 40 | value() { 41 | return Math.sqrt(this); 42 | } 43 | }); 44 | Object.defineProperty(Number.prototype, 'sin', { 45 | value() { 46 | return Math.sin(this); 47 | } 48 | }); 49 | Object.defineProperty(Number.prototype, 'cos', { 50 | value() { 51 | return Math.cos(this); 52 | } 53 | }); 54 | Object.defineProperty(Number.prototype, 'fixed', { 55 | value(num) { 56 | return this.toFixed(num); 57 | } 58 | }); 59 | -------------------------------------------------------------------------------- /quake_webapp/type-creator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@quakeworks/type-creator", 3 | "version": "0.0.1", 4 | "description": "Stencil Component Starter", 5 | "main": "dist/index.cjs.js", 6 | "module": "dist/index.js", 7 | "es2015": "dist/esm/index.mjs", 8 | "es2017": "dist/esm/index.mjs", 9 | "types": "dist/types/components.d.ts", 10 | "collection": "dist/collection/collection-manifest.json", 11 | "collection:main": "dist/collection/index.js", 12 | "unpkg": "dist/type-creator/type-creator.esm.js", 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/ionic-team/stencil-component-starter.git" 16 | }, 17 | "files": [ 18 | "dist/", 19 | "loader/" 20 | ], 21 | "scripts": { 22 | "build": "stencil build --docs", 23 | "start": "stencil build --dev --watch --serve", 24 | "test": "stencil test --spec --e2e", 25 | "test.watch": "stencil test --spec --e2e --watchAll", 26 | "generate": "stencil generate" 27 | }, 28 | "dependencies": { 29 | "@quakeworks/form-js": "^0.6.2", 30 | "@quakeworks/form-js-editor": "^0.6.2", 31 | "@stencil/core": "^2.11.0" 32 | }, 33 | "devDependencies": { 34 | "@types/jest": "^26.0.24", 35 | "jest": "^26.6.3", 36 | "jest-cli": "^26.6.3", 37 | "puppeteer": "^10.0.0" 38 | }, 39 | "license": "MIT" 40 | } 41 | -------------------------------------------------------------------------------- /quake_core/src/helper/file_filter.rs: -------------------------------------------------------------------------------- 1 | use std::path::{Path, PathBuf}; 2 | 3 | use walkdir::{DirEntry, WalkDir}; 4 | 5 | fn is_with_prefix(entry: &DirEntry, prefix: &str) -> bool { 6 | entry 7 | .file_name() 8 | .to_str() 9 | .map(|s| s.starts_with(prefix)) 10 | .unwrap_or(false) 11 | } 12 | 13 | pub fn filter_by_prefix(path: PathBuf, prefix: String) -> Vec { 14 | let mut files = vec![]; 15 | for entry in WalkDir::new(path).into_iter().filter_map(|e| e.ok()) { 16 | if is_with_prefix(&entry, &prefix) { 17 | files.push(entry.into_path()); 18 | } 19 | } 20 | files 21 | } 22 | 23 | pub fn type_from_md_path(buf: &Path) -> Option { 24 | let mut ancestors = buf.ancestors(); 25 | ancestors.next()?; 26 | let typ = ancestors.next()?.file_name()?; 27 | let str = typ.to_str()?.to_string(); 28 | Some(str) 29 | } 30 | 31 | #[cfg(test)] 32 | mod tests { 33 | use crate::helper::file_filter::type_from_md_path; 34 | use std::path::PathBuf; 35 | 36 | #[test] 37 | fn type_from() { 38 | let buf = PathBuf::from("examples") 39 | .join("todo") 40 | .join("0001-time-support.md"); 41 | 42 | let typ = type_from_md_path(&buf).unwrap(); 43 | assert_eq!(typ, "todo".to_string()); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@quakeworks/render", 3 | "version": "0.0.1", 4 | "description": "Stencil Component Starter", 5 | "main": "dist/index.cjs.js", 6 | "module": "dist/custom-elements/index.js", 7 | "es2015": "dist/esm/index.mjs", 8 | "es2017": "dist/esm/index.mjs", 9 | "types": "dist/custom-elements/index.d.ts", 10 | "collection": "dist/collection/collection-manifest.json", 11 | "collection:main": "dist/collection/index.js", 12 | "unpkg": "dist/quake-render/quake-render.esm.js", 13 | "files": [ 14 | "dist/", 15 | "loader/" 16 | ], 17 | "scripts": { 18 | "build": "stencil build --docs", 19 | "start": "stencil build --dev --watch --serve --port 3002", 20 | "test": "stencil test --spec --e2e", 21 | "test.watch": "stencil test --spec --e2e --watchAll", 22 | "generate": "stencil generate" 23 | }, 24 | "dependencies": { 25 | "@stencil/core": "^2.7.0", 26 | "@types/d3": "^7.1.0", 27 | "ag-grid-community": "^26.2.1", 28 | "d3": "^7.2.1", 29 | "echarts": "^5.2.2", 30 | "marked": "^4.0.6", 31 | "prismjs": "^1.25.0" 32 | }, 33 | "devDependencies": { 34 | "@types/jest": "^26.0.24", 35 | "@types/marked": "^4.0.1", 36 | "jest": "^26.6.3", 37 | "jest-cli": "^26.6.3", 38 | "puppeteer": "10.0.0" 39 | }, 40 | "license": "MIT" 41 | } 42 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | on: 3 | pull_request: 4 | branches: [master] 5 | push: 6 | branches: [master] 7 | concurrency: 8 | group: lint-${{ github.ref }} 9 | cancel-in-progress: true 10 | jobs: 11 | lint: 12 | name: Lint 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Install rust 16 | uses: actions-rs/toolchain@v1 17 | with: 18 | profile: minimal 19 | toolchain: stable 20 | override: true 21 | components: rustfmt, clippy 22 | 23 | - name: Install build dependencies 24 | run: | 25 | sudo apt update 26 | sudo apt install libgtk-3-dev libsoup2.4-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev 27 | 28 | 29 | - name: Cache Builds 30 | uses: Swatinem/rust-cache@v1 31 | 32 | - name: Checkout 33 | uses: actions/checkout@v2 34 | 35 | - name: Clippy for all features 36 | uses: actions-rs/cargo@v1 37 | with: 38 | command: clippy 39 | args: -- -D warnings 40 | 41 | - name: Clippy for tests 42 | uses: actions-rs/cargo@v1 43 | with: 44 | command: clippy 45 | args: --tests 46 | 47 | - name: Format check 48 | uses: actions-rs/cargo@v1 49 | with: 50 | command: fmt 51 | args: -- --check 52 | -------------------------------------------------------------------------------- /quake_webapp/quake-render/src/components/quake-render/readme.md: -------------------------------------------------------------------------------- 1 | # my-component 2 | 3 | 4 | 5 | 6 | 7 | 8 | ## Properties 9 | 10 | | Property | Attribute | Description | Type | Default | 11 | | ---------- | ----------- | ----------- | --------- | ------- | 12 | | `content` | `content` | | `string` | `''` | 13 | | `hasEmbed` | `has-embed` | | `boolean` | `false` | 14 | 15 | 16 | ## Events 17 | 18 | | Event | Description | Type | 19 | | ---------------- | ----------- | ------------------- | 20 | | `clickEmbedLink` | | `CustomEvent` | 21 | | `clickPageLink` | | `CustomEvent` | 22 | 23 | 24 | ## Dependencies 25 | 26 | ### Used by 27 | 28 | - [embed-link](../embed-link) 29 | 30 | ### Depends on 31 | 32 | - [data-grid](../data-grid) 33 | - [graph-bar](../graph-bar) 34 | - [graph-line](../graph-line) 35 | - [graph-transflow](../graph-transflow) 36 | 37 | ### Graph 38 | ```mermaid 39 | graph TD; 40 | quake-render --> data-grid 41 | quake-render --> graph-bar 42 | quake-render --> graph-line 43 | quake-render --> graph-transflow 44 | embed-link --> quake-render 45 | style quake-render fill:#f9f,stroke:#333,stroke-width:4px 46 | ``` 47 | 48 | ---------------------------------------------- 49 | 50 | *Built with [StencilJS](https://stenciljs.com/)* 51 | -------------------------------------------------------------------------------- /examples/story/0009-pdf-spike.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: pdf spike 3 | author: 4 | status: Todo 5 | priority: Low 6 | created_date: 2021-12-03 13:02:05 7 | updated_date: 2021-12-03 13:02:05 8 | --- 9 | 10 | 11 | ## Rust 12 | 13 | read pdf: https://github.com/pdf-rs/pdf 14 | 15 | pdf information: https://github.com/jrmuizel/pdf-extract 16 | 17 | ## pdf to text 18 | 19 | - pdf with quake 20 | - pdf to text 21 | 22 | ### pdfminer.six 23 | 24 | - link: [https://github.com/pdfminer/pdfminer.six](https://github.com/pdfminer/pdfminer.six) 25 | - languages: Python 26 | - intro: Pdfminer.six is a community maintained fork of the original PDFMiner. It is a tool for extracting information from PDF documents. 27 | It focuses on getting and analyzing text data. Pdfminer.six extracts the text from a page directly from the sourcecode of the PDF. 28 | It can also be used to get the exact location, font or color of the text. 29 | 30 | ### pdf-extract 31 | 32 | - link: [https://github.com/CrossRef/pdfextract](https://github.com/CrossRef/pdfextract) 33 | - languages: Ruby 34 | - A tool and library that can extract various areas of text from a PDF, especially a scholarly article PDF. It performs structural 35 | - analysis to determine column bounds, headers, footers, sections, titles and so on. It can analyse and categorise sections into 36 | - reference and non-reference sections and can split reference sections into individual references. 37 | -------------------------------------------------------------------------------- /src/server/layout_api.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | 3 | use rocket::response::status::NotFound; 4 | use rocket::serde::json::Json; 5 | use rocket::{get, State}; 6 | 7 | use quake_core::quake::SimpleLayout; 8 | use quake_core::usecases::layout_usecases; 9 | use quake_core::QuakeConfig; 10 | 11 | use crate::server::ApiError; 12 | 13 | #[get("/dashboard")] 14 | pub fn dashboard_layout( 15 | config: &State, 16 | ) -> Result, NotFound>> { 17 | let path = PathBuf::from(config.workspace.clone()); 18 | let layout = match layout_usecases::dump_dashboard_layout(path) { 19 | Ok(layout) => layout, 20 | Err(err) => { 21 | return Err(NotFound(Json(ApiError { 22 | msg: err.to_string(), 23 | }))) 24 | } 25 | }; 26 | 27 | Ok(Json(layout)) 28 | } 29 | 30 | #[cfg(test)] 31 | mod test { 32 | use std::io::Read; 33 | 34 | use rocket::http::Status; 35 | use rocket::local::blocking::Client; 36 | 37 | use crate::quake_rocket; 38 | 39 | #[test] 40 | fn dashboard_layout() { 41 | let client = Client::tracked(quake_rocket()).expect("valid rocket instance"); 42 | let mut response = client.get("/layout/dashboard").dispatch(); 43 | 44 | let mut res = "".to_string(); 45 | let _ = response.read_to_string(&mut res); 46 | 47 | assert_eq!(response.status(), Status::Ok); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /justfile: -------------------------------------------------------------------------------- 1 | setup: 2 | cargo install git-cliff 3 | rustup component add llvm-tools-preview --toolchain nightly 4 | cargo install cargo-llvm-cov 5 | 6 | install: 7 | cargo install --path . 8 | 9 | build: 10 | cargo build --all 11 | 12 | test: 13 | cargo test --all 14 | 15 | release: 16 | cargo build --verbose --release --all 17 | 18 | coverage: 19 | cargo llvm-cov --all-features --workspace --html 20 | 21 | server: 22 | cargo run server 23 | 24 | pages: 25 | cargo run -- static 26 | cargo build -p quake_wasm 27 | cd quake_webapp && npm run local 28 | 29 | # copy file after has dist 30 | cp -a static_dump/* quake_webapp/dist/ 31 | cd quake_wasm && wasm-pack build --scope quakeworks --target web 32 | mkdir -p quake_webapp/dist/js/dashboard/ 33 | cp quake_wasm/pkg/quake_wasm_bg.wasm quake_webapp/dist/js/dashboard/ 34 | 35 | @bench: 36 | cargo bench 37 | 38 | @lint: 39 | rustup component add clippy 40 | rustup component add rustfmt 41 | cargo clippy -- -D warnings 42 | cargo clippy --tests 43 | cargo fmt -- --check 44 | 45 | @fix: 46 | cargo fmt --all 47 | 48 | # cargo install cargo-bloat 49 | @analysis: 50 | cargo bloat --release -n 50 51 | 52 | clean: 53 | cargo clean 54 | find . -type f -name "*.orig" -exec rm {} \; 55 | find . -type f -name "*.bk" -exec rm {} \; 56 | find . -type f -name ".*~" -exec rm {} \; 57 | 58 | changelog: 59 | git cliff --output CHANGELOG.md 60 | -------------------------------------------------------------------------------- /quake_webapp/packages/timeline/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | React App 13 | 14 | 15 | You need to enable JavaScript to run this app. 16 | 17 | 18 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /libs/quake_processor/src/pdf_processor.rs: -------------------------------------------------------------------------------- 1 | use std::collections::HashMap; 2 | use std::error::Error; 3 | use std::path::Path; 4 | use std::{panic, path}; 5 | 6 | use pdf_extract::extract_text; 7 | 8 | use crate::process_engine::Processor; 9 | 10 | #[derive(Default, Clone)] 11 | pub struct PdfProcessor { 12 | meta_data: HashMap, 13 | } 14 | 15 | impl Processor for PdfProcessor { 16 | fn content(&self, file: &Path) -> Result> { 17 | let path = path::Path::new(&file); 18 | 19 | let mut string = String::new(); 20 | string.push_str(""); 21 | 22 | let extract = panic::catch_unwind(|| extract_text(path)); 23 | let text = match extract { 24 | Ok(t) => match t { 25 | Ok(text) => text, 26 | Err(err) => return Err(Box::new(err)), 27 | }, 28 | Err(err) => { 29 | println!("{:?}", err); 30 | "".to_string() 31 | } 32 | }; 33 | 34 | string.push_str(text.as_str()); 35 | 36 | string = string.replace("\n\n", "").replace('\n', ""); 37 | string = string.replace("", "\n\n"); 38 | 39 | Ok(string) 40 | } 41 | 42 | fn meta_data(&self) -> HashMap { 43 | self.meta_data.clone() 44 | } 45 | } 46 | 47 | #[cfg(test)] 48 | mod tests { 49 | #[test] 50 | fn should_parse_references() {} 51 | } 52 | -------------------------------------------------------------------------------- /quake_webapp/quake-editor/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@quakeworks/editor", 3 | "version": "0.1.0", 4 | "private": false, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "^5.11.4", 7 | "@testing-library/react": "^11.1.0", 8 | "@testing-library/user-event": "^12.1.10", 9 | "@types/jest": "^26.0.15", 10 | "@types/node": "^12.0.0", 11 | "@types/react": "^17.0.0", 12 | "@types/react-dom": "^17.0.0", 13 | "ahooks": "^3.1.9", 14 | "polished": "^4.1.3", 15 | "react": "^17.0.2", 16 | "react-dom": "^17.0.2", 17 | "react-scripts": "4.0.3", 18 | "rich-markdown-editor": "^11.20.0", 19 | "styled-components": "^5.3.3", 20 | "typescript": "^4.1.2", 21 | "web-vitals": "^1.0.1" 22 | }, 23 | "scripts": { 24 | "start": "export PORT=4002 && react-app-rewired start", 25 | "build": "react-app-rewired build", 26 | "test": "react-app-rewired test", 27 | "eject": "react-app-rewired eject" 28 | }, 29 | "eslintConfig": { 30 | "extends": [ 31 | "react-app", 32 | "react-app/jest" 33 | ] 34 | }, 35 | "browserslist": { 36 | "production": [ 37 | ">0.2%", 38 | "not dead", 39 | "not op_mini all" 40 | ], 41 | "development": [ 42 | "last 1 chrome version", 43 | "last 1 firefox version", 44 | "last 1 safari version" 45 | ] 46 | }, 47 | "devDependencies": { 48 | "@types/styled-components": "^5.1.15", 49 | "react-app-rewired": "^2.1.8" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /examples/quake_book/0002-setup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Setup 3 | created_date: 2021-12-10 19:21:23 4 | updated_date: 2021-12-10 19:21:23 5 | order: 6 | author: 7 | --- 8 | 9 | 10 | 1. init, `quake init` 11 | 2. config 12 | - `.quake.yml` to config quake 13 | - edit `entries-define.yaml` to 14 | 15 | ## Terminal GUI 16 | 17 | ``` 18 | quake tui 19 | ``` 20 | 21 | ### CLI 22 | 23 | 0. install 24 | 25 | ```bash 26 | git clone https://github.com/phodal/quake && cd quake 27 | cargo install --path . # or: just install 28 | ``` 29 | 30 | 1. add entry by type 31 | 32 | ```bash 33 | quake cmd -i "todo.add: time support" 34 | ``` 35 | 36 | 2. edit entry by index 37 | 38 | ```bash 39 | quake cmd -i "todo.edit(1)" 40 | ``` 41 | 42 | 3. list entry by type 43 | 44 | ```bash 45 | quake cmd -i "todo.list" 46 | ``` 47 | 48 | 4. sync list 49 | 50 | ```bash 51 | quake cmd -i "todo.sync" 52 | ``` 53 | 54 | 5. show entry 55 | 56 | ```bash 57 | quake cmd -i "todo.show(1)" 58 | ``` 59 | 60 | 6. generate from pdf 61 | 62 | filter with `Grep` regex syntax 63 | 64 | ```bash 65 | quake generate --flow "from('examples').to('papers').filter('.pdf$')" 66 | ``` 67 | 68 | ### Web 69 | 70 | 1. setup search engine 71 | 72 | ```bash 73 | brew install meilisearch 74 | ``` 75 | 76 | index 77 | 78 | ``` 79 | quake cmd -i "quake.feed" 80 | ``` 81 | 82 | 2. run server 83 | 84 | ``` 85 | quake server 86 | ``` 87 | 88 | 3. visit: [http://localhost:9999/](http://localhost:9999/) 89 | 90 | ### GUI (TBD) 91 | 92 | TBD 93 | -------------------------------------------------------------------------------- /quake_core/src/markdown/README.md: -------------------------------------------------------------------------------- 1 | # Syntax 2 | 3 | 1. page link 4 | 5 | ```markdown 6 | Link to a page: [[Internal link]]. 7 | ``` 8 | 9 | 2. embed file 10 | 11 | ``` 12 | ![[Obsidian#What is Obsidian]] 13 | ``` 14 | 15 | 3. callout 16 | 17 | ```swift 18 | /** 19 | An example of using the attention field 20 | 21 | - Attention: What I if told you 22 | you read this line wrong? 23 | */ 24 | ``` 25 | 26 | - Note: 27 | - 28 | 29 | ```swift 30 | case .callout(let callout): 31 | return Fragment { 32 | BlockQuote { 33 | "\(callout.delimiter.rawValue.capitalized): \(callout.content)" 34 | } 35 | } 36 | ``` 37 | 38 | or 39 | 40 | Admonitions 41 | 42 | ``` 43 | !!! note "An optional title" 44 | Here is something you should pay attention to. 45 | ``` 46 | 47 | 4. run code 48 | 49 | ```python-repl 50 | // deps: 51 | 52 | ``` 53 | 54 | 55 | 5. @contents 56 | 57 | [Documenter.jl](https://juliadocs.github.io/Documenter.jl/stable/man/syntax/#@raw-format-block) 58 | 59 | ```@contents 60 | Pages = ["foo.md"] 61 | Depth = 5 62 | ``` 63 | 64 | ```@raw html 65 | 66 | 67 | 68 | ``` 69 | 70 | Refs: 71 | 72 | - Apple's [ Markup Formatting Reference ](https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_markup_formatting_ref/Attention.html#//apple_ref/doc/uid/TP40016497-CH29-SW1) 73 | -------------------------------------------------------------------------------- /libs/quake_processor/src/process_engine.rs: -------------------------------------------------------------------------------- 1 | use std::collections::HashMap; 2 | use std::error::Error; 3 | use std::path::Path; 4 | 5 | use crate::pdf_processor::PdfProcessor; 6 | 7 | pub trait Processor { 8 | fn content(&self, file: &Path) -> Result>; 9 | fn meta_data(&self) -> HashMap; 10 | } 11 | 12 | #[derive(Default)] 13 | pub struct EmptyProcessor {} 14 | 15 | impl Processor for EmptyProcessor { 16 | fn content(&self, _file: &Path) -> Result> { 17 | Ok("".to_string()) 18 | } 19 | 20 | fn meta_data(&self) -> HashMap { 21 | todo!() 22 | } 23 | } 24 | 25 | pub struct ProcessEngine {} 26 | 27 | impl ProcessEngine { 28 | pub fn engine(text: &str) -> Box { 29 | let processor: Box = match text { 30 | "pdf" => Box::::default(), 31 | _ => Box::::default(), 32 | }; 33 | 34 | processor 35 | } 36 | } 37 | 38 | #[cfg(test)] 39 | mod tests { 40 | use std::path::PathBuf; 41 | 42 | use crate::process_engine::ProcessEngine; 43 | 44 | #[test] 45 | fn it_works() { 46 | let file = PathBuf::from("_fixtures").join("Test_PDF.pdf"); 47 | let processor = ProcessEngine::engine("pdf"); 48 | match processor.content(&file) { 49 | Err(_err) => { 50 | panic!(); 51 | } 52 | Ok(_some) => {} 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /quake_webapp/packages/timeline/src/QuakeTimeline.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {VerticalTimeline, VerticalTimelineElement} from 'react-vertical-timeline-component'; 3 | import 'react-vertical-timeline-component/style.min.css'; 4 | import { format } from 'date-fns' 5 | 6 | export type Props = { 7 | entries: any, 8 | data: any[], 9 | } 10 | 11 | function QuakeTimeline(props: Props) { 12 | const [data, setData] = React.useState(props.data); 13 | 14 | React.useEffect(() => { 15 | setData(props.data); 16 | }, [props]) 17 | 18 | function formatDate(date: number) { 19 | let result = ''; 20 | try { 21 | result = format(date * 1000, 'yyyy-MM-dd'); 22 | } catch (_err) { 23 | } 24 | 25 | return result; 26 | } 27 | 28 | return ( 29 | 30 | 31 | { data && data.map((item) => 32 | 37 | {item.title} 38 | { item.subtitle && {item.subtitle} } 39 | 40 | {item.content} 41 | 42 | 43 | )} 44 | 45 | 46 | ); 47 | } 48 | 49 | export default QuakeTimeline; 50 | -------------------------------------------------------------------------------- /docs/adr/README.md: -------------------------------------------------------------------------------- 1 | # Architecture Decision Records 2 | 3 | * [1. opensource-technology-decision](0001-opensource-technology-decision.md) 4 | * [2. quick-engine](0002-quick-engine.md) 5 | * [3. script-language](0003-script-language.md) 6 | * [4. front-matter-design](0004-front-matter-design.md) 7 | * [5. content-&-structure-separate](0005-content-&-structure-separate.md) 8 | * [6. custom-editor](0006-custom-editor.md) 9 | * [7. quake-server-for-gui-&-tui](0007-quake-server-for-gui-&-tui.md) 10 | * [8. entrysets-for-entry-log-info](0008-entrysets-for-entry-log-info.md) 11 | * [9. indexmap-replace-hashmap-for-order](0009-indexmap-replace-hashmap-for-order.md) 12 | * [10. level-for-directory](0010-level-for-directory.md) 13 | * [11. search-engine](0011-search-engine.md) 14 | * [12. render-engine-for-web](0012-render-engine-for-web.md) 15 | * [13. markdown-processor](0013-markdown-processor.md) 16 | * [14. sql-for-query](0014-sql-for-query.md) 17 | * [15. webcomponents-for-webapp](0015-webcomponents-for-webapp.md) 18 | * [16. frontmatter-editor-for-fe](0016-frontmatter-editor-for-fe.md) 19 | * [17. notion-blockmap-render](0017-notion-blockmap-render.md) 20 | * [18. calendar-view-api](0018-calendar-view-api.md) 21 | * [19. freeboard-with-mxgraph](0019-freeboard-with-mxgraph.md) 22 | * [20. flowy-view-for-ideas](0020-flowy-view-for-ideas.md) 23 | * [21. quake-init-with-install-meilisearch](0021-quake-init-with-install-meilisearch.md) 24 | * [22. flowy-board](0022-flowy-board.md) 25 | * [23. contract-design-for-flow](0023-contract-design-for-flow.md) 26 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: [ push, pull_request ] 4 | 5 | jobs: 6 | build: 7 | strategy: 8 | matrix: 9 | os: [ macos-latest, ubuntu-latest, windows-latest ] 10 | runs-on: ${{ matrix.os }} 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - name: Checkout submodules 15 | shell: bash 16 | run: | 17 | git fetch --tags 18 | auth_header="$(git config --local --get http.https://github.com/.extraheader)" 19 | git submodule sync --recursive 20 | git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 21 | 22 | - name: install libgtk-dev 23 | run: | 24 | sudo apt update 25 | sudo apt install libgtk-3-dev libxkbcommon-dev libxkbcommon-x11-dev 26 | if: contains(matrix.os, 'ubuntu') 27 | 28 | # url: https://github.com/linebender/druid/blob/master/.github/workflows/ci.yml 29 | - name: install libx11-dev 30 | run: | 31 | sudo apt update 32 | sudo apt install libx11-dev libpango1.0-dev libxkbcommon-dev libxkbcommon-x11-dev 33 | if: contains(matrix.os, 'ubuntu') 34 | 35 | - name: install dioxus dependencies 36 | run: | 37 | sudo apt update 38 | sudo apt install libwebkit2gtk-4.0-dev libayatana-appindicator3-dev 39 | if: contains(matrix.os, 'ubuntu') 40 | 41 | - name: Run unit tests 42 | run: ${{matrix.ENV_VARS}} cargo test --all 43 | -------------------------------------------------------------------------------- /examples/_quake/transflows.yaml: -------------------------------------------------------------------------------- 1 | - name: "show_calendar" 2 | display: "Todo/Story 日历" 3 | target: "quake-calendar" 4 | flows: 5 | - name: "from_todo_story_to_quake_calendar" 6 | from: 7 | - todo 8 | - story 9 | to: "quake-calendar" 10 | mapping: 11 | - entry: "todo" 12 | source: ["title", "content", "created_date", "updated_date"] 13 | target: ["title", "content", "created_date", "updated_date"] 14 | - entry: "story" 15 | source: ["title", "content", "created_date", "updated_date"] 16 | target: ["title", "content", "created_date", "updated_date"] 17 | filter: "created_date > 1609257600 AND updated_date < 1640793600" 18 | 19 | - name: "show_timeline" 20 | display: "Story 时间线" 21 | target: "quake-timeline" 22 | flows: 23 | - name: "from_story_to_quake_timeline" 24 | from: 25 | - story 26 | to: "quake-timeline" 27 | map: 28 | - source_type: story 29 | source_prop: story.title 30 | target_prop: title 31 | operators: [ ] 32 | - source_type: story 33 | source_prop: story.content 34 | target_prop: content 35 | operators: 36 | - operator: substring 37 | params: 38 | - 1 39 | - 150 40 | - source_type: story 41 | source_prop: story.created_date 42 | target_prop: date 43 | operators: [] 44 | filter: "created_date > 1609257600 AND updated_date < 1640793600" 45 | -------------------------------------------------------------------------------- /examples/_quake/transfuncs.js: -------------------------------------------------------------------------------- 1 | function from_quake_references_to_network(data) { 2 | let category_index = []; 3 | let nodes = []; 4 | let links = []; 5 | 6 | for (let key of Object.keys(data)) { 7 | let node = data[key]; 8 | 9 | if (!category_index.includes(node.source_type)) { 10 | category_index.push(node.source_type); 11 | } 12 | nodes.push({ 13 | id: parseInt(node.source_id), 14 | name: node.source_title, 15 | category: category_index.indexOf(node.source_type) 16 | }); 17 | 18 | for (let ref of node.references) { 19 | if (!category_index.includes(ref.entry_type)) { 20 | category_index.push(ref.entry_type); 21 | } 22 | 23 | nodes.push({ 24 | id: parseInt(ref.entry_id), 25 | name: ref.entry_title, 26 | category: category_index.indexOf(ref.entry_type) 27 | }) 28 | 29 | links.push({source: parseInt(node.source_id) + "", target: parseInt(ref.entry_id) + ""}); 30 | } 31 | } 32 | 33 | let categories = []; 34 | for (let category of category_index) { 35 | categories.push({name: category}) 36 | } 37 | return { 38 | nodes, 39 | links, 40 | categories 41 | } 42 | } 43 | 44 | const tl_show_network = async (context, commands) => { 45 | const el = document.createElement('graph-network'); 46 | 47 | let response = await fetch("/reference/quake_book"); 48 | let data = from_quake_references_to_network(await response.json()); 49 | el.data = data; 50 | 51 | return el; 52 | } 53 | 54 | Quake.flows['tl_show_network'] = tl_show_network; 55 | -------------------------------------------------------------------------------- /docs/concepts/concepts.csv: -------------------------------------------------------------------------------- 1 | type,code,description,notes 2 | 总结文章,summary_blog,针对于某一特定领域进行总结性的介绍,可以考虑以权重区别不同的文章类型? 3 | 日常文章,normal_blog,针对于某一特定领域进行一般性的介绍, 4 | 文章草稿,draft_blog,未正式发表的文章, 5 | 6 | 备忘录,memo,一种能够帮助记忆,简单说明主题与相关事件的书面资料, 7 | 8 | 书籍笔记,book_notes,记录某一本书相关的内容, 9 | 书籍评论,book_review,以“书”为对象,分析书籍的形式和内容, 10 | 11 | 待办事项,todo_list,接下来一段时间内要完成的事物, 12 | 项目计划,project_plan,对未来的项目决策, 13 | 14 | 简易信息聚合,RSS,用于聚合多个网站更新内容的消息来源格式规范, 15 | 网络文章快照,web_article_snapshot,网络文章的抓取生成的快照, 16 | 网络文章剪取器,clipper,互联网上的文章进行抓取, 17 | 网络书签,network_bookmark,互联网内容的书签, 18 | 19 | 自定义条目,custom_item,按自身需求对内容分类的细目, 20 | 21 | 搜索,search,对内容索引性的搜索, 22 | 搜索条目类型,search_type,有针对性地进行搜索, 23 | 搜索表达式,search_expression,使用特定的表达式进行搜索, 24 | 25 | 数据流表达式,data_flow_expression,自定义的表达式来对数据进行处理, JavaScript 进行编排支持 26 | 通用数据流图,general_data_flow_chart,用于展示数据的通用图表, 27 | 28 | 任务计划,task_plan,针对于选定数据的迭代计划, 可以用于设计任意数据的计划 29 | 30 | 标签图片,tagged_image,已标注的图片, 31 | 32 | 白板,whiteboard,可自由绘制内容的白板, 33 | 双向绑定白板,two_way_binding_whiteboard,双向绑定白板, 34 | 35 | 评论,comments,针对于某一特定问题的评论, 36 | 位置评论,position_comment,可定位置的评论, 37 | 38 | 大纲式目录,outline_toc,对于文章内容的索引, 39 | 标签标记,tag_it,使用标签对内容进行标记, 40 | 模块化内容,modular_content,以特定的形式组织文章内容, 41 | 网状知识,network_knowledge,可视化形式, 42 | 捷径,shortcuts,快速的访问知识, 43 | 44 | 开始时间,created,某个事项的开始时间, 45 | 更新时间,updated,某个事项的修改时间, 46 | 截止时间,due,某个事项所需要完成的时间, 47 | 完成时间,resolution,某个事项的真正完成时间, 48 | 49 | 概念表达式,concept_expression,结构化后的概念查询条件, 50 | 概念对象,concept_object,概念条目, 51 | 概念行动,concept_action,概念行动, 52 | 概念标签,concept_tag,概念标签, 53 | 概念关键词,concept_text,概念关键词, 54 | 55 | 概念对象建议,concept_object_suggest,相关概念对象的自动建议, 56 | 概念运动建议,concept_action_suggest,相关概念行动的自动建议, 57 | --------------------------------------------------------------------------------
40 | {item.content} 41 |