diff --git a/.dockerignore b/.dockerignore index 73541da6..06fda641 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,13 +1,19 @@ * !app/ -app/staticfiles/ -app/db.sqlite3 -app/server/node_modules/ -app/server/static/bundle/ -app/server/webpack-stats.json -!data/ !tests/ !tools/ !.coveragerc !.flake8 !requirements.txt + +app/**/bundle/ +app/**/node_modules/ +app/**/webpack-stats.json + +app/**/*.sqlite3 +app/**/.env +app/**/junitxml/ +app/**/staticfiles/ +app/**/venv/ +app/**/__pycache__/ +tests/**/__pycache__/ diff --git a/.gitignore b/.gitignore index 1a9bd283..9320c27a 100644 --- a/.gitignore +++ b/.gitignore @@ -83,6 +83,8 @@ junitxml/ # Django stuff: *.log local_settings.py +*.sqlite3 +staticfiles/ # Flask stuff: instance/ @@ -192,14 +194,7 @@ fabric.properties pyvenv.cfg pip-selfcheck.json -/data/raw/* -/data/sparql/* - -# ignore db to avoid merge conflicts -*.sqlite3 - -# ignore django/node generated static files +# ignore webpack state node_modules/ -app/staticfiles/ -app/server/static/bundle/ -app/server/webpack-stats.json +bundle/ +webpack-stats.json diff --git a/Dockerfile b/Dockerfile index 0cb8843a..133823e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,22 +3,16 @@ FROM python:${PYTHON_VERSION} AS builder ARG NODE_VERSION="8.x" RUN curl -sL "https://deb.nodesource.com/setup_${NODE_VERSION}" | bash - \ - && apt-get install nodejs \ - && rm -rf /var/lib/apt/lists/* + && apt-get install nodejs -COPY app/server/package*.json /doccano/app/server/ -RUN cd /doccano/app/server \ +COPY app/server/static/package*.json /doccano/app/server/static/ +RUN cd /doccano/app/server/static \ && npm ci COPY requirements.txt / RUN pip install -r /requirements.txt \ && pip wheel -r /requirements.txt -w /deps -COPY app/server/static /doccano/app/server/static/ -COPY app/server/webpack.config.js /doccano/app/server/ -RUN cd /doccano/app/server \ - && DEBUG=False npm run build - COPY . /doccano RUN cd /doccano \ @@ -26,14 +20,13 @@ RUN cd /doccano \ FROM builder AS cleaner +RUN cd /doccano/app/server/static \ + && SOURCE_MAP=False DEBUG=False npm run build \ + && rm -rf components pages node_modules .*rc package*.json webpack.config.js + RUN cd /doccano \ && python app/manage.py collectstatic --noinput -RUN rm -rf /doccano/app/server/node_modules/ \ - && rm -rf /doccano/app/server/static/ \ - && rm -rf /doccano/app/staticfiles/js/ \ - && find /doccano/app/staticfiles -type f -name '*.map*' -delete - FROM python:${PYTHON_VERSION}-slim AS runtime COPY --from=builder /deps /deps diff --git a/README.md b/README.md index 0f74213f..01550d82 100644 --- a/README.md +++ b/README.md @@ -102,10 +102,11 @@ Next we need to start the webpack server so that the frontend gets compiled cont Run the following commands in a new shell: ```bash -cd server +cd server/static npm install npm run build # npm start # for developers +cd .. ``` **Option3: Pull the development Docker-Compose images** diff --git a/app/app/settings.py b/app/app/settings.py index 7679ac49..d294ca5b 100644 --- a/app/app/settings.py +++ b/app/app/settings.py @@ -93,12 +93,17 @@ TEMPLATES = [ }, ] +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.0/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = path.join(BASE_DIR, 'staticfiles') + STATICFILES_DIRS = [ static_path for static_path in ( - path.join(BASE_DIR, 'server', 'static', 'bundle'), - path.join(BASE_DIR, 'server', 'static', 'css'), - path.join(BASE_DIR, 'server', 'static', 'images'), + path.join(BASE_DIR, 'server', 'static', 'assets'), + path.join(BASE_DIR, 'server', 'static', 'static'), ) if path.isdir(static_path) ] @@ -109,7 +114,7 @@ WEBPACK_LOADER = { 'DEFAULT': { 'CACHE': not DEBUG, 'BUNDLE_DIR_NAME': 'bundle/', - 'STATS_FILE': path.join(BASE_DIR, 'server', 'webpack-stats.json'), + 'STATS_FILE': path.join(BASE_DIR, 'server', 'static', 'webpack-stats.json'), 'POLL_INTERVAL': 0.1, 'TIMEOUT': None, 'IGNORE': [r'.*\.hot-update.js', r'.+\.map'] @@ -194,11 +199,6 @@ USE_TZ = True TEST_RUNNER = 'xmlrunner.extra.djangotestrunner.XMLTestRunner' TEST_OUTPUT_DIR = path.join(BASE_DIR, 'junitxml') -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/2.0/howto/static-files/ - -STATIC_URL = '/static/' - LOGIN_URL = '/login/' LOGIN_REDIRECT_URL = '/projects/' LOGOUT_REDIRECT_URL = '/' diff --git a/app/server/models.py b/app/server/models.py index 6ff5d630..5049d173 100644 --- a/app/server/models.py +++ b/app/server/models.py @@ -59,7 +59,7 @@ class TextClassificationProject(Project): @property def image(self): - return staticfiles_storage.url('images/cats/text_classification.jpg') + return staticfiles_storage.url('assets/images/cats/text_classification.jpg') def get_bundle_name(self): return 'document_classification' @@ -86,7 +86,7 @@ class SequenceLabelingProject(Project): @property def image(self): - return staticfiles_storage.url('images/cats/sequence_labeling.jpg') + return staticfiles_storage.url('assets/images/cats/sequence_labeling.jpg') def get_bundle_name(self): return 'sequence_labeling' @@ -113,7 +113,7 @@ class Seq2seqProject(Project): @property def image(self): - return staticfiles_storage.url('images/cats/seq2seq.jpg') + return staticfiles_storage.url('assets/images/cats/seq2seq.jpg') def get_bundle_name(self): return 'seq2seq' diff --git a/app/server/static/.eslintrc b/app/server/static/.eslintrc new file mode 100644 index 00000000..4ad11fe8 --- /dev/null +++ b/app/server/static/.eslintrc @@ -0,0 +1,23 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true + }, + "parserOptions": { + "parser": "babel-eslint" + }, + "extends": [ + "airbnb-base", + "plugin:vue/recommended" + ], + "rules": { + "no-new": "off", + "no-param-reassign": "off", + "no-plusplus": "off", + "object-shorthand": "off", + "prefer-destructuring": "off", + "prefer-template": "off", + "vue/max-attributes-per-line": 3 + } +} diff --git a/app/server/static/js/.jsbeautifyrc b/app/server/static/.jsbeautifyrc similarity index 100% rename from app/server/static/js/.jsbeautifyrc rename to app/server/static/.jsbeautifyrc diff --git a/app/server/static/js/.pug-lintrc b/app/server/static/.pug-lintrc similarity index 100% rename from app/server/static/js/.pug-lintrc rename to app/server/static/.pug-lintrc diff --git a/app/server/static/css/admin.css b/app/server/static/assets/css/admin.css similarity index 100% rename from app/server/static/css/admin.css rename to app/server/static/assets/css/admin.css diff --git a/app/server/static/css/annotation.css b/app/server/static/assets/css/annotation.css similarity index 100% rename from app/server/static/css/annotation.css rename to app/server/static/assets/css/annotation.css diff --git a/app/server/static/css/forum.css b/app/server/static/assets/css/forum.css similarity index 99% rename from app/server/static/css/forum.css rename to app/server/static/assets/css/forum.css index d6f53c9e..88fd1129 100644 --- a/app/server/static/css/forum.css +++ b/app/server/static/assets/css/forum.css @@ -115,7 +115,7 @@ p { } .project-image { - background-image: url('/static/images/cat.png'); + background-image: url('/static/assets/images/cat.png'); background-size: cover; background-repeat: no-repeat; background-position: center center; diff --git a/app/server/static/images/cat.png b/app/server/static/assets/images/cat.png old mode 100755 new mode 100644 similarity index 100% rename from app/server/static/images/cat.png rename to app/server/static/assets/images/cat.png diff --git a/app/server/static/images/cats/seq2seq.jpg b/app/server/static/assets/images/cats/seq2seq.jpg similarity index 100% rename from app/server/static/images/cats/seq2seq.jpg rename to app/server/static/assets/images/cats/seq2seq.jpg diff --git a/app/server/static/images/cats/sequence_labeling.jpg b/app/server/static/assets/images/cats/sequence_labeling.jpg similarity index 100% rename from app/server/static/images/cats/sequence_labeling.jpg rename to app/server/static/assets/images/cats/sequence_labeling.jpg diff --git a/app/server/static/images/cats/text_classification.jpg b/app/server/static/assets/images/cats/text_classification.jpg similarity index 100% rename from app/server/static/images/cats/text_classification.jpg rename to app/server/static/assets/images/cats/text_classification.jpg diff --git a/app/server/static/images/logo.png b/app/server/static/assets/images/logo.png similarity index 100% rename from app/server/static/images/logo.png rename to app/server/static/assets/images/logo.png diff --git a/app/server/static/images/named_entity_recognition.png b/app/server/static/assets/images/named_entity_recognition.png similarity index 100% rename from app/server/static/images/named_entity_recognition.png rename to app/server/static/assets/images/named_entity_recognition.png diff --git a/app/server/static/images/sentiment_analysis.png b/app/server/static/assets/images/sentiment_analysis.png similarity index 100% rename from app/server/static/images/sentiment_analysis.png rename to app/server/static/assets/images/sentiment_analysis.png diff --git a/app/server/static/images/sequence_labeling.png b/app/server/static/assets/images/sequence_labeling.png similarity index 100% rename from app/server/static/images/sequence_labeling.png rename to app/server/static/assets/images/sequence_labeling.png diff --git a/app/server/static/images/translation.png b/app/server/static/assets/images/translation.png similarity index 100% rename from app/server/static/images/translation.png rename to app/server/static/assets/images/translation.png diff --git a/app/server/static/js/annotation.pug b/app/server/static/components/annotation.pug similarity index 100% rename from app/server/static/js/annotation.pug rename to app/server/static/components/annotation.pug diff --git a/app/server/static/js/annotator.vue b/app/server/static/components/annotator.vue similarity index 100% rename from app/server/static/js/annotator.vue rename to app/server/static/components/annotator.vue diff --git a/app/server/static/js/demo/demo_annotator.vue b/app/server/static/components/demo/demo_annotator.vue similarity index 100% rename from app/server/static/js/demo/demo_annotator.vue rename to app/server/static/components/demo/demo_annotator.vue diff --git a/app/server/static/js/demo/demo_data.js b/app/server/static/components/demo/demo_data.js similarity index 100% rename from app/server/static/js/demo/demo_data.js rename to app/server/static/components/demo/demo_data.js diff --git a/app/server/static/js/demo/demo_mixin.js b/app/server/static/components/demo/demo_mixin.js similarity index 100% rename from app/server/static/js/demo/demo_mixin.js rename to app/server/static/components/demo/demo_mixin.js diff --git a/app/server/static/js/demo/demo_named_entity.vue b/app/server/static/components/demo/demo_named_entity.vue similarity index 100% rename from app/server/static/js/demo/demo_named_entity.vue rename to app/server/static/components/demo/demo_named_entity.vue diff --git a/app/server/static/js/demo/demo_text_classification.vue b/app/server/static/components/demo/demo_text_classification.vue similarity index 100% rename from app/server/static/js/demo/demo_text_classification.vue rename to app/server/static/components/demo/demo_text_classification.vue diff --git a/app/server/static/js/demo/demo_translation.vue b/app/server/static/components/demo/demo_translation.vue similarity index 100% rename from app/server/static/js/demo/demo_translation.vue rename to app/server/static/components/demo/demo_translation.vue diff --git a/app/server/static/js/directives.js b/app/server/static/components/directives.js similarity index 100% rename from app/server/static/js/directives.js rename to app/server/static/components/directives.js diff --git a/app/server/static/js/document_classification.vue b/app/server/static/components/document_classification.vue similarity index 100% rename from app/server/static/js/document_classification.vue rename to app/server/static/components/document_classification.vue diff --git a/app/server/static/js/download.pug b/app/server/static/components/download.pug similarity index 100% rename from app/server/static/js/download.pug rename to app/server/static/components/download.pug diff --git a/app/server/static/js/download_seq2seq.vue b/app/server/static/components/download_seq2seq.vue similarity index 100% rename from app/server/static/js/download_seq2seq.vue rename to app/server/static/components/download_seq2seq.vue diff --git a/app/server/static/js/download_sequence_labeling.vue b/app/server/static/components/download_sequence_labeling.vue similarity index 100% rename from app/server/static/js/download_sequence_labeling.vue rename to app/server/static/components/download_sequence_labeling.vue diff --git a/app/server/static/js/download_text_classification.vue b/app/server/static/components/download_text_classification.vue similarity index 100% rename from app/server/static/js/download_text_classification.vue rename to app/server/static/components/download_text_classification.vue diff --git a/app/server/static/js/examples/download_seq2seq.csv b/app/server/static/components/examples/download_seq2seq.csv similarity index 100% rename from app/server/static/js/examples/download_seq2seq.csv rename to app/server/static/components/examples/download_seq2seq.csv diff --git a/app/server/static/js/examples/download_seq2seq.jsonl b/app/server/static/components/examples/download_seq2seq.jsonl similarity index 100% rename from app/server/static/js/examples/download_seq2seq.jsonl rename to app/server/static/components/examples/download_seq2seq.jsonl diff --git a/app/server/static/js/examples/download_sequence_labeling.jsonl b/app/server/static/components/examples/download_sequence_labeling.jsonl similarity index 100% rename from app/server/static/js/examples/download_sequence_labeling.jsonl rename to app/server/static/components/examples/download_sequence_labeling.jsonl diff --git a/app/server/static/js/examples/download_text_classification.csv b/app/server/static/components/examples/download_text_classification.csv similarity index 100% rename from app/server/static/js/examples/download_text_classification.csv rename to app/server/static/components/examples/download_text_classification.csv diff --git a/app/server/static/js/examples/download_text_classification.jsonl b/app/server/static/components/examples/download_text_classification.jsonl similarity index 100% rename from app/server/static/js/examples/download_text_classification.jsonl rename to app/server/static/components/examples/download_text_classification.jsonl diff --git a/app/server/static/js/examples/upload_seq2seq.csv b/app/server/static/components/examples/upload_seq2seq.csv similarity index 100% rename from app/server/static/js/examples/upload_seq2seq.csv rename to app/server/static/components/examples/upload_seq2seq.csv diff --git a/app/server/static/js/examples/upload_seq2seq.jsonl b/app/server/static/components/examples/upload_seq2seq.jsonl similarity index 100% rename from app/server/static/js/examples/upload_seq2seq.jsonl rename to app/server/static/components/examples/upload_seq2seq.jsonl diff --git a/app/server/static/js/examples/upload_seq2seq.txt b/app/server/static/components/examples/upload_seq2seq.txt similarity index 100% rename from app/server/static/js/examples/upload_seq2seq.txt rename to app/server/static/components/examples/upload_seq2seq.txt diff --git a/app/server/static/js/examples/upload_sequence_labeling.conll b/app/server/static/components/examples/upload_sequence_labeling.conll similarity index 100% rename from app/server/static/js/examples/upload_sequence_labeling.conll rename to app/server/static/components/examples/upload_sequence_labeling.conll diff --git a/app/server/static/js/examples/upload_sequence_labeling.jsonl b/app/server/static/components/examples/upload_sequence_labeling.jsonl similarity index 100% rename from app/server/static/js/examples/upload_sequence_labeling.jsonl rename to app/server/static/components/examples/upload_sequence_labeling.jsonl diff --git a/app/server/static/js/examples/upload_sequence_labeling.txt b/app/server/static/components/examples/upload_sequence_labeling.txt similarity index 100% rename from app/server/static/js/examples/upload_sequence_labeling.txt rename to app/server/static/components/examples/upload_sequence_labeling.txt diff --git a/app/server/static/js/examples/upload_text_classification.csv b/app/server/static/components/examples/upload_text_classification.csv similarity index 100% rename from app/server/static/js/examples/upload_text_classification.csv rename to app/server/static/components/examples/upload_text_classification.csv diff --git a/app/server/static/js/examples/upload_text_classification.jsonl b/app/server/static/components/examples/upload_text_classification.jsonl similarity index 100% rename from app/server/static/js/examples/upload_text_classification.jsonl rename to app/server/static/components/examples/upload_text_classification.jsonl diff --git a/app/server/static/js/examples/upload_text_classification.txt b/app/server/static/components/examples/upload_text_classification.txt similarity index 100% rename from app/server/static/js/examples/upload_text_classification.txt rename to app/server/static/components/examples/upload_text_classification.txt diff --git a/app/server/static/js/filter.js b/app/server/static/components/filter.js similarity index 100% rename from app/server/static/js/filter.js rename to app/server/static/components/filter.js diff --git a/app/server/static/js/guideline.vue b/app/server/static/components/guideline.vue similarity index 100% rename from app/server/static/js/guideline.vue rename to app/server/static/components/guideline.vue diff --git a/app/server/static/js/http.js b/app/server/static/components/http.js similarity index 100% rename from app/server/static/js/http.js rename to app/server/static/components/http.js diff --git a/app/server/static/js/label.vue b/app/server/static/components/label.vue similarity index 100% rename from app/server/static/js/label.vue rename to app/server/static/components/label.vue diff --git a/app/server/static/js/messages.vue b/app/server/static/components/messages.vue similarity index 100% rename from app/server/static/js/messages.vue rename to app/server/static/components/messages.vue diff --git a/app/server/static/js/mixin.js b/app/server/static/components/mixin.js similarity index 100% rename from app/server/static/js/mixin.js rename to app/server/static/components/mixin.js diff --git a/app/server/static/js/projects.vue b/app/server/static/components/projects.vue similarity index 100% rename from app/server/static/js/projects.vue rename to app/server/static/components/projects.vue diff --git a/app/server/static/js/seq2seq.vue b/app/server/static/components/seq2seq.vue similarity index 100% rename from app/server/static/js/seq2seq.vue rename to app/server/static/components/seq2seq.vue diff --git a/app/server/static/js/sequence_labeling.vue b/app/server/static/components/sequence_labeling.vue similarity index 100% rename from app/server/static/js/sequence_labeling.vue rename to app/server/static/components/sequence_labeling.vue diff --git a/app/server/static/js/stats.vue b/app/server/static/components/stats.vue similarity index 100% rename from app/server/static/js/stats.vue rename to app/server/static/components/stats.vue diff --git a/app/server/static/js/upload.pug b/app/server/static/components/upload.pug similarity index 100% rename from app/server/static/js/upload.pug rename to app/server/static/components/upload.pug diff --git a/app/server/static/js/upload_seq2seq.vue b/app/server/static/components/upload_seq2seq.vue similarity index 100% rename from app/server/static/js/upload_seq2seq.vue rename to app/server/static/components/upload_seq2seq.vue diff --git a/app/server/static/js/upload_sequence_labeling.vue b/app/server/static/components/upload_sequence_labeling.vue similarity index 100% rename from app/server/static/js/upload_sequence_labeling.vue rename to app/server/static/components/upload_sequence_labeling.vue diff --git a/app/server/static/js/upload_text_classification.vue b/app/server/static/components/upload_text_classification.vue similarity index 100% rename from app/server/static/js/upload_text_classification.vue rename to app/server/static/components/upload_text_classification.vue diff --git a/app/server/static/js/.eslintrc.js b/app/server/static/js/.eslintrc.js deleted file mode 100644 index 951612b0..00000000 --- a/app/server/static/js/.eslintrc.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - env: { - browser: true, - es6: true, - node: true, - }, - parserOptions: { - parser: "babel-eslint", - }, - extends: [ - "airbnb-base", - "plugin:vue/recommended", - ], - rules: { - "no-new": "off", - "no-param-reassign": "off", - "no-plusplus": "off", - "object-shorthand": "off", - "prefer-destructuring": "off", - "prefer-template": "off", - "vue/max-attributes-per-line": 3, - }, -}; diff --git a/app/server/package-lock.json b/app/server/static/package-lock.json similarity index 100% rename from app/server/package-lock.json rename to app/server/static/package-lock.json diff --git a/app/server/package.json b/app/server/static/package.json similarity index 87% rename from app/server/package.json rename to app/server/static/package.json index 1cb3b6ba..13e6e2eb 100644 --- a/app/server/package.json +++ b/app/server/static/package.json @@ -5,9 +5,9 @@ "scripts": { "start": "cross-env HOT_RELOAD=1 DEBUG=1 webpack-dev-server", "build": "webpack", - "lint.js": "eslint --max-warnings=0 'static/js/**/*.{js,vue}'", - "lint.pug": "pug-lint static/js -c static/js/.pug-lintrc", - "lint.pug.vue": "pug-lint-vue static/js -c static/js/.pug-lintrc", + "lint.js": "eslint --max-warnings=0 '{components,pages}/**/*.{js,vue}'", + "lint.pug": "pug-lint components/", + "lint.pug.vue": "pug-lint-vue components/", "lint": "run-s lint.js lint.pug lint.pug.vue", "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/app/server/static/js/dataset.js b/app/server/static/pages/dataset.js similarity index 88% rename from app/server/static/js/dataset.js rename to app/server/static/pages/dataset.js index 89e81f34..e8c10176 100644 --- a/app/server/static/js/dataset.js +++ b/app/server/static/pages/dataset.js @@ -1,4 +1,4 @@ -import HTTP from './http'; +import HTTP from '../components/http'; document.querySelectorAll('.delete-document-button').forEach((deleteButton) => { deleteButton.addEventListener('click', () => { diff --git a/app/server/static/js/demo/demo_named_entity.js b/app/server/static/pages/demo_named_entity.js similarity index 73% rename from app/server/static/js/demo/demo_named_entity.js rename to app/server/static/pages/demo_named_entity.js index 651e676e..86a86023 100644 --- a/app/server/static/js/demo/demo_named_entity.js +++ b/app/server/static/pages/demo_named_entity.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import DemoNamedEntity from './demo_named_entity.vue'; +import DemoNamedEntity from '../components/demo/demo_named_entity.vue'; Vue.use(require('vue-shortkey'), { prevent: ['input', 'textarea'], diff --git a/app/server/static/js/demo/demo_text_classification.js b/app/server/static/pages/demo_text_classification.js similarity index 71% rename from app/server/static/js/demo/demo_text_classification.js rename to app/server/static/pages/demo_text_classification.js index aa976764..3ada02be 100644 --- a/app/server/static/js/demo/demo_text_classification.js +++ b/app/server/static/pages/demo_text_classification.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import DemoTextClassification from './demo_text_classification.vue'; +import DemoTextClassification from '../components/demo/demo_text_classification.vue'; Vue.use(require('vue-shortkey'), { prevent: ['input', 'textarea'], diff --git a/app/server/static/js/demo/demo_translation.js b/app/server/static/pages/demo_translation.js similarity index 69% rename from app/server/static/js/demo/demo_translation.js rename to app/server/static/pages/demo_translation.js index f8417a32..0edfa277 100644 --- a/app/server/static/js/demo/demo_translation.js +++ b/app/server/static/pages/demo_translation.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import DemoTranslation from './demo_translation.vue'; +import DemoTranslation from '../components/demo/demo_translation.vue'; Vue.use(require('vue-shortkey')); diff --git a/app/server/static/js/document_classification.js b/app/server/static/pages/document_classification.js similarity index 73% rename from app/server/static/js/document_classification.js rename to app/server/static/pages/document_classification.js index 45dda015..08552601 100644 --- a/app/server/static/js/document_classification.js +++ b/app/server/static/pages/document_classification.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import DocumentClassification from './document_classification.vue'; +import DocumentClassification from '../components/document_classification.vue'; Vue.use(require('vue-shortkey'), { prevent: ['input', 'textarea'], diff --git a/app/server/static/js/download_seq2seq.js b/app/server/static/pages/download_seq2seq.js similarity index 66% rename from app/server/static/js/download_seq2seq.js rename to app/server/static/pages/download_seq2seq.js index 10791455..5c666780 100644 --- a/app/server/static/js/download_seq2seq.js +++ b/app/server/static/pages/download_seq2seq.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import DownloadSeq2Seq from './download_seq2seq.vue'; +import DownloadSeq2Seq from '../components/download_seq2seq.vue'; new Vue({ el: '#mail-app', diff --git a/app/server/static/js/download_sequence_labeling.js b/app/server/static/pages/download_sequence_labeling.js similarity index 63% rename from app/server/static/js/download_sequence_labeling.js rename to app/server/static/pages/download_sequence_labeling.js index e057a8dc..83835cbe 100644 --- a/app/server/static/js/download_sequence_labeling.js +++ b/app/server/static/pages/download_sequence_labeling.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import DownloadSequenceLabeling from './download_sequence_labeling.vue'; +import DownloadSequenceLabeling from '../components/download_sequence_labeling.vue'; new Vue({ el: '#mail-app', diff --git a/app/server/static/js/download_text_classification.js b/app/server/static/pages/download_text_classification.js similarity index 62% rename from app/server/static/js/download_text_classification.js rename to app/server/static/pages/download_text_classification.js index 2a324c33..6bae5d3d 100644 --- a/app/server/static/js/download_text_classification.js +++ b/app/server/static/pages/download_text_classification.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import DownloadTextClassification from './download_text_classification.vue'; +import DownloadTextClassification from '../components/download_text_classification.vue'; new Vue({ el: '#mail-app', diff --git a/app/server/static/js/guideline.js b/app/server/static/pages/guideline.js similarity index 77% rename from app/server/static/js/guideline.js rename to app/server/static/pages/guideline.js index 355a4311..b25e651c 100644 --- a/app/server/static/js/guideline.js +++ b/app/server/static/pages/guideline.js @@ -1,6 +1,6 @@ import Vue from 'vue'; import vueDebounce from 'vue-debounce'; -import Guideline from './guideline.vue'; +import Guideline from '../components/guideline.vue'; Vue.use(vueDebounce); diff --git a/app/server/static/js/index.js b/app/server/static/pages/index.js similarity index 100% rename from app/server/static/js/index.js rename to app/server/static/pages/index.js diff --git a/app/server/static/js/label.js b/app/server/static/pages/label.js similarity index 70% rename from app/server/static/js/label.js rename to app/server/static/pages/label.js index 56ca065b..127a6c26 100644 --- a/app/server/static/js/label.js +++ b/app/server/static/pages/label.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import Labels from './label.vue'; +import Labels from '../components/label.vue'; new Vue({ el: '#mail-app', diff --git a/app/server/static/js/projects.js b/app/server/static/pages/projects.js similarity index 70% rename from app/server/static/js/projects.js rename to app/server/static/pages/projects.js index 06bfaccb..24c9b2b9 100644 --- a/app/server/static/js/projects.js +++ b/app/server/static/pages/projects.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import Projects from './projects.vue'; +import Projects from '../components/projects.vue'; new Vue({ el: '#projects_root', diff --git a/app/server/static/js/seq2seq.js b/app/server/static/pages/seq2seq.js similarity index 75% rename from app/server/static/js/seq2seq.js rename to app/server/static/pages/seq2seq.js index 4bd01c01..f1289a67 100644 --- a/app/server/static/js/seq2seq.js +++ b/app/server/static/pages/seq2seq.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import Seq2Seq from './seq2seq.vue'; +import Seq2Seq from '../components/seq2seq.vue'; Vue.use(require('vue-shortkey')); diff --git a/app/server/static/js/sequence_labeling.js b/app/server/static/pages/sequence_labeling.js similarity index 75% rename from app/server/static/js/sequence_labeling.js rename to app/server/static/pages/sequence_labeling.js index 57631357..f72b6130 100644 --- a/app/server/static/js/sequence_labeling.js +++ b/app/server/static/pages/sequence_labeling.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import SequenceLabeling from './sequence_labeling.vue'; +import SequenceLabeling from '../components/sequence_labeling.vue'; Vue.use(require('vue-shortkey'), { prevent: ['input', 'textarea'], diff --git a/app/server/static/js/stats.js b/app/server/static/pages/stats.js similarity index 70% rename from app/server/static/js/stats.js rename to app/server/static/pages/stats.js index 62449c50..6348a1d8 100644 --- a/app/server/static/js/stats.js +++ b/app/server/static/pages/stats.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import Stats from './stats.vue'; +import Stats from '../components/stats.vue'; new Vue({ el: '#mail-app', diff --git a/app/server/static/js/upload_seq2seq.js b/app/server/static/pages/upload_seq2seq.js similarity index 66% rename from app/server/static/js/upload_seq2seq.js rename to app/server/static/pages/upload_seq2seq.js index ee5766b0..aa258db6 100644 --- a/app/server/static/js/upload_seq2seq.js +++ b/app/server/static/pages/upload_seq2seq.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import UploadSeq2Seq from './upload_seq2seq.vue'; +import UploadSeq2Seq from '../components/upload_seq2seq.vue'; new Vue({ el: '#mail-app', diff --git a/app/server/static/js/upload_sequence_labeling.js b/app/server/static/pages/upload_sequence_labeling.js similarity index 63% rename from app/server/static/js/upload_sequence_labeling.js rename to app/server/static/pages/upload_sequence_labeling.js index fd7df2b1..fe2c7633 100644 --- a/app/server/static/js/upload_sequence_labeling.js +++ b/app/server/static/pages/upload_sequence_labeling.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import UploadSequenceLabeling from './upload_sequence_labeling.vue'; +import UploadSequenceLabeling from '../components/upload_sequence_labeling.vue'; new Vue({ el: '#mail-app', diff --git a/app/server/static/js/upload_text_classification.js b/app/server/static/pages/upload_text_classification.js similarity index 63% rename from app/server/static/js/upload_text_classification.js rename to app/server/static/pages/upload_text_classification.js index 73115369..959fead3 100644 --- a/app/server/static/js/upload_text_classification.js +++ b/app/server/static/pages/upload_text_classification.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import UploadTextClassification from './upload_text_classification.vue'; +import UploadTextClassification from '../components/upload_text_classification.vue'; new Vue({ el: '#mail-app', diff --git a/app/server/static/images/favicons/android-icon-144x144.png b/app/server/static/static/android-icon-144x144.png similarity index 100% rename from app/server/static/images/favicons/android-icon-144x144.png rename to app/server/static/static/android-icon-144x144.png diff --git a/app/server/static/images/favicons/android-icon-192x192.png b/app/server/static/static/android-icon-192x192.png similarity index 100% rename from app/server/static/images/favicons/android-icon-192x192.png rename to app/server/static/static/android-icon-192x192.png diff --git a/app/server/static/images/favicons/android-icon-36x36.png b/app/server/static/static/android-icon-36x36.png similarity index 100% rename from app/server/static/images/favicons/android-icon-36x36.png rename to app/server/static/static/android-icon-36x36.png diff --git a/app/server/static/images/favicons/android-icon-48x48.png b/app/server/static/static/android-icon-48x48.png similarity index 100% rename from app/server/static/images/favicons/android-icon-48x48.png rename to app/server/static/static/android-icon-48x48.png diff --git a/app/server/static/images/favicons/android-icon-72x72.png b/app/server/static/static/android-icon-72x72.png similarity index 100% rename from app/server/static/images/favicons/android-icon-72x72.png rename to app/server/static/static/android-icon-72x72.png diff --git a/app/server/static/images/favicons/android-icon-96x96.png b/app/server/static/static/android-icon-96x96.png similarity index 100% rename from app/server/static/images/favicons/android-icon-96x96.png rename to app/server/static/static/android-icon-96x96.png diff --git a/app/server/static/images/favicons/apple-icon-114x114.png b/app/server/static/static/apple-icon-114x114.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-114x114.png rename to app/server/static/static/apple-icon-114x114.png diff --git a/app/server/static/images/favicons/apple-icon-120x120.png b/app/server/static/static/apple-icon-120x120.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-120x120.png rename to app/server/static/static/apple-icon-120x120.png diff --git a/app/server/static/images/favicons/apple-icon-144x144.png b/app/server/static/static/apple-icon-144x144.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-144x144.png rename to app/server/static/static/apple-icon-144x144.png diff --git a/app/server/static/images/favicons/apple-icon-152x152.png b/app/server/static/static/apple-icon-152x152.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-152x152.png rename to app/server/static/static/apple-icon-152x152.png diff --git a/app/server/static/images/favicons/apple-icon-180x180.png b/app/server/static/static/apple-icon-180x180.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-180x180.png rename to app/server/static/static/apple-icon-180x180.png diff --git a/app/server/static/images/favicons/apple-icon-57x57.png b/app/server/static/static/apple-icon-57x57.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-57x57.png rename to app/server/static/static/apple-icon-57x57.png diff --git a/app/server/static/images/favicons/apple-icon-60x60.png b/app/server/static/static/apple-icon-60x60.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-60x60.png rename to app/server/static/static/apple-icon-60x60.png diff --git a/app/server/static/images/favicons/apple-icon-72x72.png b/app/server/static/static/apple-icon-72x72.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-72x72.png rename to app/server/static/static/apple-icon-72x72.png diff --git a/app/server/static/images/favicons/apple-icon-76x76.png b/app/server/static/static/apple-icon-76x76.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-76x76.png rename to app/server/static/static/apple-icon-76x76.png diff --git a/app/server/static/images/favicons/apple-icon-precomposed.png b/app/server/static/static/apple-icon-precomposed.png similarity index 100% rename from app/server/static/images/favicons/apple-icon-precomposed.png rename to app/server/static/static/apple-icon-precomposed.png diff --git a/app/server/static/images/favicons/apple-icon.png b/app/server/static/static/apple-icon.png similarity index 100% rename from app/server/static/images/favicons/apple-icon.png rename to app/server/static/static/apple-icon.png diff --git a/app/server/static/images/favicons/browserconfig.xml b/app/server/static/static/browserconfig.xml similarity index 100% rename from app/server/static/images/favicons/browserconfig.xml rename to app/server/static/static/browserconfig.xml diff --git a/app/server/static/images/favicons/favicon-16x16.png b/app/server/static/static/favicon-16x16.png similarity index 100% rename from app/server/static/images/favicons/favicon-16x16.png rename to app/server/static/static/favicon-16x16.png diff --git a/app/server/static/images/favicons/favicon-32x32.png b/app/server/static/static/favicon-32x32.png similarity index 100% rename from app/server/static/images/favicons/favicon-32x32.png rename to app/server/static/static/favicon-32x32.png diff --git a/app/server/static/images/favicons/favicon-96x96.png b/app/server/static/static/favicon-96x96.png similarity index 100% rename from app/server/static/images/favicons/favicon-96x96.png rename to app/server/static/static/favicon-96x96.png diff --git a/app/server/static/images/favicons/favicon.ico b/app/server/static/static/favicon.ico similarity index 100% rename from app/server/static/images/favicons/favicon.ico rename to app/server/static/static/favicon.ico diff --git a/app/server/static/images/favicons/manifest.json b/app/server/static/static/manifest.json similarity index 100% rename from app/server/static/images/favicons/manifest.json rename to app/server/static/static/manifest.json diff --git a/app/server/static/images/favicons/ms-icon-144x144.png b/app/server/static/static/ms-icon-144x144.png similarity index 100% rename from app/server/static/images/favicons/ms-icon-144x144.png rename to app/server/static/static/ms-icon-144x144.png diff --git a/app/server/static/images/favicons/ms-icon-150x150.png b/app/server/static/static/ms-icon-150x150.png similarity index 100% rename from app/server/static/images/favicons/ms-icon-150x150.png rename to app/server/static/static/ms-icon-150x150.png diff --git a/app/server/static/images/favicons/ms-icon-310x310.png b/app/server/static/static/ms-icon-310x310.png similarity index 100% rename from app/server/static/images/favicons/ms-icon-310x310.png rename to app/server/static/static/ms-icon-310x310.png diff --git a/app/server/static/images/favicons/ms-icon-70x70.png b/app/server/static/static/ms-icon-70x70.png similarity index 100% rename from app/server/static/images/favicons/ms-icon-70x70.png rename to app/server/static/static/ms-icon-70x70.png diff --git a/app/server/webpack.config.js b/app/server/static/webpack.config.js similarity index 56% rename from app/server/webpack.config.js rename to app/server/static/webpack.config.js index 6ed94071..fbf636bd 100644 --- a/app/server/webpack.config.js +++ b/app/server/static/webpack.config.js @@ -1,3 +1,5 @@ +const fs = require('fs'); +const path = require('path'); const process = require('process'); const BundleTracker = require('webpack-bundle-tracker'); const VueLoaderPlugin = require('vue-loader/lib/plugin') @@ -7,35 +9,25 @@ const hotReload = process.env.HOT_RELOAD === '1'; const webpackHost = process.env.WEBPACK_HOST || '127.0.0.1'; const webpackPort = process.env.WEBPACK_PORT ? parseInt(process.env.WEBPACK_PORT, 10) : 8080; const pollMillis = process.env.WEBPACK_POLL_MILLIS ? parseInt(process.env.WEBPACK_POLL_MILLIS, 10) : false; +const noSourceMap = process.env.SOURCE_MAP === 'False'; + +const pagesRoot = path.join(__dirname, 'pages'); +const entryPoints = {}; +fs.readdirSync(pagesRoot).forEach((scriptName) => { + const bundleName = path.parse(scriptName).name; + const scriptPath = path.join(pagesRoot, scriptName) + entryPoints[bundleName] = scriptPath; +}); module.exports = { mode: devMode ? 'development' : 'production', - entry: { - 'index': './static/js/index.js', - 'sequence_labeling': './static/js/sequence_labeling.js', - 'document_classification': './static/js/document_classification.js', - 'seq2seq': './static/js/seq2seq.js', - 'projects': './static/js/projects.js', - 'stats': './static/js/stats.js', - 'label': './static/js/label.js', - 'guideline': './static/js/guideline.js', - 'dataset': './static/js/dataset.js', - 'demo_text_classification': './static/js/demo/demo_text_classification.js', - 'demo_named_entity': './static/js/demo/demo_named_entity.js', - 'demo_translation': './static/js/demo/demo_translation.js', - 'upload_seq2seq': './static/js/upload_seq2seq.js', - 'upload_sequence_labeling': './static/js/upload_sequence_labeling.js', - 'upload_text_classification': './static/js/upload_text_classification.js', - 'download_seq2seq': './static/js/download_seq2seq.js', - 'download_sequence_labeling': './static/js/download_sequence_labeling.js', - 'download_text_classification': './static/js/download_text_classification.js', - }, + entry: entryPoints, output: { publicPath: hotReload ? `http://127.0.0.1:${webpackPort}/` : '', - path: __dirname + '/static/bundle', + path: path.join(__dirname, 'bundle'), filename: '[name].js' }, - devtool: devMode ? 'cheap-eval-source-map' : 'source-map', + devtool: noSourceMap ? false : (devMode ? 'cheap-eval-source-map' : 'source-map'), devServer: { port: webpackPort, host: webpackHost, diff --git a/app/server/templates/admin.html b/app/server/templates/admin.html index 39462b41..585ff462 100644 --- a/app/server/templates/admin.html +++ b/app/server/templates/admin.html @@ -2,7 +2,7 @@ {% load static %} {% load render_bundle from webpack_loader %} {% block header %} - + {% endblock %} {% block navigation %} diff --git a/app/server/templates/annotation.html b/app/server/templates/annotation.html index 32748a94..cd071d1a 100644 --- a/app/server/templates/annotation.html +++ b/app/server/templates/annotation.html @@ -2,7 +2,7 @@ {% load static %} {% load render_bundle from webpack_loader %} {% block header %} - + {% endblock %} {% block navigation %} {% if user.is_superuser and 'project_id' in view.kwargs %} diff --git a/app/server/templates/base.html b/app/server/templates/base.html index 3e70ccac..757019fe 100644 --- a/app/server/templates/base.html +++ b/app/server/templates/base.html @@ -15,24 +15,24 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + {% block header %}{% endblock %} {% azure_appinsights %} @@ -43,7 +43,7 @@