cybersemics / em Goto Github PK
View Code? Open in Web Editor NEWA beautiful, minimalistic note-taking app for personal sensemaking.
License: Other
A beautiful, minimalistic note-taking app for personal sensemaking.
License: Other
When navigating, the content is smoothly translated to keep the focused content in view, but the caret drifts. Tested on iOS 13.1.3.
The browser cursor should stay in place (not move relative to its contenteditable).
On iOS, the caret drifts out of place during the animation.
Video:
https://youtu.be/Poo61duk41w
Here is a potential list of goals I have identified for the rearchitecture. Please add your own and any comments here. We can use this issue to discuss and stay accountable to these goals.
Assess the scalability and production capacity of Firebase and compare it to other offerings.
Include:
e.g. “←↑↓ is not a gesture”
This is a summary of our meeting discussion around the main data model which is similar to a graph.
Thought is a textual item
Context is an unordered set of Thoughts
Binding is an unordered set of Contexts
All links are bidirectionally between a Binding and a Thought. (e.g., Thoughts and Contexts do not link to other Thoughts or Contexts. a Context belongs to a Binding which links to Thoughts, a Thought links to a Binding which links to children)
In most cases a Binding will only contain a single Context but cases where multiple Contexts should be treated the same, they are housed under the same Binding
the UX process of creating a Binding of multiple contexts is TBD but should generally follow this flow:
decoupling the binding would generally follow the reverse flow:
nor does it update when hitting "escape" while the cursor is on an item at the root level.
@rabbit This might be a good starter task! The history push/replace functionality will be easy to find, but you will still have to interface with some core concepts, such as below:
items
: the array of descendants from the root to a given item, e.g. ['My Journal', '6/12/19', 'Happy']
itemsRanked
: Similar to items
, but stores each item as a { key, rank }
pair to differentiate duplicate items in the same context.cursor
: where the cursor currently is; same data structure as itemsRanked
but may include cycles to account for navigating across context views.contextChildren
key after migration.Replace the em icon (which deceptively looks like a hamburger menu) with a material UI home icon:
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/><path d="M0 0h24v24H0z" fill="none"/>
</svg>
Add rounded corners to SVG in <GestureDiagram>
A thought can contain more than one context to view
example Things I Like Todo
could hold two context views
Things I Like Todo
Todo
to differentiate between context views, the active context view is underlined. if "Todo" is underlined then "Things I Like Todo" is inactive. when entering context view mode, the most general assumption possible is the default. if "Things I Like Todo" is a valid context view, it is selected by default otherwise "Todo" is selected by default.
to toggle between context views, first enter context view mode then (if the desired context is not already selected by default) tap the thought until the correct context view is underlined. each tap cycles through the possibilities in a loop. for the example, tapping would flip between "Things I Like Todo" and "Todo". tapping is only available once in a context view mode. outside of context view mode, tapping enters edit mode as expected.
open questions
Adding the "~" character to the end of a thought breaks the url refresh because it interferes with the Context View url encoding.
~
is used to encode the Context View state in the URL so that the page can be refreshed and re-open in the Context View.Enter Ctrl + Shift + S
, or click the button in the toolbar to activate the Context View on a given thought. To give a thought multiple contexts, just add it to two different places in the thoughtspace.
The superscript is out of position on multi-line thoughts.
Note that superscripts are rendered within <ThoughtAnnotation>
in which text is duplicated but hidden in order to position the superscripts in the correct place without interfering with editing.
Only in edit mode
setCursor
OR cursorUp
When moving (dragging-and-dropping) a thought into a context, that context may have a thought with the same value, which may have different subthoughts (children). When this occurs, the subthoughts from the duplicate thoughts are merged.
Subthoughts are combined into the destination (dropped) thought without modifying their rank, potentially creating duplicate ranks and/or resulting in an unexpected order.
The source subthoughts (drag) should be re-ranked starting with the rank of the last destination subthought (drop) + 1.
e.g. Given the following:
- A
- B
- x (rank 7)
- y (rank 8)
- M
- B
- z (rank 4.5)
Moving /M/B
into /A
should result in the following:
- A
- B
- x (rank 7)
- y (rank 8)
- z (rank 9)
- M
What do they like about em?
Why do they use em over other things?
Create a Settings page (full-screen modal, like the shortcuts modal) and move the settings currently in the footer to the Settings page.
Determine the viability and effort involved in using the current codebase to create a native mobile app.
cursorForward
does not work in Context View. It should work the same as in Normal View.
Tests: 0e5105a
Branch: 29
An n-gram is a contiguous sequence of words within a thought.
Here is a potential list of goals I have identified for the rearchitecture. Please add your own and any comments here. We can use this issue to discuss and stay accountable to these goals.
Add an action creator and define a shortcut/gesture to create a new context above the current item, it between its current context and itself.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.