From b024c45266342a816c86f66db8cf805b7b8667a9 Mon Sep 17 00:00:00 2001 From: Eike Cochu <eike@cochu.com> Date: Mon, 1 Feb 2016 00:06:33 +0100 Subject: [PATCH] updating to using angular removed generic de-/serializer removed jsonwrap annotations removed patch method interface removed apimediatype, replaced by application-json removed apiversion replaced ui project by angular stub project added gulp and deps to build ui project --- ma-impl.sublime-workspace | 172 ++++++++++++------ .../main/java/de/vipra/rest/APIMediaType.java | 9 - .../main/java/de/vipra/rest/Application.java | 2 - .../src/main/java/de/vipra/rest/PATCH.java | 17 -- .../java/de/vipra/rest/model/APIVersion.java | 7 - .../java/de/vipra/rest/model/Wrapper.java | 5 - .../vipra/rest/provider/APIRequestFilter.java | 42 ----- .../rest/provider/ObjectMapperProvider.java | 17 -- .../vipra/rest/resource/ArticleResource.java | 17 +- .../vipra/rest/resource/ImportResource.java | 12 +- .../de/vipra/rest/resource/TopicResource.java | 12 +- .../de/vipra/rest/resource/WordResource.java | 8 +- .../rest/serializer/GenericDeserializer.java | 110 ----------- .../rest/serializer/GenericSerializer.java | 98 ---------- vipra-ui/.bowerrc | 4 - vipra-ui/.classpath | 11 -- vipra-ui/.editorconfig | 34 ---- vipra-ui/.ember-cli | 9 - vipra-ui/.gitignore | 19 +- vipra-ui/.jshintrc | 32 ---- vipra-ui/.project | 36 ---- vipra-ui/.settings/.jsdtscope | 12 -- vipra-ui/.settings/org.eclipse.jdt.core.prefs | 7 - .../org.eclipse.wst.common.component | 8 - ....eclipse.wst.common.project.facet.core.xml | 9 - ...rg.eclipse.wst.jsdt.ui.superType.container | 1 - .../org.eclipse.wst.jsdt.ui.superType.name | 1 - .../org.eclipse.wst.validation.prefs | 12 -- vipra-ui/.travis.yml | 23 --- vipra-ui/.watchmanconfig | 3 - vipra-ui/README.md | 27 --- vipra-ui/app/adapters/application.js | 17 -- vipra-ui/app/app.js | 18 -- vipra-ui/app/components/.gitkeep | 0 vipra-ui/app/components/debounced-input.js | 19 -- .../app/components/dynamic-high-charts.js | 14 -- vipra-ui/app/components/items-list.js | 17 -- vipra-ui/app/components/pagination-bar.js | 65 ------- vipra-ui/app/components/scroll-top.js | 17 -- vipra-ui/app/components/text-marker.js | 18 -- vipra-ui/app/components/topic-link.js | 12 -- vipra-ui/app/controllers/.gitkeep | 0 vipra-ui/app/controllers/articles/index.js | 8 - vipra-ui/app/controllers/index.js | 16 -- vipra-ui/app/controllers/topics/index.js | 6 - vipra-ui/app/controllers/words/index.js | 6 - vipra-ui/app/helpers/.gitkeep | 0 vipra-ui/app/helpers/is-empty.js | 12 -- vipra-ui/app/helpers/pluralize.js | 10 - vipra-ui/app/helpers/topic-share.js | 7 - vipra-ui/app/index.html | 44 ----- vipra-ui/app/models/.gitkeep | 0 vipra-ui/app/models/article.js | 17 -- vipra-ui/app/models/import.js | 12 -- vipra-ui/app/models/search.js | 17 -- vipra-ui/app/models/topic.js | 14 -- vipra-ui/app/models/word.js | 7 - vipra-ui/app/router.js | 26 --- vipra-ui/app/routes/.gitkeep | 0 vipra-ui/app/routes/articles/index.js | 87 --------- vipra-ui/app/routes/articles/show.js | 29 --- vipra-ui/app/routes/index.js | 13 -- vipra-ui/app/routes/not-found.js | 4 - vipra-ui/app/routes/topics/index.js | 37 ---- vipra-ui/app/routes/topics/show.js | 9 - vipra-ui/app/routes/topics/show/edit.js | 10 - vipra-ui/app/routes/words/index.js | 38 ---- vipra-ui/app/routes/words/show.js | 9 - vipra-ui/app/styles/app.scss | 62 ------- vipra-ui/app/styles/sticky-footer.scss | 19 -- vipra-ui/app/templates/application.hbs | 35 ---- vipra-ui/app/templates/articles.hbs | 1 - vipra-ui/app/templates/articles/index.hbs | 10 - vipra-ui/app/templates/articles/show.hbs | 39 ---- vipra-ui/app/templates/components/.gitkeep | 0 .../templates/components/debounced-input.hbs | 1 - .../components/dynamic-high-charts.hbs | 1 - .../app/templates/components/items-list.hbs | 5 - .../templates/components/pagination-bar.hbs | 45 ----- .../app/templates/components/scroll-top.hbs | 5 - .../app/templates/components/text-marker.hbs | 1 - .../app/templates/components/topic-link.hbs | 1 - vipra-ui/app/templates/index.hbs | 55 ------ vipra-ui/app/templates/loading.hbs | 4 - vipra-ui/app/templates/not-found.hbs | 3 - vipra-ui/app/templates/topics.hbs | 1 - vipra-ui/app/templates/topics/index.hbs | 8 - vipra-ui/app/templates/topics/show/edit.hbs | 9 - vipra-ui/app/templates/topics/show/index.hbs | 18 -- vipra-ui/app/templates/words.hbs | 1 - vipra-ui/app/templates/words/index.hbs | 12 -- vipra-ui/app/templates/words/show.hbs | 1 - vipra-ui/bower.json | 34 ++-- vipra-ui/config/environment.js | 47 ----- vipra-ui/css/main.less | 3 + vipra-ui/ember-cli-build.js | 26 --- vipra-ui/gulpfile.js | 27 +++ vipra-ui/html/index.html | 1 + vipra-ui/index.html | 26 +++ vipra-ui/js/app.js | 18 ++ vipra-ui/js/controllers.js | 5 + vipra-ui/js/directives.js | 1 + vipra-ui/js/services.js | 1 + vipra-ui/package.json | 44 +---- vipra-ui/public/android-chrome-144x144.png | Bin 7703 -> 0 bytes vipra-ui/public/android-chrome-192x192.png | Bin 10711 -> 0 bytes vipra-ui/public/android-chrome-36x36.png | Bin 1410 -> 0 bytes vipra-ui/public/android-chrome-48x48.png | Bin 1942 -> 0 bytes vipra-ui/public/android-chrome-72x72.png | Bin 2999 -> 0 bytes vipra-ui/public/android-chrome-96x96.png | Bin 4704 -> 0 bytes vipra-ui/public/apple-touch-icon-114x114.png | Bin 1818 -> 0 bytes vipra-ui/public/apple-touch-icon-120x120.png | Bin 1895 -> 0 bytes vipra-ui/public/apple-touch-icon-144x144.png | Bin 2304 -> 0 bytes vipra-ui/public/apple-touch-icon-152x152.png | Bin 2362 -> 0 bytes vipra-ui/public/apple-touch-icon-180x180.png | Bin 2826 -> 0 bytes vipra-ui/public/apple-touch-icon-57x57.png | Bin 989 -> 0 bytes vipra-ui/public/apple-touch-icon-60x60.png | Bin 1025 -> 0 bytes vipra-ui/public/apple-touch-icon-72x72.png | Bin 1189 -> 0 bytes vipra-ui/public/apple-touch-icon-76x76.png | Bin 1227 -> 0 bytes .../public/apple-touch-icon-precomposed.png | Bin 4249 -> 0 bytes vipra-ui/public/apple-touch-icon.png | Bin 2826 -> 0 bytes vipra-ui/public/assets/images/squares.gif | Bin 27920 -> 0 bytes vipra-ui/public/browserconfig.xml | 12 -- vipra-ui/public/crossdomain.xml | 15 -- vipra-ui/public/favicon-16x16.png | Bin 673 -> 0 bytes vipra-ui/public/favicon-194x194.png | Bin 7280 -> 0 bytes vipra-ui/public/favicon-32x32.png | Bin 1124 -> 0 bytes vipra-ui/public/favicon-96x96.png | Bin 3394 -> 0 bytes vipra-ui/public/favicon.ico | Bin 15086 -> 0 bytes vipra-ui/public/manifest.json | 41 ----- vipra-ui/public/mstile-144x144.png | Bin 4665 -> 0 bytes vipra-ui/public/mstile-150x150.png | Bin 4592 -> 0 bytes vipra-ui/public/mstile-310x150.png | Bin 4923 -> 0 bytes vipra-ui/public/mstile-310x310.png | Bin 10210 -> 0 bytes vipra-ui/public/mstile-70x70.png | Bin 3220 -> 0 bytes vipra-ui/public/robots.txt | 3 - vipra-ui/public/safari-pinned-tab.svg | 36 ---- vipra-ui/testem.json | 12 -- vipra-ui/tests/.jshintrc | 52 ------ vipra-ui/tests/helpers/destroy-app.js | 5 - .../tests/helpers/module-for-acceptance.js | 23 --- vipra-ui/tests/helpers/resolver.js | 11 -- vipra-ui/tests/helpers/start-app.js | 18 -- vipra-ui/tests/index.html | 34 ---- vipra-ui/tests/integration/.gitkeep | 0 .../components/debounced-input-test.js | 25 --- .../components/dynamic-high-charts-test.js | 25 --- .../integration/components/item-list-test.js | 25 --- .../components/pagination-bar-test.js | 25 --- .../integration/components/scroll-top-test.js | 25 --- .../components/text-marker-test.js | 25 --- .../integration/components/topic-link-test.js | 25 --- vipra-ui/tests/test-helper.js | 6 - vipra-ui/tests/unit/.gitkeep | 0 .../tests/unit/adapters/application-test.js | 12 -- .../tests/unit/controllers/articles-test.js | 12 -- vipra-ui/tests/unit/controllers/words-test.js | 12 -- vipra-ui/tests/unit/helpers/is-empty-test.js | 10 - vipra-ui/tests/unit/helpers/pluralize-test.js | 10 - .../tests/unit/helpers/topic-share-test.js | 10 - vipra-ui/tests/unit/models/article-test.js | 12 -- vipra-ui/tests/unit/models/import-test.js | 12 -- vipra-ui/tests/unit/models/topic-test.js | 12 -- vipra-ui/tests/unit/routes/article-test.js | 11 -- vipra-ui/tests/unit/routes/index-test.js | 11 -- vipra-ui/tests/unit/routes/not-found-test.js | 11 -- vipra-ui/tests/unit/routes/topics-test.js | 11 -- vipra-ui/tests/unit/routes/words-test.js | 11 -- vipra-ui/vendor/.gitkeep | 0 vipra-ui/webapp/WEB-INF/web.xml | 8 - .../main/java/de/vipra/util/an/JsonType.java | 14 -- .../main/java/de/vipra/util/an/JsonWrap.java | 14 -- .../java/de/vipra/util/model/Article.java | 3 - .../java/de/vipra/util/model/ArticleFull.java | 11 -- .../main/java/de/vipra/util/model/Import.java | 11 -- .../main/java/de/vipra/util/model/Topic.java | 2 - .../java/de/vipra/util/model/TopicFull.java | 8 - .../main/java/de/vipra/util/model/Word.java | 4 - 178 files changed, 255 insertions(+), 2401 deletions(-) delete mode 100644 vipra-rest/src/main/java/de/vipra/rest/APIMediaType.java delete mode 100644 vipra-rest/src/main/java/de/vipra/rest/PATCH.java delete mode 100644 vipra-rest/src/main/java/de/vipra/rest/model/APIVersion.java delete mode 100644 vipra-rest/src/main/java/de/vipra/rest/provider/APIRequestFilter.java delete mode 100644 vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java delete mode 100644 vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java delete mode 100644 vipra-ui/.bowerrc delete mode 100644 vipra-ui/.classpath delete mode 100644 vipra-ui/.editorconfig delete mode 100644 vipra-ui/.ember-cli delete mode 100644 vipra-ui/.jshintrc delete mode 100644 vipra-ui/.project delete mode 100644 vipra-ui/.settings/.jsdtscope delete mode 100644 vipra-ui/.settings/org.eclipse.jdt.core.prefs delete mode 100644 vipra-ui/.settings/org.eclipse.wst.common.component delete mode 100644 vipra-ui/.settings/org.eclipse.wst.common.project.facet.core.xml delete mode 100644 vipra-ui/.settings/org.eclipse.wst.jsdt.ui.superType.container delete mode 100644 vipra-ui/.settings/org.eclipse.wst.jsdt.ui.superType.name delete mode 100644 vipra-ui/.settings/org.eclipse.wst.validation.prefs delete mode 100644 vipra-ui/.travis.yml delete mode 100644 vipra-ui/.watchmanconfig delete mode 100644 vipra-ui/README.md delete mode 100644 vipra-ui/app/adapters/application.js delete mode 100644 vipra-ui/app/app.js delete mode 100644 vipra-ui/app/components/.gitkeep delete mode 100644 vipra-ui/app/components/debounced-input.js delete mode 100644 vipra-ui/app/components/dynamic-high-charts.js delete mode 100644 vipra-ui/app/components/items-list.js delete mode 100644 vipra-ui/app/components/pagination-bar.js delete mode 100644 vipra-ui/app/components/scroll-top.js delete mode 100644 vipra-ui/app/components/text-marker.js delete mode 100644 vipra-ui/app/components/topic-link.js delete mode 100644 vipra-ui/app/controllers/.gitkeep delete mode 100644 vipra-ui/app/controllers/articles/index.js delete mode 100644 vipra-ui/app/controllers/index.js delete mode 100644 vipra-ui/app/controllers/topics/index.js delete mode 100644 vipra-ui/app/controllers/words/index.js delete mode 100644 vipra-ui/app/helpers/.gitkeep delete mode 100644 vipra-ui/app/helpers/is-empty.js delete mode 100644 vipra-ui/app/helpers/pluralize.js delete mode 100644 vipra-ui/app/helpers/topic-share.js delete mode 100644 vipra-ui/app/index.html delete mode 100644 vipra-ui/app/models/.gitkeep delete mode 100644 vipra-ui/app/models/article.js delete mode 100644 vipra-ui/app/models/import.js delete mode 100644 vipra-ui/app/models/search.js delete mode 100644 vipra-ui/app/models/topic.js delete mode 100644 vipra-ui/app/models/word.js delete mode 100644 vipra-ui/app/router.js delete mode 100644 vipra-ui/app/routes/.gitkeep delete mode 100644 vipra-ui/app/routes/articles/index.js delete mode 100644 vipra-ui/app/routes/articles/show.js delete mode 100644 vipra-ui/app/routes/index.js delete mode 100644 vipra-ui/app/routes/not-found.js delete mode 100644 vipra-ui/app/routes/topics/index.js delete mode 100644 vipra-ui/app/routes/topics/show.js delete mode 100644 vipra-ui/app/routes/topics/show/edit.js delete mode 100644 vipra-ui/app/routes/words/index.js delete mode 100644 vipra-ui/app/routes/words/show.js delete mode 100644 vipra-ui/app/styles/app.scss delete mode 100644 vipra-ui/app/styles/sticky-footer.scss delete mode 100644 vipra-ui/app/templates/application.hbs delete mode 100644 vipra-ui/app/templates/articles.hbs delete mode 100644 vipra-ui/app/templates/articles/index.hbs delete mode 100644 vipra-ui/app/templates/articles/show.hbs delete mode 100644 vipra-ui/app/templates/components/.gitkeep delete mode 100644 vipra-ui/app/templates/components/debounced-input.hbs delete mode 100644 vipra-ui/app/templates/components/dynamic-high-charts.hbs delete mode 100644 vipra-ui/app/templates/components/items-list.hbs delete mode 100644 vipra-ui/app/templates/components/pagination-bar.hbs delete mode 100644 vipra-ui/app/templates/components/scroll-top.hbs delete mode 100644 vipra-ui/app/templates/components/text-marker.hbs delete mode 100644 vipra-ui/app/templates/components/topic-link.hbs delete mode 100644 vipra-ui/app/templates/index.hbs delete mode 100644 vipra-ui/app/templates/loading.hbs delete mode 100644 vipra-ui/app/templates/not-found.hbs delete mode 100644 vipra-ui/app/templates/topics.hbs delete mode 100644 vipra-ui/app/templates/topics/index.hbs delete mode 100644 vipra-ui/app/templates/topics/show/edit.hbs delete mode 100644 vipra-ui/app/templates/topics/show/index.hbs delete mode 100644 vipra-ui/app/templates/words.hbs delete mode 100644 vipra-ui/app/templates/words/index.hbs delete mode 100644 vipra-ui/app/templates/words/show.hbs delete mode 100644 vipra-ui/config/environment.js create mode 100644 vipra-ui/css/main.less delete mode 100644 vipra-ui/ember-cli-build.js create mode 100644 vipra-ui/gulpfile.js create mode 100644 vipra-ui/html/index.html create mode 100644 vipra-ui/index.html create mode 100644 vipra-ui/js/app.js create mode 100644 vipra-ui/js/controllers.js create mode 100644 vipra-ui/js/directives.js create mode 100644 vipra-ui/js/services.js delete mode 100644 vipra-ui/public/android-chrome-144x144.png delete mode 100644 vipra-ui/public/android-chrome-192x192.png delete mode 100644 vipra-ui/public/android-chrome-36x36.png delete mode 100644 vipra-ui/public/android-chrome-48x48.png delete mode 100644 vipra-ui/public/android-chrome-72x72.png delete mode 100644 vipra-ui/public/android-chrome-96x96.png delete mode 100644 vipra-ui/public/apple-touch-icon-114x114.png delete mode 100644 vipra-ui/public/apple-touch-icon-120x120.png delete mode 100644 vipra-ui/public/apple-touch-icon-144x144.png delete mode 100644 vipra-ui/public/apple-touch-icon-152x152.png delete mode 100644 vipra-ui/public/apple-touch-icon-180x180.png delete mode 100644 vipra-ui/public/apple-touch-icon-57x57.png delete mode 100644 vipra-ui/public/apple-touch-icon-60x60.png delete mode 100644 vipra-ui/public/apple-touch-icon-72x72.png delete mode 100644 vipra-ui/public/apple-touch-icon-76x76.png delete mode 100644 vipra-ui/public/apple-touch-icon-precomposed.png delete mode 100644 vipra-ui/public/apple-touch-icon.png delete mode 100644 vipra-ui/public/assets/images/squares.gif delete mode 100644 vipra-ui/public/browserconfig.xml delete mode 100644 vipra-ui/public/crossdomain.xml delete mode 100644 vipra-ui/public/favicon-16x16.png delete mode 100644 vipra-ui/public/favicon-194x194.png delete mode 100644 vipra-ui/public/favicon-32x32.png delete mode 100644 vipra-ui/public/favicon-96x96.png delete mode 100644 vipra-ui/public/favicon.ico delete mode 100644 vipra-ui/public/manifest.json delete mode 100644 vipra-ui/public/mstile-144x144.png delete mode 100644 vipra-ui/public/mstile-150x150.png delete mode 100644 vipra-ui/public/mstile-310x150.png delete mode 100644 vipra-ui/public/mstile-310x310.png delete mode 100644 vipra-ui/public/mstile-70x70.png delete mode 100644 vipra-ui/public/robots.txt delete mode 100644 vipra-ui/public/safari-pinned-tab.svg delete mode 100644 vipra-ui/testem.json delete mode 100644 vipra-ui/tests/.jshintrc delete mode 100644 vipra-ui/tests/helpers/destroy-app.js delete mode 100644 vipra-ui/tests/helpers/module-for-acceptance.js delete mode 100644 vipra-ui/tests/helpers/resolver.js delete mode 100644 vipra-ui/tests/helpers/start-app.js delete mode 100644 vipra-ui/tests/index.html delete mode 100644 vipra-ui/tests/integration/.gitkeep delete mode 100644 vipra-ui/tests/integration/components/debounced-input-test.js delete mode 100644 vipra-ui/tests/integration/components/dynamic-high-charts-test.js delete mode 100644 vipra-ui/tests/integration/components/item-list-test.js delete mode 100644 vipra-ui/tests/integration/components/pagination-bar-test.js delete mode 100644 vipra-ui/tests/integration/components/scroll-top-test.js delete mode 100644 vipra-ui/tests/integration/components/text-marker-test.js delete mode 100644 vipra-ui/tests/integration/components/topic-link-test.js delete mode 100644 vipra-ui/tests/test-helper.js delete mode 100644 vipra-ui/tests/unit/.gitkeep delete mode 100644 vipra-ui/tests/unit/adapters/application-test.js delete mode 100644 vipra-ui/tests/unit/controllers/articles-test.js delete mode 100644 vipra-ui/tests/unit/controllers/words-test.js delete mode 100644 vipra-ui/tests/unit/helpers/is-empty-test.js delete mode 100644 vipra-ui/tests/unit/helpers/pluralize-test.js delete mode 100644 vipra-ui/tests/unit/helpers/topic-share-test.js delete mode 100644 vipra-ui/tests/unit/models/article-test.js delete mode 100644 vipra-ui/tests/unit/models/import-test.js delete mode 100644 vipra-ui/tests/unit/models/topic-test.js delete mode 100644 vipra-ui/tests/unit/routes/article-test.js delete mode 100644 vipra-ui/tests/unit/routes/index-test.js delete mode 100644 vipra-ui/tests/unit/routes/not-found-test.js delete mode 100644 vipra-ui/tests/unit/routes/topics-test.js delete mode 100644 vipra-ui/tests/unit/routes/words-test.js delete mode 100644 vipra-ui/vendor/.gitkeep delete mode 100644 vipra-ui/webapp/WEB-INF/web.xml delete mode 100644 vipra-util/src/main/java/de/vipra/util/an/JsonType.java delete mode 100644 vipra-util/src/main/java/de/vipra/util/an/JsonWrap.java diff --git a/ma-impl.sublime-workspace b/ma-impl.sublime-workspace index e7e2fa38..7c5b9bb1 100644 --- a/ma-impl.sublime-workspace +++ b/ma-impl.sublime-workspace @@ -280,26 +280,42 @@ "buffers": [ { - "file": "vipra-ui/app/templates/index.hbs", + "file": "vipra-ui/index.html", "settings": { - "buffer_size": 1530, + "buffer_size": 1013, "line_ending": "Unix" } }, { - "file": "vipra-ui/app/styles/app.scss", + "file": "vipra-ui/js/app.js", "settings": { - "buffer_size": 914, + "buffer_size": 326, "line_ending": "Unix" } }, { - "file": "vipra-ui/app/adapters/application.js", + "file": "vipra-ui/js/controllers.js", "settings": { - "buffer_size": 506, + "buffer_size": 102, + "line_ending": "Unix" + } + }, + { + "file": "vipra-ui/js/directives.js", + "settings": + { + "buffer_size": 49, + "line_ending": "Unix" + } + }, + { + "file": "vipra-ui/js/services.js", + "settings": + { + "buffer_size": 47, "line_ending": "Unix" } } @@ -483,25 +499,25 @@ [ "/home/eike/repos/master/ma-impl", "/home/eike/repos/master/ma-impl/vipra-ui", - "/home/eike/repos/master/ma-impl/vipra-ui/app", - "/home/eike/repos/master/ma-impl/vipra-ui/app/adapters", - "/home/eike/repos/master/ma-impl/vipra-ui/app/components", - "/home/eike/repos/master/ma-impl/vipra-ui/app/controllers/articles", - "/home/eike/repos/master/ma-impl/vipra-ui/app/controllers/topics", - "/home/eike/repos/master/ma-impl/vipra-ui/app/controllers/words", - "/home/eike/repos/master/ma-impl/vipra-ui/app/models", - "/home/eike/repos/master/ma-impl/vipra-ui/app/routes", - "/home/eike/repos/master/ma-impl/vipra-ui/app/routes/articles", - "/home/eike/repos/master/ma-impl/vipra-ui/app/routes/topics", - "/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words", - "/home/eike/repos/master/ma-impl/vipra-ui/app/styles", - "/home/eike/repos/master/ma-impl/vipra-ui/app/templates", - "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles", - "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/components", - "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words" + "/home/eike/repos/master/ma-impl/vipra-ui/bower_components/angular", + "/home/eike/repos/master/ma-impl/vipra-ui/bower_components/angular-resource", + "/home/eike/repos/master/ma-impl/vipra-ui/bower_components/angular-ui-router", + "/home/eike/repos/master/ma-impl/vipra-ui/bower_components/angular-ui-router/release", + "/home/eike/repos/master/ma-impl/vipra-ui/bower_components/bootstrap/dist/js", + "/home/eike/repos/master/ma-impl/vipra-ui/bower_components/jquery/dist", + "/home/eike/repos/master/ma-impl/vipra-ui/html", + "/home/eike/repos/master/ma-impl/vipra-ui/js" ], "file_history": [ + "/home/eike/repos/master/ma-impl/vipra-ui/html/index.html", + "/home/eike/repos/master/ma-impl/vipra-ui/css/main.less", + "/home/eike/repos/master/ma-impl/vipra-ui/gulpfile.js", + "/home/eike/repos/master/ma-impl/vipra-ui/index.html", + "/home/eike/.config/sublime-text-3/Packages/User/Preferences.sublime-settings", + "/home/eike/repos/master/ma-impl/vipra-ui/app/adapters/application.js", + "/home/eike/repos/master/ma-impl/vipra-ui/app/styles/app.scss", + "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/index.hbs", "/home/eike/repos/master/ma-impl/vipra-ui/app/models/search.js", "/home/eike/repos/master/ma-impl/vipra-ui/app/controllers/index.js", "/home/eike/repos/master/ma-impl/vipra-ui/app/routes/index.js", @@ -512,7 +528,6 @@ "/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words/index.js", "/home/eike/repos/master/ma-impl/vipra-ui/app/controllers/words/index.js", "/home/eike/repos/master/ma-impl/vipra-ui/app/routes/articles/index.js", - "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/index.hbs", "/home/eike/repos/master/ma-impl/vipra-ui/app/models/word.js", "/home/eike/Downloads/files.txt", "/home/eike/repos/master/ma-impl/vipra-ui/app/components/pagination-bar.js", @@ -525,8 +540,6 @@ "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words/index.hbs", "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/components/pagination-bar.hbs", "/home/eike/repos/master/ma-impl/vipra-ui/app/controllers/words.js", - "/home/eike/repos/master/ma-impl/vipra-ui/app/adapters/application.js", - "/home/eike/repos/master/ma-impl/vipra-ui/app/styles/app.scss", "/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/is-empty.js", "/home/eike/repos/master/ma-impl/vipra-ui/app/models/import.js", "/home/eike/repos/master/ma-impl/vipra-ui/app/router.js", @@ -543,7 +556,6 @@ "/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/uppercase.js", "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words_loading.hbs", "/home/eike/repos/master/ma-impl/vipra-ui/bower.json", - "/home/eike/.config/sublime-text-3/Packages/User/Preferences.sublime-settings", "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics.hbs", "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words.hbs", "/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles.hbs", @@ -625,11 +637,7 @@ "/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/components/debounced-input.js", "/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/components/dynamic-high-charts.js", "/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/components/text-marker.hbs", - "/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/components/article-list.hbs", - "/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/articles/list.hbs", - "/home/eike/Repositories/fu/ss15/ma/impl/vm/bootstrap.sh", - "/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/adapters/application.js", - "/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/routes/articles/list.js" + "/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/components/article-list.hbs" ], "find": { @@ -953,29 +961,29 @@ "groups": [ { - "selected": 1, + "selected": 2, "sheets": [ { "buffer": 0, - "file": "vipra-ui/app/templates/index.hbs", + "file": "vipra-ui/index.html", "semi_transient": false, "settings": { - "buffer_size": 1530, + "buffer_size": 1013, "regions": { }, "selection": [ [ - 1352, - 1352 + 239, + 239 ] ], "settings": { - "syntax": "Packages/Handlebars/grammars/Handlebars.tmLanguage", + "syntax": "Packages/HTML/HTML.tmLanguage", "tab_size": 2, "translate_tabs_to_spaces": true }, @@ -983,67 +991,123 @@ "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 1, + "stack_index": 2, "type": "text" }, { "buffer": 1, - "file": "vipra-ui/app/styles/app.scss", + "file": "vipra-ui/js/app.js", "semi_transient": false, "settings": { - "buffer_size": 914, + "buffer_size": 326, "regions": { }, "selection": [ [ - 681, - 681 + 321, + 321 ] ], "settings": { - "syntax": "Packages/SCSS/SCSS.tmLanguage", - "tab_size": 2, - "translate_tabs_to_spaces": true + "open_with_edit": true, + "syntax": "Packages/JavaScriptNext - ES6 Syntax/JavaScriptNext.tmLanguage" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 0, + "stack_index": 1, "type": "text" }, { "buffer": 2, - "file": "vipra-ui/app/adapters/application.js", + "file": "vipra-ui/js/controllers.js", "semi_transient": false, "settings": { - "buffer_size": 506, + "buffer_size": 102, "regions": { }, "selection": [ [ - 119, - 119 + 102, + 102 ] ], "settings": { - "syntax": "Packages/JavaScriptNext - ES6 Syntax/JavaScriptNext.tmLanguage", - "tab_size": 2, - "translate_tabs_to_spaces": true + "open_with_edit": true, + "syntax": "Packages/JavaScriptNext - ES6 Syntax/JavaScriptNext.tmLanguage" }, "translation.x": 0.0, "translation.y": 0.0, "zoom_level": 1.0 }, - "stack_index": 2, + "stack_index": 0, + "type": "text" + }, + { + "buffer": 3, + "file": "vipra-ui/js/directives.js", + "semi_transient": false, + "settings": + { + "buffer_size": 49, + "regions": + { + }, + "selection": + [ + [ + 42, + 42 + ] + ], + "settings": + { + "open_with_edit": true, + "syntax": "Packages/JavaScriptNext - ES6 Syntax/JavaScriptNext.tmLanguage" + }, + "translation.x": 0.0, + "translation.y": 0.0, + "zoom_level": 1.0 + }, + "stack_index": 3, + "type": "text" + }, + { + "buffer": 4, + "file": "vipra-ui/js/services.js", + "semi_transient": false, + "settings": + { + "buffer_size": 47, + "regions": + { + }, + "selection": + [ + [ + 40, + 40 + ] + ], + "settings": + { + "open_with_edit": true, + "syntax": "Packages/JavaScriptNext - ES6 Syntax/JavaScriptNext.tmLanguage" + }, + "translation.x": 0.0, + "translation.y": 0.0, + "zoom_level": 1.0 + }, + "stack_index": 4, "type": "text" } ] diff --git a/vipra-rest/src/main/java/de/vipra/rest/APIMediaType.java b/vipra-rest/src/main/java/de/vipra/rest/APIMediaType.java deleted file mode 100644 index c9e4cdb9..00000000 --- a/vipra-rest/src/main/java/de/vipra/rest/APIMediaType.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.vipra.rest; - -import javax.ws.rs.core.MediaType; - -public class APIMediaType extends MediaType { - - public static final String APPLICATION_JSONAPI = "application/vnd.api+json"; - -} diff --git a/vipra-rest/src/main/java/de/vipra/rest/Application.java b/vipra-rest/src/main/java/de/vipra/rest/Application.java index 3a5aa15b..eb1e7649 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/Application.java +++ b/vipra-rest/src/main/java/de/vipra/rest/Application.java @@ -5,7 +5,6 @@ import org.glassfish.jersey.message.GZipEncoder; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.filter.EncodingFilter; -import de.vipra.rest.provider.APIRequestFilter; import de.vipra.rest.provider.CORSResponseFilter; import de.vipra.rest.provider.ObjectMapperProvider; @@ -16,7 +15,6 @@ public class Application extends ResourceConfig { register(JacksonFeature.class); register(CORSResponseFilter.class); register(ObjectMapperProvider.class); - register(APIRequestFilter.class); EncodingFilter.enableFor(this, GZipEncoder.class); } diff --git a/vipra-rest/src/main/java/de/vipra/rest/PATCH.java b/vipra-rest/src/main/java/de/vipra/rest/PATCH.java deleted file mode 100644 index 3003f70f..00000000 --- a/vipra-rest/src/main/java/de/vipra/rest/PATCH.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.vipra.rest; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import javax.ws.rs.HttpMethod; -import javax.ws.rs.NameBinding; - -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -@HttpMethod("PATCH") -@Documented -@NameBinding -public @interface PATCH {} \ No newline at end of file diff --git a/vipra-rest/src/main/java/de/vipra/rest/model/APIVersion.java b/vipra-rest/src/main/java/de/vipra/rest/model/APIVersion.java deleted file mode 100644 index 6e80449f..00000000 --- a/vipra-rest/src/main/java/de/vipra/rest/model/APIVersion.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.vipra.rest.model; - -public class APIVersion { - - public final String version = "1.0"; - -} diff --git a/vipra-rest/src/main/java/de/vipra/rest/model/Wrapper.java b/vipra-rest/src/main/java/de/vipra/rest/model/Wrapper.java index 0d19036b..c42bdee9 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/model/Wrapper.java +++ b/vipra-rest/src/main/java/de/vipra/rest/model/Wrapper.java @@ -20,7 +20,6 @@ public class Wrapper<T> { private List<APIError> errors; private Map<String, String> links; private NestedMap meta; - private final APIVersion jsonapi = new APIVersion(); public Wrapper() {} @@ -84,10 +83,6 @@ public class Wrapper<T> { meta.put(key, value); } - public APIVersion getJsonapi() { - return jsonapi; - } - public String tag() { return data != null ? Integer.toString(data.hashCode()) : null; } diff --git a/vipra-rest/src/main/java/de/vipra/rest/provider/APIRequestFilter.java b/vipra-rest/src/main/java/de/vipra/rest/provider/APIRequestFilter.java deleted file mode 100644 index 2a64e72d..00000000 --- a/vipra-rest/src/main/java/de/vipra/rest/provider/APIRequestFilter.java +++ /dev/null @@ -1,42 +0,0 @@ -package de.vipra.rest.provider; - -import java.io.IOException; - -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - -import de.vipra.rest.APIMediaType; - -@Provider -public class APIRequestFilter implements ContainerRequestFilter { - - @Override - public void filter(ContainerRequestContext requestContext) throws IOException { - String contentType = requestContext.getHeaderString("Content-Type"); - if (contentType != null) { - if (requestContext.getHeaderString("Content-Type").contains(";")) { - requestContext.abortWith(Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE).build()); - } else { - String[] acceptHeader = requestContext.getHeaderString("Accept").split(","); - boolean abort = false; - for (int i = 0; i < acceptHeader.length; i++) { - String accept = acceptHeader[i].trim(); - if (accept.startsWith(APIMediaType.APPLICATION_JSONAPI)) { - if (accept.contains(";")) { - abort = true; - } else { - abort = false; - break; - } - } - } - if (abort) { - requestContext.abortWith(Response.status(Response.Status.NOT_ACCEPTABLE).build()); - } - } - } - } - -} diff --git a/vipra-rest/src/main/java/de/vipra/rest/provider/ObjectMapperProvider.java b/vipra-rest/src/main/java/de/vipra/rest/provider/ObjectMapperProvider.java index 9fcbcc76..490abad9 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/provider/ObjectMapperProvider.java +++ b/vipra-rest/src/main/java/de/vipra/rest/provider/ObjectMapperProvider.java @@ -14,15 +14,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; -import de.vipra.rest.serializer.GenericDeserializer; -import de.vipra.rest.serializer.GenericSerializer; import de.vipra.rest.serializer.ObjectIdDeserializer; import de.vipra.rest.serializer.ObjectIdSerializer; import de.vipra.util.Constants; -import de.vipra.util.model.ArticleFull; -import de.vipra.util.model.Import; -import de.vipra.util.model.TopicFull; -import de.vipra.util.model.Word; @Provider public class ObjectMapperProvider implements ContextResolver<ObjectMapper> { @@ -42,17 +36,6 @@ public class ObjectMapperProvider implements ContextResolver<ObjectMapper> { public static ObjectMapper createDefaultMapper() { SimpleModule module = new SimpleModule(); - module.addSerializer(ArticleFull.class, new GenericSerializer<ArticleFull>(ArticleFull.class)); - module.addDeserializer(ArticleFull.class, new GenericDeserializer<ArticleFull>(ArticleFull.class)); - - module.addSerializer(TopicFull.class, new GenericSerializer<TopicFull>(TopicFull.class)); - module.addDeserializer(TopicFull.class, new GenericDeserializer<TopicFull>(TopicFull.class)); - - module.addSerializer(Word.class, new GenericSerializer<Word>(Word.class)); - module.addDeserializer(Word.class, new GenericDeserializer<Word>(Word.class)); - - module.addSerializer(Import.class, new GenericSerializer<Import>(Import.class)); - module.addDeserializer(Import.class, new GenericDeserializer<Import>(Import.class)); module.addSerializer(ObjectId.class, new ObjectIdSerializer()); module.addDeserializer(ObjectId.class, new ObjectIdDeserializer()); diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java index f760797f..6b7791a5 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java +++ b/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java @@ -6,7 +6,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.Map; @@ -22,6 +21,7 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -35,7 +35,6 @@ import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; -import de.vipra.rest.APIMediaType; import de.vipra.rest.Messages; import de.vipra.rest.model.APIError; import de.vipra.rest.model.Wrapper; @@ -73,7 +72,7 @@ public class ArticleResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) public Response getArticles(@QueryParam("skip") Integer skip, @QueryParam("limit") Integer limit, @QueryParam("sort") @DefaultValue("date") String sortBy, @QueryParam("fields") String fields, @QueryParam("query") String query) { @@ -142,8 +141,8 @@ public class ArticleResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) - @Consumes(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) @Path("{id}") public Response getArticle(@PathParam("id") String id, @QueryParam("fields") String fields) { Wrapper<ArticleFull> res = new Wrapper<>(); @@ -171,8 +170,8 @@ public class ArticleResource { } @POST - @Consumes(APIMediaType.APPLICATION_JSONAPI) - @Produces(APIMediaType.APPLICATION_JSONAPI) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) public Response createArticle(ArticleFull article) { Wrapper<ArticleFull> res; try { @@ -214,8 +213,8 @@ public class ArticleResource { } @PUT - @Consumes(APIMediaType.APPLICATION_JSONAPI) - @Produces(APIMediaType.APPLICATION_JSONAPI) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) @Path("{id}") public Response replaceArticle(@PathParam("id") String id, Wrapper<ArticleFull> wrapper) { ArticleFull article = wrapper.getData(); diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/ImportResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/ImportResource.java index 0f144c86..f67a0b49 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/resource/ImportResource.java +++ b/vipra-rest/src/main/java/de/vipra/rest/resource/ImportResource.java @@ -12,6 +12,7 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -20,7 +21,6 @@ import org.ehcache.Cache; import org.ehcache.CacheManager; import org.ehcache.config.CacheConfigurationBuilder; -import de.vipra.rest.APIMediaType; import de.vipra.rest.Messages; import de.vipra.rest.model.APIError; import de.vipra.rest.model.Wrapper; @@ -53,7 +53,7 @@ public class ImportResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) public Response getImports(@QueryParam("skip") Integer skip, @QueryParam("limit") Integer limit, @QueryParam("sort") @DefaultValue("date") String sortBy, @QueryParam("fields") String fields) { Wrapper<List<Import>> res = new Wrapper<>(); @@ -80,8 +80,8 @@ public class ImportResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) - @Consumes(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) @Path("latest") public Response getLatestImport(@QueryParam("fields") String fields) { Wrapper<Import> res = new Wrapper<>(); @@ -95,8 +95,8 @@ public class ImportResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) - @Consumes(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) @Path("{id}") public Response getImport(@PathParam("id") String id, @QueryParam("fields") String fields) { Wrapper<Import> res = new Wrapper<>(); diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java index 2e65bf39..7675508c 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java +++ b/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java @@ -13,6 +13,7 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -21,7 +22,6 @@ import org.ehcache.Cache; import org.ehcache.CacheManager; import org.ehcache.config.CacheConfigurationBuilder; -import de.vipra.rest.APIMediaType; import de.vipra.rest.Messages; import de.vipra.rest.model.APIError; import de.vipra.rest.model.Wrapper; @@ -55,7 +55,7 @@ public class TopicResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) public Response getTopics(@QueryParam("skip") Integer skip, @QueryParam("limit") Integer limit, @QueryParam("sort") @DefaultValue("name") String sortBy, @QueryParam("fields") String fields) { Wrapper<List<TopicFull>> res = new Wrapper<>(); @@ -82,8 +82,8 @@ public class TopicResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) - @Consumes(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) @Path("{id}") public Response getTopic(@PathParam("id") String id, @QueryParam("fields") String fields) { Wrapper<TopicFull> res = new Wrapper<>(); @@ -111,8 +111,8 @@ public class TopicResource { } @PUT - @Consumes(APIMediaType.APPLICATION_JSONAPI) - @Produces(APIMediaType.APPLICATION_JSONAPI) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) @Path("{id}") public Response replaceTopic(@PathParam("id") String id, Wrapper<TopicFull> wrapper) { TopicFull topic = wrapper.getData(); diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/WordResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/WordResource.java index 191cb3dc..b05dbef5 100644 --- a/vipra-rest/src/main/java/de/vipra/rest/resource/WordResource.java +++ b/vipra-rest/src/main/java/de/vipra/rest/resource/WordResource.java @@ -12,6 +12,7 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -19,7 +20,6 @@ import org.ehcache.Cache; import org.ehcache.CacheManager; import org.ehcache.config.CacheConfigurationBuilder; -import de.vipra.rest.APIMediaType; import de.vipra.rest.Messages; import de.vipra.rest.model.APIError; import de.vipra.rest.model.Wrapper; @@ -51,7 +51,7 @@ public class WordResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) public Response getWords(@QueryParam("skip") Integer skip, @QueryParam("limit") Integer limit, @QueryParam("sort") @DefaultValue("word") String sortBy, @QueryParam("fields") String fields) { Wrapper<List<Word>> res = new Wrapper<>(); @@ -78,8 +78,8 @@ public class WordResource { } @GET - @Produces(APIMediaType.APPLICATION_JSONAPI) - @Consumes(APIMediaType.APPLICATION_JSONAPI) + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) @Path("{id}") public Response getWord(@PathParam("id") String id, @QueryParam("fields") String fields) { Wrapper<Word> res = new Wrapper<>(); diff --git a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java deleted file mode 100644 index d7842dd3..00000000 --- a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java +++ /dev/null @@ -1,110 +0,0 @@ -package de.vipra.rest.serializer; - -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.JsonToken; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; - -import de.vipra.util.StringUtils; -import de.vipra.util.an.JsonWrap; -import de.vipra.util.model.Model; - -public class GenericDeserializer<T extends Model<?>> extends JsonDeserializer<T> { - - private final Class<T> clazz; - private final Set<String> nestingPrefixes = new HashSet<>(); - private final Map<String, Field> allFields = new HashMap<>(); - - public GenericDeserializer(Class<T> clazz) { - this.clazz = clazz; - - Field[] fields = clazz.getDeclaredFields(); - for (Field field : fields) { - int modifiers = field.getModifiers(); - if (Modifier.isPrivate(modifiers) && !Modifier.isStatic(modifiers)) { - field.setAccessible(true); - - JsonIgnore ji = field.getDeclaredAnnotation(JsonIgnore.class); - if (ji != null && ji.value()) - continue; - - String name = field.getName(); - - JsonProperty jp = field.getDeclaredAnnotation(JsonProperty.class); - if (jp != null) - name = jp.value(); - - JsonWrap jw = field.getDeclaredAnnotation(JsonWrap.class); - if (jw != null) - name = jw.value() + "." + name; - - name = StringUtils.camelToDashCase(name); - allFields.put(name, field); - - String[] parts = name.split("\\."); - if (parts.length > 1) { - String currentPrefix = parts[0]; - nestingPrefixes.add(currentPrefix); - for (int i = 1; i < parts.length - 1; i++) { - currentPrefix += "." + parts[i]; - nestingPrefixes.add(currentPrefix); - } - } - } - } - } - - @Override - public T deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { - T value = null; - - try { - value = clazz.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - throw new IOException("could not instantiate object. Default ctor is missing."); - } - - while (p.nextToken() != JsonToken.END_OBJECT) { - String name = p.getCurrentName(); - Field field = allFields.get(name); - p.nextToken(); - if (field != null) { - try { - field.set(value, p.readValueAs(field.getType())); - } catch (IllegalArgumentException | IllegalAccessException e) {} - } else if (nestingPrefixes.contains(name)) { - getNested(p, value, name + "."); - } - } - - return value; - } - - public void getNested(JsonParser p, T value, String prefix) throws JsonParseException, IOException { - while (p.nextToken() != JsonToken.END_OBJECT) { - String name = prefix + p.getCurrentName(); - Field field = allFields.get(name); - p.nextToken(); - if (field != null) { - try { - field.set(value, p.readValueAs(field.getType())); - } catch (IllegalArgumentException | IllegalAccessException e) {} - } else if (nestingPrefixes.contains(name)) { - getNested(p, value, name + "."); - } - } - } - -} diff --git a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java deleted file mode 100644 index 801c3d89..00000000 --- a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java +++ /dev/null @@ -1,98 +0,0 @@ -package de.vipra.rest.serializer; - -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; - -import de.vipra.util.NestedMap; -import de.vipra.util.StringUtils; -import de.vipra.util.an.JsonType; -import de.vipra.util.an.JsonWrap; -import de.vipra.util.model.Model; - -public class GenericSerializer<T extends Model<?>> extends JsonSerializer<T> { - - private final String typeName; - private final List<Entry<String, Field>> allFields; - - public GenericSerializer(Class<T> clazz) { - JsonType aField = clazz.getDeclaredAnnotation(JsonType.class); - if (aField != null) - this.typeName = aField.value().toLowerCase(); - else - this.typeName = clazz.getSimpleName().toLowerCase(); - - Map<String, Field> foundFields = new HashMap<>(); - - Field[] fields = clazz.getDeclaredFields(); - for (Field field : fields) { - int modifiers = field.getModifiers(); - if (Modifier.isPrivate(modifiers) && !Modifier.isStatic(modifiers)) { - field.setAccessible(true); - - JsonIgnore ji = field.getDeclaredAnnotation(JsonIgnore.class); - if (ji != null && ji.value()) - continue; - - String name = field.getName(); - - JsonProperty jp = field.getDeclaredAnnotation(JsonProperty.class); - if (jp != null) - name = jp.value(); - - JsonWrap jw = field.getDeclaredAnnotation(JsonWrap.class); - if (jw != null) - name = jw.value() + "." + name; - - name = StringUtils.camelToDashCase(name); - foundFields.put(name, field); - } - } - - this.allFields = new ArrayList<>(foundFields.entrySet()); - - Collections.sort(this.allFields, new Comparator<Entry<String, Field>>() { - @Override - public int compare(Entry<String, Field> o1, Entry<String, Field> o2) { - return o1.getKey().compareTo(o2.getKey()); - } - }); - } - - @Override - public void serialize(T value, JsonGenerator gen, SerializerProvider serializers) - throws IOException, JsonProcessingException { - - NestedMap map = new NestedMap(); - map.put("type", typeName); - - for (Entry<String, Field> entry : allFields) { - Object v = null; - try { - v = entry.getValue().get(value); - } catch (IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - } - - if (v != null) - map.put(entry.getKey(), v); - } - - serializers.defaultSerializeValue(map, gen); - } - -} diff --git a/vipra-ui/.bowerrc b/vipra-ui/.bowerrc deleted file mode 100644 index 959e1696..00000000 --- a/vipra-ui/.bowerrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "directory": "bower_components", - "analytics": false -} diff --git a/vipra-ui/.classpath b/vipra-ui/.classpath deleted file mode 100644 index d6da2a85..00000000 --- a/vipra-ui/.classpath +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> - <attributes> - <attribute name="owner.project.facets" value="java"/> - </attributes> - </classpathentry> - <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/> - <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> - <classpathentry kind="output" path="build/classes"/> -</classpath> diff --git a/vipra-ui/.editorconfig b/vipra-ui/.editorconfig deleted file mode 100644 index 47c54384..00000000 --- a/vipra-ui/.editorconfig +++ /dev/null @@ -1,34 +0,0 @@ -# EditorConfig helps developers define and maintain consistent -# coding styles between different editors and IDEs -# editorconfig.org - -root = true - - -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -indent_style = space -indent_size = 2 - -[*.js] -indent_style = space -indent_size = 2 - -[*.hbs] -insert_final_newline = false -indent_style = space -indent_size = 2 - -[*.css] -indent_style = space -indent_size = 2 - -[*.html] -indent_style = space -indent_size = 2 - -[*.{diff,md}] -trim_trailing_whitespace = false diff --git a/vipra-ui/.ember-cli b/vipra-ui/.ember-cli deleted file mode 100644 index ee64cfed..00000000 --- a/vipra-ui/.ember-cli +++ /dev/null @@ -1,9 +0,0 @@ -{ - /** - Ember CLI sends analytics information by default. The data is completely - anonymous, but there are times when you might want to disable this behavior. - - Setting `disableAnalytics` to true will prevent any data from being sent. - */ - "disableAnalytics": false -} diff --git a/vipra-ui/.gitignore b/vipra-ui/.gitignore index 86fceae7..68b9e277 100644 --- a/vipra-ui/.gitignore +++ b/vipra-ui/.gitignore @@ -1,17 +1,2 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist -/tmp - -# dependencies -/node_modules -/bower_components - -# misc -/.sass-cache -/connect.lock -/coverage/* -/libpeerconnection.log -npm-debug.log -testem.log +node_modules/ +bower_components/ diff --git a/vipra-ui/.jshintrc b/vipra-ui/.jshintrc deleted file mode 100644 index 08096eff..00000000 --- a/vipra-ui/.jshintrc +++ /dev/null @@ -1,32 +0,0 @@ -{ - "predef": [ - "document", - "window", - "-Promise" - ], - "browser": true, - "boss": true, - "curly": true, - "debug": false, - "devel": true, - "eqeqeq": true, - "evil": true, - "forin": false, - "immed": false, - "laxbreak": false, - "newcap": true, - "noarg": true, - "noempty": false, - "nonew": false, - "nomen": false, - "onevar": false, - "plusplus": false, - "regexp": false, - "undef": true, - "sub": true, - "strict": false, - "white": false, - "eqnull": true, - "esnext": true, - "unused": true -} diff --git a/vipra-ui/.project b/vipra-ui/.project deleted file mode 100644 index eee34264..00000000 --- a/vipra-ui/.project +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>vipra-ui</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.wst.jsdt.core.javascriptValidator</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.wst.common.project.facet.core.builder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.wst.validation.validationbuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> - <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> - <nature>org.eclipse.wst.common.project.facet.core.nature</nature> - <nature>org.eclipse.wst.jsdt.core.jsNature</nature> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/vipra-ui/.settings/.jsdtscope b/vipra-ui/.settings/.jsdtscope deleted file mode 100644 index 92e666d7..00000000 --- a/vipra-ui/.settings/.jsdtscope +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="WebContent"/> - <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/> - <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject"> - <attributes> - <attribute name="hide" value="true"/> - </attributes> - </classpathentry> - <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/> - <classpathentry kind="output" path=""/> -</classpath> diff --git a/vipra-ui/.settings/org.eclipse.jdt.core.prefs b/vipra-ui/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 0c68a61d..00000000 --- a/vipra-ui/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/vipra-ui/.settings/org.eclipse.wst.common.component b/vipra-ui/.settings/org.eclipse.wst.common.component deleted file mode 100644 index 1f5413a3..00000000 --- a/vipra-ui/.settings/org.eclipse.wst.common.component +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> - <wb-module deploy-name="vipra-ui"> - <wb-resource deploy-path="/" source-path="/dist"/> - <wb-resource deploy-path="/" source-path="/webapp" tag="defaultRootSource"/> - <property name="context-root" value="vipra-ui"/> - <property name="java-output-path" value="/vipra-ui/build/classes"/> - </wb-module> -</project-modules> diff --git a/vipra-ui/.settings/org.eclipse.wst.common.project.facet.core.xml b/vipra-ui/.settings/org.eclipse.wst.common.project.facet.core.xml deleted file mode 100644 index 5523f321..00000000 --- a/vipra-ui/.settings/org.eclipse.wst.common.project.facet.core.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<faceted-project> - <fixed facet="jst.web"/> - <fixed facet="wst.jsdt.web"/> - <fixed facet="java"/> - <installed facet="wst.jsdt.web" version="1.0"/> - <installed facet="java" version="1.8"/> - <installed facet="jst.web" version="3.1"/> -</faceted-project> diff --git a/vipra-ui/.settings/org.eclipse.wst.jsdt.ui.superType.container b/vipra-ui/.settings/org.eclipse.wst.jsdt.ui.superType.container deleted file mode 100644 index 3bd5d0a4..00000000 --- a/vipra-ui/.settings/org.eclipse.wst.jsdt.ui.superType.container +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/vipra-ui/.settings/org.eclipse.wst.jsdt.ui.superType.name b/vipra-ui/.settings/org.eclipse.wst.jsdt.ui.superType.name deleted file mode 100644 index 05bd71b6..00000000 --- a/vipra-ui/.settings/org.eclipse.wst.jsdt.ui.superType.name +++ /dev/null @@ -1 +0,0 @@ -Window \ No newline at end of file diff --git a/vipra-ui/.settings/org.eclipse.wst.validation.prefs b/vipra-ui/.settings/org.eclipse.wst.validation.prefs deleted file mode 100644 index 508e5864..00000000 --- a/vipra-ui/.settings/org.eclipse.wst.validation.prefs +++ /dev/null @@ -1,12 +0,0 @@ -DELEGATES_PREFERENCE=delegateValidatorList -USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.wst.wsi.ui.internal.WSIMessageValidator; -USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.wst.wsi.ui.internal.WSIMessageValidator; -USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.700.v201508251749 -eclipse.preferences.version=1 -override=true -suspend=false -vals/org.eclipse.wst.html.core.HTMLValidator/global=FF01 -vals/org.eclipse.wst.xml.core.xml/global=FF03 -vals/org.eclipse.wst.xsd.core.xsd/global=FF02162org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator -vals/org.eclipse.wst.xsl.core.xsl/global=FF02 -vf.version=3 diff --git a/vipra-ui/.travis.yml b/vipra-ui/.travis.yml deleted file mode 100644 index 66dd1076..00000000 --- a/vipra-ui/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ ---- -language: node_js -node_js: - - "0.12" - -sudo: false - -cache: - directories: - - node_modules - -before_install: - - export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH - - "npm config set spin false" - - "npm install -g npm@^2" - -install: - - npm install -g bower - - npm install - - bower install - -script: - - npm test diff --git a/vipra-ui/.watchmanconfig b/vipra-ui/.watchmanconfig deleted file mode 100644 index e7834e3e..00000000 --- a/vipra-ui/.watchmanconfig +++ /dev/null @@ -1,3 +0,0 @@ -{ - "ignore_dirs": ["tmp", "dist"] -} diff --git a/vipra-ui/README.md b/vipra-ui/README.md deleted file mode 100644 index 0a2e3896..00000000 --- a/vipra-ui/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Vipra-UI - -This is the user interface of Vipra. It provides the front end application, served from a static webserver, and connects to the vipra-rest REST backend application. - -## Development - -To compile/debug, install dependencies. Vipra-UI was built using Ember.js with ember-cli, which requires nodejs >= 4.x, npm >= 2.x, and bower - -In the project root, run: - -* `npm install` -* `bower install` - -to install dependencies. Notice that bower dependencies are pinned to specific versions to work around a bug in Ember. - -Serve a development server with: - -* `ember s` - -### Common problems - -If ember throws errors about highcharts, remove highcharts from package.json and reinstall: - -* npm uninstall --save-dev ember-highcharts -* ember install ember-highcharts - -it seems that ember install does more than just installing dependencies. \ No newline at end of file diff --git a/vipra-ui/app/adapters/application.js b/vipra-ui/app/adapters/application.js deleted file mode 100644 index 0d442b61..00000000 --- a/vipra-ui/app/adapters/application.js +++ /dev/null @@ -1,17 +0,0 @@ -import DS from 'ember-data'; - -export default DS.JSONAPIAdapter.extend({ - host: `http://${window.location.hostname}:8080`, - namespace: 'vipra-rest', - updateRecord(store, type, snapshot) { - var data = {}; - var serializer = store.serializerFor(type.modelName); - - serializer.serializeIntoHash(data, type, snapshot, { includeId: true }); - - var id = snapshot.id; - var url = this.buildURL(type.modelName, id, snapshot, 'updateRecord'); - - return this.ajax(url, 'PUT', { data: data }); - } -}); diff --git a/vipra-ui/app/app.js b/vipra-ui/app/app.js deleted file mode 100644 index 8b234d6d..00000000 --- a/vipra-ui/app/app.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; -import Resolver from 'ember/resolver'; -import loadInitializers from 'ember/load-initializers'; -import config from './config/environment'; - -let App; - -Ember.MODEL_FACTORY_INJECTIONS = true; - -App = Ember.Application.extend({ - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix, - Resolver -}); - -loadInitializers(App, config.modulePrefix); - -export default App; diff --git a/vipra-ui/app/components/.gitkeep b/vipra-ui/app/components/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/app/components/debounced-input.js b/vipra-ui/app/components/debounced-input.js deleted file mode 100644 index ba23db7e..00000000 --- a/vipra-ui/app/components/debounced-input.js +++ /dev/null @@ -1,19 +0,0 @@ -import Ember from 'ember'; - -export default Ember.TextField.extend({ - debounce: 500, - fireAtStart: false, - - _elementValueDidChange() { - let val = this.$().val(); - if(val) { - Ember.run.debounce(this, this._setValue, this.debounce, this.fireAtStart); - } else { - this._setValue(); - } - }, - - _setValue() { - this.set('value', this.$().val()); - } -}); diff --git a/vipra-ui/app/components/dynamic-high-charts.js b/vipra-ui/app/components/dynamic-high-charts.js deleted file mode 100644 index 746faf9d..00000000 --- a/vipra-ui/app/components/dynamic-high-charts.js +++ /dev/null @@ -1,14 +0,0 @@ -import EmberHighChartsComponent from 'ember-highcharts/components/high-charts'; - -export default EmberHighChartsComponent.extend({ - - redrawChart: function() { - // add redraw logic here. ex: - var chart = this.get('chart'); - var seriesName = this.get('content')[0].name; - chart.series[0].update({ name: seriesName, data: this.get('content')[0].data }, false); - chart.setTitle(null, { text: seriesName }, false); - chart.redraw(); - }.observes('content.@each.isLoaded') - -}); diff --git a/vipra-ui/app/components/items-list.js b/vipra-ui/app/components/items-list.js deleted file mode 100644 index 48125bb8..00000000 --- a/vipra-ui/app/components/items-list.js +++ /dev/null @@ -1,17 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - - route: '', - - filteredItems: Ember.computed('items', 'filter', function() { - var keyword = this.get('filter'); - var filtered = this.get('items'); - if (keyword) { - keyword = keyword.toLowerCase().trim(); - filtered = this.get('items').filter((item) => item.get('_name').toLowerCase().includes(keyword)); - } - return filtered; - }) - -}); \ No newline at end of file diff --git a/vipra-ui/app/components/pagination-bar.js b/vipra-ui/app/components/pagination-bar.js deleted file mode 100644 index 42d7c324..00000000 --- a/vipra-ui/app/components/pagination-bar.js +++ /dev/null @@ -1,65 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - - elements: 2, - - currentPage: Ember.computed('page', function() { - return parseInt(this.get('page') || 1); - }), - - prev: Ember.computed('page', function() { - return this.get('currentPage') > 1; - }), - - prevPrev: Ember.computed('page', function() { - return this.get('currentPage') > this.elements + 1; - }), - - prevPage: Ember.computed('page', function() { - return this.get('currentPage') - 1; - }), - - next: Ember.computed('page', function() { - return this.get('currentPage') < Math.ceil(this.total/this.limit*1.0); - }), - - nextNext: Ember.computed('page', function() { - return this.get('currentPage') < Math.ceil(this.total/this.limit*1.0) - this.elements; - }), - - nextPage: Ember.computed('page', function() { - return this.get('currentPage') + 1; - }), - - lastPage: Ember.computed('page', function() { - return Math.ceil(this.total/this.limit*1.0); - }), - - pages: Ember.computed('total', 'page', 'limit', 'elements', function() { - let pages = [], - page = this.get('currentPage'), - max = Math.ceil(this.total/this.limit*1.0), - start = Math.max(page - this.elements, 1), - end = Math.min(Math.max(page + this.elements, start + this.elements * 2), max); - for(let i = start; i <= end; i++) { - pages.push({page:i, active:i===page}); - } - return pages; - }), - - enabled: Ember.computed('total', 'limit', function() { - return this.total > this.limit; - }), - - actions: { - prompt() { - let lastPage = this.get('lastPage'), - page = parseInt(window.prompt(`Enter a page number (between 1 and ${lastPage})`) || 0); - if(!isNaN(page) && page > 0 && page < lastPage) { - this.set('page', page); - } - } - } - -}); diff --git a/vipra-ui/app/components/scroll-top.js b/vipra-ui/app/components/scroll-top.js deleted file mode 100644 index 5701f5aa..00000000 --- a/vipra-ui/app/components/scroll-top.js +++ /dev/null @@ -1,17 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - tagName: 'a', - attributeBindings: ['href'], - href: '#', - classNames: ['scroll-top'], - - click(e) { - e.preventDefault(); - window.scrollTo(0, 0); - }, - - _text: Ember.computed(function() { - return this.get('text') || 'Top'; - }) -}); diff --git a/vipra-ui/app/components/text-marker.js b/vipra-ui/app/components/text-marker.js deleted file mode 100644 index 0e0518bb..00000000 --- a/vipra-ui/app/components/text-marker.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - - setup: function() { - this.updateTextMarker(); - }.on('init'), - - updateTextMarker: function() { - var text = this.get('text'); - var mark = this.get('mark'); - if(mark) { - text = text.replace(new RegExp(mark, 'ig'), '<b>$&</b>'); - } - this.set('marked', text); - }.observes('text', 'mark') - -}); diff --git a/vipra-ui/app/components/topic-link.js b/vipra-ui/app/components/topic-link.js deleted file mode 100644 index b1655419..00000000 --- a/vipra-ui/app/components/topic-link.js +++ /dev/null @@ -1,12 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Component.extend({ - - tagName: 'span', - - text: Ember.computed('topic', function() { - var topic = this.get('topic'); - return topic.name ? topic.name : topic.id; - }) - -}); diff --git a/vipra-ui/app/controllers/.gitkeep b/vipra-ui/app/controllers/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/app/controllers/articles/index.js b/vipra-ui/app/controllers/articles/index.js deleted file mode 100644 index f73630c1..00000000 --- a/vipra-ui/app/controllers/articles/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Controller.extend({ - - queryParams: 'page', - page: 1 - -}); diff --git a/vipra-ui/app/controllers/index.js b/vipra-ui/app/controllers/index.js deleted file mode 100644 index faf5a820..00000000 --- a/vipra-ui/app/controllers/index.js +++ /dev/null @@ -1,16 +0,0 @@ -export default Ember.Controller.extend({ - - queryParams: 'q', - q: '', - - search: Ember.computed('q', function() { - let query = this.get('q'); - if(query) { - return this.store.query('article', { - query: query, - limit: 10 - }); - } - }) - -}); \ No newline at end of file diff --git a/vipra-ui/app/controllers/topics/index.js b/vipra-ui/app/controllers/topics/index.js deleted file mode 100644 index d215b2d1..00000000 --- a/vipra-ui/app/controllers/topics/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Controller.extend({ - queryParams: 'page', - page: 1 -}); diff --git a/vipra-ui/app/controllers/words/index.js b/vipra-ui/app/controllers/words/index.js deleted file mode 100644 index d215b2d1..00000000 --- a/vipra-ui/app/controllers/words/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Controller.extend({ - queryParams: 'page', - page: 1 -}); diff --git a/vipra-ui/app/helpers/.gitkeep b/vipra-ui/app/helpers/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/app/helpers/is-empty.js b/vipra-ui/app/helpers/is-empty.js deleted file mode 100644 index 19ca8d44..00000000 --- a/vipra-ui/app/helpers/is-empty.js +++ /dev/null @@ -1,12 +0,0 @@ -import Ember from 'ember'; - -export function isEmpty(params/*, hash*/) { - let ary = params[0], - text = params[1]; - if(!ary || typeof ary.length === "undefined" || !ary.length) { - return text; - } - return null; -} - -export default Ember.Helper.helper(isEmpty); diff --git a/vipra-ui/app/helpers/pluralize.js b/vipra-ui/app/helpers/pluralize.js deleted file mode 100644 index 56141b21..00000000 --- a/vipra-ui/app/helpers/pluralize.js +++ /dev/null @@ -1,10 +0,0 @@ -import Ember from 'ember'; - -export function pluralize(params) { - let number = params[0], - singular = params[1], - plural = params[2] || singular + 's'; - return number === 1 ? singular : plural; -} - -export default Ember.Helper.helper(pluralize); diff --git a/vipra-ui/app/helpers/topic-share.js b/vipra-ui/app/helpers/topic-share.js deleted file mode 100644 index 65c0e9dd..00000000 --- a/vipra-ui/app/helpers/topic-share.js +++ /dev/null @@ -1,7 +0,0 @@ -import Ember from 'ember'; - -export function topicShare(args) { - return Math.round(args[0] / args[1] * 100); -} - -export default Ember.Helper.helper(topicShare); diff --git a/vipra-ui/app/index.html b/vipra-ui/app/index.html deleted file mode 100644 index bc38d0b0..00000000 --- a/vipra-ui/app/index.html +++ /dev/null @@ -1,44 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Vipra</title> - - <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png"> - <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png"> - <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png"> - <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png"> - <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png"> - <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png"> - <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png"> - <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png"> - <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png"> - <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"> - <link rel="icon" type="image/png" href="/favicon-194x194.png" sizes="194x194"> - <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96"> - <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192"> - <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"> - <link rel="manifest" href="/manifest.json"> - <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> - <meta name="msapplication-TileColor" content="#da532c"> - <meta name="msapplication-TileImage" content="/mstile-144x144.png"> - <meta name="theme-color" content="#ffffff"> - - {{content-for 'head'}} - - <link rel="stylesheet" href="assets/vendor.css"> - <link rel="stylesheet" href="assets/vipra-ui.css"> - - {{content-for 'head-footer'}} - </head> - <body> - {{content-for 'body'}} - - <script src="assets/vendor.js"></script> - <script src="assets/vipra-ui.js"></script> - - {{content-for 'body-footer'}} - </body> -</html> diff --git a/vipra-ui/app/models/.gitkeep b/vipra-ui/app/models/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/app/models/article.js b/vipra-ui/app/models/article.js deleted file mode 100644 index fc38e095..00000000 --- a/vipra-ui/app/models/article.js +++ /dev/null @@ -1,17 +0,0 @@ -import DS from 'ember-data'; - -export default DS.Model.extend({ - title: DS.attr(), - text: DS.attr(), - url: DS.attr(), - date: DS.attr('date'), - stats: DS.attr(), - topics: DS.attr(), - created: DS.attr('date'), - modified: DS.attr('date'), - - _name: function() { - var title = this.get('title'); - return title ? title : this.get('id'); - }.property('title') -}); diff --git a/vipra-ui/app/models/import.js b/vipra-ui/app/models/import.js deleted file mode 100644 index f7cbb7b5..00000000 --- a/vipra-ui/app/models/import.js +++ /dev/null @@ -1,12 +0,0 @@ -import DS from 'ember-data'; - -export default DS.Model.extend({ - date: DS.attr('date'), - duration: DS.attr(), - articles: DS.attr(), - articlesCount: DS.attr(), - topics: DS.attr(), - topicsCount: DS.attr(), - words: DS.attr(), - wordsCount: DS.attr() -}); diff --git a/vipra-ui/app/models/search.js b/vipra-ui/app/models/search.js deleted file mode 100644 index fc38e095..00000000 --- a/vipra-ui/app/models/search.js +++ /dev/null @@ -1,17 +0,0 @@ -import DS from 'ember-data'; - -export default DS.Model.extend({ - title: DS.attr(), - text: DS.attr(), - url: DS.attr(), - date: DS.attr('date'), - stats: DS.attr(), - topics: DS.attr(), - created: DS.attr('date'), - modified: DS.attr('date'), - - _name: function() { - var title = this.get('title'); - return title ? title : this.get('id'); - }.property('title') -}); diff --git a/vipra-ui/app/models/topic.js b/vipra-ui/app/models/topic.js deleted file mode 100644 index f1aa4bc5..00000000 --- a/vipra-ui/app/models/topic.js +++ /dev/null @@ -1,14 +0,0 @@ -import DS from 'ember-data'; - -export default DS.Model.extend({ - name: DS.attr(), - index: DS.attr(), - words: DS.attr(), - created: DS.attr('date'), - modified: DS.attr('date'), - - _name: function() { - var name = this.get('name'); - return name ? name : this.get('id'); - }.property('name') -}); diff --git a/vipra-ui/app/models/word.js b/vipra-ui/app/models/word.js deleted file mode 100644 index 4d729630..00000000 --- a/vipra-ui/app/models/word.js +++ /dev/null @@ -1,7 +0,0 @@ -import DS from 'ember-data'; - -export default DS.Model.extend({ - _name: function() { - return this.get('id'); - }.property('id') -}); \ No newline at end of file diff --git a/vipra-ui/app/router.js b/vipra-ui/app/router.js deleted file mode 100644 index c4a21fcf..00000000 --- a/vipra-ui/app/router.js +++ /dev/null @@ -1,26 +0,0 @@ -import Ember from 'ember'; -import config from './config/environment'; - -const Router = Ember.Router.extend({ - location: config.locationType -}); - -Router.map(function() { - this.route('articles', function() { - this.route('show', { path: '/:article_id' }); - }); - - this.route('topics', function() { - this.route('show', { path: '/:topic_id' }, function() { - this.route('edit'); - }); - }); - - this.route('words', function() { - this.route('show', { path: '/:word_id' }); - }); - - this.route('not-found', { path: '/*:' }); -}); - -export default Router; diff --git a/vipra-ui/app/routes/.gitkeep b/vipra-ui/app/routes/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/app/routes/articles/index.js b/vipra-ui/app/routes/articles/index.js deleted file mode 100644 index b5920fb2..00000000 --- a/vipra-ui/app/routes/articles/index.js +++ /dev/null @@ -1,87 +0,0 @@ -import Ember from 'ember'; - -let limit = 100, - chartData = [], - chartOptions = { - chart: { - zoomType: 'x' - }, - title: { - text: 'Articles per month' - }, - legend: { - enabled: false - }, - xAxis: { - type: 'datetime', - title: { - text: 'Dates' - } - }, - yAxis: { - title: { - text: 'Articles' - } - }, - tooltip: { - headerFormat: '', - pointFormat: '{point.x:%b %Y}: {point.y} article(s)' - } - }; - -export default Ember.Route.extend({ - queryParams: { - page: { - refreshModel: true - } - }, - - model(params) { - window.scrollTo(0, 0); - - let query = { - skip: 0, - limit: limit - }; - - if(Ember.isPresent(params.page)) { - query.skip = (params.page - 1) * query.limit; - } - - return Ember.RSVP.hash({ - limit: limit, - articles: this.store.query('article', query), - chartOptions: chartOptions, - chartData: chartData - }); - }, - - afterModel(model) { - var count = {}; - model.articles.forEach(article => { - var date = article.get('date'); - var month = date.getMonth()+1; - var dstr = date.getFullYear() + '-' + (month < 10 ? '0' + month : month); - if(count.hasOwnProperty(dstr)) { - count[dstr][1] += 1; - } else { - count[dstr] = [Date.UTC(date.getFullYear(), month), 1]; - } - }); - var data = []; - for(var key in count) { - data.push(count[key]); - } - model.chartData = [{ - name: 'Articles', - data: data - }]; - }, - - resetController(controller, isExiting, transition) { - if(isExiting) { - controller.set('page', 1); - } - } - -}); diff --git a/vipra-ui/app/routes/articles/show.js b/vipra-ui/app/routes/articles/show.js deleted file mode 100644 index ce7f5d05..00000000 --- a/vipra-ui/app/routes/articles/show.js +++ /dev/null @@ -1,29 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - renderTemplate() { - this.render(); - }, - - model(params) { - return Ember.RSVP.hash({ - article: this.store.find('article', params.article_id), - statsData: [] - }); - }, - - afterModel(model) { - var words = [], - stats = model.article.get('stats'); - if(stats && stats.uniqueWords) { - for(var word in stats.uniqueWords) { - var o = stats.uniqueWords[word]; - words.push({word: word, count: o.termFrequency, norm: o.normalizedTermFrequency}); - } - words.sort(function(a,b) { - return b.count - a.count; - }); - model.statsData = words.slice(0,20); - } - } -}); \ No newline at end of file diff --git a/vipra-ui/app/routes/index.js b/vipra-ui/app/routes/index.js deleted file mode 100644 index bfef9997..00000000 --- a/vipra-ui/app/routes/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - - model() { - return { - latestarticles: this.store.query('article', {limit: 5, sort: '-created'}), - latesttopics: this.store.query('topic', {limit: 5, sort: '-created'}), - latestwords: this.store.query('word', {limit: 5, sort: '-created'}), - }; - } - -}); \ No newline at end of file diff --git a/vipra-ui/app/routes/not-found.js b/vipra-ui/app/routes/not-found.js deleted file mode 100644 index 26d9f312..00000000 --- a/vipra-ui/app/routes/not-found.js +++ /dev/null @@ -1,4 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ -}); diff --git a/vipra-ui/app/routes/topics/index.js b/vipra-ui/app/routes/topics/index.js deleted file mode 100644 index 1540346b..00000000 --- a/vipra-ui/app/routes/topics/index.js +++ /dev/null @@ -1,37 +0,0 @@ -import Ember from 'ember'; - -let limit = 100; - -export default Ember.Route.extend({ - - queryParams: { - page: { - refreshModel: true - } - }, - - model(params) { - window.scrollTo(0, 0); - - let query = { - skip: 0, - limit: limit - }; - - if(Ember.isPresent(params.page)) { - query.skip = (params.page - 1) * query.limit; - } - - return Ember.RSVP.hash({ - limit: limit, - topics: this.store.query('topic', query) - }); - }, - - resetController(controller, isExiting, transition) { - if(isExiting) { - controller.set('page', 1); - } - } - -}); \ No newline at end of file diff --git a/vipra-ui/app/routes/topics/show.js b/vipra-ui/app/routes/topics/show.js deleted file mode 100644 index 2f0623aa..00000000 --- a/vipra-ui/app/routes/topics/show.js +++ /dev/null @@ -1,9 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - model(params) { - return Ember.RSVP.hash({ - topic: this.store.find('topic', params.topic_id) - }); - } -}); \ No newline at end of file diff --git a/vipra-ui/app/routes/topics/show/edit.js b/vipra-ui/app/routes/topics/show/edit.js deleted file mode 100644 index 75fd778b..00000000 --- a/vipra-ui/app/routes/topics/show/edit.js +++ /dev/null @@ -1,10 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - actions: { - save(model) { - model.save(); - return true; - } - } -}); \ No newline at end of file diff --git a/vipra-ui/app/routes/words/index.js b/vipra-ui/app/routes/words/index.js deleted file mode 100644 index c714a5d1..00000000 --- a/vipra-ui/app/routes/words/index.js +++ /dev/null @@ -1,38 +0,0 @@ -import Ember from 'ember'; - -let limit = 200; - -export default Ember.Route.extend({ - - queryParams: { - page: { - refreshModel: true - } - }, - - model(params) { - window.scrollTo(0, 0); - - let query = { - sort: 'word', - skip: 0, - limit: limit - }; - - if(Ember.isPresent(params.page)) { - query.skip = (params.page - 1) * query.limit; - } - - return Ember.RSVP.hash({ - limit: limit, - words: this.store.query('word', query) - }); - }, - - resetController(controller, isExiting, transition) { - if(isExiting) { - controller.set('page', 1); - } - } - -}); \ No newline at end of file diff --git a/vipra-ui/app/routes/words/show.js b/vipra-ui/app/routes/words/show.js deleted file mode 100644 index e545d25b..00000000 --- a/vipra-ui/app/routes/words/show.js +++ /dev/null @@ -1,9 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - model(params) { - return Ember.RSVP.hash({ - word: this.store.find('word', params.word_id) - }); - } -}); \ No newline at end of file diff --git a/vipra-ui/app/styles/app.scss b/vipra-ui/app/styles/app.scss deleted file mode 100644 index 418dbba8..00000000 --- a/vipra-ui/app/styles/app.scss +++ /dev/null @@ -1,62 +0,0 @@ -@mixin noselect { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: default; -} - -body { - padding-bottom: 20px; -} - -.word { - cursor: pointer; - padding-right: 5px; -} - -.center { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -} - -.loading { - background: url(/assets/images/squares.gif) no-repeat center center; - width: 120px; - height: 120px; -} - -.heading { - @include noselect; - font-size: 82px; - margin: 30px 0; -} - -.ellipsize { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.search-result { - padding: 5px; - margin-bottom: 5px; -} - -.navbar-default { - .collapse:not(.in) { - .navbar-nav > .active { - &> a, - &> a:hover, - &> a:focus { - border-bottom: 3px solid; - padding-bottom: 12px; - } - } - } -} - -@import 'sticky-footer' \ No newline at end of file diff --git a/vipra-ui/app/styles/sticky-footer.scss b/vipra-ui/app/styles/sticky-footer.scss deleted file mode 100644 index 6d26ce5f..00000000 --- a/vipra-ui/app/styles/sticky-footer.scss +++ /dev/null @@ -1,19 +0,0 @@ -html { - position: relative; - min-height: 100%; -} - -body { - /* Margin bottom by footer height */ - margin-bottom: 60px; -} - -.footer { - position: absolute; - bottom: 0; - width: 100%; - /* Set the fixed height of the footer here */ - height: 50px; - border-top-width: 1px; - border-top-style: solid; -} \ No newline at end of file diff --git a/vipra-ui/app/templates/application.hbs b/vipra-ui/app/templates/application.hbs deleted file mode 100644 index 6e2bf2f7..00000000 --- a/vipra-ui/app/templates/application.hbs +++ /dev/null @@ -1,35 +0,0 @@ -<nav class="navbar navbar-default navbar-static-top"> - <div class="container-fluid"> - <!-- Brand and toggle get grouped for better mobile display --> - <div class="navbar-header"> - <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#vipra-navbar-collapse-1" aria-expanded="false"> - <span class="sr-only">Toggle navigation</span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - {{link-to 'vipra' 'index' class='navbar-brand'}} - </div> - - <!-- Collect the nav links, forms, and other content for toggling --> - <div class="collapse navbar-collapse" id="vipra-navbar-collapse-1"> - <ul class="nav navbar-nav"> - {{#link-to 'articles' tagName='li'}}{{link-to 'Articles' 'articles' (query-params page=1)}}{{/link-to}} - {{#link-to 'topics' tagName='li'}}{{link-to 'Topics' 'topics' (query-params page=1)}}{{/link-to}} - {{#link-to 'words' tagName='li'}}{{link-to 'Words' 'words' (query-params page=1)}}{{/link-to}} - {{outlet 'menu-left'}} - <div id="testi"></div> - </ul> - </div><!-- /.navbar-collapse --> - </div><!-- /.container-fluid --> -</nav> - -<div class="container"> - {{outlet}} -</div> - -<footer class="footer navbar-default"> - <div class="container-fluid"> - - </div> -</footer> \ No newline at end of file diff --git a/vipra-ui/app/templates/articles.hbs b/vipra-ui/app/templates/articles.hbs deleted file mode 100644 index e2147cab..00000000 --- a/vipra-ui/app/templates/articles.hbs +++ /dev/null @@ -1 +0,0 @@ -{{outlet}} \ No newline at end of file diff --git a/vipra-ui/app/templates/articles/index.hbs b/vipra-ui/app/templates/articles/index.hbs deleted file mode 100644 index 8009aa8f..00000000 --- a/vipra-ui/app/templates/articles/index.hbs +++ /dev/null @@ -1,10 +0,0 @@ -<h1>Articles</h1> - -{{dynamic-high-charts content=model.chartData chartOptions=model.chartOptions}} - -{{model.articles.meta.total}} {{pluralize model.articles.meta.total 'article'}} in total, {{model.articles.length}} shown. - -<br><br> -{{items-list items=model.articles filter=filter route='articles.show'}} - -{{pagination-bar total=model.articles.meta.total page=page limit=model.limit}} \ No newline at end of file diff --git a/vipra-ui/app/templates/articles/show.hbs b/vipra-ui/app/templates/articles/show.hbs deleted file mode 100644 index b4d7a82f..00000000 --- a/vipra-ui/app/templates/articles/show.hbs +++ /dev/null @@ -1,39 +0,0 @@ -<h2>«{{model.article.title}}»</h2> - -<table class="table table-bordered table-condensed"> - <tbody> - <tr> - <td>Date</td> - <td>{{model.article.date}}</td> - </tr> - <tr> - <td>Created</td> - <td>{{model.article.created}}</td> - </tr> - <tr> - <td>Last modified</td> - <td>{{model.article.modified}}</td> - </tr> - <tr> - <td>URL</td> - <td><a href="{{model.article.url}}">{{model.article.url}}</a></td> - </tr> - <tr> - <td>Topics</td> - <td> - {{#each model.article.topics as |topicRef|}} - [{{#topic-link topic=topicRef.topic}} ({{topic-share topicRef.count model.article.stats.wordCount}}%){{/topic-link}}] - {{/each}} - </td> - </tr> - <tr> - <td>Word count</td> - <td>{{model.article.stats.wordCount}}</td> - </tr> - </tbody> -</table> - -{{model.article.text}} - -<br><br> -{{scroll-top}} \ No newline at end of file diff --git a/vipra-ui/app/templates/components/.gitkeep b/vipra-ui/app/templates/components/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/app/templates/components/debounced-input.hbs b/vipra-ui/app/templates/components/debounced-input.hbs deleted file mode 100644 index 889d9eea..00000000 --- a/vipra-ui/app/templates/components/debounced-input.hbs +++ /dev/null @@ -1 +0,0 @@ -{{yield}} diff --git a/vipra-ui/app/templates/components/dynamic-high-charts.hbs b/vipra-ui/app/templates/components/dynamic-high-charts.hbs deleted file mode 100644 index 889d9eea..00000000 --- a/vipra-ui/app/templates/components/dynamic-high-charts.hbs +++ /dev/null @@ -1 +0,0 @@ -{{yield}} diff --git a/vipra-ui/app/templates/components/items-list.hbs b/vipra-ui/app/templates/components/items-list.hbs deleted file mode 100644 index 259c5fd7..00000000 --- a/vipra-ui/app/templates/components/items-list.hbs +++ /dev/null @@ -1,5 +0,0 @@ -<ul class="list-unstyled"> - {{#each filteredItems as |item|}} - <li>{{#link-to route item.id}}{{text-marker text=item._name mark=filter}}{{/link-to}}</li> - {{/each}} -</ul> \ No newline at end of file diff --git a/vipra-ui/app/templates/components/pagination-bar.hbs b/vipra-ui/app/templates/components/pagination-bar.hbs deleted file mode 100644 index cf9bcc82..00000000 --- a/vipra-ui/app/templates/components/pagination-bar.hbs +++ /dev/null @@ -1,45 +0,0 @@ -{{#if enabled}} - <nav> - <ul class="pagination"> - <li class="{{unless prev "disabled"}}"> - {{#if prev}} - {{#link-to (query-params page=prevPage)}}«{{/link-to}} - {{else}} - <span>«</span> - {{/if}} - </li> - - {{#if prevPrev}} - <li> - {{link-to 1 (query-params page=1)}} - </li> - <li {{action 'prompt'}}> - <span>..</span> - </li> - {{/if}} - - {{#each pages as |p|}} - <li class="{{if p.active "active"}}"> - {{link-to p.page (query-params page=p.page)}} - </li> - {{/each}} - - {{#if nextNext}} - <li {{action 'prompt'}}> - <span>..</span> - </li> - <li> - {{link-to lastPage (query-params page=lastPage)}} - </li> - {{/if}} - - <li class="{{unless next "disabled"}}"> - {{#if next}} - {{#link-to (query-params page=nextPage)}}»{{/link-to}} - {{else}} - <span>»</span> - {{/if}} - </li> - </ul> - </nav> -{{/if}} \ No newline at end of file diff --git a/vipra-ui/app/templates/components/scroll-top.hbs b/vipra-ui/app/templates/components/scroll-top.hbs deleted file mode 100644 index 04bed982..00000000 --- a/vipra-ui/app/templates/components/scroll-top.hbs +++ /dev/null @@ -1,5 +0,0 @@ -{{#if hasBlock}} - {{yield}} -{{else}} - {{_text}} -{{/if}} \ No newline at end of file diff --git a/vipra-ui/app/templates/components/text-marker.hbs b/vipra-ui/app/templates/components/text-marker.hbs deleted file mode 100644 index 5fb15880..00000000 --- a/vipra-ui/app/templates/components/text-marker.hbs +++ /dev/null @@ -1 +0,0 @@ -{{{marked}}} \ No newline at end of file diff --git a/vipra-ui/app/templates/components/topic-link.hbs b/vipra-ui/app/templates/components/topic-link.hbs deleted file mode 100644 index 1ba3c2c7..00000000 --- a/vipra-ui/app/templates/components/topic-link.hbs +++ /dev/null @@ -1 +0,0 @@ -{{#link-to 'topics.show' topic.id}}{{text}}{{yield}}{{/link-to}} \ No newline at end of file diff --git a/vipra-ui/app/templates/index.hbs b/vipra-ui/app/templates/index.hbs deleted file mode 100644 index 5332d139..00000000 --- a/vipra-ui/app/templates/index.hbs +++ /dev/null @@ -1,55 +0,0 @@ -<div class="container"> - <div class="row"> - <div class="col-md-12"> - <div class="text-center"> - <h1 class="heading">'vɪprə</h1> - </div> - - <br> - {{debounced-input value=q class="form-control input-lg" placeholder="Search..."}} - </div> - </div> - - <br><br> - <div class="row"> - <div class="col-md-6 text-center"> - <h4>Latest articles</h4> - <ul class="list-unstyled"> - {{#each model.latestarticles as |article|}} - <li class="ellipsize">{{#link-to 'articles.show' article.id title=article.title}}{{article.title}}{{/link-to}}</li> - {{/each}} - </ul> - </div> - <div class="col-md-3 text-center"> - <h4>Latest topics</h4> - <ul class="list-unstyled"> - {{#each model.latesttopics as |topic|}} - <li class="ellipsize">{{#link-to 'topics.show' topic.id}}{{topic.name}}{{/link-to}}</li> - {{/each}} - </ul> - </div> - <div class="col-md-3 text-center"> - <h4>Latest words</h4> - <ul class="list-unstyled"> - {{#each model.latestwords as |word|}} - <li class="ellipsize">{{#link-to 'words.show' word.id}}{{word.id}}{{/link-to}}</li> - {{/each}} - </ul> - </div> - </div> - - {{#if search}} - <hr> - <h4>Search results</h4> - <ol> - {{#each search as |article|}} - <li class="search-result"> - {{link-to article.title 'articles.show' article.id}}<br> - └ <small>{{article.text}}</small> - </li> - {{/each}} - </ol> - - {{/if}} - -</div> \ No newline at end of file diff --git a/vipra-ui/app/templates/loading.hbs b/vipra-ui/app/templates/loading.hbs deleted file mode 100644 index 119bd472..00000000 --- a/vipra-ui/app/templates/loading.hbs +++ /dev/null @@ -1,4 +0,0 @@ -<div class="center"> - <div class="loading"> - </div> -</div> \ No newline at end of file diff --git a/vipra-ui/app/templates/not-found.hbs b/vipra-ui/app/templates/not-found.hbs deleted file mode 100644 index 4ca64b93..00000000 --- a/vipra-ui/app/templates/not-found.hbs +++ /dev/null @@ -1,3 +0,0 @@ -<h1>404 - Not found</h1> - -<p>The requested resource was not found on this server</p> \ No newline at end of file diff --git a/vipra-ui/app/templates/topics.hbs b/vipra-ui/app/templates/topics.hbs deleted file mode 100644 index e2147cab..00000000 --- a/vipra-ui/app/templates/topics.hbs +++ /dev/null @@ -1 +0,0 @@ -{{outlet}} \ No newline at end of file diff --git a/vipra-ui/app/templates/topics/index.hbs b/vipra-ui/app/templates/topics/index.hbs deleted file mode 100644 index 67ca6107..00000000 --- a/vipra-ui/app/templates/topics/index.hbs +++ /dev/null @@ -1,8 +0,0 @@ -<h1>Topics</h1> - -{{debounced-input class='form-control' placeholder='Filter' size='50' value=filter debounce='150'}} - -<br> -{{items-list items=model.topics filter=filter route='topics.show'}} - -{{pagination-bar total=model.topics.meta.total page=page limit=model.limit}} \ No newline at end of file diff --git a/vipra-ui/app/templates/topics/show/edit.hbs b/vipra-ui/app/templates/topics/show/edit.hbs deleted file mode 100644 index 86d63480..00000000 --- a/vipra-ui/app/templates/topics/show/edit.hbs +++ /dev/null @@ -1,9 +0,0 @@ -{{#link-to 'topics.show' model.topic.id}}Back{{/link-to}} - -<h2>{{model.topic._name}}</h2> - -{{input value=model.topic.name placeholder='Name'}} - -<div> - <button {{action 'save' model.topic}}>Save</button> -</div> \ No newline at end of file diff --git a/vipra-ui/app/templates/topics/show/index.hbs b/vipra-ui/app/templates/topics/show/index.hbs deleted file mode 100644 index 4b793c05..00000000 --- a/vipra-ui/app/templates/topics/show/index.hbs +++ /dev/null @@ -1,18 +0,0 @@ -<h2>{{model.topic._name}}</h2> - -<table class="table table-striped table-bordered table-condensed"> - <thead> - <tr> - <th>Word</th> - <th>Likeliness</th> - </tr> - </thead> - <tbody> - {{#each model.topic.words as |word|}} - <tr> - <td>{{#link-to 'words.show' word.word}}{{word.word}}{{/link-to}}</td> - <td>{{word.likeliness}}</td> - </tr> - {{/each}} - </tbody> -</table> \ No newline at end of file diff --git a/vipra-ui/app/templates/words.hbs b/vipra-ui/app/templates/words.hbs deleted file mode 100644 index e2147cab..00000000 --- a/vipra-ui/app/templates/words.hbs +++ /dev/null @@ -1 +0,0 @@ -{{outlet}} \ No newline at end of file diff --git a/vipra-ui/app/templates/words/index.hbs b/vipra-ui/app/templates/words/index.hbs deleted file mode 100644 index 75321f40..00000000 --- a/vipra-ui/app/templates/words/index.hbs +++ /dev/null @@ -1,12 +0,0 @@ -<h1>Words</h1> - -<br> -<p> - {{model.words.meta.total}} {{pluralize model.words.meta.total 'Word'}} in the database -</p> - -{{#each model.words as |word|}} - {{#link-to 'words.show' word.id}}{{word.id}}{{/link-to}} -{{/each}} - -{{pagination-bar total=model.words.meta.total page=page limit=model.limit}} \ No newline at end of file diff --git a/vipra-ui/app/templates/words/show.hbs b/vipra-ui/app/templates/words/show.hbs deleted file mode 100644 index 2778b0d5..00000000 --- a/vipra-ui/app/templates/words/show.hbs +++ /dev/null @@ -1 +0,0 @@ -<h2>{{model.word.id}}</h2> \ No newline at end of file diff --git a/vipra-ui/bower.json b/vipra-ui/bower.json index 15069153..6104b60a 100644 --- a/vipra-ui/bower.json +++ b/vipra-ui/bower.json @@ -1,18 +1,26 @@ { "name": "vipra-ui", + "authors": [ + "Eike Cochu <eike@cochu.com>" + ], + "description": "vipra ui", + "main": "", + "moduleType": [], + "license": "MIT", + "homepage": "", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], "dependencies": { - "ember": "2.3.0", - "ember-cli-shims": "0.0.6", - "ember-cli-test-loader": "0.2.1", - "ember-data": "2.2.1", - "ember-load-initializers": "0.1.7", - "ember-qunit": "0.4.16", - "ember-qunit-notifications": "0.1.0", - "ember-resolver": "0.1.20", - "jquery": "1.11.3", - "loader.js": "ember-cli/loader.js#3.5.0", - "qunit": "1.20.0", - "highcharts": "4.2.1", - "bootstrap": "~3.3.6" + "bootstrap": "~3.3.6", + "jquery": "^2.2.0", + "angular": "^1.4.9", + "angular-resource": "^1.4.9", + "angular-ui-router": "^0.2.17" } } diff --git a/vipra-ui/config/environment.js b/vipra-ui/config/environment.js deleted file mode 100644 index 01ab460b..00000000 --- a/vipra-ui/config/environment.js +++ /dev/null @@ -1,47 +0,0 @@ -/* jshint node: true */ - -module.exports = function(environment) { - var ENV = { - modulePrefix: 'vipra-ui', - environment: environment, - baseURL: '/', - locationType: 'auto', - EmberENV: { - FEATURES: { - // Here you can enable experimental features on an ember canary build - // e.g. 'with-controller': true - } - }, - - APP: { - // Here you can pass flags/options to your application instance - // when it is created - } - }; - - if (environment === 'development') { - // ENV.APP.LOG_RESOLVER = true; - // ENV.APP.LOG_ACTIVE_GENERATION = true; - // ENV.APP.LOG_TRANSITIONS = true; - // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; - // ENV.APP.LOG_VIEW_LOOKUPS = true; - } - - if (environment === 'test') { - // Testem prefers this... - ENV.baseURL = '/'; - ENV.locationType = 'none'; - - // keep test console output quieter - ENV.APP.LOG_ACTIVE_GENERATION = false; - ENV.APP.LOG_VIEW_LOOKUPS = false; - - ENV.APP.rootElement = '#ember-testing'; - } - - if (environment === 'production') { - - } - - return ENV; -}; diff --git a/vipra-ui/css/main.less b/vipra-ui/css/main.less new file mode 100644 index 00000000..27e5a003 --- /dev/null +++ b/vipra-ui/css/main.less @@ -0,0 +1,3 @@ +html, body { + background: red; +} \ No newline at end of file diff --git a/vipra-ui/ember-cli-build.js b/vipra-ui/ember-cli-build.js deleted file mode 100644 index dccfb16e..00000000 --- a/vipra-ui/ember-cli-build.js +++ /dev/null @@ -1,26 +0,0 @@ -/*jshint node:true*/ -/* global require, module */ -var EmberApp = require('ember-cli/lib/broccoli/ember-app'); - -module.exports = function(defaults) { - var app = new EmberApp(defaults, { - sourcemaps: { - enabled: EmberApp.env() !== 'production', - extensions: ['js'] - }, - sassOptions: { - extension: 'scss' - } - }); - - var bootstrapPath = 'bower_components/bootstrap/dist'; - app.import(bootstrapPath + '/js/bootstrap.js'); - app.import(bootstrapPath + '/css/bootstrap.css'); - app.import(bootstrapPath + '/fonts/glyphicons-halflings-regular.eot', { destDir: 'fonts' }); - app.import(bootstrapPath + '/fonts/glyphicons-halflings-regular.svg', { destDir: 'fonts' }); - app.import(bootstrapPath + '/fonts/glyphicons-halflings-regular.ttf', { destDir: 'fonts' }); - app.import(bootstrapPath + '/fonts/glyphicons-halflings-regular.woff', { destDir: 'fonts' }); - app.import(bootstrapPath + '/fonts/glyphicons-halflings-regular.woff2', { destDir: 'fonts' }); - - return app.toTree(); -}; diff --git a/vipra-ui/gulpfile.js b/vipra-ui/gulpfile.js new file mode 100644 index 00000000..79093a23 --- /dev/null +++ b/vipra-ui/gulpfile.js @@ -0,0 +1,27 @@ +var gulp = require('gulp'), + less = require('gulp-less'), + cssnano = require('gulp-cssnano'), + webserver = require('gulp-webserver'), + sourcemaps = require('gulp-sourcemaps'); + +gulp.task('less', function() { + gulp.src('css/**/*.less') + .pipe(sourcemaps.init()) + .pipe(less()) + .pipe(cssnano()) + .pipe(gulp.dest('css/main.css')); +}); + +gulp.task('watch', function() { + gulp.watch('css/**/*.less', ['less']); +}); + +gulp.task('server', function() { + gulp.src('.') + .pipe(webserver({ + livereload: true, + open: true, + port: 4200, + fallback: 'index.html' + })); +}); \ No newline at end of file diff --git a/vipra-ui/html/index.html b/vipra-ui/html/index.html new file mode 100644 index 00000000..357dd489 --- /dev/null +++ b/vipra-ui/html/index.html @@ -0,0 +1 @@ +Home \ No newline at end of file diff --git a/vipra-ui/index.html b/vipra-ui/index.html new file mode 100644 index 00000000..ecf5817a --- /dev/null +++ b/vipra-ui/index.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html lang="en" ng-app="vipra"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>Vipra</title> + + <!-- stylesheets --> + <link href="bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> + + <!-- javascript --> + <script src="bower_components/jquery/dist/jquery.min.js"></script> + <script src="bower_components/bootstrap/dist/js/bootstrap.min.js"></script> + <script src="bower_components/angular/angular.min.js"></script> + <script src="bower_components/angular-resource/angular-resource.min.js"></script> + <script src="bower_components/angular-ui-router/release/angular-ui-router.min.js"></script> + <script src="js/app.js"></script> + <script src="js/controllers.js"></script> + <script src="js/directives.js"></script> + <script src="js/services.js"></script> + </head> + <body> + <div ui-view></div> + </body> +</html> \ No newline at end of file diff --git a/vipra-ui/js/app.js b/vipra-ui/js/app.js new file mode 100644 index 00000000..60d74aac --- /dev/null +++ b/vipra-ui/js/app.js @@ -0,0 +1,18 @@ +var app = angular.module('vipra', [ + 'ngResource', + 'ui.router', + 'vipra.controllers', + 'vipra.directives', + 'vipra.services' +]); + +app.config(function($stateProvider, $urlRouterProvider) { + + $urlRouterProvider.otherwise('/'); + + $stateProvider.state('index', { + url: '/', + templateUrl: 'html/index.html' + }); + +}); \ No newline at end of file diff --git a/vipra-ui/js/controllers.js b/vipra-ui/js/controllers.js new file mode 100644 index 00000000..63b99a10 --- /dev/null +++ b/vipra-ui/js/controllers.js @@ -0,0 +1,5 @@ +var app = angular.module('vipra.controllers', []); + +app.controller('MainCtrl', function($scope) { + +}); \ No newline at end of file diff --git a/vipra-ui/js/directives.js b/vipra-ui/js/directives.js new file mode 100644 index 00000000..07291e39 --- /dev/null +++ b/vipra-ui/js/directives.js @@ -0,0 +1 @@ +var app = angular.module('vipra.directives', []); \ No newline at end of file diff --git a/vipra-ui/js/services.js b/vipra-ui/js/services.js new file mode 100644 index 00000000..998e2cef --- /dev/null +++ b/vipra-ui/js/services.js @@ -0,0 +1 @@ +var app = angular.module('vipra.services', []); \ No newline at end of file diff --git a/vipra-ui/package.json b/vipra-ui/package.json index d1b51b9f..1b966c29 100644 --- a/vipra-ui/package.json +++ b/vipra-ui/package.json @@ -1,42 +1,14 @@ { "name": "vipra-ui", - "version": "0.0.0", - "description": "Small description for vipra-ui goes here", + "version": "1.0.0", + "description": "vipra ui", + "author": "Eike Cochu", "private": true, - "directories": { - "doc": "doc", - "test": "tests" - }, - "scripts": { - "build": "ember build", - "start": "ember server", - "test": "ember test" - }, - "repository": "", - "engines": { - "node": ">= 0.10.0" - }, - "author": "", - "license": "MIT", "devDependencies": { - "broccoli-asset-rev": "^2.2.0", - "ember-cli": "1.13.13", - "ember-cli-app-version": "^1.0.0", - "ember-cli-babel": "^5.1.5", - "ember-cli-dependency-checker": "^1.1.0", - "ember-cli-htmlbars": "^1.0.1", - "ember-cli-htmlbars-inline-precompile": "^0.3.1", - "ember-cli-ic-ajax": "0.2.4", - "ember-cli-inject-live-reload": "^1.3.1", - "ember-cli-qunit": "^1.0.4", - "ember-cli-release": "0.2.8", - "ember-cli-sass": "5.2.1", - "ember-cli-sri": "^1.2.0", - "ember-cli-uglify": "^1.2.0", - "ember-data": "1.13.15", - "ember-disable-proxy-controllers": "^1.0.1", - "ember-export-application-global": "^1.0.4", - "ember-highcharts": "0.3.0", - "ember-wormhole": "0.3.4" + "gulp": "^3.9.0", + "gulp-cssnano": "^2.1.0", + "gulp-less": "^3.0.5", + "gulp-sourcemaps": "^1.6.0", + "gulp-webserver": "^0.9.1" } } diff --git a/vipra-ui/public/android-chrome-144x144.png b/vipra-ui/public/android-chrome-144x144.png deleted file mode 100644 index a75a06d5e6943aee4c175213f6cf98b03fa3f85c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7703 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 Q3=9kmp00i_>zopr08&e>YXATM diff --git a/vipra-ui/public/android-chrome-192x192.png b/vipra-ui/public/android-chrome-192x192.png deleted file mode 100644 index 38a70604dcb27a9ee3fbf79d71360c5d1bb30def..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10711 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 diff --git a/vipra-ui/public/android-chrome-36x36.png b/vipra-ui/public/android-chrome-36x36.png deleted file mode 100644 index fa55583e69edd38b9b9dc4b344610ce40f076014..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1410 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4i*Lm25-&)VFm^UmUKs7M+SzC{oH>NSs54@ z6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dcykO3*KpO@I2Bsu$cNd2L z?fqx=GcYi)mw5WRvft+s6gM{9XUZAJz`&yJ>EamTas2JI=nR=q3HA^FXIgHae$#u_ z?K~eTO<vB8zRJEXni5Vcq_#FG1b%e9IGvR>K1X2X*GpYNxtbXoYhO3t5RZP@%(yyY z#iONRSKd0mH51QVs<v^r=jPda&(@y%n7G-q%y_oR`?}9&)9?RD-}l*&`A__7(a85L z9FCdH3~_fB)i?*VG{o>fV}GN#uY3Ce*5)%4x*tjY{~o=0szhXW;ES)Z&kSz!ntM)C z3EVl|{G&k0!#yP_uU&6Oc}{%gbISPdn$m{r7w11+-&9!dWs*B<{rNJ@>NUSTyY_AU znKE~u&%`XAC8zagw0A1?Z<+TsHQ@jgyTe1RoLRRP?>V#g((1eO59tIZiMs8%mEI$; z`dM#ZV0hKB+Qt8$1w7LG7OlX3cd40=hWQt}YxDmtE?hPJI0HjdvA(eBuedn<{w;Hz z_3F;QX}`9>KsUDNwZQ^~?vmTvKe_L5tWRCG?TgQ%WVv7GnV%W#-SBipwqo6UyEi}g z*zU3v`xR}L(A<2G?Xyq%t~YkC&tGuS?+*2JQJBep_^ssE^Zu;8;<od1tzVyYY~<ta z_@vRydbR$vG1vB=EE$HAl}*G`tWU17XDeRVpR#REGn=T@84c}yw=|kr&&n%%mgz51 za+xc(FzWPSm52UKH?5C)7cu@SDi`ZM_(ip4$=$7CN{!VI)VQu5ILS1(g|qsrM}wzS zh=;%`6()v@EhqQxda*gWubL+!fls~A_laDDcX@eJP2{8}zBj9G@N)lS(rLG0IBEJp z?bG`xfz`SfPTQ>c!muIXP$whH()RYF5)mJNXla}}m{_^LIgdw`xw~3sM#_Z>p<Ul+ zAH7)Ub0qPy<)n@5Y4i2IE?Kmh>BXDiZwz|{{w<tRAu6IM@Gr}Ie=ozuv)3Q>H@LN2 zJu}t)Y^{oH&$Tntg(imfSlnAF_x$d^#SV4)MPKIL3SPTYv{rZ-)64WVe>qOPFP(RU zX^RH4R+_GpLQnZB^&fmcoBNDQlXq4YZ~r^vmhtgmuXE?RHS-sJeU|XB;jfV46Xo3H zM|n&(Jo*ycZeqQs{g(e^rsZ>(RgV6;=^W-X*HNx+%Lla?UzX4EfA=T!ghO=PswGX9 z2Y2sjxAN<ZygRSvo{dINJAd}<Pqp95#G1I<4786um7iVr{jQVTty2dTQ~AGs6iW8B zN#Ca($GgAsxT%4k==`9=Di=SbJ+-;Gz_B&Z&SJ@tp4`iQAKw|N$=$kd)5av>62PJG zAYntop_bU6q6@p{EZKYh-L%s)j$NO9d_prHTac7*fx+|lQJh7a*<W6N8^0zc>ez&4 zHnFD;DJ%a5K5vX{($G1fRbH&V?AOz&0tc4rpFO@_*7=^C$oiIVrv2+v@|L?Wyii>* zBSd<Q<G$EGOFt%5&bqxi=z7ctWd?HwW>yiiQ#$LF8HMgFP}s2G@EwideVe*<*L}LZ zDef<OREV1TG@AxL1_lPz64!{5l*E!$tK_28#FA77BLhQIT|*;XL-P<LV=GfbD-%m? z14AnV14HGfcTqIt=BH$)RpQp*P#2rXz`zh*6%tVrlvu7%P?VpRnUkteQdy9ykXcZY z%)n4F=kX^Vj>0evjZ^-o&v-r!VqjM0)=TCVRu=Z2EW#|T;L>1nIE7hxbBMy}8&^&o mIdeqj2>a;<j|E<O46nomOFlW7PGw+VVDNPHb6Mw<&;$Su!fby4 diff --git a/vipra-ui/public/android-chrome-48x48.png b/vipra-ui/public/android-chrome-48x48.png deleted file mode 100644 index 053cc4ed735d16d23ca7f7bfc06b8b419c5da221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1942 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 diff --git a/vipra-ui/public/android-chrome-72x72.png b/vipra-ui/public/android-chrome-72x72.png deleted file mode 100644 index 98c240493437e4f97f0c6e08d10ab1c174d792f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2999 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 GgeCy>0=1q1 diff --git a/vipra-ui/public/android-chrome-96x96.png b/vipra-ui/public/android-chrome-96x96.png deleted file mode 100644 index 2d2202ca6ba65fba1402708be385110c13ca4606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4704 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 TC)2463=9mOu6{1-oD!M<ks_o; diff --git a/vipra-ui/public/apple-touch-icon-114x114.png b/vipra-ui/public/apple-touch-icon-114x114.png deleted file mode 100644 index bc2a612c2e7e6a66e1f82d42722943a90e00e25f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1818 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 diff --git a/vipra-ui/public/apple-touch-icon-120x120.png b/vipra-ui/public/apple-touch-icon-120x120.png deleted file mode 100644 index fdaabce77f0024103256d92f819694892752aa5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 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 O)u5iPelF{r5}E*ZxLhCr diff --git a/vipra-ui/public/apple-touch-icon-144x144.png b/vipra-ui/public/apple-touch-icon-144x144.png deleted file mode 100644 index 1d46bf72898e7a1d57e584e33166b4ab93ad1913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2304 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 bUV03##05(}IhjrcHEldy{an^LB{Ts5Lm~x| diff --git a/vipra-ui/public/apple-touch-icon-152x152.png b/vipra-ui/public/apple-touch-icon-152x152.png deleted file mode 100644 index cf4fe5c4d8e00ade403c398bf6354c66dcb6f419..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2362 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 ZkKvWLV96&Z)2X0Fk*BMl%Q~loCIEz`Eo}e* diff --git a/vipra-ui/public/apple-touch-icon-180x180.png b/vipra-ui/public/apple-touch-icon-180x180.png deleted file mode 100644 index 9349bc3006cbeae993227c4247526a2f5331bca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2826 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 OBiGZ_&t;ucLK6TTxKRiI diff --git a/vipra-ui/public/apple-touch-icon-57x57.png b/vipra-ui/public/apple-touch-icon-57x57.png deleted file mode 100644 index 404609005a57d079d934aeafb60e9f41c777303d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 989 zcmeAS@N?(olHy`uVBq!ia0y~yV6X&X4h9AWhLy#4A{iJMSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7?_g0-CY>| zxA&jf&%nUIUgGKN%6^|mP~6zyq><$b1_q`kPZ!4!kK=Ezz0Vd(lwm0Nzx@5(mv<jN zyR~N8(Nu%LsH3M87C$toN)&szdeWskD;!p&-jM!nDCQfcuT+&-$vc_%+M2V679CXB zTC)A;;?FO)Meeq#zH(1w%lp~SEBD?1{o%lOZvN#?^-`;Jf8O^<%=)n*&e^E#;Dgy- z(wlyitmtm&Rj9seoV5DWUr8~JzZ<!)=d<2nw`QnX_cUtq9?p(^7k^&eTDx_^jvdS% z)w@K0CYfjK?Vg=pc+IiN^lpsWcgOQTs)CQCCMr+;e%WA3w%X^i7jss4%|7~JCG$F` zwaImpc4(PR{H|f7P#Y}u+PM1Nu{s`=_Y8kc;?jOS^a$IPk`n%5vyJ_3;XC&?d@@|x z=i!}ke)B8+pRZJ3_&!=v!FNV-rT3k`zq}Sr-qAVP(s<5vvG;|J7k4@rFsY00O5|C% z{%>OHNnW-&J;tvzoHX;IBDolvCkOHhyJzIpM@4cmHcqzjJ-%e-9$js3bBE^1#a0~) zjy+_w_0y9~Tw)lr^&o@aH2<d3oeN`b@Ex}3JhY(Kbc*APs?MqM76oF`PwZzN&`U@? z$d=PA7g}?`#?eBv;wr-(pW0o&9Jtph`EkX0RY&npv(j?=l2Fxd5Y&{jLF5{fxaP@A z@k~|*A2^h+CrXAMx_iLtXO#V_o9<ykJ%KF~O*MG$YT917wK!buXZZQ!wqm>i&7Lh2 z?Gr1fT)koOvQs@XOj&ozQ$M-HB|Jt`{C`N4y}5cZD{c16Hz{rxJ+Hohcq{Ftsr=ko z=esx_E)hyf4qg|N$9?Ka?yOAqQ%eME-a5=wxmjTypjP_iaM=Q%T?Z^Ce%QFyX{HY^ z!%?9v^-E1P=BJ;!=~%Q-EdS5<e@nJKxj*SXqk-H;oz0DMYZ(|AR7+eVN>UO_QmvAU zQWHy38H@}JO?3^8bPdfzjEt>J4XsQpv<(cc3=F1+yvsz<kei>9nO2Eg!!ypXs|*Yb z;Z-3KB|(Yh3I#>^X_+~x3MG{VsS23|CCLm76>}bc;^8O^)6h8OfBKB)(;x<BWp2G> zZee9%@5v&}!U`@8CWlj)l{bedoW618#E~;cWR9?(Ztz&(rN{6}T(IPmlj&4YzV&qV Kb6Mw<&;$UXIG-K> diff --git a/vipra-ui/public/apple-touch-icon-60x60.png b/vipra-ui/public/apple-touch-icon-60x60.png deleted file mode 100644 index 69090a0b6c4948749effbb3fe956c3caf72b6154..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4h9AW2Kni2>lhdqSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0zn2bC3(BMF#K=t zKeL~Kfq}im)7O>#K98WdvB60r%M%O?Ov^l7978;gzrA+WU)WKCt>EAC<=i1RlrHtw zEJ-pHFck6L;$SKuIx9g*MIc!4w#yW`3kq>AmL4W-LPCb8+6_fi6k=>7ZY}XJ+^ECl zbn~r+X~6ckMsM4=+3%h9d45uV?#;P#@A4FNoU%A}{6|4W^}_3MHBG0**1XdUl)g8! zM56SD_PuXWR~n|@u5ifDd$Hqrj-CJR$ggphv41u)8EorkKfFc1^_kq1R|-6Bmk+<^ znt0Vj|7e~2A3f%xUx!{M<Qx7tzW;ICl8Zu5c-(>>i*gsSFRIu6?Oyec{abhtQ=*mX zw7U<g$}*4NPqj+k{q(lHyy=2CpH^|!E3Fy7S1u~j*zozkly_drKCjl;6Mr3MO9p2f z*nODW>YMWTfo051m6W%S&h{R8p~y2i$7bd6;#)SR`s%L5Y&&lJ;QX{tKq<=RWZ(*+ zFtc|JmAw;|F1q=|qsSp4X(i{?lKMTmv4NcL6}mgir3*8=*Zn!x=JlejuQQc>)e7$Q z?jeV6U)X&84(H@sJ&Q&2Tm+^06^>Uk#A!Fr?X~~>!j{4Rh3G^rvDJw`S7trslX!k} z#uw$!OS3j89N0LQsk(B??~r5WvJZ}PO8?G!S$K0&%{8yunHhHzljrjuVl6o5viEnB z-wWx)q%3Z?8q)_+kJ9(Odl+cpI>REXUHM5iZ-AXh7jM4rm0}GkWuHCinad~5`#jCv z_<sH0n}0T%R7{oo9eTN?GdWC7uc48-$amW5u+N^qZW-<p{+@Hp@!MI=D`&q%|JWNI zS{8YIk;@E=bJs4tRy}7|Y-S#l|9&>dsTPC6Nq@tOB7&;Tgg5L;ox-&KhG~@QJC}WC ztB){MZHZKUw!<(ttkZvS^tF_!JG`e~|9fxp{C%O1u4Y?Z_?z*4dG_OXpI^l~rkAi? z+UEZ4^G6AJ#XsVg*uQSP%&Revfq_A_#5JNMC9x#cD!C{%u_Tqj$iUE4*U(7U&^*M* z*viz<%EUt3z|hLTV0y^AOcV{d`6-!cmAExL;|#mXz`zh*6%tVrlvu7%P?VpRnUkte zQdy9ykXcZY%)n4F=kX^Vj>0evjZ^-o&v-r!VqjM0)=TCVRu=Z2EW#|T;L>1nIE7hx sbBMy}8&^&oIdeqj2>a;<j|E<O46nomOFlW7P6g#{Pgg&ebxsLQ06+_|ApigX diff --git a/vipra-ui/public/apple-touch-icon-72x72.png b/vipra-ui/public/apple-touch-icon-72x72.png deleted file mode 100644 index 7e41b0928a7ca05b405ed7bce68b8e2099de6e03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84h9AWhJv;?vl$o|SkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7?_g0-CY>| zxA&jf&%nUIUgGKN%6^|mP~6zyq><$b1_ov?PZ!6Kh{JEMzx5Vzlwtqyd;Y%N-(Q3- zpZ6qqL781kx`(8MhUzyLySWn=YCPrUb`?}K){cK7EIF}LKPOl@z=xMt{@kP;IlNn~ z^UG)3Zi%^T{d^lo(`@toJO7@oyD@Y2%(+)R>sP)|3SjASsORFG&z?88&v@gp7iT7| z`<c6Tf<f$igT(DGCTqq0zreCH|M*FU<V{C!>8y#_8aG$ua9hhlou7t5vHd$=?!5W& zUexlLf9&q<6IFYXy`8ab^WD{l&aqCE-<QMM6MFwpQ;n{e!p7$Cm@j-*p8np~4mBKc z4|I5Ur17=(Qk@yAbgMcxGyn9qj;*r)a%l7HA8}_7-SFeBJjZaZmErTpdn*^G-M+B? z%J(3Jx+bx#<OKPt+R^;NYgu!h-<y5=(${m@RA2UqAG6d^2X`OV<a@O@9ktgemjtLY zA6FOJTl(zRSLVp~p$qQ#Gw04_pY_BmKV<E#SrXe6GW*zmCAfbP>5Si0WSdoakMpmv z)Qb78^K5qcpJjf<`>Nr!$%WVjvsnJCw!80jlyBzY^3Y*_qWRoYSNLl5p5CTjrcdIH zFO>@ww;A40a69b4m@D2il|9{ZuewKfrM1K?buG4Co+4uAO<QJcJm|vcY2FZ~8S>C) z!(|8E25%nLQbtRY3kw);)^ND5VadDX;N7{QudN}>|In8nwp(heH(9yduliE3=7Phe z2EmWUj+_5jKIn5{T|05_>8HHY-d<78>*AC0WYD?mIBD`phq(@{y(*{kueO-4I+?m@ zZn~bgi9q3vM?4CyzELW(=j8@0YD_u4_1wgJs$bs7t0&s98{8MqSkU0S?D6Ufg;S=h zccgFa-1AQ7?C;80jdq<CB}M@sO_Tqe>$x>2&rjWb(ha})E{uQ6RQ72UXl+Uh-}cq+ zeSN@W@xu%`dg>k`7vh#TxlXz)aX?}kr;FLr(A>{gWuMJ?@S{<ivu!T3wDjcr55r<D zb~(!iebn8XQzj}Jqm%n$_T7;Gv-use{1$Z7&9}euZ^_~kK3%Vl%WpIm-YhxWCsZ_1 zxXsO-^Qhw0wHE`OboBDFOQu{fOsT*6LSrHK1@jMwyk@ewa~2*?JfY`x`H_a=M)ePj z%<ezV?c>xeXmy`)W7EtJbN_z{HeqsIP|x<4rBrpzlZ`b62@DJjswJ)wB`Jv|saDBF zsfi`23`Pcqrn-hkx`yT<M#fgAhE^sP+6IPJ1_skZ-esa_$jwj5OsmAL;TdPxRR#uz z@T!oAlAy$Lg@U5|w9K4Tg_6pGRE5lfl4J&kiaC!z@o*G|X=t4CKYhmYX%GXmGPhnb zx3IFX_hb=fVFi~4lfx;@%9}$JPT#n4;>ejJGDp}?H+U@Y(qnifE?Dx($#g2H{PA@4 Kb6Mw<&;$UEhwwE3 diff --git a/vipra-ui/public/apple-touch-icon-76x76.png b/vipra-ui/public/apple-touch-icon-76x76.png deleted file mode 100644 index 29d14b903247e28ff96f6ea34bf3a38d50f5482e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1227 zcmeAS@N?(olHy`uVBq!ia0y~yVDJH94h9AWhDU$+zB4c|u%tWsIx;Y9?C1WI$jZRL zppfhl<jcTNrN+R}(89p*i-Ccm;RORjsR0ASs{{rHs~HRo;stYd1==t$Ffb)~ySp&_ zZ|^^|pMimay~NYkmHj@Cpt!NYNh8Y>3=GT#o-U3d5r^O2I2{}mD8W$hZ~1$>v+l2) z47a9DX$ejGapL(hgG+O_e%L4=ackMz34(=ZmcCe#GwakEHFjsg^i3CfH6+AaZd*>c zcD4E=gP*bKoU?n2_Z@yOckXrF0-^OAS8zozYA4i-cmI@W-sLs#nRaP2U%ZaI&Yp}_ zi4WEom@Zpdur8uzYq!6#iTCpSAA0^a>N)jWM69pcK6}~vv^BH1+*Hi___yK%dvZk> zR&W2^8ZX*(e_cA`3bXucH>!kRxh*zUS;=E59hiH$YT69($R5ptm39eE!k3<$<+`2E z{NPM_@N|n#mGer+AImuWt`m!>5&3#r#+U!<^3H#0hmTe2SoJ+i)bZ<EyP&dW(yQ>K zvk|ARn%Up^C2M2GIAyI+@<Tla->f}#K4DY%E1T3O^}Wep*mY>hjM?mEYN@@&Z?ikS z3)Q**C@G57^AyOh?|h<?ZZ#oOAdAu9=m~@UQX1C#D#LFUD%?Kg=Xh4!C}$qqR{2=g z<fF45J)WUy#Iv?rZcn@2G+W;j+Xbo^*g6arN*`#-kNY6E)J%*)S5WK{qs2wj#5LSn zTML;&gc1*0AJ}oxw8+1H(UoIo8QfcHSF?)gfABcHIC!a<woX8b?e4knB0qhe79{*> z-b2ILg2v(|X`(I?^L$^6&X`(ac2uw-PI0m7mr3i4KZ@RBw3gf`yM_5pip0Iy!IB#_ zxvtDkk+3u6S;!N1!l5p!<DF7MtfYas)p;=&r#IEi2ktf`Sv2_F^1C$I%%<ma_rVQ8 z6%2c?Pj@xqi8f*FG1Zdpi@LDbjpM%G4Xur(3sjCuP2_af(U_UJw_?tUDQh21=Ugwg z*OI+lzqOn_V84m9lHjyWY8R*fXfU~OM$U7Q`(~+_-*GC3&gll;$#I|mn5XYRrI<*8 zL_n6q*1Qgv8}idCvV5OczOtL0eRA`YO<z|Q)`c1Al>b>}6uq%i`hdB}QiraG5?XUD z?INa~%?=HZI+JnXZoKRK=UYmq7CwxqyA={1osoHD+w(T-tzWml+B)}e@$Dlwx2<XQ z4zl2R$I9QjWJOF!i&$V_>|)iUEXH&DRgXUN{<LYy3`UJ;xoINWZM)W2Mg;Y+y-k#x zCK7!3ta)Wb&>P8yf4Ld&EBmI2d|nuD{&bg>mHX>Mi)z<;zJ2=W<D50!w@;dfxQf1f zzSuJI|DXNrtZN$nuD{{GF7A|_%Ly3~1_lPz64!{5l*E!$tK_28#FA77BLhQIT|*;X zL-P<LV=GfbD-#QC14AnVgXtmfGEp?-=BH$)RpQq0j5F*i0|P^NRY*ihP-3}4K~a8M zW=^U?No7H*LS{ipG6O@!oX4MdI10lwG*0=SKI8c`h=Ey|TQ8YgSXtP6vIw)Vf=h$R x;S^@&%^?b>Z(KQX<jfJ7BkZReJQjHAF}xBNEcxVQIu%q(dAj<!taD0e0szB?{g(g$ diff --git a/vipra-ui/public/apple-touch-icon-precomposed.png b/vipra-ui/public/apple-touch-icon-precomposed.png deleted file mode 100644 index 4d110e9874af7700780f80bfeec4a287fa6d49b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4249 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 AJOBUy diff --git a/vipra-ui/public/apple-touch-icon.png b/vipra-ui/public/apple-touch-icon.png deleted file mode 100644 index 9349bc3006cbeae993227c4247526a2f5331bca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2826 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 OBiGZ_&t;ucLK6TTxKRiI diff --git a/vipra-ui/public/assets/images/squares.gif b/vipra-ui/public/assets/images/squares.gif deleted file mode 100644 index 15739a5e3e23301ea73683e760f57fcc58b0b275..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27920 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 diff --git a/vipra-ui/public/browserconfig.xml b/vipra-ui/public/browserconfig.xml deleted file mode 100644 index 65380f38..00000000 --- a/vipra-ui/public/browserconfig.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<browserconfig> - <msapplication> - <tile> - <square70x70logo src="/mstile-70x70.png"/> - <square150x150logo src="/mstile-150x150.png"/> - <square310x310logo src="/mstile-310x310.png"/> - <wide310x150logo src="/mstile-310x150.png"/> - <TileColor>#da532c</TileColor> - </tile> - </msapplication> -</browserconfig> diff --git a/vipra-ui/public/crossdomain.xml b/vipra-ui/public/crossdomain.xml deleted file mode 100644 index 0c16a7a0..00000000 --- a/vipra-ui/public/crossdomain.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> -<cross-domain-policy> - <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html --> - - <!-- Most restrictive policy: --> - <site-control permitted-cross-domain-policies="none"/> - - <!-- Least restrictive policy: --> - <!-- - <site-control permitted-cross-domain-policies="all"/> - <allow-access-from domain="*" to-ports="*" secure="false"/> - <allow-http-request-headers-from domain="*" headers="*" secure="false"/> - --> -</cross-domain-policy> diff --git a/vipra-ui/public/favicon-16x16.png b/vipra-ui/public/favicon-16x16.png deleted file mode 100644 index 2142db750ebddec14220299d9b135ef67c086a8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+u%tWsIx;Y9?C1WI$jZRL zppfhl<jcTNrN+R}(89p*i-Ccm;RORjsR0ASs{{rHs~HRo;stYd1==t$Ffb)~ySp&_ zZ|^^|pMimav%n*=n1O*?7=#%aX3ddcU|?V`@$_|Nzt1BmZfv;ElrxTjfzi;@#W6(V zeCl~y?`TGewui4(*s~2-vSNEKxf(PFOz`>3-LzSXon3R$=4}CmB_G)%xc+|NcDz$s z5Wph-)Z&JtO@~DU3ww9l0%rq0%WDh1SJ|IG{F_av>q2JCe3`u5AI}!4Wn7RyvvZr$ zv><~eSEty&tWxmbU0J;^>zZ;|#^LJ4WljJ8YVJMuC41BRGqy%`7XIpg#peJ0;&yM+ z>J?QhV*^6JYEHfLBP?vq>Be>rnM0j1FJ?}WP1Uc6`mub?gH>hXru*)${Ufr%!bnHh zWSTKs?y|`_fu7UXG}mnPjboRb%$0V?<@_(zZA-2v1@|;fDp!kb>5SWucOZVbT1w!? z+?%Qk`_ptHj5CgG@#qeVSuLQb@$Oe#G_O$X>i_p0G@e^%NSf(>@)ExF>2|OFqF+zE z<rv#eL<on;KkQ>*U{Eb_jVMV;EJ?LWE=o--No6oHFf`RQG}1LR4>2;fGBva^vD7v& zv@$R-RDOCFMMG|WN@iLmZVe7~v55=}4B=HF5hX#1<q8Ew`DvLssR|{P1*r;|1trN0 z3>9-8f8yaN4Aam!<$wB&=hGktW@T=@WNu+)VeiQz%)$yT4JL<En3Xq&D4f1=<;0OQ kM`Vt$pKkD2;HAg#N?fqylauLG1_lNOPgg&ebxsLQ09h0C!T<mO diff --git a/vipra-ui/public/favicon-194x194.png b/vipra-ui/public/favicon-194x194.png deleted file mode 100644 index 21aebd21587c3e1e8ead181661abfd5c63b7520f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7280 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 My85}Sb4q9e04ZZxYybcN diff --git a/vipra-ui/public/favicon-32x32.png b/vipra-ui/public/favicon-32x32.png deleted file mode 100644 index 5f02b4eddf4ea6a56bfcd19c8b61a406f99d9129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1124 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4i*LmhMUEk>KPaqSkfJR9T^xl_H+M9WCckk zdj$D1FjT2AFf_C<F#KX*U}$*3z))(y!0;-8fx&791A}<MoLzx73=9lRN#5=*4FB8v z&+KPlVBjq9h%9Dc;1&j9Muu5)Bp4VN*h@TpUD@yR2#OmU?la|#V_;zV;_2cT;&FWL zmH3RSsWQhuUjJ;Jo_Fe>BWtC?X70IhKFR3`WlJxdY3kagx%<U2*GVsQI?hB!XzOcf ziC<CJeM0)R+JvAs;f>nNe^YNy664ZlRX5E(x3tve`JY_{zP9Ps&i3W}=fD50v^#(J z`%gCGj8>cCEmeoKx=kJ|3huk{d`C>&|CHDna_7CABJwsLzq9hiB+e_VgeAZBzFT6i z^6?B?<SLuzyxeoHuRcG)&?IWn*{E{s$GX)qz01u{1U*e%@BRB!JDcdE*VdY6<34TK zqbI*ZYPxg^tLN_6Ph~F(TUA=3c#ruUx$g7qRzmxhvlpMcuH1Av^J8b#?b6e#iYD#4 zRyL2zos}gfp0s|}WxDBP`8oHcoRhR>>ud<`Zz_q%-(Gp|`nvc3yJj@WRqJjzIVWJ+ zg3$GI-2X~wZi`-TY$?=LSb6TZ?1XPAA=@rK<J-%osdqVV_u-`$hLarkzWY@1QgoF~ zgELoSX`dK>ytaP0hK0(;RaX|=t3Ad$@k(Z)g4eR+$r42u7X>x%eB~qI+?=(4<q|_- zDR16GA?ZCY%g(Lwn!ZL~x_rIcBhL8qhs;))hRsU2v!Tj&OGrxe0?+2lOWDF}``cX> zE^?gUa*M@1?!g24WabyF0(H=K#8zY%`zl;7{0HL_V+X)7)!?)%#}wJd2X-&	 zdnPQ|WISj7lAI4~Hrq|}p88<@t1pvnqt^1(zdrxO{nX>@Exq@SnEj6Ze=c%W?$wt| zp4V#TZ#5N@I@gmnY2wORK3<!*=L(km3@OZ7;PdGAoGte_CzZU|B>McztIwyOcw}En zTidgFSB;{%=_RkiEkDi(ZCq;3bJc3AQvI)M>z*9pbuN{%$=<&7-p7eY<+fdN`YJU2 z&#M*9Y)`r-x3<ju_~h<~{6$fDeO8|fZZ6db|8Us1e^%JzsWU&ETtBDyVCzgNrB92l zYdzYmk#c^;rzwlKw+rt)uF1T;TUhei6UVDze*6CDK5Tj8W*uvoveC_Y@AGK|K{FZa zBNKNPT9^KQey!ji^Hpw15vx#>Tm}XP)e_f;l9a@fRIB8o)Wnih1|tJQQ(Z$NT|@H_ zBV#L5Ln{+YZ39Cq0|P_lr*}~_<mRVjrd8tB;7}Kv$iTo5UKJ8i5|mi3P*9YgmYI{P zP*Pcts*qVwlFYzRG3W6o9*)8=4UJR&r_Xpk4Pszc=GIH*7FHJao-D#Ftl-jMayW%q vd2@)u=^Iy09657D<_P=g29E_^dJM0`1xr3TnNDS3U|{fc^>bP0l+XkKZnEs| diff --git a/vipra-ui/public/favicon-96x96.png b/vipra-ui/public/favicon-96x96.png deleted file mode 100644 index db921e4ed2dcd5d09ed8c3feda59dbecdb4f6493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3394 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 diff --git a/vipra-ui/public/favicon.ico b/vipra-ui/public/favicon.ico deleted file mode 100644 index 5732db6037b1f85a34fb650544f2c844313a2855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 diff --git a/vipra-ui/public/manifest.json b/vipra-ui/public/manifest.json deleted file mode 100644 index fd248ba8..00000000 --- a/vipra-ui/public/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "Vipra", - "icons": [ - { - "src": "\/android-chrome-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": 0.75 - }, - { - "src": "\/android-chrome-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": 1 - }, - { - "src": "\/android-chrome-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": 1.5 - }, - { - "src": "\/android-chrome-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": 2 - }, - { - "src": "\/android-chrome-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": 3 - }, - { - "src": "\/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": 4 - } - ] -} diff --git a/vipra-ui/public/mstile-144x144.png b/vipra-ui/public/mstile-144x144.png deleted file mode 100644 index f8bbf5181ec917852ccc7d485261c378ccbc7585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4665 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 diff --git a/vipra-ui/public/mstile-150x150.png b/vipra-ui/public/mstile-150x150.png deleted file mode 100644 index 695de5e588f6771411672a7ab77d11ff9f7b19c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4592 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 diff --git a/vipra-ui/public/mstile-310x150.png b/vipra-ui/public/mstile-310x150.png deleted file mode 100644 index 31d0d95b73f37cb775eaa1fbe11152400f961d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4923 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 O0>;zT&t;ucLK6UsLk{%- diff --git a/vipra-ui/public/mstile-310x310.png b/vipra-ui/public/mstile-310x310.png deleted file mode 100644 index 632930e827817f36965e2402748adef9b9311d96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10210 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 diff --git a/vipra-ui/public/mstile-70x70.png b/vipra-ui/public/mstile-70x70.png deleted file mode 100644 index e6ece63cb1b9caa78fc2cebb370e07d9f2e5db04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3220 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4i*LmhD`I74h#$oEa{HEjtmSN`?>!lvNA9* zC?tCX`7$t6sWC7#v@kII0;zw&z))(y!0;-8fx&791A}<MoLzx73=9lRN#5=*4FB8v z&+KPlU|=ut^mS#w&m$;qY`D*qGme3Q+tSm;F{I+w+d0)GB3EUP+n0a#<M6ET6mvW< zsmg_CCS$JSLG~`Cqv91?wuOG#@@S(7_cgiKE2FxPuez$$HKi&_eu1s%QKheet_Qe6 zC*HKF=vZ*VIi`_?>Bx+hH~0QA`n-Fm_T=2VH)<O{|IL2)=Fai&*2VAt-o5|+9xK0` zO~r=?2b<ZUjKlw>UEIwXPPM#H^h=XCtg+DE_NAMc-K@+f3e`8xsa@MRFE{M&cE1Lr z`RivGTecfZ_$W%|+NfnNnRRwen(EVQ|MEK--1;O=PK`N{V6@e^_H5O(Q>samuijb8 zYVg^jU)r+0$->CHN#|)k%N;?*r%VzrAL*nOFjjJkZk{eaQ`?+1MO^rRghJj^tEw#@ zH!o?ddX?$)NVz+v=w#OB4Qp*q6<=%AQ*M}f%=Hi7;;B~r!YRt3IZ4)6uUvGQVY2Du za~3wkDVH@Dith{iwD;KEu+ZrO2Tq7zo+<kI-QhPWtofU!#fCY*wruB)pC@rfLoZEa zZ&Ka8LvxD?6|S6QHTc!_`$ypwm+L;N=QoGct-D^M96jfl$T9<iRadv((U<41x!lQW zz;4vuDOl=hX3#%<jqN!vqZWxnA?p@fJStNz{;{`IW8Su<OB?<vJTq2o`d2saNmzE| zhwSC4ten?=gn!VpwU}A*yUZ$m())PXoL4POGycvv?kc$b)J(Z~@*TGqai4lH{onPQ zhYLQvoo(l1^mlbrUv9GscY@d_^>rb6EfHsYueHaw3TvC+2>CNH;<Uk^E*9k#-|GcR zG9*<(8I+yxoHR-Om6bGakM4)1(y8p6dEfV+7TA}3-z!~ZKC8Kfw))EE1(m#?r=H)^ z={_S@cKdzln~Nqe&D3`KblG9A8}HxBCeKs7x;`7VtUDQ=t=w})v&`s7@}Fy2%^@?- zmn$ht9yRzC>|i!&=cjoMZtjM^KZ`t`D*b=Tb#|GE_Lsl<t(qsEealr_(O4b5JU^vN zFy?Rto7)Y}^ohO4%oE<4q;<6RY{>T!xo+sbf3D|mrZbv0&g<sJsIKRIlhL|IVEJcm zz0JBu+_F|a%;x*J<m;xg*yPH2b!DH7)gq;>BN!HMuV}qkW_04}wfd;c3iG@KF=mDp zi|2^0N!0$Gv7nRf^uda}e{<SJ_aD0Rp{L0Av4v->L(IYNZ(L?r`o7<K=|$a{XYDCW zTXmjV?o=x<xcBRcaS~7Pn<paoo$M~0o;fA+!V6uwCHv>r_}>eZH2yZbdFJ_)OB@@U zBtLyTFfAeZk15;iKeuN%d|!Oh=Frjn7m+M>bKB=Q#dIX9zpB*PVD7ev@z2ce1}nKq z;nAm=3MDp9%!oU^*{f)g#H#7~oJ<loW0v+jKmD`(i*VY)iU#h6zjw~XHfEV;t({_X zI=$@D`K7XI4HmtDWs4fq7x~UNlD|BYN#@D*qJ5<|)>f@OyJv}t`YhX$BGtv*J;8Ux zMAvkzEaJKBxp=1ispX|Uvg{Eq-s#d_k?kA_&x+<vs=0bg{O9h8=XI)>*MEvQVEX)< z;EAtmwh33xxvj`lAhi7E_1_U<e>Y2<w|Kz)Zu_HoUv4=qm}s6M`P+Tw&$rJD;~Nsc zY+G-B%6FpuEXzMFISCIFPk)`o_|Ln$e`SlKtm1)!qdTI6JIaEm8cF?dvWuU(!F|8! ziQJkb^(xK#Nvl{4jHa*#%y2lv{QM$wgr2=0TP??xi<>0QB}JTK6}a0M^^Jl3ri`k; zSvup{Ju9<U9%sC&SmgD)f45G9PQbDQwKbxu{_^{{-z>Gs{PM6k>Jhj4(in!o1r-fh zDPJt^_uo5E7E{=@wb8aqe4+m-R)zS;Deu&)DuaFaHUwLhwOb!hbZvO|*8bf#hMT8k z0`wR0&Q-e9IO_*<q*O-0E{C#LtRCTBIcm2q*lzmacPdO=T5)L@Z+`o2KEag{N&6(~ zFT00KJpXA4*Me)SJ}%v<>##T|lP`0k?*vgF5y>3?RSYvvX)Jk|S`gh}H7h4PgK_3W zUk;BlwW&4^=0`<W3+k0t^H?nCIcR$^qGv~6+^J`?XI<eA@IL)%d%E^*$w~eHp4_+| zza*}q`OT*F+!A*fndU6wX_|ez{!S|68n;x_X^xqzZc0ab%{{xudnbd#R3pK8i7Bc9 zK{5h$ep`jN$|^gk>PE|Z9X)V`tKnqlx36Y)Z#fw4LaXM@-yD2$-<jhTM-}%UyLG!x z?mFv+tW3`4pF6Ic@myfgF2F46{vt8#)f3OQ=s&tgZ^`%0bYj#Cd^UG&)y0D;92=%_ z{od6fFR6K>lP%%fv#3<A7_mzmm?kMTgq}`HRofBM<I~F!v#=(Yy>jQG$4!fM0*~Fd zyOWf$=Cp9DVMFGrQ_o_5E{xl^gd-vMDXVJb&KV-*fxEt3K5~|4`{b`SYd0U&%4Cvg zVm{?$(Qkcb@?`CX9S!rfPL@Bpy~}d4frF%-;nbUg>`K2b-QBPAB1*<$*|CF3>o&y~ z*l%Ywd-<$1mf^7ay5|dL<bGTp6#r-6<=8p1OvSp|mCa7ss{R+c(r2|>r{Shmtw-__ zj&G|<c38%=*R9*pE<JT!%(*iM?Ed~)$CdD_W6A!0lih7OZcE?3*_^n2_m|=$`8z@l z>%V{Y_AaiT@|x+$h5IK=E?M05dv17a`|^st)v^a)=)Fr?R<vrxO!gnEH-Cy1R%rWo z{7#DQ_vy)67Z2H-6HTmdwLZM?roYV*U%};k;-_{q^Pcl6^lS)w@&8N|>%pjc)x}c< zLd}w2#K(xP@!eqeQ2wZmn(LPTrD+!T3!Zi{<X&XwVEg-8Vr>QcWeL4wzp}fwTiM?! z;Bn(G<mNZlQF^yw&g`|a=S~+nHq7YsU&t?T=i&MXJsl3I@oF7H|JOab`|I*m!x=mO zbstr}<B)jd?e-aIxxLH3a=sVM>;HE#P5MmWH$M4;d2xx2JTJaSZJw~vCpG5E%F6=! zAGNj5bvQRMy|~D3z+NODev~EY+r}={J;(W8?~qPCn>VGvZhDfy+k}<L>uMDK343sI zF7TH>Fy~0|TDj?bA5}$bJXGhO&U)oCnWr^nmj9B|J{RW-OEevv$+I+Fd+psrd-r6h zZn$X1$S8BkzWwJEne7MEvQ{o@W3F-T;3?8vq`vn=zH-BN-tM2xTkY!DI5{T>{7tLj zT<1JH^7LYzttR4o*Ktn}_?u-J{pCRv+fmI!iK{ARx%&Cf-KF8+^d<X=&Q1pp!;aH4 zd{zpbzIw3k-gEgqFZq62uzJj?`+4!^eGMUHiSsw71YGd*b_&_t_;k-%EA4a1m-IL% zX#D-q)Wz|5xlf0aVM~yg=0bVbCzCv_1k_xVORsEb_6-R*YNpLOd$kPLgL}98-Bx;> zUu5knaw6~1iTf{13Ob^)o-TB_RO89VTJZaAIh(}|rQ$uR{d~1IIbT|T;F@i>OzrvO z_YoOojF*px$o0(rcjm*Pb3eX0ZswM7xBIuq;^p~CbEoZF#*k#hf6RBk@c!Bhub7q{ zR8oEOX2QOh8<xNS8E*N_Dq(p?%>M7Wzuz2_#RQV4?svHPsKw6My7>Nev4)dn@7F&q zQ~z>!?w`lkMHd{M{9XU&t?j-0`WTM)9rV7Jd0OrLt}mr57Te<NeWVljuJeg^Z%AJK z{>!!PcICOhteD<xnlB^0`@Z(An@4>vE`9Nu<HNpMQ%{$<$NMUOZ$5HpYi!p(w~RCT zGYd=@=C;55|D;7W-jl)jZat^J%bve_9`T1o%yxCM#-yo#-_$ZS<Z^rAABRZ!D+Zgj zFI|u3?s?|=H2$`Ni?O8O+~ub)UGL&!FaO1F5N6r(LfO`7hn`QovCX^q<9Tk|3R$wO zH$S<*R?jOwxFKOje(R5hd2=Mbn%`iroGSTn`{~J>{_2_*JP<Yebo8gsv)^BoyWPq* z&2nAi)3*K|yom~DI17EWSMj*}V`Z~REdv9CYKdz^NlIc#s#S7PYGO$$gOP!usji`s zuAzB|k+GGjp_PfHwt=CQfq|j&)4M1da`RI%(<*UmaHxw-WME(juL_AM2}&$iC@9KL z%gjktD5)$+RmdzTNoHWEnDh7(4@Y5`hQ=xX(`P)N1~D)zbL%B@3o8qIPZnVoR&Z%B zIh?|*yg5YS^o=Vgj+{9nbA<hLgU13dJ%(4}f+e4vOs6t1Ffe$!`njxgN@xNA(h=c5 diff --git a/vipra-ui/public/robots.txt b/vipra-ui/public/robots.txt deleted file mode 100644 index f5916452..00000000 --- a/vipra-ui/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# http://www.robotstxt.org -User-agent: * -Disallow: diff --git a/vipra-ui/public/safari-pinned-tab.svg b/vipra-ui/public/safari-pinned-tab.svg deleted file mode 100644 index 93d972a5..00000000 --- a/vipra-ui/public/safari-pinned-tab.svg +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" - "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> -<svg version="1.0" xmlns="http://www.w3.org/2000/svg" - width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000" - preserveAspectRatio="xMidYMid meet"> -<metadata> -Created by potrace 1.11, written by Peter Selinger 2001-2013 -</metadata> -<g transform="translate(0.000000,512.000000) scale(0.100000,-0.100000)" -fill="#000000" stroke="none"> -<path d="M3010 5110 c-129 -17 -159 -22 -240 -40 -112 -26 -104 -24 -196 -55 --184 -63 -388 -173 -539 -289 -82 -64 -103 -83 -202 -183 -298 -302 -477 -668 --537 -1098 -14 -100 -15 -399 -1 -495 28 -199 96 -426 177 -586 l31 -61 -691 --692 c-559 -559 -700 -705 -731 -759 -167 -282 -60 -647 233 -791 188 -93 409 --76 576 42 14 10 337 329 718 709 l692 691 98 -46 c170 -80 379 -140 569 -165 -73 -9 367 -9 453 0 266 28 570 135 800 281 169 107 372 290 487 437 213 274 -356 613 399 945 9 72 11 387 3 458 -39 336 -165 653 -374 938 -63 87 -237 269 --320 336 -155 126 -414 270 -586 327 -107 35 -259 72 -359 86 -97 14 -377 20 --460 10z m455 -333 c391 -73 703 -251 961 -552 127 -147 236 -347 298 -544 58 --185 75 -314 71 -526 -4 -161 -6 -176 -36 -305 -43 -185 -95 -316 -188 -472 --233 -392 -621 -661 -1085 -754 -101 -20 -394 -26 -506 -11 -237 33 -509 142 --709 285 -122 86 -288 252 -373 372 -121 171 -223 403 -262 596 -8 43 -18 93 --21 109 -21 104 -8 467 20 554 3 11 8 31 10 43 3 13 15 59 29 103 147 483 534 -879 1016 1039 58 19 116 37 130 40 14 2 50 10 80 16 30 6 80 13 110 17 30 3 -57 7 58 9 10 8 329 -7 397 -19z m-1730 -2814 c70 -85 212 -223 279 -271 20 --14 36 -28 36 -32 0 -10 -1285 -1295 -1325 -1326 -45 -34 -120 -54 -183 -49 --100 7 -191 72 -235 165 -31 65 -29 168 4 235 19 38 177 203 680 707 360 361 -659 657 664 657 6 0 42 -39 80 -86z"/> -<path d="M2995 4299 c-351 -67 -642 -288 -800 -607 -39 -80 -80 -197 -89 -256 --4 -21 -8 -42 -11 -46 -3 -4 -8 -55 -11 -113 -6 -104 -6 -106 19 -131 45 -45 -119 -27 131 32 3 15 8 59 11 99 17 273 178 553 408 712 78 53 219 119 293 136 -10 2 37 9 59 14 45 10 130 20 188 21 72 0 110 74 67 130 -17 23 -26 25 -97 26 --43 0 -118 -7 -168 -17z"/> -</g> -</svg> diff --git a/vipra-ui/testem.json b/vipra-ui/testem.json deleted file mode 100644 index 0f35392c..00000000 --- a/vipra-ui/testem.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "framework": "qunit", - "test_page": "tests/index.html?hidepassed", - "disable_watching": true, - "launch_in_ci": [ - "PhantomJS" - ], - "launch_in_dev": [ - "PhantomJS", - "Chrome" - ] -} diff --git a/vipra-ui/tests/.jshintrc b/vipra-ui/tests/.jshintrc deleted file mode 100644 index 6ec0b7c1..00000000 --- a/vipra-ui/tests/.jshintrc +++ /dev/null @@ -1,52 +0,0 @@ -{ - "predef": [ - "document", - "window", - "location", - "setTimeout", - "$", - "-Promise", - "define", - "console", - "visit", - "exists", - "fillIn", - "click", - "keyEvent", - "triggerEvent", - "find", - "findWithAssert", - "wait", - "DS", - "andThen", - "currentURL", - "currentPath", - "currentRouteName" - ], - "node": false, - "browser": false, - "boss": true, - "curly": true, - "debug": false, - "devel": false, - "eqeqeq": true, - "evil": true, - "forin": false, - "immed": false, - "laxbreak": false, - "newcap": true, - "noarg": true, - "noempty": false, - "nonew": false, - "nomen": false, - "onevar": false, - "plusplus": false, - "regexp": false, - "undef": true, - "sub": true, - "strict": false, - "white": false, - "eqnull": true, - "esnext": true, - "unused": true -} diff --git a/vipra-ui/tests/helpers/destroy-app.js b/vipra-ui/tests/helpers/destroy-app.js deleted file mode 100644 index c3d4d1ab..00000000 --- a/vipra-ui/tests/helpers/destroy-app.js +++ /dev/null @@ -1,5 +0,0 @@ -import Ember from 'ember'; - -export default function destroyApp(application) { - Ember.run(application, 'destroy'); -} diff --git a/vipra-ui/tests/helpers/module-for-acceptance.js b/vipra-ui/tests/helpers/module-for-acceptance.js deleted file mode 100644 index ed23003d..00000000 --- a/vipra-ui/tests/helpers/module-for-acceptance.js +++ /dev/null @@ -1,23 +0,0 @@ -import { module } from 'qunit'; -import startApp from '../helpers/start-app'; -import destroyApp from '../helpers/destroy-app'; - -export default function(name, options = {}) { - module(name, { - beforeEach() { - this.application = startApp(); - - if (options.beforeEach) { - options.beforeEach.apply(this, arguments); - } - }, - - afterEach() { - destroyApp(this.application); - - if (options.afterEach) { - options.afterEach.apply(this, arguments); - } - } - }); -} diff --git a/vipra-ui/tests/helpers/resolver.js b/vipra-ui/tests/helpers/resolver.js deleted file mode 100644 index ebfb4e4d..00000000 --- a/vipra-ui/tests/helpers/resolver.js +++ /dev/null @@ -1,11 +0,0 @@ -import Resolver from 'ember/resolver'; -import config from '../../config/environment'; - -const resolver = Resolver.create(); - -resolver.namespace = { - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix -}; - -export default resolver; diff --git a/vipra-ui/tests/helpers/start-app.js b/vipra-ui/tests/helpers/start-app.js deleted file mode 100644 index e098f1d5..00000000 --- a/vipra-ui/tests/helpers/start-app.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; -import Application from '../../app'; -import config from '../../config/environment'; - -export default function startApp(attrs) { - let application; - - let attributes = Ember.merge({}, config.APP); - attributes = Ember.merge(attributes, attrs); // use defaults, but you can override; - - Ember.run(() => { - application = Application.create(attributes); - application.setupForTesting(); - application.injectTestHelpers(); - }); - - return application; -} diff --git a/vipra-ui/tests/index.html b/vipra-ui/tests/index.html deleted file mode 100644 index ffe2debf..00000000 --- a/vipra-ui/tests/index.html +++ /dev/null @@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <title>VipraUi Tests</title> - <meta name="description" content=""> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - {{content-for 'head'}} - {{content-for 'test-head'}} - - <link rel="stylesheet" href="assets/vendor.css"> - <link rel="stylesheet" href="assets/vipra-ui.css"> - <link rel="stylesheet" href="assets/test-support.css"> - - {{content-for 'head-footer'}} - {{content-for 'test-head-footer'}} - </head> - <body> - {{content-for 'body'}} - {{content-for 'test-body'}} - - <script src="assets/vendor.js"></script> - <script src="assets/test-support.js"></script> - <script src="assets/vipra-ui.js"></script> - <script src="testem.js" integrity=""></script> - <script src="assets/tests.js"></script> - <script src="assets/test-loader.js"></script> - - {{content-for 'body-footer'}} - {{content-for 'test-body-footer'}} - </body> -</html> diff --git a/vipra-ui/tests/integration/.gitkeep b/vipra-ui/tests/integration/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/tests/integration/components/debounced-input-test.js b/vipra-ui/tests/integration/components/debounced-input-test.js deleted file mode 100644 index 323028be..00000000 --- a/vipra-ui/tests/integration/components/debounced-input-test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; - -moduleForComponent('debounced-input', 'Integration | Component | debounced input', { - integration: true -}); - -test('it renders', function(assert) { - - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL + - - this.render(hbs`{{debounced-input}}`); - - assert.equal(this.$().text().trim(), ''); - - // Template block usage:" + EOL + - this.render(hbs` - {{#debounced-input}} - template block text - {{/debounced-input}} - `); - - assert.equal(this.$().text().trim(), 'template block text'); -}); diff --git a/vipra-ui/tests/integration/components/dynamic-high-charts-test.js b/vipra-ui/tests/integration/components/dynamic-high-charts-test.js deleted file mode 100644 index 07810b85..00000000 --- a/vipra-ui/tests/integration/components/dynamic-high-charts-test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; - -moduleForComponent('dynamic-high-charts', 'Integration | Component | dynamic high charts', { - integration: true -}); - -test('it renders', function(assert) { - - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL + - - this.render(hbs`{{dynamic-high-charts}}`); - - assert.equal(this.$().text().trim(), ''); - - // Template block usage:" + EOL + - this.render(hbs` - {{#dynamic-high-charts}} - template block text - {{/dynamic-high-charts}} - `); - - assert.equal(this.$().text().trim(), 'template block text'); -}); diff --git a/vipra-ui/tests/integration/components/item-list-test.js b/vipra-ui/tests/integration/components/item-list-test.js deleted file mode 100644 index bcc52965..00000000 --- a/vipra-ui/tests/integration/components/item-list-test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; - -moduleForComponent('article-list', 'Integration | Component | article list', { - integration: true -}); - -test('it renders', function(assert) { - - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL + - - this.render(hbs`{{article-list}}`); - - assert.equal(this.$().text().trim(), ''); - - // Template block usage:" + EOL + - this.render(hbs` - {{#article-list}} - template block text - {{/article-list}} - `); - - assert.equal(this.$().text().trim(), 'template block text'); -}); diff --git a/vipra-ui/tests/integration/components/pagination-bar-test.js b/vipra-ui/tests/integration/components/pagination-bar-test.js deleted file mode 100644 index d61ba100..00000000 --- a/vipra-ui/tests/integration/components/pagination-bar-test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; - -moduleForComponent('pagination-bar', 'Integration | Component | pagination bar', { - integration: true -}); - -test('it renders', function(assert) { - - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL + - - this.render(hbs`{{pagination-bar}}`); - - assert.equal(this.$().text().trim(), ''); - - // Template block usage:" + EOL + - this.render(hbs` - {{#pagination-bar}} - template block text - {{/pagination-bar}} - `); - - assert.equal(this.$().text().trim(), 'template block text'); -}); diff --git a/vipra-ui/tests/integration/components/scroll-top-test.js b/vipra-ui/tests/integration/components/scroll-top-test.js deleted file mode 100644 index 26cf1dc6..00000000 --- a/vipra-ui/tests/integration/components/scroll-top-test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; - -moduleForComponent('scroll-top', 'Integration | Component | scroll top', { - integration: true -}); - -test('it renders', function(assert) { - - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL + - - this.render(hbs`{{scroll-top}}`); - - assert.equal(this.$().text().trim(), ''); - - // Template block usage:" + EOL + - this.render(hbs` - {{#scroll-top}} - template block text - {{/scroll-top}} - `); - - assert.equal(this.$().text().trim(), 'template block text'); -}); diff --git a/vipra-ui/tests/integration/components/text-marker-test.js b/vipra-ui/tests/integration/components/text-marker-test.js deleted file mode 100644 index 1af17c61..00000000 --- a/vipra-ui/tests/integration/components/text-marker-test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; - -moduleForComponent('text-marker', 'Integration | Component | text marker', { - integration: true -}); - -test('it renders', function(assert) { - - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL + - - this.render(hbs`{{text-marker}}`); - - assert.equal(this.$().text().trim(), ''); - - // Template block usage:" + EOL + - this.render(hbs` - {{#text-marker}} - template block text - {{/text-marker}} - `); - - assert.equal(this.$().text().trim(), 'template block text'); -}); diff --git a/vipra-ui/tests/integration/components/topic-link-test.js b/vipra-ui/tests/integration/components/topic-link-test.js deleted file mode 100644 index d3ea4cf9..00000000 --- a/vipra-ui/tests/integration/components/topic-link-test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { moduleForComponent, test } from 'ember-qunit'; -import hbs from 'htmlbars-inline-precompile'; - -moduleForComponent('topic-link', 'Integration | Component | topic link', { - integration: true -}); - -test('it renders', function(assert) { - - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... });" + EOL + EOL + - - this.render(hbs`{{topic-link}}`); - - assert.equal(this.$().text().trim(), ''); - - // Template block usage:" + EOL + - this.render(hbs` - {{#topic-link}} - template block text - {{/topic-link}} - `); - - assert.equal(this.$().text().trim(), 'template block text'); -}); diff --git a/vipra-ui/tests/test-helper.js b/vipra-ui/tests/test-helper.js deleted file mode 100644 index e6cfb70f..00000000 --- a/vipra-ui/tests/test-helper.js +++ /dev/null @@ -1,6 +0,0 @@ -import resolver from './helpers/resolver'; -import { - setResolver -} from 'ember-qunit'; - -setResolver(resolver); diff --git a/vipra-ui/tests/unit/.gitkeep b/vipra-ui/tests/unit/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/tests/unit/adapters/application-test.js b/vipra-ui/tests/unit/adapters/application-test.js deleted file mode 100644 index f0a2101e..00000000 --- a/vipra-ui/tests/unit/adapters/application-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { moduleFor, test } from 'ember-qunit'; - -moduleFor('adapter:application', 'Unit | Adapter | application', { - // Specify the other units that are required for this test. - // needs: ['serializer:foo'] -}); - -// Replace this with your real tests. -test('it exists', function(assert) { - let adapter = this.subject(); - assert.ok(adapter); -}); diff --git a/vipra-ui/tests/unit/controllers/articles-test.js b/vipra-ui/tests/unit/controllers/articles-test.js deleted file mode 100644 index 2f09e3a9..00000000 --- a/vipra-ui/tests/unit/controllers/articles-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { moduleFor, test } from 'ember-qunit'; - -moduleFor('controller:articles', 'Unit | Controller | articles', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] -}); - -// Replace this with your real tests. -test('it exists', function(assert) { - let controller = this.subject(); - assert.ok(controller); -}); diff --git a/vipra-ui/tests/unit/controllers/words-test.js b/vipra-ui/tests/unit/controllers/words-test.js deleted file mode 100644 index f4014164..00000000 --- a/vipra-ui/tests/unit/controllers/words-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { moduleFor, test } from 'ember-qunit'; - -moduleFor('controller:words', 'Unit | Controller | words', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] -}); - -// Replace this with your real tests. -test('it exists', function(assert) { - let controller = this.subject(); - assert.ok(controller); -}); diff --git a/vipra-ui/tests/unit/helpers/is-empty-test.js b/vipra-ui/tests/unit/helpers/is-empty-test.js deleted file mode 100644 index cc3fb38e..00000000 --- a/vipra-ui/tests/unit/helpers/is-empty-test.js +++ /dev/null @@ -1,10 +0,0 @@ -import { isEmpty } from '../../../helpers/is-empty'; -import { module, test } from 'qunit'; - -module('Unit | Helper | is empty'); - -// Replace this with your real tests. -test('it works', function(assert) { - let result = isEmpty(42); - assert.ok(result); -}); diff --git a/vipra-ui/tests/unit/helpers/pluralize-test.js b/vipra-ui/tests/unit/helpers/pluralize-test.js deleted file mode 100644 index 12ce3b9d..00000000 --- a/vipra-ui/tests/unit/helpers/pluralize-test.js +++ /dev/null @@ -1,10 +0,0 @@ -import { pluralize } from '../../../helpers/pluralize'; -import { module, test } from 'qunit'; - -module('Unit | Helper | pluralize'); - -// Replace this with your real tests. -test('it works', function(assert) { - let result = pluralize(42); - assert.ok(result); -}); diff --git a/vipra-ui/tests/unit/helpers/topic-share-test.js b/vipra-ui/tests/unit/helpers/topic-share-test.js deleted file mode 100644 index a7e8b95a..00000000 --- a/vipra-ui/tests/unit/helpers/topic-share-test.js +++ /dev/null @@ -1,10 +0,0 @@ -import { topicShare } from '../../../helpers/topic-share'; -import { module, test } from 'qunit'; - -module('Unit | Helper | topic share'); - -// Replace this with your real tests. -test('it works', function(assert) { - let result = topicShare(42); - assert.ok(result); -}); diff --git a/vipra-ui/tests/unit/models/article-test.js b/vipra-ui/tests/unit/models/article-test.js deleted file mode 100644 index 0afadacc..00000000 --- a/vipra-ui/tests/unit/models/article-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { moduleForModel, test } from 'ember-qunit'; - -moduleForModel('article', 'Unit | Model | article', { - // Specify the other units that are required for this test. - needs: [] -}); - -test('it exists', function(assert) { - let model = this.subject(); - // let store = this.store(); - assert.ok(!!model); -}); diff --git a/vipra-ui/tests/unit/models/import-test.js b/vipra-ui/tests/unit/models/import-test.js deleted file mode 100644 index 569cba60..00000000 --- a/vipra-ui/tests/unit/models/import-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { moduleForModel, test } from 'ember-qunit'; - -moduleForModel('import', 'Unit | Model | import', { - // Specify the other units that are required for this test. - needs: [] -}); - -test('it exists', function(assert) { - let model = this.subject(); - // let store = this.store(); - assert.ok(!!model); -}); diff --git a/vipra-ui/tests/unit/models/topic-test.js b/vipra-ui/tests/unit/models/topic-test.js deleted file mode 100644 index 8d71d76e..00000000 --- a/vipra-ui/tests/unit/models/topic-test.js +++ /dev/null @@ -1,12 +0,0 @@ -import { moduleForModel, test } from 'ember-qunit'; - -moduleForModel('topic', 'Unit | Model | topic', { - // Specify the other units that are required for this test. - needs: [] -}); - -test('it exists', function(assert) { - let model = this.subject(); - // let store = this.store(); - assert.ok(!!model); -}); diff --git a/vipra-ui/tests/unit/routes/article-test.js b/vipra-ui/tests/unit/routes/article-test.js deleted file mode 100644 index a9185964..00000000 --- a/vipra-ui/tests/unit/routes/article-test.js +++ /dev/null @@ -1,11 +0,0 @@ -import { moduleFor, test } from 'ember-qunit'; - -moduleFor('route:article', 'Unit | Route | article', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] -}); - -test('it exists', function(assert) { - let route = this.subject(); - assert.ok(route); -}); diff --git a/vipra-ui/tests/unit/routes/index-test.js b/vipra-ui/tests/unit/routes/index-test.js deleted file mode 100644 index 5d0f50da..00000000 --- a/vipra-ui/tests/unit/routes/index-test.js +++ /dev/null @@ -1,11 +0,0 @@ -import { moduleFor, test } from 'ember-qunit'; - -moduleFor('route:index', 'Unit | Route | index', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] -}); - -test('it exists', function(assert) { - let route = this.subject(); - assert.ok(route); -}); diff --git a/vipra-ui/tests/unit/routes/not-found-test.js b/vipra-ui/tests/unit/routes/not-found-test.js deleted file mode 100644 index 2375b9bb..00000000 --- a/vipra-ui/tests/unit/routes/not-found-test.js +++ /dev/null @@ -1,11 +0,0 @@ -import { moduleFor, test } from 'ember-qunit'; - -moduleFor('route:not-found', 'Unit | Route | not found', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] -}); - -test('it exists', function(assert) { - let route = this.subject(); - assert.ok(route); -}); diff --git a/vipra-ui/tests/unit/routes/topics-test.js b/vipra-ui/tests/unit/routes/topics-test.js deleted file mode 100644 index c0218b73..00000000 --- a/vipra-ui/tests/unit/routes/topics-test.js +++ /dev/null @@ -1,11 +0,0 @@ -import { moduleFor, test } from 'ember-qunit'; - -moduleFor('route:topics', 'Unit | Route | topics', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] -}); - -test('it exists', function(assert) { - let route = this.subject(); - assert.ok(route); -}); diff --git a/vipra-ui/tests/unit/routes/words-test.js b/vipra-ui/tests/unit/routes/words-test.js deleted file mode 100644 index ce62d399..00000000 --- a/vipra-ui/tests/unit/routes/words-test.js +++ /dev/null @@ -1,11 +0,0 @@ -import { moduleFor, test } from 'ember-qunit'; - -moduleFor('route:words', 'Unit | Route | words', { - // Specify the other units that are required for this test. - // needs: ['controller:foo'] -}); - -test('it exists', function(assert) { - let route = this.subject(); - assert.ok(route); -}); diff --git a/vipra-ui/vendor/.gitkeep b/vipra-ui/vendor/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/vipra-ui/webapp/WEB-INF/web.xml b/vipra-ui/webapp/WEB-INF/web.xml deleted file mode 100644 index 55266664..00000000 --- a/vipra-ui/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" - version="3.1"> - <welcome-file-list> - <welcome-file>index.html</welcome-file> - </welcome-file-list> -</web-app> \ No newline at end of file diff --git a/vipra-util/src/main/java/de/vipra/util/an/JsonType.java b/vipra-util/src/main/java/de/vipra/util/an/JsonType.java deleted file mode 100644 index e3a30187..00000000 --- a/vipra-util/src/main/java/de/vipra/util/an/JsonType.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.vipra.util.an; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface JsonType { - - public String value(); - -} diff --git a/vipra-util/src/main/java/de/vipra/util/an/JsonWrap.java b/vipra-util/src/main/java/de/vipra/util/an/JsonWrap.java deleted file mode 100644 index bfeea312..00000000 --- a/vipra-util/src/main/java/de/vipra/util/an/JsonWrap.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.vipra.util.an; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface JsonWrap { - - public String value() default ""; - -} diff --git a/vipra-util/src/main/java/de/vipra/util/model/Article.java b/vipra-util/src/main/java/de/vipra/util/model/Article.java index 892dcbad..fc65f56b 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/Article.java +++ b/vipra-util/src/main/java/de/vipra/util/model/Article.java @@ -8,10 +8,7 @@ import org.mongodb.morphia.annotations.Id; import org.mongodb.morphia.annotations.Index; import org.mongodb.morphia.annotations.Indexes; -import de.vipra.util.an.JsonType; - @SuppressWarnings("serial") -@JsonType("article") @Entity(value = "articles", noClassnameStored = true) @Indexes({ @Index("title"), @Index("date"), @Index("-created") }) public class Article implements Model<ObjectId>, Serializable { diff --git a/vipra-util/src/main/java/de/vipra/util/model/ArticleFull.java b/vipra-util/src/main/java/de/vipra/util/model/ArticleFull.java index 26b42d38..5dc4c422 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/ArticleFull.java +++ b/vipra-util/src/main/java/de/vipra/util/model/ArticleFull.java @@ -20,12 +20,9 @@ import de.vipra.util.Constants; import de.vipra.util.FileUtils; import de.vipra.util.MongoUtils; import de.vipra.util.StringUtils; -import de.vipra.util.an.JsonType; -import de.vipra.util.an.JsonWrap; import de.vipra.util.an.QueryIgnore; @SuppressWarnings("serial") -@JsonType("article") @Entity(value = "articles", noClassnameStored = true) @Indexes({ @Index("title"), @Index("date"), @Index("-created") }) public class ArticleFull extends FileModel<ObjectId> implements Serializable { @@ -33,33 +30,25 @@ public class ArticleFull extends FileModel<ObjectId> implements Serializable { @Id private ObjectId id; - @JsonWrap("attributes") private String title; - @JsonWrap("attributes") @QueryIgnore(multi = true) private String text; - @JsonWrap("attributes") private String url; - @JsonWrap("attributes") private Date date; @Embedded - @JsonWrap("attributes") @QueryIgnore(multi = true) private List<TopicRef> topics; @Embedded - @JsonWrap("attributes") @QueryIgnore(multi = true) private ArticleStats stats; - @JsonWrap("attributes") private Date created; - @JsonWrap("attributes") private Date modified; @Override diff --git a/vipra-util/src/main/java/de/vipra/util/model/Import.java b/vipra-util/src/main/java/de/vipra/util/model/Import.java index d5da6a81..a8969738 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/Import.java +++ b/vipra-util/src/main/java/de/vipra/util/model/Import.java @@ -12,12 +12,9 @@ import org.mongodb.morphia.annotations.Indexes; import org.mongodb.morphia.annotations.PrePersist; import org.mongodb.morphia.annotations.Reference; -import de.vipra.util.an.JsonType; -import de.vipra.util.an.JsonWrap; import de.vipra.util.an.QueryIgnore; @SuppressWarnings("serial") -@JsonType("import") @Entity(value = "imports", noClassnameStored = true) @Indexes({ @Index("date") }) public class Import implements Model<ObjectId>, Serializable { @@ -25,34 +22,26 @@ public class Import implements Model<ObjectId>, Serializable { @Id private ObjectId id; - @JsonWrap("attributes") private Date date; - @JsonWrap("attributes") private long duration; - @JsonWrap("attributes") @QueryIgnore(multi = true) @Reference(ignoreMissing = true) private List<Article> articles; - @JsonWrap("attributes") private int articlesCount; - @JsonWrap("attributes") @QueryIgnore(multi = true) @Reference(ignoreMissing = true) private List<Topic> topics; - @JsonWrap("attributes") private int topicsCount; - @JsonWrap("attributes") @QueryIgnore(multi = true) @Reference(ignoreMissing = true) private List<Word> words; - @JsonWrap("attributes") private int wordsCount; @Override diff --git a/vipra-util/src/main/java/de/vipra/util/model/Topic.java b/vipra-util/src/main/java/de/vipra/util/model/Topic.java index 8678b468..5f097b90 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/Topic.java +++ b/vipra-util/src/main/java/de/vipra/util/model/Topic.java @@ -9,10 +9,8 @@ import org.mongodb.morphia.annotations.Index; import org.mongodb.morphia.annotations.Indexes; import de.vipra.util.MongoUtils; -import de.vipra.util.an.JsonType; @SuppressWarnings("serial") -@JsonType("topic") @Entity(value = "topics", noClassnameStored = true) @Indexes({ @Index("name"), @Index("-created") }) public class Topic implements Model<ObjectId>, Serializable { diff --git a/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java b/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java index 8797b6b6..63750c08 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java +++ b/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java @@ -14,33 +14,25 @@ import org.mongodb.morphia.annotations.PrePersist; import de.vipra.util.Constants; import de.vipra.util.MongoUtils; import de.vipra.util.StringUtils; -import de.vipra.util.an.JsonType; -import de.vipra.util.an.JsonWrap; import de.vipra.util.an.QueryIgnore; @SuppressWarnings("serial") -@JsonType("topic") @Entity(value = "topics", noClassnameStored = true) public class TopicFull implements Model<ObjectId>, Serializable { @Id private ObjectId id; - @JsonWrap("attributes") private String name; - @JsonWrap("attributes") private int index; @Embedded - @JsonWrap("attributes") @QueryIgnore(multi = true) private List<TopicWord> words; - @JsonWrap("attributes") private Date created; - @JsonWrap("attributes") private Date modified; @Override diff --git a/vipra-util/src/main/java/de/vipra/util/model/Word.java b/vipra-util/src/main/java/de/vipra/util/model/Word.java index 954eb415..06758a80 100644 --- a/vipra-util/src/main/java/de/vipra/util/model/Word.java +++ b/vipra-util/src/main/java/de/vipra/util/model/Word.java @@ -14,12 +14,9 @@ import org.mongodb.morphia.annotations.Transient; import com.fasterxml.jackson.annotation.JsonIgnore; -import de.vipra.util.an.JsonType; -import de.vipra.util.an.JsonWrap; import de.vipra.util.an.QueryIgnore; @SuppressWarnings("serial") -@JsonType("word") @Entity(value = "words", noClassnameStored = true) @Indexes(@Index("-created")) public class Word implements Model<String>, Serializable { @@ -40,7 +37,6 @@ public class Word implements Model<String>, Serializable { private String word; @QueryIgnore(multi = true) - @JsonWrap("attributes") private Date created; /** -- GitLab