commit a3e9ce77e88da3ee05595764ae535586831c5cb4 Author: Patricio García Date: Mon Aug 11 20:29:59 2025 +0100 Nikola auto commit. Nikola version: 8.3.3 diff --git a/.doit.db.db b/.doit.db.db new file mode 100644 index 0000000..3e03b7b Binary files /dev/null and b/.doit.db.db differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b07d560 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +cache +.doit.db +__pycache__ +output diff --git a/.gitignore~ b/.gitignore~ new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..3827dd2 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +La web renovada de EDUCATIC diff --git a/README.md~ b/README.md~ new file mode 100644 index 0000000..e69de29 diff --git a/conf.py b/conf.py new file mode 100644 index 0000000..84a7ecc --- /dev/null +++ b/conf.py @@ -0,0 +1,1482 @@ +# -*- coding: utf-8 -*- + +import time + +# !! This is the configuration of Nikola. !! # +# !! You should edit it to your liking. !! # + + +# ! Some settings can be different in different languages. +# ! A comment stating (translatable) is used to denote those. +# ! There are two ways to specify a translatable setting: +# ! (a) BLOG_TITLE = "My Blog" +# ! (b) BLOG_TITLE = {"en": "My Blog", "es": "Mi Blog"} +# ! Option (a) is used when you don't want that setting translated. +# ! Option (b) is used for settings that are different in different languages. + + +# Data about this site +BLOG_AUTHOR = "Educatic" # (translatable) +BLOG_TITLE = "EDUCATIC" # (translatable) +# This is the main URL for your site. It will be used +# in a prominent link. Don't forget the protocol (http/https)! +SITE_URL = "https://educatic.txs.es/" +# This is the URL where Nikola's output will be deployed. +# If not set, defaults to SITE_URL +# BASE_URL = "https://educatic.txs.es/" +BLOG_EMAIL = "educatic@txs.es" +BLOG_DESCRIPTION = "Tecnologías para la Educación y Transparencia Tecnológica" # (translatable) + +# URLs of social networks +XMPP_URL = 'xmpp:educatic-general@conference.txs.es' +MASTODON_URL = 'https://txs.es/@educatic' +PEERTUBE_URL = 'https://tuvideo.encanarias.info/accounts/educatic' +GIT_URL = 'https://git.txs.es/EDUCATIC' + +# Nikola is multilingual! +# +# Currently supported languages are: +# +# en English +# af Afrikaans +# ar Arabic +# az Azerbaijani +# bg Bulgarian +# bs Bosnian +# ca Catalan +# cs Czech [ALTERNATIVELY cz] +# da Danish +# de German +# el Greek [NOT gr] +# eo Esperanto +# es Spanish +# et Estonian +# eu Basque +# fa Persian +# fi Finnish +# fr French +# fur Friulian +# gl Galician +# he Hebrew +# hi Hindi +# hr Croatian +# hu Hungarian +# ia Interlingua +# id Indonesian +# it Italian +# ja Japanese [NOT jp] +# ko Korean +# lt Lithuanian +# mi Maori +# ml Malayalam +# mr Marathi +# nb Norwegian (Bokmål) +# nl Dutch +# oc Occitan +# pa Punjabi +# pl Polish +# pt Portuguese +# pt_br Portuguese (Brazil) +# ru Russian +# sk Slovak +# sl Slovene +# sq Albanian +# sr Serbian (Cyrillic) +# sr_latin Serbian (Latin) +# sv Swedish +# te Telugu +# th Thai +# tr Turkish [NOT tr_TR] +# uk Ukrainian +# ur Urdu +# vi Vietnamese +# zh_cn Chinese (Simplified) +# zh_tw Chinese (Traditional) +# +# If you want to use Nikola with a non-supported language you have to provide +# a module containing the necessary translations +# (cf. the modules at nikola/data/themes/base/messages/). +# If a specific post is not translated to a language, then the version +# in the default language will be shown instead. + +# What is the default language? +DEFAULT_LANG = "es" + +# What other languages do you have? +# The format is {"translationcode" : "path/to/translation" } +# the path will be used as a prefix for the generated pages location +TRANSLATIONS = { + DEFAULT_LANG: "", + # Example for another language: + # "es": "./es", +} + +# What will translated input files be named like? + +# If you have a page something.rst, then something.pl.rst will be considered +# its Polish translation. +# (in the above example: path == "something", ext == "rst", lang == "pl") +# this pattern is also used for metadata: +# something.meta -> something.pl.meta + +TRANSLATIONS_PATTERN = '{path}.{lang}.{ext}' + +# Links for the sidebar / navigation bar. (translatable) +# This is a dict. The keys are languages, and values are tuples. +# +# For regular links: +# ('https://getnikola.com/', 'Nikola Homepage') +# +# For submenus: +# ( +# ( +# ('https://apple.com/', 'Apple'), +# ('https://orange.com/', 'Orange'), +# ), +# 'Fruits' +# ) +# +# WARNING: Support for submenus is theme-dependent. +# Only one level of submenus is supported. +# WARNING: Some themes, including the default Bootstrap 4 theme, +# may present issues if the menu is too large. +# (in Bootstrap, the navbar can grow too large and cover contents.) +# WARNING: If you link to directories, make sure to follow +# ``STRIP_INDEXES``. If it’s set to ``True``, end your links +# with a ``/``, otherwise end them with ``/index.html`` — or +# else they won’t be highlighted when active. + +NAVIGATION_LINKS = { + DEFAULT_LANG: ( + # ('/archive.html', "Archivo"), + ( + ( + ('/project/', "Visión y proyecto"), + ('/team/', "Equipo y colaboraciones"), + ('/foundation/', "Fundación TXS.es"), + ('/communications/', "Comunicaciones"), + ('/contact/', "Contacto"), + ), + "Acerca de ...", + ), + ('/services/', "Servicios"), + ('/events/', "Eventos"), + ('/join/', "Asóciate"), + ('/donate/', "Donar"), + # ('/about.html', "Acerca de ..."), + # ('/categories/', "Etiquetas"), + # ('/rss.xml', "RSS"), + ), +} + +# Alternative navigation links. Works the same way NAVIGATION_LINKS does, +# although themes may not always support them. (translatable) +# (Bootstrap 4: right-side of navbar, Bootblog 4: right side of title) +NAVIGATION_ALT_LINKS = { + DEFAULT_LANG: () +} + +# Name of the theme to use. +# THEME = "bootblog4" +THEME = "bootstrap4" + +# A theme color. In default themes, it might be displayed by some browsers as +# the browser UI color (eg. Chrome on Android). Other themes might also use it +# as an accent color (the default ones don’t). Must be a HEX value. +THEME_COLOR = '#5670d4' + +# Theme configuration. Fully theme-dependent. (translatable) +# Samples for bootblog4 (enabled) and bootstrap4 (commented) follow. +# bootblog4 supports: featured_large featured_small featured_on_mobile +# featured_large_image_on_mobile featured_strip_html sidebar +# bootstrap4 supports: navbar_light (defaults to False) +# navbar_custom_bg (defaults to '') + +# Config for bootblog4: +# THEME_CONFIG = { +# DEFAULT_LANG: { +# # Show the latest featured post in a large box, with the previewimage as its background. +# 'featured_large': False, +# # Show the first (remaining) two featured posts in small boxes. +# 'featured_small': False, +# # Show featured posts on mobile. +# 'featured_on_mobile': True, +# # Show image in `featured_large` on mobile. +# # `featured_small` displays them only on desktop. +# 'featured_large_image_on_mobile': True, +# # Strip HTML from featured post text. +# 'featured_strip_html': False, +# # Contents of the sidebar, If empty, the sidebar is not displayed. +# 'sidebar': '' +# } +# } +# Config for bootstrap4: +THEME_CONFIG = { + DEFAULT_LANG: { + # Use a light navbar with dark text. Defaults to False. + 'navbar_light': False, + # Use a custom navbar color. If unset, 'navbar_light' sets text + + # background color. If set, navbar_light controls only background + # color. Supported values: bg-dark, bg-light, bg-primary, bg-secondary, + # bg-success, bg-danger, bg-warning, bg-info, bg-white, bg-transparent. + 'navbar_custom_bg': '', + 'imghdr_url': '/assets/img/header.jpg', + 'imghdr_height': '100px', + } +} + +# POSTS and PAGES contains (wildcard, destination, template) tuples. +# (translatable) +# +# The wildcard is used to generate a list of source files +# (whatever/thing.rst, for example). +# +# That fragment could have an associated metadata file (whatever/thing.meta), +# and optionally translated files (example for Spanish, with code "es"): +# whatever/thing.es.rst and whatever/thing.es.meta +# +# This assumes you use the default TRANSLATIONS_PATTERN. +# +# From those files, a set of HTML fragment files will be generated: +# cache/whatever/thing.html (and maybe cache/whatever/thing.html.es) +# +# These files are combined with the template to produce rendered +# pages, which will be placed at +# output/TRANSLATIONS[lang]/destination/pagename.html +# +# where "pagename" is the "slug" specified in the metadata file. +# The page might also be placed in /destination/pagename/index.html +# if PRETTY_URLS are enabled. +# +# The difference between POSTS and PAGES is that POSTS are added +# to feeds, indexes, tag lists and archives and are considered part +# of a blog, while PAGES are just independent HTML pages. +# +# Finally, note that destination can be translated, i.e. you can +# specify a different translation folder per language. Example: +# PAGES = ( +# ("pages/*.rst", {"en": "pages", "de": "seiten"}, "page.tmpl"), +# ("pages/*.md", {"en": "pages", "de": "seiten"}, "page.tmpl"), +# ) + +# POSTS = ( +# ("posts/*.rst", "posts", "post.tmpl"), +# ("posts/*.md", "posts", "post.tmpl"), +# ("posts/*.txt", "posts", "post.tmpl"), +# ("posts/*.html", "posts", "post.tmpl"), +#) +POSTS = () +PAGES = ( + ("pages/*.rst", "", "page.tmpl"), + ("pages/*.md", "", "page.tmpl"), + ("pages/*.txt", "", "page.tmpl"), + ("pages/*.html", "", "page.tmpl"), +) + + +# Below this point, everything is optional + +# Post's dates are considered in UTC by default, if you want to use +# another time zone, please set TIMEZONE to match. Check the available +# list from Wikipedia: +# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# (e.g. 'Europe/Zurich') +# Also, if you want to use a different time zone in some of your posts, +# you can use the ISO 8601/RFC 3339 format (ex. 2012-03-30T23:00:00+02:00) +TIMEZONE = "Atlantic/Canary" + +# If you want to use ISO 8601 (also valid RFC 3339) throughout Nikola +# (especially in new_post), set this to True. +# Note that this does not affect DATE_FORMAT. +# FORCE_ISO8601 = False + +# Date format used to display post dates. (translatable) +# Used by babel.dates, CLDR style.. +# https://cldr.unicode.org/translation/date-time/date-time-symbols +# https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table +# You can also use 'full', 'long', 'medium', or 'short' +# DATE_FORMAT = 'yyyy-MM-dd HH:mm' + +# Date format used to display post dates, if local dates are used. (translatable) +# Used by Luxon: https://moment.github.io/luxon/docs/manual/formatting +# Example for presets: {'preset': True, 'format': 'DATE_FULL'} +# LUXON_DATE_FORMAT = { +# DEFAULT_LANG: {'preset': False, 'format': 'yyyy-MM-dd HH:mm'}, +# } + +# Date fanciness. +# +# 0 = using DATE_FORMAT and TIMEZONE (without JS) +# 1 = using LUXON_DATE_FORMAT and local user time (JS, using Luxon) +# 2 = using a string like “2 days ago” (JS, using Luxon) +# +# Your theme must support it, Bootstrap already does. +# DATE_FANCINESS = 0 + +# Customize the locale/region used for a language. +# For example, to use British instead of US English: LOCALES = {'en': 'en_GB'} +# LOCALES = {} + +# One or more folders containing files to be copied as-is into the output. +# The format is a dictionary of {source: relative destination}. +# Default is: +# FILES_FOLDERS = {'files': ''} +# Which means copy 'files' into 'output' + +# One or more folders containing code listings to be processed and published on +# the site. The format is a dictionary of {source: relative destination}. +# Default is: +# LISTINGS_FOLDERS = {'listings': 'listings'} +# Which means process listings from 'listings' into 'output/listings' + +# A mapping of languages to file-extensions that represent that language. +# Feel free to add or delete extensions to any list, but don't add any new +# compilers unless you write the interface for it yourself. +# +# The default compiler for `new_post` is the first entry in the POSTS tuple. +# +# 'rest' is reStructuredText +# 'markdown' is Markdown +# 'html' assumes the file is HTML and just copies it +COMPILERS = { + "rest": ['.rst', '.txt'], + "markdown": ['.md', '.mdown', '.markdown'], + "textile": ['.textile'], + "txt2tags": ['.t2t'], + "bbcode": ['.bb'], + "wiki": ['.wiki'], + "ipynb": ['.ipynb'], + "html": ['.html', '.htm'], + # PHP files are rendered the usual way (i.e. with the full templates). + # The resulting files have .php extensions, making it possible to run + # them without reconfiguring your server to recognize them. + "php": ['.php'], + # Pandoc detects the input from the source filename + # but is disabled by default as it would conflict + # with many of the others. + # "pandoc": ['.rst', '.md', '.txt'], +} + +# Enable reST directives that insert the contents of external files such +# as "include" and "raw." This maps directly to the docutils file_insertion_enabled +# config. See: https://docutils.sourceforge.io/docs/user/config.html#file-insertion-enabled +# REST_FILE_INSERTION_ENABLED = True + +# Create by default posts in one file format? +# Set to False for two-file posts, with separate metadata. +# ONE_FILE_POSTS = True + +# Preferred metadata format for new posts +# "Nikola": reST comments, wrapped in a HTML comment if needed (default) +# "YAML": YAML wrapped in "---" +# "TOML": TOML wrapped in "+++" +# "Pelican": Native markdown metadata or reST docinfo fields. Nikola style for other formats. +# METADATA_FORMAT = "Nikola" + +# Use date-based path when creating posts? +# Can be enabled on a per-post basis with `nikola new_post -d`. +# The setting is ignored when creating pages. +# NEW_POST_DATE_PATH = False + +# What format to use when creating posts with date paths? +# Default is '%Y/%m/%d', other possibilities include '%Y' or '%Y/%m'. +# NEW_POST_DATE_PATH_FORMAT = '%Y/%m/%d' + +# If this is set to True, the DEFAULT_LANG version will be displayed for +# untranslated posts. +# If this is set to False, then posts that are not translated to a language +# LANG will not be visible at all in the pages in that language. +# SHOW_UNTRANSLATED_POSTS = True + +# Nikola supports logo display. If you have one, you can put the URL here. +# Final output is . +# The URL may be relative to the site root. +LOGO_URL = '/assets/img/educatic_logo_w.svg' + +# When linking posts to social media, Nikola provides Open Graph metadata +# which is used to show a nice preview. This includes an image preview +# taken from the post's previewimage metadata field. +# This option lets you use an image to be used if the post doesn't have it. +# The default is None, valid values are URLs or output paths like +# "/images/foo.jpg" +# DEFAULT_PREVIEW_IMAGE = None + +# If you want to hide the title of your website (for example, if your logo +# already contains the text), set this to False. +# Note: if your logo is a SVG image, and you set SHOW_BLOG_TITLE = False, +# you should explicitly set a height for #logo in CSS. +SHOW_BLOG_TITLE = False + +# Paths for different autogenerated bits. These are combined with the +# translation paths. + +# Final locations are: +# output / TRANSLATION[lang] / TAG_PATH / index.html (list of tags) +# output / TRANSLATION[lang] / TAG_PATH / tag.html (list of posts for a tag) +# output / TRANSLATION[lang] / TAG_PATH / tag RSS_EXTENSION (RSS feed for a tag) +# (translatable) +# TAG_PATH = "categories" + +# By default, the list of tags is stored in +# output / TRANSLATION[lang] / TAG_PATH / index.html +# (see explanation for TAG_PATH). This location can be changed to +# output / TRANSLATION[lang] / TAGS_INDEX_PATH +# with an arbitrary relative path TAGS_INDEX_PATH. +# (translatable) +# TAGS_INDEX_PATH = "tags.html" + +# If TAG_PAGES_ARE_INDEXES is set to True, each tag's page will contain +# the posts themselves. If set to False, it will be just a list of links. +# TAG_PAGES_ARE_INDEXES = False + +# Set descriptions for tag pages to make them more interesting. The +# default is no description. The value is used in the meta description +# and displayed underneath the tag list or index page’s title. +# (translatable) +# TAG_DESCRIPTIONS = { +# DEFAULT_LANG: { +# "blogging": "Meta-blog posts about blogging.", +# "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects." +# }, +# } + +# Set special titles for tag pages. The default is "Posts about TAG". +# (translatable) +# TAG_TITLES = { +# DEFAULT_LANG: { +# "blogging": "Meta-posts about blogging", +# "open source": "Posts about open source software" +# }, +# } + +# If you do not want to display a tag publicly, you can mark it as hidden. +# The tag will not be displayed on the tag list page and posts. +# Tag pages will still be generated. +HIDDEN_TAGS = ['mathjax'] + +# Only include tags on the tag list/overview page if there are at least +# TAGLIST_MINIMUM_POSTS number of posts or more with every tag. Every tag +# page is still generated, linked from posts, and included in the sitemap. +# However, more obscure tags can be hidden from the tag index page. +# TAGLIST_MINIMUM_POSTS = 1 + +# A list of dictionaries specifying tags which translate to each other. +# Format: a list of dicts {language: translation, language2: translation2, …} +# For example: +# [ +# {'en': 'private', 'de': 'Privat'}, +# {'en': 'work', 'fr': 'travail', 'de': 'Arbeit'}, +# ] +# TAG_TRANSLATIONS = [] + +# If set to True, a tag in a language will be treated as a translation +# of the literally same tag in all other languages. Enable this if you +# do not translate tags, for example. +# TAG_TRANSLATIONS_ADD_DEFAULTS = True + +# Final locations are: +# output / TRANSLATION[lang] / CATEGORY_PATH / index.html (list of categories) +# output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category.html (list of posts for a category) +# output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category RSS_EXTENSION (RSS feed for a category) +# (translatable) +# CATEGORY_PATH = "categories" +# CATEGORY_PREFIX = "cat_" + +# By default, the list of categories is stored in +# output / TRANSLATION[lang] / CATEGORY_PATH / index.html +# (see explanation for CATEGORY_PATH). This location can be changed to +# output / TRANSLATION[lang] / CATEGORIES_INDEX_PATH +# with an arbitrary relative path CATEGORIES_INDEX_PATH. +# (translatable) +# CATEGORIES_INDEX_PATH = "categories.html" + +# If CATEGORY_ALLOW_HIERARCHIES is set to True, categories can be organized in +# hierarchies. For a post, the whole path in the hierarchy must be specified, +# using a forward slash ('/') to separate paths. Use a backslash ('\') to escape +# a forward slash or a backslash (i.e. '\//\\' is a path specifying the +# subcategory called '\' of the top-level category called '/'). +CATEGORY_ALLOW_HIERARCHIES = False +# If CATEGORY_OUTPUT_FLAT_HIERARCHY is set to True, the output written to output +# contains only the name of the leaf category and not the whole path. +CATEGORY_OUTPUT_FLAT_HIERARCHY = False + +# If CATEGORY_PAGES_ARE_INDEXES is set to True, each category's page will contain +# the posts themselves. If set to False, it will be just a list of links. +# CATEGORY_PAGES_ARE_INDEXES = False + +# Set descriptions for category pages to make them more interesting. The +# default is no description. The value is used in the meta description +# and displayed underneath the category list or index page’s title. +# (translatable) +# CATEGORY_DESCRIPTIONS = { +# DEFAULT_LANG: { +# "blogging": "Meta-blog posts about blogging.", +# "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects." +# }, +# } + +# Set special titles for category pages. The default is "Posts about CATEGORY". +# (translatable) +# CATEGORY_TITLES = { +# DEFAULT_LANG: { +# "blogging": "Meta-posts about blogging", +# "open source": "Posts about open source software" +# }, +# } + +# If you do not want to display a category publicly, you can mark it as hidden. +# The category will not be displayed on the category list page. +# Category pages will still be generated. +HIDDEN_CATEGORIES = [] + +# A list of dictionaries specifying categories which translate to each other. +# Format: a list of dicts {language: translation, language2: translation2, …} +# See TAG_TRANSLATIONS example above. +# CATEGORY_TRANSLATIONS = [] + +# If set to True, a category in a language will be treated as a translation +# of the literally same category in all other languages. Enable this if you +# do not translate categories, for example. +# CATEGORY_TRANSLATIONS_ADD_DEFAULTS = True + +# If no category is specified in a post, the destination path of the post +# can be used in its place. This replaces the sections feature. Using +# category hierarchies is recommended. +# CATEGORY_DESTPATH_AS_DEFAULT = False + +# If True, the prefix will be trimmed from the category name, eg. if the +# POSTS destination is "foo/bar", and the path is "foo/bar/baz/quux", +# the category will be "baz/quux" (or "baz" if only the first directory is considered). +# Note that prefixes coming from translations are always ignored. +# CATEGORY_DESTPATH_TRIM_PREFIX = False + +# If True, only the first directory of a path will be used. +# CATEGORY_DESTPATH_FIRST_DIRECTORY_ONLY = True + +# Map paths to prettier category names. (translatable) +# CATEGORY_DESTPATH_NAMES = { +# DEFAULT_LANG: { +# 'webdev': 'Web Development', +# 'webdev/django': 'Web Development/Django', +# 'random': 'Odds and Ends', +# }, +# } + +# By default, category indexes will appear in CATEGORY_PATH and use +# CATEGORY_PREFIX. If this is enabled, those settings will be ignored (except +# for the index) and instead, they will follow destination paths (eg. category +# 'foo' might appear in 'posts/foo'). If the category does not come from a +# destpath, first entry in POSTS followed b[ ] y the category name will be used. +# For this setting, category hierarchies are required and cannot be flattened. +# CATEGORY_PAGES_FOLLOW_DESTPATH = False + +# If ENABLE_AUTHOR_PAGES is set to True and there is more than one +# author, author pages are generated. +# ENABLE_AUTHOR_PAGES = True + +# Path to author pages. Final locations are: +# output / TRANSLATION[lang] / AUTHOR_PATH / index.html (list of authors) +# output / TRANSLATION[lang] / AUTHOR_PATH / author.html (list of posts by an author) +# output / TRANSLATION[lang] / AUTHOR_PATH / author RSS_EXTENSION (RSS feed for an author) +# (translatable) +# AUTHOR_PATH = "authors" + +# If AUTHOR_PAGES_ARE_INDEXES is set to True, each author's page will contain +# the posts themselves. If set to False, it will be just a list of links. +# AUTHOR_PAGES_ARE_INDEXES = False + +# Set descriptions for author pages to make them more interesting. The +# default is no description. The value is used in the meta description +# and displayed underneath the author list or index page’s title. +# AUTHOR_PAGES_DESCRIPTIONS = { +# DEFAULT_LANG: { +# "Juanjo Conti": "Python coder and writer.", +# "Roberto Alsina": "Nikola father." +# }, +# } + + +# If you do not want to display an author publicly, you can mark it as hidden. +# The author will not be displayed on the author list page. +# Author pages and links to them will still be generated. +HIDDEN_AUTHORS = ['Guest'] + +# Allow multiple, comma-separated authors for a post? (Requires theme support, present in built-in themes) +# MULTIPLE_AUTHORS_PER_POST = False + +# Final location for the main blog page and sibling paginated pages is +# output / TRANSLATION[lang] / INDEX_PATH / index-*.html +# (translatable) +INDEX_PATH = "post" + +# Optional HTML that displayed on “main” blog index.html files. +# May be used for a greeting. (translatable) +FRONT_INDEX_HEADER = { + DEFAULT_LANG: '' +} + +# Create per-month archives instead of per-year +# CREATE_MONTHLY_ARCHIVE = False +# Create one large archive instead of per-year +# CREATE_SINGLE_ARCHIVE = False +# Create year, month, and day archives each with a (long) list of posts +# (overrides both CREATE_MONTHLY_ARCHIVE and CREATE_SINGLE_ARCHIVE) +# CREATE_FULL_ARCHIVES = False +# If monthly archives or full archives are created, adds also one archive per day +# CREATE_DAILY_ARCHIVE = False +# Create previous, up, next navigation links for archives +# CREATE_ARCHIVE_NAVIGATION = False +# Final locations for the archives are: +# output / TRANSLATION[lang] / ARCHIVE_PATH / ARCHIVE_FILENAME +# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / index.html +# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / index.html +# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / DAY / index.html +# (translatable) +# ARCHIVE_PATH = "" +# ARCHIVE_FILENAME = "archive.html" + +# If ARCHIVES_ARE_INDEXES is set to True, each archive page which contains a list +# of posts will contain the posts themselves. If set to False, it will be just a +# list of links. +# ARCHIVES_ARE_INDEXES = False + +# URLs to other posts/pages can take 3 forms: +# rel_path: a relative URL to the current page/post (default) +# full_path: a URL with the full path from the root +# absolute: a complete URL (that includes the SITE_URL) +# URL_TYPE = 'rel_path' + +# Extension for RSS feed files +# RSS_EXTENSION = ".xml" + +# RSS filename base (without extension); used for indexes and galleries. +# (translatable) +# RSS_FILENAME_BASE = "rss" + +# Final location for the blog main RSS feed is: +# output / TRANSLATION[lang] / RSS_PATH / RSS_FILENAME_BASE RSS_EXTENSION +# (translatable) +# RSS_PATH = "" + +# Final location for the blog main Atom feed is: +# output / TRANSLATION[lang] / ATOM_PATH / ATOM_FILENAME_BASE ATOM_EXTENSION +# (translatable) +# ATOM_PATH = "" + +# Atom filename base (without extension); used for indexes. +# (translatable) +ATOM_FILENAME_BASE = "feed" + +# Extension for Atom feed files +# ATOM_EXTENSION = ".atom" + +# Slug the Tag URL. Easier for users to type, special characters are +# often removed or replaced as well. +# SLUG_TAG_PATH = True + +# Slug the Author URL. Easier for users to type, special characters are +# often removed or replaced as well. +# SLUG_AUTHOR_PATH = True + +# A list of redirection tuples, [("foo/from.html", "/bar/to.html")]. +# +# A HTML file will be created in output/foo/from.html that redirects +# to the "/bar/to.html" URL. notice that the "from" side MUST be a +# relative URL. +# +# If you don't need any of these, just set to [] +REDIRECTIONS = [] + +# Presets of commands to execute to deploy. Can be anything, for +# example, you may use rsync: +# "rsync -rav --delete --delete-after output/ joe@my.site:/srv/www/site" +# And then do a backup, or run `nikola ping` from the `ping` +# plugin (`nikola plugin -i ping`). Or run `nikola check -l`. +# You may also want to use github_deploy (see below). +# You can define multiple presets and specify them as arguments +# to `nikola deploy`. If no arguments are specified, a preset +# named `default` will be executed. You can use as many presets +# in a `nikola deploy` command as you like. +# DEPLOY_COMMANDS = { +# 'default': [ +# "rsync -rav --delete --delete-after output/ joe@my.site:/srv/www/site", +# ] +# } + +# github_deploy configuration +# For more details, read the manual: +# https://getnikola.com/handbook.html#deploying-to-github +# You will need to configure the deployment branch on GitHub. +GITHUB_SOURCE_BRANCH = 'src' +GITHUB_DEPLOY_BRANCH = 'master' + +# The name of the remote where you wish to push to, using github_deploy. +GITHUB_REMOTE_NAME = 'origin' + +# Whether or not github_deploy should commit to the source branch automatically +# before deploying. +GITHUB_COMMIT_SOURCE = True + +# Where the output site should be located +# If you don't use an absolute path, it will be considered as relative +# to the location of conf.py +# OUTPUT_FOLDER = 'output' + +# where the "cache" of partial generated content should be located +# default: 'cache' +# CACHE_FOLDER = 'cache' + +# Filters to apply to the output. +# A directory where the keys are either: a file extensions, or +# a tuple of file extensions. +# +# And the value is a list of commands to be applied in order. +# +# Each command must be either: +# +# A string containing a '%s' which will +# be replaced with a filename. The command *must* produce output +# in place. +# +# Or: +# +# A python callable, which will be called with the filename as +# argument. +# +# By default, only .php files uses filters to inject PHP into +# Nikola’s templates. All other filters must be enabled through FILTERS. +# +# Many filters are shipped with Nikola. A list is available in the manual: +# +# +# from nikola import filters +# FILTERS = { +# ".html": [filters.typogrify], +# ".js": [filters.closure_compiler], +# ".jpg": ["jpegoptim --strip-all -m75 -v %s"], +# } + +# Executable for the "yui_compressor" filter (defaults to 'yui-compressor'). +# YUI_COMPRESSOR_EXECUTABLE = 'yui-compressor' + +# Executable for the "closure_compiler" filter (defaults to 'closure-compiler'). +# CLOSURE_COMPILER_EXECUTABLE = 'closure-compiler' + +# Executable for the "optipng" filter (defaults to 'optipng'). +# OPTIPNG_EXECUTABLE = 'optipng' + +# Executable for the "jpegoptim" filter (defaults to 'jpegoptim'). +# JPEGOPTIM_EXECUTABLE = 'jpegoptim' + +# Executable for the "html_tidy_withconfig", "html_tidy_nowrap", +# "html_tidy_wrap", "html_tidy_wrap_attr" and "html_tidy_mini" filters +# (defaults to 'tidy'). +# HTML_TIDY_EXECUTABLE = 'tidy' + +# List of XPath expressions which should be used for finding headers +# ({hx} is replaced by headers h1 through h6). +# You must change this if you use a custom theme that does not use +# "e-content entry-content" as a class for post and page contents. +# HEADER_PERMALINKS_XPATH_LIST = ['*//div[@class="e-content entry-content"]//{hx}'] +# Include *every* header (not recommended): +# HEADER_PERMALINKS_XPATH_LIST = ['*//{hx}'] + +# File blacklist for header permalinks. Contains output path +# (eg. 'output/index.html') +# HEADER_PERMALINKS_FILE_BLACKLIST = [] + +# Expert setting! Create a gzipped copy of each generated file. Cheap server- +# side optimization for very high traffic sites or low memory servers. +# GZIP_FILES = False +# File extensions that will be compressed +# GZIP_EXTENSIONS = ('.txt', '.htm', '.html', '.css', '.js', '.json', '.atom', '.xml') +# Use an external gzip command? None means no. +# Example: GZIP_COMMAND = "pigz -k {filename}" +# GZIP_COMMAND = None +# Make sure the server does not return a "Accept-Ranges: bytes" header for +# files compressed by this option! OR make sure that a ranged request does not +# return partial content of another representation for these resources. Do not +# use this feature if you do not understand what this means. + +# ############################################################################# +# Image Gallery Options +# ############################################################################# + +# One or more folders containing galleries. The format is a dictionary of +# {"source": "relative_destination"}, where galleries are looked for in +# "source/" and the results will be located in +# "OUTPUT_PATH/relative_destination/gallery_name" +# Default is: +# GALLERY_FOLDERS = {"galleries": "galleries"} +# More gallery options: +# THUMBNAIL_SIZE = 180 +# MAX_IMAGE_SIZE = 1280 +# USE_FILENAME_AS_TITLE = True +# EXTRA_IMAGE_EXTENSIONS = [] + +# Use a thumbnail (defined by ".. previewimage:" in the gallery's index) in +# list of galleries for each gallery +GALLERIES_USE_THUMBNAIL = False + +# Image to use as thumbnail for those galleries that don't have one +# None: show a grey square +# '/url/to/file': show the image in that url +GALLERIES_DEFAULT_THUMBNAIL = None + +# If set to False, it will sort by filename instead. Defaults to True +# GALLERY_SORT_BY_DATE = True + +# If set to True, EXIF data will be copied when an image is thumbnailed or +# resized. (See also EXIF_WHITELIST) +# PRESERVE_EXIF_DATA = False + +# If you have enabled PRESERVE_EXIF_DATA, this option lets you choose EXIF +# fields you want to keep in images. (See also PRESERVE_EXIF_DATA) +# +# For a full list of field names, please see here: +# http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf +# +# This is a dictionary of lists. Each key in the dictionary is the +# name of a IDF, and each list item is a field you want to preserve. +# If you have a IDF with only a '*' item, *EVERY* item in it will be +# preserved. If you don't want to preserve anything in a IDF, remove it +# from the setting. By default, no EXIF information is kept. +# Setting the whitelist to anything other than {} implies +# PRESERVE_EXIF_DATA is set to True +# To preserve ALL EXIF data, set EXIF_WHITELIST to {"*": "*"} + +# EXIF_WHITELIST = {} + +# Some examples of EXIF_WHITELIST settings: + +# Basic image information: +# EXIF_WHITELIST['0th'] = [ +# "Orientation", +# "XResolution", +# "YResolution", +# ] + +# If you want to keep GPS data in the images: +# EXIF_WHITELIST['GPS'] = ["*"] + +# Embedded thumbnail information: +# EXIF_WHITELIST['1st'] = ["*"] + +# If set to True, any ICC profile will be copied when an image is thumbnailed or +# resized. +# PRESERVE_ICC_PROFILES = False + +# Folders containing images to be used in normal posts or pages. +# IMAGE_FOLDERS is a dictionary of the form {"source": "destination"}, +# where "source" is the folder containing the images to be published, and +# "destination" is the folder under OUTPUT_PATH containing the images copied +# to the site. Thumbnail images will be created there as well. + +# To reference the images in your posts, include a leading slash in the path. +# For example, if IMAGE_FOLDERS = {'images': 'images'}, write +# +# .. image:: /images/tesla.jpg +# +# See the Nikola Handbook for details (in the “Embedding Images” and +# “Thumbnails” sections) + +# Images will be scaled down according to IMAGE_THUMBNAIL_SIZE and MAX_IMAGE_SIZE +# options, but will have to be referenced manually to be visible on the site +# (the thumbnail has ``.thumbnail`` added before the file extension by default, +# but a different naming template can be configured with IMAGE_THUMBNAIL_FORMAT). +# Panoramas (aspect ratio over 3:1) get 4x larger thumbnails due to scaling issues. + +IMAGE_FOLDERS = {'images': 'images'} +# IMAGE_THUMBNAIL_SIZE = 400 +# IMAGE_THUMBNAIL_FORMAT = '{name}.thumbnail{ext}' + +# ############################################################################# +# HTML fragments and diverse things that are used by the templates +# ############################################################################# + +# Data about post-per-page indexes. +# INDEXES_PAGES defaults to ' old posts, page %d' or ' page %d' (translated), +# depending on the value of INDEXES_PAGES_MAIN. +# +# (translatable) If the following is empty, defaults to BLOG_TITLE: +# INDEXES_TITLE = "" +# +# (translatable) If the following is empty, defaults to ' [old posts,] page %d' (see above): +# INDEXES_PAGES = "" +# +# If the following is True, INDEXES_PAGES is also displayed on the main (the +# newest) index page (index.html): +# INDEXES_PAGES_MAIN = False +# +# If the following is True, index-1.html has the oldest posts, index-2.html the +# second-oldest posts, etc., and index.html has the newest posts. This ensures +# that all posts on index-x.html will forever stay on that page, now matter how +# many new posts are added. +# If False, index-1.html has the second-newest posts, index-2.html the third-newest, +# and index-n.html the oldest posts. When this is active, old posts can be moved +# to other index pages when new posts are added. +# INDEXES_STATIC = True +# +# (translatable) If PRETTY_URLS is set to True, this setting will be used to create +# prettier URLs for index pages, such as page/2/index.html instead of index-2.html. +# Valid values for this settings are: +# * False, +# * a list or tuple, specifying the path to be generated, +# * a dictionary mapping languages to lists or tuples. +# Every list or tuple must consist of strings which are used to combine the path; +# for example: +# ['page', '{number}', '{index_file}'] +# The replacements +# {number} --> (logical) page number; +# {old_number} --> the page number inserted into index-n.html before (zero for +# the main page); +# {index_file} --> value of option INDEX_FILE +# are made. +# Note that in case INDEXES_PAGES_MAIN is set to True, a redirection will be created +# for the full URL with the page number of the main page to the normal (shorter) main +# page URL. +# INDEXES_PRETTY_PAGE_URL = False +# +# If the following is true, a page range navigation will be inserted to indices. +# Please note that this will undo the effect of INDEXES_STATIC, as all index pages +# must be recreated whenever the number of pages changes. +# SHOW_INDEX_PAGE_NAVIGATION = False + +# If the following is True, a meta name="generator" tag is added to pages. The +# generator tag is used to specify the software used to generate the page +# (it promotes Nikola). +# META_GENERATOR_TAG = True + +# Color scheme to be used for code blocks. If your theme provides +# "assets/css/code.css" this is ignored. Set to None to disable. +# Can be any of: +# algol, algol_nu, autumn, borland, bw, colorful, default, emacs, friendly, +# fruity, igor, lovelace, manni, monokai, murphy, native, paraiso-dark, +# paraiso-light, pastie, perldoc, rrt, tango, trac, vim, vs, xcode +# This list MAY be incomplete since pygments adds styles every now and then. +# Check with list(pygments.styles.get_all_styles()) in an interpreter. +# +# CODE_COLOR_SCHEME = 'default' + +# FAVICONS contains (name, file, size) tuples. +# Used to create favicon link like this: +# +FAVICONS = ( + ("shortcut icon", "/assets/img/favicon.ico", "48x48"), + ("icon", "/assets/img/favicon-96x96.png", "96x96"), + ("icon", "/assets/img/favicon.svg", ""), + ("apple-touch-icon", "/assets/img/apple-touch-icon.png", "180x180"), + ("manifest", "/assets/img/site.webmanifest", ""), +) + +# Show teasers (instead of full posts) in indexes? Defaults to False. +# INDEX_TEASERS = False + +# HTML fragments with the Read more... links. +# The following tags exist and are replaced for you: +# {link} A link to the full post page. +# {read_more} The string “Read more” in the current language. +# {reading_time} An estimate of how long it will take to read the post. +# {remaining_reading_time} An estimate of how long it will take to read the post, sans the teaser. +# {min_remaining_read} The string “{remaining_reading_time} min remaining to read” in the current language. +# {paragraph_count} The amount of paragraphs in the post. +# {remaining_paragraph_count} The amount of paragraphs in the post, sans the teaser. +# {post_title} The title of the post. +# {{ A literal { (U+007B LEFT CURLY BRACKET) +# }} A literal } (U+007D RIGHT CURLY BRACKET) + +# 'Read more...' for the index page, if INDEX_TEASERS is True (translatable) +INDEX_READ_MORE_LINK = '

{read_more}…

' +# 'Read more...' for the feeds, if FEED_TEASERS is True (translatable) +FEED_READ_MORE_LINK = '

{read_more}… ({min_remaining_read})

' + +# Append a URL query to the FEED_READ_MORE_LINK in Atom and RSS feeds. Advanced +# option used for traffic source tracking. +# Minimum example for use with Piwik: "pk_campaign=feed" +# The following tags exist and are replaced for you: +# {feedRelUri} A relative link to the feed. +# {feedFormat} The name of the syndication format. +# Example using replacement for use with Google Analytics: +# "utm_source={feedRelUri}&utm_medium=nikola_feed&utm_campaign={feedFormat}_feed" +FEED_LINKS_APPEND_QUERY = False + +# A HTML fragment describing the license, for the sidebar. +# (translatable) +LICENSE = "" +# I recommend using the Creative Commons' wizard: +# https://creativecommons.org/choose/ +# LICENSE = """ +# +# Creative Commons License BY-NC-SA""" + +# A small copyright notice for the page footer (in HTML). +# (translatable) +# CONTENT_FOOTER = 'Contents © {date} {author} - Powered by Nikola {license}' +CONTENT_FOOTER = """© 2020-{date} {author} + - + + + + + - + Información legal + - + Generado con Nikola + {license} +""" + +# Things that will be passed to CONTENT_FOOTER.format(). This is done +# for translatability, as dicts are not formattable. Nikola will +# intelligently format the setting properly. +# The setting takes a dict. The keys are languages. The values are +# tuples of tuples of positional arguments and dicts of keyword arguments +# to format(). For example, {'en': (('Hello'), {'target': 'World'})} +# results in CONTENT_FOOTER['en'].format('Hello', target='World'). +# If you need to use the literal braces '{' and '}' in your footer text, use +# '{{' and '}}' to escape them (str.format is used) +# WARNING: If you do not use multiple languages with CONTENT_FOOTER, this +# still needs to be a dict of this format. (it can be empty if you +# do not need formatting) +# (translatable) +CONTENT_FOOTER_FORMATS = { + DEFAULT_LANG: ( + (), + { + "email": BLOG_EMAIL, + "author": BLOG_AUTHOR, + "date": time.gmtime().tm_year, + "license": LICENSE, + "xmpp_url": XMPP_URL, + "mastodon_url": MASTODON_URL, + "peertube_url": PEERTUBE_URL, + } + ) +} + +# A simple copyright tag for inclusion in RSS feeds that works just +# like CONTENT_FOOTER and CONTENT_FOOTER_FORMATS +RSS_COPYRIGHT = 'Contents © {date} {author} {license}' +RSS_COPYRIGHT_PLAIN = 'Contents © {date} {author} {license}' +RSS_COPYRIGHT_FORMATS = CONTENT_FOOTER_FORMATS + +# To use comments, you can choose between different third party comment +# systems. The following comment systems are supported by Nikola: +# disqus, discourse, facebook, intensedebate, isso, muut, commento, +# utterances +# You can leave this option blank to disable comments. +COMMENT_SYSTEM = "" +# And you also need to add your COMMENT_SYSTEM_ID which +# depends on what comment system you use. The default is +# "nikolademo" which is a test account for Disqus. More information +# is in the manual. +COMMENT_SYSTEM_ID = "" + +# Create index.html for page folders? +# WARNING: if a page would conflict with the index file (usually +# caused by setting slug to `index`), the PAGE_INDEX +# will not be generated for that directory. +# PAGE_INDEX = False +# Enable comments on pages (i.e. not posts)? +# COMMENTS_IN_PAGES = False +# Enable comments on picture gallery pages? +# COMMENTS_IN_GALLERIES = False + +# What file should be used for directory indexes? +# Defaults to index.html +# Common other alternatives: default.html for IIS, index.php +# INDEX_FILE = "index.html" + +# If a link ends in /index.html, drop the index.html part. +# http://mysite/foo/bar/index.html => http://mysite/foo/bar/ +# (Uses the INDEX_FILE setting, so if that is, say, default.html, +# it will instead /foo/default.html => /foo) +STRIP_INDEXES = True + +# List of files relative to the server root (!) that will be asked to be excluded +# from indexing and other robotic spidering. * is supported. Will only be effective +# if SITE_URL points to server root. The list is used to exclude resources from +# /robots.txt and /sitemap.xml, and to inform search engines about /sitemapindex.xml. +# ROBOTS_EXCLUSIONS = ["/archive.html", "/category/*.html"] + +# Instead of putting files in .html, put them in /index.html. +# No web server configuration is required. Also enables STRIP_INDEXES. +# This can be disabled on a per-page/post basis by adding +# .. pretty_url: False +# to the metadata. +PRETTY_URLS = True + +# If True, publish future dated posts right away instead of scheduling them. +# Defaults to False. +# FUTURE_IS_NOW = False + +# If True, future dated posts are allowed in deployed output +# Only the individual posts are published/deployed; not in indexes/sitemap +# Generally, you want FUTURE_IS_NOW and DEPLOY_FUTURE to be the same value. +# DEPLOY_FUTURE = False +# If False, draft posts will not be deployed +# DEPLOY_DRAFTS = True + +# Allows scheduling of posts using the rule specified here (new_post -s) +# Specify an iCal Recurrence Rule: https://www.kanzaki.com/docs/ical/rrule.html +# SCHEDULE_RULE = '' +# If True, use the scheduling rule to all posts (not pages!) by default +# SCHEDULE_ALL = False + +# Do you want to add a Mathjax config file? +# MATHJAX_CONFIG = "" + +# If you want support for the $.$ syntax (which may conflict with running +# text!), just use this config: +# MATHJAX_CONFIG = """ +# +# """ + +# Want to use KaTeX instead of MathJax? While KaTeX may not support every +# feature yet, it's faster and the output looks better. +# USE_KATEX = False + +# KaTeX auto-render settings. If you want support for the $.$ syntax (which may +# conflict with running text!), just use this config: +# KATEX_AUTO_RENDER = """ +# delimiters: [ +# {left: "$$", right: "$$", display: true}, +# {left: "\\\\[", right: "\\\\]", display: true}, +# {left: "\\\\begin{equation*}", right: "\\\\end{equation*}", display: true}, +# {left: "$", right: "$", display: false}, +# {left: "\\\\(", right: "\\\\)", display: false} +# ] +# """ + +# Do you want to customize the nbconversion of your IPython notebook? +# IPYNB_CONFIG = {} +# With the following example configuration you can use a custom jinja template +# called `toggle.tpl` which has to be located in your site/blog main folder: +# IPYNB_CONFIG = {'Exporter': {'template_file': 'toggle'}} + +# What Markdown extensions to enable? +# You will also get gist, nikola and podcast because those are +# done in the code, hope you don't mind ;-) +# Note: most Nikola-specific extensions are done via the Nikola plugin system, +# with the MarkdownExtension class and should not be added here. +# Defaults are markdown.extensions.(fenced_code|codehilite|extra) +# markdown.extensions.meta is required for Markdown metadata. +MARKDOWN_EXTENSIONS = ['markdown.extensions.fenced_code', 'markdown.extensions.codehilite', 'markdown.extensions.extra'] + +# Options to be passed to markdown extensions (See https://python-markdown.github.io/reference/) +# Default is {DEFAULT_LANG: {}} (no config at all) +# (translatable) +# MARKDOWN_EXTENSION_CONFIGS = {DEFAULT_LANG: {}} + + +# Extra options to pass to the pandoc command, empty by default. +# It can be a list of strings or a dict (keys are file extensions). +# Example for a list of strings (used for all extensions): +# PANDOC_OPTIONS = ['-F', 'pandoc-citeproc', '--bibliography=/Users/foo/references.bib'] +# Example for a dict, where the keys are the extensions in COMPILERS['pandoc']: +# COMPILERS['pandoc'] = ['.rst', '.md', '.txt'] +# PANDOC_OPTIONS = { +# '.rst': ['-t', 'rst'], +# '.md': ['-t', 'markdown'], +# '.txt': ['-t', 'markdown-raw_html'], +# } +# Pandoc does not demote headers by default. To enable this, you can use, for example +# ['--base-header-level=2'] +# PANDOC_OPTIONS = [] + +# Social buttons. This is sample code for AddThis (which was the default for a +# long time). Insert anything you want here, or even make it empty (which is +# the default right now) +# (translatable) +# SOCIAL_BUTTONS_CODE = """ +# +#
+# Share +#
  • +#
  • +#
  • +#
  • +#
+#
+# +# +# """ + +# Show link to source for the posts? +SHOW_SOURCELINK = False +# Copy the source files for your pages? +# Setting it to False implies SHOW_SOURCELINK = False +# COPY_SOURCES = True + +# Modify the number of Post per Index Page +# Defaults to 10 +# INDEX_DISPLAY_POST_COUNT = 10 + +# By default, Nikola generates RSS files for the website and for tags, and +# links to it. Set this to False to disable everything RSS-related. +GENERATE_RSS = False + +# By default, Nikola does not generates Atom files for indexes and links to +# them. Generate Atom for tags by setting TAG_PAGES_ARE_INDEXES to True. +# Atom feeds are built based on INDEX_DISPLAY_POST_COUNT and not FEED_LENGTH +# Switch between plain-text summaries and full HTML content using the +# FEED_TEASER option. FEED_LINKS_APPEND_QUERY is also respected. Atom feeds +# are generated even for old indexes and have pagination link relations +# between each other. Old Atom feeds with no changes are marked as archived. +# GENERATE_ATOM = False + +# Only include teasers in Atom and RSS feeds. Disabling include the full +# content. Defaults to True. +# FEED_TEASERS = True + +# Strip HTML from Atom and RSS feed summaries and content. Defaults to False. +# FEED_PLAIN = False + +# Number of posts in Atom and RSS feeds. +# FEED_LENGTH = 10 + +# RSS_LINK is a HTML fragment to link the RSS or Atom feeds. If set to None, +# the base.tmpl will use the feed Nikola generates. However, you may want to +# change it for a FeedBurner feed or something else. +# RSS_LINK = None + +# A search form to search this site, for the sidebar. You can use a Google +# custom search (https://www.google.com/cse/) +# Or a DuckDuckGo search: https://duckduckgo.com/search_box.html +# Default is no search form. +# (translatable) +# SEARCH_FORM = "" +# +# This search form works for any site and looks good in the "site" theme where +# it appears on the navigation bar: +# +# SEARCH_FORM = """ +# +# +# +# """ % SITE_URL +# +# If you prefer a Google search form, here's an example that should just work: +# SEARCH_FORM = """ +# +# +# +# """ % SITE_URL + +# Use content distribution networks for jQuery, twitter-bootstrap css and js, +# and html5shiv (for older versions of Internet Explorer) +# If this is True, jQuery and html5shiv are served from the Google CDN and +# Bootstrap is served from BootstrapCDN (provided by MaxCDN) +# Set this to False if you want to host your site without requiring access to +# external resources. +# USE_CDN = False + +# Check for USE_CDN compatibility. +# If you are using custom themes, have configured the CSS properly and are +# receiving warnings about incompatibility but believe they are incorrect, you +# can set this to False. +# USE_CDN_WARNING = True + +# Extra things you want in the pages HEAD tag. This will be added right +# before +# (translatable) +EXTRA_HEAD_DATA = "" +# Google Analytics or whatever else you use. Added to the bottom of +# in the default template (base.tmpl). +# (translatable) +# BODY_END = "" + +# The possibility to extract metadata from the filename by using a +# regular expression. +# To make it work you need to name parts of your regular expression. +# The following names will be used to extract metadata: +# - title +# - slug +# - date +# - tags +# - link +# - description +# +# An example re is the following: +# '.*\/(?P\d{4}-\d{2}-\d{2})-(?P.*)-(?P.*)\.rst' +# (Note the '.*\/' in the beginning -- matches source paths relative to conf.py) +# FILE_METADATA_REGEXP = None + +# Should titles fetched from file metadata be unslugified (made prettier?) +# FILE_METADATA_UNSLUGIFY_TITLES = True + +# If enabled, extract metadata from docinfo fields in reST documents. +# If your text files start with a level 1 heading, it will be treated as the +# document title and will be removed from the text. +# USE_REST_DOCINFO_METADATA = False + +# If enabled, hide docinfo fields in reST document output +# HIDE_REST_DOCINFO = False + +# Map metadata from other formats to Nikola names. +# Supported formats: yaml, toml, rest_docinfo, markdown_metadata +# METADATA_MAPPING = {} +# +# Example for Pelican compatibility: +# METADATA_MAPPING = { +# "rest_docinfo": {"summary": "description", "modified": "updated"}, +# "markdown_metadata": {"summary": "description", "modified": "updated"} +# } +# Other examples: https://getnikola.com/handbook.html#mapping-metadata-from-other-formats + +# Map metadata between types/values. (Runs after METADATA_MAPPING.) +# Supported formats: nikola, yaml, toml, rest_docinfo, markdown_metadata +# The value on the right should be a dict of callables. +# METADATA_VALUE_MAPPING = {} +# Examples: +# METADATA_VALUE_MAPPING = { +# "yaml": {"keywords": lambda value: ', '.join(value)}, # yaml: 'keywords' list -> str +# "nikola": { +# "widgets": lambda value: value.split(', '), # nikola: 'widgets' comma-separated string -> list +# "tags": str.lower # nikola: force lowercase 'tags' (input would be string) +# } +# } + +# Add any post types here that you want to be displayed without a title. +# If your theme supports it, the titles will not be shown. +# TYPES_TO_HIDE_TITLE = [] + +# Additional metadata that is added to a post when creating a new_post +# ADDITIONAL_METADATA = {} + +# Nikola supports Twitter Card summaries, but they are disabled by default. +# They make it possible for you to attach media to Tweets that link +# to your content. +# +# Uncomment and modify to following lines to match your accounts. +# Images displayed come from the `previewimage` meta tag. +# You can specify the card type by using the `card` parameter in TWITTER_CARD. +# TWITTER_CARD = { +# # 'use_twitter_cards': True, # enable Twitter Cards +# # 'card': 'summary', # Card type, you can also use 'summary_large_image', +# # see https://dev.twitter.com/cards/types +# # 'site': '@website', # twitter nick for the website +# # 'creator': '@username', # Username for the content creator / author. +# } + +# Bundle JS and CSS into single files to make site loading faster in a HTTP/1.1 +# environment but is not recommended for HTTP/2.0 when caching is used. +# Defaults to True. +# USE_BUNDLES = True + +# Plugins you don't want to use. Be careful :-) +# DISABLED_PLUGINS = ["render_galleries"] + +# Special settings to disable only parts of the indexes plugin. +# Use with care. +# DISABLE_INDEXES = False +# DISABLE_INDEXES = True +# DISABLE_MAIN_ATOM_FEED = False +# DISABLE_MAIN_RSS_FEED = False + +# Add the absolute paths to directories containing plugins to use them. +# For example, the `plugins` directory of your clone of the Nikola plugins +# repository. +# EXTRA_PLUGINS_DIRS = [] + +# Add the absolute paths to directories containing themes to use them. +# For example, the `v7` directory of your clone of the Nikola themes +# repository. +# EXTRA_THEMES_DIRS = [] + +# List of regular expressions, links matching them will always be considered +# valid by "nikola check -l" +# LINK_CHECK_WHITELIST = [] + +# If set to True, enable optional hyphenation in your posts (requires pyphen) +# Enabling hyphenation has been shown to break math support in some cases, +# use with caution. +# HYPHENATE = False + +# The <hN> tags in HTML generated by certain compilers (reST/Markdown) +# will be demoted by that much (1 → h1 will become h2 and so on) +# This was a hidden feature of the Markdown and reST compilers in the +# past. Useful especially if your post titles are in <h1> tags too, for +# example. +# (defaults to 1.) +# DEMOTE_HEADERS = 1 + +# If you don’t like slugified file names ([a-z0-9] and a literal dash), +# and would prefer to use all the characters your file system allows. +# USE WITH CARE! This is also not guaranteed to be perfect, and may +# sometimes crash Nikola, your web server, or eat your cat. +# USE_SLUGIFY = True + +# If set to True, the tags 'draft', 'mathjax' and 'private' have special +# meaning. If set to False, these tags are handled like regular tags. +USE_TAG_METADATA = False + +# If set to True, a warning is issued if one of the 'draft', 'mathjax' +# and 'private' tags are found in a post. Useful for checking that +# migration was successful. +WARN_ABOUT_TAG_METADATA = False + +# Templates will use those filters, along with the defaults. +# Consult your engine's documentation on filters if you need help defining +# those. +# TEMPLATE_FILTERS = {} + +# If you want to, you can augment or change Nikola's configuration +# of the underlying template engine used +# in any way you please, by defining this function: +# def TEMPLATE_ENGINE_FACTORY(**args): +# pass +# This should return either a jinja2.Environment or a mako.lookup.TemplateLookup +# object that have been configured with the args received plus any additional configuration wanted. +# +# E.g., to configure Jinja2 to bark on non-existing values instead of silently omitting: +# def TEMPLATE_ENGINE_FACTORY(**args) -> jinja2.Environment: +# augmented_args = dict(args) +# augmented_args['undefined'] = jinja2.DebugUndefined +# return jinja2.Environment(**augmented_args) + +# Put in global_context things you want available on all your templates. +# It can be anything, data, functions, modules, etc. +GLOBAL_CONTEXT = { + 'EMAIL_URL': 'mailto:' + BLOG_EMAIL, + 'XMPP_URL': XMPP_URL, + 'MASTODON_URL': MASTODON_URL, + 'PEERTUBE_URL': PEERTUBE_URL, + 'GIT_URL': GIT_URL, + 'BANNER_URL': '/images/aprendiendo3.jpg', +} + +# Add functions here and they will be called with template +# GLOBAL_CONTEXT as parameter when the template is about to be +# rendered +GLOBAL_CONTEXT_FILLER = [] diff --git a/conf.py~ b/conf.py~ new file mode 100644 index 0000000..e84d973 --- /dev/null +++ b/conf.py~ @@ -0,0 +1,1466 @@ +# -*- coding: utf-8 -*- + +import time + +# !! This is the configuration of Nikola. !! # +# !! You should edit it to your liking. !! # + + +# ! Some settings can be different in different languages. +# ! A comment stating (translatable) is used to denote those. +# ! There are two ways to specify a translatable setting: +# ! (a) BLOG_TITLE = "My Blog" +# ! (b) BLOG_TITLE = {"en": "My Blog", "es": "Mi Blog"} +# ! Option (a) is used when you don't want that setting translated. +# ! Option (b) is used for settings that are different in different languages. + + +# Data about this site +BLOG_AUTHOR = "Educatic" # (translatable) +BLOG_TITLE = "EDUCATIC" # (translatable) +# This is the main URL for your site. It will be used +# in a prominent link. Don't forget the protocol (http/https)! +SITE_URL = "https://educatic.txs.es/" +# This is the URL where Nikola's output will be deployed. +# If not set, defaults to SITE_URL +# BASE_URL = "https://educatic.txs.es/" +BLOG_EMAIL = "educatic@txs.es" +BLOG_DESCRIPTION = "Tecnologías para la Educación y Transparencia Tecnológica" # (translatable) + +# Nikola is multilingual! +# +# Currently supported languages are: +# +# en English +# af Afrikaans +# ar Arabic +# az Azerbaijani +# bg Bulgarian +# bs Bosnian +# ca Catalan +# cs Czech [ALTERNATIVELY cz] +# da Danish +# de German +# el Greek [NOT gr] +# eo Esperanto +# es Spanish +# et Estonian +# eu Basque +# fa Persian +# fi Finnish +# fr French +# fur Friulian +# gl Galician +# he Hebrew +# hi Hindi +# hr Croatian +# hu Hungarian +# ia Interlingua +# id Indonesian +# it Italian +# ja Japanese [NOT jp] +# ko Korean +# lt Lithuanian +# mi Maori +# ml Malayalam +# mr Marathi +# nb Norwegian (Bokmål) +# nl Dutch +# oc Occitan +# pa Punjabi +# pl Polish +# pt Portuguese +# pt_br Portuguese (Brazil) +# ru Russian +# sk Slovak +# sl Slovene +# sq Albanian +# sr Serbian (Cyrillic) +# sr_latin Serbian (Latin) +# sv Swedish +# te Telugu +# th Thai +# tr Turkish [NOT tr_TR] +# uk Ukrainian +# ur Urdu +# vi Vietnamese +# zh_cn Chinese (Simplified) +# zh_tw Chinese (Traditional) +# +# If you want to use Nikola with a non-supported language you have to provide +# a module containing the necessary translations +# (cf. the modules at nikola/data/themes/base/messages/). +# If a specific post is not translated to a language, then the version +# in the default language will be shown instead. + +# What is the default language? +DEFAULT_LANG = "es" + +# What other languages do you have? +# The format is {"translationcode" : "path/to/translation" } +# the path will be used as a prefix for the generated pages location +TRANSLATIONS = { + DEFAULT_LANG: "", + # Example for another language: + # "es": "./es", +} + +# What will translated input files be named like? + +# If you have a page something.rst, then something.pl.rst will be considered +# its Polish translation. +# (in the above example: path == "something", ext == "rst", lang == "pl") +# this pattern is also used for metadata: +# something.meta -> something.pl.meta + +TRANSLATIONS_PATTERN = '{path}.{lang}.{ext}' + +# Links for the sidebar / navigation bar. (translatable) +# This is a dict. The keys are languages, and values are tuples. +# +# For regular links: +# ('https://getnikola.com/', 'Nikola Homepage') +# +# For submenus: +# ( +# ( +# ('https://apple.com/', 'Apple'), +# ('https://orange.com/', 'Orange'), +# ), +# 'Fruits' +# ) +# +# WARNING: Support for submenus is theme-dependent. +# Only one level of submenus is supported. +# WARNING: Some themes, including the default Bootstrap 4 theme, +# may present issues if the menu is too large. +# (in Bootstrap, the navbar can grow too large and cover contents.) +# WARNING: If you link to directories, make sure to follow +# ``STRIP_INDEXES``. If it’s set to ``True``, end your links +# with a ``/``, otherwise end them with ``/index.html`` — or +# else they won’t be highlighted when active. + +NAVIGATION_LINKS = { + DEFAULT_LANG: ( + # ('/archive.html', "Archivo"), + ('/events.html', "Eventos"), + ('/services.html', "Servicios"), + ('/project.html', "Proyecto"), + ('/foundation.html', "Fundación"), + ( + ( + ('/vision.html', "Visión"), + ('/team.html', "Equipo"), + ('/colaborations.html', "Colaboraciones"), + ('/join.html', "Asóciate"), + ), + "Acerca de ...", + ), + # ('/about.html', "Acerca de ..."), + # ('/categories/', "Etiquetas"), + # ('/rss.xml', "RSS"), + ), +} + +# Alternative navigation links. Works the same way NAVIGATION_LINKS does, +# although themes may not always support them. (translatable) +# (Bootstrap 4: right-side of navbar, Bootblog 4: right side of title) +NAVIGATION_ALT_LINKS = { + DEFAULT_LANG: () +} + +# Name of the theme to use. +# THEME = "bootblog4" +THEME = "bootstrap4" + +# A theme color. In default themes, it might be displayed by some browsers as +# the browser UI color (eg. Chrome on Android). Other themes might also use it +# as an accent color (the default ones don’t). Must be a HEX value. +THEME_COLOR = '#5670d4' + +# Theme configuration. Fully theme-dependent. (translatable) +# Samples for bootblog4 (enabled) and bootstrap4 (commented) follow. +# bootblog4 supports: featured_large featured_small featured_on_mobile +# featured_large_image_on_mobile featured_strip_html sidebar +# bootstrap4 supports: navbar_light (defaults to False) +# navbar_custom_bg (defaults to '') + +# Config for bootblog4: +# THEME_CONFIG = { +# DEFAULT_LANG: { +# # Show the latest featured post in a large box, with the previewimage as its background. +# 'featured_large': False, +# # Show the first (remaining) two featured posts in small boxes. +# 'featured_small': False, +# # Show featured posts on mobile. +# 'featured_on_mobile': True, +# # Show image in `featured_large` on mobile. +# # `featured_small` displays them only on desktop. +# 'featured_large_image_on_mobile': True, +# # Strip HTML from featured post text. +# 'featured_strip_html': False, +# # Contents of the sidebar, If empty, the sidebar is not displayed. +# 'sidebar': '' +# } +# } +# Config for bootstrap4: +THEME_CONFIG = { + DEFAULT_LANG: { + # Use a light navbar with dark text. Defaults to False. + 'navbar_light': False, + # Use a custom navbar color. If unset, 'navbar_light' sets text + + # background color. If set, navbar_light controls only background + # color. Supported values: bg-dark, bg-light, bg-primary, bg-secondary, + # bg-success, bg-danger, bg-warning, bg-info, bg-white, bg-transparent. + 'navbar_custom_bg': '', + } +} + +# POSTS and PAGES contains (wildcard, destination, template) tuples. +# (translatable) +# +# The wildcard is used to generate a list of source files +# (whatever/thing.rst, for example). +# +# That fragment could have an associated metadata file (whatever/thing.meta), +# and optionally translated files (example for Spanish, with code "es"): +# whatever/thing.es.rst and whatever/thing.es.meta +# +# This assumes you use the default TRANSLATIONS_PATTERN. +# +# From those files, a set of HTML fragment files will be generated: +# cache/whatever/thing.html (and maybe cache/whatever/thing.html.es) +# +# These files are combined with the template to produce rendered +# pages, which will be placed at +# output/TRANSLATIONS[lang]/destination/pagename.html +# +# where "pagename" is the "slug" specified in the metadata file. +# The page might also be placed in /destination/pagename/index.html +# if PRETTY_URLS are enabled. +# +# The difference between POSTS and PAGES is that POSTS are added +# to feeds, indexes, tag lists and archives and are considered part +# of a blog, while PAGES are just independent HTML pages. +# +# Finally, note that destination can be translated, i.e. you can +# specify a different translation folder per language. Example: +# PAGES = ( +# ("pages/*.rst", {"en": "pages", "de": "seiten"}, "page.tmpl"), +# ("pages/*.md", {"en": "pages", "de": "seiten"}, "page.tmpl"), +# ) + +# POSTS = ( +# ("posts/*.rst", "posts", "post.tmpl"), +# ("posts/*.md", "posts", "post.tmpl"), +# ("posts/*.txt", "posts", "post.tmpl"), +# ("posts/*.html", "posts", "post.tmpl"), +#) +POSTS = () +PAGES = ( + ("pages/*.rst", "", "page.tmpl"), + ("pages/*.md", "", "page.tmpl"), + ("pages/*.txt", "", "page.tmpl"), + ("pages/*.html", "", "page.tmpl"), +) + + +# Below this point, everything is optional + +# Post's dates are considered in UTC by default, if you want to use +# another time zone, please set TIMEZONE to match. Check the available +# list from Wikipedia: +# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# (e.g. 'Europe/Zurich') +# Also, if you want to use a different time zone in some of your posts, +# you can use the ISO 8601/RFC 3339 format (ex. 2012-03-30T23:00:00+02:00) +TIMEZONE = "Atlantic/Canary" + +# If you want to use ISO 8601 (also valid RFC 3339) throughout Nikola +# (especially in new_post), set this to True. +# Note that this does not affect DATE_FORMAT. +# FORCE_ISO8601 = False + +# Date format used to display post dates. (translatable) +# Used by babel.dates, CLDR style.. +# https://cldr.unicode.org/translation/date-time/date-time-symbols +# https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table +# You can also use 'full', 'long', 'medium', or 'short' +# DATE_FORMAT = 'yyyy-MM-dd HH:mm' + +# Date format used to display post dates, if local dates are used. (translatable) +# Used by Luxon: https://moment.github.io/luxon/docs/manual/formatting +# Example for presets: {'preset': True, 'format': 'DATE_FULL'} +# LUXON_DATE_FORMAT = { +# DEFAULT_LANG: {'preset': False, 'format': 'yyyy-MM-dd HH:mm'}, +# } + +# Date fanciness. +# +# 0 = using DATE_FORMAT and TIMEZONE (without JS) +# 1 = using LUXON_DATE_FORMAT and local user time (JS, using Luxon) +# 2 = using a string like “2 days ago” (JS, using Luxon) +# +# Your theme must support it, Bootstrap already does. +# DATE_FANCINESS = 0 + +# Customize the locale/region used for a language. +# For example, to use British instead of US English: LOCALES = {'en': 'en_GB'} +# LOCALES = {} + +# One or more folders containing files to be copied as-is into the output. +# The format is a dictionary of {source: relative destination}. +# Default is: +# FILES_FOLDERS = {'files': ''} +# Which means copy 'files' into 'output' + +# One or more folders containing code listings to be processed and published on +# the site. The format is a dictionary of {source: relative destination}. +# Default is: +# LISTINGS_FOLDERS = {'listings': 'listings'} +# Which means process listings from 'listings' into 'output/listings' + +# A mapping of languages to file-extensions that represent that language. +# Feel free to add or delete extensions to any list, but don't add any new +# compilers unless you write the interface for it yourself. +# +# The default compiler for `new_post` is the first entry in the POSTS tuple. +# +# 'rest' is reStructuredText +# 'markdown' is Markdown +# 'html' assumes the file is HTML and just copies it +COMPILERS = { + "rest": ['.rst', '.txt'], + "markdown": ['.md', '.mdown', '.markdown'], + "textile": ['.textile'], + "txt2tags": ['.t2t'], + "bbcode": ['.bb'], + "wiki": ['.wiki'], + "ipynb": ['.ipynb'], + "html": ['.html', '.htm'], + # PHP files are rendered the usual way (i.e. with the full templates). + # The resulting files have .php extensions, making it possible to run + # them without reconfiguring your server to recognize them. + "php": ['.php'], + # Pandoc detects the input from the source filename + # but is disabled by default as it would conflict + # with many of the others. + # "pandoc": ['.rst', '.md', '.txt'], +} + +# Enable reST directives that insert the contents of external files such +# as "include" and "raw." This maps directly to the docutils file_insertion_enabled +# config. See: https://docutils.sourceforge.io/docs/user/config.html#file-insertion-enabled +# REST_FILE_INSERTION_ENABLED = True + +# Create by default posts in one file format? +# Set to False for two-file posts, with separate metadata. +# ONE_FILE_POSTS = True + +# Preferred metadata format for new posts +# "Nikola": reST comments, wrapped in a HTML comment if needed (default) +# "YAML": YAML wrapped in "---" +# "TOML": TOML wrapped in "+++" +# "Pelican": Native markdown metadata or reST docinfo fields. Nikola style for other formats. +# METADATA_FORMAT = "Nikola" + +# Use date-based path when creating posts? +# Can be enabled on a per-post basis with `nikola new_post -d`. +# The setting is ignored when creating pages. +# NEW_POST_DATE_PATH = False + +# What format to use when creating posts with date paths? +# Default is '%Y/%m/%d', other possibilities include '%Y' or '%Y/%m'. +# NEW_POST_DATE_PATH_FORMAT = '%Y/%m/%d' + +# If this is set to True, the DEFAULT_LANG version will be displayed for +# untranslated posts. +# If this is set to False, then posts that are not translated to a language +# LANG will not be visible at all in the pages in that language. +# SHOW_UNTRANSLATED_POSTS = True + +# Nikola supports logo display. If you have one, you can put the URL here. +# Final output is <img src="LOGO_URL" id="logo" alt="BLOG_TITLE">. +# The URL may be relative to the site root. +# LOGO_URL = '' + +# When linking posts to social media, Nikola provides Open Graph metadata +# which is used to show a nice preview. This includes an image preview +# taken from the post's previewimage metadata field. +# This option lets you use an image to be used if the post doesn't have it. +# The default is None, valid values are URLs or output paths like +# "/images/foo.jpg" +# DEFAULT_PREVIEW_IMAGE = None + +# If you want to hide the title of your website (for example, if your logo +# already contains the text), set this to False. +# Note: if your logo is a SVG image, and you set SHOW_BLOG_TITLE = False, +# you should explicitly set a height for #logo in CSS. +# SHOW_BLOG_TITLE = True + +# Paths for different autogenerated bits. These are combined with the +# translation paths. + +# Final locations are: +# output / TRANSLATION[lang] / TAG_PATH / index.html (list of tags) +# output / TRANSLATION[lang] / TAG_PATH / tag.html (list of posts for a tag) +# output / TRANSLATION[lang] / TAG_PATH / tag RSS_EXTENSION (RSS feed for a tag) +# (translatable) +# TAG_PATH = "categories" + +# By default, the list of tags is stored in +# output / TRANSLATION[lang] / TAG_PATH / index.html +# (see explanation for TAG_PATH). This location can be changed to +# output / TRANSLATION[lang] / TAGS_INDEX_PATH +# with an arbitrary relative path TAGS_INDEX_PATH. +# (translatable) +# TAGS_INDEX_PATH = "tags.html" + +# If TAG_PAGES_ARE_INDEXES is set to True, each tag's page will contain +# the posts themselves. If set to False, it will be just a list of links. +# TAG_PAGES_ARE_INDEXES = False + +# Set descriptions for tag pages to make them more interesting. The +# default is no description. The value is used in the meta description +# and displayed underneath the tag list or index page’s title. +# (translatable) +# TAG_DESCRIPTIONS = { +# DEFAULT_LANG: { +# "blogging": "Meta-blog posts about blogging.", +# "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects." +# }, +# } + +# Set special titles for tag pages. The default is "Posts about TAG". +# (translatable) +# TAG_TITLES = { +# DEFAULT_LANG: { +# "blogging": "Meta-posts about blogging", +# "open source": "Posts about open source software" +# }, +# } + +# If you do not want to display a tag publicly, you can mark it as hidden. +# The tag will not be displayed on the tag list page and posts. +# Tag pages will still be generated. +HIDDEN_TAGS = ['mathjax'] + +# Only include tags on the tag list/overview page if there are at least +# TAGLIST_MINIMUM_POSTS number of posts or more with every tag. Every tag +# page is still generated, linked from posts, and included in the sitemap. +# However, more obscure tags can be hidden from the tag index page. +# TAGLIST_MINIMUM_POSTS = 1 + +# A list of dictionaries specifying tags which translate to each other. +# Format: a list of dicts {language: translation, language2: translation2, …} +# For example: +# [ +# {'en': 'private', 'de': 'Privat'}, +# {'en': 'work', 'fr': 'travail', 'de': 'Arbeit'}, +# ] +# TAG_TRANSLATIONS = [] + +# If set to True, a tag in a language will be treated as a translation +# of the literally same tag in all other languages. Enable this if you +# do not translate tags, for example. +# TAG_TRANSLATIONS_ADD_DEFAULTS = True + +# Final locations are: +# output / TRANSLATION[lang] / CATEGORY_PATH / index.html (list of categories) +# output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category.html (list of posts for a category) +# output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category RSS_EXTENSION (RSS feed for a category) +# (translatable) +# CATEGORY_PATH = "categories" +# CATEGORY_PREFIX = "cat_" + +# By default, the list of categories is stored in +# output / TRANSLATION[lang] / CATEGORY_PATH / index.html +# (see explanation for CATEGORY_PATH). This location can be changed to +# output / TRANSLATION[lang] / CATEGORIES_INDEX_PATH +# with an arbitrary relative path CATEGORIES_INDEX_PATH. +# (translatable) +# CATEGORIES_INDEX_PATH = "categories.html" + +# If CATEGORY_ALLOW_HIERARCHIES is set to True, categories can be organized in +# hierarchies. For a post, the whole path in the hierarchy must be specified, +# using a forward slash ('/') to separate paths. Use a backslash ('\') to escape +# a forward slash or a backslash (i.e. '\//\\' is a path specifying the +# subcategory called '\' of the top-level category called '/'). +CATEGORY_ALLOW_HIERARCHIES = False +# If CATEGORY_OUTPUT_FLAT_HIERARCHY is set to True, the output written to output +# contains only the name of the leaf category and not the whole path. +CATEGORY_OUTPUT_FLAT_HIERARCHY = False + +# If CATEGORY_PAGES_ARE_INDEXES is set to True, each category's page will contain +# the posts themselves. If set to False, it will be just a list of links. +# CATEGORY_PAGES_ARE_INDEXES = False + +# Set descriptions for category pages to make them more interesting. The +# default is no description. The value is used in the meta description +# and displayed underneath the category list or index page’s title. +# (translatable) +# CATEGORY_DESCRIPTIONS = { +# DEFAULT_LANG: { +# "blogging": "Meta-blog posts about blogging.", +# "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects." +# }, +# } + +# Set special titles for category pages. The default is "Posts about CATEGORY". +# (translatable) +# CATEGORY_TITLES = { +# DEFAULT_LANG: { +# "blogging": "Meta-posts about blogging", +# "open source": "Posts about open source software" +# }, +# } + +# If you do not want to display a category publicly, you can mark it as hidden. +# The category will not be displayed on the category list page. +# Category pages will still be generated. +HIDDEN_CATEGORIES = [] + +# A list of dictionaries specifying categories which translate to each other. +# Format: a list of dicts {language: translation, language2: translation2, …} +# See TAG_TRANSLATIONS example above. +# CATEGORY_TRANSLATIONS = [] + +# If set to True, a category in a language will be treated as a translation +# of the literally same category in all other languages. Enable this if you +# do not translate categories, for example. +# CATEGORY_TRANSLATIONS_ADD_DEFAULTS = True + +# If no category is specified in a post, the destination path of the post +# can be used in its place. This replaces the sections feature. Using +# category hierarchies is recommended. +# CATEGORY_DESTPATH_AS_DEFAULT = False + +# If True, the prefix will be trimmed from the category name, eg. if the +# POSTS destination is "foo/bar", and the path is "foo/bar/baz/quux", +# the category will be "baz/quux" (or "baz" if only the first directory is considered). +# Note that prefixes coming from translations are always ignored. +# CATEGORY_DESTPATH_TRIM_PREFIX = False + +# If True, only the first directory of a path will be used. +# CATEGORY_DESTPATH_FIRST_DIRECTORY_ONLY = True + +# Map paths to prettier category names. (translatable) +# CATEGORY_DESTPATH_NAMES = { +# DEFAULT_LANG: { +# 'webdev': 'Web Development', +# 'webdev/django': 'Web Development/Django', +# 'random': 'Odds and Ends', +# }, +# } + +# By default, category indexes will appear in CATEGORY_PATH and use +# CATEGORY_PREFIX. If this is enabled, those settings will be ignored (except +# for the index) and instead, they will follow destination paths (eg. category +# 'foo' might appear in 'posts/foo'). If the category does not come from a +# destpath, first entry in POSTS followed b[ ] y the category name will be used. +# For this setting, category hierarchies are required and cannot be flattened. +# CATEGORY_PAGES_FOLLOW_DESTPATH = False + +# If ENABLE_AUTHOR_PAGES is set to True and there is more than one +# author, author pages are generated. +# ENABLE_AUTHOR_PAGES = True + +# Path to author pages. Final locations are: +# output / TRANSLATION[lang] / AUTHOR_PATH / index.html (list of authors) +# output / TRANSLATION[lang] / AUTHOR_PATH / author.html (list of posts by an author) +# output / TRANSLATION[lang] / AUTHOR_PATH / author RSS_EXTENSION (RSS feed for an author) +# (translatable) +# AUTHOR_PATH = "authors" + +# If AUTHOR_PAGES_ARE_INDEXES is set to True, each author's page will contain +# the posts themselves. If set to False, it will be just a list of links. +# AUTHOR_PAGES_ARE_INDEXES = False + +# Set descriptions for author pages to make them more interesting. The +# default is no description. The value is used in the meta description +# and displayed underneath the author list or index page’s title. +# AUTHOR_PAGES_DESCRIPTIONS = { +# DEFAULT_LANG: { +# "Juanjo Conti": "Python coder and writer.", +# "Roberto Alsina": "Nikola father." +# }, +# } + + +# If you do not want to display an author publicly, you can mark it as hidden. +# The author will not be displayed on the author list page. +# Author pages and links to them will still be generated. +HIDDEN_AUTHORS = ['Guest'] + +# Allow multiple, comma-separated authors for a post? (Requires theme support, present in built-in themes) +# MULTIPLE_AUTHORS_PER_POST = False + +# Final location for the main blog page and sibling paginated pages is +# output / TRANSLATION[lang] / INDEX_PATH / index-*.html +# (translatable) +# INDEX_PATH = "" + +# Optional HTML that displayed on “main” blog index.html files. +# May be used for a greeting. (translatable) +FRONT_INDEX_HEADER = { + DEFAULT_LANG: '' +} + +# Create per-month archives instead of per-year +# CREATE_MONTHLY_ARCHIVE = False +# Create one large archive instead of per-year +# CREATE_SINGLE_ARCHIVE = False +# Create year, month, and day archives each with a (long) list of posts +# (overrides both CREATE_MONTHLY_ARCHIVE and CREATE_SINGLE_ARCHIVE) +# CREATE_FULL_ARCHIVES = False +# If monthly archives or full archives are created, adds also one archive per day +# CREATE_DAILY_ARCHIVE = False +# Create previous, up, next navigation links for archives +# CREATE_ARCHIVE_NAVIGATION = False +# Final locations for the archives are: +# output / TRANSLATION[lang] / ARCHIVE_PATH / ARCHIVE_FILENAME +# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / index.html +# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / index.html +# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / DAY / index.html +# (translatable) +# ARCHIVE_PATH = "" +# ARCHIVE_FILENAME = "archive.html" + +# If ARCHIVES_ARE_INDEXES is set to True, each archive page which contains a list +# of posts will contain the posts themselves. If set to False, it will be just a +# list of links. +# ARCHIVES_ARE_INDEXES = False + +# URLs to other posts/pages can take 3 forms: +# rel_path: a relative URL to the current page/post (default) +# full_path: a URL with the full path from the root +# absolute: a complete URL (that includes the SITE_URL) +# URL_TYPE = 'rel_path' + +# Extension for RSS feed files +# RSS_EXTENSION = ".xml" + +# RSS filename base (without extension); used for indexes and galleries. +# (translatable) +# RSS_FILENAME_BASE = "rss" + +# Final location for the blog main RSS feed is: +# output / TRANSLATION[lang] / RSS_PATH / RSS_FILENAME_BASE RSS_EXTENSION +# (translatable) +# RSS_PATH = "" + +# Final location for the blog main Atom feed is: +# output / TRANSLATION[lang] / ATOM_PATH / ATOM_FILENAME_BASE ATOM_EXTENSION +# (translatable) +# ATOM_PATH = "" + +# Atom filename base (without extension); used for indexes. +# (translatable) +ATOM_FILENAME_BASE = "feed" + +# Extension for Atom feed files +# ATOM_EXTENSION = ".atom" + +# Slug the Tag URL. Easier for users to type, special characters are +# often removed or replaced as well. +# SLUG_TAG_PATH = True + +# Slug the Author URL. Easier for users to type, special characters are +# often removed or replaced as well. +# SLUG_AUTHOR_PATH = True + +# A list of redirection tuples, [("foo/from.html", "/bar/to.html")]. +# +# A HTML file will be created in output/foo/from.html that redirects +# to the "/bar/to.html" URL. notice that the "from" side MUST be a +# relative URL. +# +# If you don't need any of these, just set to [] +REDIRECTIONS = [] + +# Presets of commands to execute to deploy. Can be anything, for +# example, you may use rsync: +# "rsync -rav --delete --delete-after output/ joe@my.site:/srv/www/site" +# And then do a backup, or run `nikola ping` from the `ping` +# plugin (`nikola plugin -i ping`). Or run `nikola check -l`. +# You may also want to use github_deploy (see below). +# You can define multiple presets and specify them as arguments +# to `nikola deploy`. If no arguments are specified, a preset +# named `default` will be executed. You can use as many presets +# in a `nikola deploy` command as you like. +# DEPLOY_COMMANDS = { +# 'default': [ +# "rsync -rav --delete --delete-after output/ joe@my.site:/srv/www/site", +# ] +# } + +# github_deploy configuration +# For more details, read the manual: +# https://getnikola.com/handbook.html#deploying-to-github +# You will need to configure the deployment branch on GitHub. +GITHUB_SOURCE_BRANCH = 'src' +GITHUB_DEPLOY_BRANCH = 'master' + +# The name of the remote where you wish to push to, using github_deploy. +GITHUB_REMOTE_NAME = 'origin' + +# Whether or not github_deploy should commit to the source branch automatically +# before deploying. +GITHUB_COMMIT_SOURCE = True + +# Where the output site should be located +# If you don't use an absolute path, it will be considered as relative +# to the location of conf.py +# OUTPUT_FOLDER = 'output' + +# where the "cache" of partial generated content should be located +# default: 'cache' +# CACHE_FOLDER = 'cache' + +# Filters to apply to the output. +# A directory where the keys are either: a file extensions, or +# a tuple of file extensions. +# +# And the value is a list of commands to be applied in order. +# +# Each command must be either: +# +# A string containing a '%s' which will +# be replaced with a filename. The command *must* produce output +# in place. +# +# Or: +# +# A python callable, which will be called with the filename as +# argument. +# +# By default, only .php files uses filters to inject PHP into +# Nikola’s templates. All other filters must be enabled through FILTERS. +# +# Many filters are shipped with Nikola. A list is available in the manual: +# <https://getnikola.com/handbook.html#post-processing-filters> +# +# from nikola import filters +# FILTERS = { +# ".html": [filters.typogrify], +# ".js": [filters.closure_compiler], +# ".jpg": ["jpegoptim --strip-all -m75 -v %s"], +# } + +# Executable for the "yui_compressor" filter (defaults to 'yui-compressor'). +# YUI_COMPRESSOR_EXECUTABLE = 'yui-compressor' + +# Executable for the "closure_compiler" filter (defaults to 'closure-compiler'). +# CLOSURE_COMPILER_EXECUTABLE = 'closure-compiler' + +# Executable for the "optipng" filter (defaults to 'optipng'). +# OPTIPNG_EXECUTABLE = 'optipng' + +# Executable for the "jpegoptim" filter (defaults to 'jpegoptim'). +# JPEGOPTIM_EXECUTABLE = 'jpegoptim' + +# Executable for the "html_tidy_withconfig", "html_tidy_nowrap", +# "html_tidy_wrap", "html_tidy_wrap_attr" and "html_tidy_mini" filters +# (defaults to 'tidy'). +# HTML_TIDY_EXECUTABLE = 'tidy' + +# List of XPath expressions which should be used for finding headers +# ({hx} is replaced by headers h1 through h6). +# You must change this if you use a custom theme that does not use +# "e-content entry-content" as a class for post and page contents. +# HEADER_PERMALINKS_XPATH_LIST = ['*//div[@class="e-content entry-content"]//{hx}'] +# Include *every* header (not recommended): +# HEADER_PERMALINKS_XPATH_LIST = ['*//{hx}'] + +# File blacklist for header permalinks. Contains output path +# (eg. 'output/index.html') +# HEADER_PERMALINKS_FILE_BLACKLIST = [] + +# Expert setting! Create a gzipped copy of each generated file. Cheap server- +# side optimization for very high traffic sites or low memory servers. +# GZIP_FILES = False +# File extensions that will be compressed +# GZIP_EXTENSIONS = ('.txt', '.htm', '.html', '.css', '.js', '.json', '.atom', '.xml') +# Use an external gzip command? None means no. +# Example: GZIP_COMMAND = "pigz -k {filename}" +# GZIP_COMMAND = None +# Make sure the server does not return a "Accept-Ranges: bytes" header for +# files compressed by this option! OR make sure that a ranged request does not +# return partial content of another representation for these resources. Do not +# use this feature if you do not understand what this means. + +# ############################################################################# +# Image Gallery Options +# ############################################################################# + +# One or more folders containing galleries. The format is a dictionary of +# {"source": "relative_destination"}, where galleries are looked for in +# "source/" and the results will be located in +# "OUTPUT_PATH/relative_destination/gallery_name" +# Default is: +# GALLERY_FOLDERS = {"galleries": "galleries"} +# More gallery options: +# THUMBNAIL_SIZE = 180 +# MAX_IMAGE_SIZE = 1280 +# USE_FILENAME_AS_TITLE = True +# EXTRA_IMAGE_EXTENSIONS = [] + +# Use a thumbnail (defined by ".. previewimage:" in the gallery's index) in +# list of galleries for each gallery +GALLERIES_USE_THUMBNAIL = False + +# Image to use as thumbnail for those galleries that don't have one +# None: show a grey square +# '/url/to/file': show the image in that url +GALLERIES_DEFAULT_THUMBNAIL = None + +# If set to False, it will sort by filename instead. Defaults to True +# GALLERY_SORT_BY_DATE = True + +# If set to True, EXIF data will be copied when an image is thumbnailed or +# resized. (See also EXIF_WHITELIST) +# PRESERVE_EXIF_DATA = False + +# If you have enabled PRESERVE_EXIF_DATA, this option lets you choose EXIF +# fields you want to keep in images. (See also PRESERVE_EXIF_DATA) +# +# For a full list of field names, please see here: +# http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf +# +# This is a dictionary of lists. Each key in the dictionary is the +# name of a IDF, and each list item is a field you want to preserve. +# If you have a IDF with only a '*' item, *EVERY* item in it will be +# preserved. If you don't want to preserve anything in a IDF, remove it +# from the setting. By default, no EXIF information is kept. +# Setting the whitelist to anything other than {} implies +# PRESERVE_EXIF_DATA is set to True +# To preserve ALL EXIF data, set EXIF_WHITELIST to {"*": "*"} + +# EXIF_WHITELIST = {} + +# Some examples of EXIF_WHITELIST settings: + +# Basic image information: +# EXIF_WHITELIST['0th'] = [ +# "Orientation", +# "XResolution", +# "YResolution", +# ] + +# If you want to keep GPS data in the images: +# EXIF_WHITELIST['GPS'] = ["*"] + +# Embedded thumbnail information: +# EXIF_WHITELIST['1st'] = ["*"] + +# If set to True, any ICC profile will be copied when an image is thumbnailed or +# resized. +# PRESERVE_ICC_PROFILES = False + +# Folders containing images to be used in normal posts or pages. +# IMAGE_FOLDERS is a dictionary of the form {"source": "destination"}, +# where "source" is the folder containing the images to be published, and +# "destination" is the folder under OUTPUT_PATH containing the images copied +# to the site. Thumbnail images will be created there as well. + +# To reference the images in your posts, include a leading slash in the path. +# For example, if IMAGE_FOLDERS = {'images': 'images'}, write +# +# .. image:: /images/tesla.jpg +# +# See the Nikola Handbook for details (in the “Embedding Images” and +# “Thumbnails” sections) + +# Images will be scaled down according to IMAGE_THUMBNAIL_SIZE and MAX_IMAGE_SIZE +# options, but will have to be referenced manually to be visible on the site +# (the thumbnail has ``.thumbnail`` added before the file extension by default, +# but a different naming template can be configured with IMAGE_THUMBNAIL_FORMAT). +# Panoramas (aspect ratio over 3:1) get 4x larger thumbnails due to scaling issues. + +IMAGE_FOLDERS = {'images': 'images'} +# IMAGE_THUMBNAIL_SIZE = 400 +# IMAGE_THUMBNAIL_FORMAT = '{name}.thumbnail{ext}' + +# ############################################################################# +# HTML fragments and diverse things that are used by the templates +# ############################################################################# + +# Data about post-per-page indexes. +# INDEXES_PAGES defaults to ' old posts, page %d' or ' page %d' (translated), +# depending on the value of INDEXES_PAGES_MAIN. +# +# (translatable) If the following is empty, defaults to BLOG_TITLE: +# INDEXES_TITLE = "" +# +# (translatable) If the following is empty, defaults to ' [old posts,] page %d' (see above): +# INDEXES_PAGES = "" +# +# If the following is True, INDEXES_PAGES is also displayed on the main (the +# newest) index page (index.html): +# INDEXES_PAGES_MAIN = False +# +# If the following is True, index-1.html has the oldest posts, index-2.html the +# second-oldest posts, etc., and index.html has the newest posts. This ensures +# that all posts on index-x.html will forever stay on that page, now matter how +# many new posts are added. +# If False, index-1.html has the second-newest posts, index-2.html the third-newest, +# and index-n.html the oldest posts. When this is active, old posts can be moved +# to other index pages when new posts are added. +# INDEXES_STATIC = True +# +# (translatable) If PRETTY_URLS is set to True, this setting will be used to create +# prettier URLs for index pages, such as page/2/index.html instead of index-2.html. +# Valid values for this settings are: +# * False, +# * a list or tuple, specifying the path to be generated, +# * a dictionary mapping languages to lists or tuples. +# Every list or tuple must consist of strings which are used to combine the path; +# for example: +# ['page', '{number}', '{index_file}'] +# The replacements +# {number} --> (logical) page number; +# {old_number} --> the page number inserted into index-n.html before (zero for +# the main page); +# {index_file} --> value of option INDEX_FILE +# are made. +# Note that in case INDEXES_PAGES_MAIN is set to True, a redirection will be created +# for the full URL with the page number of the main page to the normal (shorter) main +# page URL. +# INDEXES_PRETTY_PAGE_URL = False +# +# If the following is true, a page range navigation will be inserted to indices. +# Please note that this will undo the effect of INDEXES_STATIC, as all index pages +# must be recreated whenever the number of pages changes. +# SHOW_INDEX_PAGE_NAVIGATION = False + +# If the following is True, a meta name="generator" tag is added to pages. The +# generator tag is used to specify the software used to generate the page +# (it promotes Nikola). +# META_GENERATOR_TAG = True + +# Color scheme to be used for code blocks. If your theme provides +# "assets/css/code.css" this is ignored. Set to None to disable. +# Can be any of: +# algol, algol_nu, autumn, borland, bw, colorful, default, emacs, friendly, +# fruity, igor, lovelace, manni, monokai, murphy, native, paraiso-dark, +# paraiso-light, pastie, perldoc, rrt, tango, trac, vim, vs, xcode +# This list MAY be incomplete since pygments adds styles every now and then. +# Check with list(pygments.styles.get_all_styles()) in an interpreter. +# +# CODE_COLOR_SCHEME = 'default' + +# FAVICONS contains (name, file, size) tuples. +# Used to create favicon link like this: +# <link rel="name" href="file" sizes="size"/> +# FAVICONS = ( +# ("icon", "/favicon.ico", "16x16"), +# ("icon", "/icon_128x128.png", "128x128"), +# ) + +# Show teasers (instead of full posts) in indexes? Defaults to False. +# INDEX_TEASERS = False + +# HTML fragments with the Read more... links. +# The following tags exist and are replaced for you: +# {link} A link to the full post page. +# {read_more} The string “Read more” in the current language. +# {reading_time} An estimate of how long it will take to read the post. +# {remaining_reading_time} An estimate of how long it will take to read the post, sans the teaser. +# {min_remaining_read} The string “{remaining_reading_time} min remaining to read” in the current language. +# {paragraph_count} The amount of paragraphs in the post. +# {remaining_paragraph_count} The amount of paragraphs in the post, sans the teaser. +# {post_title} The title of the post. +# {{ A literal { (U+007B LEFT CURLY BRACKET) +# }} A literal } (U+007D RIGHT CURLY BRACKET) + +# 'Read more...' for the index page, if INDEX_TEASERS is True (translatable) +INDEX_READ_MORE_LINK = '<p class="more"><a href="{link}">{read_more}…</a></p>' +# 'Read more...' for the feeds, if FEED_TEASERS is True (translatable) +FEED_READ_MORE_LINK = '<p><a href="{link}">{read_more}…</a> ({min_remaining_read})</p>' + +# Append a URL query to the FEED_READ_MORE_LINK in Atom and RSS feeds. Advanced +# option used for traffic source tracking. +# Minimum example for use with Piwik: "pk_campaign=feed" +# The following tags exist and are replaced for you: +# {feedRelUri} A relative link to the feed. +# {feedFormat} The name of the syndication format. +# Example using replacement for use with Google Analytics: +# "utm_source={feedRelUri}&utm_medium=nikola_feed&utm_campaign={feedFormat}_feed" +FEED_LINKS_APPEND_QUERY = False + +# A HTML fragment describing the license, for the sidebar. +# (translatable) +LICENSE = "" +# I recommend using the Creative Commons' wizard: +# https://creativecommons.org/choose/ +# LICENSE = """ +# <a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"> +# <img alt="Creative Commons License BY-NC-SA" +# style="border-width:0; margin-bottom:12px;" +# src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"></a>""" + +# A small copyright notice for the page footer (in HTML). +# (translatable) +# CONTENT_FOOTER = 'Contents © {date} <a href="mailto:{email}">{author}</a> - Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a> {license}' +CONTENT_FOOTER = """© {date} {author} + - + <a href="mailto:{email}" class="text-dark mx-2" title="Enviar un correo"> + <i class="fas fa-envelope"></i> + </a> + <a href="" class="text-dark mx-2" title="Mensajería XMMP"> + <i class="fas fa-comment"></i> + </a> + <a href="https://txs.es/@educatic" class="text-dark mx-2" title="Mastodon"> + <i class="fab fa-mastodon"></i> + </a> + <a href="https://tuvideo.encanarias.info/accounts/educatic/video-channels" class="text-dark mx-2" title="PeerTube"> + <i class="fas fa-video"></i> + </a> + - + Generado con <a href="https://getnikola.com" rel="nofollow">Nikola</a> + {license} +""" + +# Things that will be passed to CONTENT_FOOTER.format(). This is done +# for translatability, as dicts are not formattable. Nikola will +# intelligently format the setting properly. +# The setting takes a dict. The keys are languages. The values are +# tuples of tuples of positional arguments and dicts of keyword arguments +# to format(). For example, {'en': (('Hello'), {'target': 'World'})} +# results in CONTENT_FOOTER['en'].format('Hello', target='World'). +# If you need to use the literal braces '{' and '}' in your footer text, use +# '{{' and '}}' to escape them (str.format is used) +# WARNING: If you do not use multiple languages with CONTENT_FOOTER, this +# still needs to be a dict of this format. (it can be empty if you +# do not need formatting) +# (translatable) +CONTENT_FOOTER_FORMATS = { + DEFAULT_LANG: ( + (), + { + "email": BLOG_EMAIL, + "author": BLOG_AUTHOR, + "date": time.gmtime().tm_year, + "license": LICENSE + } + ) +} + +# A simple copyright tag for inclusion in RSS feeds that works just +# like CONTENT_FOOTER and CONTENT_FOOTER_FORMATS +RSS_COPYRIGHT = 'Contents © {date} <a href="mailto:{email}">{author}</a> {license}' +RSS_COPYRIGHT_PLAIN = 'Contents © {date} {author} {license}' +RSS_COPYRIGHT_FORMATS = CONTENT_FOOTER_FORMATS + +# To use comments, you can choose between different third party comment +# systems. The following comment systems are supported by Nikola: +# disqus, discourse, facebook, intensedebate, isso, muut, commento, +# utterances +# You can leave this option blank to disable comments. +COMMENT_SYSTEM = "" +# And you also need to add your COMMENT_SYSTEM_ID which +# depends on what comment system you use. The default is +# "nikolademo" which is a test account for Disqus. More information +# is in the manual. +COMMENT_SYSTEM_ID = "" + +# Create index.html for page folders? +# WARNING: if a page would conflict with the index file (usually +# caused by setting slug to `index`), the PAGE_INDEX +# will not be generated for that directory. +# PAGE_INDEX = False +# Enable comments on pages (i.e. not posts)? +# COMMENTS_IN_PAGES = False +# Enable comments on picture gallery pages? +# COMMENTS_IN_GALLERIES = False + +# What file should be used for directory indexes? +# Defaults to index.html +# Common other alternatives: default.html for IIS, index.php +# INDEX_FILE = "index.html" + +# If a link ends in /index.html, drop the index.html part. +# http://mysite/foo/bar/index.html => http://mysite/foo/bar/ +# (Uses the INDEX_FILE setting, so if that is, say, default.html, +# it will instead /foo/default.html => /foo) +STRIP_INDEXES = True + +# List of files relative to the server root (!) that will be asked to be excluded +# from indexing and other robotic spidering. * is supported. Will only be effective +# if SITE_URL points to server root. The list is used to exclude resources from +# /robots.txt and /sitemap.xml, and to inform search engines about /sitemapindex.xml. +# ROBOTS_EXCLUSIONS = ["/archive.html", "/category/*.html"] + +# Instead of putting files in <slug>.html, put them in <slug>/index.html. +# No web server configuration is required. Also enables STRIP_INDEXES. +# This can be disabled on a per-page/post basis by adding +# .. pretty_url: False +# to the metadata. +PRETTY_URLS = True + +# If True, publish future dated posts right away instead of scheduling them. +# Defaults to False. +# FUTURE_IS_NOW = False + +# If True, future dated posts are allowed in deployed output +# Only the individual posts are published/deployed; not in indexes/sitemap +# Generally, you want FUTURE_IS_NOW and DEPLOY_FUTURE to be the same value. +# DEPLOY_FUTURE = False +# If False, draft posts will not be deployed +# DEPLOY_DRAFTS = True + +# Allows scheduling of posts using the rule specified here (new_post -s) +# Specify an iCal Recurrence Rule: https://www.kanzaki.com/docs/ical/rrule.html +# SCHEDULE_RULE = '' +# If True, use the scheduling rule to all posts (not pages!) by default +# SCHEDULE_ALL = False + +# Do you want to add a Mathjax config file? +# MATHJAX_CONFIG = "" + +# If you want support for the $.$ syntax (which may conflict with running +# text!), just use this config: +# MATHJAX_CONFIG = """ +# <script type="text/x-mathjax-config"> +# MathJax.Hub.Config({ +# tex2jax: { +# inlineMath: [ ['$','$'], ["\\\(","\\\)"] ], +# displayMath: [ ['$$','$$'], ["\\\[","\\\]"] ], +# processEscapes: true +# }, +# displayAlign: 'center', // Change this to 'left' if you want left-aligned equations. +# "HTML-CSS": { +# styles: {'.MathJax_Display': {"margin": 0}} +# } +# }); +# </script> +# """ + +# Want to use KaTeX instead of MathJax? While KaTeX may not support every +# feature yet, it's faster and the output looks better. +# USE_KATEX = False + +# KaTeX auto-render settings. If you want support for the $.$ syntax (which may +# conflict with running text!), just use this config: +# KATEX_AUTO_RENDER = """ +# delimiters: [ +# {left: "$$", right: "$$", display: true}, +# {left: "\\\\[", right: "\\\\]", display: true}, +# {left: "\\\\begin{equation*}", right: "\\\\end{equation*}", display: true}, +# {left: "$", right: "$", display: false}, +# {left: "\\\\(", right: "\\\\)", display: false} +# ] +# """ + +# Do you want to customize the nbconversion of your IPython notebook? +# IPYNB_CONFIG = {} +# With the following example configuration you can use a custom jinja template +# called `toggle.tpl` which has to be located in your site/blog main folder: +# IPYNB_CONFIG = {'Exporter': {'template_file': 'toggle'}} + +# What Markdown extensions to enable? +# You will also get gist, nikola and podcast because those are +# done in the code, hope you don't mind ;-) +# Note: most Nikola-specific extensions are done via the Nikola plugin system, +# with the MarkdownExtension class and should not be added here. +# Defaults are markdown.extensions.(fenced_code|codehilite|extra) +# markdown.extensions.meta is required for Markdown metadata. +MARKDOWN_EXTENSIONS = ['markdown.extensions.fenced_code', 'markdown.extensions.codehilite', 'markdown.extensions.extra'] + +# Options to be passed to markdown extensions (See https://python-markdown.github.io/reference/) +# Default is {DEFAULT_LANG: {}} (no config at all) +# (translatable) +# MARKDOWN_EXTENSION_CONFIGS = {DEFAULT_LANG: {}} + + +# Extra options to pass to the pandoc command, empty by default. +# It can be a list of strings or a dict (keys are file extensions). +# Example for a list of strings (used for all extensions): +# PANDOC_OPTIONS = ['-F', 'pandoc-citeproc', '--bibliography=/Users/foo/references.bib'] +# Example for a dict, where the keys are the extensions in COMPILERS['pandoc']: +# COMPILERS['pandoc'] = ['.rst', '.md', '.txt'] +# PANDOC_OPTIONS = { +# '.rst': ['-t', 'rst'], +# '.md': ['-t', 'markdown'], +# '.txt': ['-t', 'markdown-raw_html'], +# } +# Pandoc does not demote headers by default. To enable this, you can use, for example +# ['--base-header-level=2'] +# PANDOC_OPTIONS = [] + +# Social buttons. This is sample code for AddThis (which was the default for a +# long time). Insert anything you want here, or even make it empty (which is +# the default right now) +# (translatable) +# SOCIAL_BUTTONS_CODE = """ +# <!-- Social buttons --> +# <div id="addthisbox" class="addthis_toolbox addthis_peekaboo_style addthis_default_style addthis_label_style addthis_32x32_style"> +# <a class="addthis_button_more">Share</a> +# <ul><li><a class="addthis_button_facebook"></a> +# <li><a class="addthis_button_google_plusone_share"></a> +# <li><a class="addthis_button_linkedin"></a> +# <li><a class="addthis_button_twitter"></a> +# </ul> +# </div> +# <script src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4f7088a56bb93798"></script> +# <!-- End of social buttons --> +# """ + +# Show link to source for the posts? +SHOW_SOURCELINK = False +# Copy the source files for your pages? +# Setting it to False implies SHOW_SOURCELINK = False +# COPY_SOURCES = True + +# Modify the number of Post per Index Page +# Defaults to 10 +# INDEX_DISPLAY_POST_COUNT = 10 + +# By default, Nikola generates RSS files for the website and for tags, and +# links to it. Set this to False to disable everything RSS-related. +GENERATE_RSS = False + +# By default, Nikola does not generates Atom files for indexes and links to +# them. Generate Atom for tags by setting TAG_PAGES_ARE_INDEXES to True. +# Atom feeds are built based on INDEX_DISPLAY_POST_COUNT and not FEED_LENGTH +# Switch between plain-text summaries and full HTML content using the +# FEED_TEASER option. FEED_LINKS_APPEND_QUERY is also respected. Atom feeds +# are generated even for old indexes and have pagination link relations +# between each other. Old Atom feeds with no changes are marked as archived. +# GENERATE_ATOM = False + +# Only include teasers in Atom and RSS feeds. Disabling include the full +# content. Defaults to True. +# FEED_TEASERS = True + +# Strip HTML from Atom and RSS feed summaries and content. Defaults to False. +# FEED_PLAIN = False + +# Number of posts in Atom and RSS feeds. +# FEED_LENGTH = 10 + +# RSS_LINK is a HTML fragment to link the RSS or Atom feeds. If set to None, +# the base.tmpl will use the feed Nikola generates. However, you may want to +# change it for a FeedBurner feed or something else. +# RSS_LINK = None + +# A search form to search this site, for the sidebar. You can use a Google +# custom search (https://www.google.com/cse/) +# Or a DuckDuckGo search: https://duckduckgo.com/search_box.html +# Default is no search form. +# (translatable) +# SEARCH_FORM = "" +# +# This search form works for any site and looks good in the "site" theme where +# it appears on the navigation bar: +# +# SEARCH_FORM = """ +# <!-- DuckDuckGo custom search --> +# <form method="get" id="search" action="https://duckduckgo.com/" +# class="navbar-form pull-left"> +# <input type="hidden" name="sites" value="%s"> +# <input type="hidden" name="k8" value="#444444"> +# <input type="hidden" name="k9" value="#D51920"> +# <input type="hidden" name="kt" value="h"> +# <input type="text" name="q" maxlength="255" +# placeholder="Search…" class="span2" style="margin-top: 4px;"> +# <input type="submit" value="DuckDuckGo Search" style="visibility: hidden;"> +# </form> +# <!-- End of custom search --> +# """ % SITE_URL +# +# If you prefer a Google search form, here's an example that should just work: +# SEARCH_FORM = """ +# <!-- Google custom search --> +# <form method="get" action="https://www.google.com/search" class="navbar-form navbar-right" role="search"> +# <div class="form-group"> +# <input type="text" name="q" class="form-control" placeholder="Search"> +# </div> +# <button type="submit" class="btn btn-primary"> +# <span class="glyphicon glyphicon-search"></span> +# </button> +# <input type="hidden" name="sitesearch" value="%s"> +# </form> +# <!-- End of custom search --> +# """ % SITE_URL + +# Use content distribution networks for jQuery, twitter-bootstrap css and js, +# and html5shiv (for older versions of Internet Explorer) +# If this is True, jQuery and html5shiv are served from the Google CDN and +# Bootstrap is served from BootstrapCDN (provided by MaxCDN) +# Set this to False if you want to host your site without requiring access to +# external resources. +# USE_CDN = False + +# Check for USE_CDN compatibility. +# If you are using custom themes, have configured the CSS properly and are +# receiving warnings about incompatibility but believe they are incorrect, you +# can set this to False. +# USE_CDN_WARNING = True + +# Extra things you want in the pages HEAD tag. This will be added right +# before </head> +# (translatable) +EXTRA_HEAD_DATA = "<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css'>" +# Google Analytics or whatever else you use. Added to the bottom of <body> +# in the default template (base.tmpl). +# (translatable) +# BODY_END = "" + +# The possibility to extract metadata from the filename by using a +# regular expression. +# To make it work you need to name parts of your regular expression. +# The following names will be used to extract metadata: +# - title +# - slug +# - date +# - tags +# - link +# - description +# +# An example re is the following: +# '.*\/(?P<date>\d{4}-\d{2}-\d{2})-(?P<slug>.*)-(?P<title>.*)\.rst' +# (Note the '.*\/' in the beginning -- matches source paths relative to conf.py) +# FILE_METADATA_REGEXP = None + +# Should titles fetched from file metadata be unslugified (made prettier?) +# FILE_METADATA_UNSLUGIFY_TITLES = True + +# If enabled, extract metadata from docinfo fields in reST documents. +# If your text files start with a level 1 heading, it will be treated as the +# document title and will be removed from the text. +# USE_REST_DOCINFO_METADATA = False + +# If enabled, hide docinfo fields in reST document output +# HIDE_REST_DOCINFO = False + +# Map metadata from other formats to Nikola names. +# Supported formats: yaml, toml, rest_docinfo, markdown_metadata +# METADATA_MAPPING = {} +# +# Example for Pelican compatibility: +# METADATA_MAPPING = { +# "rest_docinfo": {"summary": "description", "modified": "updated"}, +# "markdown_metadata": {"summary": "description", "modified": "updated"} +# } +# Other examples: https://getnikola.com/handbook.html#mapping-metadata-from-other-formats + +# Map metadata between types/values. (Runs after METADATA_MAPPING.) +# Supported formats: nikola, yaml, toml, rest_docinfo, markdown_metadata +# The value on the right should be a dict of callables. +# METADATA_VALUE_MAPPING = {} +# Examples: +# METADATA_VALUE_MAPPING = { +# "yaml": {"keywords": lambda value: ', '.join(value)}, # yaml: 'keywords' list -> str +# "nikola": { +# "widgets": lambda value: value.split(', '), # nikola: 'widgets' comma-separated string -> list +# "tags": str.lower # nikola: force lowercase 'tags' (input would be string) +# } +# } + +# Add any post types here that you want to be displayed without a title. +# If your theme supports it, the titles will not be shown. +# TYPES_TO_HIDE_TITLE = [] + +# Additional metadata that is added to a post when creating a new_post +# ADDITIONAL_METADATA = {} + +# Nikola supports Twitter Card summaries, but they are disabled by default. +# They make it possible for you to attach media to Tweets that link +# to your content. +# +# Uncomment and modify to following lines to match your accounts. +# Images displayed come from the `previewimage` meta tag. +# You can specify the card type by using the `card` parameter in TWITTER_CARD. +# TWITTER_CARD = { +# # 'use_twitter_cards': True, # enable Twitter Cards +# # 'card': 'summary', # Card type, you can also use 'summary_large_image', +# # see https://dev.twitter.com/cards/types +# # 'site': '@website', # twitter nick for the website +# # 'creator': '@username', # Username for the content creator / author. +# } + +# Bundle JS and CSS into single files to make site loading faster in a HTTP/1.1 +# environment but is not recommended for HTTP/2.0 when caching is used. +# Defaults to True. +# USE_BUNDLES = True + +# Plugins you don't want to use. Be careful :-) +# DISABLED_PLUGINS = ["render_galleries"] + +# Special settings to disable only parts of the indexes plugin. +# Use with care. +# DISABLE_INDEXES = False +DISABLE_INDEXES = True +# DISABLE_MAIN_ATOM_FEED = False +# DISABLE_MAIN_RSS_FEED = False + +# Add the absolute paths to directories containing plugins to use them. +# For example, the `plugins` directory of your clone of the Nikola plugins +# repository. +# EXTRA_PLUGINS_DIRS = [] + +# Add the absolute paths to directories containing themes to use them. +# For example, the `v7` directory of your clone of the Nikola themes +# repository. +# EXTRA_THEMES_DIRS = [] + +# List of regular expressions, links matching them will always be considered +# valid by "nikola check -l" +# LINK_CHECK_WHITELIST = [] + +# If set to True, enable optional hyphenation in your posts (requires pyphen) +# Enabling hyphenation has been shown to break math support in some cases, +# use with caution. +# HYPHENATE = False + +# The <hN> tags in HTML generated by certain compilers (reST/Markdown) +# will be demoted by that much (1 → h1 will become h2 and so on) +# This was a hidden feature of the Markdown and reST compilers in the +# past. Useful especially if your post titles are in <h1> tags too, for +# example. +# (defaults to 1.) +# DEMOTE_HEADERS = 1 + +# If you don’t like slugified file names ([a-z0-9] and a literal dash), +# and would prefer to use all the characters your file system allows. +# USE WITH CARE! This is also not guaranteed to be perfect, and may +# sometimes crash Nikola, your web server, or eat your cat. +# USE_SLUGIFY = True + +# If set to True, the tags 'draft', 'mathjax' and 'private' have special +# meaning. If set to False, these tags are handled like regular tags. +USE_TAG_METADATA = False + +# If set to True, a warning is issued if one of the 'draft', 'mathjax' +# and 'private' tags are found in a post. Useful for checking that +# migration was successful. +WARN_ABOUT_TAG_METADATA = False + +# Templates will use those filters, along with the defaults. +# Consult your engine's documentation on filters if you need help defining +# those. +# TEMPLATE_FILTERS = {} + +# If you want to, you can augment or change Nikola's configuration +# of the underlying template engine used +# in any way you please, by defining this function: +# def TEMPLATE_ENGINE_FACTORY(**args): +# pass +# This should return either a jinja2.Environment or a mako.lookup.TemplateLookup +# object that have been configured with the args received plus any additional configuration wanted. +# +# E.g., to configure Jinja2 to bark on non-existing values instead of silently omitting: +# def TEMPLATE_ENGINE_FACTORY(**args) -> jinja2.Environment: +# augmented_args = dict(args) +# augmented_args['undefined'] = jinja2.DebugUndefined +# return jinja2.Environment(**augmented_args) + +# Put in global_context things you want available on all your templates. +# It can be anything, data, functions, modules, etc. +GLOBAL_CONTEXT = {} + +# Add functions here and they will be called with template +# GLOBAL_CONTEXT as parameter when the template is about to be +# rendered +GLOBAL_CONTEXT_FILLER = [] diff --git a/files/assets/img/apple-touch-icon.png b/files/assets/img/apple-touch-icon.png new file mode 100644 index 0000000..bfeceea Binary files /dev/null and b/files/assets/img/apple-touch-icon.png differ diff --git a/files/assets/img/educatic_logo_w.svg b/files/assets/img/educatic_logo_w.svg new file mode 100644 index 0000000..1c02363 --- /dev/null +++ b/files/assets/img/educatic_logo_w.svg @@ -0,0 +1,87 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" version="1.2" viewBox="0 0 18400 4150" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve" viewport="0 0 5120px 1140px"> + <defs class="ClipPathGroup"> + <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse"> + <rect x="0" y="0" width="18400" height="4150"/> + </clipPath> + <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse"> + <rect x="18" y="4" width="18364" height="4142"/> + </clipPath> + </defs> + <defs> + <font id="EmbeddedFont_1" horiz-adv-x="2048"> + <font-face font-family="Liberation Serif embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1826" descent="450"/> + <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/> + <glyph unicode="U" horiz-adv-x="1404" d="M 1159,1262 L 979,1288 979,1341 1436,1341 1436,1288 1264,1262 1264,461 C 1264,400 1256,340 1241,283 1226,225 1199,174 1160,129 1121,84 1069,48 1002,21 935,-6 850,-20 747,-20 569,-20 436,20 348,101 259,181 215,295 215,442 L 215,1262 43,1288 43,1341 579,1341 579,1288 407,1262 407,457 C 407,402 414,353 427,308 440,263 460,224 489,192 517,160 554,135 599,118 644,101 698,92 762,92 832,92 892,101 942,118 992,135 1033,160 1066,191 1098,222 1122,260 1137,305 1152,350 1159,399 1159,453 L 1159,1262 Z"/> + <glyph unicode="T" horiz-adv-x="1192" d="M 315,0 L 315,53 528,80 528,1255 477,1255 C 390,1255 316,1253 257,1249 198,1245 156,1240 131,1235 L 104,1026 37,1026 37,1341 1217,1341 1217,1026 1149,1026 1122,1235 C 1110,1238 1092,1240 1069,1242 1045,1244 1017,1246 986,1248 955,1249 921,1251 884,1252 847,1253 809,1253 770,1253 L 721,1253 721,80 934,53 934,0 315,0 Z"/> + <glyph unicode="I" horiz-adv-x="557" d="M 438,80 L 610,53 610,0 74,0 74,53 246,80 246,1262 74,1288 74,1341 610,1341 610,1288 438,1262 438,80 Z"/> + <glyph unicode="E" horiz-adv-x="1112" d="M 59,53 L 231,80 231,1262 59,1288 59,1341 1065,1341 1065,1020 999,1020 967,1237 C 946,1240 920,1242 890,1244 859,1246 828,1248 797,1249 766,1250 736,1250 708,1251 680,1251 658,1251 643,1251 L 424,1251 424,727 786,727 817,887 881,887 881,475 817,475 786,637 424,637 424,90 688,90 C 729,90 768,91 805,92 842,93 875,94 904,95 933,96 959,98 980,100 1001,102 1016,104 1026,106 L 1083,354 1149,354 1130,0 59,0 59,53 Z"/> + <glyph unicode="D" horiz-adv-x="1350" d="M 1188,680 C 1188,779 1174,864 1147,936 1120,1007 1081,1066 1030,1113 979,1160 917,1194 845,1217 773,1240 693,1251 604,1251 L 424,1251 424,94 C 444,93 466,92 489,91 512,90 536,90 561,89 586,88 611,87 636,87 661,86 685,86 709,86 794,86 866,99 927,124 987,149 1036,186 1075,236 1114,285 1142,347 1161,421 1179,495 1188,581 1188,680 Z M 668,1341 C 779,1341 880,1329 970,1306 1059,1283 1136,1245 1199,1192 1262,1139 1311,1071 1346,987 1380,903 1397,800 1397,678 1397,569 1383,472 1355,387 1327,302 1285,231 1228,173 1171,115 1100,71 1014,41 927,11 826,-4 709,-4 671,-4 630,-4 585,-4 540,-3 495,-3 452,-2 409,-1 368,-1 329,-1 290,0 257,0 231,0 L 59,0 59,53 231,80 231,1262 59,1288 59,1341 668,1341 Z"/> + <glyph unicode="C" horiz-adv-x="1192" d="M 774,-20 C 665,-20 567,-5 482,26 396,57 324,101 265,159 206,217 161,288 130,372 99,455 84,550 84,655 84,775 100,879 131,967 162,1055 207,1128 266,1186 325,1243 397,1286 483,1314 569,1342 667,1356 778,1356 824,1356 867,1355 908,1352 949,1349 988,1345 1025,1340 1062,1335 1097,1330 1130,1324 1163,1318 1196,1312 1227,1305 L 1233,1012 1167,1012 1137,1186 C 1090,1215 1036,1237 975,1253 913,1268 850,1276 786,1276 708,1276 639,1265 578,1244 517,1223 465,1188 423,1140 381,1091 349,1028 327,949 304,870 293,772 293,657 293,556 304,468 326,393 348,318 380,255 421,206 462,156 513,119 573,94 632,69 700,57 776,57 817,57 857,60 895,65 932,70 967,78 1000,87 1032,96 1061,107 1087,120 1112,132 1134,145 1151,158 L 1188,358 1253,358 1247,43 C 1219,35 1187,27 1151,20 1115,12 1077,5 1036,-1 995,-7 953,-12 908,-15 863,-18 819,-20 774,-20 Z"/> + <glyph unicode="A" horiz-adv-x="1483" d="M 461,53 L 461,0 20,0 20,53 172,80 629,1352 819,1352 1294,80 1464,53 1464,0 897,0 897,53 1077,80 944,467 416,467 281,80 461,53 Z M 676,1208 L 446,557 913,557 676,1208 Z"/> + </font> + </defs> + <defs class="TextShapeIndex"> + <g ooo:slide="id1" ooo:id-list="id3 id4"/> + </defs> + <defs class="EmbeddedBulletChars"> + <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/> + </g> + <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/> + </g> + <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/> + </g> + <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/> + </g> + <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/> + </g> + <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/> + </g> + <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/> + </g> + <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/> + </g> + <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/> + </g> + <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/> + </g> + </defs> + <defs class="TextEmbeddedBitmaps"/> + <g> + <g id="id2" class="Master_Slide"> + <g id="bg-id2" class="Background"/> + <g id="bo-id2" class="BackgroundObjects"/> + </g> + </g> + <g class="SlideGroup"> + <g> + <g id="container-id1"> + <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)"> + <g class="Page"> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id3"> + <rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="18401" height="4151"/> + <path fill="rgb(255,255,255)" stroke="none" d="M 9200,4150 L 0,4150 0,0 18400,0 18400,4150 9200,4150 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.TextShape"> + <g id="id4"> + <rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="18401" height="4155"/> + <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Serif, serif" font-size="3528px" font-weight="400"><tspan class="TextPosition" x="250" y="3266"><tspan fill="rgb(255,0,0)" stroke="none">EDUCA</tspan><tspan fill="rgb(128,128,128)" stroke="none">TIC</tspan></tspan></tspan></text> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/files/assets/img/email.svg b/files/assets/img/email.svg new file mode 100644 index 0000000..566eb9f --- /dev/null +++ b/files/assets/img/email.svg @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.2" width="210mm" height="210mm" viewBox="0 0 21000 21000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve"> + <defs class="ClipPathGroup"> + <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse"> + <rect x="0" y="0" width="21000" height="21000"/> + </clipPath> + <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse"> + <rect x="21" y="21" width="20958" height="20958"/> + </clipPath> + </defs> + <defs class="TextShapeIndex"> + <g ooo:slide="id1" ooo:id-list="id3"/> + </defs> + <defs class="EmbeddedBulletChars"> + <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/> + </g> + <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/> + </g> + <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/> + </g> + <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/> + </g> + <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/> + </g> + <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/> + </g> + <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/> + </g> + <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/> + </g> + <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/> + </g> + <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/> + </g> + </defs> + <defs class="TextEmbeddedBitmaps"/> + <g> + <g id="id2" class="Master_Slide"> + <g id="bg-id2" class="Background"/> + <g id="bo-id2" class="BackgroundObjects"/> + </g> + </g> + <g class="SlideGroup"> + <g> + <g id="container-id1"> + <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)"> + <g class="Page"> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id3"> + <rect class="BoundingBox" stroke="none" fill="none" x="1228" y="2769" width="18597" height="15316"/> + <path fill="rgb(0,0,0)" stroke="none" d="M 19823,6918 L 19823,16442 C 19823,16744 19754,17001 19603,17262 19452,17524 19264,17712 19002,17863 18741,18014 18484,18083 18182,18083 L 2869,18083 C 2567,18083 2310,18014 2048,17863 1787,17712 1599,17524 1448,17262 1297,17001 1228,16744 1228,16442 L 1228,6918 8050,12702 C 8234,12858 8402,12977 8611,13097 9222,13450 9821,13610 10525,13610 11230,13610 11829,13450 12440,13097 12649,12977 12817,12858 13001,12702 L 19823,6918 Z M 18182,2769 C 18392,2769 18570,2802 18767,2876 18853,2909 18923,2942 19002,2988 19184,3093 19322,3211 19454,3374 19513,3446 19558,3511 19605,3592 19640,3653 19666,3706 19694,3770 19765,3939 19809,4122 19819,4313 L 19823,4410 19823,4957 11590,11979 C 11510,12047 11437,12099 11346,12152 11084,12303 10827,12371 10525,12371 10223,12371 9967,12303 9705,12152 9646,12117 9597,12085 9542,12044 L 9461,11978 1228,4957 1228,4410 C 1228,4408 1228,4407 1228,4406 1228,4105 1297,3849 1447,3589 1598,3328 1785,3140 2046,2990 2074,2973 2099,2960 2129,2945 L 2129,2945 C 2369,2824 2598,2769 2867,2769 2868,2769 2868,2769 2869,2769 L 18182,2769 Z"/> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/files/assets/img/et_logo.svg b/files/assets/img/et_logo.svg new file mode 100644 index 0000000..d786903 --- /dev/null +++ b/files/assets/img/et_logo.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.2" width="31.7mm" height="31.7mm" viewBox="0 0 3170 3170" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve"> + <defs class="ClipPathGroup"> + <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse"> + <rect x="0" y="0" width="3170" height="3170"/> + </clipPath> + <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse"> + <rect x="3" y="3" width="3164" height="3164"/> + </clipPath> + </defs> + <defs class="TextShapeIndex"> + <g ooo:slide="id1" ooo:id-list="id3 id4"/> + </defs> + <defs class="EmbeddedBulletChars"> + <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/> + </g> + <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/> + </g> + <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/> + </g> + <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/> + </g> + <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/> + </g> + <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/> + </g> + <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/> + </g> + <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/> + </g> + <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/> + </g> + <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/> + </g> + </defs> + <defs class="TextEmbeddedBitmaps"/> + <g> + <g id="id2" class="Master_Slide"> + <g id="bg-id2" class="Background"/> + <g id="bo-id2" class="BackgroundObjects"/> + </g> + </g> + <g class="SlideGroup"> + <g> + <g id="container-id1"> + <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)"> + <g class="Page"> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id3"> + <rect class="BoundingBox" stroke="none" fill="none" x="50" y="100" width="2151" height="2895"/> + <path fill="rgb(255,0,0)" stroke="none" d="M 50,2842 L 103,2787 103,299 50,244 50,134 359,134 359,809 339,809 329,348 324,341 318,341 305,334 291,327 284,327 277,327 270,320 263,320 249,320 229,320 162,320 162,1423 274,1423 283,1085 303,1085 303,1953 283,1953 274,1615 162,1615 162,2766 243,2766 252,2766 261,2766 271,2759 280,2759 288,2759 296,2759 303,2752 310,2752 313,2752 317,2752 323,2746 333,2739 341,2732 344,2732 347,2732 365,2208 386,2208 380,2952 50,2952 50,2842 Z M 783,1526 L 783,1450 782,1374 781,1298 780,1230 778,1161 775,1099 773,1037 770,982 767,926 763,878 759,823 755,775 750,733 745,685 740,644 734,609 728,575 722,541 715,513 709,478 701,458 693,430 685,410 677,389 669,375 660,354 651,348 642,334 632,327 623,327 603,320 547,320 547,2759 557,2759 562,2759 567,2766 590,2766 596,2773 602,2773 613,2773 635,2773 645,2773 654,2766 663,2759 671,2752 679,2746 687,2732 696,2711 703,2697 710,2677 716,2649 722,2628 728,2601 733,2566 738,2532 743,2497 748,2456 752,2415 756,2373 760,2332 763,2284 767,2236 769,2181 772,2125 774,2070 778,1946 781,1815 782,1677 783,1526 Z M 623,127 L 648,134 672,148 683,155 694,168 706,189 716,203 726,224 736,244 745,272 754,299 763,334 771,368 779,403 786,444 793,485 800,534 807,582 813,637 818,692 823,754 828,816 832,878 836,947 839,1016 841,1092 843,1174 845,1257 846,1340 847,1429 847,1526 847,1609 846,1691 845,1774 844,1850 842,1926 840,2001 838,2070 835,2139 831,2208 828,2270 823,2325 819,2380 814,2435 808,2491 801,2539 795,2587 788,2635 781,2677 773,2711 765,2746 757,2780 748,2808 739,2835 729,2863 719,2883 708,2904 697,2918 685,2932 673,2945 661,2952 648,2959 635,2959 597,2959 556,2959 518,2959 489,2959 435,2959 435,2842 489,2787 489,299 435,244 435,127 623,127 Z M 1229,292 L 1174,237 1174,127 1314,127 1314,237 1262,292 1262,1981 1262,2029 1261,2077 1260,2174 1258,2263 1255,2360 1253,2401 1251,2442 1248,2484 1245,2525 1242,2566 1238,2608 1234,2642 1229,2677 1224,2711 1219,2746 1214,2773 1208,2808 1202,2835 1195,2856 1188,2883 1181,2904 1173,2925 1164,2945 1155,2959 1146,2973 1136,2980 1124,2987 1113,2994 1102,2994 1082,2987 1064,2980 1047,2959 1031,2932 1015,2897 1008,2876 1002,2849 996,2828 990,2801 984,2773 979,2739 974,2704 970,2670 965,2635 961,2601 958,2559 954,2518 952,2477 949,2435 947,2387 945,2339 941,2243 940,2132 939,2022 939,292 885,237 885,127 1051,127 1051,237 997,292 997,1988 997,2070 998,2112 999,2153 999,2194 1000,2229 1002,2270 1003,2305 1005,2339 1006,2373 1008,2408 1011,2435 1013,2463 1016,2491 1020,2518 1023,2546 1026,2573 1030,2594 1034,2615 1038,2635 1043,2656 1047,2677 1052,2690 1057,2704 1062,2718 1068,2725 1073,2739 1080,2746 1086,2752 1093,2752 1100,2759 1107,2759 1115,2759 1122,2752 1130,2752 1137,2746 1144,2739 1150,2725 1156,2718 1162,2704 1168,2690 1173,2677 1178,2656 1183,2642 1188,2622 1192,2601 1196,2573 1200,2553 1204,2525 1207,2497 1210,2470 1213,2442 1215,2408 1218,2380 1220,2346 1222,2311 1225,2236 1226,2201 1227,2160 1228,2118 1228,2077 1229,2036 1229,1994 1229,292 Z M 1566,2994 L 1553,2994 1541,2987 1529,2980 1518,2966 1507,2952 1496,2938 1486,2918 1476,2897 1466,2870 1457,2842 1447,2814 1439,2780 1431,2746 1423,2704 1416,2663 1409,2615 1402,2566 1396,2518 1390,2470 1385,2415 1380,2360 1376,2298 1372,2236 1368,2167 1365,2098 1362,2036 1359,1960 1357,1891 1356,1815 1355,1733 1354,1657 1354,1574 1354,1478 1355,1388 1356,1298 1357,1216 1359,1133 1362,1057 1365,982 1368,913 1372,844 1376,782 1380,720 1385,658 1391,603 1396,554 1402,506 1409,458 1416,410 1423,368 1431,334 1439,299 1447,265 1457,237 1466,210 1476,182 1486,162 1497,148 1508,134 1519,120 1530,113 1542,106 1554,100 1567,100 1588,100 1598,100 1607,106 1626,113 1634,120 1643,127 1651,134 1660,148 1668,155 1676,162 1705,203 1707,823 1687,823 1678,458 1673,437 1667,416 1660,396 1654,375 1647,354 1641,341 1634,327 1627,313 1620,299 1613,292 1606,286 1599,279 1584,265 1570,265 1561,265 1551,272 1543,272 1535,286 1527,292 1519,306 1512,320 1505,334 1498,354 1492,375 1485,396 1479,423 1474,451 1468,485 1463,520 1458,554 1453,596 1449,637 1444,678 1440,727 1437,782 1433,837 1431,892 1428,954 1426,1016 1424,1085 1422,1154 1420,1230 1419,1312 1418,1395 1417,1478 1417,1567 1417,1643 1418,1726 1419,1795 1420,1870 1421,1932 1423,2001 1427,2125 1430,2181 1433,2236 1436,2291 1439,2339 1443,2387 1447,2435 1452,2477 1457,2518 1462,2553 1467,2594 1473,2628 1478,2656 1485,2684 1491,2711 1497,2732 1504,2752 1511,2773 1518,2787 1525,2801 1533,2814 1541,2821 1549,2821 1558,2828 1567,2828 1576,2828 1585,2828 1594,2821 1599,2821 1603,2814 1619,2794 1627,2780 1635,2766 1642,2752 1649,2732 1656,2718 1662,2697 1668,2677 1673,2663 1676,2649 1678,2642 1680,2628 1682,2622 1694,2201 1713,2201 1712,2863 1698,2890 1690,2897 1682,2911 1646,2952 1637,2959 1627,2966 1607,2980 1587,2987 1576,2994 1566,2994 Z M 1891,2842 L 1891,2952 1754,2952 1754,2842 1801,2787 1942,106 2001,106 2147,2787 2199,2842 2199,2952 2025,2952 2025,2842 2080,2787 2039,1967 1876,1967 1835,2787 1891,2842 Z M 1956,403 L 1886,1781 2030,1781 1956,403 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id4"> + <rect class="BoundingBox" stroke="none" fill="none" x="2150" y="97" width="1000" height="2895"/> + <path fill="rgb(128,128,128)" stroke="none" d="M 2238,2949 L 2238,2837 2306,2782 2306,305 2289,305 2220,319 2206,326 2196,333 2180,347 2170,792 2150,792 2150,124 2524,124 2524,792 2503,792 2495,347 2493,347 2492,340 2487,340 2482,340 2477,333 2471,326 2464,326 2451,319 2443,319 2435,319 2427,312 2418,312 2382,312 2367,312 2367,2782 2435,2837 2435,2949 2238,2949 Z M 2675,2782 L 2730,2837 2730,2949 2559,2949 2559,2837 2613,2782 2613,291 2559,236 2559,124 2730,124 2730,236 2675,291 2675,2782 Z M 2997,2991 L 2985,2991 2972,2984 2961,2977 2948,2963 2937,2949 2926,2935 2915,2914 2905,2893 2894,2865 2885,2837 2876,2810 2867,2775 2859,2740 2850,2698 2843,2657 2836,2615 2828,2566 2822,2517 2817,2469 2811,2413 2806,2357 2801,2295 2797,2232 2793,2170 2790,2100 2786,2031 2784,1961 2782,1884 2780,1808 2779,1731 2778,1655 2778,1571 2778,1481 2779,1390 2780,1300 2782,1217 2784,1133 2786,1057 2790,980 2794,910 2798,841 2802,778 2806,716 2812,660 2817,604 2823,549 2829,500 2836,451 2843,410 2850,368 2859,326 2867,291 2876,263 2885,236 2894,208 2905,187 2915,166 2926,145 2937,131 2949,117 2961,110 2973,103 2986,97 2999,97 3020,97 3031,97 3040,103 3077,131 3111,159 3141,201 3143,820 3122,820 3113,451 3101,410 3095,389 3089,375 3082,354 3076,340 3069,326 3061,312 3054,298 3047,291 3039,284 3032,277 3016,263 3002,263 2992,263 2984,270 2974,270 2966,284 2958,291 2950,305 2943,319 2935,333 2928,354 2922,375 2914,396 2908,423 2903,451 2897,479 2891,514 2886,549 2881,590 2877,632 2872,681 2868,730 2865,778 2862,834 2859,890 2856,952 2854,1015 2850,1084 2849,1154 2847,1230 2846,1390 2845,1564 2846,1717 2846,1794 2847,1864 2849,1933 2850,2003 2854,2065 2856,2121 2858,2177 2861,2232 2864,2288 2868,2337 2871,2385 2876,2434 2880,2476 2885,2517 2890,2552 2896,2594 2901,2622 2907,2657 2913,2684 2920,2712 2926,2733 2933,2754 2941,2775 2948,2789 2955,2803 2964,2810 2972,2817 2981,2824 2989,2831 2998,2831 3008,2831 3017,2824 3036,2810 3045,2803 3054,2789 3070,2768 3083,2733 3091,2719 3094,2705 3097,2698 3103,2677 3109,2657 3113,2636 3117,2615 3130,2197 3149,2197 3148,2858 3134,2886 3125,2893 3117,2907 3081,2949 3071,2956 3061,2963 3040,2977 3019,2984 3008,2991 2997,2991 Z"/> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/files/assets/img/et_logo_w.svg b/files/assets/img/et_logo_w.svg new file mode 100644 index 0000000..f28d143 --- /dev/null +++ b/files/assets/img/et_logo_w.svg @@ -0,0 +1,80 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" version="1.2" viewBox="0 0 3170 3170" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xml:space="preserve" viewport="0 0 1280px 1280px"> + <defs class="ClipPathGroup"> + <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse"> + <rect x="0" y="0" width="3170" height="3170"/> + </clipPath> + <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse"> + <rect x="3" y="3" width="3164" height="3164"/> + </clipPath> + </defs> + <defs class="TextShapeIndex"> + <g ooo:slide="id1" ooo:id-list="id3 id4 id5"/> + </defs> + <defs class="EmbeddedBulletChars"> + <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/> + </g> + <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/> + </g> + <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/> + </g> + <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/> + </g> + <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/> + </g> + <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/> + </g> + <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/> + </g> + <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/> + </g> + <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/> + </g> + <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/> + </g> + </defs> + <defs class="TextEmbeddedBitmaps"/> + <g> + <g id="id2" class="Master_Slide"> + <g id="bg-id2" class="Background"/> + <g id="bo-id2" class="BackgroundObjects"/> + </g> + </g> + <g class="SlideGroup"> + <g> + <g id="container-id1"> + <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)"> + <g class="Page"> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id3"> + <rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="3171" height="3171"/> + <path fill="rgb(255,255,255)" stroke="none" d="M 1585,3170 L 0,3170 0,0 3170,0 3170,3170 1585,3170 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id4"> + <rect class="BoundingBox" stroke="none" fill="none" x="50" y="100" width="2151" height="2895"/> + <path fill="rgb(255,0,0)" stroke="none" d="M 50,2842 L 103,2787 103,299 50,244 50,134 359,134 359,809 339,809 329,348 324,341 318,341 305,334 291,327 284,327 277,327 270,320 263,320 249,320 229,320 162,320 162,1423 274,1423 283,1085 303,1085 303,1953 283,1953 274,1615 162,1615 162,2766 243,2766 252,2766 261,2766 271,2759 280,2759 288,2759 296,2759 303,2752 310,2752 313,2752 317,2752 323,2746 333,2739 341,2732 344,2732 347,2732 365,2208 386,2208 380,2952 50,2952 50,2842 Z M 783,1526 L 783,1450 782,1374 781,1298 780,1230 778,1161 775,1099 773,1037 770,982 767,926 763,878 759,823 755,775 750,733 745,685 740,644 734,609 728,575 722,541 715,513 709,478 701,458 693,430 685,410 677,389 669,375 660,354 651,348 642,334 632,327 623,327 603,320 547,320 547,2759 557,2759 562,2759 567,2766 590,2766 596,2773 602,2773 613,2773 635,2773 645,2773 654,2766 663,2759 671,2752 679,2746 687,2732 696,2711 703,2697 710,2677 716,2649 722,2628 728,2601 733,2566 738,2532 743,2497 748,2456 752,2415 756,2373 760,2332 763,2284 767,2236 769,2181 772,2125 774,2070 778,1946 781,1815 782,1677 783,1526 Z M 623,127 L 648,134 672,148 683,155 694,168 706,189 716,203 726,224 736,244 745,272 754,299 763,334 771,368 779,403 786,444 793,485 800,534 807,582 813,637 818,692 823,754 828,816 832,878 836,947 839,1016 841,1092 843,1174 845,1257 846,1340 847,1429 847,1526 847,1609 846,1691 845,1774 844,1850 842,1926 840,2001 838,2070 835,2139 831,2208 828,2270 823,2325 819,2380 814,2435 808,2491 801,2539 795,2587 788,2635 781,2677 773,2711 765,2746 757,2780 748,2808 739,2835 729,2863 719,2883 708,2904 697,2918 685,2932 673,2945 661,2952 648,2959 635,2959 597,2959 556,2959 518,2959 489,2959 435,2959 435,2842 489,2787 489,299 435,244 435,127 623,127 Z M 1229,292 L 1174,237 1174,127 1314,127 1314,237 1262,292 1262,1981 1262,2029 1261,2077 1260,2174 1258,2263 1255,2360 1253,2401 1251,2442 1248,2484 1245,2525 1242,2566 1238,2608 1234,2642 1229,2677 1224,2711 1219,2746 1214,2773 1208,2808 1202,2835 1195,2856 1188,2883 1181,2904 1173,2925 1164,2945 1155,2959 1146,2973 1136,2980 1124,2987 1113,2994 1102,2994 1082,2987 1064,2980 1047,2959 1031,2932 1015,2897 1008,2876 1002,2849 996,2828 990,2801 984,2773 979,2739 974,2704 970,2670 965,2635 961,2601 958,2559 954,2518 952,2477 949,2435 947,2387 945,2339 941,2243 940,2132 939,2022 939,292 885,237 885,127 1051,127 1051,237 997,292 997,1988 997,2070 998,2112 999,2153 999,2194 1000,2229 1002,2270 1003,2305 1005,2339 1006,2373 1008,2408 1011,2435 1013,2463 1016,2491 1020,2518 1023,2546 1026,2573 1030,2594 1034,2615 1038,2635 1043,2656 1047,2677 1052,2690 1057,2704 1062,2718 1068,2725 1073,2739 1080,2746 1086,2752 1093,2752 1100,2759 1107,2759 1115,2759 1122,2752 1130,2752 1137,2746 1144,2739 1150,2725 1156,2718 1162,2704 1168,2690 1173,2677 1178,2656 1183,2642 1188,2622 1192,2601 1196,2573 1200,2553 1204,2525 1207,2497 1210,2470 1213,2442 1215,2408 1218,2380 1220,2346 1222,2311 1225,2236 1226,2201 1227,2160 1228,2118 1228,2077 1229,2036 1229,1994 1229,292 Z M 1566,2994 L 1553,2994 1541,2987 1529,2980 1518,2966 1507,2952 1496,2938 1486,2918 1476,2897 1466,2870 1457,2842 1447,2814 1439,2780 1431,2746 1423,2704 1416,2663 1409,2615 1402,2566 1396,2518 1390,2470 1385,2415 1380,2360 1376,2298 1372,2236 1368,2167 1365,2098 1362,2036 1359,1960 1357,1891 1356,1815 1355,1733 1354,1657 1354,1574 1354,1478 1355,1388 1356,1298 1357,1216 1359,1133 1362,1057 1365,982 1368,913 1372,844 1376,782 1380,720 1385,658 1391,603 1396,554 1402,506 1409,458 1416,410 1423,368 1431,334 1439,299 1447,265 1457,237 1466,210 1476,182 1486,162 1497,148 1508,134 1519,120 1530,113 1542,106 1554,100 1567,100 1588,100 1598,100 1607,106 1626,113 1634,120 1643,127 1651,134 1660,148 1668,155 1676,162 1705,203 1707,823 1687,823 1678,458 1673,437 1667,416 1660,396 1654,375 1647,354 1641,341 1634,327 1627,313 1620,299 1613,292 1606,286 1599,279 1584,265 1570,265 1561,265 1551,272 1543,272 1535,286 1527,292 1519,306 1512,320 1505,334 1498,354 1492,375 1485,396 1479,423 1474,451 1468,485 1463,520 1458,554 1453,596 1449,637 1444,678 1440,727 1437,782 1433,837 1431,892 1428,954 1426,1016 1424,1085 1422,1154 1420,1230 1419,1312 1418,1395 1417,1478 1417,1567 1417,1643 1418,1726 1419,1795 1420,1870 1421,1932 1423,2001 1427,2125 1430,2181 1433,2236 1436,2291 1439,2339 1443,2387 1447,2435 1452,2477 1457,2518 1462,2553 1467,2594 1473,2628 1478,2656 1485,2684 1491,2711 1497,2732 1504,2752 1511,2773 1518,2787 1525,2801 1533,2814 1541,2821 1549,2821 1558,2828 1567,2828 1576,2828 1585,2828 1594,2821 1599,2821 1603,2814 1619,2794 1627,2780 1635,2766 1642,2752 1649,2732 1656,2718 1662,2697 1668,2677 1673,2663 1676,2649 1678,2642 1680,2628 1682,2622 1694,2201 1713,2201 1712,2863 1698,2890 1690,2897 1682,2911 1646,2952 1637,2959 1627,2966 1607,2980 1587,2987 1576,2994 1566,2994 Z M 1891,2842 L 1891,2952 1754,2952 1754,2842 1801,2787 1942,106 2001,106 2147,2787 2199,2842 2199,2952 2025,2952 2025,2842 2080,2787 2039,1967 1876,1967 1835,2787 1891,2842 Z M 1956,403 L 1886,1781 2030,1781 1956,403 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id5"> + <rect class="BoundingBox" stroke="none" fill="none" x="2150" y="97" width="1000" height="2895"/> + <path fill="rgb(128,128,128)" stroke="none" d="M 2238,2949 L 2238,2837 2306,2782 2306,305 2289,305 2220,319 2206,326 2196,333 2180,347 2170,792 2150,792 2150,124 2524,124 2524,792 2503,792 2495,347 2493,347 2492,340 2487,340 2482,340 2477,333 2471,326 2464,326 2451,319 2443,319 2435,319 2427,312 2418,312 2382,312 2367,312 2367,2782 2435,2837 2435,2949 2238,2949 Z M 2675,2782 L 2730,2837 2730,2949 2559,2949 2559,2837 2613,2782 2613,291 2559,236 2559,124 2730,124 2730,236 2675,291 2675,2782 Z M 2997,2991 L 2985,2991 2972,2984 2961,2977 2948,2963 2937,2949 2926,2935 2915,2914 2905,2893 2894,2865 2885,2837 2876,2810 2867,2775 2859,2740 2850,2698 2843,2657 2836,2615 2828,2566 2822,2517 2817,2469 2811,2413 2806,2357 2801,2295 2797,2232 2793,2170 2790,2100 2786,2031 2784,1961 2782,1884 2780,1808 2779,1731 2778,1655 2778,1571 2778,1481 2779,1390 2780,1300 2782,1217 2784,1133 2786,1057 2790,980 2794,910 2798,841 2802,778 2806,716 2812,660 2817,604 2823,549 2829,500 2836,451 2843,410 2850,368 2859,326 2867,291 2876,263 2885,236 2894,208 2905,187 2915,166 2926,145 2937,131 2949,117 2961,110 2973,103 2986,97 2999,97 3020,97 3031,97 3040,103 3077,131 3111,159 3141,201 3143,820 3122,820 3113,451 3101,410 3095,389 3089,375 3082,354 3076,340 3069,326 3061,312 3054,298 3047,291 3039,284 3032,277 3016,263 3002,263 2992,263 2984,270 2974,270 2966,284 2958,291 2950,305 2943,319 2935,333 2928,354 2922,375 2914,396 2908,423 2903,451 2897,479 2891,514 2886,549 2881,590 2877,632 2872,681 2868,730 2865,778 2862,834 2859,890 2856,952 2854,1015 2850,1084 2849,1154 2847,1230 2846,1390 2845,1564 2846,1717 2846,1794 2847,1864 2849,1933 2850,2003 2854,2065 2856,2121 2858,2177 2861,2232 2864,2288 2868,2337 2871,2385 2876,2434 2880,2476 2885,2517 2890,2552 2896,2594 2901,2622 2907,2657 2913,2684 2920,2712 2926,2733 2933,2754 2941,2775 2948,2789 2955,2803 2964,2810 2972,2817 2981,2824 2989,2831 2998,2831 3008,2831 3017,2824 3036,2810 3045,2803 3054,2789 3070,2768 3083,2733 3091,2719 3094,2705 3097,2698 3103,2677 3109,2657 3113,2636 3117,2615 3130,2197 3149,2197 3148,2858 3134,2886 3125,2893 3117,2907 3081,2949 3071,2956 3061,2963 3040,2977 3019,2984 3008,2991 2997,2991 Z"/> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/files/assets/img/favicon-96x96.png b/files/assets/img/favicon-96x96.png new file mode 100644 index 0000000..30cc188 Binary files /dev/null and b/files/assets/img/favicon-96x96.png differ diff --git a/files/assets/img/favicon.ico b/files/assets/img/favicon.ico new file mode 100644 index 0000000..75a5b1b Binary files /dev/null and b/files/assets/img/favicon.ico differ diff --git a/files/assets/img/favicon.svg b/files/assets/img/favicon.svg new file mode 100644 index 0000000..a14e8cf --- /dev/null +++ b/files/assets/img/favicon.svg @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.2" width="31.7mm" height="31.7mm" viewBox="0 0 3170 3170" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve"> + <defs class="ClipPathGroup"> + <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse"> + <rect x="0" y="0" width="3170" height="3170"/> + </clipPath> + <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse"> + <rect x="3" y="3" width="3164" height="3164"/> + </clipPath> + </defs> + <defs class="TextShapeIndex"> + <g ooo:slide="id1" ooo:id-list="id3 id4 id5"/> + </defs> + <defs class="EmbeddedBulletChars"> + <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/> + </g> + <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/> + </g> + <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/> + </g> + <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/> + </g> + <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/> + </g> + <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/> + </g> + <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/> + </g> + <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/> + </g> + <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/> + </g> + <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/> + </g> + </defs> + <defs class="TextEmbeddedBitmaps"/> + <g> + <g id="id2" class="Master_Slide"> + <g id="bg-id2" class="Background"/> + <g id="bo-id2" class="BackgroundObjects"/> + </g> + </g> + <g class="SlideGroup"> + <g> + <g id="container-id1"> + <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)"> + <g class="Page"> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id3"> + <rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="3171" height="3171"/> + <path fill="rgb(255,255,255)" stroke="none" d="M 1585,3170 L 0,3170 0,0 3170,0 3170,3170 1585,3170 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id4"> + <rect class="BoundingBox" stroke="none" fill="none" x="50" y="100" width="2151" height="2895"/> + <path fill="rgb(255,0,0)" stroke="none" d="M 50,2842 L 103,2787 103,299 50,244 50,134 359,134 359,809 339,809 329,348 324,341 318,341 305,334 291,327 284,327 277,327 270,320 263,320 249,320 229,320 162,320 162,1423 274,1423 283,1085 303,1085 303,1953 283,1953 274,1615 162,1615 162,2766 243,2766 252,2766 261,2766 271,2759 280,2759 288,2759 296,2759 303,2752 310,2752 313,2752 317,2752 323,2746 333,2739 341,2732 344,2732 347,2732 365,2208 386,2208 380,2952 50,2952 50,2842 Z M 783,1526 L 783,1450 782,1374 781,1298 780,1230 778,1161 775,1099 773,1037 770,982 767,926 763,878 759,823 755,775 750,733 745,685 740,644 734,609 728,575 722,541 715,513 709,478 701,458 693,430 685,410 677,389 669,375 660,354 651,348 642,334 632,327 623,327 603,320 547,320 547,2759 557,2759 562,2759 567,2766 590,2766 596,2773 602,2773 613,2773 635,2773 645,2773 654,2766 663,2759 671,2752 679,2746 687,2732 696,2711 703,2697 710,2677 716,2649 722,2628 728,2601 733,2566 738,2532 743,2497 748,2456 752,2415 756,2373 760,2332 763,2284 767,2236 769,2181 772,2125 774,2070 778,1946 781,1815 782,1677 783,1526 Z M 623,127 L 648,134 672,148 683,155 694,168 706,189 716,203 726,224 736,244 745,272 754,299 763,334 771,368 779,403 786,444 793,485 800,534 807,582 813,637 818,692 823,754 828,816 832,878 836,947 839,1016 841,1092 843,1174 845,1257 846,1340 847,1429 847,1526 847,1609 846,1691 845,1774 844,1850 842,1926 840,2001 838,2070 835,2139 831,2208 828,2270 823,2325 819,2380 814,2435 808,2491 801,2539 795,2587 788,2635 781,2677 773,2711 765,2746 757,2780 748,2808 739,2835 729,2863 719,2883 708,2904 697,2918 685,2932 673,2945 661,2952 648,2959 635,2959 597,2959 556,2959 518,2959 489,2959 435,2959 435,2842 489,2787 489,299 435,244 435,127 623,127 Z M 1229,292 L 1174,237 1174,127 1314,127 1314,237 1262,292 1262,1981 1262,2029 1261,2077 1260,2174 1258,2263 1255,2360 1253,2401 1251,2442 1248,2484 1245,2525 1242,2566 1238,2608 1234,2642 1229,2677 1224,2711 1219,2746 1214,2773 1208,2808 1202,2835 1195,2856 1188,2883 1181,2904 1173,2925 1164,2945 1155,2959 1146,2973 1136,2980 1124,2987 1113,2994 1102,2994 1082,2987 1064,2980 1047,2959 1031,2932 1015,2897 1008,2876 1002,2849 996,2828 990,2801 984,2773 979,2739 974,2704 970,2670 965,2635 961,2601 958,2559 954,2518 952,2477 949,2435 947,2387 945,2339 941,2243 940,2132 939,2022 939,292 885,237 885,127 1051,127 1051,237 997,292 997,1988 997,2070 998,2112 999,2153 999,2194 1000,2229 1002,2270 1003,2305 1005,2339 1006,2373 1008,2408 1011,2435 1013,2463 1016,2491 1020,2518 1023,2546 1026,2573 1030,2594 1034,2615 1038,2635 1043,2656 1047,2677 1052,2690 1057,2704 1062,2718 1068,2725 1073,2739 1080,2746 1086,2752 1093,2752 1100,2759 1107,2759 1115,2759 1122,2752 1130,2752 1137,2746 1144,2739 1150,2725 1156,2718 1162,2704 1168,2690 1173,2677 1178,2656 1183,2642 1188,2622 1192,2601 1196,2573 1200,2553 1204,2525 1207,2497 1210,2470 1213,2442 1215,2408 1218,2380 1220,2346 1222,2311 1225,2236 1226,2201 1227,2160 1228,2118 1228,2077 1229,2036 1229,1994 1229,292 Z M 1566,2994 L 1553,2994 1541,2987 1529,2980 1518,2966 1507,2952 1496,2938 1486,2918 1476,2897 1466,2870 1457,2842 1447,2814 1439,2780 1431,2746 1423,2704 1416,2663 1409,2615 1402,2566 1396,2518 1390,2470 1385,2415 1380,2360 1376,2298 1372,2236 1368,2167 1365,2098 1362,2036 1359,1960 1357,1891 1356,1815 1355,1733 1354,1657 1354,1574 1354,1478 1355,1388 1356,1298 1357,1216 1359,1133 1362,1057 1365,982 1368,913 1372,844 1376,782 1380,720 1385,658 1391,603 1396,554 1402,506 1409,458 1416,410 1423,368 1431,334 1439,299 1447,265 1457,237 1466,210 1476,182 1486,162 1497,148 1508,134 1519,120 1530,113 1542,106 1554,100 1567,100 1588,100 1598,100 1607,106 1626,113 1634,120 1643,127 1651,134 1660,148 1668,155 1676,162 1705,203 1707,823 1687,823 1678,458 1673,437 1667,416 1660,396 1654,375 1647,354 1641,341 1634,327 1627,313 1620,299 1613,292 1606,286 1599,279 1584,265 1570,265 1561,265 1551,272 1543,272 1535,286 1527,292 1519,306 1512,320 1505,334 1498,354 1492,375 1485,396 1479,423 1474,451 1468,485 1463,520 1458,554 1453,596 1449,637 1444,678 1440,727 1437,782 1433,837 1431,892 1428,954 1426,1016 1424,1085 1422,1154 1420,1230 1419,1312 1418,1395 1417,1478 1417,1567 1417,1643 1418,1726 1419,1795 1420,1870 1421,1932 1423,2001 1427,2125 1430,2181 1433,2236 1436,2291 1439,2339 1443,2387 1447,2435 1452,2477 1457,2518 1462,2553 1467,2594 1473,2628 1478,2656 1485,2684 1491,2711 1497,2732 1504,2752 1511,2773 1518,2787 1525,2801 1533,2814 1541,2821 1549,2821 1558,2828 1567,2828 1576,2828 1585,2828 1594,2821 1599,2821 1603,2814 1619,2794 1627,2780 1635,2766 1642,2752 1649,2732 1656,2718 1662,2697 1668,2677 1673,2663 1676,2649 1678,2642 1680,2628 1682,2622 1694,2201 1713,2201 1712,2863 1698,2890 1690,2897 1682,2911 1646,2952 1637,2959 1627,2966 1607,2980 1587,2987 1576,2994 1566,2994 Z M 1891,2842 L 1891,2952 1754,2952 1754,2842 1801,2787 1942,106 2001,106 2147,2787 2199,2842 2199,2952 2025,2952 2025,2842 2080,2787 2039,1967 1876,1967 1835,2787 1891,2842 Z M 1956,403 L 1886,1781 2030,1781 1956,403 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.CustomShape"> + <g id="id5"> + <rect class="BoundingBox" stroke="none" fill="none" x="2150" y="97" width="1000" height="2895"/> + <path fill="rgb(128,128,128)" stroke="none" d="M 2238,2949 L 2238,2837 2306,2782 2306,305 2289,305 2220,319 2206,326 2196,333 2180,347 2170,792 2150,792 2150,124 2524,124 2524,792 2503,792 2495,347 2493,347 2492,340 2487,340 2482,340 2477,333 2471,326 2464,326 2451,319 2443,319 2435,319 2427,312 2418,312 2382,312 2367,312 2367,2782 2435,2837 2435,2949 2238,2949 Z M 2675,2782 L 2730,2837 2730,2949 2559,2949 2559,2837 2613,2782 2613,291 2559,236 2559,124 2730,124 2730,236 2675,291 2675,2782 Z M 2997,2991 L 2985,2991 2972,2984 2961,2977 2948,2963 2937,2949 2926,2935 2915,2914 2905,2893 2894,2865 2885,2837 2876,2810 2867,2775 2859,2740 2850,2698 2843,2657 2836,2615 2828,2566 2822,2517 2817,2469 2811,2413 2806,2357 2801,2295 2797,2232 2793,2170 2790,2100 2786,2031 2784,1961 2782,1884 2780,1808 2779,1731 2778,1655 2778,1571 2778,1481 2779,1390 2780,1300 2782,1217 2784,1133 2786,1057 2790,980 2794,910 2798,841 2802,778 2806,716 2812,660 2817,604 2823,549 2829,500 2836,451 2843,410 2850,368 2859,326 2867,291 2876,263 2885,236 2894,208 2905,187 2915,166 2926,145 2937,131 2949,117 2961,110 2973,103 2986,97 2999,97 3020,97 3031,97 3040,103 3077,131 3111,159 3141,201 3143,820 3122,820 3113,451 3101,410 3095,389 3089,375 3082,354 3076,340 3069,326 3061,312 3054,298 3047,291 3039,284 3032,277 3016,263 3002,263 2992,263 2984,270 2974,270 2966,284 2958,291 2950,305 2943,319 2935,333 2928,354 2922,375 2914,396 2908,423 2903,451 2897,479 2891,514 2886,549 2881,590 2877,632 2872,681 2868,730 2865,778 2862,834 2859,890 2856,952 2854,1015 2850,1084 2849,1154 2847,1230 2846,1390 2845,1564 2846,1717 2846,1794 2847,1864 2849,1933 2850,2003 2854,2065 2856,2121 2858,2177 2861,2232 2864,2288 2868,2337 2871,2385 2876,2434 2880,2476 2885,2517 2890,2552 2896,2594 2901,2622 2907,2657 2913,2684 2920,2712 2926,2733 2933,2754 2941,2775 2948,2789 2955,2803 2964,2810 2972,2817 2981,2824 2989,2831 2998,2831 3008,2831 3017,2824 3036,2810 3045,2803 3054,2789 3070,2768 3083,2733 3091,2719 3094,2705 3097,2698 3103,2677 3109,2657 3113,2636 3117,2615 3130,2197 3149,2197 3148,2858 3134,2886 3125,2893 3117,2907 3081,2949 3071,2956 3061,2963 3040,2977 3019,2984 3008,2991 2997,2991 Z"/> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/files/assets/img/header.jpg b/files/assets/img/header.jpg new file mode 100644 index 0000000..6d71974 Binary files /dev/null and b/files/assets/img/header.jpg differ diff --git a/files/assets/img/liberapay_logo.svg b/files/assets/img/liberapay_logo.svg new file mode 100644 index 0000000..ec2a0c1 --- /dev/null +++ b/files/assets/img/liberapay_logo.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg"><rect fill="#f6c915" width="80" height="80" rx="10"/><path fill="#1a171b" d="M32.73 56.2651c-2.5867 0-4.6175-.3376-6.0925-1.0107s-2.5308-1.5936-3.1708-2.7611-.9458-2.4933-.9275-4.015.2267-3.1234.6284-4.8357l6.9391-29.0143 8.47-1.3108-7.595 31.4733c-.1458.655-.2275 1.2567-.2458 1.8025s.0817 1.0292.3 1.4475.5917.7566 1.12 1.0108 1.2658.42 2.2133.4925zM40.5333 28.0209c1.46-.4367 3.1267-.8284 5.0025-1.175s3.9075-.5183 6.0933-.5183 3.7985.3092 5.2726.9283 2.6864 1.4667 3.6341 2.5409 1.6475 2.3316 2.1024 3.77.6832 2.9783.6832 4.6183c0 2.6583-.4373 5.09-1.3214 7.2942s-2.076 4.1075-3.6237 5.71-3.4059 2.851-5.5763 3.7475-4.5235 1.3344-7.0718 1.3344c-1.2391 0-2.4775-.1104-3.7158-.3296l-2.4592 9.8912h-8.0865zM43.4867 49.3867c.6192.1458 1.3842.2133 2.295.2133 1.42 0 2.7133-.2583 3.8792-.7875s2.1583-1.265 2.9783-2.2125 1.4557-2.0842 1.9117-3.415.6827-2.795.6827-4.3983-.3467-2.8958-1.0379-3.9892-1.894-1.6391-3.6057-1.6391c-1.1667 0-2.2592.1092-3.2792.3283z"/></svg> diff --git a/files/assets/img/mastodon.svg b/files/assets/img/mastodon.svg new file mode 100644 index 0000000..508a311 --- /dev/null +++ b/files/assets/img/mastodon.svg @@ -0,0 +1,10 @@ +<svg width="65" height="65" viewBox="0 0 61 65" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M60.7539 14.3904C59.8143 7.40642 53.7273 1.90257 46.5117 0.836066C45.2943 0.655854 40.6819 0 29.9973 0H29.9175C19.2299 0 16.937 0.655854 15.7196 0.836066C8.70488 1.87302 2.29885 6.81852 0.744617 13.8852C-0.00294988 17.3654 -0.0827298 21.2237 0.0561464 24.7629C0.254119 29.8384 0.292531 34.905 0.753482 39.9598C1.07215 43.3175 1.62806 46.6484 2.41704 49.9276C3.89445 55.9839 9.87499 61.0239 15.7344 63.0801C22.0077 65.2244 28.7542 65.5804 35.2184 64.1082C35.9295 63.9428 36.6318 63.7508 37.3252 63.5321C38.8971 63.0329 40.738 62.4745 42.0913 61.4937C42.1099 61.4799 42.1251 61.4621 42.1358 61.4417C42.1466 61.4212 42.1526 61.3986 42.1534 61.3755V56.4773C42.153 56.4557 42.1479 56.4345 42.1383 56.4151C42.1287 56.3958 42.1149 56.3788 42.0979 56.3655C42.0809 56.3522 42.0611 56.3429 42.04 56.3382C42.019 56.3335 41.9971 56.3336 41.9761 56.3384C37.8345 57.3276 33.5905 57.8234 29.3324 57.8156C22.0045 57.8156 20.0336 54.3384 19.4693 52.8908C19.0156 51.6397 18.7275 50.3346 18.6124 49.0088C18.6112 48.9866 18.6153 48.9643 18.6243 48.9439C18.6333 48.9236 18.647 48.9056 18.6643 48.8915C18.6816 48.8774 18.7019 48.8675 18.7237 48.8628C18.7455 48.858 18.7681 48.8585 18.7897 48.8641C22.8622 49.8465 27.037 50.3423 31.2265 50.3412C32.234 50.3412 33.2387 50.3412 34.2463 50.3146C38.4598 50.1964 42.9009 49.9808 47.0465 49.1713C47.1499 49.1506 47.2534 49.1329 47.342 49.1063C53.881 47.8507 60.1038 43.9097 60.7362 33.9301C60.7598 33.5372 60.8189 29.8148 60.8189 29.4071C60.8218 28.0215 61.2651 19.5781 60.7539 14.3904Z" fill="url(#paint0_linear_89_8)"/> +<path d="M50.3943 22.237V39.5876H43.5185V22.7481C43.5185 19.2029 42.0411 17.3949 39.036 17.3949C35.7325 17.3949 34.0778 19.5338 34.0778 23.7585V32.9759H27.2434V23.7585C27.2434 19.5338 25.5857 17.3949 22.2822 17.3949C19.2949 17.3949 17.8027 19.2029 17.8027 22.7481V39.5876H10.9298V22.237C10.9298 18.6918 11.835 15.8754 13.6453 13.7877C15.5128 11.7049 17.9623 10.6355 21.0028 10.6355C24.522 10.6355 27.1813 11.9885 28.9542 14.6917L30.665 17.5633L32.3788 14.6917C34.1517 11.9885 36.811 10.6355 40.3243 10.6355C43.3619 10.6355 45.8114 11.7049 47.6847 13.7877C49.4931 15.8734 50.3963 18.6899 50.3943 22.237Z" fill="white"/> +<defs> +<linearGradient id="paint0_linear_89_8" x1="30.5" y1="0" x2="30.5" y2="65" gradientUnits="userSpaceOnUse"> +<stop stop-color="#6364FF"/> +<stop offset="1" stop-color="#563ACC"/> +</linearGradient> +</defs> +</svg> \ No newline at end of file diff --git a/files/assets/img/nextcloud_logo.svg b/files/assets/img/nextcloud_logo.svg new file mode 100644 index 0000000..a970d38 --- /dev/null +++ b/files/assets/img/nextcloud_logo.svg @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> + <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> +<svg xmlns="http://www.w3.org/2000/svg" +aria-label="NextCloud" role="img" +viewBox="0 0 512 512"> + <rect +width="512" height="512" +rx="15%" +fill="#0082c9"/> + <g stroke="#ffffff" stroke-width="33" fill="none"> + <circle r="40" cy="256" cx="120"/> + <circle r="71" cy="256" cx="256"/> + <circle r="40" cy="256" cx="392"/> + </g> + </svg> \ No newline at end of file diff --git a/files/assets/img/paypal_logo.svg b/files/assets/img/paypal_logo.svg new file mode 100644 index 0000000..5e4d967 --- /dev/null +++ b/files/assets/img/paypal_logo.svg @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.2" width="29.4mm" height="34.6mm" viewBox="0 0 2940 3460" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve"> + <defs class="ClipPathGroup"> + <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse"> + <rect x="0" y="0" width="2940" height="3460"/> + </clipPath> + <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse"> + <rect x="2" y="3" width="2935" height="3454"/> + </clipPath> + </defs> + <defs class="TextShapeIndex"> + <g ooo:slide="id1" ooo:id-list="id3 id4 id5"/> + </defs> + <defs class="EmbeddedBulletChars"> + <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/> + </g> + <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/> + </g> + <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/> + </g> + <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/> + </g> + <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/> + </g> + <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/> + </g> + <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/> + </g> + <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/> + </g> + <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/> + </g> + <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/> + </g> + </defs> + <defs class="TextEmbeddedBitmaps"/> + <g> + <g id="id2" class="Master_Slide"> + <g id="bg-id2" class="Background"/> + <g id="bo-id2" class="BackgroundObjects"/> + </g> + </g> + <g class="SlideGroup"> + <g> + <g id="container-id1"> + <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)"> + <g class="Page"> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id3"> + <rect class="BoundingBox" stroke="none" fill="none" x="-1" y="0" width="2939" height="3466"/> + <path fill="rgb(255,255,255)" fill-opacity="0.678" stroke="rgb(255,255,255)" stroke-opacity="0.678" d="M 2646,880 C 2688,611 2646,427 2500,261 2339,78 2049,0 1678,0 L 602,0 C 526,0 461,55 449,130 L 1,2973 C -8,3029 36,3080 92,3080 L 757,3080 711,3371 C 704,3420 741,3465 791,3465 L 1351,3465 C 1418,3465 1474,3416 1485,3351 L 1490,3322 1596,2653 1602,2616 C 1613,2550 1669,2502 1736,2502 L 1819,2502 C 2362,2502 2787,2282 2912,1644 2963,1377 2937,1155 2799,998 2758,951 2706,912 2646,880 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id4"> + <rect class="BoundingBox" stroke="none" fill="none" x="-1" y="0" width="2664" height="3081"/> + <path fill="rgb(255,255,255)" fill-opacity="0.698" stroke="rgb(255,255,255)" stroke-opacity="0.698" d="M 2646,880 C 2688,611 2646,427 2500,261 2339,78 2050,0 1679,0 L 602,0 C 526,0 461,55 449,130 L 1,2973 C -8,3030 36,3080 92,3080 L 757,3080 924,2021 919,2055 C 931,1980 995,1924 1071,1924 L 1387,1924 C 2007,1924 2493,1672 2635,943 2639,922 2643,901 2646,880 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id5"> + <rect class="BoundingBox" stroke="none" fill="none" x="-1" y="0" width="2664" height="3081"/> + <path fill="rgb(255,255,255)" stroke="none" d="M 1104,884 C 1111,839 1140,802 1179,783 1196,775 1216,770 1237,770 L 2081,770 C 2181,770 2274,777 2359,790 2384,794 2407,799 2430,804 2453,809 2476,815 2497,821 2508,824 2519,828 2529,831 2571,845 2610,861 2646,880 2688,611 2646,427 2500,261 2339,78 2050,0 1679,0 L 602,0 C 526,0 461,55 449,130 L 1,2973 C -8,3030 36,3080 92,3080 L 757,3080 924,2021 1104,884 Z"/> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/files/assets/img/peertube.svg b/files/assets/img/peertube.svg new file mode 100644 index 0000000..bbfe2c4 --- /dev/null +++ b/files/assets/img/peertube.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="69.8 0 372.4 512"><path d="M69.8 0v256L256 139.6" style="fill:#211f20"/><path d="M69.8 256v256L256 372.4" style="fill:#737373"/><path d="M256 139.6v232.7L442.2 256" style="fill:#f1680d"/><path d="M256 372.4V139.6L69.8 256z"/></svg> \ No newline at end of file diff --git a/files/assets/img/site.webmanifest b/files/assets/img/site.webmanifest new file mode 100644 index 0000000..f1afd71 --- /dev/null +++ b/files/assets/img/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "Educatic", + "short_name": "Educatic", + "icons": [ + { + "src": "/assets/img/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/assets/img/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/files/assets/img/web-app-manifest-192x192.png b/files/assets/img/web-app-manifest-192x192.png new file mode 100644 index 0000000..4f7c02f Binary files /dev/null and b/files/assets/img/web-app-manifest-192x192.png differ diff --git a/files/assets/img/web-app-manifest-512x512.png b/files/assets/img/web-app-manifest-512x512.png new file mode 100644 index 0000000..876640d Binary files /dev/null and b/files/assets/img/web-app-manifest-512x512.png differ diff --git a/files/assets/img/xmpp.svg b/files/assets/img/xmpp.svg new file mode 100644 index 0000000..8df52ae --- /dev/null +++ b/files/assets/img/xmpp.svg @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.2" width="14.8mm" height="14.8mm" viewBox="0 0 1480 1480" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve"> + <defs class="ClipPathGroup"> + <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse"> + <rect x="0" y="0" width="1480" height="1480"/> + </clipPath> + <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse"> + <rect x="1" y="1" width="1478" height="1478"/> + </clipPath> + </defs> + <defs class="TextShapeIndex"> + <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8"/> + </defs> + <defs class="EmbeddedBulletChars"> + <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/> + </g> + <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/> + </g> + <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/> + </g> + <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/> + </g> + <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/> + </g> + <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/> + </g> + <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/> + </g> + <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/> + </g> + <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/> + </g> + <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)"> + <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/> + </g> + </defs> + <defs class="TextEmbeddedBitmaps"/> + <g> + <g id="id2" class="Master_Slide"> + <g id="bg-id2" class="Background"/> + <g id="bo-id2" class="BackgroundObjects"/> + </g> + </g> + <g class="SlideGroup"> + <g> + <g id="container-id1"> + <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)"> + <g class="Page"> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id3"> + <rect class="BoundingBox" stroke="none" fill="none" x="359" y="293" width="954" height="981"/> + <path fill="rgb(245,127,23)" stroke="none" d="M 359,1206 L 426,1273 C 865,1232 1312,793 1312,323 L 1243,293 1030,358 C 1030,358 995,1171 359,1206 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id4"> + <rect class="BoundingBox" stroke="none" fill="none" x="359" y="283" width="920" height="995"/> + <path fill="rgb(230,81,0)" stroke="none" d="M 1277,283 C 1261,1070 638,1277 359,1277 L 359,1206 C 737,1206 1182,917 1206,305 L 1277,283 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id5"> + <rect class="BoundingBox" stroke="none" fill="none" x="791" y="218" width="698" height="941"/> + <path fill="rgb(2,136,209)" stroke="none" d="M 1488,218 C 1488,573 1159,965 791,1157 1035,1023 1267,759 1276,283 L 1488,218 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id6"> + <rect class="BoundingBox" stroke="none" fill="none" x="182" y="293" width="954" height="981"/> + <path fill="rgb(156,204,101)" stroke="none" d="M 1135,1206 L 1068,1273 C 629,1232 182,793 182,323 L 252,293 465,358 C 465,358 500,1171 1135,1206 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id7"> + <rect class="BoundingBox" stroke="none" fill="none" x="218" y="283" width="919" height="995"/> + <path fill="rgb(104,159,56)" stroke="none" d="M 218,283 C 234,1070 857,1277 1136,1277 L 1136,1206 C 758,1206 313,917 289,305 L 218,283 Z"/> + </g> + </g> + <g class="com.sun.star.drawing.ClosedBezierShape"> + <g id="id8"> + <rect class="BoundingBox" stroke="none" fill="none" x="6" y="218" width="698" height="941"/> + <path fill="rgb(2,136,209)" stroke="none" d="M 6,218 C 6,573 335,965 703,1157 459,1023 228,759 218,283 L 6,218 Z"/> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/images/aprendiendo3.jpg b/images/aprendiendo3.jpg new file mode 100644 index 0000000..5678105 Binary files /dev/null and b/images/aprendiendo3.jpg differ diff --git a/images/aprendizaje2.jpg b/images/aprendizaje2.jpg new file mode 100644 index 0000000..4bba1bd Binary files /dev/null and b/images/aprendizaje2.jpg differ diff --git a/pages/communications.md b/pages/communications.md new file mode 100644 index 0000000..ecf2c2c --- /dev/null +++ b/pages/communications.md @@ -0,0 +1,36 @@ +<!-- +.. title: Comunicaciones +.. slug: communications +.. date: 2025-08-02 19:44:02 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Comunicaciones relacionadas con EDUCATIC +.. type: text +--> + +<!-- {{% comm type='' date='' media='' link='' '' %}} --> + +{{% comm type='press' date='23/07/2024' media='El Diario - CanariasAhora' link='https://www.eldiario.es/canariasahora/opinion/apagon-informatico-global-causado-windows-tecnologia-control-aprenderemos_132_11542142.html' 'El porqué del apagón informático global causado a Windows: tecnología sin control ¿Aprenderemos? ' %}} + +{{% comm type='press' date='30/04/2024' media='El Diario - CanariasAhora' link='https://www.eldiario.es/canariasahora/opinion/punto-aparte_132_11330264.html' '¿Punto y aparte? Un cambio de modelo requiere cambios radicales ¿estamos preparados?' %} + +{{% comm type='press' date='15/01/2022' media='El Diario - CanariasAhora' link='https://www.eldiario.es/canariasahora/opinion/europa-no-debe-perder-tren-liderar-tecnologia-servicio-humanidad_132_8659454.html' 'Europa no debe perder el tren de liderar la tecnología al servicio de la humanidad' %}} + +{{% comm type='video' date='25/06/2021' media='EsLibre 2021' link='https://commons.wikimedia.org/wiki/File:EsLibre_2021_P26_-_Luis_Fajardo_-_Demanda_judicial_contra_los_convenios_con_Google,_la_necesidad_de_la_acci%C3%B3n_colectiva.webm' 'Demanda judicial contra los convenios con Google, la necesidad de la acción colectiva' %}} + +{{% comm type='video' date='25/06/2021' media='EsLibre 2021' link='https://commons.wikimedia.org/wiki/File:EsLibre_2021_P02_-_Luis_Fajardo_-_TXS.es,_una_fundaci%C3%B3n_necesaria.webm' 'TXS.es, una fundación necesaria' %}} + +{{% comm type='video' date='04/06/2021' media='RTVE Canarias - Telecanarias' link='https://tuvideo.encanarias.info/videos/watch/43167a59-d5b6-4d06-bf9c-c27ceb5200eb' 'EDUCATIC se propone judicializar los Convenios de Educación con Google' %}} + +{{% comm type='audio' date='03/06/2021' media='Onda Cero - Más de Uno Canarias' link='https://www.ondacero.es/emisoras/canarias/las-palmas/audios-podcast/mas-de-uno/tecnologia-etica-aulas_2021060360b8c4e9f725290001ef9d65.html' ' Tecnología ética en las aulas' %}} + +{{% comm type='press' date='29/05/2021' media='El Diario - CanariasAhora' link='https://www.eldiario.es/canariasahora/sociedad/alternativa-google-aulas-docentes-canarios-promueven-tecnologia-etica-educacion_1_7981842.html' 'Una alternativa a Google en las aulas: docentes canarios promueven el uso de tecnología ética en Educación' %}} + +{{% comm type='press' date='07/02/2021' media='El Diario - CanariasAhora' link='https://www.eldiario.es/canariasahora/sociedad/irrupcion-google-escuela-publica-canaria-alarma-expertos-privacidad-datos_1_7198094.html' 'La irrupción de Google en la escuela pública canaria alarma a expertos en privacidad de datos' %}} + +{{% comm type='social' date='21/12/2020' media='Diaspora - encanarias.info' link='https://encanarias.info/posts/19db429025a40139409b26860af9fe8c' 'Google Classroom no es una opción para la Educación en Europa' %}} + +{{% comm type='video' date='18/12/2020' media='EDUCATIC - Entornos Virtuales de enseñanza-aprendizaje' link='https://tuvideo.encanarias.info/videos/watch/368cc981-1292-4bb9-9a55-8ca66b35770e' '¿Plataformas gratuitas en educación?' %}} + + diff --git a/pages/communications.md~ b/pages/communications.md~ new file mode 100644 index 0000000..543feaf --- /dev/null +++ b/pages/communications.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: communications +.. slug: communications +.. date: 2025-08-02 19:44:02 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/contact.md b/pages/contact.md new file mode 100644 index 0000000..7fdaff5 --- /dev/null +++ b/pages/contact.md @@ -0,0 +1,28 @@ +<!-- +.. title: Contacto +.. slug: contact +.. date: 2025-08-03 19:02:05 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Contactos de EDUCATIC +.. type: text +--> + +* Correo electrónico: + + [<img src="/assets/img/email.svg" width="45" height="45" alt="email" class="d-inline-block align-center">]({{% url 'email' %}})   [{{% url 'email' delprt=True %}}]({{% url 'email' %}}) + +* Grupo de mensajería {{% blog_title %}}-GENERAL [^1]: +[^1]: Utilizamos el protocolo XMPP en nuestro grupo {{% blog_title %}}-GENERAL, para {{% doc %}}unirse a él necesitarás tener una cuenta y un cliente de mensajería XMPP <xmpp>{{% /doc %}} + + [<img src="/assets/img/xmpp.svg" width="45" height="45" alt="XMPP" class="d-inline-block align-center">]({{% url 'xmpp' suffix='?join' %}})   XMPP: [{{% url 'xmpp' delprt=True %}}]({{% url 'xmpp' suffix='?join' %}}) + +* Red social [^2]: +[^2]: Para que pueda seguir nuestras novedades, sin comprometer tus datos personales, utilizamos redes sociales distribuidas + + [<img src="/assets/img/mastodon.svg" width="45" height="45" alt="Mastodon" class="d-inline-block align-center">]({{% url 'mastodon' %}})   Mastodon: [{{% url 'mastodon' delprt=True %}}]({{% url 'mastodon' %}}) + +* Repositorio de vídeos [^2]: + + [<img src="/assets/img/peertube.svg" width="45" height="45" alt="PeerTube" class="d-inline-block align-center">]({{% url 'peertube' %}})   PeerTube: [{{% url 'peertube' delprt=True %}}]({{% url 'peertube' %}}) diff --git a/pages/contact.md~ b/pages/contact.md~ new file mode 100644 index 0000000..46d244d --- /dev/null +++ b/pages/contact.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: contact +.. slug: contact +.. date: 2025-08-03 19:02:05 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/donate.md b/pages/donate.md new file mode 100644 index 0000000..da20edf --- /dev/null +++ b/pages/donate.md @@ -0,0 +1,31 @@ +<!-- +.. title: Donaciones +.. slug: donate +.. date: 2025-08-02 19:33:00 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Formas de realizar donaciones a EDUCATIC +.. type: text +--> + +Para poder apoyar nuestro proyecto {{% blog_title %}}, si puedes, agradecemos donaciones de los siguientes tipos: + +# Pagos en línea<a href="#olp"></a> + +<center> + {{% button link="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&lc=es&hosted_button_id=3BY3P73M4DLDY" img="/assets/img/paypal_logo.svg" width="350px" "Donar con PayPal o tarjeta" %}} + +   + + {{% button link="https://liberapay.com/EDUCATIC" img="/assets/img/liberapay_logo.svg" width="350px" "Donar periódicamente con Liberapay" %}} +</center> + + +# Transferencias bancarias<a href="#transf"></a> + + EDUCATIC, Tecnologías para la Educación y Transparencia Tecnológica + IBAN: ES39 1491 0001 2730 0014 0239 + BIC/SWIFT: TRIOESMMXXX + +O, si lo prefieres, puedes {{% doc %}}hacerte socio <join>{{% /doc %}} de {{% blog_title %}} abonándonos periódicamente tu cuota. diff --git a/pages/donate.md~ b/pages/donate.md~ new file mode 100644 index 0000000..26a10ce --- /dev/null +++ b/pages/donate.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: donate +.. slug: donate +.. date: 2025-08-02 19:33:00 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/events.md b/pages/events.md new file mode 100644 index 0000000..c7e0ff5 --- /dev/null +++ b/pages/events.md @@ -0,0 +1,12 @@ +<!-- +.. title: Eventos +.. slug: events +.. date: 2025-08-06 19:29:36 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Eventos que organiza o participa EDUCATIC +.. type: text +--> + + diff --git a/pages/events.md~ b/pages/events.md~ new file mode 100644 index 0000000..e7ec310 --- /dev/null +++ b/pages/events.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: events +.. slug: events +.. date: 2025-08-06 19:29:36 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/foundation.md b/pages/foundation.md new file mode 100644 index 0000000..b173449 --- /dev/null +++ b/pages/foundation.md @@ -0,0 +1,27 @@ +<!-- +.. title: Fundación TXS.es +.. slug: foundation +.. date: 2025-08-02 18:02:02 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Fundación TXS.es +.. type: text +--> + + +En los estatutos de {{% blog_title %}} ya previmos la necesidad de convertirnos en fundación por los siguientes motivos: + +* **Sacar a Google (y análogos) de la escuela**: Interponer las demandas judiciales necesarias en defensa de un correcto uso de la tecnología, p. ej. contra los convenios que han introducido a Google y a otras empresas del capitalismo de la vigilancia en la educación en España. Si lo hacemos como asociación, tenemos unos costes que no podemos asumir en el número de procedimientos que se requiere mantener; mientras que las fundaciones tienen un mejor trato (artículos [2](https://www.boe.es/buscar/act.php?id=BOE-A-1996-750#a2).c.2º y [36](https://www.boe.es/buscar/act.php?id=BOE-A-1996-750#a36) de la Ley de Justicia Gratuita). + +* **Darte servicios tecnológicos sin fisgonear**: para mantener y mejorar servicios de uso genérico y alternativos a los de empresas del capitalismo salvaje de la vigilancia. Queremos que se pueda disfrutar "gratuitamente" (lo que cada uno pueda aportar) de estos servicios para siempre. Contar con una Fundación nos ayuda a competir con los gigantes que ofrecen tecnología "gratis", a cambio del ilegal negocio de los datos personales, tu aportación a la fundación se te devuelve hasta en un 80% en el IRPF, lo que hace más asequible financiar entre todos estos servicios de calidad. + +* **Dar servicios TICs éticos en educación**: para mantener y mejorar servicios TICs éticamente neutros de uso en la docencia como plataformas de gestión del aprendizaje, videoconferencias seguras, herramienta de trabajo colaborativo, o repositorios documentales. + +* **Para divulgar y formar sobre servicios TICs**: por ejemplo, realizar manuales y documentación que sirva para la formación en TICs, porque la capacitación tecnológica no es enseñar a acceder a una plataforma de una multinacional, ni a usar sus recursos, sino a comprender cómo funcionan las tecnologías, para poder valorar qué se quiere usar, y qué se pone en juego cuando se usan unas u otras herramientas, conforme exige el [artículo 83 LOPDgdd](https://www.boe.es/buscar/act.php?id=BOE-A-2018-16673#a8-5). + +* **Velar por el cumplimiento normativo en protección de los valores del software, el conocimiento y la cultura libres**: promoviendo su estudio y conocimiento, e impulsanso mejoras legislativas que aproximen la legislación al concenso social en materias como propiedad intelectual e industrial, o el respeto a la privacidad, como medio de lucha contra un modelo económico basado en los datos personales, lesivo para la cultura, la ciencia y el progreso. + +La **Fundación Tecnologías para la Sociedad y Transparencia Tecnológica** (**TXS.es**) se constituye en diálogo con toda la comunidad: te animamos a [leer sobre ella o hacer tus propuestas de mejora]({{% url 'git' suffix='/TXS.es' %}} "Git de TXS.es"). + +Para apoyar la constitución de esta fundación puedes realizar una {{% doc %}}donación <donate>{{% /doc %}} o {{% doc %}}hacerte socio <join>{{% /doc %}} de {{% blog_title %}}. diff --git a/pages/foundation.md~ b/pages/foundation.md~ new file mode 100644 index 0000000..7de2334 --- /dev/null +++ b/pages/foundation.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: foundation +.. slug: foundation +.. date: 2025-08-02 18:02:02 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/index.md b/pages/index.md new file mode 100644 index 0000000..2dba133 --- /dev/null +++ b/pages/index.md @@ -0,0 +1,16 @@ +<!-- +.. title: EDUCATIC +.. slug: index +.. date: 2025-07-24 19:28:07 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: EDUCATIC web +.. type: text +.. hidetitle: True +.. subtitle: Tecnologías para la Educación y Transparencia Tecnológica +--> + +<!-- # <font color="#ff0000" face="serif">EDUCA</font><font color="#808080" face="serif">TIC</font> --> + +# diff --git a/pages/index.md~ b/pages/index.md~ new file mode 100644 index 0000000..c60df47 --- /dev/null +++ b/pages/index.md~ @@ -0,0 +1,16 @@ +<!-- +.. title: Inicio +.. slug: index +.. date: 2025-07-24 19:28:07 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: EDUCATIC web +.. type: text +.. hidetitle: True +--> + +# <font color="#ff0000">EDUCA</font><font color="#808080">TIC</font> +# Tecnologías para la Educación y Transparencia Tecnológica + +![Aprendiendo](/images/aprendizaje2.jpg "Aprendiendo") diff --git a/pages/info.md b/pages/info.md new file mode 100644 index 0000000..2954be0 --- /dev/null +++ b/pages/info.md @@ -0,0 +1,25 @@ +<!-- +.. title: Información legal +.. slug: info +.. date: 2025-07-27 10:56:19 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Información legal y formas de contacto de la asociación EDUCATIC +.. type: text +--> + +Somos una asociación registrada en el Ministerio del Interior con **número de registro 621509**, de la sección 1ª bajo el nombre **EDUCATIC, TECNOLOGÍA PARA LA EDUCACIÓN Y TRANSPARENCIA TECNOLÓGICA**. Nuestro **CIF es G02707297**, y el domicilio social está fijado en C/ Deán Palahí, 16, La Laguna, 38201, España. Seguidamente puede acceder a los documentos (anonimizados) oficiales de la asociación: + +* [**Estatutos**](), aprobados el 18 de octubre de 2020 +* [**Acta fundacional**](), de 18 de octubre de 2020 +* [**Inscripción**](), de 26 de febrero de 2021, en el Registro Nacional de Asociaciones + +## Cómo contactar +EDUCATIC, Tecnologías para la Educación y Transparencia Tecnológica + +<i class='fas fa-envelope'></i> [{{% email %}}]({{% url 'email' %}}) + +<i class='fas fa-phone'></i> +34.922260100 + +<i class='fas fa-map-marker-alt'></i> C/ Deán Palahí, 16. La Laguna - 38201 - España diff --git a/pages/info.md~ b/pages/info.md~ new file mode 100644 index 0000000..0909cf6 --- /dev/null +++ b/pages/info.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: info +.. slug: info +.. date: 2025-07-27 10:56:19 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/join.md b/pages/join.md new file mode 100644 index 0000000..ce4913f --- /dev/null +++ b/pages/join.md @@ -0,0 +1,34 @@ +<!-- +.. title: Asóciate +.. slug: join +.. date: 2025-07-28 20:18:04 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Cómo hacerse socio de EDUCATIC +.. type: text +--> + +{{% blog_title %}} es una {{% doc %}}asociación legalmente constituida <info>{{% /doc %}}, el número de socios y socias con que contemos es fundamental para poder llevar a cabo nuestros objetivos. Si te gusta el proyecto ayúdanos a llevarlo a cabo y financiarlo dándote de alta como socio/a: + +* La **cuota mensual mínima** para _socios ordinarios_ es de **5 €/mes**, aunque agradecemos que incrementes esa cantidad en lo que consideres y puedas +* La **cuota semestral mínima** para **_socios estudiantes_** es de **5 €/semestre**, se solicitará periódicamente la justificación de ser estudiante +* Existe un **perido de pruebas gratuito** para _amigos de EDUCATIC_ de **un semestre**, no renovable ni repetible +* En cualquiera de las tres modalidades anteriores dispondrás de una **cuenta** para hacer uso de **{{% doc %}}nuestros servicios <services>{{% /doc %}}** +* Los **socios ordinarios** podrán solicitar una **cuenta adicional**, a nombre de quien deseen, para hacer uso de nuestros servicios + +La formalización del alta como socio consiste en: + +* **Rellenanar el [formulario de inscripción]()**, indicando la modalidad y cuota elegida +* **Realizar el pago periódico** de tu cuota, si la hubiere, para ello puedes programar una {{% doc %}}transferencia bancaria <donate#transf>{{% /doc %}} o utilizar alguno de nuestros {{% doc %}}servicios de de pagos periódicos <donate#olp>{{% /doc %}} +* Una vez relleno el formulario de inscripción y verificado el pago de la primera cuota si la hubiere, en pocos días **nos pondremos en contacto contigo** para darte la bienvenida y activarte la cuenta de uso de nuestros servicios + +<center> + {{% button link="" img="/assets/img/et_logo_w.svg" "Formulario de inscripción" %}} +</center> + +  + +Si, siendo profesor, únicamente deseas probar {{% doc %}}nuestros servicios <services>{{% /doc %}} con fines de innovación docente, de acuerdo a nuestos {{% doc %}}Términos de uso <tos>{{% /doc %}}, ponte en {{% doc %}}contacto con nosotros <contact>{{% /doc %}}<!-- y/o rellena el formulario de solicitud de recursos-->. + +Para cualaquier duda adicional que necesites saber puedes {{% doc %}}ponerte en contacto con nosotros <contact>{{% /doc %}}. diff --git a/pages/join.md~ b/pages/join.md~ new file mode 100644 index 0000000..6bd9d2c --- /dev/null +++ b/pages/join.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: join +.. slug: join +.. date: 2025-07-28 20:18:04 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/project.md b/pages/project.md new file mode 100644 index 0000000..2347520 --- /dev/null +++ b/pages/project.md @@ -0,0 +1,57 @@ +<!-- +.. title: Visión y proyecto +.. slug: project +.. date: 2025-07-28 18:59:14 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Visión y proyecto de EDUCATIC, heramientas TICs educativas éticamente neutras +.. type: text +--> + +# Frente al capitalismo salvaje de la vigilancia + +La injerencia del modelo tecnológico basado en pago de servicios por datos personales, que en la mayoría de los casos el usuario desconoce qué implicaciones tendrá en su vida, es uno de los principales retos de la normativa europea, el Reglamento General de Protección de Datos, porque la Unión se basa en el respeto al individuo como garantía de nuestros valores democrático. + +El choque entre un modelo económico que se está imponiendo, y los valores que aún defiende la normativa europea, lleva a que ya en dos ocasiones el Tribunal de Justicia de la Unión tumbe los acuerdos para permitir que los datos personales de servicios ofrecidos en Europa se alojen en Estados Unidos, llámese Puerto Seguro, Escudo de Privacidad, o como llamen al próximo que seguramente realicen. Tres son los problemas principales de este modelo: + +1. Alejar las decisiones tecnológicas de los ciudadanos +2. Crear dependencia respecto de servicios que sólo ofrece una única compañía y se organizan de forma no interoperable con los de otros proveedores +3. Generación de perfiles de usuario, con consecuencias imprevisibles en el futuro de los ahora estudiantes + +Entre las consecuencias de este último punto pueden estar privarlos de acceso a un trabajo, a un contrato de seguro, a crédito… sin que conozcan el motivo: dice el algoritmo que no es adecuado, vaya usted a saber si fue por una desacertada respuesta al profesor en la herramienta de clases virtuales, o por un error o un retraso en un ejercicio propuesto ¡¡cuántos no habremos caído en eso, y hemos podido superarlo !! + +Las herramientas que habitualmente usamos no son éticamente neutras, son ejemplos cargados de valores. Un proyecto educativo que se precie no puede despreciar dicha carga ética y de construcción social en la elección de las herramientas tecnológicas que utilice en la docencia. Es el referente que seguirán las nuevas generaciones. + +# Proyecto + + El grupo {{% blog_title %}} de la Universidad de la Languna (ULL) se ha formado como respuesta a una necesidad, hacer que las mejores tecnologías lleguen a la educación en el respeto a los valores a los que ésta debe responder, de él surgió la actual {{% doc %}}asociación de ámbito nacional, EDUCATIC, Tecnologías para la Educación y Transparencia Tecnológica <info>{{% /doc %}}. El ciudadano del mañana debe estar empoderado por la tecnología, y no ser un mero usuario sin capacidad de decisión. + + El proyecto surge del encuentro de distintas propuestas individuales de algunos profesores de la ULL, por lo que tiene ya su recorrido y experiencia. Se pretende poner en común lo mejor de cada uno, para facilitar un más adecuado uso de las TICs en la docencia a la comunidad educativa, inicialmente universitaria, pero también con posibilidad de servir de referencia a otros niveles de la educación. + + Las propuestas de herramientas TICs educativas que creemos cumplen el requisitos de ser éticamente neutras deben ser *Software Libre*, o sea, que cumplan las cuatro libertades del mismo: + +1. Libertad de ejecutar el programa +2. Libertad de estudiar el programa y modificarlo +3. Libertad de redistribuir copias +4. Libertad de distribuir copias de versiones modificadas + +esto facilita a las instituciones educativas disponer herramientas TICs en modo autoalojado, teniendo control sobre las mismas y permitiendo además independecia tecnológica y una gestión adecuada de los datos personales de los usuarios. Además fomenta la colaboración y la innovación. + +A lo largo de nuestros años de experiencia hemos comprobado que en el mundo del sotware libre existen multitud de herramientas educativas, muchas de ellas con prestaciones similares o superiores a aquellas promovidas por el capitalismo salvaje de la vigilancia. + +{{% blog_title %}} se constituye como un foro donde seleccionar, probar, evaluar, beneficiarse, difundir y promover del uso de herramientas TICs educativas éticamente neutras. + +# Actividades + +Entre otras, {{% blog_title %}} realiza las siguientes actividades: + +* La **vigilancia del respeto a nuestras normas sobre software, cultura y conocimientos libres**, estandarización y protección de datos. Por ejemplo, mediante la {{% doc %}}Fundación TXS.es <foundation>{{% /doc %}} podrémos interponer acciones judiciales en defensa de un correcto uso de la tecnología, como pudiera ser contra los convenios que han introducido a Google y otras empresas del capitalismo de la vigilancia en la educación en España + +* **Mantener y mejorar {{% doc %}}servicios <services>{{% /doc %}}** de uso genérico y **alternativos a los de empresas del capitalismo salvaje de la vigilancia** que permita a sus asociados probar, evaluar e incluso beneficiarse de los mismos + +* **Mantener y mejorar {{% doc %}}servicios de uso en la docencia <services>{{% /doc %}}** que permita a sus asociados probar, evaluar e incluso beneficiarse de los mismos + +* **Divulgar y dar cursos de formación** sobre tecnología y cultura libres, dejando a disposición de cualquiera documentación y manuales, para que sirva en la formación en TICs + +Para apoyar nuestro proyecto {{% blog_title %}} {{% doc %}}puedes hacerte socio <join>{{% /doc %}} o realizar una {{% doc %}}donación <donate>{{% /doc %}}. diff --git a/pages/project.md~ b/pages/project.md~ new file mode 100644 index 0000000..3c2125f --- /dev/null +++ b/pages/project.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: project +.. slug: project +.. date: 2025-07-28 18:59:14 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/rgpd.md b/pages/rgpd.md new file mode 100644 index 0000000..61ff696 --- /dev/null +++ b/pages/rgpd.md @@ -0,0 +1,20 @@ +<!-- +.. title: Protección de datos +.. slug: rgpd +.. date: 2025-08-06 20:44:31 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Protección de datos relativa a los servicios de EDUCATIC +.. type: text +--> + +No realizamos ninguna cesión de datos. Los datos se alojan provisionalmente en Alemania en servidores de la mercantil [Hetzner](https://www.hetzner.com/), con la que tenemos suscrito un contrato relativo a la seguridad de la información. Son usados únicamente para la gestión del servicio. Se está a la espera de poder disponer de recursos propios para poder migrar la infraestructura a un entorno más próximo, o de montar microproyectos en colaboración con diversas Administraciones educativas, que aloje los mismos. En el ámbito de la Universidad de La Laguna (ULL), el volumen de trabajo del STIC hizo imposible que se dotara de recursos al profesorado que impulsaba este proyecto. En parte de ahí surgió la necesidad de crear esta asociación, para gestionar adecuadamente el proyecto, como opción más adecuada que pasar por el uso del Google Meet institucional, que entendemos que no reúne las garantías suficientes para su uso académico, y así se ha expuesto razonadamente por Registro de entrada al Vicerector competente, objetando alguno de los miembros su uso. Seguimos trabajando para que estas tecnologías estén disponibles para todos los miembros de la comunidad universitaria, de la ULL y otras universidades y entornos educativos, motivo por el que esta asociación se constituyó con ámbito nacional, e impulsa la creación de una {{% doc %}}fundación <foundation>{{% /doc %}} que continúe y consolide el proyecto, siempre con pleno respeto a los valores de privacidad y cultura libre que ha de guiar el uso de tecnologías en educación. + +La información mínima necesaria es la IP de conexión (y otra información sobre las características de la comunicación para asegurar la calidad de la misma), si el usuario accede a la sesión vía enlace público. Si el usuario tiene cuenta en alguno de los servicios, se guarda la mínima información necesaria para la gestión del servicio (correo electrónico, nombre y apellido, nombre de usuario, grupos a los que pertenece dentro de las herramientas,…). + +Usamos software de fuentes abiertas, públicamente auditado, y ponemos todo nuestro esfuerzo en comprobar que no se realicen conexiones a sistemas de análisis de datos externos y, más en concreto, que el uso de las herramientas que empleamos no deje rastro en perfiles de usuario que, a la postre, puedan emplearse para la toma de decisiones automatizadas. + +El software empleado se utiliza en versiones suficientemente maduras y de uso comercial, de modo que no se están probando versiones. Las pruebas se refieren a la adecuación del mismo para la docencia, así como extraer experiencias de uso, con las que poder mejorar su adecuación a la docencia, así como generar buenas prácticas en relación con el mismo. + +Si conociese cualquier problema relativo a la protección de datos en cualquiera de nuestros sistemas, debe dar parte a [{{% url 'email' delprt=True %}}]({{% url 'email' %}}) y/o a [luisfajardo@ull.es](mailto:luisfajardo@ull.es), así como al delegado de protección de datos de la entidad u organismo del que dependa el servicio. En la medida en la que se refiera al servicio de educación prestado por la ULL, resulta de aplicación lo referido en la [información de la ULL sobre protección de datos](https://www.ull.es/informacion-sobre-web-institucional/#informacion-proteccion-datos-personales). Si el servicio es prestado por la Consejería de Educación del Gobierno de Canarias, deberá tener en cuenta la [política de privacidad de la Consejería de Educación del Gobierno de Canarias](https://www3.gobiernodecanarias.org/educacion/cau_ce/servicios/web/noticias/politica_privacidad_cauce). diff --git a/pages/rgpd.md~ b/pages/rgpd.md~ new file mode 100644 index 0000000..6917e4f --- /dev/null +++ b/pages/rgpd.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: rgpd +.. slug: rgpd +.. date: 2025-08-06 20:44:31 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/services.rst b/pages/services.rst new file mode 100644 index 0000000..b32f8eb --- /dev/null +++ b/pages/services.rst @@ -0,0 +1,26 @@ +.. title: Servicios +.. slug: services +.. date: 2025-08-06 21:00:07 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Servicios ofrecidos por EDUCAIC +.. type: text + + .. accordion:: + + Nube Nextcloud :sc:`{{% button link="https://nube.txs.es/" img="/assets/img/nextcloud_logo.svg" "" %}}` + Almacenamiento de ficheros en tu nube. Compartelos y colabora con otros, sincronízalos con tu ordenador. Calendarios, tareas, contactos, formularios y mucho mas. Tus datos bajo tu control. `Nextcloud <https://nextcloud.com/es/>`_ además nos permite integrar el resto de servicios bajo su interfaz + + :sc:`{{% button link="https://nube.txs.es/" img="/assets/img/nextcloud_logo.svg" Identifícate %}}` + + + Otro ... + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan, nulla sit amet aliquam molestie, nisi purus dignissim ante, non scelerisque diam ligula eu ex. Integer tristique felis id mattis imperdiet. Maecenas elementum purus quis vestibulum elementum. Etiam nec eleifend metus, vel convallis nisl. Fusce tempor ante felis, vitae tincidunt nulla pulvinar sed. Vivamus eget ipsum nulla. Vestibulum lectus enim, facilisis vel ipsum in, vulputate sodales ligula. Curabitur lorem erat, ullamcorper sit amet imperdiet vitae, lobortis non neque. Fusce porta tempor nulla. Vivamus pulvinar purus nibh. Vestibulum semper rutrum sapien, eget suscipit lectus semper sit amet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vel fringilla urna, ut vestibulum arcu. Sed bibendum augue risus, quis gravida libero bibendum ac. + + + Otro mas ... + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan, nulla sit amet aliquam molestie, nisi purus dignissim ante, non scelerisque diam ligula eu ex. Integer tristique felis id mattis imperdiet. Maecenas elementum purus quis vestibulum elementum. Etiam nec eleifend metus, vel convallis nisl. Fusce tempor ante felis, vitae tincidunt nulla pulvinar sed. Vivamus eget ipsum nulla. Vestibulum lectus enim, facilisis vel ipsum in, vulputate sodales ligula. Curabitur lorem erat, ullamcorper sit amet imperdiet vitae, lobortis non neque. Fusce porta tempor nulla. Vivamus pulvinar purus nibh. Vestibulum semper rutrum sapien, eget suscipit lectus semper sit amet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vel fringilla urna, ut vestibulum arcu. Sed bibendum augue risus, quis gravida libero bibendum ac. + + +Todos los servicios ofrecidos por EDUCATIC se rigen bajos los siguientes :doc:`Términos de uso <tos>`. Los datos almacenados por dichos servicios están amparados bajo nuestra política de :doc:`Protección de datos <rgpd>`. diff --git a/pages/services.rst~ b/pages/services.rst~ new file mode 100644 index 0000000..df18f5d --- /dev/null +++ b/pages/services.rst~ @@ -0,0 +1,10 @@ +.. title: services +.. slug: services +.. date: 2025-08-06 21:00:07 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text + +Escriba su página aquí. diff --git a/pages/team.md b/pages/team.md new file mode 100644 index 0000000..836f18c --- /dev/null +++ b/pages/team.md @@ -0,0 +1,40 @@ +<!-- +.. title: Equipo y colaboraciones +.. slug: team +.. date: 2025-07-28 20:13:09 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Equipo actual y entidades con las que ha colaborado EDUCATIC +.. type: text +--> + +## Equipo + +Integran el grupo inicial de {{% blog_title %}} los siguiente miembros, principalmente pertenecientes a la Universidad de La Laguna (ULL), pero está abierto a la {{% doc %}}adscripción de cuantos quieran colaborar <join>{{% /doc %}}: + +* Dr. D. **Luis Fajardo López**, profesor Contratado Doctor de Derecho Civil de la ULL, director del proyecto. Fue Delegado de Protección de Datos de la ULL, y tiene un fuerte compromiso por la seguridad de los datos y la privacidad, contando con una larga trayectoria en administración de sistemas, y en el estudio de los aspectos jurídicos de las tecnología de la información. Usa TICs en educación desde los años 90. + +* Dr. D. **Patricio García Báez**, profesor Contratado Doctor de la Escuela Superior de Ingeniería y Tecnología de la ULL, secretario del proyecto. Adscrito al Departamento de Ingeniería Informática y de Sistemas, fue Director de la Oficina del Software Libre de la ULL, estando involucrado en múltiples proyectos de desarrollo, formación y promoción del software libre y contenidos abiertos desde los años 2000. + +* Dr. D. **Alberto Hamilton Castro**, ... + +* Sr. D. **Pietro ...**, ... + +* Dr. D. **Fernando Rosa González**, ... + +* Dr. D. **Juan Hernández Cabrera**, profesor jubilado de la Facultad de Psicología y Logopedia de la ULL, adscrito al Área de Metodología de las Ciencias del Comportamiento del Departamento de Psicología Clínica, Psicobiología y Metodología, tiene una larga trayectoria en implementar tecnologías a su docencia. + +* Sr. D. **Enrique Zanardi Maffiotte**, profesor Asociado de Física Atómica, Molecular y Nuclear, fue uno de lo primeros desarrolladores Debian de la comunidad hispana, y tiene un largo bagaje en desarrollo y administración de sistemas, especialmente en tecnología VoIP, que funciona por detrás del BigBlueButton. + +## Colaboraciones + +A lo largo de los años de vida de {{% blog_title %}} hemos colaborado con múltiples entidades, bien sean mediante charlas, cursos o acciones diversas. Enumeramos aquí alfabéticamente algunas de ellas: + +* [Asociación Biocultural La Foresta](https://mtr.bio/la-foresta) +* Cerebros y Cubetas +* [esLibre](https://eslib.re/) +* [FLISoL](https://flisol.info/) +* [IES La Laboral](https://www3.gobiernodecanarias.org/medusa/edublog/ieslalaboraldelalaguna/) +* [IES El Chapatal](https://www3.gobiernodecanarias.org/medusa/edublog/ieselchapatal/) +* [Universidad de La Laguna](htts://www.ull.es/) diff --git a/pages/team.md~ b/pages/team.md~ new file mode 100644 index 0000000..31cf488 --- /dev/null +++ b/pages/team.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: team +.. slug: team +.. date: 2025-07-28 20:13:09 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/tos.md b/pages/tos.md new file mode 100644 index 0000000..f8e6c78 --- /dev/null +++ b/pages/tos.md @@ -0,0 +1,18 @@ +<!-- +.. title: Términos de uso +.. slug: tos +.. date: 2025-08-06 20:19:28 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Terminos de uso de los servicios de EDUCATIC +.. type: text +--> + +Los servidores del proyecto {{% blog_title %}} están abiertos al uso responsable por parte de sus socios y del profesorado (principalmente de la Universidad de La Laguna y en general de centros educativos de Canarias) que quiera probar las herramientas instaladas con fines de innovación docente. Al ser un pequeño equipo el administrador del sistema y el responsable de los datos en él es la misma persona: el Dr. Luis Fajardo López, si bien las decisiones técnicas y el resto del trabajo se distribuye entre todo el {{% doc %}}equipo de EDUCATIC <team>{{% /doc %}}. + +Quien siendo profesor desee probar las herramientas en su entorno, deberá identificarse suficientemente ante el equipo, escribiendo a [{{% url 'email' delprt=True %}}]({{% url 'email' %}})<!-- y/o rellenando el formulario de solicitud de recursos-->. El profesor deberá seguir las instrucciones de uso que se le indiquen. Tratándose de servicios en pruebas y gratuito, {{% blog_title %}} no se hace responsable de las posibles caídas o deterioro en la calidad del servicio, ni en general de ningún problema que pudiera surgir derivado del uso de la plataforma. Sí se garantiza sin embargo el mayor celo en el regular funcionamiento de los servicios. Se solicitará de profesor una evaluación del sistema para valorar las posibles mejoras. El profesor se hace responsable de velar por el correcto uso que sus alumnos realicen de los sistemas ofrecidos; esto es, de darles las instrucciones precisas con la suficiente claridad y adaptadas al nivel de formación del alumnado. + +En el marco de la educación no universitaria, es imprescindible haber informado a la Dirección del centro educativo. La participación de profesorado de otras universidades requerirá igualmente informar a su Universidad convenientemente, así como asegurarse de que aquella no tiene reglas que impidan el uso de estas tecnologías, o implementadas en dicha forma. {{% doc %}}Consúltanos <contact>{{% /doc %}}, estamos para hacer fácil ese paso, promoviendo la mejora de la seguridad y privacidad en la educación: te remitiremos plantilas y modelos, y estudiaremos tu situación concreta. + +Está permitido el uso personal por parte de los socios de {{% blog_title %}}, pero ésta no se hace responsable de las posibles caídas o deterioro en la calidad del servicio, ni en general de ningún problema que pudiera surgir derivado del uso de la plataforma. diff --git a/pages/tos.md~ b/pages/tos.md~ new file mode 100644 index 0000000..672eb23 --- /dev/null +++ b/pages/tos.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: tos +.. slug: tos +.. date: 2025-08-06 20:19:28 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/pages/xmpp.md b/pages/xmpp.md new file mode 100644 index 0000000..43e27ce --- /dev/null +++ b/pages/xmpp.md @@ -0,0 +1,47 @@ +<!-- +.. title: XMPP EDUCATIC-GENERAL +.. slug: xmpp +.. date: 2025-08-04 17:10:24 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: Como unirse al grupo de mensajería XMPP EDUCATIC-GENERAL +.. type: text +--> + +# Qué es XMPP +XMPP es un sistema de mensajería instantánea independiente del proveedor. Esto significa que puedes elegir entre muchos clientes diferentes y seleccionar libremente el servidor en el que crees tu cuenta. En {{% blog_title %}} tenemos instalado un servidor de XMPP y podemos abrirte una cuenta en el mismo, o bien puedes elegir otros servidores. + +# Clientes de mensajería XMPP + +Recomendamos los siguientes clientes XMPP: + +* **Android**: [Conversations](https://conversations.im/), recomendamos instalar [Conversations](https://f-droid.org/packages/eu.siacs.conversations/) desde el [repositorio de software libre F-Droid](https://f-droid.org/es/) + +* **iPhone**: [Siskin IM](https://siskin.im/), desarrollado y mantenido por Tigase + +* **PC**: [Gajim](https://gajim.org/), disponible versiones para sistemas operativos Linux, Mac y Windows + +# Cómo crear y configurar una cuenta XMPP + +Puedes seleccionar libremente tu servidor XMPP, para ello puede buscar en la lista de [providers.xmpp.net](https://providers.xmpp.net/) o en [404.city](https://xmpp.404.city/). + +También, {{% doc %}}haciendote socio <join>{{% /doc %}} de {{% blog_title %}}, podrás obtener una cuenta XMP bajo el dominio @txs.es. + +Para configurar tu cuenta en el cliente que uses sólo tienes que darle tu dirección de XMPP (tiene el mismo formato que el correo electrónico, por ejemplo en nuestro servidor será del tipo *minombredeusuario*@txs.es) y tu contraseña (la que diste al registrarte). + +# Cómo unirse a nuestro grupo XMPP {{% blog_title %}}-GENERAL + +Una vez tengas instalado tu cliente y creada tu cuenta XMPP, para poder estar al tanto de lo que acontece en {{% blog_title %}} o consultarnos cualquier duda, unete a nuestro Grupo EDUCATIC-GENERAL pinchando en el siguiente enlace: + +<center> + <a href="{{% url 'xmpp' suffix='?join' %}}" class="btn btn-primary"> + <img src="/assets/img/xmpp.svg" width="35" height="35" class="d-inline-block align-center"> + Unirse a Grupo EDUCATIC-GENERAL + </a> + + <!-- Nested shortcuts does not work {{% button link="{{% url 'xmpp' suffix='?join' %}}" img="/assets/img/xmpp.svg" "Unirse a Grupo EDUCATIC-GENERAL" %}} --> +</center> + +   + diff --git a/pages/xmpp.md~ b/pages/xmpp.md~ new file mode 100644 index 0000000..0386c7d --- /dev/null +++ b/pages/xmpp.md~ @@ -0,0 +1,12 @@ +<!-- +.. title: xmpp +.. slug: xmpp +.. date: 2025-08-04 17:10:24 UTC+01:00 +.. tags: +.. category: +.. link: +.. description: +.. type: text +--> + +Escriba su página aquí. diff --git a/plugins/__init__.py b/plugins/__init__.py new file mode 100644 index 0000000..fd7e25d --- /dev/null +++ b/plugins/__init__.py @@ -0,0 +1 @@ +# Plugin modules go here. \ No newline at end of file diff --git a/plugins/accordion/README.md b/plugins/accordion/README.md new file mode 100644 index 0000000..6f9ce9d --- /dev/null +++ b/plugins/accordion/README.md @@ -0,0 +1,55 @@ +Accordion for reStructuredText, combining [Bootstrap's Collapse and Card components](https://getbootstrap.com/docs/4.0/components/collapse/#accordion-example). + +Separate each box from the next with two blank lines. The first line in each group will become the title. All of the remaining lines in the group will become the contents. + +You can put arbitrary reStructuredText directives inside the accordion, including videos and images. + +This plugin supports both boostrap3 and boostrap4, but if you are using bootstrap3 you must add an extra "bootstrap3" argument to the directive. See the second example below. + +``` + + .. accordion:: + + Box 1 + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan, nulla sit amet aliquam molestie, nisi purus dignissim ante, non scelerisque diam ligula eu ex. Integer tristique felis id mattis imperdiet. Maecenas elementum purus quis vestibulum elementum. Etiam nec eleifend metus, vel convallis nisl. Fusce tempor ante felis, vitae tincidunt nulla pulvinar sed. Vivamus eget ipsum nulla. Vestibulum lectus enim, facilisis vel ipsum in, vulputate sodales ligula. Curabitur lorem erat, ullamcorper sit amet imperdiet vitae, lobortis non neque. Fusce porta tempor nulla. Vivamus pulvinar purus nibh. Vestibulum semper rutrum sapien, eget suscipit lectus semper sit amet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vel fringilla urna, ut vestibulum arcu. Sed bibendum augue risus, quis gravida libero bibendum ac. + + + Box 2 + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan, nulla sit amet aliquam molestie, nisi purus dignissim ante, non scelerisque diam ligula eu ex. Integer tristique felis id mattis imperdiet. Maecenas elementum purus quis vestibulum elementum. Etiam nec eleifend metus, vel convallis nisl. Fusce tempor ante felis, vitae tincidunt nulla pulvinar sed. Vivamus eget ipsum nulla. Vestibulum lectus enim, facilisis vel ipsum in, vulputate sodales ligula. Curabitur lorem erat, ullamcorper sit amet imperdiet vitae, lobortis non neque. Fusce porta tempor nulla. Vivamus pulvinar purus nibh. Vestibulum semper rutrum sapien, eget suscipit lectus semper sit amet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vel fringilla urna, ut vestibulum arcu. Sed bibendum augue risus, quis gravida libero bibendum ac. + + + Box 3 + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi accumsan, nulla sit amet aliquam molestie, nisi purus dignissim ante, non scelerisque diam ligula eu ex. Integer tristique felis id mattis imperdiet. Maecenas elementum purus quis vestibulum elementum. Etiam nec eleifend metus, vel convallis nisl. Fusce tempor ante felis, vitae tincidunt nulla pulvinar sed. Vivamus eget ipsum nulla. Vestibulum lectus enim, facilisis vel ipsum in, vulputate sodales ligula. Curabitur lorem erat, ullamcorper sit amet imperdiet vitae, lobortis non neque. Fusce porta tempor nulla. Vivamus pulvinar purus nibh. Vestibulum semper rutrum sapien, eget suscipit lectus semper sit amet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vel fringilla urna, ut vestibulum arcu. Sed bibendum augue risus, quis gravida libero bibendum ac. + +``` + +Here is another example for use in a bootstrap3-themed site. Notice the start of the YouTube directives are indented. + +``` + + .. accordion:: bootstrap3 + + Box 1 + The Last Starfigher (1984) + + .. youtube:: H7NaxBxFWSo + :width: 400 + :align: center + + + Box 2 + Terminator Trailer (1984) + + .. youtube:: k64P4l2Wmeg + :width: 400 + :align: center + + + Box 3 + Bladerunner (1982) + + .. youtube:: eogpIG53Cis + :width: 400 + :align: center + +``` diff --git a/plugins/accordion/accordion.plugin b/plugins/accordion/accordion.plugin new file mode 100644 index 0000000..62f706b --- /dev/null +++ b/plugins/accordion/accordion.plugin @@ -0,0 +1,13 @@ +[Core] +name = rest_accordion +module = accordion + +[Nikola] +compiler = rest +PluginCategory = CompilerExtension + +[Documentation] +author = Jim Schmitz +version = 0.1 +website = https://plugins.getnikola.com/accordion +description = Accordion directive, providing collapsible boxes for web pages. diff --git a/plugins/accordion/accordion.py b/plugins/accordion/accordion.py new file mode 100644 index 0000000..ecb0459 --- /dev/null +++ b/plugins/accordion/accordion.py @@ -0,0 +1,83 @@ +"""Accordion directive for reStructuredText.""" + + +import uuid +import logging + +from docutils import nodes +from docutils.parsers.rst import Directive, directives + +from nikola.plugin_categories import RestExtension +from nikola.plugins.compile import rest + + +logger = logging.getLogger(__name__) + + +class Plugin(RestExtension): + """Plugin for reST accordion directive.""" + + name = "rest_accordion" + + def set_site(self, site): + """Set Nikola site.""" + self.site = site + directives.register_directive('accordion', Accordion) + Accordion.site = site + return super(Plugin, self).set_site(site) + + +class Accordion(Directive): + """reST extension for inserting accordions.""" + + has_content = True + optional_arguments = 1 + + def rst2html(self, src): + null_logger = logging.getLogger('NULL') + null_logger.setLevel(1000) + output, error_level, deps, _ = rest.rst2html( + src, logger=null_logger, transforms=self.site.rst_transforms) + + return output + + def run(self): + """Run the slides directive.""" + if len(self.content) == 0: # pragma: no cover + return + + if self.arguments and self.arguments[0] == 'bootstrap3': + template_name = 'accordion_bootstrap3.tmpl' + else: + template_name = 'accordion_bootstrap4.tmpl' + + if self.site.invariant: # for testing purposes + hex_uuid4 = 'fixedvaluethatisnotauuid' + else: + hex_uuid4 = uuid.uuid4().hex + + box_titles = [] + box_contents = [] + boxes = '\n'.join(self.content).split('\n\n\n') + + if len(boxes) == 1: + logger.warn( + ('Accordion directive used with only one box. ' + 'Remember to use two blank lines to separate the contents.') + ) + + for box in boxes: + title, content = box.split('\n', 1) + box_titles.append(self.rst2html(title)) + box_contents.append(self.rst2html(content)) + + output = self.site.template_system.render_template( + template_name, + None, + { + 'hex_uuid4': hex_uuid4, + 'box_titles': box_titles, + 'box_contents': box_contents, + } + ) + return [nodes.raw('', output, format='html')] diff --git a/plugins/accordion/templates/jinja/accordion_bootstrap3.tmpl b/plugins/accordion/templates/jinja/accordion_bootstrap3.tmpl new file mode 100644 index 0000000..359ccd6 --- /dev/null +++ b/plugins/accordion/templates/jinja/accordion_bootstrap3.tmpl @@ -0,0 +1,28 @@ +{% block content %} +<div class="panel-group" id="accordion_{{ hex_uuid4 }}" role="tablist" aria-multiselectable="true"> + {% for i in range(box_titles|length) %} + <div class="panel panel-default"> + <div class="panel-heading" role="tab" id="heading_{{ i }}_{{ hex_uuid4 }}"> + <h1 class="panel-title"> + {% if i == 0 %} + <a role="button" data-toggle="collapse" data-parent="#accordion_{{ hex_uuid4 }}" href="#collapse_{{ i }}_{{ hex_uuid4 }}" aria-expanded="true" aria-controls="collapse_{{ i }}_{{ hex_uuid4 }}"> + {% else %} + <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion_{{ hex_uuid4 }}" href="#collapse_{{ i }}_{{ hex_uuid4 }}" aria-expanded="false" aria-controls="collapse_{{ i }}_{{ hex_uuid4 }}"> + {% endif %} + {{ box_titles[i] }} + </a> + </h1> + </div> + {% if i == 0 %} + <div id="collapse_{{ i }}_{{ hex_uuid4 }}" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="heading_{{ i }}_{{ hex_uuid4 }}"> + {% else %} + <div id="collapse_{{ i }}_{{ hex_uuid4 }}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading_{{ i }}_{{ hex_uuid4 }}"> + {% endif %} + <div class="panel-body"> + {{ box_contents[i] }} + </div> + </div> + </div> + {% endfor %} +</div> +{% endblock %} diff --git a/plugins/accordion/templates/jinja/accordion_bootstrap4.tmpl b/plugins/accordion/templates/jinja/accordion_bootstrap4.tmpl new file mode 100644 index 0000000..f5d3fa3 --- /dev/null +++ b/plugins/accordion/templates/jinja/accordion_bootstrap4.tmpl @@ -0,0 +1,28 @@ +{% block content %} +<div id="accordion_{{ hex_uuid4 }}" class="accordion"> + {% for i in range(box_titles|length) %} + <div class="card"> + <div class="card-header" id="heading_{{ i }}_{{ hex_uuid4 }}"> + <h1 class="mb-0"> + {% if i == 0 %} + <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapse_{{ i }}_{{ hex_uuid4 }}" aria-expanded="true" aria-controls="collapse_{{ i }}_{{ hex_uuid4 }}"> + {% else %} + <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapse_{{ i }}_{{ hex_uuid4 }}" aria-expanded="true" aria-controls="collapse_{{ i }}_{{ hex_uuid4 }}"> + {% endif %} + {{ box_titles[i] }} + </button> + </h1> + </div> + {% if i == 0 %} + <div id="collapse_{{ i }}_{{ hex_uuid4 }}" class="collapse show" aria-labelledby="heading_{{ i }}_{{ hex_uuid4 }}" data-parent="#accordion_{{ hex_uuid4 }}"> + {% else %} + <div id="collapse_{{ i }}_{{ hex_uuid4 }}" class="collapse" aria-labelledby="heading_{{ i }}_{{ hex_uuid4 }}" data-parent="#accordion_{{ hex_uuid4 }}"> + {% endif %} + <div class="card-body"> + {{ box_contents[i] }} + </div> + </div> + </div> + {% endfor %} +</div> +{% endblock %} diff --git a/plugins/accordion/templates/mako/accordion_bootstrap3.tmpl b/plugins/accordion/templates/mako/accordion_bootstrap3.tmpl new file mode 100644 index 0000000..68d9b6f --- /dev/null +++ b/plugins/accordion/templates/mako/accordion_bootstrap3.tmpl @@ -0,0 +1,28 @@ +<%block name="content"> +<div class="panel-group" id="accordion_${hex_uuid4}" role="tablist" aria-multiselectable="true"> + % for i in range(len(box_titles)): + <div class="panel panel-default"> + <div class="panel-heading" role="tab" id="heading_${i}_${hex_uuid4}"> + <h1 class="panel-title"> + % if i == 0: + <a role="button" data-toggle="collapse" data-parent="#accordion_${hex_uuid4}" href="#collapse_${i}_${hex_uuid4}" aria-expanded="true" aria-controls="collapse_${i}_${hex_uuid4}"> + % else: + <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion_${hex_uuid4}" href="#collapse_${i}_${hex_uuid4}" aria-expanded="false" aria-controls="collapse_${i}_${hex_uuid4}"> + % endif + ${box_titles[i]} + </a> + </h1> + </div> + % if i == 0: + <div id="collapse_${i}_${hex_uuid4}" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="heading_${i}_${hex_uuid4}"> + % else: + <div id="collapse_${i}_${hex_uuid4}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading_${i}_${hex_uuid4}"> + % endif + <div class="panel-body"> + ${box_contents[i]} + </div> + </div> + </div> + % endfor +</div> +</%block> diff --git a/plugins/accordion/templates/mako/accordion_bootstrap4.tmpl b/plugins/accordion/templates/mako/accordion_bootstrap4.tmpl new file mode 100644 index 0000000..89d6fd8 --- /dev/null +++ b/plugins/accordion/templates/mako/accordion_bootstrap4.tmpl @@ -0,0 +1,28 @@ +<%block name="content"> +<div id="accordion_${hex_uuid4}" class="accordion"> + % for i in range(len(box_titles)): + <div class="card"> + <div class="card-header" id="heading_${i}_${hex_uuid4}"> + <h1 class="mb-0"> + % if i == 0: + <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapse_${i}_${hex_uuid4}" aria-expanded="true" aria-controls="collapse_${i}_${hex_uuid4}"> + % else: + <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapse_${i}_${hex_uuid4}" aria-expanded="true" aria-controls="collapse_${i}_${hex_uuid4}"> + % endif + ${box_titles[i]} + </button> + </h1> + </div> + % if i == 0: + <div id="collapse_${i}_${hex_uuid4}" class="collapse" aria-labelledby="heading_${i}_${hex_uuid4}" data-parent="#accordion_${hex_uuid4}"> + % else: + <div id="collapse_${i}_${hex_uuid4}" class="collapse" aria-labelledby="heading_${i}_${hex_uuid4}" data-parent="#accordion_${hex_uuid4}"> + % endif + <div class="card-body"> + ${box_contents[i]} + </div> + </div> + </div> + % endfor +</div> +</%block> diff --git a/plugins/accordion/templates/mako/accordion_bootstrap4.tmpl~ b/plugins/accordion/templates/mako/accordion_bootstrap4.tmpl~ new file mode 100644 index 0000000..2ce3c30 --- /dev/null +++ b/plugins/accordion/templates/mako/accordion_bootstrap4.tmpl~ @@ -0,0 +1,28 @@ +<%block name="content"> +<div id="accordion_${hex_uuid4}" class="accordion"> + % for i in range(len(box_titles)): + <div class="card"> + <div class="card-header" id="heading_${i}_${hex_uuid4}"> + <h1 class="mb-0"> + % if i == 0: + <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapse_${i}_${hex_uuid4}" aria-expanded="true" aria-controls="collapse_${i}_${hex_uuid4}"> + % else: + <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapse_${i}_${hex_uuid4}" aria-expanded="true" aria-controls="collapse_${i}_${hex_uuid4}"> + % endif + ${box_titles[i]} + </button> + </h1> + </div> + % if i == 0: + <div id="collapse_${i}_${hex_uuid4}" class="collapse show" aria-labelledby="heading_${i}_${hex_uuid4}" data-parent="#accordion_${hex_uuid4}"> + % else: + <div id="collapse_${i}_${hex_uuid4}" class="collapse" aria-labelledby="heading_${i}_${hex_uuid4}" data-parent="#accordion_${hex_uuid4}"> + % endif + <div class="card-body"> + ${box_contents[i]} + </div> + </div> + </div> + % endfor +</div> +</%block> diff --git a/shortcodes/blog_title.tmpl b/shortcodes/blog_title.tmpl new file mode 100644 index 0000000..48e266b --- /dev/null +++ b/shortcodes/blog_title.tmpl @@ -0,0 +1,10 @@ +<%doc> +Return blog title renderized + +Usage: + + {{% blog_title %}} + +</%doc> + +<font color="#ff0000" face="serif">EDUCA</font><font color="#808080" face="serif">TIC</font> diff --git a/shortcodes/blog_title.tmpl~ b/shortcodes/blog_title.tmpl~ new file mode 100644 index 0000000..09292eb --- /dev/null +++ b/shortcodes/blog_title.tmpl~ @@ -0,0 +1,12 @@ +<%doc> +Return blog email from varialbe BLOG_EMAIL of config.py + +Template engine: Mako + +Usage: + + {{% email %}} + +</%doc> + +${blog_email} diff --git a/shortcodes/button.tmpl b/shortcodes/button.tmpl new file mode 100644 index 0000000..e48ab84 --- /dev/null +++ b/shortcodes/button.tmpl @@ -0,0 +1,25 @@ +<%doc> +Return render button + +Template engine: Mako + +Usage: + + {{% button link=<link> [img=<img>] [width=<width>] <text> %}} + +where <link> is the destination of the button, <img> is a link to an optionma image to put inside the button, <width> is the optional width of the button and <text> is the text inside the button. + +</%doc> + +% if width is UNDEFINED: +<a href="${link}" class="btn btn-primary"> +% else: +<a href="${link}" class="btn btn-primary" style="width:${width};"> +% endif + % if img is UNDEFINED: + <img class="d-inline-block align-center"> + % else: + <img src="${img}" width="35" height="35" class="d-inline-block align-center"> + % endif + ${_args[0]} +</a> diff --git a/shortcodes/button.tmpl~ b/shortcodes/button.tmpl~ new file mode 100644 index 0000000..6bd607f --- /dev/null +++ b/shortcodes/button.tmpl~ @@ -0,0 +1,31 @@ +<%doc> +Return communication item + +Template engine: Mako + +Usage: + + {{% comm [type=<type>] [date=<date>] [media=<media>] [link=<link>] <text> %}} + +where <type> is one of press, video, audio, socal, photo, image or other + + Example: +</%doc> + +% if type == 'press': + <% t = 'fa-file-alt' %> +% elif type == 'video': + <% t = 'fa-video' %> +% elif type == 'audio': + <% t = 'fa-microphone' %> +% elif type == 'social': + <% t = 'fa-comment-alt' %> +% elif type == 'photo': + <% t = 'fa-camera' %> +% elif type == 'image': + <% t = 'fa-file-image' %> +% else: + <% t = 'fa-bullhorn' %> +% endif + +<i class="fas ${t} mr-2"></i> <i>${date}</i>, <strong>${media}</strong>: <a href="${link}">${_args[0]}</a> diff --git a/shortcodes/comm.tmpl b/shortcodes/comm.tmpl new file mode 100644 index 0000000..6bd607f --- /dev/null +++ b/shortcodes/comm.tmpl @@ -0,0 +1,31 @@ +<%doc> +Return communication item + +Template engine: Mako + +Usage: + + {{% comm [type=<type>] [date=<date>] [media=<media>] [link=<link>] <text> %}} + +where <type> is one of press, video, audio, socal, photo, image or other + + Example: +</%doc> + +% if type == 'press': + <% t = 'fa-file-alt' %> +% elif type == 'video': + <% t = 'fa-video' %> +% elif type == 'audio': + <% t = 'fa-microphone' %> +% elif type == 'social': + <% t = 'fa-comment-alt' %> +% elif type == 'photo': + <% t = 'fa-camera' %> +% elif type == 'image': + <% t = 'fa-file-image' %> +% else: + <% t = 'fa-bullhorn' %> +% endif + +<i class="fas ${t} mr-2"></i> <i>${date}</i>, <strong>${media}</strong>: <a href="${link}">${_args[0]}</a> diff --git a/shortcodes/comm.tmpl~ b/shortcodes/comm.tmpl~ new file mode 100644 index 0000000..069681a --- /dev/null +++ b/shortcodes/comm.tmpl~ @@ -0,0 +1,36 @@ +<%doc> +Return URL from email and some social networks. + +Template engine: Mako + +Usage: + + {{% url <site> [suffix=<suffix>] %}} + +where <site> is one of 'email', 'xmpp', 'mastodon' or 'peertube', corresponding to GLOBAL_CONTEXT variable of EMAIL_URL, XMPP_URL, MASTODON_URL, PEERTUBE_URL and GIT_URL respectively, and sufix variable allow to add a suffix <suffix> to the URL + + Example: {{% url 'mastodon' }} will show the content of MASTODON_URL defined in GLOBAL_CONTEXT of config.py +</%doc> + +% if suffix is UNDEFINED: + <% s = '' %> +% else: + <% s = suffix %> +% endif + +% if _args[0] == 'email': + ${EMAIL_URL}${s} +% elif _args[0] == 'xmpp': + ${XMPP_URL}${s} +% elif _args[0] == 'mastodon': + ${MASTODON_URL}${s} +% elif _args[0] == 'peertube': + ${PEERTUBE_URL}${s} +% elif _args[0] == 'git': + ${GIT_URL}${s} +% else: + Unknown +% endif + + + diff --git a/shortcodes/email.tmpl b/shortcodes/email.tmpl new file mode 100644 index 0000000..09292eb --- /dev/null +++ b/shortcodes/email.tmpl @@ -0,0 +1,12 @@ +<%doc> +Return blog email from varialbe BLOG_EMAIL of config.py + +Template engine: Mako + +Usage: + + {{% email %}} + +</%doc> + +${blog_email} diff --git a/shortcodes/email.tmpl~ b/shortcodes/email.tmpl~ new file mode 100644 index 0000000..0d25800 --- /dev/null +++ b/shortcodes/email.tmpl~ @@ -0,0 +1,25 @@ +<%doc> +Return URL from email and some social networks. + +Template engine: Mako + +Usage: + + {{% url <site> %}} + +where <site> is one of 'email', 'xmpp', 'mastodon' or 'peertube', corresponding to GLOBAL_CONTEXT variable of EMAIL_URL, XMPP_URL, MASTODON_URL and PEERTUBE_URL respectively + + Example: {{% url 'mastodon' }} will show the content of MASTODON_URL defined in GLOBAL_CONTEXT of config.py +</%doc> + +% if _args[0] == 'email': + ${EMAIL_URL} +% elif _args[0] == 'xmpp': + ${XMPP_URL} +% elif _args[0] == 'mastodon': + ${MASTODON_URL} +% elif _args[0] == 'peertube': + ${PEERTUBE_URL} +% else: + Unknown +% endif diff --git a/shortcodes/foo.tmpl b/shortcodes/foo.tmpl new file mode 100644 index 0000000..6911da2 --- /dev/null +++ b/shortcodes/foo.tmpl @@ -0,0 +1 @@ +${pagekind} diff --git a/shortcodes/foo.tmpl~ b/shortcodes/foo.tmpl~ new file mode 100644 index 0000000..db9fd7b --- /dev/null +++ b/shortcodes/foo.tmpl~ @@ -0,0 +1 @@ +${data} diff --git a/shortcodes/url.tmpl b/shortcodes/url.tmpl new file mode 100644 index 0000000..8a4964f --- /dev/null +++ b/shortcodes/url.tmpl @@ -0,0 +1,53 @@ +<%doc> +Return URL from email and some social networks. + +Template engine: Mako + +Usage: + + {{% url <site> [suffix=<suffix>] [delprt=<delprt>] %}} + +where <site> is one of 'email', 'xmpp', 'mastodon' or 'peertube', corresponding to GLOBAL_CONTEXT variable of EMAIL_URL, XMPP_URL, MASTODON_URL, PEERTUBE_URL and GIT_URL respectively, and sufix variable allow to add a suffix <suffix> to the URL, and if delprt variable is True then remove protocol from URL + + Example: {{% url 'mastodon' %}} will show the content of MASTODON_URL defined in GLOBAL_CONTEXT of config.py +</%doc> + +<%! + def del_prt(url): + i = url.find('//') + 1 + if i == 0: + i = url.find(':') + return url[i+1:] +%> + +% if suffix is UNDEFINED: + <% s = '' %> +% else: + <% s = suffix %> +% endif + +% if delprt is UNDEFINED: + <% d = False %> +% else: + <% d = delprt %> +% endif + +% if _args[0] == 'email': + <% url = EMAIL_URL + s %> +% elif _args[0] == 'xmpp': + <% url = XMPP_URL + s %> +% elif _args[0] == 'mastodon': + <% url = MASTODON_URL + s %> +% elif _args[0] == 'peertube': + <% url = PEERTUBE_URL + s %> +% elif _args[0] == 'git': + <% url = GIT_URL + s %> +% else: + Unknown +% endif + +% if d: + ${url | del_prt} +% else: + ${url} +% endif diff --git a/shortcodes/url.tmpl~ b/shortcodes/url.tmpl~ new file mode 100644 index 0000000..4e754a3 --- /dev/null +++ b/shortcodes/url.tmpl~ @@ -0,0 +1,21 @@ +<%doc> +Template engine: Mako + +Usage: + + {{% url <site> %}} + +where <site> is one of 'xmpp', 'mastodon' or 'peertube' + + Example: {{% url 'mastodon' }} will show the content of MASTODON_URL defined in GLOBAL_CONTEXT of config.py +</%doc> + +% if _args[0] == 'xmpp': + ${XMPP_URL} +% elif _args[0] == 'mastodon': + ${MASTODON_URL} +% elif _args[0] == 'peertube': + ${PEERTUBE_URL} +% else: + Unknown +% endif diff --git a/templates/post_header.tmpl b/templates/post_header.tmpl new file mode 100644 index 0000000..fbe4b87 --- /dev/null +++ b/templates/post_header.tmpl @@ -0,0 +1,67 @@ +## -*- coding: utf-8 -*- +<%namespace name="helper" file="post_helper.tmpl"/> +<%namespace name="comments" file="comments_helper.tmpl"/> + +<%def name="html_title()"> +%if title and not post.meta('hidetitle'): + <h1 class="p-name entry-title" itemprop="headline name"><!--a href="${post.permalink()}" class="u-url"-->${post.title()|h}<!--/a--></h1> +%endif +%if post.meta('subtitle'): + <h2 class="p-name entry-title" itemprop="headline name">${post.meta('subtitle')|h}</h2> +%endif +</%def> + +<%def name="html_translations(post)"> + % if len(post.translated_to) > 1: + <div class="metadata posttranslations translations"> + <h3 class="posttranslations-intro">${messages("Also available in:")}</h3> + % for langname in sorted(translations): + % if langname != lang and post.is_translation_available(langname): + <p><a href="${post.permalink(langname)}" rel="alternate" hreflang="${langname}">${messages("LANGUAGE", langname)}</a></p> + % endif + % endfor + </div> + % endif +</%def> + +<%def name="html_sourcelink()"> + % if show_sourcelink: + <p class="sourceline"><a href="${post.source_link()}" class="sourcelink">${messages("Source")}</a></p> + % endif +</%def> + +<%def name="html_post_header()"> + <header> + ${html_title()} + <div class="metadata"> + <p class="byline author vcard p-author h-card"><span class="byline-name fn p-name" itemprop="author"> + % if author_pages_generated and multiple_authors_per_post: + % for author in post.authors(): + <a class="u-url" href="${_link('author', author)}">${author|h}</a> + % endfor + % elif author_pages_generated: + <a class="u-url" href="${_link('author', post.author())}">${post.author()|h}</a> + % else: + ${post.author()|h} + % endif + </span></p> + <p class="dateline"> + <a href="${post.permalink()}" rel="bookmark"> + <time class="published dt-published" datetime="${post.formatted_date('webiso')}" itemprop="datePublished" title="${post.formatted_date(date_format)|h}">${post.formatted_date(date_format)|h}</time> + % if post.updated and post.updated != post.date: + <span class="updated"> (${messages("updated")} + <time class="updated dt-updated" datetime="${post.formatted_updated('webiso')}" itemprop="dateUpdated" title="${post.formatted_updated(date_format)|h}">${post.formatted_updated(date_format)|h}</time>)</span> + % endif + </a> + </p> + % if not post.meta('nocomments') and site_has_comments: + <p class="commentline">${comments.comment_link(post.permalink(), post._base_path)} + % endif + ${html_sourcelink()} + % if post.meta('link'): + <p class="linkline"><a href="${post.meta('link')}">${messages("Original site")}</a></p> + % endif + </div> + ${html_translations(post)} + </header> +</%def> diff --git a/templates/post_header.tmpl~ b/templates/post_header.tmpl~ new file mode 100644 index 0000000..b82cd89 --- /dev/null +++ b/templates/post_header.tmpl~ @@ -0,0 +1,64 @@ +## -*- coding: utf-8 -*- +<%namespace name="helper" file="post_helper.tmpl"/> +<%namespace name="comments" file="comments_helper.tmpl"/> + +<%def name="html_title()"> +%if title and not post.meta('hidetitle'): + <h1 class="p-name entry-title" itemprop="headline name"><!--a href="${post.permalink()}" class="u-url"-->${post.title()|h}<!--/a--></h1> +%endif +</%def> + +<%def name="html_translations(post)"> + % if len(post.translated_to) > 1: + <div class="metadata posttranslations translations"> + <h3 class="posttranslations-intro">${messages("Also available in:")}</h3> + % for langname in sorted(translations): + % if langname != lang and post.is_translation_available(langname): + <p><a href="${post.permalink(langname)}" rel="alternate" hreflang="${langname}">${messages("LANGUAGE", langname)}</a></p> + % endif + % endfor + </div> + % endif +</%def> + +<%def name="html_sourcelink()"> + % if show_sourcelink: + <p class="sourceline"><a href="${post.source_link()}" class="sourcelink">${messages("Source")}</a></p> + % endif +</%def> + +<%def name="html_post_header()"> + <header> + ${html_title()} + <div class="metadata"> + <p class="byline author vcard p-author h-card"><span class="byline-name fn p-name" itemprop="author"> + % if author_pages_generated and multiple_authors_per_post: + % for author in post.authors(): + <a class="u-url" href="${_link('author', author)}">${author|h}</a> + % endfor + % elif author_pages_generated: + <a class="u-url" href="${_link('author', post.author())}">${post.author()|h}</a> + % else: + ${post.author()|h} + % endif + </span></p> + <p class="dateline"> + <a href="${post.permalink()}" rel="bookmark"> + <time class="published dt-published" datetime="${post.formatted_date('webiso')}" itemprop="datePublished" title="${post.formatted_date(date_format)|h}">${post.formatted_date(date_format)|h}</time> + % if post.updated and post.updated != post.date: + <span class="updated"> (${messages("updated")} + <time class="updated dt-updated" datetime="${post.formatted_updated('webiso')}" itemprop="dateUpdated" title="${post.formatted_updated(date_format)|h}">${post.formatted_updated(date_format)|h}</time>)</span> + % endif + </a> + </p> + % if not post.meta('nocomments') and site_has_comments: + <p class="commentline">${comments.comment_link(post.permalink(), post._base_path)} + % endif + ${html_sourcelink()} + % if post.meta('link'): + <p class="linkline"><a href="${post.meta('link')}">${messages("Original site")}</a></p> + % endif + </div> + ${html_translations(post)} + </header> +</%def> diff --git a/templates/story.tmpl b/templates/story.tmpl new file mode 100644 index 0000000..6ddd29f --- /dev/null +++ b/templates/story.tmpl @@ -0,0 +1,52 @@ +## -*- coding: utf-8 -*- +<%namespace name="helper" file="post_helper.tmpl"/> +<%namespace name="pheader" file="post_header.tmpl"/> +<%namespace name="comments" file="comments_helper.tmpl"/> +<%namespace name="math" file="math_helper.tmpl"/> +<%inherit file="post.tmpl"/> + +<%block name="content"> +<article class="post-${post.meta('type')} storypage" itemscope="itemscope" itemtype="http://schema.org/Article"> + %if not post.meta('hideimghdr') and post.meta('slug')=='index' and BANNER_URL: + <header style="background-image: url(${BANNER_URL}); height: 75vh; text-align:center;"> + %elif not post.meta('hideimghdr') and 'page_page' in pagekind and theme_config.get('imghdr_url'): + <header style="background-image: url(${theme_config.get('imghdr_url')}); height: ${theme_config.get('imghdr_height')};"> + %else: + <header> + %endif + <div style="font-size:50px;"> + ${pheader.html_title()} + ${pheader.html_translations(post)} +   + %if post.meta('slug')=='index': + %if EMAIL_URL: + <a href="${EMAIL_URL}" class="text-dark mx-2" title="Enviar un correo"><img src="/assets/img/email.svg" width="65" height="65" alt="email" class="d-inline-block align-top"></a> +   + %endif + %if XMPP_URL: + <a href="${XMPP_URL}" title="Canal de mensajería XMPP"><img src="/assets/img/xmpp.svg" width="65" height="65" alt="XMPP" class="d-inline-block align-top"></a> +   + %endif + %if MASTODON_URL: + <a href="${MASTODON_URL}" title="Mastodon"><img src="/assets/img/mastodon.svg" width="65" height="65" alt="Mastodon" class="d-inline-block align-top"></a> +   + %endif + %if PEERTUBE_URL: + <a href="${PEERTUBE_URL}" title="PeerTube"><img src="/assets/img/peertube.svg" width="65" height="65" alt="PeerTube" class="d-inline-block align-top"></a> +   + %endif + %endif + </div> + </header> + <div class="e-content entry-content" itemprop="articleBody text"> + ${post.text()} + </div> + %if site_has_comments and enable_comments and not post.meta('nocomments'): + <section class="comments"> + <h2>${messages("Comments")}</h2> + ${comments.comment_form(post.permalink(absolute=True), post.title(), post.base_path)} + </section> + %endif + ${math.math_scripts_ifpost(post)} +</article> +</%block> diff --git a/templates/story.tmpl~ b/templates/story.tmpl~ new file mode 100644 index 0000000..aeac04f --- /dev/null +++ b/templates/story.tmpl~ @@ -0,0 +1,25 @@ +## -*- coding: utf-8 -*- +<%namespace name="helper" file="post_helper.tmpl"/> +<%namespace name="pheader" file="post_header.tmpl"/> +<%namespace name="comments" file="comments_helper.tmpl"/> +<%namespace name="math" file="math_helper.tmpl"/> +<%inherit file="post.tmpl"/> + +<%block name="content"> +<article class="post-${post.meta('type')} storypage" itemscope="itemscope" itemtype="http://schema.org/Article"> + <header> + ${pheader.html_title()} + ${pheader.html_translations(post)} + </header> + <div class="e-content entry-content" itemprop="articleBody text"> + ${post.text()} + </div> + %if site_has_comments and enable_comments and not post.meta('nocomments'): + <section class="comments"> + <h2>${messages("Comments")}</h2> + ${comments.comment_form(post.permalink(absolute=True), post.title(), post.base_path)} + </section> + %endif + ${math.math_scripts_ifpost(post)} +</article> +</%block>