diff --git a/.gitignore b/.gitignore
index a5aa72e..4fe2f8d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -197,5 +197,7 @@ src/newsreader/fixtures/local
# Javascript
node_modules/
+static/
+
# Css
*.css
diff --git a/gulp/babel.js b/gulp/babel.js
deleted file mode 100644
index 3ef77d3..0000000
--- a/gulp/babel.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import path from 'path';
-
-import { dest, series } from 'gulp';
-import babelify from 'babelify';
-import browserify from 'browserify';
-import source from 'vinyl-source-stream';
-import buffer from 'vinyl-buffer';
-import concat from 'gulp-concat';
-
-const PROJECT_DIR = path.join('src', 'newsreader');
-const SRC_DIR = path.join(PROJECT_DIR, 'js');
-const STATIC_SUFFIX = 'dist/js/';
-
-const CORE_DIR = path.join(PROJECT_DIR, 'news', 'core', 'static', 'core');
-const COLLECTION_DIR = path.join(
- PROJECT_DIR,
- 'news',
- 'collection',
- 'static',
- 'collection'
-);
-
-const taskMappings = [
- { name: 'homepage', destDir: `${CORE_DIR}/${STATIC_SUFFIX}` },
- { name: 'categories', destDir: `${CORE_DIR}/${STATIC_SUFFIX}` },
- { name: 'rules', destDir: `${COLLECTION_DIR}/${STATIC_SUFFIX}` },
-];
-
-const babelTask = done => {
- const tasks = taskMappings.map(taskMapping => {
- const { name, destDir } = taskMapping;
-
- const bundle = browserify({
- entries: `${SRC_DIR}/pages/${name}/index.js`,
- debug: true,
- });
-
- const transpiledBundle = bundle.transform(babelify);
-
- return () =>
- transpiledBundle
- .bundle()
- .pipe(source('index.js'))
- .pipe(buffer())
- .pipe(concat(`${name}.js`))
- .pipe(dest(destDir));
- });
-
- return series(...tasks)(done);
-};
-
-export default babelTask;
diff --git a/gulp/sass.js b/gulp/sass.js
deleted file mode 100644
index 3847e37..0000000
--- a/gulp/sass.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import { dest, series, src } from 'gulp';
-
-import concat from 'gulp-concat';
-import path from 'path';
-import sass from 'gulp-sass';
-
-const PROJECT_DIR = path.join('src', 'newsreader');
-const SRC_DIR = path.join(PROJECT_DIR, 'scss');
-const STATIC_SUFFIX = 'dist/css/';
-
-export const ACCOUNTS_DIR = path.join(PROJECT_DIR, 'accounts', 'static', 'accounts');
-export const CORE_DIR = path.join(PROJECT_DIR, 'news', 'core', 'static', 'core');
-export const COLLECTION_DIR = path.join(
- PROJECT_DIR,
- 'news',
- 'collection',
- 'static',
- 'collection'
-);
-
-const taskMappings = [
- { name: 'login', destDir: `${ACCOUNTS_DIR}/${STATIC_SUFFIX}` },
- { name: 'register', destDir: `${ACCOUNTS_DIR}/${STATIC_SUFFIX}` },
- { name: 'activate', destDir: `${ACCOUNTS_DIR}/${STATIC_SUFFIX}` },
- { name: 'password-reset', destDir: `${ACCOUNTS_DIR}/${STATIC_SUFFIX}` },
- { name: 'homepage', destDir: `${CORE_DIR}/${STATIC_SUFFIX}` },
- { name: 'categories', destDir: `${CORE_DIR}/${STATIC_SUFFIX}` },
- { name: 'category', destDir: `${CORE_DIR}/${STATIC_SUFFIX}` },
- { name: 'rules', destDir: `${COLLECTION_DIR}/${STATIC_SUFFIX}` },
- { name: 'rule', destDir: `${COLLECTION_DIR}/${STATIC_SUFFIX}` },
- { name: 'import', destDir: `${COLLECTION_DIR}/${STATIC_SUFFIX}` },
-];
-
-export const sassTask = done => {
- const tasks = taskMappings.map(taskMapping => {
- const { name, destDir } = taskMapping;
-
- return () =>
- src(`${SRC_DIR}/pages/${name}/index.scss`)
- .pipe(sass().on('error', sass.logError))
- .pipe(concat(`${name}.css`))
- .pipe(dest(destDir));
- });
-
- series(...tasks)(done);
-};
diff --git a/gulpfile.babel.js b/gulpfile.babel.js
index e638c11..8168ac4 100644
--- a/gulpfile.babel.js
+++ b/gulpfile.babel.js
@@ -1,26 +1,70 @@
-import { parallel, series, watch as _watch } from 'gulp';
-
import path from 'path';
import del from 'del';
-import { ACCOUNTS_DIR, CORE_DIR, sassTask } from './gulp/sass';
-import babelTask from './gulp/babel';
+import { dest, parallel, series, src, watch as _watch } from 'gulp';
+import concat from 'gulp-concat';
+import globby from 'globby';
+import sass from 'gulp-sass';
+import babelify from 'babelify';
+import browserify from 'browserify';
+import source from 'vinyl-source-stream';
+import buffer from 'vinyl-buffer';
const PROJECT_DIR = path.join('src', 'newsreader');
+const STATIC_DIR = path.join(PROJECT_DIR, 'static');
+const CSS_SUFFIX = 'css/';
+const JS_SUFFIX = 'js/';
+
+const SASS_DEST_DIR = path.join(STATIC_DIR, CSS_SUFFIX);
+const JS_DEST_DIR = path.join(STATIC_DIR, JS_SUFFIX);
+
+const SASS_DIR = path.join(PROJECT_DIR, 'scss');
+const JS_DIR = path.join(PROJECT_DIR, 'js');
const clean = () => {
- return del([
- `${ACCOUNTS_DIR}/accounts/dist/css/*`,
+ return del([`${STATIC_DIR}/${CSS_SUFFIX}/*.css`, `${STATIC_DIR}/${JS_SUFFIX}/*.js`]);
+};
- `${CORE_DIR}/core/dist/css/*`,
- `${CORE_DIR}/core/dist/js/*`,
- ]);
+const sassTask = () => {
+ return src(`${SASS_DIR}/index.scss`)
+ .pipe(sass().on('error', sass.logError))
+ .pipe(concat(`main.css`))
+ .pipe(dest(SASS_DEST_DIR));
+};
+
+const babelTask = () => {
+ const getDirName = filename => {
+ const fragments = filename.split('/');
+
+ return fragments[fragments.length - 2];
+ };
+
+ const promise = globby([`${JS_DIR}/pages/**/index.js`]).then(entries => {
+ entries.forEach(entry => {
+ const bundle = browserify({ entries: entry, debug: true });
+ const transpiledBundle = bundle.transform(babelify);
+ const bundleName = getDirName(entry);
+
+ return transpiledBundle
+ .bundle()
+ .pipe(source('index.js'))
+ .pipe(buffer())
+ .pipe(concat(`${bundleName}.js`))
+ .pipe(dest(JS_DEST_DIR));
+ });
+ });
+
+ return Promise.resolve(promise);
};
export const watch = () => {
- return _watch([`${PROJECT_DIR}/scss/**/*.scss`, `${PROJECT_DIR}/js/**/*.js`], done => {
- series(clean, sassTask, babelTask)(done);
- });
+ return _watch(
+ [`${PROJECT_DIR}/scss/**/*.scss`, `${PROJECT_DIR}/js/**/*.js`],
+ { ignoreInitial: false },
+ done => {
+ series(clean, parallel(sassTask, babelTask))(done);
+ }
+ );
};
-export default series(clean, sassTask, babelTask);
+export default series(clean, parallel(babelTask, sassTask));
diff --git a/package-lock.json b/package-lock.json
index 4ee3371..c2e9c82 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1203,7 +1203,6 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
"integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
- "dev": true,
"requires": {
"@nodelib/fs.stat": "2.0.3",
"run-parallel": "^1.1.9"
@@ -1212,14 +1211,12 @@
"@nodelib/fs.stat": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
- "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
- "dev": true
+ "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA=="
},
"@nodelib/fs.walk": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
"integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
- "dev": true,
"requires": {
"@nodelib/fs.scandir": "2.1.3",
"fastq": "^1.6.0"
@@ -1315,9 +1312,9 @@
"dev": true
},
"@types/node": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.2.tgz",
- "integrity": "sha512-B8emQA1qeKerqd1dmIsQYnXi+mmAzTB7flExjmy5X1aVAKFNNNDubkavwR13kR6JnpeLp3aLoJhwn9trWPAyFQ==",
+ "version": "13.7.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.0.tgz",
+ "integrity": "sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ==",
"dev": true
},
"@types/stack-utils": {
@@ -1641,8 +1638,7 @@
"array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
},
"array-unique": {
"version": "0.3.2",
@@ -2932,6 +2928,22 @@
"slash": "^3.0.0"
},
"dependencies": {
+ "globby": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz",
+ "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.0.3",
+ "glob": "^7.1.3",
+ "ignore": "^5.1.1",
+ "merge2": "^1.2.3",
+ "slash": "^3.0.0"
+ }
+ },
"graceful-fs": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
@@ -3018,7 +3030,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
"requires": {
"path-type": "^4.0.0"
},
@@ -3026,8 +3037,7 @@
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
}
}
},
@@ -3496,7 +3506,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz",
"integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==",
- "dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -3509,7 +3518,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"requires": {
"fill-range": "^7.0.1"
}
@@ -3518,7 +3526,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@@ -3527,7 +3534,6 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
"integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
- "dev": true,
"requires": {
"is-glob": "^4.0.1"
}
@@ -3535,14 +3541,12 @@
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"micromatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
"requires": {
"braces": "^3.0.1",
"picomatch": "^2.0.5"
@@ -3552,7 +3556,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
"requires": {
"is-number": "^7.0.0"
}
@@ -3581,7 +3584,6 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz",
"integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==",
- "dev": true,
"requires": {
"reusify": "^1.0.0"
}
@@ -4511,18 +4513,15 @@
"dev": true
},
"globby": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
- "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
- "dev": true,
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz",
+ "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==",
"requires": {
- "@types/glob": "^7.1.1",
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
- "fast-glob": "^3.0.3",
- "glob": "^7.1.3",
- "ignore": "^5.1.1",
- "merge2": "^1.2.3",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
"slash": "^3.0.0"
}
},
@@ -4869,8 +4868,7 @@
"ignore": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
- "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
- "dev": true
+ "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A=="
},
"import-local": {
"version": "2.0.0",
@@ -5089,8 +5087,7 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-finite": {
"version": "1.0.2",
@@ -5117,7 +5114,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -6527,8 +6523,7 @@
"merge2": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
- "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
- "dev": true
+ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw=="
},
"micromatch": {
"version": "3.1.10",
@@ -7376,10 +7371,9 @@
"dev": true
},
"picomatch": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz",
- "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==",
- "dev": true
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
+ "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA=="
},
"pify": {
"version": "4.0.1",
@@ -8057,8 +8051,7 @@
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
},
"rimraf": {
"version": "3.0.0",
@@ -8088,8 +8081,7 @@
"run-parallel": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
- "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
- "dev": true
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q=="
},
"safe-buffer": {
"version": "5.1.2",
@@ -8299,8 +8291,7 @@
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
},
"snapdragon": {
"version": "0.8.2",
diff --git a/package.json b/package.json
index da22e0d..c883b2c 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"author": "Sonny",
"license": "GPL-3.0-or-later",
"dependencies": {
+ "globby": "^11.0.0",
"js-cookie": "^2.2.1",
"lodash": "^4.17.15",
"object-assign": "^4.1.1",
diff --git a/src/newsreader/accounts/templates/accounts/login.html b/src/newsreader/accounts/templates/accounts/login.html
index 00b248e..ab308b2 100644
--- a/src/newsreader/accounts/templates/accounts/login.html
+++ b/src/newsreader/accounts/templates/accounts/login.html
@@ -2,12 +2,8 @@
{% load static %}
-{% block head %}
-
-{% endblock %}
-
{% block content %}
-
+