Compare commits

...

8 Commits

  1. 132
      app.py
  2. 10
      static/assets/js/toggle.js
  3. 940
      static/assets/styles.css
  4. 5
      templates/_activities.html
  5. 14
      templates/_article.html
  6. 16
      templates/_base.html
  7. 25
      templates/_list.html
  8. 5
      templates/_main.html
  9. 43
      templates/_nav.html
  10. 99
      templates/_newsletter.html
  11. 9
      templates/activities.html
  12. 11
      templates/article.html
  13. 36
      templates/base.html
  14. 10
      templates/cn-home.html
  15. 21
      templates/collection.html
  16. 4
      templates/data.html
  17. 37
      templates/home.html
  18. 9
      templates/index.html
  19. 14
      templates/meetups.html
  20. 90
      templates/newsletter.html
  21. 31
      templates/publications-old.html
  22. 29
      templates/publications.html
  23. 26
      templates/test.html

132
app.py

@ -14,18 +14,51 @@ class WikiApp(Flask):
super().__init__(*args, **kwargs)
# Define routes
# self.route('/', methods=['GET'])(self.homepage)
self.route('/', methods=['GET'])(self.homepage_new)
self.route('/', methods=['GET'])(self.home)
self.route('/activities', methods=['GET'])(self.activities)
self.route('/data', methods=['GET'])(self.data_int)
self.route('/generate-nl', methods=['GET'])(self.create_nl)
self.route('/newsletter/<string:title>', methods=['GET'])(self.generate_newsletter)
self.route('/publications', methods=['GET'])(self.fetch_publications)
self.route('/meetups', methods=['GET'])(self.fetch_meetups)
self.route('/<string:title>', methods=['GET'])(self.page_content)
self.route('/favicon.ico')(self.favicon)
self.route('/archive/<string:collection>', methods=['GET'])(self.get_collection)
# Return Homepage
def home(self):
pages = ['Homepage']
homepage_content = ''
for page in pages:
# Make a request to MediaWiki API to get content of a specific page
response = requests.get(self.MEDIAWIKI_BASE_URL + self.BASE_API, params={'action': 'parse', 'page': page, 'format': 'json'})
data = response.json()
# Extract page title and content
page_content = data['parse']['text']['*']
page_content, table = self.fix_html(page_content)
homepage_content += page_content
return render_template('index.html', cont=homepage_content, table=table)
def activities(self):
# fetch publications as test
activity_list = self.get_activities()
return render_template('activities.html', title="Activities", activities=activity_list)
def get_activities(self):
concepts = ['Activities']
publication_page_list = self.fetch_all_activies(concepts)
updated_cat_list = self.fetch_pages_cat(publication_page_list)
activities = updated_cat_list.get('Activities', [])
srted_activities = dict(sorted(activities.items(), key=lambda item: datetime.strptime(item[1]['date'], "%d.%m.%Y" ), reverse=True) )
# projects = updated_cat_list.get('Projects', [])
# sorted_prj = dict(sorted(projects.items(), key=lambda item: datetime.strptime(item[1]['date'], "%d.%m.%Y" ), reverse=True) )
# newsletters = updated_cat_list.get('Newsletters', [])
# sorted_nl = dict(sorted(newsletters.items(), key=lambda item: datetime.strptime(item[1]['date'], "%d.%m.%Y" ), reverse=True) )
return srted_activities
def data_int(self):
return render_template('data.html')
def create_nl(self):
# Function for generating a newsletter
pass
def generate_newsletter(self, title):
content, title, date = self.fetch_page(title)
@ -34,7 +67,16 @@ class WikiApp(Flask):
new_date_events = given_date + relativedelta(weeks=4)
opportunites_dict = self.fetch_opportunities(given_date.date(), new_date_opp.date())
events_dict = self.fetch_events(given_date.date(), new_date_events.date())
return render_template('newsletter.html', nav_elements=self.get_nav_menu(), content=content, title=title, events=events_dict, opportunities=opportunites_dict)
spotlight = False
# Loop through the events and check the spotlight attribute
for category, events in events_dict.items():
for event in events:
if event['spotlight']:
spotlight = True
break
return render_template('newsletter.html', nav_elements=self.get_nav_menu(), cont=content, title=title, events=events_dict, opportunities=opportunites_dict, spotlight=spotlight)
def fetch_opportunities(self, pub_date, future_date):
all_opportunities = self.fetch_all_opportunities(pub_date, future_date)
@ -259,6 +301,24 @@ class WikiApp(Flask):
category_page_list[category][page_title].update({'pageid':pageid, 'title': title, 'source': source })
return category_page_list
def fetch_all_activies(self, categories):
category_page_list = {}
for category in categories:
response = requests.get(self.MEDIAWIKI_BASE_URL + self.BASE_API, params={'action': 'ask', 'query': '[[Concept:'+category+']]|?Activities:Date|?Activities:Draft', 'format': 'json', 'formatversion': '2'})
data = response.json()
page_title_timestamps = {}
for page_title, page_data in data['query']['results'].items():
if 'printouts' in page_data and 'Activities:Date' in page_data['printouts']:
raw_timestamp = page_data['printouts']['Activities:Date'][0]['raw']
raw_timestamp = raw_timestamp[2:]
lol = datetime.strptime(raw_timestamp, "%Y/%m/%d")
formatted_date = lol.strftime("%d.%m.%Y")
if(page_data['printouts']['Activities:Draft'][0] == 'f'):
page_title_timestamps[page_title] = {'date': formatted_date, 'draft': page_data['printouts']['Activities:Draft'][0]}
category_page_list[category] = page_title_timestamps
return category_page_list
def fetch_all_pages(self, categories):
category_page_list = {}
@ -296,10 +356,17 @@ class WikiApp(Flask):
data = response.json()
# Extract page title and content
page_title = data['parse']['title']
page_content = data['parse']['text']['*']
page_content = self.fix_html(page_content)
return render_template('article.html', nav_elements=self.get_nav_menu(), title=page_title, content=page_content)
try:
page_title = data['parse']['title']
page_content = data['parse']['text']['*']
page_content, table = self.fix_html(page_content)
except:
page_title = 'Page not found'
page_content = 'The page you are looking for does not exist.'
table = None
return render_template('index.html', title=page_title, cont=page_content, table=table)
def fetch_page(self, title):
# Make a request to MediaWiki API to get content of a specific page
@ -308,14 +375,15 @@ class WikiApp(Flask):
# Extract page title and content
page_title = data['parse']['title']
page_content = data['parse']['text']['*']
page_content = self.fix_html(page_content)
page_content, table = self.fix_html(page_content)
page_date = re.search(r'\d{4}-\d{2}-\d{2}', data['parse']['text']['*'])
if(page_date):
date = page_date.group(0)
return page_content, page_title, date
else:
return page_content, page_title
date = None
return page_content, page_title, date
def get_nav_menu(self):
response = requests.get(self.MEDIAWIKI_BASE_URL + self.BASE_API, params={'action': 'ask', 'query': '[[Concept:MainNavigation]]', 'format': 'json', 'formatversion': '2'})
@ -348,7 +416,7 @@ class WikiApp(Flask):
for link in links:
# Add _blank to href
link['target'] = '_blank'
link.string = link.string.strip() + ""
link.string = link.string.strip()
# Find all a tags with href containing 'index.php'
links = soup.find_all('a', href=lambda href: href and 'index.php' in href)
@ -372,23 +440,51 @@ class WikiApp(Flask):
file_link.unwrap()
soup = self.remove_thumbnail_img(soup)
# Locate the table and the comment
# Locate the table and store it in an object
table = soup.find('table')
# Remove inline styles by deleting the 'style' attribute
if table and 'style' in table.attrs:
del table['style']
# Add the class 'table-cont' to the table
# Add the class 'table-cont' to the table (if not already removed)
if table:
table['class'] = table.get('class', []) + ['table-cont']
comments = soup.find_all(string=lambda text: isinstance(text, Comment))
comment = comments[-1] if comments else None
# Insert the table before the comment
if comment and table is not None:
comment.insert_before(table.extract())
return soup.prettify()
table_html = str(table) if table else None # Store the table HTML
has_content = False
# Check if the table has meaningful rows
if table:
rows = table.find_all('tr')
has_content = False # Assume no meaningful content
for row in rows:
cells = row.find_all(['td', 'th'])
# Check if any cell has non-empty text
if any(cell.get_text(strip=True) for cell in cells):
has_content = True
break
if has_content is False:
table_html = None
# Remove the table from the main HTML
if table:
table.decompose()
# Return the modified HTML
return soup.prettify(), table_html
def remove_thumbnail_img(self, soup):
thumbnail = soup.find_all(attrs={"typeof": "mw:File/Thumb"})

10
static/assets/js/toggle.js

@ -0,0 +1,10 @@
// script.js
document.addEventListener("DOMContentLoaded", () => {
const menuToggle = document.querySelector("#menu-btn");
const hiddenMenu = document.querySelector("#nav-menu");
menuToggle.addEventListener("click", () => {
hiddenMenu.classList.toggle("show");
});
});

940
static/assets/styles.css

File diff suppressed because it is too large

5
templates/_activities.html

@ -0,0 +1,5 @@
<div id="main-container">
{% include "_nav.html" %}
<div id="line-divider"></div>
{% include "_list.html" %}
</div>

14
templates/_article.html

@ -0,0 +1,14 @@
<div id="content-container" class="disable-scrollbar">
<div id="content-title" class="title">{{ title | safe }}</div>
<div id="content-body">
{{ cont | safe }}
</div>
<div class="astr-line">&#x2732; &#x2732; &#x2732;</div>
<div id="content-metadata">
{%if table != None %}
<div id="wiki-box">
{{ table | safe }}
</div>
{%endif%}
</div>
</div>

16
templates/_base.html

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}CONCEPT NULL{% endblock %}</title>
<link rel="stylesheet" href="/static/assets/styles.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:[email protected]&display=swap" rel="stylesheet">
<link rel="icon" href="/static/assets/images/favicon.ico" type="image/x-icon">
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>

25
templates/_list.html

@ -0,0 +1,25 @@
<div id="content-container" class="disable-scrollbar">
<div id="content-title" class="title">{{ title | safe }}</div>
<p>Announcements, Events, and Other CONCEPT NULL related activities ╰(*°▽°*)╯</p>
<div class="astr-line">&#x2732; &#x2732; &#x2732;</div>
<div id="content-body">
<div id="activity-list">
{% for key, value in activities.items() %}
<a href="/{{key}}">
<div class="activity">
<h1 class="activity-title"> {{ key }} ({{ value.date }})</h1>
<div class="activity-image"><img src="{{ value.source }}"></div>
</div>
</a>
{% endfor %}
</div>
</div>
<div class="astr-line">&#x2732; &#x2732; &#x2732;</div>
<div id="content-metadata">
{%if table != None %}
<div id="wiki-box">
{{ table | safe }}
</div>
{%endif%}
</div>
</div>

5
templates/_main.html

@ -0,0 +1,5 @@
<div id="main-container">
{% include "_nav.html" %}
<div id="line-divider"></div>
{% include "_article.html" %}
</div>

43
templates/_nav.html

@ -0,0 +1,43 @@
<div id="index-container" class="disable-scrollbar">
<a href="/"><div id="index-header">
<div class="ascii">
.g8"""bgd .g8""8q. `7MN. `7MF' .g8"""bgd `7MM"""YMM `7MM"""Mq. MMP""MM""YMM
.dP' `M .dP' `YM. MMN. M .dP' `M MM `7 MM `MM.P' MM `7
dM' ` dM' `MM M YMb M dM' ` MM d MM ,M9 MM
MM MM MM M `MN. M MM MMmmMM MMmmdM9 MM
MM. MM. ,MP M `MM.M MM. MM Y , MM MM
`Mb. ,' `Mb. ,dP' M YMM `Mb. ,' MM ,M MM MM
`"bmmmd' `"bmmd"' .JML. YM `"bmmmd' .JMMmmmmMMM .JMML. .JMML. </div>
<div class="ascii">
`7MN. `7MF'`7MMF' `7MF'`7MMF' `7MMF'
MMN. M MM M MM MM
M YMb M MM M MM MM
M `MN. M MM M MM MM
M `MM.M MM M MM , MM ,
M YMM YM. ,M MM ,M MM ,M
.JML. YM `bmmmmd"' .JMMmmmmMMM .JMMmmmmMMM </div>
</div></a>
<div id="ascii-menu">
<div class="astr-line-menu">&#x2732; &#x2732; &#x2732;</div>
<div class="list-container" id="menu-btn"><a class="button-link">MENU</a></div>
<div class="astr-line-menu">&#x2732; &#x2732; &#x2732;</div>
</div>
<div id="nav-menu">
<div class="list-container-mobile"><a href="/activities" class="button-link">activities &#8595;</a></div>
<div class="list-container-mobile"><a href="https://conceptnull.substack.com/subscribe" target="_blank" class="button-link">newsletter &#8595;</a></div>
<div class="list-container-mobile"><a href="https://www.instagram.com/conceptnull/" class="button-link">instagram &#8595;</a></div>
</div>
<div class="astr-line">&#x2732; &#x2732; &#x2732;</div>
<div id="index-content">
<p>A grassroot organisation of artists, creative technologist, designers, and educators focused on supporting a vibrant new media arts community in Ireland -- through our events, newsletter, and other activities.</p>
</div>
<div id="index-links">
<div id="index-link-list">
<div class="list-container"><a href="/activities" class="button-link">activities &#8595;</a></div>
<div class="list-container"><a href="https://conceptnull.substack.com/subscribe" target="_blank" class="button-link">newsletter &#8595;</a></div>
<div class="list-container"><a href="#" class="button-link">instagram &#8595;</a></div>
</div>
</div>
</div>
<script src={{ url_for('static', filename='assets/js/toggle.js') }}></script>

99
templates/_newsletter.html

@ -0,0 +1,99 @@
<div id="content-container" class="disable-scrollbar">
<div id="content-title" class="title">{{ title | safe }}</div>
<div id="content-body">
{{ cont | safe }}
<div class='event-cont'>
{% if spotlight %}
{% for key, value in events.items() %}
<hr>
<h2 class="opportunity-text-padding">🔦 Spotlight</h2>
<hr>
<div>
<p>&#8203;</p>
{% for data in value %}
{% if data.spotlight %}
<div>
<a href='/{{ data.pagetitle }}' target="_blank"><h4><b>{{ data.name }}</b></h4></a>
<p><b>Organiser/s: </b>{{ data.org }}</p>
<p><b>Location: </b>{{ data.location }}</p>
<p><b>Date: </b>{{ data.deadline }} &#8594; {{ data.endDate}}</p>
<p class="opportunity-text-padding">{{ data.text }}</p>
<a href={{ data.source }} target='_blank'><p><b>Source ↗</b></p></a>
</div>
<p>&#8203;</p>
{% endif %}
{% endfor %}
</div>
{% endfor %}
{% endif %}
{% for key, value in events.items() %}
<hr>
<h2 class="opportunity-text-padding">🎪 Events</h2>
<hr>
<div>
<p>&#8203;</p>
{% for data in value %}
{% if not data.spotlight %}
<div>
<a href='/{{ data.pagetitle }}' target="_blank"><h4><b>{{ data.name }}</b></h4></a>
<p><b>Organiser/s: </b>{{ data.org }}</p>
<p><b>Location: </b>{{ data.location }}</p>
<p><b>Date: </b>{{ data.deadline }} &#8594; {{ data.endDate}}</p>
<p class="opportunity-text-padding">{{ data.text }}</p>
<a href={{ data.source }} target='_blank'><p><b>Source ↗</b></p></a>
</div>
<p>&#8203;</p>
{%endif%}
{% endfor %}
</div>
{% endfor %}
</div>
<div>
{% for key, value in opportunities.items() %}
<hr>
<h2 class="opportunity-text-padding">{{ key }}</h2>
<hr>
<div>
<p>&#8203;</p>
{% for data in value %}
<div class='opp'>
<a href='/{{ data.pagetitle }}' target="_blank"><h4><b>{{ data.name }}</b></h4></a>
<p><b>Deadline:</b> {{ data.deadline }}</p>
<p><b>Organiser/s: </b>{{ data.org }}</p>
<p><b>Location: </b>{{ data.location }}</p>
<p class="opportunity-text-padding">{{ data.text }}</p>
<a href={{ data.source }} target='_blank'><p><b>Source ↗</b></p></a>
<p>&#8203;</p>
</div>
{% endfor %}
</div>
{% endfor %}
<hr>
</div>
<div class='article-cont'>
<p>That’s it for now! The newsletter gets sent out 1st and 15th of every month and we post open calls and events as they come in on our <a href='https://www.instagram.com/conceptnull/' target='_blank'>Instagram</a> so be sure to follow us there.</p>
<p>&#8203;</p>
<p>Again, thank you for all of your support as we continue to grow our project with the help of a great community and, as we always say, we would love to hear your thoughts, projects, events or other open opportunities so drop us an email.</p>
<p>&#8203;</p>
<p>Chat soon, <a href='https://conceptnull.org/' target='_blank'>Concept NULL</a></p>
<p>&#8203;</p>
<p>[[email protected]]</p>
</div>
</div>
<div class="astr-line">&#x2732; &#x2732; &#x2732;</div>
<div id="content-metadata">
{%if table != None %}
<div id="wiki-box">
{{ table | safe }}
</div>
{%endif%}
</div>
</div>

9
templates/activities.html

@ -0,0 +1,9 @@
{% extends "_base.html" %}
{% block title %}CONCEPT NULL{% endblock %}
{% block content %}
{% include "_activities.html" %}
{% endblock %}

11
templates/article.html

@ -1,11 +0,0 @@
{% extends "base.html" %}
{% block title %}Ø | {{ title }}{% endblock %}
{% block content %}
<div class='content-cont'>
<h1 class='content-header'>{{ title }}</h1>
<div class='article-cont'>
{{ content | safe }}
</div>
</div>
{% endblock %}

36
templates/base.html

@ -1,36 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='assets/styles.css') }}">
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='assets/images/favicon.png') }}">
<body>
<div class='main-cont'>
<div class='nav-cont'>
<div class='header-logo'>
<a href="/"><img src ="{{ url_for('static', filename='assets/images/cn-logo.svg') }}" alt="ConceptNULL"/></a>
</div>
<div class='nav-element-cont'>
{% for key, element in nav_elements.items() %}
<div class='nav-element'><a href="{{ url_for('page_content', title=element.title) }}">
{% if element.title == 'Concept Null' %}
About
{% else %}
{{ element.title }}
{% endif %}
</a><div class='spinning-star'> &#10022;</div></div>
{% endfor %}
</div>
</div>
<div class="content">
{% block content %}
{% endblock %}
</div>
</div>
<a class="link-blank" href="https://conceptnull.substack.com/subscribe" target="_blank"><span id="subscribe-button">Subscribe</span></a>
</body>
</html>

10
templates/cn-home.html

@ -1,10 +0,0 @@
{% extends "base.html" %}
{% block title %}Ø | CONCEPTNULL {% endblock %}
{% block content %}
<div class='content-cont'>
<br></br>
<div class='article-cont'>
{{ content | safe }}
</div>
</div>
{% endblock %}

21
templates/collection.html

@ -1,21 +0,0 @@
{% extends "base.html" %}
{% block title %}Ø | {{ title }}{% endblock %}
{% block content %}
<div class='content-cont'>
<div class='collection-header'>{{ '(' + title + ')'}}</div>
<div class='collection-cont'>
{% for key, values in collection.items() %}
<div class='collection-element'>
<a href={{ '/' + key }}><div class='collection-title'> {{ key }} </div></a>
<div class='collection-date'> {{ values.date }} </div>
<a href={{ '/' + key }}><div class='section-img'><img src={{ values.source}}></div></a>
</div>
{% endfor %}
</div>
<div class='foot'></div>
</div>
{% endblock %}

4
templates/data.html

@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ø | D.A.T.A Interview</title>
<title>CONCEPT NULL</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='assets/css/data-styles.css') }}">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/p5.js"></script>
@ -87,4 +87,4 @@
</body>
</html>
</html>

37
templates/home.html

@ -1,37 +0,0 @@
{% extends "base.html" %}
{% block title %} Ø | Home{% endblock %}
{% block content %}
<div class='section-cont'>
<div class='section'>
<a class='section-header' href='/archive/articles'><div class='section-title'><div style="display: inline-flex; text-align: center; justify-content: center; align-items: center; line-height: 100%; padding: 3.3px; font-size: 25px; font-style: italic; object-fit: contain; font-family: monospace; color: white; text-shadow: white 0px 5px 5px; text-decoration: none; width: 100%;">articles&nbsp;<img src="https://i-love-everything.com/buttons/img/7.gif" style="max-height: 32px;"></div></div></a>
<div class='section-group'>
{% for key, values in articles.items() %}
<div class='section-element'><a href="{{ url_for('page_content', title=values.title) }}">↘ {{ values.title}}</a></div>
<div class='section-date'>🙿 {{ values.date }}</div>
<div class='section-img'><a href="{{ url_for('page_content', title=values.title) }}"><img src="{{ values.source }}"></a></div>
{% endfor %}
</div>
</div>
<div class='section'>
<a class='section-header' href='/archive/newsletters'><div class='section-title'><div style="display: inline-flex; text-align: center; justify-content: center; align-items: center; line-height: 100%; padding: 2.2px; font-size: 25px; font-style: oblique; object-fit: contain; font-family: monospace; color: white; text-shadow: red 0px 2px 5px; width: 100%;">newsletters<br><img src="https://i-love-everything.com/buttons/img/34.gif" style="max-height: 32px;"></div></div></a>
<div class='section-group'>
{% for key, values in newsletters.items() %}
<div class='section-element'><a href="{{ url_for('page_content', title=values.title) }}">↘ {{ values.title }}</a></div>
<div class='section-date'>🙿 {{ values.date }}</div>
<div class='section-img'><a href="{{ url_for('page_content', title=values.title) }}"><img src="{{ values.source}}"></a></div>
{% endfor %}
</div>
</div>
<div class='section'>
<a class='section-header' href='/archive/projects'><div class='section-title'><div style="display: inline-flex; text-align: center; justify-content: center; align-items: center; line-height: 100%; padding: 3.3px; font-size: 25px; font-style: normal; object-fit: contain; font-family: monospace; color: white; border: 0px solid white; width: 100%;">projects<img src="https://i-love-everything.com/buttons/img/26.gif" style="max-height: 32px;"></div></div></a>
<div class='section-group'>
{% for key, values in projects.items() %}
<div class='section-element'><a href="{{ url_for('page_content', title=values.title) }}">↘ {{ values.title }}</a></div>
<div class='section-date'>🙿 {{ values.date }}</div>
<div class='section-img'><a href="{{ url_for('page_content', title=values.title) }}"><img src="{{ values.source }}"></a></div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}

9
templates/index.html

@ -0,0 +1,9 @@
{% extends "_base.html" %}
{% block title %}CONCEPT NULL{% endblock %}
{% block content %}
{% include "_main.html" %}
{% endblock %}

14
templates/meetups.html

@ -1,14 +0,0 @@
{% extends "base.html" %}
{% block title %} Ø | Meetups {% endblock %}
{% block content %}
<div class='content-cont'>
<h1 class='content-header'>Meetups</h1>
<div class='article-cont'>
{{ content | safe }}
</div>
<div class='foot'></div>
</div>
{% endblock %}

90
templates/newsletter.html

@ -1,87 +1,13 @@
{% extends "base.html" %}
{% block title %}Ø | {{ title }}{% endblock %}
{% block content %}
<div class='content-cont'>
<h1 class='content-header'>{{ title }}</h1>
<div class='article-cont'>
{{ content | safe }}
</div>
<p>&#8203;</p>
<div class='event-cont'>
{% for key, value in events.items() %}
<hr>
<h2 class='event-heading'>🔦 Spotlight</h2>
<hr>
<div class='list-events'>
{% for data in value %}
{% if data.spotlight %}
<div class='event'>
<a class='link' href='/{{ data.pagetitle }}' target="_blank"><h4 class='event-name'><b>{{ data.name }}</b></h4></a>
<p class='event-org'><b>Organiser/s: </b>{{ data.org }}</p>
<p class='event-location'><b>Location: </b>{{ data.location }}</p>
<p class='event-deadline'><b>Date: </b>{{ data.deadline }} &#8594; {{ data.endDate}}</p>
<p class='event-text'>{{ data.text }}</p>
<a href={{ data.source }} target='_blank'><p class='event-link'><b>Link ↗</b></p></a>
</div>
<p>&#8203;</p>
{% endif %}
{% endfor %}
</div>
{% endfor %}
{% for key, value in events.items() %}
<hr>
<h2 class='event-heading'>🎪 Events</h2>
<hr>
<div class='list-events'>
{% for data in value %}
{% if not data.spotlight %}
<div class='event'>
<a class='link' href='/{{ data.pagetitle }}' target="_blank"><h4 class='event-name'><b>{{ data.name }}</b></h4></a>
<p class='event-org'><b>Organiser/s: </b>{{ data.org }}</p>
<p class='event-location'><b>Location: </b>{{ data.location }}</p>
<p class='event-deadline'><b>Date: </b>{{ data.deadline }} &#8594; {{ data.endDate}}</p>
<p class='event-text'>{{ data.text }}</p>
<a href={{ data.source }} target='_blank'><p class='event-link'><b>Link ↗</b></p></a>
</div>
<p>&#8203;</p>
{%endif%}
{% endfor %}
</div>
{% endfor %}
</div>
{% extends "_base.html" %}
<div class='opp-cont'>
{% for key, value in opportunities.items() %}
<hr>
<h2 class='opp-type-heading'>{{ key }}</h2>
<hr>
<div class='list-opp'>
{% for data in value %}
<div class='opp'>
<a class='link' href='/{{ data.pagetitle }}' target="_blank"><h4 class='opp-name'><b>{{ data.name }}</b></h4></a>
<p class='opp-deadline'><b>Deadline:</b> {{ data.deadline }}</p>
<p class='opp-location'><i>{{ data.location }}</i></p>
<p class='opp-text'>{{ data.text }}</p>
<a href={{ data.source }} target='_blank'><p class='opp-link'><b>Link ↗</b></p></a>
<p>&#8203;</p>
</div>
{% endfor %}
</div>
{% endfor %}
<hr>
</div>
{% block title %}CONCEPT NULL{% endblock %}
<div class='article-cont'>
<p>That’s it for now! The newsletter gets sent out 1st and 15th of every month and we post open calls and events as they come in on our <a href='https://www.instagram.com/conceptnull/' target='_blank'>Instagram</a> so be sure to follow us there.</p>
{% block content %}
<p>Again, thank you for all of your support as we continue to grow our project with the help of a great community and, as we always say, we would love to hear your thoughts, projects, events or other open opportunities so drop us an email.</p>
<p>Chat soon, <a href='https://conceptnull.org/' target='_blank'>Concept NULL</a></p>
<p>[[email protected]]</p>
</div>
<div id="main-container">
{% include "_nav.html" %}
<div id="line-divider"></div>
{% include "_newsletter.html" %}
</div>
{% endblock %}
{% endblock %}

31
templates/publications-old.html

@ -1,31 +0,0 @@
{% extends "base.html" %}
{% block title %} Ø | Publications{% endblock %}
{% block content %}
<div class='section-cont'>
<div class='section'>
<a class='section-header' href='/archive/newsletters'><div class='section-title'><div style="display: inline-flex; text-align: center; justify-content: center; align-items: center; line-height: 100%; padding: 2.2px; font-size: 25px; font-style: normal; object-fit: contain; font-family: monospace; color: black; width: 100%;">NEWSLETTERS<br><!--<img src="https://i-love-everything.com/buttons/img/34.gif" style="max-height: 32px;">--></div></div></a>
<div class='section-group'>
{% for key, values in newsletters.items() %}
<div class='section-object'>
<div class='section-element'><a href="/newsletter{{ url_for('page_content', title=values.title) }}">↘ {{ values.title }}</a></div>
<div class='section-date'>{{ values.date }}</div>
<div class='section-img'><a href="/newsletter{{ url_for('page_content', title=values.title) }}"><img src="{{ values.source}}"></a></div>
</div>
{% endfor %}
</div>
</div>
<div class='section'>
<a class='section-header' href='/archive/projects'><div class='section-title'><div style="display: inline-flex; text-align: center; justify-content: center; align-items: center; line-height: 100%; padding: 3.3px; font-size: 25px; font-style: normal; object-fit: contain; font-family: monospace; color: black; border: 0px solid black; width: 100%;">PROJECTS<!--<img src="https://i-love-everything.com/buttons/img/26.gif" style="max-height: 32px;">--></div></div></a>
<div class='section-group'>
{% for key, values in projects.items() %}
<div class='section-object'>
<div class='section-element'><a href="{{ url_for('page_content', title=values.title) }}">↘ {{ values.title }}</a></div>
<div class='section-date'>{{ values.date }}</div>
<div class='section-img'><a href="{{ url_for('page_content', title=values.title) }}"><img src="{{ values.source }}"></a></div>
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}

29
templates/publications.html

@ -1,29 +0,0 @@
{% extends "base.html" %}
{% block title %} Ø | Publications{% endblock %}
{% block content %}
<div class='pub-section-cont'>
<div class='pub-section'>
<h1>Newsletter</h1>
<p>Currently, we run a bi-weekly newsletter that aims to highlight different types of events and opportunities centered around new media and digital culture in Ireland.</p>
<p>The newsletter is released on the <b>1st</b> and <b>15th</b> of every month through Substack - You can subcribe through Substack by clicking the **SUBSCRIBE** button, and receive it directly into your inbox~</p>
<p>If you wish to sumbit any opportunities, events, residences (...) that would be a good fit for the newsletter -- please feel free to reach out to us by emailing us at <i>[email protected]</i></p>
<p>***</p>
<p><i>The future plan we have for the platform is that users will have the ability to add their own entries into the upcoming newsletter through the Concept NULL wiki - acting as more of a decentralised noticeboard than just a newsletter. As for now, you can view our <a href="/newsletter{{ url_for('page_content', title=latest_title) }}">work-in-progress newsletter</a>, as we compile it for our Substack.</i></p>
<p>***</p>
</div>
<div class='pub-section'>
<h1>Projects</h1>
<div class='section-group'>
{% for key, values in projects.items() %}
<div class='section-object'>
<div class='section-element'><a href="{{ url_for('page_content', title=values.title) }}">↘ {{ values.title }}</a></div>
<div class='section-date'>{{ values.date }}</div>
<div class='section-img'><a href="{{ url_for('page_content', title=values.title) }}"><img src="{{ values.source }}"></a></div>
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}

26
templates/test.html

@ -1,26 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>test</title>
<link rel="stylesheet" href="{{ url_for('static', filename='assets/styles.css') }}">
<body>
<div class='main-cont'>
<div class='nav-cont'>
<div class='header-title'>
<a href="/">CØNCEPTNULL</a>
</div>
<div class='nav-element-cont'>
<p>test</p>
</div>
</div>
<div class="content">
</div>
</div>
<div class="footer">
<a href="https://wiki.conceptnull.org/" target="_blank"><div style="display: inline-flex; text-align: center; justify-content: center; align-items: center; line-height: 100%; padding: 3.3px; font-size: 12px; font-style: normal; object-fit: contain; background: rgb(255, 255, 255); color: rgb(0, 0, 0); text-shadow: rgb(8, 0, 255) 0px 3px 3px; flex-wrap: wrap;"><span style="display:flex;">hypertext connection<img src="https://i-love-everything.com/buttons/img/67.gif" style="max-height: 32px;"></span><span style="width:100%;text-shadow:0 0 5px #fff">𓆝 𓆟 𓆞 𓆝</span></div></a>
</div>
</body>
</html>
Loading…
Cancel
Save