Merge branch 'development' into 'master'

0.2.3.1
This commit is contained in:
sonny 2020-06-03 20:49:35 +02:00
parent abd7ed24e6
commit 04ff905ae5
112 changed files with 948 additions and 510 deletions

View file

@ -0,0 +1,101 @@
name: "Rubik"
designer: "Hubert and Fischer, Meir Sadan, Cyreal"
license: "OFL"
category: "SANS_SERIF"
date_added: "2015-07-22"
fonts {
name: "Rubik"
style: "normal"
weight: 300
filename: "Rubik-Light.ttf"
post_script_name: "Rubik-Light"
full_name: "Rubik Light"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "italic"
weight: 300
filename: "Rubik-LightItalic.ttf"
post_script_name: "Rubik-LightItalic"
full_name: "Rubik Light Italic"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "normal"
weight: 400
filename: "Rubik-Regular.ttf"
post_script_name: "Rubik-Regular"
full_name: "Rubik Regular"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "italic"
weight: 400
filename: "Rubik-Italic.ttf"
post_script_name: "Rubik-Italic"
full_name: "Rubik Italic"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "normal"
weight: 500
filename: "Rubik-Medium.ttf"
post_script_name: "Rubik-Medium"
full_name: "Rubik Medium"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "italic"
weight: 500
filename: "Rubik-MediumItalic.ttf"
post_script_name: "Rubik-MediumItalic"
full_name: "Rubik Medium Italic"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "normal"
weight: 700
filename: "Rubik-Bold.ttf"
post_script_name: "Rubik-Bold"
full_name: "Rubik Bold"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "italic"
weight: 700
filename: "Rubik-BoldItalic.ttf"
post_script_name: "Rubik-BoldItalic"
full_name: "Rubik Bold Italic"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "normal"
weight: 900
filename: "Rubik-Black.ttf"
post_script_name: "Rubik-Black"
full_name: "Rubik Black"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
fonts {
name: "Rubik"
style: "italic"
weight: 900
filename: "Rubik-BlackItalic.ttf"
post_script_name: "Rubik-BlackItalic"
full_name: "Rubik Black Italic"
copyright: "Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)"
}
subsets: "cyrillic"
subsets: "cyrillic-ext"
subsets: "hebrew"
subsets: "latin"
subsets: "latin-ext"
subsets: "menu"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -31,6 +31,7 @@ INSTALLED_APPS = [
"axes",
# app modules
"newsreader.accounts",
"newsreader.utils",
"newsreader.news",
"newsreader.news.core",
"newsreader.news.collection",
@ -70,6 +71,8 @@ TEMPLATES = [
}
]
FORM_RENDERER = "newsreader.utils.form.FormRenderer"
WSGI_APPLICATION = "newsreader.wsgi.application"
# Database

View file

@ -140,6 +140,22 @@
"expire_date": "2020-05-16T18:29:04.049Z"
}
},
{
"model": "sessions.session",
"pk": "d4wophwpjm8z96doe8iddvhdv9yfafyx",
"fields": {
"session_data": "OWZkZTQyZDQ2NzNkYzdkOTBhM2ZlOWU3MDhhNDkyMWQ0MDdmZTc5ODp7Il9hdXRoX3VzZXJfaWQiOiIxIiwiX2F1dGhfdXNlcl9iYWNrZW5kIjoiZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5kcy5Nb2RlbEJhY2tlbmQiLCJfYXV0aF91c2VyX2hhc2giOiJhZTMwMWFlMzI5OGFlOThkNjY1MTY1NDIxM2EyMmM0NDA0Y2FkZTc3In0=",
"expire_date": "2020-06-07T19:45:49.727Z"
}
},
{
"model": "sessions.session",
"pk": "jwn66dptmdkm6hom2ns3j288aaxqtyjd",
"fields": {
"session_data": "OWZkZTQyZDQ2NzNkYzdkOTBhM2ZlOWU3MDhhNDkyMWQ0MDdmZTc5ODp7Il9hdXRoX3VzZXJfaWQiOiIxIiwiX2F1dGhfdXNlcl9iYWNrZW5kIjoiZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5kcy5Nb2RlbEJhY2tlbmQiLCJfYXV0aF91c2VyX2hhc2giOiJhZTMwMWFlMzI5OGFlOThkNjY1MTY1NDIxM2EyMmM0NDA0Y2FkZTc3In0=",
"expire_date": "2020-06-07T18:38:19.116Z"
}
},
{
"model": "django_celery_beat.intervalschedule",
"pk": 1,
@ -172,6 +188,14 @@
"period": "hours"
}
},
{
"model": "django_celery_beat.intervalschedule",
"pk": 5,
"fields": {
"every": 4,
"period": "hours"
}
},
{
"model": "django_celery_beat.crontabschedule",
"pk": 1,
@ -188,7 +212,7 @@
"model": "django_celery_beat.periodictasks",
"pk": 1,
"fields": {
"last_update": "2020-05-02T20:40:29.029Z"
"last_update": "2020-05-24T19:46:50.243Z"
}
},
{
@ -225,11 +249,11 @@
"fields": {
"name": "sonny@bakker.nl-collection-task",
"task": "newsreader.news.collection.tasks.FeedTask",
"interval": 4,
"interval": 5,
"crontab": null,
"solar": null,
"clocked": null,
"args": "[2]",
"args": "[1]",
"kwargs": "{}",
"queue": null,
"exchange": null,
@ -241,37 +265,9 @@
"one_off": false,
"start_time": null,
"enabled": true,
"last_run_at": "2020-05-02T20:06:24.012Z",
"total_run_count": 292,
"date_changed": "2020-05-02T20:06:24.027Z",
"description": ""
}
},
{
"model": "django_celery_beat.periodictask",
"pk": 26,
"fields": {
"name": "sonnyba871@gmail.com-collection-task",
"task": "newsreader.news.collection.tasks.FeedTask",
"interval": 4,
"crontab": null,
"solar": null,
"clocked": null,
"args": "[18]",
"kwargs": "{}",
"queue": null,
"exchange": null,
"routing_key": null,
"headers": "{}",
"priority": null,
"expires": null,
"expire_seconds": null,
"one_off": false,
"start_time": null,
"enabled": true,
"last_run_at": "2020-05-02T20:06:24.045Z",
"total_run_count": 105,
"date_changed": "2020-05-02T20:09:24.331Z",
"last_run_at": "2020-05-24T18:37:57.707Z",
"total_run_count": 293,
"date_changed": "2020-05-24T19:46:50.245Z",
"description": ""
}
},
@ -1115,7 +1111,7 @@
"model": "accounts.user",
"fields": {
"password": "pbkdf2_sha256$180000$KGKGsPnSwyiN$RqQAD46r4Kzqndqp5dmpj+H/drDrPRI0r6j4gLtYBjE=",
"last_login": "2020-05-02T18:29:04.047Z",
"last_login": "2020-05-24T19:45:49.721Z",
"is_superuser": true,
"first_name": "",
"last_name": "",
@ -1167,6 +1163,7 @@
"last_suceeded": "2020-05-02T20:06:25.793Z",
"succeeded": true,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1187,6 +1184,7 @@
"last_suceeded": "2020-05-02T20:06:24.128Z",
"succeeded": true,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1207,6 +1205,7 @@
"last_suceeded": "2020-05-02T20:06:25.364Z",
"succeeded": true,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1227,6 +1226,7 @@
"last_suceeded": "2020-05-02T20:06:25.620Z",
"succeeded": true,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1247,6 +1247,7 @@
"last_suceeded": "2020-05-02T20:06:24.730Z",
"succeeded": true,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1267,6 +1268,7 @@
"last_suceeded": "2020-05-02T20:06:25.742Z",
"succeeded": true,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1287,6 +1289,7 @@
"last_suceeded": "2020-05-02T20:06:25.549Z",
"succeeded": true,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1307,6 +1310,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1327,6 +1331,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1347,6 +1352,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1367,6 +1373,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1387,6 +1394,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1407,6 +1415,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1427,6 +1436,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1447,6 +1457,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1467,6 +1478,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1487,6 +1499,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1507,6 +1520,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1527,6 +1541,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1547,6 +1562,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1567,6 +1583,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1587,6 +1604,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1607,6 +1625,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1627,6 +1646,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1647,6 +1667,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1667,6 +1688,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1687,6 +1709,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1707,6 +1730,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1727,6 +1751,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1747,6 +1772,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1767,6 +1793,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1787,6 +1814,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1807,6 +1835,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1827,6 +1856,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1847,6 +1877,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1867,6 +1898,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1887,6 +1919,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1907,6 +1940,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1927,6 +1961,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1947,6 +1982,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1967,6 +2003,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -1987,6 +2024,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2007,6 +2045,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2027,6 +2066,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2047,6 +2087,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2067,6 +2108,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2087,6 +2129,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2107,6 +2150,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2127,6 +2171,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2147,6 +2192,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2167,6 +2213,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2187,6 +2234,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2207,6 +2255,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2227,6 +2276,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2247,6 +2297,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2267,6 +2318,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2287,6 +2339,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2307,6 +2360,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2327,6 +2381,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2347,6 +2402,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2367,6 +2423,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2387,6 +2444,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2407,6 +2465,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2427,6 +2486,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2447,6 +2507,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2467,6 +2528,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2487,6 +2549,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2507,6 +2570,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2527,6 +2591,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2547,6 +2612,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2567,6 +2633,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2587,6 +2654,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2607,6 +2675,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2627,6 +2696,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2647,6 +2717,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2667,6 +2738,7 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
@ -2687,9 +2759,82 @@
"last_suceeded": null,
"succeeded": false,
"error": null,
"enabled": true,
"user": [
"sonny@bakker.nl"
]
}
},
{
"model": "admin.logentry",
"pk": 1,
"fields": {
"action_time": "2020-05-24T18:38:44.624Z",
"user": [
"sonny@bakker.nl"
],
"content_type": [
"django_celery_beat",
"intervalschedule"
],
"object_id": "5",
"object_repr": "every 4 hours",
"action_flag": 1,
"change_message": "[{\"added\": {}}]"
}
},
{
"model": "admin.logentry",
"pk": 2,
"fields": {
"action_time": "2020-05-24T18:38:46.689Z",
"user": [
"sonny@bakker.nl"
],
"content_type": [
"django_celery_beat",
"periodictask"
],
"object_id": "10",
"object_repr": "sonny@bakker.nl-collection-task: every 4 hours",
"action_flag": 2,
"change_message": "[{\"changed\": {\"fields\": [\"Interval Schedule\"]}}]"
}
},
{
"model": "admin.logentry",
"pk": 3,
"fields": {
"action_time": "2020-05-24T18:39:09.203Z",
"user": [
"sonny@bakker.nl"
],
"content_type": [
"django_celery_beat",
"periodictask"
],
"object_id": "26",
"object_repr": "sonnyba871@gmail.com-collection-task: every hour",
"action_flag": 3,
"change_message": ""
}
},
{
"model": "admin.logentry",
"pk": 4,
"fields": {
"action_time": "2020-05-24T19:46:50.248Z",
"user": [
"sonny@bakker.nl"
],
"content_type": [
"django_celery_beat",
"periodictask"
],
"object_id": "10",
"object_repr": "sonny@bakker.nl-collection-task: every 4 hours",
"action_flag": 2,
"change_message": "[{\"changed\": {\"fields\": [\"Positional Arguments\"]}}]"
}
}
]

View file

@ -47,16 +47,37 @@ class PostModal extends React.Component {
return (
<div className="modal post-modal">
<div className="post">
<button
<span
className="button post__close-button"
onClick={() => this.props.unSelectPost()}
>
Close <i className="gg-close"></i>
</button>
</span>
<div className="post__header">
<h1 className={titleClassName}>{`${post.title} `}</h1>
<h2 className={titleClassName}>{`${post.title} `}</h2>
<div className="post__meta-info">
<span className="post__date">{publicationDate}</span>
{post.author && <span className="post__author">{post.author}</span>}
{this.props.category && (
<span className="badge post__category" title={this.props.category.name}>
<a
href={`/core/categories/${this.props.category.id}/`}
target="_blank"
rel="noopener noreferrer"
>
{this.props.category.name}
</a>
</span>
)}
<span className="badge post__rule" title={this.props.rule.name}>
<a
href={`/collection/rules/${this.props.rule.id}/`}
target="_blank"
rel="noopener noreferrer"
>
{this.props.rule.name}
</a>
</span>
<a
className="post__link"
href={post.url}
@ -67,13 +88,6 @@ class PostModal extends React.Component {
</a>
</div>
</div>
<aside className="post__section-info">
{this.props.category && (
<h5 title={this.props.category.name}>{this.props.category.name}</h5>
)}
<h5 title={this.props.rule.name}>{this.props.rule.name}</h5>
</aside>
{/* HTML is sanitized by the collectors */}
<div className="post__body" dangerouslySetInnerHTML={{ __html: post.body }} />

View file

@ -6,7 +6,7 @@ import { fetchPostsBySection } from '../../actions/posts.js';
import { filterPosts } from './filters.js';
import LoadingIndicator from '../../../../components/LoadingIndicator.js';
import RuleItem from './RuleItem.js';
import PostItem from './PostItem.js';
class FeedList extends React.Component {
checkScrollHeight = ::this.checkScrollHeight;
@ -37,8 +37,8 @@ class FeedList extends React.Component {
}
render() {
const ruleItems = this.props.posts.map((item, index) => {
return <RuleItem key={index} posts={item.posts} rule={item.rule} />;
const postItems = this.props.postsBySection.map((item, index) => {
return <PostItem key={index} post={item} selected={this.props.selected} />;
});
if (isEqual(this.props.selected, {})) {
@ -50,7 +50,7 @@ class FeedList extends React.Component {
</div>
</div>
);
} else if (ruleItems.length === 0 && !this.props.isFetching) {
} else if (postItems.length === 0 && !this.props.isFetching) {
return (
<div className="post-message">
<div className="post-message__block">
@ -62,8 +62,8 @@ class FeedList extends React.Component {
);
} else {
return (
<div className="post-block">
{ruleItems}
<div className="posts">
<ul className="posts__list">{postItems}</ul>
{this.props.isFetching && <LoadingIndicator />}
</div>
);
@ -73,7 +73,7 @@ class FeedList extends React.Component {
const mapStateToProps = state => ({
isFetching: state.posts.isFetching,
posts: filterPosts(state),
postsBySection: filterPosts(state),
next: state.selected.next,
lastReached: state.selected.lastReached,
selected: state.selected.item,

View file

@ -1,33 +1,44 @@
import React from 'react';
import { connect } from 'react-redux';
import { CATEGORY_TYPE, RULE_TYPE } from '../../constants.js';
import { selectPost } from '../../actions/posts.js';
import { formatDatetime } from '../../../../utils.js';
class PostItem extends React.Component {
render() {
const post = this.props.post;
const rule = { ...this.props.post.rule };
const post = { ...this.props.post, rule: rule.id };
const publicationDate = formatDatetime(post.publicationDate);
const titleClassName = post.read
? 'posts-header__title posts-header__title--read'
: 'posts-header__title';
? 'posts__header posts__header--read'
: 'posts__header';
return (
<li
className="posts__item"
onClick={() => {
this.props.selectPost(post);
}}
>
<h5 className={titleClassName} title={post.title}>
<li className="posts__item">
<h5
className={titleClassName}
title={post.title}
onClick={() => this.props.selectPost(post)}
>
{post.title}
</h5>
<div className="posts-info">
<span className="posts-info__date" title={publicationDate}>
{publicationDate}
{publicationDate} {post.author && `By ${post.author}`}
</span>
{this.props.selected.type == CATEGORY_TYPE && (
<span className="badge">
<a
href={`/collection/rules/${rule.id}/`}
target="_blank"
rel="noopener noreferrer"
>
{rule.name}
</a>
</span>
)}
<a
className="posts-info__link"
href={post.url}

View file

@ -1,24 +0,0 @@
import React from 'react';
import PostItem from './PostItem.js';
class RuleItem extends React.Component {
render() {
const posts = Object.values(this.props.posts).sort((firstEl, secondEl) => {
return new Date(secondEl.publicationDate) - new Date(firstEl.publicationDate);
});
const postItems = posts.map(post => {
return <PostItem key={post.id} post={post} />;
});
return (
<section className="posts-section">
<h3 className="posts-section__name">{this.props.rule.name}</h3>
<ul className="posts">{postItems}</ul>
</section>
);
}
}
export default RuleItem;

View file

@ -9,7 +9,9 @@ export const filterPostsByRule = (rule = {}, posts = []) => {
return post.rule === rule.id;
});
return filteredPosts.length > 0 ? [{ rule, posts: filteredPosts }] : [];
const filteredData = filteredPosts.map(post => ({ ...post, rule: { ...rule } }));
return filteredData.length > 0 ? [...filteredData] : [];
};
export const filterPostsByCategory = (category = {}, rules = [], posts = []) => {
@ -22,13 +24,14 @@ export const filterPostsByCategory = (category = {}, rules = [], posts = []) =>
return post.rule === rule.id;
});
return {
rule: { ...rule },
posts: filteredPosts,
};
return filteredPosts.map(post => ({ ...post, rule: { ...rule } }));
});
return filteredData.filter(rule => rule.posts.length > 0);
const sortedPosts = [...filteredData.flat()].sort((firstPost, secondPost) => {
return new Date(secondPost.publicationDate) - new Date(firstPost.publicationDate);
});
return sortedPosts;
};
export const filterPosts = state => {

View file

@ -40,7 +40,7 @@ class CategoryItem extends React.Component {
</div>
<div className="category__info" onClick={() => this.handleSelect()}>
<h4>{this.props.category.name}</h4>
<span>{this.props.category.name}</span>
<span className="badge">{this.props.category.unread}</span>
</div>
</div>

View file

@ -31,9 +31,9 @@ class RuleItem extends React.Component {
<li className={className} onClick={() => this.handleSelect()}>
<div className="rules__info">
{favicon}
<h5 className="rules__title" title={this.props.rule.name}>
<span className="rules__title" title={this.props.rule.name}>
{this.props.rule.name}
</h5>
</span>
</div>
<span className="badge">{this.props.rule.unread}</span>
</li>

View file

@ -1,5 +1,5 @@
{% extends "base.html" %}
{% load i18n static %}
{% load i18n static filters %}
{% block content %}
<main id="rules--page" class="main">
@ -15,6 +15,7 @@
<div class="form__actions">
<a class="link button button--confirm" href="{% url "news:collection:rule-create" %}">{% trans "Add a rule" %}</a>
<a class="link button button--confirm" href="{% url "news:collection:import" %}">{% trans "Import rules" %}</a>
</div>
</section>
@ -23,7 +24,7 @@
<thead class="table__header rules-table__header">
<tr class="table__row rules-table__row">
<th class="table__heading rules-table__heading--select">
<input type="checkbox" id="select-all" data-input="rules" />
{% include "components/form/checkbox.html" with id="select-all" data_input="rules" id_for_label="select-all" %}
</th>
<th class="table__heading rules-table__heading--name">{% trans "Name" %}</th>
<th class="table__heading rules-table__heading--category">{% trans "Category" %}</th>
@ -36,7 +37,11 @@
<tbody class="table__body">
{% for rule in rules %}
<tr class="table__row rules-table__row">
<td class="table__item rules-table__item"><input name="rules" type="checkbox" value="{{ rule.pk }}" /></td>
<td class="table__item rules-table__item">
{% with rule|id_for_label:"rules" as id_for_label %}
{% include "components/form/checkbox.html" with name="rules" value=rule.pk id=id_for_label id_for_label=id_for_label %}
{% endwith %}
</td>
<td class="table__item rules-table__item" title="{{ rule.name }}">{{ rule.name }}</td>
<td class="table__item rules-table__item" title="{{ rule.category.name }}">{{ rule.category.name }}</td>
<td class="table__item rules-table__item" title="{{ rule.url }}">{{ rule.url }}</td>

View file

@ -92,7 +92,7 @@ class NestedPostCategoryView(ListAPIView):
queryset = Post.objects.filter(
rule__in=category.rules.values_list("id", flat=True)
).order_by("rule", "-publication_date")
).order_by("-publication_date", "rule__name")
return queryset

View file

@ -1,5 +1,8 @@
<input class="input category-form__input" type="{{ option.type }}"
name="{{ option.name }}" value="{{ option.value|stringformat:'s' }}"{% if option.selected %} checked{% endif %} />
{% load filters %}
{% with option.instance|id_for_label:"category" as id_for_label %}
{% include "components/form/checkbox.html" with widget=option checked=option.selected id_for_label=id_for_label only %}
{% endwith %}
{% if option.instance.favicon %}
<img class="favicon" src="{{ option.instance.favicon }}" />

View file

@ -498,13 +498,12 @@ class NestedCategoryPostView(TestCase):
self.assertEquals(data["count"], 6)
self.assertEquals(posts[0]["title"], "Second BBC post")
self.assertEquals(posts[1]["title"], "First BBC post")
self.assertEquals(posts[1]["title"], "Second Reuters post")
self.assertEquals(posts[2]["title"], "Second Guardian post")
self.assertEquals(posts[3]["title"], "First Guardian post")
self.assertEquals(posts[4]["title"], "Second Reuters post")
self.assertEquals(posts[5]["title"], "First Reuters post")
self.assertEquals(posts[3]["title"], "First BBC post")
self.assertEquals(posts[4]["title"], "First Reuters post")
self.assertEquals(posts[5]["title"], "First Guardian post")
def test_only_posts_from_category_are_returned(self):
category = CategoryFactory.create(user=self.user)

View file

@ -1,10 +1,9 @@
.body {
margin: 0;
padding: 0;
background-color: $gainsboro;
font-family: $default-font;
color: $default-font-color;
font-family: Rubik, sans-serif;
color: $font-color;
}
body {

View file

@ -1 +1 @@
@import "body";
@import './body';

View file

@ -1,2 +1,2 @@
@import "card";
@import "rule-card";
@import './card';
@import './rule-card';

View file

@ -4,8 +4,6 @@
padding: 5px;
border-radius: 5px;
&__info {
display: flex;
justify-content: space-between;
@ -35,11 +33,7 @@
}
}
&:hover {
background-color: darken($azureish-white, +10%);
}
&--selected {
background-color: darken($azureish-white, +10%);
&--selected, &:hover {
background-color: $border-gray;
}
}

View file

@ -1 +1 @@
@import "category";
@import './category';

View file

@ -1 +1 @@
@import "errorlist";
@import './errorlist';

View file

@ -1 +1 @@
@import "fieldset";
@import './fieldset';

View file

@ -7,7 +7,6 @@
width: 70%;
border-radius: 5px;
font-family: $form-font;
background-color: $white;
&__section {
@ -47,6 +46,7 @@
&__actions {
display: flex;
flex-direction: row;
gap: 15px;
@include form-padding;
}

View file

@ -1,3 +1,2 @@
@import "form";
@import "rules-form";
@import './form';
@import './rules-form';

View file

@ -1,28 +1,25 @@
@import "body/index";
@import "form/index";
@import "main/index";
@import "navbar/index";
@import "loading-indicator/index";
@import './body/index';
@import './form/index';
@import './main/index';
@import './navbar/index';
@import './loading-indicator/index';
@import "modal/index";
@import './modal/index';
@import "card/index";
@import "list/index";
@import "messages/index";
@import "section/index";
@import "errorlist/index";
@import "fieldset/index";
@import "pagination/index";
@import "sidebar/index";
@import "table/index";
@import './card/index';
@import './list/index';
@import './messages/index';
@import './section/index';
@import './errorlist/index';
@import './fieldset/index';
@import './pagination/index';
@import './sidebar/index';
@import './table/index';
@import "rules/index";
@import "category/index";
@import './rules/index';
@import './category/index';
@import "post/index";
@import "post-block/index";
@import "post-message/index";
@import "posts/index";
@import "posts-header/index";
@import "posts-info/index";
@import "posts-section/index";
@import './post/index';
@import './post-message/index';
@import './posts/index';
@import './posts-info/index';

View file

@ -1 +1 @@
@import "list";
@import './list';

View file

@ -1 +1 @@
@import "loading-indicator";
@import './loading-indicator';

View file

@ -1 +1 @@
@import "main";
@import './main';

View file

@ -1 +1 @@
@import "messages";
@import './messages';

View file

@ -20,7 +20,6 @@
width: 60%;
border-radius: 5px;
background-color: $white;
}

View file

@ -1,3 +1,2 @@
@import "modal";
@import "post-modal";
@import './modal';
@import './post-modal';

View file

@ -6,8 +6,6 @@
padding: 10px 0;
width: 100%;
background-color: $white;
ol {
display: flex;
justify-content: flex-start;
@ -16,26 +14,14 @@
list-style-type: none;
}
a {
color: $nickel;
text-decoration: none;
}
&__item {
margin: 0px 10px;
border: none;
border-radius: 2px;
background-color: darken($azureish-white, 20%);
&:hover{
background-color: lighten($azureish-white, +5%);
}
& a {
@extend .button;
color: $white;
font-size: 18px !important;
font-weight: 600;
}
}

View file

@ -1 +1 @@
@import "navbar";
@import './navbar';

View file

@ -1 +1 @@
@import "pagination";
@import './pagination';

View file

@ -1,12 +0,0 @@
.post-block {
display: flex;
flex-direction: column;
align-items: center;
width: 70%;
margin: 0 0 2% 0;
font-family: $article-font;
border-radius: 2px;
}

View file

@ -1 +0,0 @@
@import "post-block";

View file

@ -6,9 +6,7 @@
width: 60%;
height: 80vh;
border-radius: 2px;
font-family: $article-font;
background-color: $white;
&__message {

View file

@ -1 +1 @@
@import "post-message";
@import './post-message';

View file

@ -9,8 +9,6 @@
margin: 2% auto 5% auto;
border-radius: 5px;
overflow-y: auto;
background-color: $white;
@ -22,13 +20,9 @@
flex-direction: column;
padding: 20px 0 10px 0;
width: 75%;
font-family: $article-header-font;
}
&__title {
line-height: 1;
&--read {
color: $gainsboro;
}
@ -44,10 +38,21 @@
}
&__date {
align-self: center;
font-size: small;
}
&__author {
font-size: small;
}
&__rule, &__category {
background-color: $light-orange !important;
& a {
color: $black;
}
}
&__body {
display:flex;
flex-direction: column;
@ -55,10 +60,6 @@
padding: 10px 0 30px 0;
width: 75%;
line-height: 1.5;
font-family: $article-font;
font-size: 18px;
& p {
padding: 10px 0;
}
@ -82,9 +83,11 @@
position: relative;
margin: 1% 2% 0 0;
align-self: flex-end;
background-color: $button-blue;
color: $white;
&:hover {
background-color: lighten($gainsboro, +1%);
background-color: lighten($button-blue, +1%);
}
}
@ -94,39 +97,6 @@
align-items: center;
margin: 15px 0;
}
&__section-info {
display: flex;
flex-direction: column;
align-self: flex-end;
position: absolute;
top: 25%;
width: 10%;
font-family: $button-font;
color: lighten($default-font-color, +10%);
& h5 {
margin: 10px 0 0 0;
padding: 5px 1px 5px 5px;
border-radius: 5px 0 0 5px;
background-color: aquamarine;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: center;
}
& h5:first-child {
background-color: $light-orange;
}
& h5:last-child {
background-color: $beige;
}
gap: 5px;
}
}

View file

@ -1 +1 @@
@import "post";
@import './post';

View file

@ -1,15 +0,0 @@
.posts-header {
&__title {
width: 80%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 16px;
&--read {
color: darken($gainsboro, +10%);
}
}
}

View file

@ -1 +0,0 @@
@import "posts-header";

View file

@ -1,9 +1,9 @@
.posts-info {
display: flex;
justify-content: space-around;
align-items: center;
width: 20%;
margin: 10px 0;
gap: 15px;
&__date {
align-self: center;
@ -12,4 +12,10 @@
&__link {
display: inline-flex;
}
& .badge {
& a {
color: $black;
}
}
}

View file

@ -1 +1 @@
@import "posts-info";
@import './posts-info';

View file

@ -1,20 +0,0 @@
.posts-section {
display: flex;
flex-direction: column;
width: 95%;
margin: 20px;
padding: 10px;
border-radius: 5px;
background-color: $white;
&:first-child {
padding: 0 10px 10px 10px;
margin: 0 20px 20px 20px;
}
&__name {
padding: 20px 0 10px 0;
}
}

View file

@ -1 +0,0 @@
@import "post-section";

View file

@ -1,23 +1,25 @@
.posts {
display: flex;
flex-direction: column;
width: 70%;
margin: 0 0 2% 20px;
list-style: none;
&__list {
display: flex;
flex-direction: column;
padding: 0;
list-style: none;
width: 95%;
padding: 0;
}
&__item {
display: flex;
align-items: center;
flex-direction: column-reverse;
padding: 10px 0 10px 0;
padding: 10px;
border-radius: 2px;
border-bottom: 2px solid $azureish-white;
&:hover {
cursor: pointer;
background-color: $gainsboro;
&:first-child {
padding: 0 10px 10px 10px;
}
& span {
@ -27,8 +29,29 @@
white-space: nowrap;
}
& .badge {
background-color: $light-orange;
}
&:last-child {
border-bottom: 0;
}
}
&__header {
width: 80%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 16px;
&--read {
color: darken($gainsboro, +10%);
}
&:hover {
cursor: pointer;
}
}
}

View file

@ -1 +1 @@
@import "posts";
@import './posts';

View file

@ -8,19 +8,17 @@
padding: 5px 5px 5px 20px;
border-radius: 5px;
& * {
padding: 0 2px 0 2px;
}
&:hover {
cursor: pointer;
background-color: $focus-blue;
background-color: $border-gray;
}
&--selected {
background-color: $focus-blue;
background-color: $border-gray;
}
}

View file

@ -1 +1 @@
@import "rules";
@import './rules';

View file

@ -1,2 +1,2 @@
@import "section";
@import "text-section";
@import './section';
@import './text-section';

View file

@ -17,8 +17,6 @@
list-style: none;
border-radius: 5px;
font-family: $sidebar-font;
&__item {
padding: 2px 10px 5px 10px;
}

View file

@ -1 +1 @@
@import "sidebar";
@import './sidebar';

View file

@ -1,8 +1,6 @@
@import "../../lib/mixins";
.table {
@include rounded;
table-layout: fixed;
background-color: $white;
width: 90%;

View file

@ -1,2 +1,2 @@
@import "table";
@import "rules-table";
@import './table';
@import './rules-table';

View file

@ -3,12 +3,10 @@
padding-left: 8px;
padding-right: 8px;
border-radius: 2px;
text-align: center;
background-color: lighten($pewter-blue, +20%);
background-color: $gainsboro;
font-family: $button-font;
font-size: small;
}

View file

@ -1 +1 @@
@import "badge";
@import './badge';

View file

@ -9,9 +9,7 @@
@include button-padding;
border: none;
border-radius: 2px;
font-family: $button-font;
font-size: 16px;
&:hover {
@ -39,10 +37,10 @@
&--primary {
color: $white !important;
background-color: darken($azureish-white, +20%);
background-color: $button-blue;
&:hover {
background-color: $azureish-white;
background-color: lighten($button-blue, 5%);
}
}
}

View file

@ -1,2 +1,2 @@
@import "button";
@import "_read-button";
@import './button';
@import './read-button';

View file

@ -0,0 +1,35 @@
.checkbox {
display: block;
height: 20px;
width: 20px;
margin: 0 0 0 20px;
& input[type=checkbox] {
position: absolute;
opacity: 0;
appearance: none;
-moz-appearance: none;
&:checked + .checkbox__label {
.checkbox__box {
background-color: $checkbox-blue;
}
}
}
&__label {
padding: 0;
}
&__box {
display: block;
position: relative;
height: 100%;
width: 100%;
border: 2px solid darken($gainsboro, 10%);
cursor: pointer;
}
}

View file

@ -0,0 +1 @@
@import './checkbox';

View file

@ -1,3 +1,8 @@
.h1 {
font-family: $header-font;
color: $header-color;
font-size: 20px;
}
h1 {
@extend .h1;
}

View file

@ -1 +1 @@
@import "h1";
@import './h1';

View file

@ -1,3 +1,7 @@
.h2 {
font-family: $header-font;
color: $header-color;
}
h2 {
@extend .h2;
}

View file

@ -1 +1 @@
@import "h2";
@import './h2';

View file

@ -1,3 +1,7 @@
.h3 {
font-family: $header-font;
color: $header-color;
}
h3 {
@extend .h3;
}

View file

@ -1 +1 @@
@import "h3";
@import './h3';

View file

@ -0,0 +1,7 @@
.h4 {
color: $header-color;
}
h4 {
@extend .h4;
}

View file

@ -0,0 +1 @@
@import './h4';

View file

@ -0,0 +1,7 @@
.h5 {
color: $header-color;
}
h5 {
@extend .h5;
}

View file

@ -0,0 +1 @@
@import './h5';

View file

@ -1 +1 @@
@import "help-text";
@import './help-text';

View file

@ -1,11 +1,14 @@
@import "badge/index";
@import "button/index";
@import "help-text/index";
@import "input/index";
@import "label/index";
@import "link/index";
@import "h1/index";
@import "h2/index";
@import "h3/index";
@import "small/index";
@import "select/index";
@import './badge/index';
@import './button/index';
@import './help-text/index';
@import './input/index';
@import './label/index';
@import './link/index';
@import './h1/index';
@import './h2/index';
@import './h3/index';
@import './h4/index';
@import './h5/index';
@import './small/index';
@import './select/index';
@import './checkbox/index';

View file

@ -1,9 +1,7 @@
.input {
padding: 10px;
background-color: lighten($gainsboro, +4%);
border: 1px $border-gray solid;
border-radius: 2px;
&:focus {
border: 1px $focus-blue solid;

View file

@ -1 +1 @@
@import "input";
@import './input';

View file

@ -1 +1 @@
@import "label";
@import './label';

View file

@ -1 +1 @@
@import "link";
@import './link';

View file

@ -1 +1 @@
@import "select";
@import './select';

View file

@ -1 +1 @@
@import "small";
@import './small';

View file

@ -1,6 +1,6 @@
@import "lib/index";
@import "partials/index";
@import "components/index";
@import "elements/index";
@import './lib/index';
@import './partials/index';
@import './components/index';
@import './elements/index';
@import "pages/index";
@import './pages/index';

View file

@ -1,9 +1,10 @@
@import "~css.gg/icons-scss/icons";
@import '~css.gg/icons-scss/icons';
.gg-link {
color: initial;
}
.gg-pen {
transform: rotate(-45deg) scale(var(--ggs, 0.8));
color: initial;
}

View file

@ -1,3 +1 @@
@mixin rounded {
border-radius: 5px;
}

View file

@ -1 +1 @@
@import "css.gg";
@import 'css.gg';

View file

@ -1,14 +1,14 @@
@import "categories/index";
@import "category/index";
@import './categories/index';
@import './category/index';
@import "import/index";
@import "homepage/index";
@import './import/index';
@import './homepage/index';
@import "login/index";
@import "password-reset/index";
@import "register/index";
@import './login/index';
@import './password-reset/index';
@import './register/index';
@import "rule/index";
@import "rules/index";
@import './rule/index';
@import './rules/index';
@import "settings/index";
@import './settings/index';

View file

@ -19,10 +19,10 @@ $lavendal-pink: rgba(162, 155, 254, 1);
$beige: rgba(245, 245, 220, 1);
$light-green: rgba(230, 247, 185, 1);
$light-orange: rgba(237, 212, 178, 1);
$light-orange: rgba(255, 212, 153, 1);
$light-red: rgba(255, 118, 117, 1);
$success-green: rgba(46,204,113, 1);
$success-green: rgba(89, 181, 128, 1);
$error-red: lighten(rgba(231, 76, 60, 1), 10%);
$confirm-green: $success-green;
@ -30,8 +30,11 @@ $cancel-red: $error-red;
$border-gray: rgba(227, 227, 227, 1);
$button-blue: rgba(111, 164, 196, 1);
$focus-blue: darken($azureish-white, +10%);
$default-font-color: rgba(48, 51, 53, 1);
$checkbox-blue: rgba(34, 170, 253, 1);
$font-color: rgba(48, 51, 53, 1);
$header-color: rgba(100, 101, 102, 1);
$white: rgba(255, 255, 255, 1);
$black: rgba(0, 0, 0, 1);

View file

@ -1,17 +1,10 @@
@import url("https://fonts.googleapis.com/css?family=Barlow&display=swap");
@import url("https://fonts.googleapis.com/css?family=Oswald&display=swap");
@import url("https://fonts.googleapis.com/css?family=Nunito&display=swap");
@import url("https://fonts.googleapis.com/css?family=Noto+Sans&display=swap");
@import url("https://fonts.googleapis.com/css?family=Noto+Serif&display=swap");
@import url("https://fonts.googleapis.com/css?family=IBM+Plex+Sans:600&display=swap");
@font-face {
font-family: Rubik;
src: url('../assets/fonts/Rubik-Regular.ttf');
}
$default-font: "Noto Serif", serif;
$button-font: "IBM Plex Sans", sans-serif;
$form-font: "Barlow", sans-serif;
$article-font: "Noto Serif", serif;
$article-header-font: "Oswald", sans-serif;
$header-font: "Noto Sans", sans-serif;
$sidebar-font: "Nunito", sans-serif;
@font-face {
font-family: Rubik;
src: url('../assets/fonts/Rubik-Bold.ttf');
font-weight: bold;
}

View file

@ -1,2 +1,2 @@
@import "fonts";
@import "colors";
@import './colors';
@import './fonts';

View file

@ -0,0 +1,18 @@
{% spaceless %}
{% for name, value in widget.attrs.items %}
{% if value is not False %}
{{ name }}
{% if value is not True %}
="{{ value|stringformat:'s' }}"
{% endif %}
{% endif %}
{% endfor %}
{% if id %} id="{{ id }}"{% endif %}
{% if type %} type="{{ type }}"{% endif %}
{% if value %} value="{{ value }}"{% endif %}
{% if name %} name="{{ name }}"{% endif %}
{% if data_input %} data-input="{{ data_input }}"{% endif %}
{% if checked %} checked {% endif %}
{% endspaceless %}

View file

@ -0,0 +1,10 @@
<div class="checkbox">
{% if widget %}
{% include "components/form/input.html" with widget=widget %}
{% else %}
{% include "components/form/input.html" with id=id name=name type="checkbox" value=value data_input=data_input checked=checked %}
{% endif %}
<label class="checkbox__label" for="{% if widget %}{{ widget.attrs.id }}{% else %}{{ id_for_label }}{% endif %}">
<span class="checkbox__box"/>
</label>
</div>

View file

@ -0,0 +1,7 @@
{% spaceless %}
<input {% if widget %}
type="{{ widget.type }}" name="{{ widget.name }}"
{% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}
{% endif %}
{% include "django/forms/widgets/attrs.html" %}>
{% endspaceless %}

View file

@ -0,0 +1 @@
../../../components/form/attrs.html

Some files were not shown because too many files have changed in this diff Show more