structables 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- structables/__init__.py +0 -0
- structables/main.py +1282 -0
- structables/static/css/style.css +323 -0
- structables/static/img/logo.png +0 -0
- structables/static/img/logo_lg.png +0 -0
- structables/static/img/magnifying-glass-solid.svg +1 -0
- structables/templates/400.html +8 -0
- structables/templates/404.html +13 -0
- structables/templates/429.html +9 -0
- structables/templates/500.html +8 -0
- structables/templates/archives.html +31 -0
- structables/templates/article-review.html +7 -0
- structables/templates/article.html +87 -0
- structables/templates/base.html +27 -0
- structables/templates/category.html +68 -0
- structables/templates/collection.html +34 -0
- structables/templates/contest.html +23 -0
- structables/templates/contests.html +40 -0
- structables/templates/footer.html +11 -0
- structables/templates/header.html +39 -0
- structables/templates/iframe.html +12 -0
- structables/templates/index.html +43 -0
- structables/templates/member-instructables.html +32 -0
- structables/templates/member.html +39 -0
- structables/templates/privacypolicy.html +10 -0
- structables/templates/projects.html +56 -0
- structables/templates/sitemap.html +23 -0
- structables/templates/style.html +2 -0
- structables-0.2.0.dist-info/METADATA +722 -0
- structables-0.2.0.dist-info/RECORD +33 -0
- structables-0.2.0.dist-info/WHEEL +4 -0
- structables-0.2.0.dist-info/entry_points.txt +2 -0
- structables-0.2.0.dist-info/licenses/LICENSE +661 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--main-font: "DejaVu Sans Mono", monospace;
|
|
3
|
+
--main-color: #bbc2cf;
|
|
4
|
+
--link-color: #ff6c6b;
|
|
5
|
+
--heading-color: #51afef;
|
|
6
|
+
--code-bg: #20232a;
|
|
7
|
+
--code-color: #969ba6;
|
|
8
|
+
--border-color: lightgrey;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
body {
|
|
12
|
+
font-family: var(--main-font);
|
|
13
|
+
margin: 20px auto;
|
|
14
|
+
line-height: 1.5;
|
|
15
|
+
font-size: 1.1em;
|
|
16
|
+
max-width: 100vw;
|
|
17
|
+
color: var(--main-color);
|
|
18
|
+
padding: 0 10px;
|
|
19
|
+
hyphens: auto;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
a {
|
|
23
|
+
color: var(--link-color);
|
|
24
|
+
text-decoration: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
a:hover {
|
|
28
|
+
text-decoration: underline;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
h1,
|
|
32
|
+
h2,
|
|
33
|
+
h3 {
|
|
34
|
+
line-height: 1.2;
|
|
35
|
+
color: var(--heading-color);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
h1 {
|
|
39
|
+
font-size: 1.5em;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
h2 {
|
|
43
|
+
font-size: 1.3em;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
h3 {
|
|
47
|
+
font-size: 1.2em;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
pre,
|
|
51
|
+
code {
|
|
52
|
+
background: var(--code-bg);
|
|
53
|
+
color: var(--code-color);
|
|
54
|
+
border: 1px solid var(--border-color);
|
|
55
|
+
padding: 5px;
|
|
56
|
+
tab-size: 4;
|
|
57
|
+
overflow-x: auto;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
blockquote {
|
|
61
|
+
border-left: 10px solid var(--code-color);
|
|
62
|
+
padding-left: 10px;
|
|
63
|
+
margin-right: 10px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.navbar-logo {
|
|
67
|
+
height: 64px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.card {
|
|
71
|
+
background-color: #fff;
|
|
72
|
+
border: 1px solid #ddd;
|
|
73
|
+
border-radius: 8px;
|
|
74
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
75
|
+
overflow: hidden;
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-direction: column;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.card-body {
|
|
81
|
+
flex: 1;
|
|
82
|
+
padding: 1rem;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.card-footer {
|
|
86
|
+
padding: 1rem;
|
|
87
|
+
background-color: #f8f9fa;
|
|
88
|
+
border-top: 1px solid #ddd;
|
|
89
|
+
margin-top: auto;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.card-img-top {
|
|
93
|
+
max-width: 100%;
|
|
94
|
+
height: auto;
|
|
95
|
+
object-fit: cover;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.navbar-collapse {
|
|
99
|
+
display: flex;
|
|
100
|
+
justify-content: space-between;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.navbar-nav {
|
|
104
|
+
flex-direction: row;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.nav-item {
|
|
108
|
+
margin-left: 1rem;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@media (max-width: 768px) {
|
|
112
|
+
.navbar-nav {
|
|
113
|
+
flex-direction: column;
|
|
114
|
+
align-items: center;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.nav-item {
|
|
118
|
+
margin-left: 0;
|
|
119
|
+
margin-bottom: 0.5rem;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.navbar-collapse {
|
|
123
|
+
flex-direction: column;
|
|
124
|
+
align-items: center;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.form-control {
|
|
128
|
+
width: 100%;
|
|
129
|
+
margin-bottom: 0.5rem;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.ibles {
|
|
134
|
+
display: inline-block;
|
|
135
|
+
vertical-align: top;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.ible-small {
|
|
139
|
+
font-size: 0.7em;
|
|
140
|
+
font-weight: thin;
|
|
141
|
+
line-height: 1em;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.step-section {
|
|
145
|
+
background-color: var(--primary-bg);
|
|
146
|
+
border: 1px solid var(--border-color);
|
|
147
|
+
border-radius: 8px;
|
|
148
|
+
box-shadow: 0 2px 4px var(--shadow-color);
|
|
149
|
+
padding: 1.5rem;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.step-header h2 {
|
|
153
|
+
font-size: 2em;
|
|
154
|
+
color: var(--heading-color);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.step-images img,
|
|
158
|
+
.step-videos video,
|
|
159
|
+
.step-iframes iframe {
|
|
160
|
+
border-radius: 8px;
|
|
161
|
+
box-shadow: 0 2px 4px var(--shadow-color);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.step-text {
|
|
165
|
+
font-size: 1.1em;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.reply-button,
|
|
169
|
+
.replies {
|
|
170
|
+
display: none;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.reply-button+label {
|
|
174
|
+
position: relative;
|
|
175
|
+
display: block;
|
|
176
|
+
cursor: pointer;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
input.reply-button:checked+label+.replies {
|
|
180
|
+
display: flex;
|
|
181
|
+
flex-direction: column;
|
|
182
|
+
gap: 1rem;
|
|
183
|
+
margin-top: 1rem;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.member-list {
|
|
187
|
+
display: inline-block;
|
|
188
|
+
max-width: 200px;
|
|
189
|
+
vertical-align: top;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.ible-list-item {
|
|
193
|
+
display: inline-block;
|
|
194
|
+
max-width: 350px;
|
|
195
|
+
vertical-align: top;
|
|
196
|
+
margin-bottom: 2rem;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.contest-list-item {
|
|
200
|
+
display: inline-block;
|
|
201
|
+
max-width: 500px;
|
|
202
|
+
vertical-align: top;
|
|
203
|
+
margin-bottom: 2rem;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.archive-month-wrapper {
|
|
207
|
+
display: inline-block;
|
|
208
|
+
width: 30vw;
|
|
209
|
+
vertical-align: top;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.archive-month {
|
|
213
|
+
display: flex;
|
|
214
|
+
flex-direction: column;
|
|
215
|
+
gap: -10px;
|
|
216
|
+
margin-bottom: 1rem;
|
|
217
|
+
justify-content: space-between;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.archive {
|
|
221
|
+
margin-bottom: -20px;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
ul.pagination {
|
|
225
|
+
display: flex;
|
|
226
|
+
justify-content: space-around;
|
|
227
|
+
padding: 0 33vw;
|
|
228
|
+
list-style-type: none;
|
|
229
|
+
align-items: center;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
ul.pagination li.active a,
|
|
233
|
+
ul.pagination li.disabled a,
|
|
234
|
+
ul.pagination li.active a:hover,
|
|
235
|
+
ul.pagination li.disabled a:hover {
|
|
236
|
+
color: #bbc2cf;
|
|
237
|
+
text-decoration: none;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.closed-contest-contest {
|
|
241
|
+
object-fit: cover;
|
|
242
|
+
width: 33vw;
|
|
243
|
+
height: 15vw;
|
|
244
|
+
display: inline-block;
|
|
245
|
+
vertical-align: top;
|
|
246
|
+
padding: 0 10px;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.closed-contest-winner,
|
|
250
|
+
.closed-contest-winner-img {
|
|
251
|
+
width: 15vw;
|
|
252
|
+
display: inline-block;
|
|
253
|
+
vertical-align: top;
|
|
254
|
+
padding: 0 10px;
|
|
255
|
+
font-size: 0.8em;
|
|
256
|
+
text-overflow: ellipsis;
|
|
257
|
+
white-space: nowrap;
|
|
258
|
+
overflow: hidden;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.sitemap-group {
|
|
262
|
+
margin-top: 2em;
|
|
263
|
+
display: inline-block;
|
|
264
|
+
width: 30vw;
|
|
265
|
+
text-align: left;
|
|
266
|
+
vertical-align: top;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.sitemap-group h2 {
|
|
270
|
+
text-align: center;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.container {
|
|
274
|
+
margin-top: 20px !important;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
header {
|
|
278
|
+
margin-bottom: 50px;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.go_here_link {
|
|
282
|
+
background-color: #4caf50;
|
|
283
|
+
/* Green */
|
|
284
|
+
border: none;
|
|
285
|
+
color: white;
|
|
286
|
+
padding: 15px 32px;
|
|
287
|
+
text-align: center;
|
|
288
|
+
text-decoration: none;
|
|
289
|
+
display: inline-block;
|
|
290
|
+
font-size: 16px;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.go_here_link:hover {
|
|
294
|
+
color: black;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.wrap {
|
|
298
|
+
word-wrap: break-word;
|
|
299
|
+
overflow-wrap: break-word;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.navbar-logo {
|
|
303
|
+
height: 64px;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.img-fluid {
|
|
307
|
+
border-radius: 8px;
|
|
308
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
video {
|
|
312
|
+
border-radius: 8px;
|
|
313
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
iframe {
|
|
317
|
+
border-radius: 8px;
|
|
318
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.text-muted {
|
|
322
|
+
color: #6c757d !important;
|
|
323
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/></svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{% extends "base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block content %}
|
|
4
|
+
<center>
|
|
5
|
+
<h1>404</h1>
|
|
6
|
+
<p>This resource cannot be found</p>
|
|
7
|
+
<br>
|
|
8
|
+
<p>Why don't you try one of these instead?</p>
|
|
9
|
+
<a href="/" class="go_here_link">Featured</a>
|
|
10
|
+
<a href="/contest" class="go_here_link">Contests</a>
|
|
11
|
+
<br><br>
|
|
12
|
+
</center>
|
|
13
|
+
{% endblock %}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{% extends "base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block content %}
|
|
4
|
+
<center>
|
|
5
|
+
<h1>Past Contests</h1>
|
|
6
|
+
<p>{{ contest_count }}</p>
|
|
7
|
+
<p><a href="/contest/">See running contests</a></p>
|
|
8
|
+
</center>
|
|
9
|
+
{% for year in contest_list %}
|
|
10
|
+
<div class="archive-year">
|
|
11
|
+
<hr>
|
|
12
|
+
<h2>{{ year[0] }}</h2>
|
|
13
|
+
<hr>
|
|
14
|
+
{% for month in year[1] %}
|
|
15
|
+
<div class="archive-month-wrapper">
|
|
16
|
+
<div class="archive-month">
|
|
17
|
+
<h3>{{ month[0] }}</h3>
|
|
18
|
+
{% for contest in month[1] %}
|
|
19
|
+
<div class="archive">
|
|
20
|
+
<p>{{ contest[0] }}<a href="{{ contest[1] }}">{{ contest[2] }}</a></p>
|
|
21
|
+
</div>
|
|
22
|
+
{% endfor %}
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
{% endfor %}
|
|
26
|
+
<br>
|
|
27
|
+
</div>
|
|
28
|
+
{% endfor %}
|
|
29
|
+
<hr>
|
|
30
|
+
{{ pagination|safe }}
|
|
31
|
+
{% endblock %}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{% extends "base.html" %} {% block content %}
|
|
2
|
+
<div class="container my-5">
|
|
3
|
+
<div class="header-section text-center mb-5">
|
|
4
|
+
<h1 class="display-4">{{ title }}</h1>
|
|
5
|
+
<p class="text-muted">
|
|
6
|
+
by
|
|
7
|
+
<a href="{{ author_link }}" class="text-decoration-none">{{ author }}</a>
|
|
8
|
+
in
|
|
9
|
+
<a href="{{ category_link }}" class="text-decoration-none"
|
|
10
|
+
>{{ category }}</a
|
|
11
|
+
>
|
|
12
|
+
>
|
|
13
|
+
<a href="{{ channel_link }}" class="text-decoration-none"
|
|
14
|
+
>{{ channel }}</a
|
|
15
|
+
>
|
|
16
|
+
</p>
|
|
17
|
+
<p class="text-muted">
|
|
18
|
+
{{ views }} Views, {{ favorites }} Favorites, {{ comment_count }} Comments
|
|
19
|
+
</p>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
{% for step in steps %}
|
|
23
|
+
<section class="step-section mb-5 p-4 rounded shadow-sm">
|
|
24
|
+
<div class="step-header mb-4">
|
|
25
|
+
<h2>{{ step.title }}</h2>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
{% if step.imgs %}
|
|
29
|
+
<div class="step-images row mb-4">
|
|
30
|
+
{% for step_img in step.imgs %}
|
|
31
|
+
<div class="col-md-4 mb-3">
|
|
32
|
+
<img
|
|
33
|
+
src="{{ step_img.src }}"
|
|
34
|
+
alt="{{ step_img.alt }}"
|
|
35
|
+
class="img-fluid rounded shadow-sm"
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
{% endfor %}
|
|
39
|
+
</div>
|
|
40
|
+
{% endif %} {% if step.videos %}
|
|
41
|
+
<div class="step-videos row mb-4">
|
|
42
|
+
{% for step_video in step.videos %}
|
|
43
|
+
<div class="col-md-6 mb-3">
|
|
44
|
+
<video
|
|
45
|
+
src="{{ step_video }}"
|
|
46
|
+
controls
|
|
47
|
+
class="w-100 rounded shadow-sm"
|
|
48
|
+
></video>
|
|
49
|
+
</div>
|
|
50
|
+
{% endfor %}
|
|
51
|
+
</div>
|
|
52
|
+
{% endif %} {% if step.iframes %}
|
|
53
|
+
<div class="step-iframes row mb-4">
|
|
54
|
+
{% for step_iframe in step.iframes %}
|
|
55
|
+
<div class="col-md-8 mb-3">
|
|
56
|
+
<iframe
|
|
57
|
+
src="{{ step_iframe.src }}"
|
|
58
|
+
width="100%"
|
|
59
|
+
height="{{ step_iframe.height }}"
|
|
60
|
+
frameborder="0"
|
|
61
|
+
class="rounded shadow-sm"
|
|
62
|
+
></iframe>
|
|
63
|
+
</div>
|
|
64
|
+
{% endfor %}
|
|
65
|
+
</div>
|
|
66
|
+
{% endif %}
|
|
67
|
+
|
|
68
|
+
<div class="step-text mb-3">{{ step.text|safe }}</div>
|
|
69
|
+
|
|
70
|
+
{% if step.downloads %}
|
|
71
|
+
<div class="step-downloads row mb-4">
|
|
72
|
+
<div class="col-12">
|
|
73
|
+
<h3>Downloads</h3>
|
|
74
|
+
</div>
|
|
75
|
+
{% for step_download in step.downloads %}
|
|
76
|
+
<div class="col-md-2 mb-3">
|
|
77
|
+
<a href="{{ step_download.src }}" class="btn btn-primary w-100"
|
|
78
|
+
>{{ step_download.name }}</a
|
|
79
|
+
>
|
|
80
|
+
</div>
|
|
81
|
+
{% endfor %}
|
|
82
|
+
</div>
|
|
83
|
+
{% endif %}
|
|
84
|
+
</section>
|
|
85
|
+
{% endfor %}
|
|
86
|
+
</div>
|
|
87
|
+
{% endblock %}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>{% if title %}{{ title }} - {% endif %}Structables</title>
|
|
7
|
+
<link
|
|
8
|
+
rel="stylesheet"
|
|
9
|
+
href="{{ url_for('static', filename='css/style.css') }}"
|
|
10
|
+
/>
|
|
11
|
+
<link
|
|
12
|
+
rel="stylesheet"
|
|
13
|
+
href="{{ url_for('static', filename='dist/css/bootstrap.min.css') }}"
|
|
14
|
+
/>
|
|
15
|
+
<link
|
|
16
|
+
rel="icon"
|
|
17
|
+
type="image/png"
|
|
18
|
+
href="{{ url_for('static', filename='img/logo.png') }}"
|
|
19
|
+
/>
|
|
20
|
+
</head>
|
|
21
|
+
|
|
22
|
+
<body>
|
|
23
|
+
{% include "header.html" %}
|
|
24
|
+
<main>{% block content %} {% endblock %}</main>
|
|
25
|
+
{% include "footer.html" %}
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{% extends "base.html" %} {% block content %}
|
|
2
|
+
<div class="container">
|
|
3
|
+
<h1 class="text-center">{{ title }}</h1>
|
|
4
|
+
<div class="row">
|
|
5
|
+
{% for channel in channels %}
|
|
6
|
+
<div class="col-6 col-md-4 col-lg-3 text-center mb-3">
|
|
7
|
+
<a
|
|
8
|
+
href="/{{ channel }}"
|
|
9
|
+
class="btn btn-primary d-block position-relative"
|
|
10
|
+
>
|
|
11
|
+
{{ channel }}
|
|
12
|
+
</a>
|
|
13
|
+
</div>
|
|
14
|
+
{% endfor %}
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<h2 class="text-center">
|
|
18
|
+
<a href="{{ path }}projects/">Featured Projects</a>
|
|
19
|
+
</h2>
|
|
20
|
+
<div class="row">
|
|
21
|
+
{% for ible in ibles %}
|
|
22
|
+
<div class="col-xs-12 col-sm-6 col-lg-4 mb-4">
|
|
23
|
+
<div class="card h-100 d-flex flex-column">
|
|
24
|
+
<a href="{{ ible.link }}">
|
|
25
|
+
<img
|
|
26
|
+
class="card-img-top"
|
|
27
|
+
src="{{ ible.img }}"
|
|
28
|
+
alt="{{ ible.alt }}"
|
|
29
|
+
style="max-width: 100%"
|
|
30
|
+
/>
|
|
31
|
+
<div class="card-body">
|
|
32
|
+
<h5 class="card-title">{{ ible.title }}</h5>
|
|
33
|
+
</div>
|
|
34
|
+
</a>
|
|
35
|
+
<div class="card-footer mt-auto">
|
|
36
|
+
<p class="card-text">
|
|
37
|
+
by <a href="{{ ible.author_link }}">{{ ible.author }}</a>
|
|
38
|
+
</p>
|
|
39
|
+
<p class="card-text">
|
|
40
|
+
in <a href="{{ ible.channel_link }}">{{ ible.channel }}</a>
|
|
41
|
+
</p>
|
|
42
|
+
<p class="card-text">
|
|
43
|
+
{{ ible.favorites }} Favorites, {{ ible.views }} Views
|
|
44
|
+
</p>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
{% endfor %}
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<!-- Doesn't seem to be current
|
|
52
|
+
<h2 class="text-center"><a href="/contest/">Contests</a></h2>
|
|
53
|
+
<div class="row">
|
|
54
|
+
<div class="col">
|
|
55
|
+
{% for contest in contests %}
|
|
56
|
+
<a href="{{ contest.link }}">
|
|
57
|
+
<img
|
|
58
|
+
src="{{ contest.img }}"
|
|
59
|
+
alt="{{ contest.title }}"
|
|
60
|
+
class="img-fluid"
|
|
61
|
+
/>
|
|
62
|
+
</a>
|
|
63
|
+
{% endfor %}
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
-->
|
|
67
|
+
</div>
|
|
68
|
+
{% endblock %}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{% extends "base.html" %} {% block content %}
|
|
2
|
+
<div class="container text-center">
|
|
3
|
+
<h1>{{ title }}</h1>
|
|
4
|
+
<p>
|
|
5
|
+
by <a href="{{ author_link }}">{{ author }}</a> in
|
|
6
|
+
<a href="{{ category_link }}">{{ category }}</a> >
|
|
7
|
+
<a href="{{ channel_link }}">{{ channel }}</a>
|
|
8
|
+
</p>
|
|
9
|
+
<p>{{ views }} Views, {{ favorites }} Favorites</p>
|
|
10
|
+
|
|
11
|
+
<div class="row justify-content-center">
|
|
12
|
+
{% for thumbnail in thumbnails %}
|
|
13
|
+
<div class="col-md-4 mb-3">
|
|
14
|
+
<div class="ible-list-item">
|
|
15
|
+
<a href="{{ thumbnail.link }}" style="color: #bbc2cf">
|
|
16
|
+
<img
|
|
17
|
+
class="img-fluid"
|
|
18
|
+
src="{{ thumbnail.img }}"
|
|
19
|
+
alt="{{ thumbnail.title }}"
|
|
20
|
+
style="max-width: 350px"
|
|
21
|
+
/>
|
|
22
|
+
<p>{{ thumbnail.author }}</p>
|
|
23
|
+
</a>
|
|
24
|
+
<p>
|
|
25
|
+
by <a href="{{ thumbnail.author_link }}">{{ thumbnail.author }}</a> in
|
|
26
|
+
<a href="{{ thumbnail.channel_link }}">{{ thumbnail.channel }}</a>
|
|
27
|
+
</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
{% endfor %}
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
{% endblock %}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
{% extends "base.html" %}
|
|
3
|
+
|
|
4
|
+
{% block content %}
|
|
5
|
+
<center>
|
|
6
|
+
<img src="{{ img }}" alt="{{ title }}" style="max-width:98vw;">
|
|
7
|
+
<p>{{ entry_count }} Entries, {{ prizes }} Prizes</p>
|
|
8
|
+
<br>
|
|
9
|
+
{{ info|safe }}
|
|
10
|
+
<div class="ible-list">
|
|
11
|
+
{% for ible in entries %}
|
|
12
|
+
<div class="ible-list-item">
|
|
13
|
+
<a href="{{ ible.link }}" style="color:#bbc2cf;">
|
|
14
|
+
<img style="max-width:350px;" src="{{ ible.entry_img }}" alt="{{ ible.entry_title }}">
|
|
15
|
+
<p>{{ ible.entry_title }}</p>
|
|
16
|
+
</a>
|
|
17
|
+
<p>by <a href="{{ ible.author_link }}">{{ ible.author }}</a> in <a href="{{ ible.channel_link }}">{{ ible.channel }}</a></p>
|
|
18
|
+
<p>{{ ible.views }} Views</p>
|
|
19
|
+
</div>
|
|
20
|
+
{% endfor %}
|
|
21
|
+
</div>
|
|
22
|
+
</center>
|
|
23
|
+
{% endblock %}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{% extends "base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block content %}
|
|
4
|
+
<center>
|
|
5
|
+
<h1>{{ title }}</h1>
|
|
6
|
+
{{ contest_count|safe }}
|
|
7
|
+
<br>
|
|
8
|
+
<div class="contest-list">
|
|
9
|
+
{% for contest in contests %}
|
|
10
|
+
<div class="contest-list-item">
|
|
11
|
+
<a href="{{ contest.link }}">
|
|
12
|
+
<img src="{{ contest.img }}" alt="{{ contest.alt }}" style="max-width:500px;">
|
|
13
|
+
</a>
|
|
14
|
+
<p>Closes {{ contest.deadline }}</p>
|
|
15
|
+
<p class="ible-small">{{ contest.prizes }} Prizes, {{ contest.entries }} Entries</p>
|
|
16
|
+
</div>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</div>
|
|
19
|
+
<div class="closed-contests" id="contest-winners">
|
|
20
|
+
<h2>Winner's Circle</h2>
|
|
21
|
+
{% for closed in closed %}
|
|
22
|
+
<div class="closed-contest">
|
|
23
|
+
<a href="{{ closed.link }}"><img class="closed-contest-contest" src="{{ closed.img }}"
|
|
24
|
+
alt="{{ closed.alt }}"></a>
|
|
25
|
+
{% for featured_items in closed.featured_items %}
|
|
26
|
+
<div class="closed-contest-winner">
|
|
27
|
+
<a href="{{ featured_items.link }}">
|
|
28
|
+
<img class="closed-contest-winner-img" src="{{ featured_items.img }}"
|
|
29
|
+
alt="{{ featured_items.title}}">
|
|
30
|
+
<br>
|
|
31
|
+
<b>{{ featured_items.title }}</b>
|
|
32
|
+
</a>
|
|
33
|
+
<p>by <a href="{{ featured_items.author_link }}">{{ featured_items.author }}</a></p>
|
|
34
|
+
</div>
|
|
35
|
+
{% endfor %}
|
|
36
|
+
</div>
|
|
37
|
+
{% endfor %}
|
|
38
|
+
</div>
|
|
39
|
+
</center>
|
|
40
|
+
{% endblock %}
|