Gathering API v0.1 ideas


#21

Pure Java I believe, if you mean the server backend.


#22

I don’t believe we plan to do throttling at the beginning, when there are only a handful of alpha API testers. But eventually it would be useful. Of course, the rate limiting should be something reasonable for personal use.


#23

We can provide the id of the item and you can translate that to the URL yourself.

I think that’s safer, as our domain name might change; it’s best if you translate yourself whenever possible.


#24

That works! I didn’t realize that the string in the url was just the id. If it is, then that totally works! Would it currently be “https://dynalist.io/d/[id]”?

While we’re waiting for the API, is there any way to get a version of the backup files (*.opml files) that has the id’s? :slight_smile: Totally understand if there isn’t an easy way right now though.


#25

Well I think there’s an easier way for a developer: all the item (“node” as referred in code) can be found at DYNALIST.app.get_current_app_document().document.node_collection in the JS console. You should be able to process that information into any form you like with some digging. I think most things are pretty straight-forward in that JS object.


#26

ah perfect! that’s what I’m looking for. Thanks @Erica!


#27

Hi, owner of Todoport here. We’d love to add Dynalist support for both import and export, so are excited about the API.

Some of this has already been covered elsewhere, but my wishlist would be:

  • REST API with everything as JSON - please don’t use any proprietary protocols, transports, or serialisation.
  • Support API authorisation for the user with ALL the methods you support for the web login - e.g. if I connect with my Google account to Dynalist, I should be able to use a Google access token for that user when making API calls.
  • Use standard ISO 8601 formats for dates/times, and stick to UTC values for times.
  • As Zoltan said above, batch mode is great for performance. Over the web, API calls can easily take seconds to complete, so any way to minimise the number of calls is really useful.
  • any PUT/POST calls to create objects should return the id of the created object as the result of the call (again, as JSON). This makes creating children sooooo much easier.

Looking forward to seeing this!

Chris


#28

This is unrelated, but you can use this link for Apple Reminders.


#29

I haven’t read through this, but creating documents and having them update based on certain criteria (e.g. every word that mentions “purple cow” or whatever) would make for good use of the API.

And maybe the ability to add additional file panes to Dynalist so that way we don’t have to use different programs?


#30

This is the workflow I’d like to implement with Dynalist’s API. Basically a low maintenance, retroactively global TODO-list using javascript popup boxes

I would basically only use the ! parameter for dates that dynalist currently has. The problem I have with google calendar integration is the following:

  1. If I assign a date into google calendar with Dynalist PRO feature, its a one time deal. Once that date is set, its set. I cannot reassign it for a future date unless I go to google calendar. Plus, I have to use two different systems here

This problem would be solved with other built in “TO-DO” style systems found in other websites / softwares, that are integrated directly into that platform. For instance

Basically, the only thing I would use this API is for a TO-DO list that is more powerful than what dynalist currently has. I would want an inbox basically



Basically, this is what would happen

1. Pre-existing workflow integration

I use a phraseexpress macro “3d#” to paste a reminder in the future (3 days from today) using the “!” operator. Or 1w# for 1 week, 1m# for 1 month, etc. This would be anywhere in my document and be retroactively global. The task would just be whatever contents are on the bulletpoint itself

###2. API plugin use for TO-DO dialog box reminder (GET /PUT)

When that day comes, say 3 days later, a javascript popup box would show the reminder I set for myself. The dialog box would have the following options in terms of what I can do with that task

  • Mark as complete
  • Reassign the task, by manual date, OR +1days, +2days, +4days, +1 week, +1 month (If you wanted to reassign 5 days later, press +1day and +4day then OK)
  • Change the description of the task (in the event the task nature changes)
  • Add notes underneath the task (as child bulletpoints) or as a NOTE

The ability to add notes on the description would give it a more “Trello” feel. You can attach documents using dynalist PRO attacher or just an imgur link, etc

3 API plugin to modify data (POST)

When all is done press OK. This would retroactively change that task lists data, including but not limited to:

  • Last revised date
  • New “!” date changed to reflect the “reschedule task for another day”.
  • Any description changes + new notes on that task

This would make task management much more friendly and lower maintenance in nature (E.G. I don’t have to use another app like TODOIST, I don’t need to go to a “seperate list” to manage to do tasks, or remember anything really, the forced dialog box reminder when I log in everyday does that for me)

Naturally I log into dynalist.io everyday anyways, so this isn’t going to be a probelm

Afterthoughts on implementation

I would probably just run this all as a tampermonkey script to set the reminder sent back to myself, the moment I log into dynalist for the day. This would control the javascript dialog box reminder I have. I’m not entirely sure how this part would work though (dialog box on dynalist), I’d have to look into it more, I’m still fairly certain it would have to be with a tampermonkeyscript and an “alert box”. I don’t think a chrome extension would work for what I’m looking for exactly

I’m not sure if an external server would be needed to store any data or if its just constantly making GET / PUT calls for current date stamps either. Or if its just going to be a datadump log somewhere.

Items not finished or set as occuring will just constantly show up in my dialog box “inbox” everyday


A few Dynalist project management ideas
#31

It’s also worth considering having a sandbox environment so that app developers don’t need to test in production.


#32

Dashboard + Anki - like tools

Adding onto API ideas or just features semi-related to dynalist

There really needs to be a dashboard in general with dynalist.

In this dashboard, I would like the following:

  • (low priority) Richer search functions (for date parameter searches)
  • (low priority) Mind mapping
  • (High priority) → the TODOlist API plugin case I made above for pinging reminders to yourself (e.g. similar to Reddit RemindMe Bot! and FollowUpThen email system). Basically, an inbox

Next, I would also really like this, related to dashboard items (Anki-style tag flash card structure list)

Anki-flash card style dynalist tags

This all ties into giving tags “elevated permissions” related to managing “TODO List” that I indicated in the above reply

Essentially, the reason you would want this is if you want to use dynalist as you would the anki app.

Principally it’s the same.

It would only work per bulletpoint though to keep it simple

How it would work as below:

1. Use specific “elevated” formatting on bulletpoint to designate front / back of flashcard

Basically, say I wanted to make a flashcard. @anki-1day would be the global-tag that gives elevated permissions to make a bulletpoint into a “flashcard”

Say I wanted to refresh knowledge on a set of notes. Let’s say it’s the definition of the word “onomatopoeia”

The bulletpoint format on dynalist would look like this

  • Front of Flash card @anki-1day Back of Flash card Notes

In other words like this:

  • onomatopoeia @anki-1day the formation of a word from a sound associated with what is named (e.g., cuckoo, sizzle ).

The would make it easy to assign items you need to refresh on that you don’t understand that well

@anki-1day would remind you this everyday until you understand the concept in a flashcard setting (Front card shown, click to see back of card). This would pop up once / day in your dashboard / javascript popup inbox items

If you understand the concept, simply click to reassign the follow options (get/post request)

  • Refresh later (leave @anki-1day)
  • Sort of understand (change tag to @anki-7day)
  • Understood (Change tag to @anki-30days)
  • Don’t remind me anymore (Change tag to @anki-done)

Optionally, have the back of the flashcard an option to “expand” child bulletpoints below it / notes as well in one click too

Example of what flashcard would look like in anki

2. Dashboard popup

have it similar to anki

see what anki tutorial looks like


#33

Other things I would like

Macro button

In excel VBA, y ou could assign macros to do certain functions in the program. In dynalist, we have something similar using links, but those only redirect to another location in your file

We also have tags as well, when clicked, searches for tags within that list view mode

What would be nice is a customizable macro button that brings both together

Not sure if this is API related

How it would work and why you would want to use it

Basically

Say I’m on a document. At the top of the document I keep a list of tags to search through my document faster.

Say I go through my document unhide / hide lots of bulletpoints around and i have to click one by one by one

Ideally I’d like a button based macro I could just click on within that list view / document sitting near the top to do all of this

This idea of a “macro button” originates from excel VBA, where you can write visual basic code, and bind that macro into the ribbon menu, quick access area, or into the excel spreadsheet itself. Since dynalist is basically unstructured data entry / viewing at the same time, it isn’t too much different than an excel spreadsheet from this standpoint

Anyways, the macro button would have the following features: The ability to:

  • collapse all parent / child node points in one click
  • collapse ONLY the parent nodes
  • Collapse the parent + first child nodes in view
  • hotkey shortcut a set view mode of how the tabs should be opened (a save setting for a specific uncollapsed/ collapsed views in dynalist)
  • reopen that save setting (newer bulletpoints will be unchanged in the reload state)

This doesn’t even need to be a button and potentially just system-based hotkey instead that works on that designated list view mode

The reason this would benefit me is because I’ll take a lot of notes down, and then “rollup” those notes into one condensed bulletpoint and want to keep it in that state.

Sometimes it gets wacky and doesn’t work as intended

This is especially useful if you take lots of course notes that follow an obvious structure. Example of notes (rolled up content in one line)

this show that I have one condensed bulletpoint stemming from 6-7 child bulletpoints during note taking

Other things this macro button could do potentially:

  • Tag dynalist maker
  • Bulk CTRL+ENTER all bulletpoints in that designated list (if you do inbox management)
  • Bulk Move all items in that designated list to another destination
  • Temporarily change CSS to give it a new content in reading / writing (for people who write novels I guess)
  • Show / Hide all inlined images

Most of these things could be achieved with hotkeys though, but the option of a macro button would be nice as well

Things similar in nature that dynalist has already

  • Shortcutting a bookmark for certain tag searches in document

Open in new tab, sorting, embedding, separators and other "improvements"
#34

This post for hiding / viewing checked items kind of ties in with my macro button response below

Also, Piotr’s tamperscript for auto-sorting is pretty much exactly the UX behavior that should be used for the above reply

Another feature I would really like using dynalist’s API (probably possible with just tamperscripts) is to give dynalist more “Database-like” functions for filtering and viewing data

this is already achieved with tags already, but I feel like you would just have to use way too many tags to achieve this effect (each tag = one filter). Meaning if you wanted 2-3 filters (using dynalist’s search parameter), every item would need 2-3 tags, which is really redundant, making the overall document difficult to read

Not only that, you would have to go into search mode in dynalist, meaning you only limit yourself to one set of tasks at a time (viewing data, but not really entering data)

Tamperscript / API plugin proposal

what i propose is following:

More hide/view data similar to database filters (similar to excels hide columns, hide rows, etc)

Essentially this would give you more hide/view controls of your data overall

The best example I have and why I would use it is such:

Say I want to outline a very long file structure (ecommerce file folders) so I can understand the data as a whole.

This is what my data looks like, or just a snippet of it. Its inherently unorganized since the child/parent relationships aren’t well understood, so a RDBMS setup using airtable is out of the question

I want to bookmark different “views” of this data as I work and change filter structures so I can know what folders do what, as I learn more about this system

So I might have various viewmodes for my files like so: (Hide/Check box) and (Collapse/Uncollapse bulletpoints)

Each view filter would be saved into the tamperscript, kind of like what you do with video game saves

Below is the entire proposal and what the tamperscript does essentially , in one image mockup


TLDR

see above image

Basically, my tamperscript / api plugin wishlist is to have “save” / “load” states for specific views. These control and change following:

  • collapsed / uncollapsed items in that list
  • checked / unchecked items in that list

similar to database filtering views, excel “hide rows and columns” that kind of thing.

More database-y like features for outlining and organizing very large complex file structures by hiding things you want to see / don’t want to see based on task



:zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap::zap:

EDIT 6/4/17

This is semi-related to the above feature for collapsing / uncollapsing and checking / unchecking list

Its a “save” / “load” state feature pulling in Dynalist’s API for the primaryKey of the node, or just using the “Creation date” as the primaryKey through javascripts DOM

It would be based on unix epoch time, https://en.wikipedia.org/wiki/Unix_time or iso-date format https://www.w3.org/QA/Tips/iso-date , but a simplified version of it

optionally hexadecimal / 64 bit encoding is possible here too

Use the following format for saving / loading save state data (comma seperated values)

Data on my browser from dynalist is stored as such

<div class="Node-bullet" title="Created at 12:51:00 PM on 6/4/2017, last edited at 12:59:15 PM on 6/4/2017"></div>

I would use the “Created at” time to define where the bulletpoint is at. Since this value doesn’t change

so if I had the following data:

✪✪ A [creation date: 12:51:00 on 6/4/2017]

“A” would be converted like so:

2017-06-04-12-51-00 (YYYY-MM-DD-HH-MM-SS)

remove hyphens. Assume GMT timezone / option to define in settings

20170604125100

Optionally convert to epoch unix time or leave as is

Store the data as follows. So if the following save format would be

how this would all work (top level childpoints)

Basically if I had the following data in dynalist, I could save the sorting order based on creation date

I highlighted the difference in stamps here

I would click a tamperscript

It would save and output the following data inside the “Save states” note

#[save1 | 20170604125100, 20170604145100, 20170604135100, 20170604155100]

Because if I wanted to run piotr’s autosorting / tamperscript this is how I would find the original way my data was sorted

Optionally, this data could be saved, either in dynalist directly, or through a 3rd party server, and referenced through another primarykey

issues

above is how i would implement a method for saving the order in which bulletpoints appear, if I wanted to change up the order my dynalist toplevel bulletpoints appeared for working on different things

there’s a few issues here that this sorting / save/load state wouldn’t cover

  • child of child node order
  • Deleted or newly added bulletpoints

I would have to use an API + an external server / RDBMS storage to handle this. The RDBMS layout would look like this though (per bulletpoint assigned)

It wouldn’t necessarily actually need to use a dynalist API at all, since the data can be read straight from the DOM, but it would make retrieving data much easier though / sending back data as well. If no dynalist API available ,then it would have to be an apikey sitting inside the parent bulletpoints note instead.

tl;dr

look at the last image. it sums it up

basically, I want a way to save a specific “View” of data

  • What bulletpoints are collapsed
  • Which ones aren’t
  • Which bulletpoints to show / hide
  • Ignore newly added or deleted bulletpoints (or update on an ongoing -dynalist API basis / calls)

This would give dynalist more database-y features for filtering data and getting a better context of more complex data (just think of adding excel-like features into dynalist). Normally to do this right now you would just use tags.

using dynalist API (or even a tamperscript) to an external server or locally cached data for storing “Save states” would make things easier. Namely, the “Save state” data would just be referenced by one key, which in turn has a simple relational database-style setup with only 1 table per save state

This is great for outlining and taking notes of a complex document. Like for instance, you wanted to make sense of 100,000 lines of code, you could outline it first in its hierarchial file form in dynalist, take notes in each area, “Save” the states and preview what things you want. The use-case for this is mostly in the science / computer science / engineering field though


Tampermonkey script wishlist: ✪ 1. Autobookmarker ✪ 2. Autocloser ✪ 3. Autoopen
Ability to assign numerical variables to bullet items
#35

was just reading this

although markdown table support is a planned feature in dynalist already (last time I checked), why not have support for embedding CSV type data?

For instance,

say I have this CSV file with this data

Resaving the .csv file into .txt looks like this:

why not have spreadsheet functionality right inside the note like this? (its very similar to @piotr code block support in some ways for activating the table - found here: Multi-line code blocks - basicaly press a hotkey to activate a tamperscript to make the excel spreadsheet)

When you actually move values inside the spreadsheet, it will update the node-unrendered contents values

Subsequently have really basic math support for multiplication, adding, subtraction, division. And adding new rows and columns of data

Use libreoffice, or apache open-offices source code for reference

The other option is just use airtable and embed it right in dynalist though

this should be lumped in with the feature adding columns to items


Ability to assign numerical variables to bullet items
#36

I am sure a lot of what I want has already been mentioned. But I’ll just say that the more freedom we get, the better! If I can have methods to read, add, and remove items it would be great.

One particular API feature I would really like is the ability to check and uncheck items. For my use case, I would want a way to uncheck all items (even better: a way to uncheck all items under a specific item or that matches a search term).


#37

Hi! I don’t think it is mentioned already here. Besides traditional APIs to fetch elements in Dynalist documents, I would love to see a WEBHOOK, so to be able to subscribe to changes in the document, without having to pool the API and check differences in the reply.
Three basic APIs and Webhooks that would be enough in my use case would be:

  • API to fetch a dynalist document (the entire document, preferably in json format)
  • API to write a dynalist document (or overwrite it), preferably with json payload
  • WebHook to get notified about changes in a certain document

Thanks!


#38

I love the way Airtable (basically a spreadsheet-database hybrid) allows for notifications with Slack.

Whenever you create an update to cells within a specified view it sends that to Slack.

The corollary in Dynalist would be being able to specify a number of readable attributes for every item such as:

  • Item text
  • Item note
  • Creation date

And some new attributes for structured data:

  • Priority (critical, high, normal, low)
  • Status (e.g. new, in-progress, completed etc)

If I could have collaborators able to update priority, status etc for any bullet and have those updates then as notifications in Slack then I’d stop needing Asana or Airtable for project management.


#39

Item Properties special sub-item

This could be implemented by having a special sub-item called $properties for example which contains customisable metadata for an item.

For example:

Ideally it allows arbitrary properties to be created, but also has formatted property types which better interoperate with other integrations.

This sort of extensible framework also is flexible enough to allow later GUI customisability e.g. maybe some people want to display the Status and Completion % in-line with the item, whereas others might prefer seeing Assignee and Deadline Datetime.

The GUI for this could even be organised via properties e.g.
GUI itemleft [=] Status
GUI itemright1 [=] Priority
GUI itemright2 [=] Completion %


#40

!(9/14/2017 12:25)

I haven’t posted any ideas recently but here’s some ideas I still want to be implemented down the road when I get around to it

Most issues Ihave right now with dynalist is not navigating to the doc I want fast enough from whatever I’m doing at that moment. That, and navigating through dynalist panes in chrome is challenging as well

For instance, I might be on one document, working on some coursenotes or something along those lines, realize I need to cross reference another document (or several), but have to use piotr’s omnipanel to open that doc in a new tab. I wish cross-doc navigation in dynalist was better overall

API-based solutions (that aren’t too difficult and I’ll probably work on these later)

  • Automatically put a document in a folder based on its name prefix (I make one doc almost every week, it gets kind of tedious moving files around).
  • Press a hotkey, open up dynalist in new tab, dynalist asks which file I want to open (as opposed to dynalist opening the last tab)
  • A better overall version of CTRL+O for navigating files ( I’d like more keyboard navigation around documents, having so many documents now, keyboard nav is faster)
  • A control panel for navigating docs (I would really like a method of “tagging” documents themselves with metadata -> Very similar to how wordpress handles blogposts with categories and tags))
    - With CTRL+O, Press CTRL+Click to open that item in a new tab (as opposed to in same tab) → I’m going to implement this first, once I finish this other course about modifying the DOM so I can understand it in more detail.
  • Based on document prefix name, use a different style favicon

Less high priority API based solutions

  • Right side panel style navigation similar to app.classeur.io
  • Javascript based spreadsheets
  • Ability to hide node’s notes on an individual basis
  • Airtable-like / database features (highlight over a specific tag to “expand out” text, useful for contact info. E.G. type in @client-name and hover over to see information about them)- Basically a search parameter based on typing within that node
  • Anki-like integrations → Not 100% sure how this is integrated, but I dumped many ideas here. As of right now I use dynalist to breakdown and understand information, some other ways to consolidate knowledge, and anki to retain it. Wish there was a streamlined method of keeping track of what things I put in anki from dynalist.

Non API specific things:

  • Force dynalist in chromium to open links in chrome (Not entirely sure how this is done) yet still
  • Write a python script with some regex to rebuild all my imagelink names if I need it later on (e.g. amazonS3.com/imageName instead of imgur.com/imageName)

Generalized features I would like

  • ++highlighter formatting++ (piotrs powerpack highlighter gets wonky sometimes, and I really just want a 3rd method of formatting text) → I’ll implement this later too
  • Stickytabs (at bottom of screen) / splittabs built in dynalist, so I could view multiple docs all on one page natively

General issues I have right now

  • Opening a file in a new tab in dynalist doesn’t always go to the homepage of the file

  • Global Search is rather tediously and slow when typing things out, I really wish I could type something out first, then hit search (not an API-specific thing) as opposed to dynalist running a search on each letter I put in. Its becoming troublesome when my docs get larger and longer


I haven’t done any of the API related things I want too try out and am just waiting and am waiting for API doc + learning some related courses that I need to know before attempting it.