--- /dev/null
+# Housekeeping
+
+## Base
+- BaseModel
+ - `.fromURL()` -- use `.chartType.parseValue k, v` for parsers
+- BaseView
+ - `.modelEvents` or maybe `.events.{ el, model, view... }`
+- AppView for common `main()` tasks
+- ScaffoldView: generic form for a model's fields
+ - Bootstrap horizontal-form
+ - Hooks for filtering visibility
+ - Controls: Save, Load, Cancel; Delete
+
+
+## Edit UI
+- Backbone.Router?
+- Loading Indicator:
+ - Render UI at start with `loading` mode, showing placeholders and indicator
+ - Activate Loading Spinner post-ready when waiting
+
+
+## Data UI
+- Timespan compat check
+- Metric: `column_idx` -> `column_id`
+- Tab-pane height fix? all `inline-block`: `<dataset-pane> <sep-line height="100%"> <metric-edit-panes>`
+- Should data files have timespan in name?
+
+
+## Graph Options UI
+- `tags.json` to describe colors, sorting, ignored-tags
+- Outline modified
+- Fix UI pill color when expanded
+- Filter:
+ - by major Categories: labels, grid, axes, display, interactivity
+ - by Tag (collapsable box)
+ - via typeahead box: names + tags
+- Sort
+ - by: Modified, Importance, Tag, Lexical
+ - Use `categoryRows`
+- Derived Options:
+ - visibility
+ - colors
+ - dateWindow
+ - file
+ - width, height
+- Buttons: Reset {all,visible} to defaults
+
+
+## Misc
+- Generate markdoc wiki from `/docs` on Build, Deploy
+- Refactor directories:
+ - template/
+ graph/
+ chart/
+ data/
+ dashboard/
+ - dataset/ -> data/
+ dataset/ +metric
+ datasource/ +column
+ - scaffold/ -> base/scaffold/
+ - timeseries/ -> util/timeseries/
+- Wrap `Backbone.extend()` to fire `subclass` event on parent class
+
# todo
-### general
-- Library for undo/redo
-- LocalStorage for unsaved changes, so accidental refresh (etc) doesn't lose changes
-- Wrap `Backbone.extend()` to fire `subclass` event on parent class
+## GitHub Migration
+- Replace all instances of "Kraken" and "GraphKit" with "Limn"
+- Create library entry point & config
+- Resolve workflow for /data
+ - Extract history for /data, re-commit metadata files
+- Update & scrub docs & readme
+- Migrate tickets from Asana to GitHub issues
+- Webhook to push to Gerrit (on analytics.wmflabs.org?)
-### Dashboard
-- Sparklines
-- Combine graphs
-- Featured Graphs (reportcard)
-- Browse Graphs
- - New
- - Recently Edited
- - Popular
-- Graph tags as categories (searchable?)
-- Users & Auth
-- "Fork this Graph"
-- User-relative slugs? `/user/:user/graph/:graph.slug/`
+## Features
-### View for show Graph
-- Embedding: iframe URL, `.js`
+### Display UI
+- Toggle Per-Metric Visibility
+ - Should redraw axes & scaling
+- Keyboard Shortcuts:
+ - Zoom to last 3 months
+ - Zoom out
+ - Pan left/right by timestep
+- Callout: current key-metric; YoY%, MoM% for key-metric
+
+
+### Charting
+- Better Benchmark Line on the graph
+- Per-series styles
+- Meta-metrics:
+ - Year-over-year
### Edit UX
- Info & Alert message boxes, eg: save, load success/error, validation
- Visual indicator graph is unsaved or has changes
-- Fields in `info` tab for graph identifiers:
- - short URL (slug only)
- - full URL (no slug -- all options)
- - embed code (iframe with .js pointer)
-- Loading Indicator:
- - Render UI at start with `loading` mode, showing placeholders and indicator
- - Activate Loading Spinner post-ready when waiting
- Keyboard Shortcuts:
- Move between tabs
- Zoom/pan chart
- Focus on form?
- Manipulating datasources and other complex forms (up, down, select, back, etc)
-- Standard-view layout
-- Fixed Chart at top?
+- Fields in `info` tab for graph identifiers:
+ - Short URL (slug only)
+ - Full URL (no slug -- all options)
+ - Embed code (iframe with .js pointer)
+- Standard-view preview
- Bold/darken numeric portion of formatted legend? Decrease size, change color of KMB suffix?
-- Load dygraph chart-spec on demand
### GraphModel
-- Use dataset name for Graph.name if empty
-- Cascade dataset chart-type defaults before `root`?
-- toURL():
+- Use dataset name for `Graph.name` if empty
+- Cascade dataset chart-type defaults before `root`
+- `.toURL()`:
- Slug only if not `.isNew()`
- Filter `id` out
- Diff with last saved state
- `dataset` -> `d`
- Graph Options (non-chart options):
- `palette`: String | { name:String, length:Number }
- - `name`: Infer colors from ColorBrewer + index
- - `columns`: Use this as column-length
- Zoom range: `dateWindow`
- - redraw graph on page resize
-- Backbone.Router, history w/ undo/redo
+ - redraw graph on page resize?
+- history w/ undo/redo
- "Save as PNG" link; post PNG to server
### Data UI
-- CSV cache: Load and parse
-- Split `transform` out from `CSVData` as a wrapper
-- `ModelCache.lookup(id | ids[], cb, ctx)`
-- Add CacheableModel & List w/ instance methods:
- - `CacheableModelList.lookup(id | ids[], cb, ctx)`
-
-- Sources Selector: list datasets via YAML metadata descriptor files (`/datasources/list` -> UI)
-- Metric Selector: select metrics out of multiple dataset & graph together
+- Controls:
+ - Delete metric
+ - Reorder metrics
+ - "Import All..." Button: import all cols from a datasource
+ - Backwards compat with `dataset` URL-field
+- Global Settings Pane w/ Palette, etc
+ - `palette`: String | { name:String, length:Number }
- Metric Presentation:
- label, color
- Date range selector & scrubber?
- Step compat check
- Use `step` to format date legend/labels (`1mo`? omit day, eg `2012/01`)
- Date picker
-- Graph Options:
- - `palette`: String | { name:String, length:Number }
- - `name`: Infer colors from ColorBrewer + index
- - `columns`: Use this as column-length
- Apply `meta.chart.{type, options}`
-- Should data files have timespan in name?
-
-
-### Charting
-- Finish Chart & Chart wrapper
-- Benchmark line on the graph
-- Per-series styles
-- Meta-metrics:
- - Year-over-year
### Annotations
-- Click chart to add an Annotation
- Props:
- label/title
- desc/text: markdown
- show
- hide
- UI for icon?
+- Click chart to add an Annotation
-### Graph Options UI
+### Chart Options UI
- `tags.json` to describe colors, sorting, ignored-tags
- Outline modified
- Fix UI pill color when expanded
- by: Modified, Importance, Tag, Lexical
- Use `categoryRows`
- Derived Options:
- - visibility
- - colors
- - dateWindow
- - file
- - width, height
-- Buttons: Reset {all,visible} to defaults
+ - `visibility`
+ - `colors`
+ - `dateWindow`
+ - `file`
+ - `width`, `height`
+- Buttons: Reset {all,visible} to Defaults
-### Server-side Persistence
+### Server
- Prompt to override slug
- Generate UUID for `Graph.id`
+- Embedding endpoints: iframe URL, `.js`
+
+### Admin UIs
+- Manage saved Graphs
+- Create new DataSource
+- User/Group management
+### Dashboard
+- Combine Graphs UI
+- Featured Graphs (reportcard)
+- Browse Graphs
+ - New
+ - Recently Edited
+ - Popular
+- Graph tags as categories (searchable?)
+- Users & Auth
+- "Fork this Graph"
+- User-relative slugs? `/user/:user/graph/:graph.slug/`
+- Sparklines
+
+
+
+
+
+
+
+## Future
+
+### General Wishlist
+- Library for undo/redo
+- LocalStorage for unsaved changes, so accidental refresh (etc) doesn't lose changes
-## notes
-### UI Notes from Diederik (Future)
+### from Diederik
- Relationships between datasets which can help inform rich UI responses (click on "Europe" and have it expand to the countries)
- easily create new graphs side-by-side