A web app of digital interactive fiction/novel
-
Cytoscape.js https://js.cytoscape.org/
-
React Bootstrap https://react-bootstrap.github.io/
-
React Router https://reactrouter.com/
-
indexeddb
-
service worker (cache)
A Story, and Your Choices
Home Page: https://storychoices.vercel.app/
License: GNU General Public License v3.0
A web app of digital interactive fiction/novel
Cytoscape.js https://js.cytoscape.org/
React Bootstrap https://react-bootstrap.github.io/
React Router https://reactrouter.com/
indexeddb
service worker (cache)
Add an "About" page with some descriptions
because the total number of grouped log is not changed, then next sentence statement does not execute and the system is stuck.
not feature on browser, need some investigation
script data property should convert data to string before rendering or executing
Add a Copy button if the loading modal displays any error
Side panel > setting while scrolling, the bottom tabs will be include as well
we want to scroll without the bottom tabs moving
refactor the main page to contain sub pages
use Mui drawer + react router
Webpack is using an old version of terser, waiting webpack to upgrade.
use Trans
in load modal
add a button or three dots dropdown so that a user can delete a repo
Use fetch to replace axios
js can help validate function logic which JSON cannot
e.g. use import("script path")
Note: what if to load from a blob file? e.g. zip
replace useDebounce to useDeferredValue
either v7 or v8, so that a user can pick script from onedrive
furthers, if possible, a user can also backup the local indexdb to remote
when insert a new item, use css to show animation
@keyframes appear-animate {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
then use
animation: appear-animate 0.3s linear;
seems like the reading log id is not ready necessary.
as design, the composite key [savedataId, order] must be unique. and this can also benefit the ordering. because the "order" is part of the key, the selected results are automatically ordered
In addition, if a new save data is stored and new GUIDs are generated for all reading logs, then we have to update the save data logCursorPos.
In this case, it would be better to remove the reading log id and logCursorPos stores the order number
see https://mui.com/
side panel button cannot show in IOS
Choices/src/Containers/ReadPage/Components/Content.tsx
Lines 103 to 108 in c684833
the virtualItems keep changing which triggers statement execution muti-times without next statement id up to date.
the virtualItems is not relayable, only the last index of virtualItems is need for fetching
the side bar can be used to contain
as a user, if the given URL without any params, then show a popup
As a user keeps scrolling the screen, the read log position should be updated.
Note: the position is always the element which is on the top of the screen.
Technically, the top pos <= 0, bottom pos >= 0.
idea:
design the save data table like this:
row#1:
{id: 123, timestamp: 123456, data: {...}, readingLog: [{...log1..,}, {...log2...}]}
in this case, how to push directly into readingLog, which is a nested array of records.
the pros of this design are that no need to have a one-2-many relationship btw save data and readingLogs.
otherwise, two solutions
the vertical scrolling bar should be invisible
step#1: React window scroll to the right paragraph
step#2: Wait for paragraph to be added to DOM
step#3: Get sub-sentence position
step#4: Scroll extra offset
After adding a new repo, the repo list in main page should be refreshed
list of saved data
can save new data
the paragraphs should not be loaded all together
a new statement is required to record/update the road map check points
put the indexes under the meta section
the color is computed based on repo name and author name
in Content.tsx
this is similar to CPU instruction cycle, however, this can cause "maximum update depth exceeded" if its a big screen and load many statements.
Currently, the scriptCursorPos points to the script which was executed in prev round. However, this is not a good design for the Choice component, Jump component, etc since these components' execution results are not stored in the DB.
To have scriptCursorPos always pointed to the next script means the pointed script is not executed yet.
In this case:
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.