0)
27 |
28 | def test_JSON__overlapping_events(self):
29 | # get event and then see if it shows up as overlapping
30 | event = Event.objects.QUERYSET__upcoming()[0]
31 | self.assertTrue(len(Event.objects.JSON__overlapping_events(
32 | event.int_UNIXtime_event_start, 120, 'Hackatorium')['overlapping_events']) > 0)
33 |
34 | def test_QUERYSET__in_space(self):
35 | event = Event.objects.QUERYSET__upcoming()[0]
36 | event.one_space = Space.objects.all()[0]
37 | event.save()
38 | self.assertTrue(
39 | len(Event.objects.QUERYSET__in_space(one_space=event.one_space)) > 0)
40 |
41 | def test_LIST__in_minutes(self):
42 | self.assertTrue(type(Event.objects.LIST__in_minutes(10)) == list)
43 |
44 | def test_LIST__search_results(self):
45 | self.assertTrue(
46 | type(Event.objects.all().LIST__search_results()) == list)
47 |
--------------------------------------------------------------------------------
/_database/tests/test_guildes.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 | from _database.models import Guilde
3 |
4 |
5 | class GuildesTestCase(TestCase):
6 | @classmethod
7 | def setUpTestData(cls):
8 | Guilde(str_name_en_US='Laser Guilde').save()
9 |
10 | def test_LIST__search_results(self):
11 | self.assertTrue(len(Guilde.objects.LIST__search_results()) > 0)
12 |
--------------------------------------------------------------------------------
/_database/tests/test_machines.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 | from _database.models import Machine
3 |
4 |
5 | class MachinesTestCase(TestCase):
6 | @classmethod
7 | def setUpTestData(cls):
8 | Machine(str_name_en_US='Laser Cutter').save()
9 |
10 | def test_LIST__search_results(self):
11 | self.assertTrue(len(Machine.objects.LIST__search_results()) > 0)
12 |
--------------------------------------------------------------------------------
/_database/tests/test_meetingnotes.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 | from _database.models import MeetingNote
3 |
4 |
5 | class MeetingNotesTestCase(TestCase):
6 | def test_LIST__search_results(self):
7 | MeetingNote.objects.import_all_from_wiki(
8 | WIKI_API_URL='https://www.noisebridge.net/api.php', test=True)
9 | self.assertTrue(len(MeetingNote.objects.LIST__search_results()) > 0)
10 |
11 | def test_start_and_meeting_end(self):
12 | MeetingNote().start('hackspace-os-test')
13 | MeetingNote().end('hackspace-os-test')
14 |
--------------------------------------------------------------------------------
/_database/tests/test_persons.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 | from _database.models import Person
3 |
4 |
5 | class PersonsTestCase(TestCase):
6 | @classmethod
7 | def setUpTestData(cls):
8 | Person.objects.import_from_discourse(
9 | DISCOURSE_URL='https://discuss.noisebridge.info')
10 |
11 | def test_import_from_discourse(self):
12 | self.assertTrue(Person.objects.count() > 0)
13 |
--------------------------------------------------------------------------------
/_database/tests/test_photos.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | from _database.models import Photo
4 |
5 |
6 | class PhotosTestCase(TestCase):
7 | def test_import_from_google_photos(self):
8 | Photo.objects.import_from_google_photos(test=True)
9 |
10 | def test_import_from_twitter(self):
11 | Photo.objects.import_from_twitter(test=True)
12 |
13 | def test_import_from_wiki(self):
14 | Photo.objects.import_from_wiki(test=True)
15 |
16 | def test_import_from_flickr(self):
17 | Photo.objects.import_from_flickr(test=True)
18 |
19 | def test_import_from_instagram(self):
20 | Photo.objects.import_from_instagram(test=True)
21 |
22 | def test_count_overview(self):
23 | self.assertTrue(type(Photo.objects.count_overview()) == dict)
24 |
25 | def test_random(self):
26 | self.assertTrue(type(Photo.objects.random()) == list)
27 |
--------------------------------------------------------------------------------
/_database/tests/test_projects.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 | from _database.models import Project
3 |
4 |
5 | class ProjectsTestCase(TestCase):
6 | @classmethod
7 | def setUpTestData(cls):
8 | Project.objects.import_from_discourse(
9 | DISCOURSE_URL='https://discuss.noisebridge.info')
10 |
11 | def test_LIST__search_results(self):
12 | self.assertTrue(len(Project.objects.LIST__search_results()) > 0)
13 |
--------------------------------------------------------------------------------
/_database/tests/test_spaces.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 | from _database.models import Space
3 |
4 |
5 | class SpacesTestCase(TestCase):
6 | @classmethod
7 | def setUpTestData(cls):
8 | Space(str_name_en_US='Hackatorium').save()
9 | Space(str_name_en_US='Turing Room').save()
10 |
11 | def test_LIST__search_results(self):
12 | self.assertTrue(len(Space.objects.LIST__search_results()) > 0)
13 |
--------------------------------------------------------------------------------
/_database/tests/test_wishes.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 | from _database.models import Wish
3 |
4 |
5 | class WishesTestCase(TestCase):
6 | @classmethod
7 | def setUpTestData(cls):
8 | Wish(str_name_en_US='I wish people would clean up after themself.').save()
9 | Wish(str_name_en_US='I wish we would have a high end gaming pc.').save()
10 |
11 | def test_LIST__search_results(self):
12 | self.assertTrue(len(Wish.objects.LIST__search_results()) > 0)
13 |
--------------------------------------------------------------------------------
/_database/urls.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_database/urls.py
--------------------------------------------------------------------------------
/_readme_images/headerimage.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/headerimage.jpg
--------------------------------------------------------------------------------
/_readme_images/heading_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_about.png
--------------------------------------------------------------------------------
/_readme_images/heading_consensus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_consensus.png
--------------------------------------------------------------------------------
/_readme_images/heading_contribute.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_contribute.png
--------------------------------------------------------------------------------
/_readme_images/heading_customize.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_customize.png
--------------------------------------------------------------------------------
/_readme_images/heading_donate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_donate.png
--------------------------------------------------------------------------------
/_readme_images/heading_events.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_events.png
--------------------------------------------------------------------------------
/_readme_images/heading_examples.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_examples.png
--------------------------------------------------------------------------------
/_readme_images/heading_features.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_features.png
--------------------------------------------------------------------------------
/_readme_images/heading_landingpage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_landingpage.png
--------------------------------------------------------------------------------
/_readme_images/heading_led_darkmode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_led_darkmode.png
--------------------------------------------------------------------------------
/_readme_images/heading_meeting_notes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_meeting_notes.png
--------------------------------------------------------------------------------
/_readme_images/heading_multi_language.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_multi_language.png
--------------------------------------------------------------------------------
/_readme_images/heading_photos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_photos.png
--------------------------------------------------------------------------------
/_readme_images/heading_projects.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_projects.png
--------------------------------------------------------------------------------
/_readme_images/heading_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_search.png
--------------------------------------------------------------------------------
/_readme_images/heading_setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_setup.png
--------------------------------------------------------------------------------
/_readme_images/heading_spaces.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_spaces.png
--------------------------------------------------------------------------------
/_readme_images/heading_template_name.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/heading_template_name.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_1.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_about.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_consensus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_consensus.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_donate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_donate.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_events.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_events.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_landingpage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_landingpage.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_led_dark_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_led_dark_mode.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_meeting_notes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_meeting_notes.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_multi_language.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_multi_language.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_photos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_photos.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_projects.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_projects.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_search.png
--------------------------------------------------------------------------------
/_readme_images/screenshot_spaces_machines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_readme_images/screenshot_spaces_machines.png
--------------------------------------------------------------------------------
/_setup/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_setup/__init__.py
--------------------------------------------------------------------------------
/_setup/cronjobs.txt:
--------------------------------------------------------------------------------
1 | */30 * * * * python manage.py publish_events
2 | */10 * * * * python manage.py update_database
--------------------------------------------------------------------------------
/_setup/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_setup/management/__init__.py
--------------------------------------------------------------------------------
/_setup/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_setup/management/commands/__init__.py
--------------------------------------------------------------------------------
/_setup/management/commands/setup.py:
--------------------------------------------------------------------------------
1 | from django.core.management.base import BaseCommand
2 | from _setup.models import Setup
3 |
4 |
5 | class Command(BaseCommand):
6 | help = "start the setup"
7 |
8 | def handle(self, *args, **options):
9 | Setup()._menu()
10 |
--------------------------------------------------------------------------------
/_setup/meeting_notes_template.txt:
--------------------------------------------------------------------------------
1 | These are the notes from the {{ MeetingNumber }}th Meeting of {{ HackspaceName }}.
2 |
3 | Date: {{ Date }}
4 | Note-taker: '''NOTE TAKER NAME'''
5 | Moderators: '''MODERATOR TAKER NAME'''
6 |
7 | == Meeting Summary ==
8 | '''FILL OUT AT END OF MEETING - One or two bullet points of high-level meeting summary.'''
9 | What happened at the meeting:
10 | * Announcements:
11 | * Finances:
12 | * Consensus Items:
13 | * Discussion Items:
14 |
15 | = Introductions =
16 | '''PREFERRED PRONONON & NAME, 1-2 SENTENCES OF WHAT YOU DO/ARE INTERESTED IN'''
17 |
18 |
19 | = Short announcements and events =
20 | '''60-second description per item in bulletpoint.'''
21 |
22 |
23 | = Excellence =
24 | '''Our One Rule is to Be Excellent to Each Other.'''
25 |
26 | (What does that mean? How does the Anti-Harassment Policy fit into this? Are we SURE we know what being Excellent is? Also let's talk about Security in the space? This is an important and fundamental conversation at
27 | , so let's give it like 120 seconds.)
28 |
29 |
30 | = Participation =
31 | '''Everyone at {{ HackspaceName }} is a participant at {{ HackspaceName }}.'''
32 |
33 | (What does that mean? How do you get a door key? Access to Telegram, Discourse?)
34 |
35 | = Financial Report =
36 | '''Anarchist societies under a capitalist state need money to survive and thrive, yo.'''
37 |
38 | * Funds in bank:
39 | * Any other details by those participating in handling our financials
40 | * The latest financial reports from the treasurer
41 |
42 |
43 | = Consensus =
44 | '''Consensus is how the {{ HackspaceName }} Membership may change how {{ HackspaceName }} works.'''
45 |
46 | (How does Consensus work? What types of things are good for formal Consensus? What is small-c consensus? What is a "block"?)
47 |
48 | == [[ Consensus Items History | Proposals from last week ]] ==
49 | ''(Add any items which are consensed upon or someone has raised a principle objection for to the [[Consensus Items History]] page.)''
50 |
51 | == [[ Current Consensus Items | Proposals for next week ]] ==
52 | ''(Add any new items for consensus to the [[Current Consensus Items]] page.)''
53 |
54 |
55 |
56 |
57 | = Discussion =
58 |
59 | == Discussion Item 1 ==
60 |
61 | == Discussion Item 2 ==
62 |
63 | = End of Meeting =
64 |
--------------------------------------------------------------------------------
/_setup/models/__init__.py:
--------------------------------------------------------------------------------
1 | from _setup.models.config import Config
2 | from _setup.models.cronjobs import Cronjob
3 | from _setup.models.secrets import Secret
4 | from _setup.models.setup import Setup
5 | from _setup.models.startup import Startup
6 |
--------------------------------------------------------------------------------
/_setup/models/config.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os
3 | import time
4 |
5 |
6 | class Config():
7 | def __init__(self, target=None, username_for=None, file_path='_setup/config.json', show_log=True):
8 | self.logs = ['self.__init__']
9 | self.started = round(time.time())
10 | self.show_log = show_log
11 | self.file_path = file_path
12 |
13 | try:
14 | with open(file_path) as json_file:
15 | self.value = json.load(json_file)
16 |
17 | if target:
18 | path = target.split('.')
19 | for part in path:
20 | self.value = self.value[part]
21 |
22 | if username_for:
23 | if username_for.endswith('/'):
24 | username_for = username_for[:-1]
25 | # check if instagram is saved in social channels
26 | for entry in self.value:
27 | if username_for+'/' in entry['url']:
28 | self.value = entry['url'].split(
29 | username_for+'/')[1].replace('/', '')
30 | break
31 | else:
32 | self.value = None
33 | except KeyError:
34 | # if field doesn't exist, add it to config.json
35 | self.value = None
36 |
37 | def log(self, text):
38 | from pyprintplus import Log
39 | self.logs.append(text)
40 | if self.show_log == True:
41 | Log().print('{}'.format(text), os.path.basename(__file__), self.started)
42 |
--------------------------------------------------------------------------------
/_setup/models/setup.py:
--------------------------------------------------------------------------------
1 | class Setup():
2 | def __init__(self, test=False):
3 | self.test = test
4 | self.backup_files = [
5 | 'db.sqlite3',
6 | '_setup/config.json',
7 | '_setup/secrets.json',
8 | '_website/static/images/logo.svg',
9 | '_website/static/images/header_logo.jpg',
10 | '_website/static/images/header_banner.jpg',
11 | '_website/static/images/favicons/favicon.ico',
12 | '_website/static/images/favicons/favicon-32x32.png',
13 | '_website/static/images/favicons/favicon-16x16.png',
14 | '_website/static/images/favicons/apple-touch-icon.png',
15 | ]
16 |
17 | @property
18 | def complete(self):
19 | import os
20 | # check if config and secrets file exist
21 | if os.path.isfile('_setup/config.json') and os.path.isfile('_setup/secrets.json'):
22 | return True
23 | else:
24 | return False
25 |
26 | @property
27 | def database_exists(self):
28 | import os
29 | # check if config and secrets file exist
30 | if os.path.isfile('db.sqlite3'):
31 | return True
32 | else:
33 | return False
34 |
35 | def _menu(self):
36 | from _setup.models.setup_functions.menu import SetupMenu
37 | SetupMenu(self.backup_files, self.test)
38 |
39 | def _new(self):
40 | from _setup.models.setup_functions.new import SetupNew
41 | SetupNew(self.test)
42 |
43 | def _export(self):
44 | from _setup.models.setup_functions.export import SetupExport
45 | SetupExport(self.backup_files, self.test)
46 |
47 | def _import(self):
48 | from _setup.models.setup_functions.import_setup import SetupImport
49 | SetupImport(self.backup_files, self.test)
50 |
51 | def _delete(self):
52 | from _setup.models.setup_functions.delete import SetupDelete
53 | SetupDelete(self.backup_files, self.test)
54 |
--------------------------------------------------------------------------------
/_setup/models/setup_functions/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_setup/models/setup_functions/__init__.py
--------------------------------------------------------------------------------
/_setup/models/setup_functions/delete.py:
--------------------------------------------------------------------------------
1 | from pyprintplus import Log
2 | import os
3 |
4 |
5 | class SetupDelete():
6 | def __init__(self, backup_files, test=False):
7 | self.backup_files = backup_files
8 | self.test = test
9 |
10 | Log().show_message(
11 | 'WARNING: Are you sure you want to delete your current setup? This will delete the config.json, secrets.json and your logos & favicons. Enter "delete" to delete the current setup.')
12 | confirm = 'delete' if self.test else input()
13 | if confirm == 'delete':
14 | for file_path in self.backup_files:
15 | if os.path.exists(file_path):
16 | os.remove(file_path)
17 |
18 | Log().show_message('✅Done! I deleted the current setup.')
19 |
20 | else:
21 | Log().show_message('Ok. I won\'t delete anything.')
22 |
--------------------------------------------------------------------------------
/_setup/models/setup_functions/export.py:
--------------------------------------------------------------------------------
1 | from pyprintplus import Log
2 |
3 |
4 | class SetupExport():
5 | def __init__(self, backup_files, test=False):
6 | self.backup_files = backup_files
7 | self.test = test
8 |
9 | Log().show_messages([
10 | 'Hello! It seems you want to export your current settings? (your config.json, secrets.json and important images)'
11 | ])
12 |
13 | Log().show_message(
14 | 'If that\'s the case, enter now a name for the exported folder. (or press Enter to exit)')
15 |
16 | folder_name = 'unittest' if self.test else input()
17 |
18 | if not folder_name:
19 | Log().show_message('Ok, got it. Maybe another time.')
20 | exit()
21 | else:
22 | from zipfile import ZipFile, ZIP_DEFLATED
23 |
24 | # copy files into folder
25 | with ZipFile('setup_backup__'+folder_name+'.zip', 'w', ZIP_DEFLATED) as zip:
26 | # writing each file one by one
27 | for file in self.backup_files:
28 | try:
29 | zip.write(file)
30 | except:
31 | pass
32 |
33 | Log().show_message('✅Done! Exported "'+folder_name +
34 | '" ('+self.get_size('setup_backup__'+folder_name+'.zip')+')')
35 |
36 | def get_size(self, file_path):
37 | import os
38 | return str(round(os.path.getsize(file_path)/1000000, 1))+' MB'
39 |
--------------------------------------------------------------------------------
/_setup/models/setup_functions/new_functions/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_setup/models/setup_functions/new_functions/__init__.py
--------------------------------------------------------------------------------
/_setup/models/setup_functions/new_functions/event_footer.py:
--------------------------------------------------------------------------------
1 | class SetupNewEventFooter():
2 | def __init__(self, config):
3 | self.config = config
4 |
5 | # auto generate the event footer for discourse and meetup
6 | if self.config['WEBSITE']['DOMAIN'] and self.config['BASICS']['NAME']:
7 | self.config['EVENTS']['DISCOURSE_AND_MEETUP_EVENT_FOOTER_HTML'] =\
8 | ' ------------------ '\
9 | ' '+self.config['BASICS']['NAME']+' is funded by YOUR donations. '\
10 | 'So if you want to support '+self.config['BASICS']['NAME']+' - donations are always welcomed - '\
11 | 'money, hardware or time (by organizing or volunteering an event). '\
12 | 'Visit https://' + \
13 | self.config['WEBSITE']['DOMAIN']+' for more details.'
14 |
--------------------------------------------------------------------------------
/_setup/models/setup_functions/new_functions/languages.py:
--------------------------------------------------------------------------------
1 | from pyprintplus import Log
2 |
3 |
4 | class SetupLanguages():
5 | def __init__(self, config, test=False):
6 | self.config = config
7 | self.test = test
8 |
9 | Log().show_message(
10 | 'Besides english - what languages should your website support? Currently available: hebrew.')
11 | input_languages = ['hebrew'] if self.test else input().replace(
12 | ', ', ',').split(',')
13 | self.config['WEBSITE']['LANGUAGES'] = ['english']
14 | if 'hebrew' in input_languages:
15 | self.config['WEBSITE']['LANGUAGES'].append('hebrew')
16 | else:
17 | # remove hebrew text options
18 | for element in self.config['BASICS']['HACKERSPACE_IS_SENTENCES']:
19 | element.pop('hebrew', None)
20 | for element in self.config['PHYSICAL_SPACE']['ADDRESS']:
21 | element.pop('HOW_TO_FIND_US__hebrew', None)
22 |
--------------------------------------------------------------------------------
/_setup/models/setup_functions/new_functions/riseuppad.py:
--------------------------------------------------------------------------------
1 | from pyprintplus import Log
2 |
3 |
4 | class SetupNewRiseupPad():
5 | def __init__(self, config):
6 | self.config = config
7 |
8 | if self.config['BASICS']['NAME']:
9 | Log().show_message(
10 | 'Ok, great! Give me a seconds, so I can try to setup your RISEUPPAD_MEETING_PATH, and MEETUP_GROUP as well...')
11 |
12 | # if hackspace name saved, also save other config defaults based on name
13 | self.config['MEETINGS']['RISEUPPAD_MEETING_PATH'] = self.config['BASICS']['NAME'].lower() + \
14 | '-meetings'
15 |
--------------------------------------------------------------------------------
/_setup/secrets_template.json:
--------------------------------------------------------------------------------
1 | {
2 | "DJANGO": {
3 | "SECRET_KEY": null,
4 | "ADMIN_URL": null,
5 | "ADMIN_USER": {
6 | "USERNAME": null,
7 | "PASSWORD": null
8 | }
9 | },
10 | "AWS": {
11 | "ACCESS_KEYID": null,
12 | "SECRET_ACCESS_KEY": null,
13 | "S3": {
14 | "BUCKET_NAME": null,
15 | "SERVER_AREA": null
16 | }
17 | },
18 | "DISCOURSE": {
19 | "DISCOURSE_URL": null,
20 | "API_KEY": null,
21 | "API_USERNAME": null
22 | },
23 | "MEETUP": {
24 | "ACCESS_TOKEN": null,
25 | "ACCESS_TOKEN_VALID_UPTO": null,
26 | "EMAIL": null,
27 | "PASSWORD": null,
28 | "REDIRECT_URI": null,
29 | "CLIENT_ID": null,
30 | "CLIENT_SECRET": null
31 | },
32 | "SLACK": {
33 | "API_TOKEN": null
34 | },
35 | "TELEGRAM": {
36 | "BOT_TOKEN": null,
37 | "GROUP_CHATID": null
38 | },
39 | "GOOGLE_PHOTOS": {
40 | "CLIENT_ID": null,
41 | "CLIENT_SECRET": null
42 | },
43 | "REMOTE_WEBDRIVER_IP": null
44 | }
--------------------------------------------------------------------------------
/_setup/tests/test_new_setup.json:
--------------------------------------------------------------------------------
1 | {
2 | "BASICS": {
3 | "NAME": "TAMI",
4 | "WIKI": {
5 | "API_URL": "https://wiki.telavivmakers.org/api.php",
6 | "PHOTOS_IGNORE_PAGES": []
7 | },
8 | "DONATION_URLs": {
9 | "MONEY": "https://telavivmakers.org/donate",
10 | "HARDWARE": null
11 | },
12 | "EMBEDDED_MAP_URL": "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d54085.416809235605!2d34.7561820332218!3d32.087134583396185!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x151d4ca3c50d1ee7%3A0xd083e66d34f22859!2sTAMI%20hackspace!5e0!3m2!1sen!2sro!4v1575741469803!5m2!1sen!2sro"
13 | },
14 | "WEBSITE": {
15 | "DOMAIN": "telavivmakers.org",
16 | "LANGUAGES": [
17 | "english",
18 | "hebrew"
19 | ]
20 | },
21 | "CSS": {
22 | "PRIMARY_COLOR": "#9300a0"
23 | },
24 | "EVENTS": {
25 | "MEETUP_GROUP": "https://meetup.com/Tel-Aviv-Makers-TAMI"
26 | },
27 | "CONTACT": {
28 | "TELEGRAM_GROUPS": [{
29 | "NAME": "TAMI",
30 | "INVITE_URL": "https://bit.ly/tami-main"
31 | },
32 | {
33 | "NAME": "Is Somebody At TAMI",
34 | "INVITE_URL": "https://t.me/ISATAMI/"
35 | }
36 | ]
37 | },
38 | "PHYSICAL_SPACE": {
39 | "ADDRESS": {
40 | "STREET": "Kibbutz Galuyot 45",
41 | "ZIP": "6655031",
42 | "CITY": "Tel Aviv",
43 | "STATE": "Tel Aviv-Yafo",
44 | "COUNTRYCODE": "IL",
45 | "HOW_TO_FIND_US__english": "3rd floor"
46 | }
47 | },
48 | "SOCIAL": {
49 | "GOOGLE_PHOTOS_ALBUM_URLS": [
50 | "https://photos.google.com/share/AF1QipNdUmxDzWRLtsxIcWIugAjr5gN_GBPd18XpfSkeSWteXPwqJC-c5_HTYjy-dQJPXQ?key=WVA4ekpWZE1HMlNvdzdSVkJGLS1yZTZaQ1Q3bW13"
51 | ],
52 | "HASHTAG": "TAMIhackerspace",
53 | "DISCOURSE_GROUP": "https://discourse.telavivmakers.org/",
54 | "INSTAGRAM_USERNAME": null,
55 | "TWITTER_USERNAME": null
56 | }
57 | }
--------------------------------------------------------------------------------
/_setup/tests/test_setup.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 | from _setup.models import Setup
3 | import json
4 | import os
5 |
6 |
7 | class SetupTestConfig():
8 | def __init__(self, target):
9 | with open('_setup/tests/test_new_setup.json') as json_file:
10 | self.value = json.load(json_file)
11 |
12 | if target:
13 | path = target.split('.')
14 | for part in path:
15 | self.value = self.value[part]
16 |
17 |
18 | class SetupTestCase(TestCase):
19 | @classmethod
20 | def setUpClass(cls):
21 | super().setUpClass()
22 | # rename config file to temp backup
23 | if os.path.isfile('_setup/config.json'):
24 | os.rename('_setup/config.json', '_setup/config_temp_backup.json')
25 | if os.path.isfile('_setup/secrets.json'):
26 | os.rename('_setup/secrets.json', '_setup/secrets_temp_backup.json')
27 |
28 | @classmethod
29 | def tearDownClass(cls):
30 | # delete new files and rename temp backup back to normal
31 | if os.path.isfile('_setup/config.json'):
32 | os.remove('_setup/config.json')
33 | if os.path.isfile('_setup/secrets.json'):
34 | os.remove('_setup/secrets.json')
35 | if os.path.isfile('setup_backup__unittest.zip'):
36 | os.remove('setup_backup__unittest.zip')
37 |
38 | if os.path.isfile('_setup/config_temp_backup.json'):
39 | os.rename('_setup/config_temp_backup.json', '_setup/config.json')
40 | if os.path.isfile('_setup/secrets_temp_backup.json'):
41 | os.rename('_setup/secrets_temp_backup.json', '_setup/secrets.json')
42 |
43 | super().tearDownClass()
44 |
45 | def test_menu(self):
46 | Setup(test=True)._menu()
47 |
48 | def test_new_export_delete_import(self):
49 | setup = Setup(test=True)
50 |
51 | # create a new setup
52 | setup._new()
53 |
54 | # then export that new setup
55 | setup._export()
56 |
57 | # then delete the new setup
58 | setup._delete()
59 |
60 | # then import the new setup
61 | setup._import()
62 |
--------------------------------------------------------------------------------
/_translations/donate.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% block content %}
3 |
4 |
5 | {% if word == 'SPACE is funded by donations. ...' %}
6 | {% if language == 'hebrew' %}
7 | {{ 'BASICS.NAME'|get_config }}
8 | ממומן על ידי התרומות של כולנו.
9 | אז בבקשה עזרו לנו לשמור על
10 | {{ 'BASICS.NAME'|get_config }}
11 | בחיים וצומח! בכסף, בחומרה או בזמן!
12 | {% else %}
13 | {{ 'BASICS.NAME'|get_config }} is funded by YOUR donations.
14 | So please help us keeping {{ 'BASICS.NAME'|get_config }} alive & growing! With money, hardware or your time!
15 | {% endif %}
16 |
17 |
18 | {% elif word == 'Donations are tax deductible.' %}
19 | {% if language == 'hebrew' %}
20 | התרומות ניתנות לניכוי מס.
21 | {% else %}
22 | Donations are tax deductible.
23 | {% endif %}
24 |
25 |
26 | {% elif word == 'Donate money' %}
27 | {% if language == 'hebrew' %}
28 | תרומת
29 |
30 | כסף
31 | {% else %}
32 | Donate
33 | money
34 | {% endif %}
35 |
36 |
37 | {% elif word == 'Donate hardware' %}
38 | {% if language == 'hebrew' %}
39 | תרומת
40 |
41 | חומרה
42 | {% else %}
43 | Donate
44 | hardware
45 | {% endif %}
46 |
47 |
48 | {% elif word == 'Organize an event' %}
49 | {% if language == 'hebrew' %}
50 | ארגון
51 |
52 | אירוע
53 | {% else %}
54 | Organize
55 | an event
56 | {% endif %}
57 |
58 |
59 | {% elif word == 'Volunteer at an event' %}
60 | {% if language == 'hebrew' %}
61 | התנדבות
62 |
63 | באירוע
64 | {% else %}
65 | Volunteer
66 | at an event
67 | {% endif %}
68 |
69 |
70 | {% elif word == 'Become a Patreon' %}
71 | {% if language == 'hebrew' %}
72 | להיות פטריון
73 | {% else %}
74 | Become a Patreon
75 | {% endif %}
76 |
77 |
78 | {% else %}
79 | {{ word }}
80 |
81 | {% endif %}
82 | {% endblock%}
--------------------------------------------------------------------------------
/_translations/languages.json:
--------------------------------------------------------------------------------
1 | {
2 | "english": "en",
3 | "hebrew": "iw",
4 | "german": "de"
5 | }
--------------------------------------------------------------------------------
/_translations/menu.html:
--------------------------------------------------------------------------------
1 | {% block content %}
2 |
3 | {% if word == 'Landingpage' %}
4 | {% if language == 'hebrew' %}
5 | דף נחיתה
6 | {% else %}
7 | Landingpage
8 | {% endif %}
9 |
10 |
11 | {% elif word == 'About' %}
12 | {% if language == 'hebrew' %}
13 | אודות
14 | {% else %}
15 | About
16 | {% endif %}
17 |
18 |
19 | {% elif word == 'Values' %}
20 | {% if language == 'hebrew' %}
21 | ערכים
22 | {% else %}
23 | Values
24 | {% endif %}
25 |
26 |
27 | {% elif word == 'Photos' %}
28 | {% if language == 'hebrew' %}
29 | תמונות
30 | {% else %}
31 | Photos
32 | {% endif %}
33 |
34 |
35 | {% elif word == 'Participate' %}
36 | {% if language == 'hebrew' %}
37 | השתתפות
38 | {% else %}
39 | Participate
40 | {% endif %}
41 |
42 |
43 | {% elif word == 'Events' %}
44 | {% if language == 'hebrew' %}
45 | אירועים
46 | {% else %}
47 | Events
48 | {% endif %}
49 |
50 |
51 | {% elif word == 'Discussions' %}
52 | {% if language == 'hebrew' %}
53 | דיונים
54 | {% else %}
55 | Discussions
56 | {% endif %}
57 |
58 |
59 | {% elif word == 'Projects' %}
60 | {% if language == 'hebrew' %}
61 | פרויקטים
62 | {% else %}
63 | Projects
64 | {% endif %}
65 |
66 |
67 | {% elif word == 'Spaces' %}
68 | {% if language == 'hebrew' %}
69 | מרחבים
70 | {% else %}
71 | Spaces
72 | {% endif %}
73 |
74 |
75 | {% elif word == 'Machines' %}
76 | {% if language == 'hebrew' %}
77 | מכונות
78 | {% else %}
79 | Machines
80 | {% endif %}
81 |
82 |
83 | {% elif word == 'Meetings' %}
84 | {% if language == 'hebrew' %}
85 | מפגשים
86 | {% else %}
87 | Meetings
88 | {% endif %}
89 |
90 |
91 | {% elif word == 'Consensus' %}
92 | {% if language == 'hebrew' %}
93 | הסכמות
94 | {% else %}
95 | Consensus
96 | {% endif %}
97 |
98 |
99 | {% elif word == 'Guildes' %}
100 | {% if language == 'hebrew' %}
101 | גילדות
102 | {% else %}
103 | Guildes
104 | {% endif %}
105 |
106 |
107 | {% elif word == 'Search ...' %}
108 | {% if language == 'hebrew' %}
109 | חיפוש ...
110 | {% else %}
111 | Search ...
112 | {% endif %}
113 |
114 |
115 | {% elif word == 'Searching ...' %}
116 | {% if language == 'hebrew' %}
117 | מחפש ...
118 | {% else %}
119 | Searching ...
120 | {% endif %}
121 |
122 |
123 | {% else %}
124 | {{ word }}
125 |
126 | {% endif %}
127 | {% endblock%}
--------------------------------------------------------------------------------
/_translations/photos.html:
--------------------------------------------------------------------------------
1 | {% block content %}
2 |
3 | {% if word == 'Latest' %}
4 | {% if language == 'hebrew' %}
5 | החדש ביותר
6 | {% else %}
7 | Latest
8 | {% endif %}
9 |
10 |
11 | {% elif word == 'Oldest' %}
12 | {% if language == 'hebrew' %}
13 | הישן ביותר
14 | {% else %}
15 | Oldest
16 | {% endif %}
17 |
18 |
19 | {% elif word == 'Random' %}
20 | {% if language == 'hebrew' %}
21 | אקראי
22 | {% else %}
23 | Random
24 | {% endif %}
25 |
26 |
27 | {% elif word == 'Want to see your photos here?' %}
28 | {% if language == 'hebrew' %}
29 | רוצה לראות את התמונות שלך כאן?
30 | {% else %}
31 | Want to see your photos here?
32 | {% endif %}
33 |
34 |
35 | {% elif word == 'Use' %}
36 | {% if language == 'hebrew' %}
37 | להשתמש
38 | {% else %}
39 | Use
40 | {% endif %}
41 |
42 |
43 | {% else %}
44 | {{ word }}
45 |
46 | {% endif %}
47 | {% endblock%}
--------------------------------------------------------------------------------
/_website/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = '_website.apps.WebsiteConfig'
2 |
--------------------------------------------------------------------------------
/_website/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
--------------------------------------------------------------------------------
/_website/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class WebsiteConfig(AppConfig):
5 | name = '_website'
6 |
--------------------------------------------------------------------------------
/_website/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/management/__init__.py
--------------------------------------------------------------------------------
/_website/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/management/commands/__init__.py
--------------------------------------------------------------------------------
/_website/models/__init__.py:
--------------------------------------------------------------------------------
1 | from _website.models.request import Request
2 | from _website.models.response import Response
3 |
--------------------------------------------------------------------------------
/_website/models/request.py:
--------------------------------------------------------------------------------
1 | import time
2 | from pyprintplus import Log
3 |
4 |
5 | class Request():
6 | def __init__(self, request=None, show_log=True):
7 | self.logs = ['self.__init__']
8 | self.started = round(time.time())
9 | self.show_log = show_log
10 | self.request = request
11 | self.url = request.build_absolute_uri() if request else None
12 | self.hash = self.url.split(
13 | '#')[1] if self.url and '#' in self.url else None
14 | self.user = request.user if request else None
15 | self.search = request.GET.get('search', None) if request else None
16 |
17 | if request and request.GET.get('lang', None):
18 | self.language = request.GET.get('lang', None)
19 | elif request and request.COOKIES.get('lang', None):
20 | self.language = request.COOKIES.get('lang', None)
21 | else:
22 | self.language = 'english'
23 |
24 | self.in_space = True if request and (request.COOKIES.get(
25 | 'in_space') or request.GET.get('in_space', None) == 'True') else False
26 |
27 | def log(self, text):
28 | import os
29 | self.logs.append(text)
30 | if self.show_log == True:
31 | Log().print('{}'.format(text), os.path.basename(__file__), self.started)
32 |
--------------------------------------------------------------------------------
/_website/models/response.py:
--------------------------------------------------------------------------------
1 | from pyprintplus import Log
2 | import time
3 | import re
4 | TAG_RE = re.compile(r'<[^>]+>')
5 |
6 |
7 | class Response():
8 | def __init__(self, show_log=True):
9 | self.logs = ['self.__init__']
10 | self.started = round(time.time())
11 | self.show_log = show_log
12 |
13 | def log(self, text):
14 | import os
15 | self.logs.append(text)
16 | if self.show_log == True:
17 | Log().print('{}'.format(text), os.path.basename(__file__), self.started)
18 |
19 | @property
20 | def description(self):
21 | from _setup.models import Config
22 | NAME = Config('BASICS.NAME').value
23 | HACKERSPACE_IS_SENTENCES = Config(
24 | 'BASICS.HACKERSPACE_IS_SENTENCES').value
25 | return NAME + ' '+TAG_RE.sub('', HACKERSPACE_IS_SENTENCES['english'][0])+('.' if not TAG_RE.sub('', HACKERSPACE_IS_SENTENCES['english'][0]).endswith('.') else '')
26 |
--------------------------------------------------------------------------------
/_website/static/css/consensus.css:
--------------------------------------------------------------------------------
1 | .block__consensus_item_preview {
2 | background-color: white;
3 | display: block;
4 | padding: 15px;
5 | border-radius: 15px;
6 | text-decoration: none;
7 | color: black;
8 | margin-bottom: 20px;
9 | margin-top: 20px;
10 | padding-left: 20px;
11 | padding-right: 20px;
12 | -webkit-transition: all 200ms ease;
13 | transition: all 200ms ease;
14 | box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25);
15 | }
16 |
17 | .block__consensus_item_preview:hover {
18 | box-shadow: 0 7px 6px 0 rgba(0, 0, 0, 0.25);
19 | -webkit-transform: translate(0px, -5px);
20 | -ms-transform: translate(0px, -5px);
21 | transform: translate(0px, -5px);
22 | }
23 |
24 | @media (prefers-color-scheme: dark) {
25 | .block__consensus_item_preview {
26 | color: #d4d4d4;
27 | background-color: black;
28 | -webkit-animation: LEDsStrong 8s infinite;
29 | /* Safari 4.0 - 8.0 */
30 | animation: LEDsStrong 8s infinite;
31 | }
32 | }
33 |
34 |
35 | .consensus_item_by {
36 | display: inline-block;
37 | color: #979797;
38 | margin-bottom: 10px;
39 | margin-left: 5px;
40 | }
41 |
42 | .consensus_item_by__image {
43 | background-size: contain;
44 | background-repeat: no-repeat;
45 | width: 20px;
46 | height: 20px;
47 | border-radius: 200px;
48 | float: left;
49 | }
50 |
51 | .consensus_item_by__description {
52 | color: #979797;
53 | margin-top: 10px;
54 | margin-bottom: 15px;
55 | }
56 |
57 | .text__consensus_status {
58 | display: inline-block;
59 | width: 30%;
60 | text-align: center;
61 | color: #B5B5B5;
62 | padding: 5px;
63 | border-radius: 200px
64 | }
65 |
66 | @media (max-width: 479px) {
67 | .text__consensus_status {
68 | width: 27%;
69 | }
70 | }
71 |
72 |
73 | .text__consensus_status.active {
74 | background-color: var(--SECONDARY_COLOR);
75 | color: white;
76 | }
77 |
78 | .block__consensus_status {
79 | display: block;
80 | background-color: #F2F2F2;
81 | border-radius: 200px;
82 | }
83 |
84 | @media (prefers-color-scheme: dark) {
85 | .block__consensus_status {
86 | background-color: rgb(43, 43, 43)
87 | }
88 | }
--------------------------------------------------------------------------------
/_website/static/css/divider.css:
--------------------------------------------------------------------------------
1 | .divider_10 {
2 | width: 100%;
3 | height: 10px;
4 | }
5 |
6 | .divider_20 {
7 | height: 20px;
8 | }
9 |
10 | .divider_100 {
11 | height: 100px;
12 | }
13 |
14 | .inline_divider {
15 | display: inline-block;
16 | width: 20px;
17 | }
--------------------------------------------------------------------------------
/_website/static/css/event_slider.css:
--------------------------------------------------------------------------------
1 | .events_slider_section {
2 | display: -webkit-box;
3 | display: -webkit-flex;
4 | display: -ms-flexbox;
5 | display: flex;
6 | overflow: auto;
7 | height: 150px;
8 | padding-top: 10px;
9 | -webkit-box-pack: start;
10 | -webkit-justify-content: flex-start;
11 | -ms-flex-pack: start;
12 | justify-content: flex-start;
13 | -webkit-box-align: center;
14 | -webkit-align-items: center;
15 | -ms-flex-align: center;
16 | align-items: center;
17 | }
18 |
19 | .event_slider_extra_options_block {
20 | padding-right: 80px;
21 | padding-left: 20px;
22 | -webkit-box-flex: 0;
23 | -webkit-flex: 0 0 auto;
24 | -ms-flex: 0 0 auto;
25 | flex: 0 0 auto;
26 | }
--------------------------------------------------------------------------------
/_website/static/css/footer.css:
--------------------------------------------------------------------------------
1 | .footer {
2 | padding: 35px 20px;
3 | background-color: #2e2e2e;
4 | color: #fff;
5 | text-align: center;
6 | float: left;
7 | width: 100%;
8 | }
9 |
10 | @media (max-width: 479px) {
11 | .footer {
12 | width: 90%;
13 | }
14 | }
15 |
16 | @media (prefers-color-scheme: dark) {
17 | .footer {
18 | background-color: #1f1f1f
19 | }
20 | }
21 |
22 |
23 | .social_icon {
24 | display: inline-block;
25 | width: 35px;
26 | height: 35px;
27 | min-width: 0px;
28 | margin-right: 5px;
29 | margin-left: 5px;
30 | background-position: 50% 50%;
31 | background-size: contain;
32 | background-repeat: no-repeat;
33 | -webkit-transition: all 200ms ease;
34 | transition: all 200ms ease;
35 | }
36 |
37 | .social_icon:hover {
38 | -webkit-transform: translate(0px, -5px);
39 | -ms-transform: translate(0px, -5px);
40 | transform: translate(0px, -5px);
41 | }
42 |
43 | .social_icon.github {
44 | background-image: url('../images/footer/social_media/github.svg');
45 | }
46 |
47 | .social_icon.patreon {
48 | background-image: url('../images/footer/social_media/patreon.svg');
49 | }
50 |
51 | .social_icon.youtube {
52 | background-image: url('../images/footer/social_media/youtube.svg');
53 | }
54 |
55 | .social_icon.instagram {
56 | background-image: url('../images/footer/social_media/instagram.svg');
57 | }
58 |
59 | .social_icon.facebook {
60 | background-image: url('../images/footer/social_media/facebook.svg');
61 | }
62 |
63 | .social_icon.telegram {
64 | background-image: url('../images/footer/social_media/telegram.svg');
65 | }
66 |
67 | .social_icon.meetup {
68 | background-image: url('../images/footer/social_media/meetup.svg');
69 | }
70 |
71 |
72 | .footer_half_block {
73 | display: inline-block;
74 | width: 45%;
75 | height: 400px;
76 | padding-right: 10px;
77 | padding-left: 10px;
78 | }
79 |
80 | @media (max-width: 479px) {
81 | .footer_half_block {
82 | width: 100%;
83 | padding-right: 0px;
84 | padding-left: 0px;
85 | }
86 | }
87 |
88 | .hackerspace_map {
89 | height: 180px;
90 | background-image: url('../images/footer/hackerspace_map.jpg');
91 | background-position: 50% 50%;
92 | background-size: cover;
93 | background-repeat: no-repeat;
94 | display: block;
95 | }
--------------------------------------------------------------------------------
/_website/static/css/map.css:
--------------------------------------------------------------------------------
1 | .map_preview {
2 | overflow: hidden;
3 | height: 250px;
4 | border-radius: 20px;
5 | }
--------------------------------------------------------------------------------
/_website/static/css/overlays.css:
--------------------------------------------------------------------------------
1 | .dark_overlay {
2 | display: none;
3 | position: fixed;
4 | top: 0;
5 | bottom: 0;
6 | left: 0;
7 | right: 0;
8 | background-color: #00000000;
9 | z-index: 15;
10 | -webkit-transition: all 200ms ease;
11 | transition: all 200ms ease;
12 | opacity: 0;
13 | }
14 |
15 | .dark_overlay.block {
16 | display: block;
17 | }
18 |
19 | .dark_overlay.block.visible {
20 | background-color: #000000d1;
21 | opacity: 1;
22 | }
23 |
24 | .overlay_block {
25 | position: relative;
26 | display: none;
27 | width: 500px;
28 | margin: auto;
29 | margin-top: 22vh;
30 | padding: 20px;
31 | padding-left: 40px;
32 | padding-right: 40px;
33 | background-color: #ececec;
34 | border-radius: 20px;
35 | box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.6);
36 | }
37 |
38 | .overlay_block.rtl {
39 | text-align: right;
40 | }
41 |
42 | @media (max-width: 520px) {
43 | .overlay_block {
44 | width: 80%;
45 | padding: 20px;
46 | margin-top: 20px;
47 | padding-top: 5px;
48 | }
49 | }
50 |
51 | @media (prefers-color-scheme: dark) {
52 | .overlay_block {
53 | background-color: rgb(43, 43, 43);
54 | box-shadow: 0 2px 6px 0 rgba(255, 255, 255, 0.25);
55 | }
56 | }
--------------------------------------------------------------------------------
/_website/static/images/Liked.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Liked
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/_website/static/images/donate/Patreon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | patreon
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/_website/static/images/donate/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/donate/cat.png
--------------------------------------------------------------------------------
/_website/static/images/event_default_image.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/event_default_image.jpeg
--------------------------------------------------------------------------------
/_website/static/images/events/event_class.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/events/event_class.png
--------------------------------------------------------------------------------
/_website/static/images/events/event_gaming.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/events/event_gaming.png
--------------------------------------------------------------------------------
/_website/static/images/events/event_music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/events/event_music.png
--------------------------------------------------------------------------------
/_website/static/images/events/event_sewing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/events/event_sewing.png
--------------------------------------------------------------------------------
/_website/static/images/footer/hackerspace_map.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/footer/hackerspace_map.jpg
--------------------------------------------------------------------------------
/_website/static/images/footer/social_media/facebook.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | facebook-logo
5 | Created with Sketch.
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/_website/static/images/footer/social_media/instagram.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | instagram
5 | Created with Sketch.
6 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/_website/static/images/footer/social_media/meetup.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | meetup
5 | Created with Sketch.
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/_website/static/images/footer/social_media/patreon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | patreon
5 | Created with Sketch.
6 |
7 |
13 |
14 |
--------------------------------------------------------------------------------
/_website/static/images/footer/social_media/telegram.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Telegram
5 | Created with Sketch.
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/_website/static/images/footer/social_media/twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | twitter
5 | Created with Sketch.
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/_website/static/images/footer/social_media/youtube.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | youtube
5 | Created with Sketch.
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/_website/static/images/menu_icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Group 2
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/_website/static/images/photo_gallery/flickr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/photo_gallery/flickr.png
--------------------------------------------------------------------------------
/_website/static/images/photo_gallery/google-photos.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_website/static/images/photo_gallery/instagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/photo_gallery/instagram.png
--------------------------------------------------------------------------------
/_website/static/images/photo_gallery/wiki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/glowingkitty/HackspaceOS/29621a5f5daef7a8073f368b7d95a1df654c8ba9/_website/static/images/photo_gallery/wiki.png
--------------------------------------------------------------------------------
/_website/static/images/plus.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Path
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/_website/static/images/search/discourse.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | discuss
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/_website/static/images/search/event.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Event
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/_website/static/js/inspace.js:
--------------------------------------------------------------------------------
1 | // Noisebridge specific
2 | function marryspeak(text) {
3 | axios.get('http://pegasus.noise:5000/?text=' + text)
4 | .then(function () {})
5 | .catch(function () {})
6 | .finally(function () {});
7 | }
--------------------------------------------------------------------------------
/_website/static/js/menu.js:
--------------------------------------------------------------------------------
1 | function openMenu() {
2 | showOverlay()
3 | document.getElementById('side_menu').classList.add('open')
4 | }
5 |
6 | function switchMenuSelected(menu_item_active) {
7 | const menu_headings = document.getElementsByClassName('menu_heading');
8 |
9 | Array.prototype.forEach.call(menu_headings, function (heading) {
10 | // Do stuff here
11 | heading.classList.remove('selected')
12 | });
13 |
14 | document.getElementById(menu_item_active).classList.add('selected')
15 | }
16 |
17 | function getPage(page, menu_item_active) {
18 | closeOverlays()
19 | clearSearch()
20 | request_html('page/' + encodeURI(page.replace(/\//g, '__')), 'page_content', 'inner')
21 | switchMenuSelected(menu_item_active)
22 | window.scrollTo(0, 0);
23 | }
--------------------------------------------------------------------------------
/_website/static/js/overlays.js:
--------------------------------------------------------------------------------
1 | function showOverlay(open_overlay = null) {
2 | document.getElementById('dark_overlay').classList.add('block')
3 | setTimeout(function () {
4 | document.getElementById('dark_overlay').classList.add('visible')
5 | }, 200)
6 |
7 | if (open_overlay) {
8 | document.getElementById(open_overlay + '_overlay').style.display = 'block'
9 | }
10 |
11 | }
12 |
13 | function closeOverlays() {
14 | let overlay_blocks = document.getElementsByClassName('overlay_block')
15 | for (block in overlay_blocks) {
16 | if (overlay_blocks[block].style) {
17 | overlay_blocks[block].style.display = 'none'
18 | }
19 |
20 | }
21 | document.getElementById('side_menu').classList.remove('open')
22 | document.getElementById('dark_overlay').classList.remove('visible')
23 | setTimeout(function () {
24 | document.getElementById('dark_overlay').classList.remove('block')
25 | }, 200)
26 | }
27 |
28 | function hideDonateCTA(button) {
29 | button.style.right = '-100px'
30 | setTimeout(() => {
31 | button.style.display = 'none'
32 | }, 200);
33 | }
--------------------------------------------------------------------------------
/_website/static/js/tabs.js:
--------------------------------------------------------------------------------
1 | function showActiveTab(tab) {
2 | Array.prototype.forEach.call(document.getElementsByName('tabs'), function (tab) {
3 | // Do stuff here
4 | tab.style.display = 'none'
5 | });
6 |
7 | Array.prototype.forEach.call(document.getElementsByName('tab_heading'), function (heading) {
8 | // Do stuff here
9 | heading.classList.remove('active')
10 | });
11 |
12 | document.getElementById('tab__' + tab).style.display = 'block'
13 | document.getElementById('tab_heading__' + tab).classList.add('active')
14 | }
--------------------------------------------------------------------------------
/_website/static/js/text_carousel.js:
--------------------------------------------------------------------------------
1 | let TxtRotate = function (el, toRotate, period) {
2 | this.toRotate = toRotate;
3 | this.el = el;
4 | this.loopNum = 0;
5 | this.period = parseInt(period, 10) || 200;
6 | this.txt = '';
7 | this.tick();
8 | this.isDeleting = false;
9 | };
10 |
11 | TxtRotate.prototype.tick = function () {
12 | let i = this.loopNum % this.toRotate.length;
13 | let fullTxt = this.toRotate[i];
14 |
15 | if (this.isDeleting) {
16 | this.txt = fullTxt.substring(0, this.txt.length - 1);
17 | } else {
18 | this.txt = fullTxt.substring(0, this.txt.length + 1);
19 | }
20 |
21 | this.el.innerHTML = '' + this.txt + ' ';
22 |
23 | let that = this;
24 | let delta = 100 - Math.random() * 100;
25 |
26 | if (this.isDeleting) {
27 | delta /= 2;
28 | }
29 |
30 | if (!this.isDeleting && this.txt === fullTxt) {
31 | delta = this.period;
32 | this.isDeleting = true;
33 | } else if (this.isDeleting && this.txt === '') {
34 | this.isDeleting = false;
35 | this.loopNum++;
36 | delta = 500;
37 | }
38 |
39 | setTimeout(function () {
40 | that.tick();
41 | }, delta);
42 | };
43 |
44 | function changeText(language) {
45 | let elements = document.getElementsByClassName('txt-rotate');
46 | for (let i = 0; i < elements.length; i++) {
47 | let toRotate = elements[i].getAttribute('data-rotate');
48 | let period = elements[i].getAttribute('data-period');
49 | if (toRotate) {
50 | new TxtRotate(elements[i], JSON.parse(toRotate), period);
51 | }
52 | }
53 | // INJECT CSS
54 | let css = document.createElement("style");
55 | css.type = "text/css";
56 | if (language == 'hebrew') {
57 | css.innerHTML = ".txt-rotate > .wrap { border-left: 0.08em solid #666 }";
58 | } else {
59 | css.innerHTML = ".txt-rotate > .wrap { border-right: 0.08em solid #666 }";
60 | }
61 |
62 | document.body.appendChild(css);
63 | };
--------------------------------------------------------------------------------
/_website/static/js/translate.js:
--------------------------------------------------------------------------------
1 | function get_name_fields(name_input) {
2 | // request to server: get translation to all languages
3 | axios.get('/apis/hackspace_os/translate', {
4 | params: {
5 | 'q': name_input
6 | }
7 | })
8 | .then(function (response) {
9 | // show fields for all languages
10 | for (language in response.data) {
11 | document.getElementById('event_name_' + language).value = response.data[language]
12 | }
13 | })
14 | .catch(function (error) {
15 | console.log(error);
16 | })
17 | .finally(function () {
18 | // always executed
19 | });
20 | }
21 |
22 | function translate_description(from_language, to_language) {
23 | // send server request
24 | if (document.getElementById('event_description_' + from_language).value) {
25 | axios.get('/apis/hackspace_os/translate', {
26 | params: {
27 | 'q': document.getElementById('event_description_' + from_language).value,
28 | 'language': to_language
29 | }
30 | })
31 | .then(function (response) {
32 | document.getElementById('event_description_' + to_language).value = response.data.text
33 | })
34 | .catch(function (error) {
35 | console.log(error);
36 | })
37 | .finally(function () {
38 | // always executed
39 | });
40 | }
41 | }
42 |
43 | function save_language(to_language) {
44 | var CookieDate = new Date;
45 | CookieDate.setFullYear(CookieDate.getFullYear() + 1);
46 | document.cookie = 'lang=' + to_language + '; expires=' + CookieDate.toGMTString() + ';';
47 | }
--------------------------------------------------------------------------------
/_website/static/js/videocall.js:
--------------------------------------------------------------------------------
1 | function load_videocall(room_name, domain) {
2 | const options = {
3 | roomName: room_name,
4 | width: '100%',
5 | height: 500,
6 | parentNode: document.getElementById('videocall')
7 | };
8 | const api = new JitsiMeetExternalAPI(domain, options);
9 | }
--------------------------------------------------------------------------------
/_website/templates/components/SVGs/phone.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 |
3 | {% block content %}
4 |
5 |
6 | phone
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/SVGs/plus.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 |
3 | {% block content %}
4 |
5 |
6 | Plus
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/SVGs/telegram.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 |
3 | {% block content %}
4 |
5 |
6 | telegram
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/consensus_item_preview.html:
--------------------------------------------------------------------------------
1 | {% load text %}
2 | {% block content %}
3 |
4 |
5 |
6 | by {{ result.one_creator.str_name_en_US|STR__first_name }}
7 | {{ result.str_name_en_US }}
8 | {{ result.text_description_en_US|cleanhtml|safe }}
9 |
10 |
New
11 |
Meeting 1 passed
12 | {% if result.str_status == 'approved' %}
13 |
Meeting 2 passed
14 | {% elif result.str_status == 'rejected' %}
15 |
Rejected
16 | {% elif result.str_status == 'archived' %}
17 |
Archived
18 | {% else %}
19 |
Meeting 2 passed
20 | {% endif %}
21 |
22 |
23 |
24 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/consensus_items_entries.html:
--------------------------------------------------------------------------------
1 | {% block content %}
2 |
3 | {% for result in all_items %}
4 | {% include "components/body/consensus_item_preview.html" %}
5 | {% endfor %}
6 |
7 |
8 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/edit_this_page.html:
--------------------------------------------------------------------------------
1 | {% load text %}
2 | {% load config %}
3 | {% load translate %}
4 | {% block content %}
5 |
6 |
7 | {% if selected and user.is_authenticated %}
8 |
{{ 'Edit this database entry!'|landingpage:language }}
9 |
{{ 'Open admin interface'|landingpage:language }}
10 | {% endif %}
11 | {% if 'WEBSITE.WEBSITE_GIT'|get_config %}
12 |
13 | {% if page_git_url %}
14 |
{{ 'Edit this page!'|landingpage:language }}
15 |
{{ 'Click here!'|landingpage:language }}
16 | {% else %}
17 |
{{ 'Edit our website!'|landingpage:language }}
18 |
{{ 'Click here!'|landingpage:language }}
19 | {% endif %}
20 |
21 |
22 |
{{ 'Edit the text & translations!'|landingpage:language }}
23 |
{{ 'Click here!'|landingpage:language }}
24 | {% endif %}
25 |
26 |
27 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/dropdown_field.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% block content %}
3 |
4 | {{ field_heading|events:language|safe }}
5 |
6 |
7 | {{ default_selected_name }}
8 | {% for entry in all_entries %}
9 | {{ entry.str_name_en_US }}
10 | {% endfor %}
11 |
12 |
13 |
14 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/expected_crowd_field.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 | {{ field_heading|events:language|safe }}
6 |
7 |
8 | {% with CROWD_SIZE='EVENTS.CROWD_SIZE'|get_config %}
9 | {{ CROWD_SIZE.SMALL|events:language|safe }}
10 | {{ CROWD_SIZE.MEDIUM|events:language|safe }}
11 | {{ CROWD_SIZE.LARGE|events:language|safe }}
12 | {% endwith %}
13 |
14 |
15 |
16 |
17 |
18 | {{ 'Large events info...'|events:language|safe }}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/hosts_field.html:
--------------------------------------------------------------------------------
1 | {% load secrets %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 | {{ field_heading|events:language|safe }}
6 | {{ 'Select the host...'|events:language|safe }}
7 |
8 |
9 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/location_field.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 | {{ field_heading|events:language|safe }}
6 | {% if field_subheading %}
7 | {{ field_subheading|events:language|safe }}
8 | {% endif %}
9 |
10 |
11 | {% if 'EVENTS.ALLOW_IN_SPACE_EVENTS'|get_config %}
12 | {{ 'BASICS.NAME'|get_config }}
13 | {% endif %}
14 | {% if 'EVENTS.ALLOW_ONLINE_EVENTS'|get_config %}
15 | {{ 'Online'|events:language|safe }}
16 | {% endif %}
17 | {% if 'EVENTS.ALLOW_OTHER_EVENT_LOCATIONS'|get_config %}
18 | {{ 'Other location'|events:language|safe }}
19 | {% endif %}
20 |
21 |
22 |
23 |
24 |
25 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/overlapping_events.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% block content %}
3 |
4 | Overlap
5 |
6 | Your event seems to overlap with {{ overlapping_events.overlapping_events|length }} existing event{% if overlapping_events.overlapping_events|length > 1 %}s{% endif %}.
7 | Consider changing the space, date, time or duration.
8 |
9 |
10 |
11 |
12 |
13 | {% for time in overlapping_events.times %}
14 |
{{ time.str_readable }}
15 | {% endfor %}
16 |
17 |
18 |
19 | Your event
20 |
21 |
22 | {% for event in overlapping_events.overlapping_events %}
23 |
28 | {% endfor %}
29 |
30 |
31 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/publish_options_field.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% block content %}
3 |
4 | {{ field_heading|events:language|safe }}
5 |
6 |
7 |
8 |
9 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/repeating_field.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% block content %}
3 |
4 | {{ field_heading|events:language|safe }}
5 |
6 |
7 | -
8 | {{ 'Weekly'|events:language|safe }}
9 | {{ 'Bi-Weekly'|events:language|safe }}
10 | {{ 'Monthly'|events:language|safe }}
11 |
12 |
13 |
14 |
Up to:
15 |
16 |
17 |
18 |
19 |
20 |
21 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/text_field.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 | {{ field_heading|events:language|safe }}
6 | {% if field_subheading %}
7 | {{ field_subheading|events:language|safe }}
8 | {% endif %}
9 |
10 |
11 | {% if multi_language == True %}
12 |
13 | {% with LANGUAGES='WEBSITE.LANGUAGES'|get_config %}
14 |
15 | {% if LANGUAGES|length > 1 %}
16 | {{ language|events:language|title }}
17 | {% endif %}
18 |
19 |
20 |
21 | {% for alllanguage in LANGUAGES %}
22 |
23 | {% if alllanguage != language %}
24 | {{ alllanguage|events:language|title }}
25 | {{ 'Auto translate'|events:language|safe }}
26 |
27 |
28 | {% endif %}
29 |
30 | {% endfor %}
31 | {% endwith %}
32 |
33 | {% else %}
34 |
35 |
36 |
37 |
38 | {% endif %}
39 |
40 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/upload_image_field.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% load secrets %}
3 | {% block content %}
4 |
5 | {{ field_heading|events:language|safe }}
6 |
7 | {% if field_subheading %}
8 | {{ field_subheading|events:language|safe }}
9 | {% endif %}
10 |
11 |
12 |
13 |
14 |
15 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/form_elements/volunteers_field.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% block content %}
3 |
4 | {{ field_heading|events:language|safe }}
5 | {{ 'Can you need volunteers?...'|events:language|safe }}
6 |
7 |
8 | {{ 'Yes, ask for help'|events:language }}
9 | {{ 'No help needed'|events:language }}
10 |
11 |
12 |
13 |
14 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/event_new/hosts_search_results.html:
--------------------------------------------------------------------------------
1 | {% block content %}
2 |
3 | {% for host in all_hosts %}
4 |
5 |
6 |
{{ host.str_name_shortened }}
7 |
8 | {% endfor %}
9 |
10 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/events_slider.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% load config %}
3 | {% block content %}
4 |
5 |
6 |
7 | {% for result in upcoming_events %}
8 | {% include "components/body/result_preview_block.html" %}
9 | {% endfor %}
10 |
26 |
27 |
28 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/landing_contact_us.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 |
39 |
40 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/landing_do_i_belong.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 |
6 |
{{ 'Do I belong at SPACE?'|landingpage:language|safe }}
7 |
{{ 'YES you do as long...'|landingpage:language|safe }}
8 |
9 |
10 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/landing_please_donate.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 |
6 |
11 |
12 |
13 |
14 |
15 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/meetings/current_meeting.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 |
6 |
7 | {% if current_meeting %}
8 |
{{ 'Join todays meeting!'|meetings:language }}
9 |
{{ 'Join us now...'|meetings:language|safe }}
10 | {% else %}
11 |
{{ 'Starting new meeting ...'|meetings:language|safe }}
12 | {% endif %}
13 |
14 |
15 | {% if current_meeting %}
16 |
{{ current_meeting.text_date }}
17 |
{{ 'Presentation mode'|meetings:language }}
18 |
19 |
20 |
21 | {% if 'VIDEOCALLS.JITSI_DOMAIN'|get_config %}
22 |
25 | {% endif %}
26 | {% else %}
27 |
28 | {{ 'Starting a new meeting based on...'|meetings:language|safe }}
29 |
30 | {% endif %}
31 |
32 |
33 |
34 | {{ 'Did you know? Keywords?'|meetings:language|safe }}
35 |
36 |
37 |
38 |
39 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/meetings/meetings_list.html:
--------------------------------------------------------------------------------
1 | {% block content %}
2 |
3 | {% for note in past_meetings %}
4 |
5 | {{ note.text_date }}
6 | {% if note.text_keywords %}
7 | Keywords:
8 | {{ note.text_keywords }}
9 | {% endif %}
10 |
11 | {% endfor %}
12 |
13 |
14 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/meetings/next_meeting.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% block content %}
3 |
4 |
5 | {% if next_meeting %}
6 |
{% if current_meeting %}{{ 'Or join'|meetings:language }}{% else %}{{ 'Join'|meetings:language }}{% endif %} {{ 'our next meeting!'|meetings:language }}
7 |
8 | {% include "components/body/result_preview_block.html" with result=next_meeting %}
9 | {% endif %}
10 |
11 |
12 | {% if not current_meeting %}
13 | {{ 'Click here to manually start a new meeting'|meetings:language }}
14 | {% endif %}
15 |
16 |
17 |
18 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/meetings/past_meetings.html:
--------------------------------------------------------------------------------
1 | {% load translate %}
2 | {% block content %}
3 |
4 |
5 |
{{ 'Previous meeting notes'|meetings:language }}
6 | {% if past_meetings %}
7 |
8 | {% include "components/body/meetings/meetings_list.html" %}
9 |
10 |
15 | {% else %}
16 | {{ 'No meeting notes yet.'|meetings:language }}
17 | {% endif %}
18 |
19 |
20 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/photos_list.html:
--------------------------------------------------------------------------------
1 | {% load text %}
2 | {% block content %}
3 |
4 | {% for photo in photos %}
5 |
7 |
8 | {% if overlays != False %}
9 |
10 |
{{ photo.str_source }}
11 | {% if photo.text_description_en_US %}
12 |
{{ photo.text_description_en_US }}
13 | {% endif %}
14 |
{{ photo.str_relative_time }}
15 |
16 | {% endif %}
17 |
18 | {% endfor %}
19 |
20 |
21 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/result_preview_block.html:
--------------------------------------------------------------------------------
1 | {% load text %}
2 |
3 | {% block content %}
4 |
5 |
6 | {% if result.text_series_timing %}
7 | {{ result.str_series }}
8 | {% endif %}
9 | {% if result.str_relative_time %}
10 | {% if result.boolean_online_meetup %}Online, {% endif %}{{ result.str_relative_time }}
11 | {% endif %}
12 |
13 |
14 | {% if language == 'hebrew' and result.str_name_he_IL %}
15 | {{ result.str_name_he_IL|shorten:30|safe }}
16 | {% else %}
17 | {{ result.str_name_en_US|shorten:30|safe }}
18 | {% endif %}
19 |
20 |
{{ result.datetime_range_text }}
21 |
22 |
23 |
24 |
25 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/results_list_entries.html:
--------------------------------------------------------------------------------
1 | {% block content %}
2 |
3 | {% if all_results != True %}
4 | {% for result in all_results %}
5 | {% include "components/body/result_preview_block.html" with change_contrast=True %}
6 | {% endfor %}
7 |
8 | {% endif %}
9 |
10 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/body/wish_preview.html:
--------------------------------------------------------------------------------
1 | {% load text %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
8 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/discourse/event_post.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 |
3 | {% block content %}
4 |
5 | {% if result.str_series_repeat_how_often %}
6 | **When?**
7 | 🗓{{ result.repeating }} | {{ result.time_range }}
8 | {% else %}
9 | **When?**
10 | {{ result.datetime_range }}
11 | {% endif %}
12 |
13 | **Where?**
14 | {{ result.str_location|safe }}
15 |
16 | {% with ADDRESS='PHYSICAL_SPACE.ADDRESS'|get_config %}
17 | {% if ADDRESS.STREET in result.str_location %}
18 | **How to find us?**
19 | {{ ADDRESS.HOW_TO_FIND_US__english }}
20 | {% endif %}
21 | {% endwith %}
22 |
23 | **Price?**
24 | Free
25 |
26 | **Organizers?**
27 | {% for host in result.many_hosts.all %}[{{ host.str_name_en_US }}]({{ host.url_discourse }}) {% endfor %}
28 |
29 | {% if result.boolean_looking_for_volunteers == True %}
30 | **Looking for volunteers?**
31 | YES!! Please reply to this event post if you are interested in helping!
32 | {% else %}
33 | **Looking for volunteers?**
34 | No.
35 | {% endif %}
36 |
37 | ***
38 | {% if result.url_featured_photo or 'WEBSITE.DOMAIN'|get_config in result.image_featured_photo.url %}
39 |
40 |
41 | {% endif %}
42 |
43 | {% if result.text_description_en_US %}
44 | {{ result.text_description_en_US }}
45 | {% endif %}
46 |
47 | ***
48 | {{ 'EVENTS.DISCOURSE_AND_MEETUP_EVENT_FOOTER_HTML'|get_config|safe }}
49 |
50 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/head/css.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 | {% load css %}
3 | {% load config %}
4 |
5 | {% block content %}
6 |
7 |
16 |
17 | {% for file_name in ''|getCSSfiles %}
18 |
19 | {% endfor %}
20 |
21 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/head/favicons.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
8 |
9 |
10 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/head/head.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 | {% include "components/head/meta.html" %}
8 | {% include "components/head/css.html" with css_files=css_files %}
9 | {% include "components/head/js.html" %}
10 | {% include "components/head/favicons.html" %}
11 |
12 |
13 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/head/meta.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
3 | {% block content %}
4 |
5 |
6 | {{ page_name }}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/header/temporary_info.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 |
3 | {% block content %}
4 |
5 | {% if ''|still_temporary_open_status %}
6 | {% if 'PHYSICAL_SPACE.TEMPORARY_LANDINGPAGE_HEADER.INFO_MINI_HEADER'|get_config %}
7 | {% if 'PHYSICAL_SPACE.TEMPORARY_LANDINGPAGE_HEADER.INFO_POPUP'|get_config %}
8 |
9 | {% else %}
10 |
11 | {% endif %}
12 | {% endif %}
13 | {% endif %}
14 |
15 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/overlays/meeting_over.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 |
6 |
{{ 'Is the meeting over?'|meetings:language|safe }}
7 |
{{ 'If yes... meeting will be saved...'|meetings:language|safe }}
8 |
9 |
12 |
13 |
14 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/overlays/temporary_info.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
8 |
Important announcement
9 |
{{ 'PHYSICAL_SPACE.TEMPORARY_LANDINGPAGE_HEADER.INFO_POPUP'|get_config }}
10 |
11 |
12 |
13 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/search/search_result.html:
--------------------------------------------------------------------------------
1 | {% block content %}
2 |
3 | {{ result.name|safe }}
4 |
5 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/components/search/search_results.html:
--------------------------------------------------------------------------------
1 | {% block content %}
2 |
3 | {% for result in search_results %}
4 | {% include "components/search/search_result.html" %}
5 | {% endfor %}
6 |
7 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/event_banner_view.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 | {% include "components/head/head.html" with css_files=css_files %}
6 |
7 |
8 | {% if selected.url_featured_photo %}
9 |
10 | {% elif selected.image_featured_photo %}
11 |
12 | {% endif %}
13 |
16 |
17 |
{{ selected.str_name_en_US|safe }}
18 |
{{ selected.datetime_range_text }}
19 |
20 |
23 |
24 |
25 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/event_new_view.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 | {% include "components/header/temporary_info.html" %}
6 |
7 |
11 |
12 |
13 |
14 |
15 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | {{ 'Consider helping existing event...'|events:language|safe }}
31 |
32 |
{{ 'Similar events'|events:language|safe }}
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | {% include "components/body/event_new/new_event_form.html" %}
43 |
44 |
45 |
46 | {% include "components/body/edit_this_page.html" %}
47 |
48 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/landingpage_view.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% block content %}
3 |
4 | {% include "components/header/temporary_info.html" %}
5 |
6 | {% include "components/header/landingpage.html" %}
7 | {% if 'Events|View' in 'MODULES'|get_config %}
8 | {% include "components/body/events_slider.html" %}
9 | {% endif %}
10 |
11 | {% include "components/body/quick_access_icons.html" %}
12 |
13 | {% include "components/body/landing_do_i_belong.html" %}
14 |
15 |
16 | {% if in_space == False %}
17 | {% include "components/body/landing_visit_us.html" %}
18 |
19 | {% if 'CONTACT.PHONE_NUMBER'|get_config or 'CONTACT.E_MAIL'|get_config or 'CONTACT.TELEGRAM_GROUPS'|get_config %}
20 | {% include "components/body/landing_contact_us.html" %}
21 | {% endif %}
22 |
23 | {% endif %}
24 |
25 | {% if 'BASICS.DONATION_URLs.MONEY'|get_config %}
26 | {% include "components/body/landing_please_donate.html" %}
27 | {% endif %}
28 |
29 | {% include "components/body/edit_this_page.html" %}
30 |
31 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/machine_view.html:
--------------------------------------------------------------------------------
1 | {% load array %}
2 | {% load text %}
3 | {% load translate %}
4 | {% block content %}
5 |
6 | {% include "components/header/temporary_info.html" %}
7 |
8 |
15 |
16 |
17 |
18 |
{{ selected.str_name_en_US }}
19 |
20 | {% if selected.text_description_en_US %}
21 | {{ selected.text_description_en_US|findSearches:'Searching ...'|landingpage:language|safe }}
22 |
23 | {% endif %}
24 | {% if selected.url_wiki %}
25 |
Show full wiki page
26 | {% endif %}
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {% if selected.one_guilde %}
39 |
40 |
Guilde
41 | {% include "components/body/result_preview_block.html" with change_contrast=True result=selected.one_guilde %}
42 |
43 | {% endif %}
44 | {% if selected.one_space %}
45 |
46 |
Space
47 | {% include "components/body/result_preview_block.html" with change_contrast=True result=selected.one_space %}
48 |
49 | {% endif %}
50 |
51 |
52 |
53 |
54 |
55 |
56 | {% include "components/body/edit_this_page.html" %}
57 |
58 | {% endblock %}
--------------------------------------------------------------------------------
/_website/templates/meeting_present.html:
--------------------------------------------------------------------------------
1 | {% load config %}
2 | {% load translate %}
3 | {% block content %}
4 |
5 | {% include "components/head/head.html" with css_files=css_files %}
6 |
7 |
8 |
9 |
10 | {% include "components/overlays/meeting_over.html" %}
11 |
12 |
13 |
14 |
15 |
16 |
33 |
34 |
35 |
Live
36 |
37 |
38 | {% if 'WEBSITE.DOMAIN'|get_config in request.META.HTTP_HOST %}https://{% else %}http://{% endif %}
39 | {{ request.META.HTTP_HOST }}/meeting
40 |
41 | End meeting
42 |
43 |