From fc0ae19889bd6254bce29bb465af838e6087be88 Mon Sep 17 00:00:00 2001 From: akielbowicz Date: Tue, 24 Dec 2024 17:51:34 -0300 Subject: [PATCH 01/13] feat(Buscador): agregar flexsearch --- conf.py | 2781 +++++++++-------- .../flexsearch_plugin.plugin | 14 + .../flexsearch_plugin/flexsearch_plugin.py | 70 + themes/pyar/assets/css/custom.css | 1218 ++++---- 4 files changed, 2162 insertions(+), 1921 deletions(-) create mode 100644 plugins/flexsearch_plugin/flexsearch_plugin.plugin create mode 100644 plugins/flexsearch_plugin/flexsearch_plugin.py diff --git a/conf.py b/conf.py index fbfef1005..3adddde43 100644 --- a/conf.py +++ b/conf.py @@ -1,1345 +1,1436 @@ -# -*- 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 = "Python Argentina" # (translatable) -BLOG_TITLE = "Python Argentina Wiki" # (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://wiki.python.org.ar/" -# This is the URL where Nikola's output will be deployed. -# If not set, defaults to SITE_URL -# BASE_URL = "https://wiki.python.org.ar/" -BLOG_EMAIL = "admin@python.org.ar" -BLOG_DESCRIPTION = "Python Argentina Wiki" # (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 -# gl Galician -# he Hebrew -# hi Hindi -# hr Croatian -# hu Hungarian -# ia Interlingua -# id Indonesian -# it Italian -# ja Japanese [NOT jp] -# ko Korean -# lt Lithuanian -# ml Malayalam -# nb Norwegian (Bokmål) -# nl Dutch -# 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", "Archive"), - ("/categories/", "Tags"), - ("/rss.xml", "RSS feed"), - ), -} - -# 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 = "pyar" - -# Primary color of your theme. This will be used to customize your theme. -# Must be a HEX value. -THEME_COLOR = '#5670d4' - -# Theme configuration. Fully theme-dependent. (translatable) -# Examples below are for bootblog4. -# 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) -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': '' - } -} - -# 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"), -) -PAGES = ( - ("pages/*.rst", "", "page.tmpl"), - ("pages/*.md", "", "page.tmpl"), - ("pages/*.txt", "", "page.tmpl"), - ("pages/*.html", "", "page.tmpl"), -) - -INDEX_PATH = "blog" - - -# 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 = "America/Argentina/Buenos_Aires" - -# 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: http://cldr.unicode.org/translation/date-time -# 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 moment.js: https://momentjs.com/docs/#/displaying/format/ -# JS_DATE_FORMAT = 'YYYY-MM-DD HH:mm' - -# Date fanciness. -# -# 0 = using DATE_FORMAT and TIMEZONE -# 1 = using JS_DATE_FORMAT and local user time (via moment.js) -# 2 = using a string like “2 days ago” -# -# 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. -# -# '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'), -} - -# 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 = '' - -# If you want to hide the title of your website (for example, if your logo -# already contains the text), set this to False. -# 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. -# 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". -# 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. -# 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". -# 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 by 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 and posts. -# Tag pages will still be generated. -HIDDEN_AUTHORS = ['Guest'] - -# 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 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 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 = 'master' -GITHUB_DEPLOY_BRANCH = 'gh_pages' - -# 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 = False - -# 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 'tidy5'). -# HTML_TIDY_EXECUTABLE = 'tidy5' - -# 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 = [] -# -# 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). - -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. Leave empty 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 = ( -# ("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 = '

{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}Aporta a PyAr con tu donación' - -# 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} {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, facebook, intensedebate, isso, muut, commento -# 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: http://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 a 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 {} (no config at all) -# MARKDOWN_EXTENSION_CONFIGS = {} - - -# Extra options to pass to the pandoc command. -# by default, it's empty, is a list of strings, for example -# ['-F', 'pandoc-citeproc', '--bibliography=/Users/foo/references.bib'] -# 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 = True -# 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 = True - -# 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) -# } -# } - -# 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 = False - -# 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_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 = {} - -# 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 = [] +# -*- 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 = "Python Argentina" # (translatable) +BLOG_TITLE = "Python Argentina Wiki" # (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://wiki.python.org.ar/" +# This is the URL where Nikola's output will be deployed. +# If not set, defaults to SITE_URL +# BASE_URL = "https://wiki.python.org.ar/" +BLOG_EMAIL = "admin@python.org.ar" +BLOG_DESCRIPTION = "Python Argentina Wiki" # (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 +# gl Galician +# he Hebrew +# hi Hindi +# hr Croatian +# hu Hungarian +# ia Interlingua +# id Indonesian +# it Italian +# ja Japanese [NOT jp] +# ko Korean +# lt Lithuanian +# ml Malayalam +# nb Norwegian (Bokmål) +# nl Dutch +# 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", "Archive"), + ("/categories/", "Tags"), + ("/rss.xml", "RSS feed"), + ), +} + +# 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 = "pyar" + +# Primary color of your theme. This will be used to customize your theme. +# Must be a HEX value. +THEME_COLOR = '#5670d4' + +# Theme configuration. Fully theme-dependent. (translatable) +# Examples below are for bootblog4. +# 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) +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': '' + } +} + +# 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"), +) +PAGES = ( + ("pages/*.rst", "", "page.tmpl"), + ("pages/*.md", "", "page.tmpl"), + ("pages/*.txt", "", "page.tmpl"), + ("pages/*.html", "", "page.tmpl"), +) + +INDEX_PATH = "blog" + + +# 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 = "America/Argentina/Buenos_Aires" + +# 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: http://cldr.unicode.org/translation/date-time +# 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 moment.js: https://momentjs.com/docs/#/displaying/format/ +# JS_DATE_FORMAT = 'YYYY-MM-DD HH:mm' + +# Date fanciness. +# +# 0 = using DATE_FORMAT and TIMEZONE +# 1 = using JS_DATE_FORMAT and local user time (via moment.js) +# 2 = using a string like “2 days ago” +# +# 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. +# +# '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'), +} + +# 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 = '' + +# If you want to hide the title of your website (for example, if your logo +# already contains the text), set this to False. +# 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. +# 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". +# 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. +# 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". +# 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 by 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 and posts. +# Tag pages will still be generated. +HIDDEN_AUTHORS = ['Guest'] + +# 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 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 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 = 'master' +GITHUB_DEPLOY_BRANCH = 'gh_pages' + +# 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 = False + +# 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 'tidy5'). +# HTML_TIDY_EXECUTABLE = 'tidy5' + +# 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 = [] +# +# 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). + +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. Leave empty 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 = '<span>Contents © {date} <a href="mailto:{email}">{author}</a> - Powered by <a href="https://getnikola.com" rel="nofollow" target="_blanc">Nikola</a> {license}</span><span><a href="https://ac.python.org.ar/#donaciones" rel="nofollow" target="_blanc">Aporta a PyAr con tu donación<a/></span>' + +# 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, facebook, intensedebate, isso, muut, commento +# 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: http://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 a 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 {} (no config at all) +# MARKDOWN_EXTENSION_CONFIGS = {} + + +# Extra options to pass to the pandoc command. +# by default, it's empty, is a list of strings, for example +# ['-F', 'pandoc-citeproc', '--bibliography=/Users/foo/references.bib'] +# 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 = True +# 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 = True + +# 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 = "" +# 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) +# } +# } + +# 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 = False + +# 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_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 = {} + +# 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 = [] + +########################### +# FLEXSEARCH # +########################### + +# Use this to add the search results to an overlay +# In this case you need the following in your template. Check the readme for a base css.: +# <div id="search_overlay" style="display:none;"> +# <div id="search_content"> +# <button onclick="closeSearch()">Close</button> +# <div id="search_results"></div> +# </div> +# </div> +# <input type="text" id="search_input"> +# <button id="search_button">Search</button> + +FLEXSEARCH_OVERLAY = """ +<script src="https://rawcdn.githack.com/nextapps-de/flexsearch/0.7.31/dist/flexsearch.bundle.js"></script> + +<script> +document.addEventListener('DOMContentLoaded', function() { + var searchIndex = new FlexSearch.Index(); // Initialize FlexSearch + var index = {}; // This will store the index data globally within this script block + + // Fetch the generated JSON file + fetch('/search_index.json') + .then(response => response.json()) + .then(data => { + index = data; // Store the fetched data in the 'index' variable + for (var key in index) { + if (index.hasOwnProperty(key)) { + searchIndex.add(key, index[key].content); + } + } + }); + + var input = document.getElementById('search_input'); + var button = document.getElementById('search_button'); + + // Function to perform search + function performSearch() { + var query = input.value; + var results = searchIndex.search(query); + var resultsContainer = document.getElementById('search_results'); + resultsContainer.innerHTML = ''; // Clear previous results + + var ul = document.createElement('ul'); // Create a UL element to hold the results + + // Display results + results.forEach(function(result) { + var li = document.createElement('li'); // Create a LI element for each result + var link = document.createElement('a'); + link.href = index[result].url; + link.textContent = index[result].title; + li.appendChild(link); + ul.appendChild(li); // Append the LI to the UL + }); + + resultsContainer.appendChild(ul); // Append the UL to the results container + document.getElementById('search_overlay').style.display = 'flex'; // Show the overlay + } + + // Event listener for search button click + button.addEventListener('click', performSearch); + + // Event listener for pressing enter key in the search input + input.addEventListener('keypress', function(event) { + if (event.key === "Enter" || event.keyCode === 13) { + event.preventDefault(); // Prevent the form from being submitted + performSearch(); + } + }); +}); + +// Function to close the search overlay +function closeSearch() { + document.getElementById('search_overlay').style.display = 'none'; +} + +document.addEventListener('keydown', function(event) { + if (event.key === 'Escape') { + var searchOverlay = document.getElementById('search_overlay'); + if (searchOverlay !== null) { + closeSearch(); + } + } +}); +</script> +""" + +BODY_END = BODY_END + FLEXSEARCH_OVERLAY \ No newline at end of file diff --git a/plugins/flexsearch_plugin/flexsearch_plugin.plugin b/plugins/flexsearch_plugin/flexsearch_plugin.plugin new file mode 100644 index 000000000..4474cbdcf --- /dev/null +++ b/plugins/flexsearch_plugin/flexsearch_plugin.plugin @@ -0,0 +1,14 @@ +[Core] +Name = flexsearch_plugin +Module = flexsearch_plugin + +[Documentation] +Author = Diego Carrasco G. +Version = 0.1 +Website = https://plugins.getnikola.com/#flexsearch_plugin +Description = Adds FlexSearch full-text search capabilities to Nikola static sites. + +[Nikola] +MinVersion = 8.0.0 # I haven't tested it with older versions +MaxVersion = 8.3.1 +PluginCategory = LateTask \ No newline at end of file diff --git a/plugins/flexsearch_plugin/flexsearch_plugin.py b/plugins/flexsearch_plugin/flexsearch_plugin.py new file mode 100644 index 000000000..c616feeff --- /dev/null +++ b/plugins/flexsearch_plugin/flexsearch_plugin.py @@ -0,0 +1,70 @@ +# MIT License +# +# Copyright (c) [2024] [Diego Carrasco G.] +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import os +import json +from nikola.plugin_categories import LateTask +from nikola import utils + + +class FlexSearchPlugin(LateTask): + name = "flexsearch_plugin" + + def set_site(self, site): + super(FlexSearchPlugin, self).set_site(site) + self.site = site + site.register_path_handler('search_index', self.search_index_path) + + def gen_tasks(self): + """Generate the search index after all posts are processed.""" + self.site.scan_posts() + yield self.group_task() + + output_path = self.site.config['OUTPUT_FOLDER'] + index_file_path = os.path.join(output_path, 'search_index.json') + + def build_index(): + """Build the entire search index from scratch.""" + index = {} + for post in self.site.timeline: + # Sasha: Modifico esta linea para que considere todas las entradas bajo /pages + if not post.is_draft: + index[post.meta('slug')] = { + 'title': post.title(), + 'content': post.text(strip_html=True), + 'url': post.permalink() + } + with open(index_file_path, 'w', encoding='utf-8') as f: + json.dump(index, f, ensure_ascii=False) + + task = { + 'basename': self.name, + 'name': 'all_posts', + 'actions': [build_index], + 'targets': [index_file_path], + 'uptodate': [utils.config_changed({1: self.site.GLOBAL_CONTEXT})], + 'clean': True, + } + yield task + + def search_index_path(self, name, lang): + return [os.path.join(self.site.config['BASE_URL'], 'search_index.json'), None] diff --git a/themes/pyar/assets/css/custom.css b/themes/pyar/assets/css/custom.css index 948cc7d13..b766f2413 100644 --- a/themes/pyar/assets/css/custom.css +++ b/themes/pyar/assets/css/custom.css @@ -1,576 +1,642 @@ -@import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700); -@import url(https://fonts.googleapis.com/css?family=Roboto:400,700); - -/* - * General - */ -body, td, tr, div, p, form, input, -select, textarea, font { - font-family: 'Roboto'; -} - -body { - background-color: #f4f4f4; - color: #444; -} - -/* - * Main - */ -.page-header { - color: #FB8B00; - margin-top: 30px; - margin-bottom: 20px; -} -.pull-right { - float: right !important; -} - -#content { - background: #fff; - border-radius: 0 0 8px 8px; - margin-bottom: 30px; - word-wrap: break-word; - padding: 0; -} - -@media (max-width: 992px) { - #main { - padding-top: 20px; - } -} - -#main > div.row > div.col-md-8 div.row > article.col-sm-4 > div.img.aprendiendo_python { - background-position: 62px 0; -} - -#main > div.row > div.col-md-8 div.row > article.col-sm-4 > div.img.lista_correo { - background-position: -134px 0; -} -#main > div.row > div.col-md-8 div.row > article.col-sm-4 > div.img.wiki { - background-position: -67px 0; -} - -/* - * Ribbon - */ - -/* -#ribbon { - top: 140px; - left: -48px; - width: 100%; - height: 137px; - padding-left: 17px; - position: absolute; - background-color: #39ade6; -} - -#ribbon:after { - right:0; - bottom:-25px; - width: 41px; - height: 25px; - content: ""; - position: absolute; - background: url(/static/img/ribbon.png); -} -*/ - -/* - * Search - */ - -iframe#google { - border:0; - margin:0; - padding:0; - width: 100%; -} - -#search-form { - margin-bottom: 20px; -} - -#search-form input { - color: #999; - font-weight: bold; - background: #eee; - border-color: #eee; - -webkit-box-shadow: none; - -moz-box-shadow: none; - -o-box-shadow: none; - box-shadow: none; -} - -#search-form button { - background: #ccc; - color: #fff; -} - -#searchResult div.modal-body { - padding-top:0; -} - - -/* - * Panels - */ - -.list-group-item { - background: #eee; - border: 1px solid #fff; -} - -.list-group-item:first-child { - padding-top: 15px; - border-top-right-radius: 8px; - border-top-left-radius: 8px; - background:#f4f4f4; -} -.list-group-item:last-child { - padding-top: 15px; - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; - background:#f4f4f4; -} - -.list-group { - margin-top:20px; -} - -.list-group-item-heading { - font-weight:bold; -} - -h3.list-group-item-heading { - color: #f0a513; -} - -h4.list-group-item-heading { - color: #2ca8e4; -} - -/* - * Header - */ - -#header { - margin-bottom: 10px; -} - -/* - * Navbar - */ - -#main-navbar { - padding: .5rem 0; -} -.navbar-header div.loginreg { - text-align: center; - margin-top: 38px; - width: calc(100% - 195px); -} -.banner { - padding: 0px 20px; -} -.banner p { - font-size: 15px; - text-shadow: 0px 0px 4px #444; - vertical-align: bottom; -} -.banner h1 { - text-shadow: 0px 0px 4px #777; - font-size: 30px; - font-weight: bold; - padding-top: 7px; - padding-left: 95px; - height: 96px; -} -.banner .bigger { - font-size: 38px; - display: block; -} -.banner-wrapper { - color: white; -} -.navbar-brand { - width: 195px; - height: 75px; - display: block; - text-indent: -9999px; - background-position: center; - background-repeat: no-repeat; - background-image: url(https://pyarweb.blob.core.windows.net/pyarweb-production/img/logo-header.png); -} - -#header button.navbar-toggle { - margin-top: 30px; - background-color: #2ca8e4; -} - -#header button.navbar-toggle .icon-bar { - background-color: #fff; -} - -#header-navbar-collapse { - margin-right: -15px; -} -.board-list-item .label-default { - margin-left: 6px; -} - -@media (min-width: 768px) { - #header-navbar-collapse { - margin-left: -15px; - } -} - -#header-navbar-collapse > ul { - margin-right: 0; -} - -@media (min-width: 768px) { - #header-navbar-collapse > ul { - width: 100%; - } -} - -ul.navbar-nav > li { - background-color: #fff; -} - -ul.navbar-nav > li > a > span { - display:block; - height:25px; - margin:0 auto; -} - -ul.navbar-nav > li:not(.active) > a > span { - background-image: url(https://pyarweb.blob.core.windows.net/pyarweb-production/img/icons/icons.png); -} - -ul.navbar-nav > li.active > a > span, -ul.navbar-nav > li:hover > a > span { - background-image: url(https://pyarweb.blob.core.windows.net/pyarweb-production/img/icons/icons_active.png); -} - -ul.navbar-nav > li > a > span.inicio { - width: 25px; - background-position: -80px 25px; -} - -ul.navbar-nav > li > a > span.quienes_somos { - width: 25px; - background-position: -44px 25px; -} -ul.navbar-nav > li > a > span.navbar_lista_de_correo { - width: 30px; - background-position: -323px 25px; -} -ul.navbar-nav > li > a > span.wiki { - width: 20px; - background-position: -292px 25px; -} -ul.navbar-nav > li > a > span.news { - width: 26px; - background-position: -255px 25px; -} -ul.navbar-nav > li > a > span.irc { - width: 31px; - background-position: -115px 25px; -} - -ul.navbar-nav > li > a > span.eventos { - width: 19px; - background-position: -191px 25px; -} - -ul.navbar-nav > li > a > span.pyar { - width: 26px; - background-position: -220px 25px; -} - -ul.navbar-nav > li > a > span.jobs { - width: 24px; - background-position: -156px 25px; -} - -@media (min-width: 768px) { - ul.navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 10px; - background-color: #fff; - border-left: 1px solid #f4f4f4; - border-bottom: 6px solid #fff; - } -} - -ul.navbar-nav > li:first-child { - border-left: 0; -} - -@media (min-width: 768px) { - ul.navbar-nav > li.nav-item { - width: 11.11%; - } -} - - -ul.navbar-nav > li.nav-item > a.nav-link { - color: #fb8b00; - font-size: 15px; - font-weight: bold; - text-align: center; -} - - -ul.navbar-nav > li > a { - border-bottom: 4px solid white; -} -ul.navbar-nav > li.active > a.nav-link, -ul.navbar-nav > li:hover > a.nav-link { - background-color: #39ade6; - border-bottom: 6px solid #fdca01; - color: white; -} - -@media (min-width: 768px) { - ul.navbar-nav > li.active > a, - ul.navbar-nav > li > a:hover { - border-bottom: 6px solid #fdca01; - } -} - -/* - * - */ - -h3 { - color:#35679a; - font-weight: bold; -} - -/* - * Footer - */ - -#footer { - background-color: #f4f4f4; - display: flex; - justify-content: space-between; - padding: 30px 15px 20px 15px; - border-radius: 0 0 8px 8px; -} - -#footer a { - color: #808080; - font-size: 11px; -} - -@media (min-width: 768px) { - #footer ul.right { - float: right; - } -} - -#footer li { - line-height: 12px; - padding-top: 5px; - padding-bottom: 5px; -} - -#footer li.pyar { - padding-left: 100px; - background-position: 0 center; - background-repeat: no-repeat; -} - -#footer li.usla, -#footer li.python { - background-position: right center; - background-repeat: no-repeat; - float: left; - text-align: right; -} -#footer li.usla { - padding-right: 80px; -} - -#footer li.python { - margin-left: 25px; - padding-right: 52px; - } -@media (max-width: 992px) { - #footer li.python { - clear: left; - float: right; - margin: 15px 0 0; - } -} - -/* - * Inputs and forms - */ -.form-horizontal .form-actions { - clear: both; - margin-left: 15px; -} -.textarea.form-control { - height: 140px; -} - -.job-date { - font-size: 14px; - margin-left: 10px; - color: #999; -} - -time.published { - font-size: 0.8em; - color: #666; -} -.tags-group { - margin-top: 15px; - margin-bottom: 15px; -} -.board-list-item, .simple-list-item { - margin-bottom: 25px; -} -.board-list-item { - border-left: 3px solid #FDCA01; - padding-left: 10px; -} -.board-list-item h4, .simple-list-item h4 { - font-weight: bold; -} -.table.table-no-border tbody > tr > td, -.table.table-no-border tbody > tr > th { - border-top: 0px none; -} -.board-list-simple-item { - padding: 10px; - margin-bottom: 10px; -} -.board-list-simple-item > h3 { - margin-top: 0px; -} -.board-list-simple-item:nth-child(odd) { - background-color: #F4F4F4; -} -@media (min-width: 768px) { - .navbar-header div.loginreg { - float: left; - } - .banner h1, .banner p { - display: inline-block; - } -} -@media (min-width: 992px) { - .navbar-header div.loginreg { - margin-top:0; - } - .navbar-nav { - flex-grow: 1; - } - .banner-wrapper { - color: white; - width: 100%; - position: absolute; - /* top: 150px; */ - } - .banner { - height:137px; - width: 100%; - left: 0; - } - .index-content, .index-right { - margin-top: 185px; - } - .banner h1 { - margin-right: 20px; - font-size: 35px; - } - .banner .bigger { - font-size: 42px; - } - .banner p { - width: 400px; - } - #div_id_description > label { - width: 8.33333%; - } - #div_id_description > div { - width: 60%; - } -} -@media (min-width: 1200px) { - .form-horizontal .form-actions { - margin-left: 106px; - } -} -@media (min-width: 1290px) { - .banner-wrapper { - width: calc(100% - (100% - 1170px)/2 + 41px); - height: 162px; - } - .banner .container { - position: absolute; - right: 41px; - } - .ribbon { - width: 41px; - height: 25px; - position: absolute; - right: 0px; - bottom: 0px; - } -} - -pre { - font-family: 'Ubuntu Mono', monospace !important; - font-size: 1em !important; -} - -.editable button { - float: right; - margin: 0 0 1em 1em; -} - -.waliki-nav { - width: 100%; - border-top: 1px solid #eee; - margin-bottom: -20px; - -} - -.waliki-nav > li > a { - padding-bottom: 0px; - padding-top: 0px; - font-size: 0.85em; - color: #ccc; -} - -a.white { - color: #fff; -} - -a.white:hover { - color: #fff; - text-decoration: none; -} - -div.sponsored_jobs { - padding: 5px; -} - -/** Otras cosas especificas usada por los rST */ -.strike { - text-decoration: line-through; -} - -small, .small { - font-size: 85%; -} - - +@import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700); +@import url(https://fonts.googleapis.com/css?family=Roboto:400,700); + +/* + * General + */ +body, td, tr, div, p, form, input, +select, textarea, font { + font-family: 'Roboto'; +} + +body { + background-color: #f4f4f4; + color: #444; +} + +/* + * Main + */ +.page-header { + color: #FB8B00; + margin-top: 30px; + margin-bottom: 20px; +} +.pull-right { + float: right !important; +} + +#content { + background: #fff; + border-radius: 0 0 8px 8px; + margin-bottom: 30px; + word-wrap: break-word; + padding: 0; +} + +@media (max-width: 992px) { + #main { + padding-top: 20px; + } +} + +#main > div.row > div.col-md-8 div.row > article.col-sm-4 > div.img.aprendiendo_python { + background-position: 62px 0; +} + +#main > div.row > div.col-md-8 div.row > article.col-sm-4 > div.img.lista_correo { + background-position: -134px 0; +} +#main > div.row > div.col-md-8 div.row > article.col-sm-4 > div.img.wiki { + background-position: -67px 0; +} + +/* + * Ribbon + */ + +/* +#ribbon { + top: 140px; + left: -48px; + width: 100%; + height: 137px; + padding-left: 17px; + position: absolute; + background-color: #39ade6; +} + +#ribbon:after { + right:0; + bottom:-25px; + width: 41px; + height: 25px; + content: ""; + position: absolute; + background: url(/static/img/ribbon.png); +} +*/ + +/* + * Search + */ + +iframe#google { + border:0; + margin:0; + padding:0; + width: 100%; +} + +#search-form { + margin-bottom: 20px; +} + +#search-form input { + color: #999; + font-weight: bold; + background: #eee; + border-color: #eee; + -webkit-box-shadow: none; + -moz-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; +} + +#search-form button { + background: #ccc; + color: #fff; +} + +#searchResult div.modal-body { + padding-top:0; +} + + +/* + * Panels + */ + +.list-group-item { + background: #eee; + border: 1px solid #fff; +} + +.list-group-item:first-child { + padding-top: 15px; + border-top-right-radius: 8px; + border-top-left-radius: 8px; + background:#f4f4f4; +} +.list-group-item:last-child { + padding-top: 15px; + border-bottom-right-radius: 8px; + border-bottom-left-radius: 8px; + background:#f4f4f4; +} + +.list-group { + margin-top:20px; +} + +.list-group-item-heading { + font-weight:bold; +} + +h3.list-group-item-heading { + color: #f0a513; +} + +h4.list-group-item-heading { + color: #2ca8e4; +} + +/* + * Header + */ + +#header { + margin-bottom: 10px; +} + +/* + * Navbar + */ + +#main-navbar { + padding: .5rem 0; +} +.navbar-header div.loginreg { + text-align: center; + margin-top: 38px; + width: calc(100% - 195px); +} +.banner { + padding: 0px 20px; +} +.banner p { + font-size: 15px; + text-shadow: 0px 0px 4px #444; + vertical-align: bottom; +} +.banner h1 { + text-shadow: 0px 0px 4px #777; + font-size: 30px; + font-weight: bold; + padding-top: 7px; + padding-left: 95px; + height: 96px; +} +.banner .bigger { + font-size: 38px; + display: block; +} +.banner-wrapper { + color: white; +} +.navbar-brand { + width: 195px; + height: 75px; + display: block; + text-indent: -9999px; + background-position: center; + background-repeat: no-repeat; + background-image: url(https://pyarweb.blob.core.windows.net/pyarweb-production/img/logo-header.png); +} + +#header button.navbar-toggle { + margin-top: 30px; + background-color: #2ca8e4; +} + +#header button.navbar-toggle .icon-bar { + background-color: #fff; +} + +#header-navbar-collapse { + margin-right: -15px; +} +.board-list-item .label-default { + margin-left: 6px; +} + +@media (min-width: 768px) { + #header-navbar-collapse { + margin-left: -15px; + } +} + +#header-navbar-collapse > ul { + margin-right: 0; +} + +@media (min-width: 768px) { + #header-navbar-collapse > ul { + width: 100%; + } +} + +ul.navbar-nav > li { + background-color: #fff; +} + +ul.navbar-nav > li > a > span { + display:block; + height:25px; + margin:0 auto; +} + +ul.navbar-nav > li:not(.active) > a > span { + background-image: url(https://pyarweb.blob.core.windows.net/pyarweb-production/img/icons/icons.png); +} + +ul.navbar-nav > li.active > a > span, +ul.navbar-nav > li:hover > a > span { + background-image: url(https://pyarweb.blob.core.windows.net/pyarweb-production/img/icons/icons_active.png); +} + +ul.navbar-nav > li > a > span.inicio { + width: 25px; + background-position: -80px 25px; +} + +ul.navbar-nav > li > a > span.quienes_somos { + width: 25px; + background-position: -44px 25px; +} +ul.navbar-nav > li > a > span.navbar_lista_de_correo { + width: 30px; + background-position: -323px 25px; +} +ul.navbar-nav > li > a > span.wiki { + width: 20px; + background-position: -292px 25px; +} +ul.navbar-nav > li > a > span.news { + width: 26px; + background-position: -255px 25px; +} +ul.navbar-nav > li > a > span.irc { + width: 31px; + background-position: -115px 25px; +} + +ul.navbar-nav > li > a > span.eventos { + width: 19px; + background-position: -191px 25px; +} + +ul.navbar-nav > li > a > span.pyar { + width: 26px; + background-position: -220px 25px; +} + +ul.navbar-nav > li > a > span.jobs { + width: 24px; + background-position: -156px 25px; +} + +@media (min-width: 768px) { + ul.navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 10px; + background-color: #fff; + border-left: 1px solid #f4f4f4; + border-bottom: 6px solid #fff; + } +} + +ul.navbar-nav > li:first-child { + border-left: 0; +} + +@media (min-width: 768px) { + ul.navbar-nav > li.nav-item { + width: 11.11%; + } +} + + +ul.navbar-nav > li.nav-item > a.nav-link { + color: #fb8b00; + font-size: 15px; + font-weight: bold; + text-align: center; +} + + +ul.navbar-nav > li > a { + border-bottom: 4px solid white; +} +ul.navbar-nav > li.active > a.nav-link, +ul.navbar-nav > li:hover > a.nav-link { + background-color: #39ade6; + border-bottom: 6px solid #fdca01; + color: white; +} + +@media (min-width: 768px) { + ul.navbar-nav > li.active > a, + ul.navbar-nav > li > a:hover { + border-bottom: 6px solid #fdca01; + } +} + +/* + * + */ + +h3 { + color:#35679a; + font-weight: bold; +} + +/* + * Footer + */ + +#footer { + background-color: #f4f4f4; + display: flex; + justify-content: space-between; + padding: 30px 15px 20px 15px; + border-radius: 0 0 8px 8px; +} + +#footer a { + color: #808080; + font-size: 11px; +} + +@media (min-width: 768px) { + #footer ul.right { + float: right; + } +} + +#footer li { + line-height: 12px; + padding-top: 5px; + padding-bottom: 5px; +} + +#footer li.pyar { + padding-left: 100px; + background-position: 0 center; + background-repeat: no-repeat; +} + +#footer li.usla, +#footer li.python { + background-position: right center; + background-repeat: no-repeat; + float: left; + text-align: right; +} +#footer li.usla { + padding-right: 80px; +} + +#footer li.python { + margin-left: 25px; + padding-right: 52px; + } +@media (max-width: 992px) { + #footer li.python { + clear: left; + float: right; + margin: 15px 0 0; + } +} + +/* + * Inputs and forms + */ +.form-horizontal .form-actions { + clear: both; + margin-left: 15px; +} +.textarea.form-control { + height: 140px; +} + +.job-date { + font-size: 14px; + margin-left: 10px; + color: #999; +} + +time.published { + font-size: 0.8em; + color: #666; +} +.tags-group { + margin-top: 15px; + margin-bottom: 15px; +} +.board-list-item, .simple-list-item { + margin-bottom: 25px; +} +.board-list-item { + border-left: 3px solid #FDCA01; + padding-left: 10px; +} +.board-list-item h4, .simple-list-item h4 { + font-weight: bold; +} +.table.table-no-border tbody > tr > td, +.table.table-no-border tbody > tr > th { + border-top: 0px none; +} +.board-list-simple-item { + padding: 10px; + margin-bottom: 10px; +} +.board-list-simple-item > h3 { + margin-top: 0px; +} +.board-list-simple-item:nth-child(odd) { + background-color: #F4F4F4; +} +@media (min-width: 768px) { + .navbar-header div.loginreg { + float: left; + } + .banner h1, .banner p { + display: inline-block; + } +} +@media (min-width: 992px) { + .navbar-header div.loginreg { + margin-top:0; + } + .navbar-nav { + flex-grow: 1; + } + .banner-wrapper { + color: white; + width: 100%; + position: absolute; + /* top: 150px; */ + } + .banner { + height:137px; + width: 100%; + left: 0; + } + .index-content, .index-right { + margin-top: 185px; + } + .banner h1 { + margin-right: 20px; + font-size: 35px; + } + .banner .bigger { + font-size: 42px; + } + .banner p { + width: 400px; + } + #div_id_description > label { + width: 8.33333%; + } + #div_id_description > div { + width: 60%; + } +} +@media (min-width: 1200px) { + .form-horizontal .form-actions { + margin-left: 106px; + } +} +@media (min-width: 1290px) { + .banner-wrapper { + width: calc(100% - (100% - 1170px)/2 + 41px); + height: 162px; + } + .banner .container { + position: absolute; + right: 41px; + } + .ribbon { + width: 41px; + height: 25px; + position: absolute; + right: 0px; + bottom: 0px; + } +} + +pre { + font-family: 'Ubuntu Mono', monospace !important; + font-size: 1em !important; +} + +.editable button { + float: right; + margin: 0 0 1em 1em; +} + +.waliki-nav { + width: 100%; + border-top: 1px solid #eee; + margin-bottom: -20px; + +} + +.waliki-nav > li > a { + padding-bottom: 0px; + padding-top: 0px; + font-size: 0.85em; + color: #ccc; +} + +a.white { + color: #fff; +} + +a.white:hover { + color: #fff; + text-decoration: none; +} + +div.sponsored_jobs { + padding: 5px; +} + +/** Otras cosas especificas usada por los rST */ +.strike { + text-decoration: line-through; +} + +small, .small { + font-size: 85%; +} + + +/* flexsearch_plugin*/ + +#search_overlay { + position: fixed; /* Fixed position to cover the whole screen */ + width: 100%; + height: 100%; + top: 0; + left: 0; + background: rgba(0, 0, 0, 0.8); /* Semi-transparent background */ + z-index: 1000; /* Make sure it's on top of other content */ + display: flex; + justify-content: center; + align-items: center; +} + +#search_content { + background: white; + padding: 20px; + width: 90%; + max-width: 600px; /* Limit the width on larger screens */ + border-radius: 5px; + box-shadow: 0 4px 6px rgba(0,0,0,0.1); +} + +#search_results { + margin-top: 20px; + width: 100%; +} + +#search_results ul { + list-style-type: circle; /* Ensuring list style is visible */ + padding-left: 20px; /* Adequate space for bullets */ +} + +#search_results li { + padding: 10px; /* Padding for each list item */ + border-bottom: 1px solid #ccc; /* Optional: add a separator between items */ + display: flex; + align-items: left; /* Center items vertically */ +} + +#search_results li a { + text-decoration: none; /* Optional: remove underline from links */ + color: #333; /* Dark grey color for text */ + flex-grow: 1; /* Make link fill the li element */ + margin-left: 10px; /* Space between icon and text */ + text-align: left; +} + +/* Use this if you want to use a font-awesome icon. This is just an example. + +#search_results li::before { + content: '\f007'; *//* FontAwesome user icon *//* + font-family: 'FontAwesome'; + color: #5A5A5A; *//* Icon color *//* + font-size: 1.2em; *//* Larger icon size *//* +} +*/ + +#search_results li:hover { + background-color: lightgray; +} + +button { + cursor: pointer; +} \ No newline at end of file From b6c3b08fb2782373eaec32563d8235a75ed2a251 Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Tue, 24 Dec 2024 18:00:53 -0300 Subject: [PATCH 02/13] agregar scrollbar al overlay --- themes/pyar/assets/css/custom.css | 6 + themes/pyar/templates/base.tmpl | 203 ++++++++++++++++-------------- 2 files changed, 113 insertions(+), 96 deletions(-) diff --git a/themes/pyar/assets/css/custom.css b/themes/pyar/assets/css/custom.css index b766f2413..a165aff97 100644 --- a/themes/pyar/assets/css/custom.css +++ b/themes/pyar/assets/css/custom.css @@ -576,6 +576,10 @@ small, .small { /* flexsearch_plugin*/ +#search_bar { + text-align: right; +} + #search_overlay { position: fixed; /* Fixed position to cover the whole screen */ width: 100%; @@ -594,6 +598,8 @@ small, .small { padding: 20px; width: 90%; max-width: 600px; /* Limit the width on larger screens */ + max-height: 80%; + overflow-y: auto; /* Adds a vertical scrollbar */ border-radius: 5px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } diff --git a/themes/pyar/templates/base.tmpl b/themes/pyar/templates/base.tmpl index 422b501cd..cdc698826 100644 --- a/themes/pyar/templates/base.tmpl +++ b/themes/pyar/templates/base.tmpl @@ -1,96 +1,107 @@ -{# -*- coding: utf-8 -*- #} -{% import 'base_helper.tmpl' as base with context %} -{% import 'annotation_helper.tmpl' as notes with context %} -{{ set_locale(lang) }} -{{ base.html_headstart() }} -{% block extra_head %} -{# Leave this block alone. #} -{% endblock %} -{{ template_hooks['extra_head']() }} -</head> -<body> -<a href="#content" class="sr-only sr-only-focusable">{{ messages("Skip to main content") }}</a> - -<div class="container px-0"> - <nav id="main-navbar" class="navbar navbar-expand-lg navbar-light bg-light"> - <a class="navbar-brand" href="https://www.python.org.ar/">Navbar</a> - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> - <span class="navbar-toggler-icon"></span> - </button> - - <div class="collapse navbar-collapse" id="navbarSupportedContent"> - <ul class="navbar-nav"> - <li class="nav-item"> - <a class="nav-link" href="http://www.python.org.ar"><span class="inicio"></span>Inicio</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="/pyar/"><span class="quienes_somos"></span>Nosotros</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="/foro_y_redes/"><span class="navbar_lista_de_correo"></span>Foro</a> - </li> - <li class="nav-item active"> - <a class="nav-link" href="/"><span class="wiki"></span>Wiki</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="http://www.python.org.ar/noticias/"><span class="news"></span>Noticias</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="http://www.python.org.ar/irc/"><span class="irc"></span>IRC</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="http://www.python.org.ar/eventos/"><span class="eventos"></span>Eventos</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="http://www.python.org.ar/trabajo/"><span class="jobs"></span>Trabajos</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="https://ac.python.org.ar/"><span class="quienes_somos"></span>Asoc. Civil</a> - </li> - </ul> - </div> - </nav> -</div> - -<!-- Header and menu bar --> -<div class="container" id="content" role="main"> - <div class="body-content"> - {% if theme_config.get('sidebar') %} - <div class="row"><div class="col-md-8 blog-main"> - {% endif %} - <!--Body content--> - {{ template_hooks['page_header']() }} - {% block content %}{% endblock %} - <!--End of body content--> - {% if theme_config.get('sidebar') %} - </div><aside class="col-md-4 blog-sidebar">{{ theme_config.get('sidebar') }}</aside></div> - {% endif %} - - <footer id="footer" class="bg-light"> - {{ content_footer }} - {{ template_hooks['page_footer']() }} - </footer> - </div> -</div> - -{{ base.late_load_js() }} - {% if date_fanciness != 0 %} - <!-- fancy dates --> - <script> - moment.locale("{{ momentjs_locales[lang] }}"); - fancydates({{ date_fanciness }}, {{ js_date_format }}); - </script> - <!-- end fancy dates --> - {% endif %} - {% block extra_js %}{% endblock %} - <script> - baguetteBox.run('div#content', { - ignoreClass: 'islink', - captions: function(element) { - return element.getElementsByTagName('img')[0].alt; - }}); - </script> -{{ body_end }} -{{ template_hooks['body_end']() }} -</body> -</html> +{# -*- coding: utf-8 -*- #} +{% import 'base_helper.tmpl' as base with context %} +{% import 'annotation_helper.tmpl' as notes with context %} +{{ set_locale(lang) }} +{{ base.html_headstart() }} +{% block extra_head %} +{# Leave this block alone. #} +{% endblock %} +{{ template_hooks['extra_head']() }} +</head> +<body> +<a href="#content" class="sr-only sr-only-focusable">{{ messages("Skip to main content") }}</a> + +<div class="container px-0"> + <nav id="main-navbar" class="navbar navbar-expand-lg navbar-light bg-light"> + <a class="navbar-brand" href="https://www.python.org.ar/">Navbar</a> + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> + <span class="navbar-toggler-icon"></span> + </button> + + <div class="collapse navbar-collapse" id="navbarSupportedContent"> + <ul class="navbar-nav"> + <li class="nav-item"> + <a class="nav-link" href="http://www.python.org.ar"><span class="inicio"></span>Inicio</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/pyar/"><span class="quienes_somos"></span>Nosotros</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/foro_y_redes/"><span class="navbar_lista_de_correo"></span>Foro</a> + </li> + <li class="nav-item active"> + <a class="nav-link" href="/"><span class="wiki"></span>Wiki</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="http://www.python.org.ar/noticias/"><span class="news"></span>Noticias</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="http://www.python.org.ar/irc/"><span class="irc"></span>IRC</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="http://www.python.org.ar/eventos/"><span class="eventos"></span>Eventos</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="http://www.python.org.ar/trabajo/"><span class="jobs"></span>Trabajos</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="https://ac.python.org.ar/"><span class="quienes_somos"></span>Asoc. Civil</a> + </li> + </ul> + </div> + + </nav> + <div id="search_bar"> + <div id="search_overlay" style="display:none;"> + <div id="search_content"> + <button onclick="closeSearch()">Cerrar</button> + <div id="search_results"></div> + </div> + </div> + <input type="text" id="search_input"> + <button id="search_button">Buscar en la wiki</button> + </div> +</div> + +<!-- Header and menu bar --> +<div class="container" id="content" role="main"> + <div class="body-content"> + {% if theme_config.get('sidebar') %} + <div class="row"><div class="col-md-8 blog-main"> + {% endif %} + <!--Body content--> + {{ template_hooks['page_header']() }} + {% block content %}{% endblock %} + <!--End of body content--> + {% if theme_config.get('sidebar') %} + </div><aside class="col-md-4 blog-sidebar">{{ theme_config.get('sidebar') }}</aside></div> + {% endif %} + + <footer id="footer" class="bg-light"> + {{ content_footer }} + {{ template_hooks['page_footer']() }} + </footer> + </div> +</div> + +{{ base.late_load_js() }} + {% if date_fanciness != 0 %} + <!-- fancy dates --> + <script> + moment.locale("{{ momentjs_locales[lang] }}"); + fancydates({{ date_fanciness }}, {{ js_date_format }}); + </script> + <!-- end fancy dates --> + {% endif %} + {% block extra_js %}{% endblock %} + <script> + baguetteBox.run('div#content', { + ignoreClass: 'islink', + captions: function(element) { + return element.getElementsByTagName('img')[0].alt; + }}); + </script> +{{ body_end }} +{{ template_hooks['body_end']() }} +</body> +</html> From db21fe165f4c1ae635a8ec98745edcb4dec6f732 Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Tue, 24 Dec 2024 18:12:59 -0300 Subject: [PATCH 03/13] actualizar como buildear la documentacion local --- README.rst | 63 ++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/README.rst b/README.rst index 94fb0be8e..a622e3d76 100644 --- a/README.rst +++ b/README.rst @@ -1,33 +1,30 @@ -Este es el repositorio de los contenidos de la Wiki de Python Argentina - -| http://wiki.python.org.ar/ - -Podés editar los contenidos (incluso agregar páginas) y proponer un pull request, que se -sincronizará automáticamente con la wiki una vez que sea mezclado. - -Antes de clonar el repo, asegurate de tener instalado [Git LFS](https://git-lfs.github.com/) - -Pueden ver como colaborar en la página de `Cómo colaborar -<https://github.com/PyAr/wiki/blob/nikola/pages/colaborandoenelwiki.rst>`__ - -Cómo buildear las páginas -========================= - -.. code-block:: console - - pip install -U pip - pip install -r requirements.txt - - nikola build - nikola serve - -Cómo buildear la imagen de docker -================================= - -.. code-block:: console - - docker build --no-cache --tag tzulberti/wiki -f Dockerfile . - - -Se necesita el `--no-cache` para que la parte de clonar el repo de la -wiki no use un cache sino que se haga todo el tiempo. +Este es el repositorio de los contenidos de la Wiki de Python Argentina + +| http://wiki.python.org.ar/ + +Podés editar los contenidos (incluso agregar páginas) y proponer un pull request, que se +sincronizará automáticamente con la wiki una vez que sea mezclado. + +Antes de clonar el repo, asegurate de tener instalado [Git LFS](https://git-lfs.github.com/) + +Pueden ver como colaborar en la página de `Cómo colaborar +<https://github.com/PyAr/wiki/blob/nikola/pages/colaborandoenelwiki.rst>`__ + +Cómo buildear las páginas +========================= + +.. code-block:: console + + python -m venv .venv + .\.venv\Scripts\Activate.ps1 # en PowerShell + . .venv\bin\activate # en Bash + +.. code-block:: console + + .venv> python -m pip install -U pip + .venv> python -m pip install -r requirements.txt + +.. code-block:: console + + .venv> nikola build + .venv> nikola serve From 824a6b8520c77a04dce056250e3a2927a2bb4f22 Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Tue, 24 Dec 2024 18:51:01 -0300 Subject: [PATCH 04/13] mover codigo fuera de conf.py --- conf.py | 2781 +++++++++++++-------------- themes/pyar/assets/js/flexsearch.js | 67 + themes/pyar/templates/base.tmpl | 2 + 3 files changed, 1414 insertions(+), 1436 deletions(-) create mode 100644 themes/pyar/assets/js/flexsearch.js diff --git a/conf.py b/conf.py index 3adddde43..fbfef1005 100644 --- a/conf.py +++ b/conf.py @@ -1,1436 +1,1345 @@ -# -*- 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 = "Python Argentina" # (translatable) -BLOG_TITLE = "Python Argentina Wiki" # (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://wiki.python.org.ar/" -# This is the URL where Nikola's output will be deployed. -# If not set, defaults to SITE_URL -# BASE_URL = "https://wiki.python.org.ar/" -BLOG_EMAIL = "admin@python.org.ar" -BLOG_DESCRIPTION = "Python Argentina Wiki" # (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 -# gl Galician -# he Hebrew -# hi Hindi -# hr Croatian -# hu Hungarian -# ia Interlingua -# id Indonesian -# it Italian -# ja Japanese [NOT jp] -# ko Korean -# lt Lithuanian -# ml Malayalam -# nb Norwegian (Bokmål) -# nl Dutch -# 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", "Archive"), - ("/categories/", "Tags"), - ("/rss.xml", "RSS feed"), - ), -} - -# 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 = "pyar" - -# Primary color of your theme. This will be used to customize your theme. -# Must be a HEX value. -THEME_COLOR = '#5670d4' - -# Theme configuration. Fully theme-dependent. (translatable) -# Examples below are for bootblog4. -# 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) -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': '' - } -} - -# 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"), -) -PAGES = ( - ("pages/*.rst", "", "page.tmpl"), - ("pages/*.md", "", "page.tmpl"), - ("pages/*.txt", "", "page.tmpl"), - ("pages/*.html", "", "page.tmpl"), -) - -INDEX_PATH = "blog" - - -# 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 = "America/Argentina/Buenos_Aires" - -# 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: http://cldr.unicode.org/translation/date-time -# 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 moment.js: https://momentjs.com/docs/#/displaying/format/ -# JS_DATE_FORMAT = 'YYYY-MM-DD HH:mm' - -# Date fanciness. -# -# 0 = using DATE_FORMAT and TIMEZONE -# 1 = using JS_DATE_FORMAT and local user time (via moment.js) -# 2 = using a string like “2 days ago” -# -# 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. -# -# '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'), -} - -# 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 = '' - -# If you want to hide the title of your website (for example, if your logo -# already contains the text), set this to False. -# 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. -# 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". -# 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. -# 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". -# 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 by 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 and posts. -# Tag pages will still be generated. -HIDDEN_AUTHORS = ['Guest'] - -# 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 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 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 = 'master' -GITHUB_DEPLOY_BRANCH = 'gh_pages' - -# 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 = False - -# 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 'tidy5'). -# HTML_TIDY_EXECUTABLE = 'tidy5' - -# 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 = [] -# -# 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). - -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. Leave empty 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 = '<span>Contents © {date} <a href="mailto:{email}">{author}</a> - Powered by <a href="https://getnikola.com" rel="nofollow" target="_blanc">Nikola</a> {license}</span><span><a href="https://ac.python.org.ar/#donaciones" rel="nofollow" target="_blanc">Aporta a PyAr con tu donación<a/></span>' - -# 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, facebook, intensedebate, isso, muut, commento -# 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: http://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 a 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 {} (no config at all) -# MARKDOWN_EXTENSION_CONFIGS = {} - - -# Extra options to pass to the pandoc command. -# by default, it's empty, is a list of strings, for example -# ['-F', 'pandoc-citeproc', '--bibliography=/Users/foo/references.bib'] -# 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 = True -# 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 = True - -# 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 = "" -# 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) -# } -# } - -# 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 = False - -# 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_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 = {} - -# 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 = [] - -########################### -# FLEXSEARCH # -########################### - -# Use this to add the search results to an overlay -# In this case you need the following in your template. Check the readme for a base css.: -# <div id="search_overlay" style="display:none;"> -# <div id="search_content"> -# <button onclick="closeSearch()">Close</button> -# <div id="search_results"></div> -# </div> -# </div> -# <input type="text" id="search_input"> -# <button id="search_button">Search</button> - -FLEXSEARCH_OVERLAY = """ -<script src="https://rawcdn.githack.com/nextapps-de/flexsearch/0.7.31/dist/flexsearch.bundle.js"></script> - -<script> -document.addEventListener('DOMContentLoaded', function() { - var searchIndex = new FlexSearch.Index(); // Initialize FlexSearch - var index = {}; // This will store the index data globally within this script block - - // Fetch the generated JSON file - fetch('/search_index.json') - .then(response => response.json()) - .then(data => { - index = data; // Store the fetched data in the 'index' variable - for (var key in index) { - if (index.hasOwnProperty(key)) { - searchIndex.add(key, index[key].content); - } - } - }); - - var input = document.getElementById('search_input'); - var button = document.getElementById('search_button'); - - // Function to perform search - function performSearch() { - var query = input.value; - var results = searchIndex.search(query); - var resultsContainer = document.getElementById('search_results'); - resultsContainer.innerHTML = ''; // Clear previous results - - var ul = document.createElement('ul'); // Create a UL element to hold the results - - // Display results - results.forEach(function(result) { - var li = document.createElement('li'); // Create a LI element for each result - var link = document.createElement('a'); - link.href = index[result].url; - link.textContent = index[result].title; - li.appendChild(link); - ul.appendChild(li); // Append the LI to the UL - }); - - resultsContainer.appendChild(ul); // Append the UL to the results container - document.getElementById('search_overlay').style.display = 'flex'; // Show the overlay - } - - // Event listener for search button click - button.addEventListener('click', performSearch); - - // Event listener for pressing enter key in the search input - input.addEventListener('keypress', function(event) { - if (event.key === "Enter" || event.keyCode === 13) { - event.preventDefault(); // Prevent the form from being submitted - performSearch(); - } - }); -}); - -// Function to close the search overlay -function closeSearch() { - document.getElementById('search_overlay').style.display = 'none'; -} - -document.addEventListener('keydown', function(event) { - if (event.key === 'Escape') { - var searchOverlay = document.getElementById('search_overlay'); - if (searchOverlay !== null) { - closeSearch(); - } - } -}); -</script> -""" - -BODY_END = BODY_END + FLEXSEARCH_OVERLAY \ No newline at end of file +# -*- 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 = "Python Argentina" # (translatable) +BLOG_TITLE = "Python Argentina Wiki" # (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://wiki.python.org.ar/" +# This is the URL where Nikola's output will be deployed. +# If not set, defaults to SITE_URL +# BASE_URL = "https://wiki.python.org.ar/" +BLOG_EMAIL = "admin@python.org.ar" +BLOG_DESCRIPTION = "Python Argentina Wiki" # (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 +# gl Galician +# he Hebrew +# hi Hindi +# hr Croatian +# hu Hungarian +# ia Interlingua +# id Indonesian +# it Italian +# ja Japanese [NOT jp] +# ko Korean +# lt Lithuanian +# ml Malayalam +# nb Norwegian (Bokmål) +# nl Dutch +# 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", "Archive"), + ("/categories/", "Tags"), + ("/rss.xml", "RSS feed"), + ), +} + +# 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 = "pyar" + +# Primary color of your theme. This will be used to customize your theme. +# Must be a HEX value. +THEME_COLOR = '#5670d4' + +# Theme configuration. Fully theme-dependent. (translatable) +# Examples below are for bootblog4. +# 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) +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': '' + } +} + +# 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"), +) +PAGES = ( + ("pages/*.rst", "", "page.tmpl"), + ("pages/*.md", "", "page.tmpl"), + ("pages/*.txt", "", "page.tmpl"), + ("pages/*.html", "", "page.tmpl"), +) + +INDEX_PATH = "blog" + + +# 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 = "America/Argentina/Buenos_Aires" + +# 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: http://cldr.unicode.org/translation/date-time +# 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 moment.js: https://momentjs.com/docs/#/displaying/format/ +# JS_DATE_FORMAT = 'YYYY-MM-DD HH:mm' + +# Date fanciness. +# +# 0 = using DATE_FORMAT and TIMEZONE +# 1 = using JS_DATE_FORMAT and local user time (via moment.js) +# 2 = using a string like “2 days ago” +# +# 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. +# +# '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'), +} + +# 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 = '' + +# If you want to hide the title of your website (for example, if your logo +# already contains the text), set this to False. +# 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. +# 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". +# 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. +# 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". +# 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 by 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 and posts. +# Tag pages will still be generated. +HIDDEN_AUTHORS = ['Guest'] + +# 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 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 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 = 'master' +GITHUB_DEPLOY_BRANCH = 'gh_pages' + +# 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 = False + +# 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 'tidy5'). +# HTML_TIDY_EXECUTABLE = 'tidy5' + +# 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 = [] +# +# 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). + +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. Leave empty 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 = '<span>Contents © {date} <a href="mailto:{email}">{author}</a> - Powered by <a href="https://getnikola.com" rel="nofollow" target="_blanc">Nikola</a> {license}</span><span><a href="https://ac.python.org.ar/#donaciones" rel="nofollow" target="_blanc">Aporta a PyAr con tu donación<a/></span>' + +# 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, facebook, intensedebate, isso, muut, commento +# 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: http://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 a 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 {} (no config at all) +# MARKDOWN_EXTENSION_CONFIGS = {} + + +# Extra options to pass to the pandoc command. +# by default, it's empty, is a list of strings, for example +# ['-F', 'pandoc-citeproc', '--bibliography=/Users/foo/references.bib'] +# 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 = True +# 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 = True + +# 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 = "" +# 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) +# } +# } + +# 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 = False + +# 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_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 = {} + +# 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/themes/pyar/assets/js/flexsearch.js b/themes/pyar/assets/js/flexsearch.js new file mode 100644 index 000000000..6e101d59f --- /dev/null +++ b/themes/pyar/assets/js/flexsearch.js @@ -0,0 +1,67 @@ +document.addEventListener('DOMContentLoaded', function() { + var searchIndex = new FlexSearch.Index(); // Initialize FlexSearch + var index = {}; // This will store the index data globally within this script block + + // Fetch the generated JSON file + fetch('/wiki/search_index.json') + .then(response => response.json()) + .then(data => { + index = data; // Store the fetched data in the 'index' variable + for (var key in index) { + if (index.hasOwnProperty(key)) { + searchIndex.add(key, index[key].content); + } + } + }); + + var input = document.getElementById('search_input'); + var button = document.getElementById('search_button'); + + // Function to perform search + function performSearch() { + var query = input.value; + var results = searchIndex.search(query); + var resultsContainer = document.getElementById('search_results'); + resultsContainer.innerHTML = ''; // Clear previous results + + var ul = document.createElement('ul'); // Create a UL element to hold the results + + // Display results + results.forEach(function(result) { + var li = document.createElement('li'); // Create a LI element for each result + var link = document.createElement('a'); + link.href = index[result].url; + link.textContent = index[result].title; + li.appendChild(link); + ul.appendChild(li); // Append the LI to the UL + }); + + resultsContainer.appendChild(ul); // Append the UL to the results container + document.getElementById('search_overlay').style.display = 'flex'; // Show the overlay + } + + // Event listener for search button click + button.addEventListener('click', performSearch); + + // Event listener for pressing enter key in the search input + input.addEventListener('keypress', function(event) { + if (event.key === "Enter" || event.keyCode === 13) { + event.preventDefault(); // Prevent the form from being submitted + performSearch(); + } + }); +}); + +// Function to close the search overlay +function closeSearch() { + document.getElementById('search_overlay').style.display = 'none'; +} + +document.addEventListener('keydown', function(event) { + if (event.key === 'Escape') { + var searchOverlay = document.getElementById('search_overlay'); + if (searchOverlay !== null) { + closeSearch(); + } + } +}); \ No newline at end of file diff --git a/themes/pyar/templates/base.tmpl b/themes/pyar/templates/base.tmpl index cdc698826..8cafcbae7 100644 --- a/themes/pyar/templates/base.tmpl +++ b/themes/pyar/templates/base.tmpl @@ -101,6 +101,8 @@ return element.getElementsByTagName('img')[0].alt; }}); </script> + <script src="https://rawcdn.githack.com/nextapps-de/flexsearch/0.7.31/dist/flexsearch.bundle.js"></script> + <script src="/assets/js/flexsearch.js"></script> {{ body_end }} {{ template_hooks['body_end']() }} </body> From f22c3e9ab52a658648a90d272ddb8154ae7c99aa Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Tue, 24 Dec 2024 19:06:59 -0300 Subject: [PATCH 05/13] REMOVER COMMIT: Workflow Dispatch --- .github/workflows/build_docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index 4114d4cf6..ae152b8a5 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -19,7 +19,7 @@ on: - themes/** - plugins/** - images/** - + workflow_dispatch: jobs: build: From 404dcf5e5ae910f26b479461879456de85ae2604 Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Sun, 26 Jan 2025 18:07:40 -0300 Subject: [PATCH 06/13] Arreglar los permalinks para que sean relativos --- plugins/flexsearch_plugin/flexsearch_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/flexsearch_plugin/flexsearch_plugin.py b/plugins/flexsearch_plugin/flexsearch_plugin.py index c616feeff..2faf0e98f 100644 --- a/plugins/flexsearch_plugin/flexsearch_plugin.py +++ b/plugins/flexsearch_plugin/flexsearch_plugin.py @@ -51,7 +51,7 @@ def build_index(): index[post.meta('slug')] = { 'title': post.title(), 'content': post.text(strip_html=True), - 'url': post.permalink() + 'url': post.permalink(absolute=False) } with open(index_file_path, 'w', encoding='utf-8') as f: json.dump(index, f, ensure_ascii=False) From a58982fdf690731b4fc216acb2f152ac667a5376 Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Sun, 26 Jan 2025 18:08:14 -0300 Subject: [PATCH 07/13] forzar al search a buscar en el root --- themes/pyar/assets/js/flexsearch.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/themes/pyar/assets/js/flexsearch.js b/themes/pyar/assets/js/flexsearch.js index 6e101d59f..15e957c89 100644 --- a/themes/pyar/assets/js/flexsearch.js +++ b/themes/pyar/assets/js/flexsearch.js @@ -1,9 +1,10 @@ -document.addEventListener('DOMContentLoaded', function() { + document.addEventListener('DOMContentLoaded', function() { var searchIndex = new FlexSearch.Index(); // Initialize FlexSearch var index = {}; // This will store the index data globally within this script block // Fetch the generated JSON file - fetch('/wiki/search_index.json') + var indexPath = document.location.origin + "/search_index.json" + fetch(indexPath) .then(response => response.json()) .then(data => { index = data; // Store the fetched data in the 'index' variable @@ -52,6 +53,7 @@ document.addEventListener('DOMContentLoaded', function() { }); }); + // Function to close the search overlay function closeSearch() { document.getElementById('search_overlay').style.display = 'none'; From aa4d106d558494b47e30b8f16abc5e983c36b60e Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Sun, 26 Jan 2025 18:09:26 -0300 Subject: [PATCH 08/13] eliminar cambio en workflow --- .github/workflows/build_docs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index ae152b8a5..95bf1bbf9 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -19,7 +19,6 @@ on: - themes/** - plugins/** - images/** - workflow_dispatch: jobs: build: From 3c290a29c3e7ed461bd1b480a4b7881501a38d71 Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Sun, 26 Jan 2025 19:54:04 -0300 Subject: [PATCH 09/13] simplificar el uso del buscador --- themes/pyar/assets/css/custom.css | 31 ++++++++++----- themes/pyar/assets/js/flexsearch.js | 59 +++++++++++++++++------------ themes/pyar/templates/base.tmpl | 7 ++-- 3 files changed, 59 insertions(+), 38 deletions(-) diff --git a/themes/pyar/assets/css/custom.css b/themes/pyar/assets/css/custom.css index a165aff97..febc75909 100644 --- a/themes/pyar/assets/css/custom.css +++ b/themes/pyar/assets/css/custom.css @@ -583,7 +583,7 @@ small, .small { #search_overlay { position: fixed; /* Fixed position to cover the whole screen */ width: 100%; - height: 100%; + height: calc(100vh - 40px); top: 0; left: 0; background: rgba(0, 0, 0, 0.8); /* Semi-transparent background */ @@ -593,25 +593,36 @@ small, .small { align-items: center; } -#search_content { - background: white; - padding: 20px; - width: 90%; - max-width: 600px; /* Limit the width on larger screens */ - max-height: 80%; - overflow-y: auto; /* Adds a vertical scrollbar */ - border-radius: 5px; - box-shadow: 0 4px 6px rgba(0,0,0,0.1); +#search_content { + display: flex; + flex-direction: column; + justify-content: space-around; + justify-items: center; + overflow: hidden; + background: white; + padding: 20px; + width: 90%; + max-width: 90%; /* Limit the width on larger screens */ + max-height: 90%; + border-radius: 5px; + box-shadow: 0 4px 6px rgba(0,0,0,0.1); } #search_results { margin-top: 20px; width: 100%; + height: fit-content; + flex-grow: 1; + flex-shrink: 1; + overflow: auto; } #search_results ul { + overflow-y: auto; list-style-type: circle; /* Ensuring list style is visible */ padding-left: 20px; /* Adequate space for bullets */ + /* display: grid; */ + /* max-height: inherit; */ } #search_results li { diff --git a/themes/pyar/assets/js/flexsearch.js b/themes/pyar/assets/js/flexsearch.js index 15e957c89..b4e6b5f0a 100644 --- a/themes/pyar/assets/js/flexsearch.js +++ b/themes/pyar/assets/js/flexsearch.js @@ -1,9 +1,10 @@ - document.addEventListener('DOMContentLoaded', function() { +document.addEventListener('DOMContentLoaded', function() { var searchIndex = new FlexSearch.Index(); // Initialize FlexSearch var index = {}; // This will store the index data globally within this script block // Fetch the generated JSON file - var indexPath = document.location.origin + "/search_index.json" + const basePath = "" //document.location.hostname == "localhost" ? "": "/wiki" //Parche para probar en las GHP de mi fork ak.saxa.xyz/wiki + var indexPath = document.location.origin + basePath + "/search_index.json" fetch(indexPath) .then(response => response.json()) .then(data => { @@ -15,55 +16,63 @@ } }); + var inputBase = document.getElementById('search_input_base'); var input = document.getElementById('search_input'); - var button = document.getElementById('search_button'); // Function to perform search function performSearch() { var query = input.value; + var results = searchIndex.search(query); var resultsContainer = document.getElementById('search_results'); resultsContainer.innerHTML = ''; // Clear previous results + var resultsCount = document.getElementById('search_count'); + resultsCount.innerHTML = results.length + " resultado(s)"; + + if (input.value === ""){ + return + } + var ul = document.createElement('ul'); // Create a UL element to hold the results // Display results results.forEach(function(result) { var li = document.createElement('li'); // Create a LI element for each result var link = document.createElement('a'); - link.href = index[result].url; + link.href = basePath + index[result].url; link.textContent = index[result].title; li.appendChild(link); ul.appendChild(li); // Append the LI to the UL }); resultsContainer.appendChild(ul); // Append the UL to the results container - document.getElementById('search_overlay').style.display = 'flex'; // Show the overlay } - // Event listener for search button click - button.addEventListener('click', performSearch); + inputBase.addEventListener('click', ()=>{ + document.getElementById('search_overlay').style.display = 'flex'; // Show the overlay + inputBase.disabled = true; + input.focus(); + }) - // Event listener for pressing enter key in the search input - input.addEventListener('keypress', function(event) { - if (event.key === "Enter" || event.keyCode === 13) { - event.preventDefault(); // Prevent the form from being submitted - performSearch(); + // Event listener for each change in the input field + input.addEventListener('input', performSearch); + +// Function to close the search overlay + function closeSearch() { + document.getElementById('search_overlay').style.display = 'none'; + document.getElementById('search_input_base').disabled = false; + document.getElementById('search_input').value === "" + } + + document.addEventListener('keydown', function(event) { + if (event.key === 'Escape') { + var searchOverlay = document.getElementById('search_overlay'); + if (searchOverlay !== null) { + closeSearch(); + } } }); }); -// Function to close the search overlay -function closeSearch() { - document.getElementById('search_overlay').style.display = 'none'; -} - -document.addEventListener('keydown', function(event) { - if (event.key === 'Escape') { - var searchOverlay = document.getElementById('search_overlay'); - if (searchOverlay !== null) { - closeSearch(); - } - } -}); \ No newline at end of file diff --git a/themes/pyar/templates/base.tmpl b/themes/pyar/templates/base.tmpl index 8cafcbae7..afbfdc193 100644 --- a/themes/pyar/templates/base.tmpl +++ b/themes/pyar/templates/base.tmpl @@ -54,12 +54,13 @@ <div id="search_bar"> <div id="search_overlay" style="display:none;"> <div id="search_content"> - <button onclick="closeSearch()">Cerrar</button> + <input type="text" id="search_input" placeholder="Buscar 🔎"> + <div id="search_count"></div> <div id="search_results"></div> + <button id="boton_cerrar" onclick="closeSearch()">Cerrar (Esc)</button> </div> </div> - <input type="text" id="search_input"> - <button id="search_button">Buscar en la wiki</button> + <input type="text" id="search_input_base" placeholder="Buscar en la wiki 🔎"> </div> </div> From 8133ebb383c103c1a2869c4b4c6c12c763f0cb05 Mon Sep 17 00:00:00 2001 From: akielbowicz <augusto.kiel@gmail.com> Date: Sun, 26 Jan 2025 20:00:01 -0300 Subject: [PATCH 10/13] =?UTF-8?q?poner=20atribuci=C3=B3n=20al=20c=C3=B3dig?= =?UTF-8?q?o=20original?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- themes/pyar/assets/js/flexsearch.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/themes/pyar/assets/js/flexsearch.js b/themes/pyar/assets/js/flexsearch.js index b4e6b5f0a..bc885ae0f 100644 --- a/themes/pyar/assets/js/flexsearch.js +++ b/themes/pyar/assets/js/flexsearch.js @@ -1,3 +1,5 @@ +// Basado en https://plugins.getnikola.com/#flexsearch_plugin + document.addEventListener('DOMContentLoaded', function() { var searchIndex = new FlexSearch.Index(); // Initialize FlexSearch var index = {}; // This will store the index data globally within this script block From ab3f69e26864cde3baf3d442f3b6b7222da39a52 Mon Sep 17 00:00:00 2001 From: Roberto Betancur <roberto.betancur@slyt.gba.gov.ar> Date: Fri, 21 Mar 2025 20:09:09 -0300 Subject: [PATCH 11/13] fix searchbar accuracy --- .../flexsearch_plugin/flexsearch_plugin.py | 3 ++ themes/pyar/assets/css/custom.css | 32 +++++++++++-------- themes/pyar/assets/js/flexsearch.js | 21 ++++++------ themes/pyar/templates/base.tmpl | 4 ++- 4 files changed, 37 insertions(+), 23 deletions(-) diff --git a/plugins/flexsearch_plugin/flexsearch_plugin.py b/plugins/flexsearch_plugin/flexsearch_plugin.py index 2faf0e98f..b1f0db285 100644 --- a/plugins/flexsearch_plugin/flexsearch_plugin.py +++ b/plugins/flexsearch_plugin/flexsearch_plugin.py @@ -27,6 +27,9 @@ class FlexSearchPlugin(LateTask): + '''iterea sobre todos los post + saca el titulo y el contenido del tituo y el url + ''' name = "flexsearch_plugin" def set_site(self, site): diff --git a/themes/pyar/assets/css/custom.css b/themes/pyar/assets/css/custom.css index febc75909..e80459f65 100644 --- a/themes/pyar/assets/css/custom.css +++ b/themes/pyar/assets/css/custom.css @@ -112,6 +112,12 @@ iframe#google { padding-top:0; } +#boton_cerrar { + border-style: groove; + border-width: thin; + width: fit-content; + align-self: self-end; +} /* * Panels @@ -593,19 +599,19 @@ small, .small { align-items: center; } -#search_content { - display: flex; - flex-direction: column; - justify-content: space-around; - justify-items: center; - overflow: hidden; - background: white; - padding: 20px; - width: 90%; - max-width: 90%; /* Limit the width on larger screens */ - max-height: 90%; - border-radius: 5px; - box-shadow: 0 4px 6px rgba(0,0,0,0.1); +#search_content { + display: flex; + flex-direction: column; + justify-content: space-around; + justify-items: center; + overflow: hidden; + background: white; + padding: 20px; + width: 90%; + max-width: 90%; /* Limit the width on larger screens */ + max-height: 90%; + border-radius: 5px; + box-shadow: 0 4px 6px rgba(0,0,0,0.1); } #search_results { diff --git a/themes/pyar/assets/js/flexsearch.js b/themes/pyar/assets/js/flexsearch.js index bc885ae0f..be1f3efa2 100644 --- a/themes/pyar/assets/js/flexsearch.js +++ b/themes/pyar/assets/js/flexsearch.js @@ -1,8 +1,11 @@ // Basado en https://plugins.getnikola.com/#flexsearch_plugin document.addEventListener('DOMContentLoaded', function() { - var searchIndex = new FlexSearch.Index(); // Initialize FlexSearch - var index = {}; // This will store the index data globally within this script block + var searchIndex = new FlexSearch.Index({ + tokenize: "full", + async: true, + }); // Initialize FlexSearch + var index = {}; // Fetch the generated JSON file const basePath = "" //document.location.hostname == "localhost" ? "": "/wiki" //Parche para probar en las GHP de mi fork ak.saxa.xyz/wiki @@ -60,13 +63,6 @@ document.addEventListener('DOMContentLoaded', function() { // Event listener for each change in the input field input.addEventListener('input', performSearch); -// Function to close the search overlay - function closeSearch() { - document.getElementById('search_overlay').style.display = 'none'; - document.getElementById('search_input_base').disabled = false; - document.getElementById('search_input').value === "" - } - document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { var searchOverlay = document.getElementById('search_overlay'); @@ -77,4 +73,11 @@ document.addEventListener('DOMContentLoaded', function() { }); }); +// Function to close the search overlay +function closeSearch() { + document.getElementById('search_overlay').style.display = 'none'; + document.getElementById('search_input_base').disabled = false; + document.getElementById('search_input').value === "" +}; + diff --git a/themes/pyar/templates/base.tmpl b/themes/pyar/templates/base.tmpl index afbfdc193..7433601f2 100644 --- a/themes/pyar/templates/base.tmpl +++ b/themes/pyar/templates/base.tmpl @@ -102,9 +102,11 @@ return element.getElementsByTagName('img')[0].alt; }}); </script> - <script src="https://rawcdn.githack.com/nextapps-de/flexsearch/0.7.31/dist/flexsearch.bundle.js"></script> + <script src="https://cdn.jsdelivr.net/gh/nextapps-de/flexsearch@0.8.0/dist/flexsearch.bundle.min.js"></script> <script src="/assets/js/flexsearch.js"></script> {{ body_end }} {{ template_hooks['body_end']() }} </body> </html> + +dist/lang/en.min.js \ No newline at end of file From 408f12e8071529b9d25e9c9199ec3006bbced2ad Mon Sep 17 00:00:00 2001 From: Roberto Betancur <roberto.betancur@slyt.gba.gov.ar> Date: Fri, 21 Mar 2025 20:30:36 -0300 Subject: [PATCH 12/13] fix typo --- themes/pyar/templates/base.tmpl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/themes/pyar/templates/base.tmpl b/themes/pyar/templates/base.tmpl index 7433601f2..7da8ea86c 100644 --- a/themes/pyar/templates/base.tmpl +++ b/themes/pyar/templates/base.tmpl @@ -107,6 +107,4 @@ {{ body_end }} {{ template_hooks['body_end']() }} </body> -</html> - -dist/lang/en.min.js \ No newline at end of file +</html> \ No newline at end of file From 300fd08464c2b9c9236e81639318892e8aec129c Mon Sep 17 00:00:00 2001 From: Roberto Betancur <roberto.betancur@slyt.gba.gov.ar> Date: Sat, 22 Mar 2025 12:02:18 -0300 Subject: [PATCH 13/13] =?UTF-8?q?basepath=20arreglado=20y=20agregada=20eva?= =?UTF-8?q?luaci=C3=B3n=20de=20la=20url=20mediante=20lista?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flexsearch_plugin/flexsearch_plugin.py | 2 +- themes/pyar/assets/js/flexsearch.js | 21 ++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/plugins/flexsearch_plugin/flexsearch_plugin.py b/plugins/flexsearch_plugin/flexsearch_plugin.py index b1f0db285..b3fca9e7b 100644 --- a/plugins/flexsearch_plugin/flexsearch_plugin.py +++ b/plugins/flexsearch_plugin/flexsearch_plugin.py @@ -43,7 +43,7 @@ def gen_tasks(self): yield self.group_task() output_path = self.site.config['OUTPUT_FOLDER'] - index_file_path = os.path.join(output_path, 'search_index.json') + index_file_path = os.path.join(output_path, 'assets', 'search_index.json') def build_index(): """Build the entire search index from scratch.""" diff --git a/themes/pyar/assets/js/flexsearch.js b/themes/pyar/assets/js/flexsearch.js index be1f3efa2..01db2a6c1 100644 --- a/themes/pyar/assets/js/flexsearch.js +++ b/themes/pyar/assets/js/flexsearch.js @@ -1,6 +1,10 @@ // Basado en https://plugins.getnikola.com/#flexsearch_plugin + document.addEventListener('DOMContentLoaded', function() { + + const wiki_host_for_dev_or_prod = ['127.0.0.1', 'localhost', '0.0.0.0', 'wiki.python.org.ar']; + var searchIndex = new FlexSearch.Index({ tokenize: "full", async: true, @@ -8,8 +12,19 @@ document.addEventListener('DOMContentLoaded', function() { var index = {}; // Fetch the generated JSON file - const basePath = "" //document.location.hostname == "localhost" ? "": "/wiki" //Parche para probar en las GHP de mi fork ak.saxa.xyz/wiki - var indexPath = document.location.origin + basePath + "/search_index.json" + function get_basePath() { + // evalua si el url.host NO es igual a wiki.python.org.ar para setear el basepath de los links + if (wiki_host_for_dev_or_prod.includes(window.location.hostname)) { + return basePath = window.location.host + } else { + // asumimos que el wiki esta alojado bajo /wiki por la relación de las github_pages + return basePath = window.location.host + "/wiki"; + } + }; + + get_basePath() + var indexPath = `//${basePath}/assets/search_index.json`; + fetch(indexPath) .then(response => response.json()) .then(data => { @@ -45,7 +60,7 @@ document.addEventListener('DOMContentLoaded', function() { results.forEach(function(result) { var li = document.createElement('li'); // Create a LI element for each result var link = document.createElement('a'); - link.href = basePath + index[result].url; + link.href = `//${basePath}${index[result].url}`; link.textContent = index[result].title; li.appendChild(link); ul.appendChild(li); // Append the LI to the UL