Commit 874168a7 authored by Denis Salem's avatar Denis Salem
Browse files

refactor dates to archives, wip on documentation

parent dccbeb5b
......@@ -28,7 +28,7 @@ path:
chapters_sub_folders: ""
reverse_thread_order: false
feed_lenght: 5
text_editor: gvim
text_editor: geany
disable_rss_feed: true
disable_atom_feed: true
disable_main_thread: true
......
......@@ -22,5 +22,11 @@ Pour désinstaller VenC, c'est triste, mais rien de plus simple.
Et voilà!
.:GetRelativeOrigin:.
Petite précision. Les dépendances de VenC ne sont pas désinstallées automatiquement:
- [docutils](http://docutils.sourceforge.net/)
- [latex2mathml](https://github.com/roniemartinez/latex2mathml)
- [markdown2](https://github.com/trentm/python-markdown2)
- [pyyaml](https://github.com/yaml/pyyaml)
- [Pygments](https://pygments.org/)
- [requests](https://2.python-requests.org/en/master/)
authors: ''
authors: 'Denis Salem'
categories: ''
chapter: 3.1
tags: ''
......@@ -29,7 +29,7 @@ blog_description: 'Les tribulations du roy de France Jean Rochefort en direct du
blog_keywords: 'cinema,moustache,punchline,boloss'
blog_language: 'fr'
blog_name: 'Le blog de Jean Rochefort, élu roy de France par les internets.'
license: 'License royale':.
license: 'Licence royale':.
Pour plus d'informations sur la configuration du blog, rendez-vous [ici](https://framagit.org/denissalem/VenC/blob/master/doc/FR.md#fichier-de-configuration-principal)
......
......@@ -72,8 +72,8 @@ Par exemple:
.:CodeHighlight::Yaml::False::
path:
category_directory_name: '/{category}' # Incorrect
dates_directory_name: '%m-%Y' # Correct
dates_sub_folders: '/' # Incorrect
archives_directory_name: '%m-%Y' # Correct
archives_sub_folders: '/' # Incorrect
categories_sub_folders: '' # Correct
entries_sub_folders: '{entry_title}' # Correct
:.
......@@ -89,7 +89,9 @@ Si l'environnement système est mal configuré vous pourriez avoir quelque chose
Cela signifie que vos locales ne sont pas correctement configurées, la résolution de ce probléme est spécifique à chaque distribution GNU/Linux.
## Où trouver le code source?
Sur [github](https://github.com/DenisSalem/VenC) ou sur [framagit](https://framagit.org/denissalem/VenC/).
authors: 'Denis Salem'
categories: ''
chapter: 4
tags: ''
title: Structure et organisation d'un projet
---VENC-BEGIN-PREVIEW---
---VENC-END-PREVIEW---
Dans cette partie nous verrons comment sont organisés les fichiers d'un projet VenC et comment ceux-là sont structurés.
authors: 'Denis Salem'
categories: ''
tags: ''
chapter: 4.1
title: Arborescence
---VENC-BEGIN-PREVIEW---
---VENC-END-PREVIEW---
La racine du projet porte le nom du blog, par exemple, "MooFooBar".
Lorsque vous créez un nouveau projet, VenC produit un certain nombre de répertoires listés ci-dessous.
- __blog__ : _Le dossier où est exporté le projet._
- __extra__ : _Un dossier contenant des ressources quelquonques copiées vers blog/ au moment de l'exportation._
- __entries__ : _Contient toutes les publications sous forme de fichiers texte numérotés et datés._
- __theme__ : _Contient les templates html, les feuilles de style et éventuellement les scripts JS._
- __templates__ : _Contient des modèles vierges pour de futurs publications._
- __includes__ : _Ce repertoire contient des fichiers html que vous pouvez inclure n'importe où dans votre projet avec la fonction [IncludeFile]()._
- __caches__ : _Ce répertoire n'est pas généré automatiquement à la création de votre projet. Mais il peut apparaitre plus tard, notamment si vous utilisez la fonction [GetEmbedContent]()._
authors: 'Denis Salem'
categories: ''
tags: ''
chapter: 4.2
title: Fichier de configuration principal
---VENC-BEGIN-PREVIEW---
---VENC-END-PREVIEW---
__blog_configuration.yaml__ est un document Yaml à la racine du projet définissant les propriétés du blog, comme son titre, le nom de son auteur, ainsi que des détails fonctionnels comme le nombre de publications par pages ou l'ordre d'affichage de celles-ci.
Immédiatement après avoir créé votre blog, il s'agira sans doute du premier fichier que vous éditerez. Après avoir rempli ces champs dont l'usage est détaillé ci-dessous, vous n'aurez normalement plus besoin d'y retoucher.
- __.:DisableMarkup::blog_name:.__ : Sans surprise, il s'agit du titre de votre blog.
- __.:DisableMarkup::text_editor:.__ : L'éditeur de texte choisi pour éditer une nouvelle publication du blog.
- __.:DisableMarkup::date_format:.__ : "%A %d. %B %Y" par défaut. Définit le format de date utilisé à l'intérieur du blog. Le format des dates est en fait le même que celui utilisé par python. Pour en savoir plus sur ce format rendez vous [ici](http://strftime.org).
- __.:DisableMarkup::author_name:.__: Le nom de l'administrateur ou l'auteur du blog.
- __:DisableMarkup::ftp_host:.__ : Le nom d'hôte de votre serveur FTP.
- __:DisableMarkup::blog_description:.__ : Un très court résumé de ce dont parle votre site.
- __:DisableMarkup::blog_keywords:.__ : Les mots clefs associés au site.
- __:DisableMarkup::author_description:.__ : Un court texte à propos de l'auteur du blog.
- __license__ : La licence appliquée au contenu de votre site.
- __:DisableMarkup::blog_url:.__ : L'url du blog. Peut être laissée vide, selon le thème utilisé.
- __:DisableMarkup::blog_language:.__ : Définit la langue du site.
- __:DisableMarkup::author_email:.__ : Votre adresse e-mail.
- __columns__ : "1" par défaut. Ce champ définit le nombre de colonnes dans une page.
- __.:DisableMarkup::rss_thread_lenght:.__ : "5" par défaut. Définit le nombre de publications à afficher dans le flux RSS.
- __.:DisableMarkup::thread_order:.__ : "latest first" par défaut. Définit l'ordre de publication. Du plus anciens au plus récent, ou l'inverse. Ce champ peut prendre comme valeur soit "oldest first", soit "latest first".
- __path__ : Il s'agit d'une variable contenant différents chemins, vous ne devriez normalement pas avoir besoin d'y toucher. La liste de ces chemins est détaillé ci-dessous
- __ftp__ : Le chemin absolu du répertoire de destination sur votre serveur ftp.
- __entries_sub_folders__ :
- __categories_sub_folders__ :
- __archives_sub_folders__ :
- __.:DisableMarkup::index_file_name:.__ : "index{page_number}.html" par défaut. Le nom de fichier formaté des pages du fil principal de publications. Devrait toujours contenir la variable {page_number}.
- __.:DisableMarkup::category_directory_name:.__ : "{category}" par défaut. Définit le répertoire où sera exporté un fil de publication spécifique à une catégorie de publication. Ce champ devrait donc toujours contenir la variable {category}.
- __.:DisableMarkup::archives_directory_name:.__ : "%Y-%m" par défaut. Définit le format de date utilisé pour les noms de répertoires de fils de publications associés à des dates. Le format des dates est en fait le même que celui utilisé par python. Pour en savoir plus sur ce format rendez vous [ici](http://strftime.org).
- __.:DisableMarkup::entry_file_name:.__ : "entry{entry_id}.html" par défaut. Définit le nom de fichier d'une publication unique. Ce champ devrait toujours contenir la variable {entry_id}.
- __.:DisableMarkup::rss_file_name:.__ : "feed.xml" par défaut. Définit le nom de fichier du flux rss.
- __.:DisableMarkup::entries_per_pages:.__ : "10" par défaut. Définit évidemment le nombre de publications par page.
- __columns__ :
- __feed_lenght__ :
- __reverse_thread_order__ :
- __markup_language__ :
- __path_encoding__ :
- __server_port__ :
- __sort_by__ :
- __enable_jsonld__ :
- __enable_jsonp__ :
- __disable_rss_feed__:
- __disable_atom_feed__:
- __disable_main_thread__:
- __disable_threads__:
- __disable_archives__:
- __disable_chapters__:
- __disable_categories__:
- __disable_single_entries__:
......@@ -10,6 +10,9 @@ body
text-shadow: 0px 2px #000;
background-color: #181818;}
strong
{font-weight: bold;}
aside
{display: inline-block;
position: absolute;
......@@ -46,6 +49,9 @@ blockquote p
{margin-top: 0px;
margin-bottom: 0px;}
.entry
{padding-right: 15px;}
.venc_source_Yaml
{font-size: 1em;
margin-left: 15px;
......@@ -75,8 +81,7 @@ blockquote p
#content h3,
#content blockquote,
#content p
{margin-left: 15px;
margin-right: 15px;}
{margin-left: 15px;}
#content p
{text-align: justify;}
......
......@@ -162,19 +162,19 @@ cd # version 1.0.0 Last minute edition :p
DONE | Fix pattern processing within included file.
DONE | Add ForEntryMetadata
DONE | Add ForEntryRange
DONE | Add IfChapters and use it in academik to hide/show chapters navigation.
DONE | Fix and clean Tessellation theme.
TODO | Use built in list in yaml instead to turn str to list.
WIP | Reorganize themes dependencies in setup.
TODO | Include threads preview in entry
TODO | Add command for reorder entries by criteria
TODO | Fix Tessellation CSS
TODO | Add IfChapters and use it in academik to hide/show chapters navigation.
WIP | Add relevant templates for themes.
WIP | Client-side search engine.
TODO | Add definition in documentation for optional fields in blog configuration.
TODO | Change nomenclature: Most of the usual patterns are changed. Fix doc.
# version 2.1.x
TODO | Add --insert-chapter command.
TODO | Warn about metadata that should be list but are str.
TODO | Add folder for blog_configuration, with multiple configuration file (for splitting the actual one).
TODO | Automatically merge all known entry authors into blog authors.
......
......@@ -29,7 +29,7 @@
</div>
:.
<h2 id="archivesHeader">ARCHIVES</h2>
<ul id="archives">.:ForBlogDates::<li><a href="{path}" title="{count} publications">{value}</a></li>:: :.</ul>
<ul id="archives">.:ForBlogArchives::<li><a href="{path}" title="{count} publications">{value}</a></li>:: :.</ul>
<div id="__VENC_LOADING__"></div>
</header>
<div id="__VENC_THREAD__">
......@@ -30,7 +30,7 @@
</div>
<div id="archives">
<p>ARCHIVES</p>
<ul>.:ForBlogDates::<li><a href="{path}" title="{count} oeuvres" class="atomOpacity{weight}">{value}</a></li>:: :.</ul>
<ul>.:ForBlogArchives::<li><a href="{path}" title="{count} oeuvres" class="atomOpacity{weight}">{value}</a></li>:: :.</ul>
</div>
<div id="__VENC_LOADING__"></div>
</header>
......
......@@ -20,7 +20,7 @@
var VENC_TREE = {
button_show: '+',
button_hide: '-',
button_disabled: ''
button_disabled: ''
}
function VENC_TREE_ON_CLICK() {
......
......@@ -146,12 +146,12 @@ def new_blog(argv):
"ftp": messages.ftp_path,
"entries_sub_folders": "",
"categories_sub_folders": "",
"dates_sub_folders": "",
"archives_sub_folders": "",
"chapters_sub_folders": "chapters",
"index_file_name": "index{page_number}.html",
"category_directory_name": "{category}",
"chapter_directory_name": "{chapter_name}",
"dates_directory_name": "%Y-%m",
"archives_directory_name": "%Y-%m",
"entry_file_name": "entry{entry_id}.html",
"rss_file_name": "rss.xml",
"atom_file_name": "atom.xml"
......
......@@ -61,7 +61,7 @@ class DataStore:
self.path_encoding = self.blog_configuration["path_encoding"]
self.disable_threads = [thread_name.strip() for thread_name in self.blog_configuration["disable_threads"].split(',')]
self.entries = list()
self.entries_per_dates = list()
self.entries_per_archives = list()
self.entries_per_categories = list()
self.requested_entry_index = 0
self.max_category_weight = 1
......@@ -69,7 +69,7 @@ class DataStore:
self.embed_providers = {}
self.html_categories_tree = {}
self.html_categories_leaves = {}
self.html_blog_dates = {}
self.html_blog_archives = {}
self.generation_timestamp = datetime.datetime.now()
self.raw_chapters = {}
self.chapters_index = []
......@@ -96,7 +96,7 @@ class DataStore:
filename,
self.blog_configuration["path"],
jsonld_callback,
self.blog_configuration["path"]["dates_directory_name"],
self.blog_configuration["path"]["archives_directory_name"],
self.path_encoding
))
......@@ -113,15 +113,15 @@ class DataStore:
current_entry.previous_entry = self.entries[entry_index-1]
# Update entriesPerDates
if self.blog_configuration["path"]["dates_directory_name"] != '':
if self.blog_configuration["path"]["archives_directory_name"] != '':
formatted_date = current_entry.formatted_date
entries_index = self.get_entries_index_for_given_date(formatted_date)
if entries_index != None:
self.entries_per_dates[entries_index].count +=1
self.entries_per_dates[entries_index].related_to.append(entry_index)
self.entries_per_archives[entries_index].count +=1
self.entries_per_archives[entries_index].related_to.append(entry_index)
else:
self.entries_per_dates.append(MetadataNode(formatted_date, entry_index))
self.entries_per_archives.append(MetadataNode(formatted_date, entry_index))
# Update entriesPerCategories
try:
......@@ -168,19 +168,19 @@ class DataStore:
# Setup BlogArchives Data
self.blog_dates = list()
self.blog_archives = list()
""" Should use encoding for path value as well """
for node in self.entries_per_dates:
for node in self.entries_per_archives:
try:
sub_folders = urllib_parse_quote(self.blog_configuration["path"]["dates_sub_folders"]+'/', encoding=self.path_encoding)
sub_folders = urllib_parse_quote(self.blog_configuration["path"]["archives_sub_folders"]+'/', encoding=self.path_encoding)
except UnicodeEncodeError as e:
sub_folders = self.blog_configuration["path"]["dates_sub_folders"]+'/'
sub_folders = self.blog_configuration["path"]["archives_sub_folders"]+'/'
notify("\"{0}\": ".format(sub_folders)+str(e), color="YELLOW")
sub_folders = sub_folders if sub_folders != '/' else ''
self.blog_dates.append({
self.blog_archives.append({
"value":node.value,
"path": ".:GetRelativeOrigin:."+sub_folders+node.value,
"count": node.count,
......@@ -458,7 +458,7 @@ class DataStore:
def sort(self, entry):
try:
return getattr(entry, self.sort_by)
return str(getattr(entry, self.sort_by))
except AttributeError:
return ''
......@@ -507,19 +507,19 @@ class DataStore:
def get_entries_index_for_given_date(self, value):
index = 0
for metadata in self.entries_per_dates:
for metadata in self.entries_per_archives:
if value == metadata.value:
return index
index += 1
def get_entries_for_given_date(self, value, reverse):
index = 0
for metadata in self.entries_per_dates:
for metadata in self.entries_per_archives:
if value == metadata.value:
break
index += 1
for entry in (self.entries_per_dates[index].related_to[::-1] if reverse else self.entries_per_dates[index].related_to):
for entry in (self.entries_per_archives[index].related_to[::-1] if reverse else self.entries_per_archives[index].related_to):
self.requested_entry_index = entry
yield self.entries[entry]
......@@ -561,7 +561,7 @@ class DataStore:
return self.entries[self.requested_entry_index].date.strftime(self.blog_configuration["date_format"])
def get_entry_date_url(self, argv=list()):
return self.entries[self.requested_entry_index].date.strftime(self.blog_configuration["path"]["dates_directory_name"])
return self.entries[self.requested_entry_index].date.strftime(self.blog_configuration["path"]["archives_directory_name"])
def get_entry_url(self, argv=list()):
if self.blog_configuration["disable_single_entries"]:
......@@ -596,17 +596,17 @@ class DataStore:
def get_author_email(self, argv=list()):
return self.blog_configuration["author_email"]
def for_blog_dates(self, argv):
def for_blog_archives(self, argv):
key = ''.join(argv)
if not key in self.html_blog_dates.keys():
if not key in self.html_blog_archives.keys():
if self.blog_configuration["disable_archives"]:
self.html_blog_dates[key] = ''
self.html_blog_archives[key] = ''
else:
dates = [o for o in self.blog_dates if o["value"] not in self.disable_threads]
self.html_blog_dates[key] = merge(dates, argv)
archives = [o for o in self.blog_archives if o["value"] not in self.disable_threads]
self.html_blog_archives[key] = merge(archives, argv)
return self.html_blog_dates[key]
return self.html_blog_archives[key]
def get_root_page(self, argv):
return ".:GetRelativeOrigin:."+self.blog_configuration["path"]["index_file_name"].format(**{"page_number":''})
......
......@@ -72,14 +72,14 @@ def get_blog_configuration():
"index_file_name",
"category_directory_name",
"chapter_directory_name",
"dates_directory_name",
"archives_directory_name",
"entry_file_name",
"rss_file_name",
"atom_file_name",
"ftp",
"entries_sub_folders",
"categories_sub_folders",
"dates_sub_folders",
"archives_sub_folders",
"chapters_sub_folders",
]
......
......@@ -61,7 +61,7 @@ class PatternsMap():
# Extra metadata getter
"GetBlogMetadataIfExists" : datastore.get_blog_metadata_if_exists,
"ForBlogDates" : datastore.for_blog_dates,
"ForBlogArchives" : datastore.for_blog_archives,
"LeavesForBlogCategories" : datastore.leaves_for_blog_categories,
"TreeForBlogCategories" : datastore.tree_for_blog_categories,
"Chapters" : datastore.get_chapters
......
......@@ -28,7 +28,7 @@ class ArchivesThread(Thread):
def __init__(self, prompt, datastore, theme, patterns_map):
super().__init__(prompt, datastore, theme, patterns_map)
self.filename = self.datastore.blog_configuration["path"]["index_file_name"]
self.sub_folders = self.datastore.blog_configuration["path"]["dates_sub_folders"]
self.sub_folders = self.datastore.blog_configuration["path"]["archives_sub_folders"]
if len(self.sub_folders) and self.sub_folders[-1] != '/':
self.sub_folders += '/'
......@@ -39,7 +39,7 @@ class ArchivesThread(Thread):
return argv[0].strip()
def setup_archive_context(self, i, len_archives):
archive = self.datastore.entries_per_dates[i]
archive = self.datastore.entries_per_archives[i]
if archive.value in self.disable_threads:
return None
......@@ -58,7 +58,7 @@ class ArchivesThread(Thread):
return archive
def do(self):
len_archives = len(self.datastore.entries_per_dates)
len_archives = len(self.datastore.entries_per_archives)
for i in range(0, len_archives):
archive = self.setup_archive_context(i, len_archives)
if archive == None:
......
......@@ -20,7 +20,7 @@
var VENC_TREE = {
button_show: '+',
button_hide: '-',
button_disabled: ''
button_disabled: ''
}
function VENC_TREE_ON_CLICK() {
......
......@@ -30,8 +30,8 @@ path:
category_directory_name: '{category}'
chapter_directory_name: '{chapter_name}'
chapters_sub_folders: chapters
dates_directory_name: '%Y-%m'
dates_sub_folders: ''
archives_directory_name: '%Y-%m'
archives_sub_folders: ''
entries_sub_folders: ''
entry_file_name: entry{entry_id}.html
ftp: Chemin absolu de votre blog sur l'hôte FTP.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment