From ea6452fa81ad73fb8b06db65cdd18f6a339bbdb9 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 7 Sep 2018 10:30:40 +0200 Subject: [PATCH 001/116] switch to lineupjs4 --- .circleci/config.yml | 12 ++++++++---- package.json | 2 +- templates/index.html | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1df5c5f..d1cce3c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,15 +23,19 @@ jobs: - run: #update build doc and readme name: update api command: | - if [ "${CIRCLE_BRANCH}" == "master" ] ; then + if [ "${CIRCLE_BRANCH}" == "master" ] || [ "${CIRCLE_BRANCH}" == "develop" ] ; then git clone git@github.com:datavisyn/lineup.js.org.git cd lineup.js.org - rm -rf "app/" - mv ../build "app" + appdir=app + if [ "${CIRCLE_BRANCH}" == "develop" ] ; then + appdir=app_develop + fi + rm -rf "${appdir}/" + mv ../build "${appdir}" git config user.email "samuel_gratzl@gmx.at" git config user.name "Samuel Gratzl" git add -A - git commit -m "auto updating app" -m "trigger: ${CIRCLE_BUILD_URL}" + git commit -m "auto updating ${appdir}" -m "trigger: ${CIRCLE_BUILD_URL}" git push origin master fi diff --git a/package.json b/package.json index 113d8d6..879948a 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "dependencies": { "@types/materialize-css": "^1.0.3", "@types/papaparse": "^4.5.0", - "lineupjs": "^3.1.2", + "lineupjs": "^4.0.0-alpha.0", "materialize-css": "^0.100.2", "papaparse": "^4.5.0", "font-awesome": "^4.7.0", diff --git a/templates/index.html b/templates/index.html index 1204395..64d2089 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,14 +4,14 @@ LineUp - + - + From 8e588f3d8167254527de32233ff73fd52b40c150 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 7 Sep 2018 10:46:19 +0200 Subject: [PATCH 002/116] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 879948a..6beae88 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "dependencies": { "@types/materialize-css": "^1.0.3", "@types/papaparse": "^4.5.0", - "lineupjs": "^4.0.0-alpha.0", + "lineupjs": "^4.0.0-alpha.2", "materialize-css": "^0.100.2", "papaparse": "^4.5.0", "font-awesome": "^4.7.0", From 9253ca0ac6ece0190210e2bff2f771249955cd15 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 7 Sep 2018 14:50:13 +0200 Subject: [PATCH 003/116] delay resize update --- src/index.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index e2eedb5..3047495 100644 --- a/src/index.ts +++ b/src/index.ts @@ -83,9 +83,13 @@ function showFile(file: File) { } window.addEventListener('resize', () => { - if (shared.lineup) { - shared.lineup.update(); - } + setTimeout(() => { + if (shared.lineup) { + shared.lineup.update(); + } + }, 100); +}, { + passive: false }); initExport(); From 97e0873e4e926ae8fc5caca9deac9b74ee49d715 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 7 Sep 2018 15:19:48 +0200 Subject: [PATCH 004/116] restructure styles --- src/index.ts | 1 - src/style.scss | 246 +------------------------- src/styles/_app.scss | 106 +++++++++++ src/styles/_icons.scss | 24 +++ src/styles/_lineup.scss | 95 ++++++++++ src/{ => styles}/_material-icons.scss | 0 src/styles/_material.scss | 22 +++ src/styles/_vars.scss | 21 +++ 8 files changed, 272 insertions(+), 243 deletions(-) create mode 100644 src/styles/_app.scss create mode 100644 src/styles/_icons.scss create mode 100644 src/styles/_lineup.scss rename src/{ => styles}/_material-icons.scss (100%) create mode 100644 src/styles/_material.scss create mode 100644 src/styles/_vars.scss diff --git a/src/index.ts b/src/index.ts index 3047495..dd51ead 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,7 +2,6 @@ import 'materialize-css'; import 'file-loader?name=index.html!extract-loader!html-loader?interpolate!./index.html'; import './assets/favicon/favicon'; import './style.scss'; -import 'font-awesome/css/font-awesome.css'; import * as $ from 'jquery'; import 'lineupjs/build/LineUpJS.css'; import initExport from './export'; diff --git a/src/style.scss b/src/style.scss index 3c9c64a..67f8b73 100644 --- a/src/style.scss +++ b/src/style.scss @@ -1,245 +1,7 @@ -$roboto-font-path: '~materialize-css/dist/fonts/roboto/'; -@import '~materialize-css/sass/components/color'; - -$primary-color: color("grey", "lighten-3"); -$secondary-color: color("grey", "darken-3"); - -$navbar-height: 40px; -$navbar-font-color: color("grey", "darken-2"); -$navbar-brand-font-size: 1.2em; - -$footer-font-color: color("grey", "darken-4"); -$footer-copyright-font-color: $footer-font-color; - -$input-height: 2.4rem; - -$radio-fill-color: color("grey", "base") !default; -$radio-empty-color: #5a5a5a !default; -$radio-border: 2px solid $secondary-color !default; +@import './styles/app'; +@import './styles/icons'; +@import './styles/lineup'; +@import './styles/material-icons'; @import '~materialize-css/sass/materialize'; -@import './material-icons'; - -$fa-font-path: '~font-awesome/fonts'; -@import '~font-awesome/scss/font-awesome'; - -html { - font-size: 14px; -} - -body { - display: flex; - min-height: 100vh; - flex-direction: column; - - > main { - flex: 1 0 auto; - position: relative; - display: flex; - flex-direction: column; - - > div { - flex: 1 1 auto; - opacity: 1; - transition: opacity 0.5s ease; - } - - &[data-state=initial] { - #uploader { - display: none; - } - } - - &[data-state=uploading] { - #dropper { - display: none; - } - - .lu { - visibility: visible; - } - } - - &[data-state=ready] { - > *:not(.lu) { - display: none; - } - - .lu { - visibility: visible; - pointer-events: all; - opacity: 1; - } - } - } -} - -nav { - .brand-logo { - margin-left: 1em; - } - - .btn-floating.halfway-fab { - bottom: -11px; - } - - .fixed-action-btn.horizontal ul li { - float: unset; - text-align: right; - margin-top: 11px; - - > a { - margin: 0; - } - } -} - -label { - color: color("grey", "darken-3"); -} - -// modify checkbox style -[type="checkbox"] { - + label { - padding-left: 25px; - } - - + label::before, - &:not(.filled-in) + label::after { - border: 1px solid color("grey", "darken-1"); - } - - &:not(:checked):disabled + label { - cursor: not-allowed; - } - - &:not(:checked):disabled + label::before { - border: 1px solid color("grey", "lighten-1"); - background: color("grey", "lighten-2"); - } -} - -.carousel { - height: 600px; - - .card-image { - height: 250px; - } - - .carousel-item { - width: 500px; - height: 400px; - } - - .card-reveal p { - text-align: justify; - } -} - -.lu-c { - position: absolute !important; - left: 5px; - right: 5px; - top: 5px; - bottom: 5px; - visibility: hidden; - opacity: 0; - transition: opacity 0.5s ease; - pointer-events: none; - line-height: 1; -} - -.lu-rule-button-chooser.switch { - overflow: inherit; - display: flex; - justify-content: center; - margin-bottom: 0.5em; - - span { - font-size: 1rem; - } -} - -.lu-active .lu-hierarchy { - > section { - margin-bottom: 1em; - - > .lu-toolbar, - > footer { - align-items: center; - padding: 6px 0.5em 0.5em 0.5em; - } - - > footer { - &::before { - color: #cecece; - } - - .lu-search input { - margin: 0; - height: 2em; - border-color: #dedede; - font-size: small; - font-weight: normal; - } - } - } -} - -.lu-search > input[type=search] { - margin-bottom: 0; - border: 1px solid $secondary-color; - border-radius: 3px; - padding: 3px 5px; - box-sizing: border-box; -} - -.lu-summary .lu-checkbox > [type="checkbox"] + label { - margin: 0; - font-size: 12px; - line-height: 100%; -} - -article.lu-side-panel-entry { - margin-bottom: 0.8em; - - .lu-summary[data-renderer="histogram"][data-summary="stratify"] { - margin-bottom: 8em; - - select { - display: block; - position: absolute; - bottom: -7em; - } - } -} - -.lu-side-panel { - padding-top: 2em; - - &.lu-collapsed { - transform: unset; - } -} - -section.lu-header > .lu-label { - line-height: 1.5; -} - -.page-footer { - padding-top: 0; - - .footer-copyright { - min-height: 30px; - padding: 0 1em; - } -} - -.lu-side-panel .lu-collapser { - padding: 1.5em 0.2em; -} - -.lu-filter-table .lu-checkbox > [type="checkbox"] + label { - display: inline-flex; -} diff --git a/src/styles/_app.scss b/src/styles/_app.scss new file mode 100644 index 0000000..5d52c3e --- /dev/null +++ b/src/styles/_app.scss @@ -0,0 +1,106 @@ +@import './vars'; + +html { + font-size: 14px; +} + +body { + display: flex; + min-height: 100vh; + flex-direction: column; + + > main { + flex: 1 0 auto; + position: relative; + display: flex; + flex-direction: column; + + > div { + flex: 1 1 auto; + opacity: 1; + transition: opacity 0.5s ease; + } + + &[data-state=initial] { + #uploader { + display: none; + } + } + + &[data-state=uploading] { + #dropper { + display: none; + } + + .lu { + visibility: visible; + } + } + + &[data-state=ready] { + > *:not(.lu) { + display: none; + } + + .lu { + visibility: visible; + pointer-events: all; + opacity: 1; + } + } + } +} + +nav { + .brand-logo { + margin-left: 1em; + } + + .btn-floating.halfway-fab { + bottom: -11px; + } + + .fixed-action-btn.horizontal ul li { + float: unset; + text-align: right; + margin-top: 11px; + + > a { + margin: 0; + } + } +} + +label { + color: color("grey", "darken-3"); +} + +.carousel { + height: 600px; + + .card-image { + height: 250px; + } + + .carousel-item { + width: 500px; + height: 400px; + } + + .card-reveal p { + text-align: justify; + } +} + +.lu-c { + position: absolute !important; + left: 5px; + right: 5px; + top: 5px; + bottom: 5px; + visibility: hidden; + opacity: 0; + transition: opacity 0.5s ease; + pointer-events: none; + line-height: 1; +} diff --git a/src/styles/_icons.scss b/src/styles/_icons.scss new file mode 100644 index 0000000..a244ee0 --- /dev/null +++ b/src/styles/_icons.scss @@ -0,0 +1,24 @@ +@import './vars'; + +@import '~font-awesome/scss/variables'; +@import '~font-awesome/scss/path'; +@import '~font-awesome/scss/mixins'; +@import '~font-awesome/scss/variables'; + +.fa-codepen::before, +.fa-file-code-o::before, +.fa-file-excel-o::before { + @include fa-icon(); +} + +.fa-codepen::before { + content: $fa-var-codepen; +} + +.fa-file-code-o::before { + content: $fa-var-file-code-o; +} + +.fa-file-excel-o::before { + content: $fa-var-file-excel-o; +} diff --git a/src/styles/_lineup.scss b/src/styles/_lineup.scss new file mode 100644 index 0000000..30c592a --- /dev/null +++ b/src/styles/_lineup.scss @@ -0,0 +1,95 @@ +@import './vars'; + +.lu-rule-button-chooser.switch { + overflow: inherit; + display: flex; + justify-content: center; + margin-bottom: 0.5em; + + span { + font-size: 1rem; + } +} + +.lu-active .lu-hierarchy { + > section { + margin-bottom: 1em; + + > .lu-toolbar, + > footer { + align-items: center; + padding: 6px 0.5em 0.5em 0.5em; + } + + > footer { + &::before { + color: #cecece; + } + + .lu-search input { + margin: 0; + height: 2em; + border-color: #dedede; + font-size: small; + font-weight: normal; + } + } + } +} + +.lu-search > input[type=search] { + margin-bottom: 0; + border: 1px solid $secondary-color; + border-radius: 3px; + padding: 3px 5px; + box-sizing: border-box; +} + +.lu-summary .lu-checkbox > [type="checkbox"] + label { + margin: 0; + font-size: 12px; + line-height: 100%; +} + +article.lu-side-panel-entry { + margin-bottom: 0.8em; + + .lu-summary[data-renderer="histogram"][data-summary="stratify"] { + margin-bottom: 8em; + + select { + display: block; + position: absolute; + bottom: -7em; + } + } +} + +.lu-side-panel { + padding-top: 2em; + + &.lu-collapsed { + transform: unset; + } +} + +section.lu-header > .lu-label { + line-height: 1.5; +} + +.page-footer { + padding-top: 0; + + .footer-copyright { + min-height: 30px; + padding: 0 1em; + } +} + +.lu-side-panel .lu-collapser { + padding: 1.5em 0.2em; +} + +.lu-filter-table .lu-checkbox > [type="checkbox"] + label { + display: inline-flex; +} diff --git a/src/_material-icons.scss b/src/styles/_material-icons.scss similarity index 100% rename from src/_material-icons.scss rename to src/styles/_material-icons.scss diff --git a/src/styles/_material.scss b/src/styles/_material.scss new file mode 100644 index 0000000..53ac849 --- /dev/null +++ b/src/styles/_material.scss @@ -0,0 +1,22 @@ +@import './vars'; + +// modify checkbox style +[type="checkbox"] { + + label { + padding-left: 25px; + } + + + label::before, + &:not(.filled-in) + label::after { + border: 1px solid color("grey", "darken-1"); + } + + &:not(:checked):disabled + label { + cursor: not-allowed; + } + + &:not(:checked):disabled + label::before { + border: 1px solid color("grey", "lighten-1"); + background: color("grey", "lighten-2"); + } +} diff --git a/src/styles/_vars.scss b/src/styles/_vars.scss new file mode 100644 index 0000000..c3841d5 --- /dev/null +++ b/src/styles/_vars.scss @@ -0,0 +1,21 @@ +$roboto-font-path: '~materialize-css/dist/fonts/roboto/'; + +@import '~materialize-css/sass/components/color'; + +$primary-color: color("grey", "lighten-3"); +$secondary-color: color("grey", "darken-3"); + +$navbar-height: 40px; +$navbar-font-color: color("grey", "darken-2"); +$navbar-brand-font-size: 1.2em; + +$footer-font-color: color("grey", "darken-4"); +$footer-copyright-font-color: $footer-font-color; + +$input-height: 2.4rem; + +$radio-fill-color: color("grey", "base") !default; +$radio-empty-color: #5a5a5a !default; +$radio-border: 2px solid $secondary-color !default; + +$fa-font-path: '~font-awesome/fonts'; From b55c98c1ed48368496a7dd1989ad4939b7e18f01 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 7 Sep 2018 15:36:25 +0200 Subject: [PATCH 005/116] optimize css --- src/style.scss | 5 ++++- src/styles/_icons.scss | 2 -- src/styles/_materialize.scss | 31 +++++++++++++++++++++++++++++++ src/styles/_vars.scss | 3 --- 4 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 src/styles/_materialize.scss diff --git a/src/style.scss b/src/style.scss index 67f8b73..f2b7f67 100644 --- a/src/style.scss +++ b/src/style.scss @@ -1,7 +1,10 @@ +$roboto-font-path: '~materialize-css/dist/fonts/roboto/'; + +@import '~materialize-css/sass/components/color'; @import './styles/app'; @import './styles/icons'; @import './styles/lineup'; @import './styles/material-icons'; -@import '~materialize-css/sass/materialize'; +@import './styles/materialize'; diff --git a/src/styles/_icons.scss b/src/styles/_icons.scss index a244ee0..0695cfb 100644 --- a/src/styles/_icons.scss +++ b/src/styles/_icons.scss @@ -1,5 +1,3 @@ -@import './vars'; - @import '~font-awesome/scss/variables'; @import '~font-awesome/scss/path'; @import '~font-awesome/scss/mixins'; diff --git a/src/styles/_materialize.scss b/src/styles/_materialize.scss new file mode 100644 index 0000000..02c3984 --- /dev/null +++ b/src/styles/_materialize.scss @@ -0,0 +1,31 @@ +@import './vars'; + +// Variables; +@import '~materialize-css/sass/components/variables'; + +// Reset +@import '~materialize-css/sass/components/normalize'; + +// components +@import '~materialize-css/sass/components/global'; +@import '~materialize-css/sass/components/badges'; +@import '~materialize-css/sass/components/icons-material-design'; +@import '~materialize-css/sass/components/grid'; +@import '~materialize-css/sass/components/navbar'; +@import '~materialize-css/sass/components/roboto'; +@import '~materialize-css/sass/components/typography'; +@import '~materialize-css/sass/components/transitions'; +@import '~materialize-css/sass/components/cards'; +@import '~materialize-css/sass/components/toast'; +@import '~materialize-css/sass/components/tooltip'; +@import '~materialize-css/sass/components/buttons'; +@import '~materialize-css/sass/components/dropdown'; +@import '~materialize-css/sass/components/waves'; +@import '~materialize-css/sass/components/materialbox'; +@import '~materialize-css/sass/components/forms/forms'; +@import '~materialize-css/sass/components/table_of_contents'; +@import '~materialize-css/sass/components/sideNav'; +@import '~materialize-css/sass/components/preloader'; +@import '~materialize-css/sass/components/slider'; +@import '~materialize-css/sass/components/carousel'; +@import '~materialize-css/sass/components/pulse'; diff --git a/src/styles/_vars.scss b/src/styles/_vars.scss index c3841d5..dba631a 100644 --- a/src/styles/_vars.scss +++ b/src/styles/_vars.scss @@ -1,6 +1,3 @@ -$roboto-font-path: '~materialize-css/dist/fonts/roboto/'; - -@import '~materialize-css/sass/components/color'; $primary-color: color("grey", "lighten-3"); $secondary-color: color("grey", "darken-3"); From 10d9445c1f0ba0f912bf0cdf998a80a18703bb0f Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 7 Sep 2018 15:53:17 +0200 Subject: [PATCH 006/116] simplify styles --- src/index.html | 6 ++-- src/style.scss | 2 +- src/styles/_app.scss | 54 ++++++++++++++++------------- src/styles/_lineup.scss | 75 +++++++++++++++++------------------------ 4 files changed, 65 insertions(+), 72 deletions(-) diff --git a/src/index.html b/src/index.html index 49bd342..343d7c2 100644 --- a/src/index.html +++ b/src/index.html @@ -46,19 +46,19 @@ file_download diff --git a/webpack.config.js b/webpack.config.js index 38c22ac..140f645 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -139,6 +139,11 @@ module.exports = (env, options) => { { test: /\.(ttf|eot)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'file-loader' + }, + { + test: /schema\.json$/, + type: 'javascript/auto', + loader: 'file-loader' } ] }, From ec2e77279c5c0e204bf413b4aa5c067bd55432d9 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 16 Nov 2018 16:47:25 +0100 Subject: [PATCH 044/116] fix export dump --- src/data/loader_dump.ts | 5 +++-- src/export.ts | 4 ++-- src/index.ts | 5 +++++ src/styles/_icons.scss | 7 ++++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/data/loader_dump.ts b/src/data/loader_dump.ts index dece39b..0c62d67 100644 --- a/src/data/loader_dump.ts +++ b/src/data/loader_dump.ts @@ -1,6 +1,7 @@ import {IDataset, IDatasetMeta} from './IDataset'; import {cleanName} from './ùtils'; import '!file-loader?name=schema.1.0.0.json!./schema.json'; +import {LineUp, Taggle} from 'lineupjs'; const SCHEMA_REF = 'https://lineup.js.org/app_develop/schema.1.0.0.json'; @@ -14,10 +15,10 @@ export function fromDumpFile(parsed: any): IDatasetMeta { return parsed; } -export function exportDump(dataset: IDataset, lineup: any) { +export function exportDump(dataset: IDataset, lineup: LineUp|Taggle) { const dump = Object.assign({ $schema: SCHEMA_REF, - dump: lineup + dump: lineup.dump() }, dataset); delete dump.build; diff --git a/src/export.ts b/src/export.ts index cf43494..fbe0e1b 100644 --- a/src/export.ts +++ b/src/export.ts @@ -24,7 +24,7 @@ export default function initExport() { evt.stopPropagation(); exportJSON(shared.lineup!).then((json) => { // download link - downloadHelper.href = `data:application/json;charset=utf-8;base64,${btoa(unescape(encodeURIComponent(JSON.stringify(json))))}`; + downloadHelper.href = `data:application/json;charset=utf-8;base64,${btoa(unescape(encodeURIComponent(JSON.stringify(json, null, ' '))))}`; (downloadHelper).download = `${shared.dataset!.name}.json`; downloadHelper.click(); }); @@ -34,7 +34,7 @@ export default function initExport() { evt.stopPropagation(); Promise.resolve(exportDump(shared.dataset!, shared.lineup!)).then((json) => { // download link - downloadHelper.href = `data:application/json;charset=utf-8;base64,${btoa(unescape(encodeURIComponent(JSON.stringify(json))))}`; + downloadHelper.href = `data:application/json;charset=utf-8;base64,${btoa(unescape(encodeURIComponent(JSON.stringify(json, null, ' '))))}`; (downloadHelper).download = `${shared.dataset!.name}.json`; downloadHelper.click(); }); diff --git a/src/index.ts b/src/index.ts index e403bbb..656f6be 100644 --- a/src/index.ts +++ b/src/index.ts @@ -45,6 +45,10 @@ function build(builder: Promise, session?: ISession | null) { } else { shared.session = null; next = `#${shared.dataset!.id}`; + + if (shared.dataset!.dump) { + shared.lineup!.data.restore(shared.dataset!.dump); + } } if (location.hash !== next) { location.assign(next); @@ -63,6 +67,7 @@ function loadSession(session?: ISession) { } shared.session = session; shared.lineup.data.restore(session.dump); + location.replace(`#${shared.dataset!.id}@${session.uid}`); } function disableBubbling(node: HTMLElement, ...events: string[]) { diff --git a/src/styles/_icons.scss b/src/styles/_icons.scss index 5059184..2ce4af3 100644 --- a/src/styles/_icons.scss +++ b/src/styles/_icons.scss @@ -4,7 +4,8 @@ .fa-codepen::before, .fa-file-code-o::before, -.fa-file-excel-o::before { +.fa-file-excel-o::before, +.fa-file-archive-o::before { @include fa-icon(); } @@ -19,3 +20,7 @@ .fa-file-excel-o::before { content: $fa-var-file-excel-o; } + +.fa-file-archive-o::before { + content: $fa-var-file-archive-o; +} From 98783d572cb3b7c677f4d3e976f54e728d8ebd42 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 16 Nov 2018 17:06:33 +0100 Subject: [PATCH 045/116] fix parsing of dumped dates --- src/data/db.ts | 3 +++ src/data/index.ts | 43 +++++++++++++++++++++++++++++++++++++++-- src/data/loader_dump.ts | 15 +++++++++++--- src/data/loaders.ts | 23 ---------------------- src/index.ts | 1 + 5 files changed, 57 insertions(+), 28 deletions(-) diff --git a/src/data/db.ts b/src/data/db.ts index 896bff1..f3caff6 100644 --- a/src/data/db.ts +++ b/src/data/db.ts @@ -59,6 +59,9 @@ export function editDataset(dataset: IDataset): Promise { } function byCreationDate(arr: T[]) { + for (const entry of arr) { + entry.creationDate = entry.creationDate instanceof Date ? entry.creationDate : new Date(entry.creationDate); + } return arr.sort((a, b) => b.creationDate.getTime() - a.creationDate.getTime()); } diff --git a/src/data/index.ts b/src/data/index.ts index cea7eb5..a4fa6a7 100644 --- a/src/data/index.ts +++ b/src/data/index.ts @@ -5,9 +5,11 @@ import happiness from './world-happiness-report'; import soccer from './soccer'; import {ieeeheat, ieeebars} from './ieee-programming'; import {listDatasets, listSessions} from './db'; -import {complete} from './loaders'; +import JSON_LOADER from './loader_json'; +import CSV_LOADER from './loader_csv'; +import {IDatasetMeta, PRELOADED_TYPE} from './IDataset'; + export {IDataset} from './IDataset'; -export {fromFile} from './loaders'; export * from './ui'; const preloaded: IDataset[] = [ @@ -21,6 +23,43 @@ const preloaded: IDataset[] = [ ]; +const loaders = [JSON_LOADER, CSV_LOADER]; + +function complete(db: IDataset | IDatasetMeta) { + if (typeof (db).build === 'function') { + return db; + } + + for (const loader of loaders) { + if (db.type === loader.type) { + return loader.complete(db); + } + } + + if (db.type.startsWith(PRELOADED_TYPE)) { + const id = db.type.slice(PRELOADED_TYPE.length + 1); // for - + const preloadedDataset = preloaded.find((d) => d.id === id); + if (preloadedDataset) { + return Object.assign(db, { + buildScript: preloadedDataset.buildScript, + build: preloadedDataset.build, + rawData: preloadedDataset.rawData + }); + } + } + return db; +} + +export function fromFile(file: File): Promise { + for (const loader of loaders) { + if (loader.supports(file)) { + return loader.loadFile(file).then(complete); + } + } + return Promise.reject(`unknown file type: ${file.name}`); +} + + export function allDatasets() { return Promise.all([listDatasets(), listSessions()]).then(([ds, sessions]) => { const full = ds.map(complete).filter((d) => d != null); diff --git a/src/data/loader_dump.ts b/src/data/loader_dump.ts index 0c62d67..97aacbd 100644 --- a/src/data/loader_dump.ts +++ b/src/data/loader_dump.ts @@ -1,4 +1,4 @@ -import {IDataset, IDatasetMeta} from './IDataset'; +import {IDataset, IDatasetMeta, PRELOADED_TYPE} from './IDataset'; import {cleanName} from './ùtils'; import '!file-loader?name=schema.1.0.0.json!./schema.json'; import {LineUp, Taggle} from 'lineupjs'; @@ -12,15 +12,23 @@ export function isDumpFile(data: any) { export function fromDumpFile(parsed: any): IDatasetMeta { delete parsed.$schema; parsed.id = cleanName(parsed.name); + parsed.creationDate = new Date(parsed.creationDate); + if (parsed.sessions) { + parsed.sessions.forEach((d: any) => d.creationDate = new Date(d.creationDate)); + } return parsed; } export function exportDump(dataset: IDataset, lineup: LineUp|Taggle) { const dump = Object.assign({ - $schema: SCHEMA_REF, - dump: lineup.dump() + $schema: SCHEMA_REF }, dataset); + if (dataset.type === PRELOADED_TYPE) { + dump.type = `${PRELOADED_TYPE}-${dataset.id}`; + delete dump.rawData; // since part of the preloaded state anyhow + } + delete dump.build; delete dump.buildScript; delete dump.id; @@ -30,5 +38,6 @@ export function exportDump(dataset: IDataset, lineup: LineUp|Taggle) { delete r.dataset; return r; }); + dump.dump = lineup.dump(); return dump; } diff --git a/src/data/loaders.ts b/src/data/loaders.ts index 69fbf55..e69de29 100644 --- a/src/data/loaders.ts +++ b/src/data/loaders.ts @@ -1,23 +0,0 @@ -import JSON_LOADER from './loader_json'; -import CSV_LOADER from './loader_csv'; -import {IDataset, IDatasetMeta} from './IDataset'; - -export const loaders = [JSON_LOADER, CSV_LOADER]; - -export function complete(db: IDataset | IDatasetMeta) { - for (const loader of loaders) { - if (db.type === loader.type && typeof (db).build !== 'function') { - return loader.complete(db); - } - } - return db; -} - -export function fromFile(file: File): Promise { - for (const loader of loaders) { - if (loader.supports(file)) { - return loader.loadFile(file).then(complete); - } - } - return Promise.reject(`unknown file type: ${file.name}`); -} diff --git a/src/index.ts b/src/index.ts index 656f6be..b0d77ee 100644 --- a/src/index.ts +++ b/src/index.ts @@ -111,6 +111,7 @@ function addToCarousel(d: IDataset) { } function showFile(file: File) { + reset(); const f = fromFile(file).then((r) => { shared.datasets.unshift(r); addToCarousel(r); From b9fd621f13b67850034e7d4b15652c741395aa79 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Fri, 16 Nov 2018 17:20:57 +0100 Subject: [PATCH 046/116] style playing --- src/index.html | 3 ++- src/index.ts | 2 ++ src/styles/_app.scss | 27 ++++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/index.html b/src/index.html index fea000d..a94fe39 100644 --- a/src/index.html +++ b/src/index.html @@ -80,7 +80,8 @@
-
+
+
From bc6a9cf91a69a3e57de785274b31cc5ae59dfd66 Mon Sep 17 00:00:00 2001 From: Samuel Gratzl Date: Sun, 23 Dec 2018 19:46:17 +0100 Subject: [PATCH 091/116] style tuning download menu --- src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index fdb22bf..a6ccce8 100644 --- a/src/index.html +++ b/src/index.html @@ -59,7 +59,7 @@ file_download -