Git Product home page Git Product logo

polymorph's Introduction

Polymorph

acenturyandabit.github.io/polymorph/

Polymorph is a very fancy to-do-list that puts you in charge of what it does. With a bit of creativity, you can turn Polymorph into a Knowledge Base, Contact Management System, or automate your entire workflow, without getting into all the code.

Polymorph runs in your browser; out of the box, polymorph has:

  • A Workflowy Emulator (workflowish);
  • A Mind map generator (itemcluster);
  • A To-do list (itemList);
  • A scripting interface (scriptRunner) and a few other odds and ends.

The Polymorph Edge

Sure, polymorph provides you with elements such as lists, drilldowns, and graphs, but its real superpower is its incredibly space-efficient organisation framework. In Polymoprh, you can subdivide your window into functional rectangular areas, and imbue those areas with the elements above. Maybe you want a list next to a graph, or two lists for separate things; Polymorph can do it all.

Tabs are used to provide quick configuration options and provide flexibility, and a script runner element allows you to automate parts of your workflow such as time logging and organisation.

This highly modular approach allows you to take charge of your task organisation in a way that no other platform will allow (apart from building up a task management app yourself from scratch, that is.) At the same time, we know you won't be rebuilding your task management system everyday, so modification elements are out-of-the-way until you summon them with a press of a button.

If you'd like to run polymorph with a server backing it, check out the self-hostable polymorph_backend project here: [https://github.com/acenturyandabit/polymorph_backend]

Keeping it straight

Polymorph doesn't use React or Angular or Vue. This means that anyone who knows javascript can contribute; there are no dependencies to install; and code isn't obfuscated*, meaning you can edit it during runtime from the browser.

Polymorph doesn't need to run on a server, just a browser; and Polymorph will be always open source. This means anyone can fork, clone and edit, and mod to their heart's content.

*: Code is concatenated instead of compiled for deployment, which prevents multiple source downloads, often a bigger load-time-killer than download.

Contributing

Check out the developer readme in /docs/dev/README.md, then see the issues list! I fix most of my own issues because Polymorph is my day-to-day, but there's always nice-to-haves.

Apps I admire and have copied

polymorph's People

Contributors

acenturyandabit avatar jssaini07 avatar malimilan avatar mwitkovsky avatar xbrutus254 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

polymorph's Issues

Prompt for save on exit

When the user exits, they may have made edits which are not yet saved.

Steps:

  1. Create a core.saveprompt.js file and include it in index.html.
  2. Catch the updateItem event and change a 'item edited' flag
  3. Catch user close and fire a beforeunload event which prompts save.

Permanent upgrade to synergist 2.0

Synergist 1.0 was great, but synergist 2.0 is better!

However, many existing documents are still using synergist 2.0. Here's what we need to do:

  • Allow synergist 1.0 to still be served but not visible on operator select. (We'll need to upgrade operator select to allow this.)
  • Add an 'Upgrade to 2.0!' button in Synergist 1.0, and make it work.

Scope-to-item mode in workflowish

Real workflowy allows you to drilldown into certain items; i.e. limit the viewport to just that item.
We could have this feature - it would make things look cleaner.

improvement of User Experience

The navigation bar (or "nav bar" for short) is a critical component of any website or application, as it provides users with a way to easily navigate between different sections and pages. When designing a nav bar, it's important to consider factors such as the number of items that will be included, the hierarchy of the items, and the overall visual design. One common challenge in nav bar design is balancing the need to include all relevant sections with the need to keep the nav bar clean and uncluttered. This can be achieved through techniques such as collapsible menus or dropdown lists, which allow users to access additional options without overwhelming them with too much information at once. Additionally, it's important to ensure that the nav bar is clearly labeled and easy to use, with intuitive icons and labels that make it clear what each section or page represents. Overall, a well-designed nav bar can greatly enhance the user experience and help users find what they are looking for quickly and easily.

In Itemlist.js, improve renderedItemCache

this.renderedItemCache is regenerated every time a new item is created. Instead, it could be improved by only updating the cache when an item is created or destroyed, saving on querySelector calls for large amounts of data.

Subiteming in Synergist 2.0

Create a subitem system for Synergist 2.0, just like its predecessor Synergist 1.0:

Current behaviour:
Head to the website (acenturyandabit.github.io/polymorph).
Open a new document.
Click "itemcluster 2" to load an itemcluster 2 operator.
Double click to add a new item, and then double click elsewhere to add another new item.
When an item is dragged onto another item, the first item is added to the second item's subview and itemcluster navigates to the second item's subview.

Desired behaviour:
When an item is dragged onto another item, make the border red and dotted.
When an item is dropped onto another item, nest the first item in the second.

Also, a new feature:
When an item is dragged and held for some time onto another item, make the border purple and dotted.
When an item is dropped in this purple state, send the item to the target's subview.

Better Mobile UI

Currently the mobile UI could do with some work (a new stylesheet).

Make a "Report an issue..." menu button

Put it as a menu item under the (currently empty) "help" menu on the upper toolbar.

You'll have to wrangle with topbar.js which isn't documented suuper well (sorry) but you can learn the syntax off of the New and Load/Save buttons!

Extra thanks if you add some documentation to topbar.js so the next person to work on the topbar can see what's going on.

Replace innerHTML=

A profile check shows that innerHTML=etc calls are causing lag.

Your mission, if you choose to accept it, is to hunt down as many innerHTML sets and eliminate them.

feedback part

u should have a section of feedback a whole page and do not direct the user to an email box to write an email it can lead to minimize the number of feedback can come

Standardise item update calls to prep for improved garbage collection

Hey! If you're here from upforgrabs.net or some other site, comment below and I can help you get started! :) Don't feel obliged to do everything in all parts of the PR, one or two bits are fine :)

If you're lost, check out readme.md for details regarding some of the terminology.

Currently items can be deleted in two ways:

  1. An operator 'forgets' about the item by deleting just enough information to not see it anymore
  2. An operator calls for the item to be deleted using core.fire('delete',{id:itm}), and the item is deleted globally for all operators.

What the system should do:

  1. An operator 'forgets' about the item by deleting just enough information to not see it anymore
  2. The operator also calls delete using core.fire('delete',{id:itm})
  3. Core goes around to all operators calling core.fire('updateItem',{id:itm}), and each operator responds with a true/false stating whether or not that item is still EDITABLE (not just visible)
  4. If the item is not editable anywhere (all operators return false), then delete the item for real.

To achieve this:
1.a change eventAPI.js to handle return codes so that we can actually return true or false
1.a.1. Ensure that eventAPI.js retains original functionality so it is compatible with genUI
1.b. Ensure that all operators return either true or false based on whether or not an object is editable for it.
1.c. Create the delete function which fires updateItem and checks whether or not the item is editable, before deleting it
1.d. For all operators, change their delete functions to delete minimal information and call the core delete function.
2.a. Hook up function in 1.c. to core.on('deleteItem').
2.a.1. Also call deleteItem for all items during save to clean up any stragglers.

Clean up resize handler in itemList

In itemList.js, I use querySelectorAll() for the resize handler which may be inefficient for large numbers of calls.

Additionally, while resizing, moving the mouse outside the textarea hitbox causes the resize to be canceled.

this needs to be fixed :3

Problem with installation

Hi, I'm trying to use polymorph on my pc. I just extract the zipped file and run index.html with firefox.
It seems work but when I try to add mind map it didn't work at all. If I double click with left mouse button no one concept start.
Is it necessary to upload in a web server?
Is it possible to change the sky picture on the ground?
Sorry for these dummies question.
Thank you

Saved OK indicator

Display a little indicator in the corner of the screen if the document has successfully saved (i.e. will not trigger save-on-exit prompt).

Get the palette manager working.

Look in core_modules / core.palette.js. It would be cool if i could get a colour picker and edit the colour of my ui, and other aesthetic elements like the background image.

Escape to escape from dialogs

Literally what the title says. You'll be working in dialog.js, one of the UI extensions. Listen for the escape key press and close the dialog.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.