New processes and updated codes
This commit is contained in:
parent
e43f2eaaa4
commit
29ee8cc704
|
@ -64,7 +64,7 @@ actions = {
|
|||
'show-www' : show.manage,
|
||||
'status' : status.check,
|
||||
'template' : publish.manage_publish,
|
||||
'wip' : wip.manage_wip,
|
||||
'wip' : wip.manage,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,11 +1,27 @@
|
|||
#!/usr/bin/env python3
|
||||
# Name: Tyto - Littérateur
|
||||
# Type: Command arguments
|
||||
# Description: Check arguments
|
||||
# file: args.py
|
||||
# Folder: /var/lib/tyto/program/
|
||||
# By echolib (XMPP: im@echolib.re)
|
||||
# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
|
||||
# Tyto - Littérateur
|
||||
#
|
||||
# Copyright (C) 2023 Cyrille Louarn <echolib+tyto@a-lec.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License
|
||||
# as published by the Free Software Foundation, either version 3 of the
|
||||
# License, or of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# XMPP: echolib (im@echolib.re)
|
||||
#
|
||||
# Description: Manage arguments from command line
|
||||
# File: /var/lib/tyto/program/args.py
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
#------------
|
||||
# funny stats
|
||||
|
@ -20,6 +36,7 @@
|
|||
import sys
|
||||
import infos, logs
|
||||
|
||||
|
||||
# Arguments from command line
|
||||
# tyto [action] [target]
|
||||
#----------------------------
|
||||
|
@ -79,7 +96,7 @@ pass_targets = \
|
|||
'template'
|
||||
)
|
||||
|
||||
multi_chk = ('all', 'again')
|
||||
multi_chk = ('all', 'again', 'newer')
|
||||
|
||||
action = ''
|
||||
target = ''
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
import time, importlib, sys, os, re, datetime
|
||||
from datetime import datetime
|
||||
from time import gmtime, strftime
|
||||
|
||||
import args, dom, logs, status, db, form, tyto, langs
|
||||
|
||||
post_err = False
|
||||
|
@ -53,27 +52,23 @@ def manage(target):
|
|||
|
||||
# target needed
|
||||
if not target:
|
||||
logs.out("5", args.action, True)
|
||||
logs.out("5", '[target]', True)
|
||||
|
||||
elif target in args.multi_chk:
|
||||
check_all(target)
|
||||
|
||||
elif not db.post:
|
||||
logs.out("1", db.uri_file, True)
|
||||
|
||||
# Already check
|
||||
elif not target in args.multi_chk \
|
||||
and db.exists \
|
||||
elif db.exists \
|
||||
and not db.old_chk:
|
||||
logs.out("20", '%s > %s'%(db.date_chk, db.uri_file), False)
|
||||
answer = form.asking(' ├ %s%s '%(
|
||||
langs.site.check_a, langs.site.q
|
||||
), True)
|
||||
|
||||
check_process(target)
|
||||
|
||||
# All
|
||||
elif target in args.multi_chk:
|
||||
check_all(target)
|
||||
|
||||
# No file found
|
||||
elif not db.post:
|
||||
sys.exit(1)
|
||||
|
||||
else:
|
||||
check_process(target)
|
||||
|
||||
|
@ -367,9 +362,10 @@ def check_needed_tags(post_header):
|
|||
# Create False date_check #
|
||||
#--------------------------------#
|
||||
def check_date(date):
|
||||
global post_err
|
||||
global post_err, date_tr
|
||||
|
||||
# Check if article date is valid (True)
|
||||
date_tr = date
|
||||
fmt_article = "%Y-%m-%d"
|
||||
|
||||
try:
|
||||
|
@ -388,9 +384,8 @@ def check_date(date):
|
|||
# Set franch format in post DB
|
||||
if dom.lang_site == 'fr':
|
||||
date = date.rsplit('-')
|
||||
date = date[2] + '/' + date[1] + '/' + date[0]
|
||||
|
||||
date = (date, date_check)
|
||||
date_tr = date[2] + '/' + date[1] + '/' + date[0]
|
||||
print("> Convert date in FR >", date_tr)
|
||||
|
||||
|
||||
#===========================================#
|
||||
|
@ -750,7 +745,7 @@ def create_database():
|
|||
'about = "%s"\n'%about + \
|
||||
'author = "%s"\n'%author + \
|
||||
'tags = "%s"\n'%tags + \
|
||||
'date = "%s"\n'%date + \
|
||||
'date = "%s"\n'%date_tr + \
|
||||
'snpic = "%s"\n'%snpic_url + \
|
||||
'\n# Used files\n' + \
|
||||
'uris = %s'%str(files_post)
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#**********************************************************************
|
||||
|
||||
import os
|
||||
|
||||
import args, logs, dom, form, tyto
|
||||
|
||||
remove = exists = post = corrupt = False
|
||||
|
@ -26,6 +25,7 @@ remove = exists = post = corrupt = False
|
|||
try: in_dir = os.getcwd()
|
||||
except: logs.out("13", '', True)
|
||||
|
||||
|
||||
# target needs db (file).
|
||||
# action like show, wip, edit-db
|
||||
# not domain, all, again...
|
||||
|
@ -52,9 +52,7 @@ if args.target \
|
|||
post = True
|
||||
hash_post = tyto.get_filesum(uri_file, True)
|
||||
else:
|
||||
post = False
|
||||
remove = True
|
||||
logs.out("1", uri_file, False)
|
||||
|
||||
# Check if database config is valid (contains values)
|
||||
if exists:
|
||||
|
|
|
@ -1,11 +1,27 @@
|
|||
#!/usr/bin/env python3
|
||||
# Name: Tyto - Littérateur
|
||||
# Type: DB for domain
|
||||
# Description: Search domain datas and get statuses
|
||||
# file: dom.py
|
||||
# Folder: /var/lib/tyto/program/
|
||||
# By echolib (XMPP: im@echolib.re)
|
||||
# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
|
||||
# Tyto - Littérateur
|
||||
#
|
||||
# Copyright (C) 2023 Cyrille Louarn <echolib+tyto@a-lec.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License
|
||||
# as published by the Free Software Foundation, either version 3 of the
|
||||
# License, or of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# XMPP: echolib (im@echolib.re)
|
||||
#
|
||||
# Description: Manage domain configuration
|
||||
# File: /var/lib/tyto/program/dom.py
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
#------------
|
||||
# funny stats
|
||||
|
@ -17,39 +33,17 @@
|
|||
|
||||
#**********************************************************************
|
||||
|
||||
import os, sys, importlib, locale
|
||||
import os, sys, importlib, langs
|
||||
|
||||
lib = 'tyto_domain'
|
||||
exists = incomplete = active = ready = shortname = False
|
||||
local_user = articles_db = activated = False
|
||||
local_user = articles_db_d = False
|
||||
hole = False
|
||||
|
||||
# Set current directory
|
||||
try: in_dir = os.getcwd()
|
||||
except: hole = True
|
||||
|
||||
if not hole:
|
||||
home_dir = os.path.expanduser('~')
|
||||
|
||||
# Set configuration domain directory
|
||||
folder = in_dir
|
||||
if '/articles' in in_dir:
|
||||
folder = in_dir.rsplit('/articles')[0]
|
||||
|
||||
# Set configuration domain file
|
||||
config = '%s/tyto_domain.py'%folder
|
||||
|
||||
# Set exists if configuration file
|
||||
if os.path.exists(config):
|
||||
exists = True
|
||||
exec(open(config).read())
|
||||
|
||||
# For logs: show uri if not shortname known
|
||||
try: shortname
|
||||
except: shortname = config
|
||||
|
||||
if activated:
|
||||
active = True
|
||||
# Settings for domain, check if db is not corrupted
|
||||
dom_values = \
|
||||
(
|
||||
|
@ -81,15 +75,17 @@ if not hole:
|
|||
'srv_www_tpl_d',
|
||||
'srv_www_images_d',
|
||||
'srv_www_files_d',
|
||||
'wip_css_f',
|
||||
'wip_logo_f',
|
||||
'wip_navbar_f',
|
||||
'wip_sidebar_f',
|
||||
'wip_metas_f',
|
||||
'wip_footer_f',
|
||||
'www_css_f',
|
||||
'www_navbar_f',
|
||||
'www_sidebar_f',
|
||||
'www_metas_f',
|
||||
'www_footer_f',
|
||||
'wip_logo_f',
|
||||
'www_logo_f',
|
||||
'www_rss_f',
|
||||
'logo',
|
||||
|
@ -124,36 +120,78 @@ if not hole:
|
|||
)
|
||||
|
||||
err_val = (()) # Make a list from values error
|
||||
dir_new = (()) # Make a list for directories to create
|
||||
file_new = (()) # Make a list for files to check
|
||||
file_unu = (()) # Make a list for files to check
|
||||
file_mod = (()) # male a list for modules files to create
|
||||
dir_new = (()) # Make a list for directories created
|
||||
dir_unu = (()) # Not created, unused
|
||||
|
||||
|
||||
if not hole:
|
||||
home_dir = os.path.expanduser('~')
|
||||
|
||||
# Set configuration domain directory
|
||||
folder = in_dir
|
||||
if '/articles' in in_dir:
|
||||
folder = in_dir.rsplit('/articles')[0]
|
||||
|
||||
# Set configuration domain file
|
||||
config = '%s/tyto_domain.py'%folder
|
||||
|
||||
# Set exists if configuration file
|
||||
if os.path.exists(config):
|
||||
exists = True
|
||||
exec(open(config).read())
|
||||
|
||||
# For logs: show uri if not shortname known
|
||||
try: shortname
|
||||
except: shortname = config
|
||||
|
||||
try: active = activated
|
||||
except: pass
|
||||
|
||||
for value in dom_values:
|
||||
try:
|
||||
eval(str(value))
|
||||
value_set = True
|
||||
except:
|
||||
err_val = err_val + ((value),)
|
||||
value_set = False
|
||||
incomplete = True
|
||||
active = False
|
||||
|
||||
|
||||
if value.endswith('_d'):
|
||||
if value_set:
|
||||
if not os.path.exists(eval(str(value))):
|
||||
try:
|
||||
os.makedirs(eval(str(value)), exist_ok=True)
|
||||
dir_new = dir_new + ((eval(str(value))),)
|
||||
except:
|
||||
dir_unu = dir_unu + ((eval(str(value))),)
|
||||
|
||||
elif value.endswith('_f'):
|
||||
if value_set:
|
||||
if not os.path.exists(eval(str(value))):
|
||||
if value in create_files:
|
||||
file_mod = file_mod + ((value),)
|
||||
else:
|
||||
file_unu = file_unu + ((eval(str(value))),)
|
||||
|
||||
|
||||
|
||||
#==============================================#
|
||||
# When an active and complete domain is needed #
|
||||
#----------------------------------------------#
|
||||
if not incomplete and active:
|
||||
if not incomplete:
|
||||
wip_html_mods = \
|
||||
(
|
||||
eval(str('wip_navbar_f')),
|
||||
eval(str('wip_sidebar_f')),
|
||||
eval(str('wip_metas_f')),
|
||||
eval(str('wip_footer_f'))
|
||||
)
|
||||
if active:
|
||||
ready = True
|
||||
for value in dom_values:
|
||||
# Check if directory exists and create it
|
||||
if value.endswith('_d') and \
|
||||
not os.path.exists(eval(str(value))):
|
||||
os.makedirs(eval(str(value)), exist_ok=True)
|
||||
dir_new = dir_new + ((eval(str(value))),)
|
||||
|
||||
# Check if file exists
|
||||
if value.endswith('_f') and \
|
||||
not os.path.exists(eval(str(value))):
|
||||
if value in create_files:
|
||||
file_mod = file_mod + ((value),)
|
||||
else:
|
||||
file_new = file_new + ((eval(str(value))),)
|
||||
|
||||
|
||||
#====================================#
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#**********************************************************************
|
||||
|
||||
from datetime import datetime
|
||||
import os, sys, locale, importlib
|
||||
import os, sys, re, locale, importlib
|
||||
|
||||
import logs, dom, tyto, html, show, langs
|
||||
|
||||
|
@ -85,7 +85,6 @@ def asking(question, yes_no):
|
|||
# target: 3rd argument #
|
||||
#--------------------------#
|
||||
def manage(target):
|
||||
|
||||
if not dom.exists:
|
||||
logs.out("43", '', False)
|
||||
create_domain(target)
|
||||
|
@ -100,7 +99,10 @@ def manage(target):
|
|||
# Create a new domain #
|
||||
#---------------------#
|
||||
def create_domain(target):
|
||||
if target and not target.startswith('http'):
|
||||
valid_url = ('http://', 'https://')
|
||||
invalid = False
|
||||
|
||||
if target and not target.startswith(valid_url):
|
||||
logs.out("51", '"%s" -> http(s)://...'%target, False)
|
||||
target = ''
|
||||
|
||||
|
@ -108,8 +110,6 @@ def create_domain(target):
|
|||
|
||||
# Get complete URL from target or ask
|
||||
#------------------------------------
|
||||
valid_url = ('http://', 'https://')
|
||||
|
||||
try:
|
||||
www_url = dom.www_url
|
||||
except:
|
||||
|
@ -176,7 +176,7 @@ def create_domain(target):
|
|||
|
||||
if answer:
|
||||
if len(answer) == 2: lang_logs = answer.lower()
|
||||
else: logs.out("3", answer, True)
|
||||
else: logs.out("3", answer, False)
|
||||
|
||||
if not tyto.exists('%s/logs_%s.py'%(trans_dir, lang_logs)):
|
||||
lang_logs = 'en'
|
||||
|
@ -220,23 +220,37 @@ def create_domain(target):
|
|||
|
||||
# Get srv root
|
||||
#-------------
|
||||
try:
|
||||
srv = dom.srv
|
||||
except:
|
||||
if tyto.exists('/var/www') : srv = '/var/www'
|
||||
else: srv = ''
|
||||
try: srv = dom.srv
|
||||
except: srv = '/var/www'
|
||||
|
||||
answer = asking(' ├ %s%s {%s} '%(
|
||||
langs.site.form_srv, langs.site.q, srv
|
||||
), False)
|
||||
if answer:
|
||||
if tyto.exists(answer): srv = answer
|
||||
else: logs.out("1", srv, True)
|
||||
elif not srv:
|
||||
logs.out("255", '', True)
|
||||
|
||||
if srvl[-1] == "/": srv = srv[:-1]
|
||||
if answer: srv = answer
|
||||
if not tyto.exists(srv):
|
||||
logs.out("1", srv, False)
|
||||
srv = ''
|
||||
invalid = True
|
||||
elif srv[-1] == "/":
|
||||
srv = srv[:-1]
|
||||
|
||||
|
||||
# Get logo's website
|
||||
#-------------------
|
||||
try: logo = dom.logo
|
||||
except: logo = 'logo.png'
|
||||
|
||||
answer = asking(' ├ %s%s {%s} '%(
|
||||
langs.site.form_logo, langs.site.q, logo
|
||||
), False)
|
||||
|
||||
if answer: logo = answer
|
||||
if not logo: logo='logo.png'
|
||||
|
||||
|
||||
# Set config's directories for servers
|
||||
#-------------------------------------
|
||||
root_srv_dom = '%s/%s'%(srv, shortname)
|
||||
srv_wip_tpl = "%s/wip/template/"%root_srv_dom
|
||||
srv_www_tpl = "%s/www/template/"%root_srv_dom
|
||||
|
@ -252,11 +266,17 @@ def create_domain(target):
|
|||
'srv_www_images_d = "%s/www/images/"\n'%root_srv_dom + \
|
||||
'srv_www_files_d = "%s/www/files/"\n'%root_srv_dom + \
|
||||
'\n' + \
|
||||
'# Servers files\n' + \
|
||||
'# Servers files (wip)\n' + \
|
||||
'wip_logo_f = "%s%s"\n'%(srv_wip_tpl, logo) + \
|
||||
'wip_css_f = "%sstyles.css"\n'%srv_wip_tpl + \
|
||||
'wip_navbar_f = "%snavbar.html"\n'%srv_wip_tpl + \
|
||||
'wip_sidebar_f = "%ssidebar.html"\n'%srv_wip_tpl + \
|
||||
'wip_metas_f = "%smetas.html"\n'%srv_wip_tpl + \
|
||||
'wip_footer_f = "%sfooter.html"\n'%srv_wip_tpl + \
|
||||
'\n' + \
|
||||
'# Servers files (www)\n' + \
|
||||
'www_logo_f = "%s%s"\n'%(srv_www_tpl, logo) + \
|
||||
'www_css_f = "%sstyles.css"\n'%srv_www_tpl + \
|
||||
'www_navbar_f = "%snavbar.html"\n'%srv_www_tpl + \
|
||||
'www_sidebar_f = "%ssidebar.html"\n'%srv_www_tpl + \
|
||||
'www_metas_f = "%smetas.html"\n'%srv_www_tpl + \
|
||||
|
@ -265,23 +285,6 @@ def create_domain(target):
|
|||
tyto.set_file(dom.config, False, set_f)
|
||||
|
||||
|
||||
# Get logo's website
|
||||
#-------------------
|
||||
try: logo = dom.logo
|
||||
except: logo = 'logo.png'
|
||||
|
||||
answer = asking(' ├ %s%s {%s} '%(
|
||||
langs.site.form_logo, langs.site.q, logo
|
||||
), False)
|
||||
|
||||
if answer: logo = answer
|
||||
|
||||
set_f = 'wip_logo_f = "%s%s"\n'%(srv_wip_tpl, logo) + \
|
||||
'www_logo_f = "%s%s"'%(srv_www_tpl, logo)
|
||||
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
||||
|
||||
# RSS/Atom filename
|
||||
#------------------
|
||||
try: rss = dom.rss
|
||||
|
@ -304,15 +307,15 @@ def create_domain(target):
|
|||
# RSS/Atom max items
|
||||
#-------------------
|
||||
try: rss_items = dom.rss_items
|
||||
except: rss_items = "100"
|
||||
except: rss_items = 100
|
||||
|
||||
answer = asking(' ├ %s%s {%s} '%(
|
||||
langs.site.form_rss_i, langs.site.q, rss_items
|
||||
), False)
|
||||
|
||||
if answer:
|
||||
if answer.isdigit() and int(answer) > 1: rss_items = answer
|
||||
else: logs.out("3", answer, True)
|
||||
if answer: rss_items = answer
|
||||
if not str(rss_items).isdigit() or not int(rss_items) > 1:
|
||||
rss_items = 100
|
||||
|
||||
set_f = 'rss_items = %d'%int(rss_items)
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -328,9 +331,8 @@ def create_domain(target):
|
|||
), False)
|
||||
|
||||
if answer: title = answer
|
||||
elif not title: logs.out("255", '', True)
|
||||
|
||||
if '"' in title: title = title.replace('"', '')
|
||||
if not title: invalid = True
|
||||
elif '"' in title: title = title.replace('"', '')
|
||||
|
||||
set_f = 'title = "%s"'%title
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -361,9 +363,8 @@ def create_domain(target):
|
|||
), False)
|
||||
|
||||
if answer: about = answer
|
||||
elif not about: logs.out("255", '', True)
|
||||
|
||||
if '"' in about: about = about.replace('"', '')
|
||||
if not about: invalid = True
|
||||
elif '"' in about: about = about.replace('"', '')
|
||||
|
||||
set_f = 'about = "%s"'%about
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -371,13 +372,16 @@ def create_domain(target):
|
|||
|
||||
# Get Lang domain for web pages
|
||||
#------------------------------
|
||||
try: lang_site
|
||||
except: lang_site = lang_sys
|
||||
|
||||
answer = asking(' ├ %s%s {%s} '%(
|
||||
langs.site.form_trsite, langs.site.q, lang_site
|
||||
), False)
|
||||
|
||||
if answer:
|
||||
if len(answer) == 2: lang_site = answer.lower()
|
||||
else: logs.out("3", answer, True)
|
||||
else: logs.out("3", answer, False)
|
||||
|
||||
if not tyto.exists('%s/site_%s.py'%(trans_dir, lang_site)):
|
||||
lang_site = 'en'
|
||||
|
@ -396,10 +400,9 @@ def create_domain(target):
|
|||
), False)
|
||||
|
||||
if answer: mail = answer
|
||||
elif not mail: logs.out("255", '', True)
|
||||
|
||||
if not re.search('^\w+@\w+.\w+$', mail):
|
||||
logs.out("3", mail, True)
|
||||
logs.out("3", mail, False)
|
||||
invalid = True
|
||||
|
||||
set_f = 'mail = "%s"'%mail
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -415,9 +418,8 @@ def create_domain(target):
|
|||
), False)
|
||||
|
||||
if answer: tags = answer
|
||||
elif not tags: logs.out("255", '', True)
|
||||
|
||||
if '"' in tags: tags = tags.replace('"', '')
|
||||
if not tags: invalid = True
|
||||
elif '"' in tags: tags = tags.replace('"', '')
|
||||
|
||||
set_f = 'tags = "%s"'%tags
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -433,8 +435,6 @@ def create_domain(target):
|
|||
), False)
|
||||
|
||||
if answer: domlicense = answer
|
||||
elif not domlicense: logs.out("255", '', True)
|
||||
|
||||
if '"' in domlicense: domlicense = domlicense.replace('"', '')
|
||||
|
||||
set_f = 'license = "%s"'%domlicense
|
||||
|
@ -451,9 +451,11 @@ def create_domain(target):
|
|||
langs.site.q, licurl
|
||||
), False)
|
||||
|
||||
if answer: licurl = answer
|
||||
if not licurl.startswith(valid_url):
|
||||
if answer:
|
||||
if answer.startswith(valid_url): licurl = answer
|
||||
else: logs.out("2", '"http(s)://%s"%s'%(answer, langs.site.q), True)
|
||||
logs.out("2", '"http(s)://%s"%s'%(licurl, langs.site.q), False)
|
||||
licurl = ''
|
||||
|
||||
set_f = 'license_url = "%s"'%licurl
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -469,9 +471,11 @@ def create_domain(target):
|
|||
langs.site.q, legalurl
|
||||
), False)
|
||||
|
||||
if answer: legalurl = answer
|
||||
if not legalurl.startswith(valid_url):
|
||||
if answer:
|
||||
if answer.startswith(valid_url): legalurl = answer
|
||||
else: logs.out("2", '"http(s)://%s"%s'%(answer, langs.site.q), True)
|
||||
logs.out("2", '"http(s)://%s"%s'%(legalurl, langs.site.q), False)
|
||||
legalurl = ''
|
||||
|
||||
set_f = 'legal_url = "%s"'%legalurl
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -487,9 +491,11 @@ def create_domain(target):
|
|||
langs.site.q, termsurl
|
||||
), False)
|
||||
|
||||
if answer: termsurl = answer
|
||||
if not termsurl.startswith(valid_url):
|
||||
if answer:
|
||||
if answer.startswith(valid_url): termsurl = answer
|
||||
else: logs.out("2", '"http(s)://%s"%s'%(answer, langs.site.q), True)
|
||||
logs.out("2", '"http(s)://%s"%s'%(termsurl, langs.site.q), False)
|
||||
termsurl = ''
|
||||
|
||||
set_f = 'terms_url = "%s"'%termsurl
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -505,7 +511,9 @@ def create_domain(target):
|
|||
), False)
|
||||
|
||||
if answer: css = answer.lower()
|
||||
if not css.isalnum(): logs.out("3", css, True)
|
||||
if not css.isalnum():
|
||||
logs.out("3", css, False)
|
||||
css = 'tyto'
|
||||
|
||||
set_f = 'css = "%s"'%css
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -521,7 +529,9 @@ def create_domain(target):
|
|||
), False)
|
||||
|
||||
if answer: sep = answer
|
||||
if not len(sep) == 1: logs.out("3", answer, True)
|
||||
if not len(sep) == 1:
|
||||
logs.out("3", answer, False)
|
||||
sep = "-"
|
||||
|
||||
set_f = 'sep = "%s"'%sep
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -557,9 +567,11 @@ def create_domain(target):
|
|||
langs.site.q, relme
|
||||
), False)
|
||||
|
||||
if answer: relme = answer
|
||||
if not relme.startswith(valid_url):
|
||||
if answer:
|
||||
if answer.startswith(valid_url): relme = answer
|
||||
else: logs.out("2", '"http(s)://%s"%s'%(answer, langs.site.q), True)
|
||||
logs.out("2", '"http(s)://%s"%s'%(relme, langs.site.q), False)
|
||||
relmel = ''
|
||||
|
||||
set_f = 'relme = "%s"'%relme
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -576,7 +588,10 @@ def create_domain(target):
|
|||
), False)
|
||||
|
||||
if answer: sdb_title = answer
|
||||
if '"' in sdb_title: sdb_title = sdb_title.replace('"', '')
|
||||
if not sdb_title:
|
||||
sdb_title = ''
|
||||
invalid = True
|
||||
elif '"' in sdb_title: sdb_title = sdb_title.replace('"', '')
|
||||
|
||||
set_f = 'sidebar_title = "%s"'%sdb_title
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
@ -585,22 +600,27 @@ def create_domain(target):
|
|||
# Sidebar Items
|
||||
#--------------
|
||||
try: sdb_items = dom.sidebar_items
|
||||
except: sdb_items = "6"
|
||||
except: sdb_items = 6
|
||||
|
||||
answer = asking(' ├ [max=16] %s. %s%s {%s} '%(
|
||||
langs.site.sidebar, langs.site.form_sdb_i,
|
||||
langs.site.q, sdb_items
|
||||
), False)
|
||||
|
||||
if answer:
|
||||
if answer.isdigit() and int(answer) in range(1,17):
|
||||
sdb_items = int(answer)
|
||||
else: logs.out("3", answer, True)
|
||||
if answer: sdb_items = answer
|
||||
if not str(sdb_items).isdigit() or not int(sdb_items) in range(1,17):
|
||||
sdb_items = 6
|
||||
|
||||
set_f = 'sidebar_items = %d'%int(sdb_items)
|
||||
tyto.set_file(dom.config, False, set_f)
|
||||
|
||||
|
||||
# Domain config invalid, do not activate
|
||||
if invalid:
|
||||
tyto.set_file(dom.config, False, '\nactivated = False')
|
||||
print(langs.site.form_inv)
|
||||
logs.out("2", dom.config, True)
|
||||
|
||||
# Resumed configuration
|
||||
#-----------------------
|
||||
try: active = dom.activated
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
# XMPP: echolib (im@echolib.re)
|
||||
#
|
||||
# Description: Create HTML page
|
||||
# File: /var/lib/tyto/program/show.py
|
||||
# File: /var/lib/tyto/program/html.py
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
#------------
|
||||
|
@ -33,7 +33,6 @@
|
|||
#**********************************************************************
|
||||
|
||||
import os, sys, importlib
|
||||
|
||||
import logs, db, dom, tyto, form, langs
|
||||
|
||||
# Publish option can be
|
||||
|
@ -62,8 +61,7 @@ def create_metas_page():
|
|||
metas_page = ''
|
||||
scale = 'width=device-width, initial-scale=1.0'
|
||||
all_tags = dom.tags + ',' + db.tags
|
||||
css_file = 'styles.css'
|
||||
css_ref = 'href="%stemplate/%s"'%(db.sub_uri, css_file)
|
||||
css_ref = 'href="%stemplate/%s"'%(db.sub_uri, dom.css)
|
||||
rss_ref = 'type="application/rss+xml" ' + \
|
||||
'href="%s%s" title="RSS 2.0. %s %s %s"'%(
|
||||
db.sub_uri, dom.rss,
|
||||
|
@ -80,7 +78,7 @@ def create_metas_page():
|
|||
)
|
||||
|
||||
# Create author and date publish section infos
|
||||
create_html_infos_section('wip')
|
||||
create_html_time_meta('wip')
|
||||
|
||||
# Set all raw HTML metas
|
||||
#-----------------------
|
||||
|
@ -117,19 +115,14 @@ def create_metas_page():
|
|||
# Set main page, with all HTML sections #
|
||||
#---------------------------------------#
|
||||
def create_main_page(target, article_bottom):
|
||||
global main_page
|
||||
|
||||
if not tyto.exists(dom.wip_footer_f):
|
||||
logs.out("1", dom.wip_footer_f, True)
|
||||
|
||||
if not tyto.exists(dom.wip_metas_f):
|
||||
logs.out("24", '(HTML metas): %s'%dom.wip_metas_f, False)
|
||||
global main_page, post_html_code
|
||||
|
||||
# Create link for website's logo
|
||||
#-------------------------------
|
||||
logo_html = '<a href="/"\n' + \
|
||||
logo_html = \
|
||||
'<a href="/"\n' + \
|
||||
'%stitle="%s %s logo: %s"\n'%(11 * " ",
|
||||
tyto.trans[1][tyto.n], dom.sep, dom.title
|
||||
langs.site.home, dom.sep, dom.title
|
||||
) + \
|
||||
'%sid="site_logo_link">\n'%(11 * " ") + \
|
||||
'%s<img src="%stemplate/%s"\n'%(
|
||||
|
@ -139,6 +132,17 @@ def create_main_page(target, article_bottom):
|
|||
'%sid="site_logo_image" />\n'%(15 * " ") + \
|
||||
'%s</a>'%(8 * " ")
|
||||
|
||||
post_html_code = ''
|
||||
if dom.article_code:
|
||||
post_html_code = \
|
||||
' <span id="article_code"> ' + \
|
||||
' <a id="article_code_link"\n' + \
|
||||
' href="./%s"\n'%os.path.basename(db.short_src) + \
|
||||
' title="%s">{%s}</a></span>\n'%(
|
||||
langs.site.tyto_psrc,
|
||||
langs.site.source_code
|
||||
)
|
||||
|
||||
#-----------------------#
|
||||
# Create main HTML Page #
|
||||
#-----------------------#
|
||||
|
@ -156,7 +160,7 @@ def create_main_page(target, article_bottom):
|
|||
'\n' + \
|
||||
' <div id="site_infos">\n' + \
|
||||
' <a href="/"\n' + \
|
||||
' title="%s"\n'%(tyto.trans[1][tyto.n]) + \
|
||||
' title="%s"\n'%(langs.site.home) + \
|
||||
' id="site_link">\n' + \
|
||||
' <h1 id="site_title">%s</h1>\n'%dom.title + \
|
||||
' </a>\n' + \
|
||||
|
@ -167,7 +171,17 @@ def create_main_page(target, article_bottom):
|
|||
'\n' + \
|
||||
' <article id="article_main">\n' + \
|
||||
' <section id="article_infos">\n' + \
|
||||
'%s\n'%post_pub + \
|
||||
' <p>\n' + \
|
||||
' <span id="article_title"\n' + \
|
||||
' title="%s %s %s %s %s">%s</span>\n'%(
|
||||
title, langs.site.w_written, db.date, langs.site.by,
|
||||
db.author,
|
||||
langs.site.article
|
||||
) + \
|
||||
'%s'%post_html_code + \
|
||||
'%s\n'%time_html_pub + \
|
||||
' <span id="article_author">%s</span>\n'%db.author + \
|
||||
' </p>\n' + \
|
||||
' </section>\n' + \
|
||||
'%s\n'%article_bottom + \
|
||||
' </article>\n' + \
|
||||
|
@ -182,11 +196,12 @@ def create_main_page(target, article_bottom):
|
|||
# Create HTML line for article infos section #
|
||||
# when wip, and publish #
|
||||
#--------------------------------------------#
|
||||
def create_html_infos_section(process):
|
||||
def create_html_time_meta(process):
|
||||
# Need to reload the DB to get last time updated
|
||||
exec(open(db.config).read(), globals())
|
||||
|
||||
global post_pub, meta_pub, date_raw
|
||||
global time_html_pub, meta_pub, date_raw
|
||||
|
||||
if process == 'wip':
|
||||
date_raw = date_wip # <time datetime= / meta search_date
|
||||
date_pub = date_wip.rsplit(' ')[0]
|
||||
|
@ -196,47 +211,25 @@ def create_html_infos_section(process):
|
|||
date_pub = date_www.rsplit(' ')[0]
|
||||
time_pub = date_www.rsplit(' ')[1]
|
||||
|
||||
if tyto.n == 0: # fr
|
||||
if dom.lang_site == 'fr':
|
||||
date_new = date_pub.rsplit('-')
|
||||
date_pub = date_new[2] + '/' + date_new[1] + '/' + date_new[0]
|
||||
|
||||
# Show source code in article-infos if True in DB
|
||||
post_code = ''
|
||||
if dom.article_code:
|
||||
# Set HTML
|
||||
post_code = \
|
||||
'<span id="article_code"> ' + \
|
||||
'<a id="article_code_link" href="./%s" title="%s">{%s}</a>'%(
|
||||
os.path.basename(db.short_src),
|
||||
tyto.trans[21][tyto.n],
|
||||
tyto.trans[3][tyto.n]
|
||||
) + \
|
||||
' </span>'
|
||||
|
||||
|
||||
# in <article> > section info : line with new date
|
||||
post_pub = \
|
||||
'%s<p>'%(8 * ' ') + \
|
||||
'<span id="article_title" title="%s">Article%s</span> '%(title,
|
||||
post_code
|
||||
time_html_pub = \
|
||||
' <!--TYTOPUB-->\n' + \
|
||||
' <time datetime="%s">\n'%date_raw + \
|
||||
' <span id="article_pub"\n' + \
|
||||
' title="%s %s %s">%s %s (%s)</span>\n'%(
|
||||
title, langs.site.w_published, date_pub,
|
||||
langs.site.published, date_pub, time_pub
|
||||
) + \
|
||||
'<span title="%s %s">%s</span> '%(tyto.trans[10][tyto.n],
|
||||
date[0],
|
||||
tyto.trans[7][tyto.n]
|
||||
) + \
|
||||
'<span id="article_author">%s</span>. %s '%(author,
|
||||
tyto.trans[8][tyto.n]
|
||||
) + \
|
||||
'<time datetime="%s">'%date_raw + \
|
||||
'<span id="article_date">%s</span> %s '%(date_pub,
|
||||
tyto.trans[9][tyto.n]
|
||||
) + \
|
||||
'<span id="article_time">%s</span>'%time_pub + \
|
||||
'</time>' + \
|
||||
'</p>'
|
||||
' </time> %s\n'%langs.site.by + \
|
||||
' <!--/TYTOPUB-->'
|
||||
|
||||
# meta search_date=
|
||||
meta_pub = ' <meta name="search_date" content="%s" />\n'%(
|
||||
meta_pub = \
|
||||
' <meta name="search_date" content="%s" />\n'%(
|
||||
date_raw.rsplit(' ')[0]
|
||||
)
|
||||
|
||||
|
@ -271,15 +264,14 @@ def create_user_metas(option):
|
|||
else: user_metas = '%s%s'%(tab, line)
|
||||
|
||||
tyto.set_file(target, True, user_metas)
|
||||
logs.out("33", target, False)
|
||||
logs.out("32", target, False)
|
||||
|
||||
|
||||
#==================================#
|
||||
# Create HTML navbar from config #
|
||||
# If no index in src: STOP #
|
||||
# For wip, create if no index.html #
|
||||
# for publish all/navbar, STOP #
|
||||
#----------------------------------#
|
||||
#==============================================#
|
||||
# Create HTML sidebar from file tyto.navbar #
|
||||
# If no index file in src directory: pass # #
|
||||
# Create empty file in template/ if not exists #
|
||||
#----------------------------------------------#
|
||||
def create_navbar(option):
|
||||
dom.valid()
|
||||
|
||||
|
@ -297,7 +289,7 @@ def create_navbar(option):
|
|||
'%s<nav id="site_menu">\n'%(6 * ' ') + \
|
||||
'%s<ul id="site_menu_items">'%(8 * ' ')
|
||||
|
||||
navbar_lines = open(db.navbar_load, 'r').read()
|
||||
navbar_lines = open(dom.navbar_f, 'r').read()
|
||||
|
||||
for line in navbar_lines.rsplit('\n'):
|
||||
if not line or line.startswith(nolines): continue
|
||||
|
@ -368,7 +360,6 @@ def create_navbar(option):
|
|||
if not tyto.exists(target):
|
||||
tyto.set_file(target, 'New', '')
|
||||
logs.out("32", target, False)
|
||||
return
|
||||
logs.out('28', '%s'%langs.log.navbar, False)
|
||||
return
|
||||
|
||||
|
@ -387,9 +378,10 @@ def create_navbar(option):
|
|||
logs.out("32", target, False)
|
||||
|
||||
|
||||
#============================================#
|
||||
#==============================================#
|
||||
# Create HTML sidebar from file tyto.sidebar #
|
||||
#--------------------------------------------#
|
||||
# Create empty file in template/ if not exists #
|
||||
#----------------------------------------------#
|
||||
def create_sidebar(option):
|
||||
dom.valid()
|
||||
|
||||
|
@ -406,7 +398,7 @@ def create_sidebar(option):
|
|||
# Set HTML sidebar
|
||||
sidebar_list = ''
|
||||
sidebar_html = \
|
||||
'<aside>\n' + \
|
||||
'<aside id="sidebar">\n' + \
|
||||
' <h1 id="sidebar_title">%s</h1>\n' + \
|
||||
' <ul id="sidebar_list">\n' + \
|
||||
'%s' + \
|
||||
|
@ -485,7 +477,6 @@ def create_sidebar(option):
|
|||
if not tyto.exists(target):
|
||||
tyto.set_file(target, 'New', '')
|
||||
logs.out("32", target, False)
|
||||
return
|
||||
logs.out('28', '%s'%langs.log.sidebar, False)
|
||||
return
|
||||
|
||||
|
@ -511,16 +502,14 @@ def create_sidebar(option):
|
|||
|
||||
#===================================================#
|
||||
# Create footer.html from _configs/tyto.footer.html #
|
||||
# Opiton 'pub' force create (when publish) #
|
||||
#---------------------------------------------------#
|
||||
#----------------------------------------------=====#
|
||||
def create_user_footer(option):
|
||||
dom.valid()
|
||||
|
||||
if option == 'wip': target = dom.wip_footer_f
|
||||
elif option == 'www': target = dom.www_footer_f
|
||||
elif option == 'pub': target = dom.www_footer_f
|
||||
elif option in pub_opts: target = dom.www_footer_f
|
||||
|
||||
if not option == 'pub' and tyto.exists(target):
|
||||
if option == 'www' and tyto.exists(target):
|
||||
form.asking(' ├ %s. %s%s '%(
|
||||
langs.site.footer, langs.site.form_rep, langs.site.q
|
||||
), True)
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
#**********************************************************************
|
||||
|
||||
import os
|
||||
import os, langs
|
||||
|
||||
def tyto(target):
|
||||
noinfos = False
|
||||
|
@ -46,51 +46,5 @@ def tyto(target):
|
|||
noinfo = True
|
||||
print(':< No .../.local/tyto')
|
||||
|
||||
# Show Usage
|
||||
print(
|
||||
'\n# New domain:\n'
|
||||
' - Create your domain folder, and go in\n'
|
||||
' - Create domain with "tyto new domain [URL]"\n'
|
||||
' - Create article\'s file in articles/ directory\n'
|
||||
' - Use these actions on article\'s file: Check > wip > publish\n'
|
||||
' ! Config\'s files are in _configs/ directory\n'
|
||||
' and used to create HTML file in your template\n'
|
||||
' Your template files (css, logo...) go to wip/template/ server\n\n'
|
||||
'# Usage: tyto [action] [target] \n'
|
||||
' - [action] according to [target]:\n'
|
||||
' edit : Edit article\'s file\n'
|
||||
' edit-db : Edit article\'s database (TAKE CARE !)\n'
|
||||
' edit-wip: Edit html file in wip server\n'
|
||||
' edit_www: Edit html file in www server\n'
|
||||
' new : Create new (domain, sidebar/footer... config\'s file)\n'
|
||||
' show : Show content of config\'s file\n'
|
||||
' show-about: Show content of custom footer config\n'
|
||||
' show-db : Show content of article\'s database\n'
|
||||
' show-wip: Show HTML file in wip server\n'
|
||||
' show-www: Show HTML file in www server\n\n'
|
||||
' check : Check if article is valid\n'
|
||||
' wip : Create page in wip server\n'
|
||||
' publish : Create page in www server\n\n'
|
||||
' - [target] according to [action]\n'
|
||||
' all : process (updated) valid articles\n'
|
||||
' again : process ALL valid articles\n'
|
||||
' newer : [wip/publish] convert only newer articles\n'
|
||||
' template: - Create navbar/sidebar/metas/footer in www server\n'
|
||||
' - Copy other wip/template/ files to www server\n'
|
||||
' domain : Create/Show config file\n'
|
||||
' [file] : URI of an article\'s file (autocompletion is your friend)\n'
|
||||
' footer : Create/Show footer HTML config\'s file\n'
|
||||
' metas : Create/Show metas HTML config\'s file\n'
|
||||
' navbar : Create/Show navbar config\'s file\n'
|
||||
' sidebar : Create/Show sidebar config\'s file\n'
|
||||
' stats : Create statistics file in root srv\n\n'
|
||||
'# Examples:\n'
|
||||
' - Check article\'s syntax: tyto check mysubdir/index.tyto\n'
|
||||
' - Create default _configs/tyto.sidebar: tyto new sidebar\n'
|
||||
' - Edit _configs/tyto.navbar: tyto edit navbar\n'
|
||||
' - Edit index.html in www server: tyto edit-www index.tyto\n'
|
||||
' - Create sidebar.html in wip server: tyto wip sidebar\n'
|
||||
' - Show sidebar.html in wip server: tyto show-wip sidebar\n'
|
||||
' - Create navbar.html in www server: tyto publish navbar\n'
|
||||
' - Show navbar.html in www server: tyto show-www navbar\n'
|
||||
)
|
||||
print(':', langs.site.args_helps)
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ def out(nbr, value, out):
|
|||
'6' : ' ╞ %s%s%s > %s'%(CR, langs.log.sep_inv, CS, value),
|
||||
'7' : ' ╘ %s%s%s > %s'%(CR, langs.log.post_inv, CS, value),
|
||||
'8' : ' ╞ %s%s%s %s'%(CR, langs.log.mark_np, CS, value),
|
||||
'9' : ' ╞ Article %shas changed%s. Check it first'%(CR, CS),
|
||||
'9' : ' ╞ %s%s%s > %s'%(CR, langs.log.post_chg, CS, value),
|
||||
'10' : ' ╘ %s%s%s'%(CR, langs.log.dom_no, CS),
|
||||
'11' : ' ╘ %s%s%s > %s'%(CR, langs.log.err_arg, CS, value),
|
||||
'12' : ' ╞ %s%s%s > %s'%(CR, langs.log.post_inc, CS, value),
|
||||
|
@ -49,8 +49,8 @@ def out(nbr, value, out):
|
|||
'16' : ' ╞ %s%s%s "%s = ?"'%(CR, langs.log.unused_c, CS, value),
|
||||
'17' : ' ╞ %s%s%s "%s ?"'%(CR, langs.log.unused_v, CS, value),
|
||||
'18' : ' ╘ %s%s%s > %s'%(CR, langs.log.unused_p, CS, value),
|
||||
'19' : ' ╞ Article %swip%s on: %s'%(CG, CS, value),
|
||||
'20' : ' ╞ %s%s%s %s'%(CG, langs.log.check_on, CS, value),
|
||||
'19' : ' ╞ %s%s%s %s'%(CG, langs.log.was_wip, CS, value),
|
||||
'20' : ' ╞ %s%s%s %s'%(CG, langs.log.was_chk, CS, value),
|
||||
'21' : ' ╘ %s%s%s > %s'%(CG, langs.log.post_val, CS, value),
|
||||
'22' : ' ╞ %s%s%s %s'%(CY, langs.log.symb_np, CS, value),
|
||||
'23' : ' ╞ %s%s%s > %s'%(CY, langs.log.db_inv, CS, value),
|
||||
|
@ -61,6 +61,7 @@ def out(nbr, value, out):
|
|||
'28' : ' ╘ %s (%s)'%(langs.log.ntd, value),
|
||||
'29' : ' ╞ %sEmpty configuration%s %s'%(CY, CS, value),
|
||||
'30' : ' ╞ %s%s%s > %s'%(CY, langs.log.nywip, CS, value),
|
||||
'31' : ' ╘ %s%s%s'%(CR, langs.log.nomods, CS),
|
||||
'32' : ' ╞══ %s%s%s > %s'%(CG, langs.log.file_c, CS, value),
|
||||
'33' : ' ╞══ %s%s%s > %s'%(CG, langs.log.dir_c, CS, value),
|
||||
'34' : ' ╞══ %s%s%s > %s'%(CG, langs.log.file_n, CS, value),
|
||||
|
@ -73,6 +74,7 @@ def out(nbr, value, out):
|
|||
'43' : ' ╒ %s%s%s'%(CY, langs.log.dom_no, CS),
|
||||
'44' : ' ╞ %s%s%s "tyto check %s"'%(CY, langs.log.check_m, CS, value),
|
||||
'51' : ' ╞ %s%s%s > %s'%(CY, langs.log.data_inc, CS, value),
|
||||
'60' : ' │\n ╞ %s'%langs.log.status_r,
|
||||
'255' : ' ╘ %s'%langs.log.laterout
|
||||
}
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License
|
||||
# as published by the Free Software Foundation, either version 3 of the License, or
|
||||
# of the License, or (at your option) any later version.
|
||||
# as published by the Free Software Foundation, either version 3 of the
|
||||
# License, or of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -35,7 +35,7 @@
|
|||
#**********************************************************************
|
||||
|
||||
import os, sys, importlib
|
||||
import args, logs, dom, db, form, tyto, check, stats, langs
|
||||
import args, logs, langs, dom, db, form, tyto, check, html, stats
|
||||
|
||||
#========================#
|
||||
# Read lines from a file #
|
||||
|
@ -62,7 +62,7 @@ def read_lines(f, alone):
|
|||
else: decor = '├'
|
||||
print(' %s─%s─┘'%(decor, sp_max * '─'))
|
||||
|
||||
dom.valid()
|
||||
if not f == dom.config: dom.valid()
|
||||
|
||||
|
||||
#======================#
|
||||
|
@ -178,9 +178,13 @@ def manage(target):
|
|||
|
||||
|
||||
# If edit article and hash changed, ask to check
|
||||
if args.action == "edit" and post_src:
|
||||
if args.action == "edit":
|
||||
new_hash = tyto.get_filesum(file, True)
|
||||
if curr_hash != new_hash:
|
||||
|
||||
if curr_hash == new_hash: return
|
||||
|
||||
# Launch process for some changed file
|
||||
#-------------------------------------
|
||||
if file == post_src:
|
||||
form.asking(' ├ %s%s '%(
|
||||
langs.site.post_chg, langs.site.q
|
||||
|
@ -190,3 +194,8 @@ def manage(target):
|
|||
importlib.reload(db)
|
||||
check.manage(post_src)
|
||||
|
||||
elif file == dom.sidebar_f: html.create_sidebar('wip')
|
||||
elif file == dom.navbar_f: html.create_navbar('wip')
|
||||
elif file == dom.metas_f: html.create_user_metas('wip')
|
||||
|
||||
|
||||
|
|
|
@ -23,14 +23,14 @@ def domain():
|
|||
if dom.hole: logs.out("13", '', True)
|
||||
elif not dom.shortname: return
|
||||
elif dom.incomplete: logs.out("41", dom.shortname, False)
|
||||
elif dom.activated: logs.out("42", dom.shortname, False)
|
||||
elif not dom.activated: logs.out("40", dom.shortname, False)
|
||||
elif dom.active: logs.out("42", dom.shortname, False)
|
||||
elif not dom.active: logs.out("40", dom.shortname, False)
|
||||
|
||||
if dom.incomplete:
|
||||
# Show unused values
|
||||
for err_val in dom.err_val:
|
||||
logs.out("16", err_val, False)
|
||||
|
||||
# Missing directories was created
|
||||
# Missing directories (was created)
|
||||
for dir_new in dom.dir_new:
|
||||
logs.out("33", dir_new, False)
|
||||
|
||||
|
@ -47,11 +47,27 @@ def domain():
|
|||
for value in dom.file_mod:
|
||||
create_files[value]('form')
|
||||
|
||||
for file_mods in dom.wip_html_mods:
|
||||
if not tyto.exists(file_mods):
|
||||
logs.out("1", file_mods, False)
|
||||
|
||||
#==============================#
|
||||
# On demand with status action #
|
||||
#------------------------------#
|
||||
def check(target):
|
||||
conf_err = False
|
||||
|
||||
if target == "domain":
|
||||
for file_new in dom.file_new:
|
||||
logs.out("24", file_new, False)
|
||||
if dom.dir_unu or dom.file_unu:
|
||||
logs.out("60", '', False)
|
||||
|
||||
for dir_unu in dom.dir_unu:
|
||||
logs.out("1", dir_unu, False)
|
||||
conf_err = True
|
||||
|
||||
for file_unu in dom.file_unu:
|
||||
logs.out("24", file_unu, False)
|
||||
|
||||
if conf_err:
|
||||
logs.out("31", '', True)
|
||||
|
||||
|
|
|
@ -1,11 +1,27 @@
|
|||
#!/usr/bin/env python3
|
||||
# Name: Tyto - Littérateur
|
||||
# Type: Global functions for Tyto
|
||||
# Description: Settings, Tools and
|
||||
# file: tyto.py
|
||||
# Folder: /var/lib/tyto/program/
|
||||
# By echolib (XMPP: im@echolib.re)
|
||||
# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
|
||||
# Tyto - Littérateur
|
||||
#
|
||||
# Copyright (C) 2023 Cyrille Louarn <echolib+tyto@a-lec.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License
|
||||
# as published by the Free Software Foundation, either version 3 of the
|
||||
# License, or of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# XMPP: echolib (im@echolib.re)
|
||||
#
|
||||
# Description: Tools and some seetings.
|
||||
# File: /var/lib/tyto/program/tyto.py
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
#------------
|
||||
# funny stats
|
||||
|
@ -19,47 +35,14 @@
|
|||
|
||||
import os, sys, subprocess, locale, base64, datetime, shutil
|
||||
from hashlib import blake2b
|
||||
|
||||
import args, dom, logs
|
||||
|
||||
# TEMP
|
||||
lang = 'fr'
|
||||
if lang.lower() == 'fr': n = 0
|
||||
else: n = 1
|
||||
#--
|
||||
|
||||
# :D
|
||||
Tyto = 'Tyto - Littérateur'
|
||||
Tytogit = 'https://git.a-lec.org/echolib/tyto-litterateur'
|
||||
Tytoweb = 'https://tyto.echolib.re'
|
||||
stats_f = 'tyto_statoolinfos.conf'
|
||||
|
||||
# Translations French/English
|
||||
trans = [
|
||||
('À l\'affiche !', 'Featured !'), # 0
|
||||
('Accueil', 'Home'), # 1
|
||||
('Licence', 'License'), # 2
|
||||
('Code source', 'Source code'), # 3
|
||||
('Dépôt officiel du code source de %s'%Tyto , '%s\'s official source code repository'%Tyto),
|
||||
('Site web officiel du logiciel libre %s'%Tyto, '%s\'s official website'),
|
||||
('L\'article', 'The article'), # 6
|
||||
('écrit par', 'written by'), # 7
|
||||
('Publié le', 'Published the'), # 8 date for section HTML (article_infos)
|
||||
('à', 'at'), # 9 time format
|
||||
('rédigé le', 'created the'), # 10
|
||||
('À Propos de', 'About'), # 11
|
||||
('Générateur :', 'Generator:'), # 12
|
||||
('Contacter par courriel', 'Contact by mail'), # 13
|
||||
('Courriel', 'Mail'), # 14
|
||||
('C.G.U.', 'T.o.U'), # 15
|
||||
('Mentions légales', 'Legal Notice'), # 16
|
||||
('Conditions Générales d\'Utilisation', 'Terms of Use'), # 17
|
||||
('Loi', 'Law'), # 18
|
||||
('Articles de', 'Articles from'), # 19
|
||||
('Lire l\'article:', 'Read the article:'), #20
|
||||
('Voir le code source au format Tyto de cet article', 'See this article\'s source code in Tyto format') #21 (title)
|
||||
]
|
||||
|
||||
|
||||
# Needed header tags
|
||||
needed_header_tags = \
|
||||
|
@ -96,7 +79,8 @@ opt_tags_check_uri = \
|
|||
)
|
||||
|
||||
# Set all tags used in article's header
|
||||
headers = (
|
||||
headers = \
|
||||
(
|
||||
'title:',
|
||||
'about:',
|
||||
'author:',
|
||||
|
@ -206,8 +190,8 @@ def exists(uri):
|
|||
# False = URI #
|
||||
#-----------------------#
|
||||
def get_filesum(path, src):
|
||||
if not exists(path):
|
||||
logs.out("1", path, True)
|
||||
#if not src and not exists(path):
|
||||
# logs.out("1", path, True)
|
||||
|
||||
file_sum = blake2b(digest_size=4)
|
||||
|
||||
|
|
|
@ -38,50 +38,22 @@
|
|||
|
||||
import os, re, sys, locale, shutil, importlib, time
|
||||
from pathlib import Path
|
||||
|
||||
import args, logs, dom, db, tyto, html, form, stats
|
||||
|
||||
# load locale translation
|
||||
trans_dir = '/var/lib/tyto/translations'
|
||||
sys.path.insert(0, trans_dir)
|
||||
|
||||
# System language
|
||||
try: lang_sys = locale.getdefaultlocale()[0].split('_')[0]
|
||||
except: lang_sys = 'en'
|
||||
|
||||
# Get default system language
|
||||
# or set "en" (english) if no translation file
|
||||
try:
|
||||
lang_site = lang_sys
|
||||
os.path.exists('%s/site_%s.py'%(trans_dir, lang_site))
|
||||
except:
|
||||
lang_site = 'en'
|
||||
|
||||
# Set language site/form from configuration domain
|
||||
# or set default english if not known
|
||||
try:
|
||||
dom.exists
|
||||
lang_site = dom.lang_site
|
||||
os.path.exists('%s/site_%s.py'%(trans_dir, lang_site))
|
||||
tr = importlib.import_module('site_%s'%lang_site, package=None)
|
||||
except:
|
||||
tr = importlib.import_module('site_%s'%lang_site, package=None)
|
||||
|
||||
import args, logs, langs, dom, db, tyto, html, form, stats
|
||||
|
||||
#=========================================#
|
||||
# Manage wip action with option as target #
|
||||
#-----------------------------------------#
|
||||
def manage_wip(target):
|
||||
global post_db, hash_post, target_all
|
||||
|
||||
# Check if can process
|
||||
def manage(target):
|
||||
dom.valid()
|
||||
|
||||
global post_db, hash_post, target_all
|
||||
|
||||
# wip_article(db.post_src) ; return # Force wip without checking
|
||||
|
||||
# Target is footer, sidebar, navbar, metas
|
||||
#-----------------------------------------
|
||||
if target in args.pass_targets:
|
||||
if not target:
|
||||
logs.out("5", '[target]', True)
|
||||
|
||||
elif target in args.pass_targets:
|
||||
do = {
|
||||
'all' : wip_all,
|
||||
'again' : wip_all,
|
||||
|
@ -100,10 +72,14 @@ def manage_wip(target):
|
|||
# Per article with target
|
||||
#------------------------
|
||||
# Exit with these conditions
|
||||
if not target: logs.out("5", '', True)
|
||||
if not db.exists: sys.exit(1)
|
||||
if not db.config: logs.out("25", db.uri_file, True)
|
||||
if db.old_chk: logs.out("9", db.uri_file, True)
|
||||
if not db.post:
|
||||
logs.out("1", db.uri_file, True)
|
||||
|
||||
elif not db.exists:
|
||||
logs.out("28", '%s %s'%(args.action, args.target), True)
|
||||
|
||||
elif db.old_chk:
|
||||
logs.out("9", db.uri_file, True)
|
||||
|
||||
# Article has changed or wip file missing
|
||||
if db.old_wip or not db.file_wip:
|
||||
|
@ -112,7 +88,7 @@ def manage_wip(target):
|
|||
# wip is up-to-date: ask to wip again
|
||||
else:
|
||||
logs.out("19", db.date_wip, False)
|
||||
form.asking(' ├ [%s] %s%s '%(db.title, tr.wip_new, tr.q), True)
|
||||
form.asking(' ├ [%s] %s%s '%(db.title, langs.site.wip_new, langs.site.q), True)
|
||||
wip_article(db.uri_file)
|
||||
|
||||
|
||||
|
@ -819,7 +795,7 @@ def convert_list(markdown_str):
|
|||
index = -1
|
||||
|
||||
# Cut string with \n's
|
||||
strlist = markdown_str.split("\n")
|
||||
strlist = markdown_slangs.site.split("\n")
|
||||
|
||||
# Find items
|
||||
for i in range(len(strlist)):
|
||||
|
|
|
@ -22,25 +22,28 @@ unused_r = "Unused ressource"
|
|||
unused_c = "Unused database value"
|
||||
db_inv = "Corrupted article's database"
|
||||
err_arg = "Argument error"
|
||||
no_arg = "Unused argument with"
|
||||
no_arg = "Unused argument"
|
||||
no_fidi = "Black Hole: no file or directory here"
|
||||
dom_ina = "Inactive domain"
|
||||
dom_inc = "Incomplete domain"
|
||||
dom_act = "Active domain"
|
||||
data_inc = "Incomplete data"
|
||||
data_inv = "Invalid data"
|
||||
dom_no = "No domain found"
|
||||
no_fidi = "Blask Hole: no file or directory here"
|
||||
|
||||
file_c = "File created"
|
||||
file_n = "File changed"
|
||||
file_e = "File exists"
|
||||
dir_c = "Directory created"
|
||||
dir_e = "Directory exists"
|
||||
|
||||
check_on = "Article was check the"
|
||||
was_chk = "Article 'check'"
|
||||
was_wip = "Article already 'wip'"
|
||||
check_m = "Check manually"
|
||||
post_inc = "Unused in article"
|
||||
post_inv = "Article not valid"
|
||||
post_val = "Article is valid"
|
||||
post_chg = "Article changed: 'check' it first"
|
||||
sep_inv = "Unused separator in article"
|
||||
unused_v = "Unused value in article"
|
||||
unused_p = "Empty article"
|
||||
|
@ -52,5 +55,9 @@ nyfile = "file not yet created"
|
|||
nycheck = "Article not yet checked"
|
||||
nywip = "Article not yet wip"
|
||||
add = "Add:"
|
||||
nomods = "Create HTML modules first"
|
||||
status_r = "Checking unused ressources..."
|
||||
was_wip = "Article already 'wip'"
|
||||
|
||||
|
||||
laterout = "Maybe later..."
|
||||
|
|
|
@ -23,25 +23,27 @@ unused_r = "Ressource manquante"
|
|||
unused_c = "Valeur de la base de donnée manquante"
|
||||
db_inv = "Base de donnée de l'article corrompue"
|
||||
err_arg = "Erreur d'argument"
|
||||
no_arg = "Argument manquant avec"
|
||||
no_arg = "Argument manquant"
|
||||
no_fidi = "Trou Noir: aucun fichier ou dossier ici"
|
||||
dom_ina = "Domaine inactif"
|
||||
dom_inc = "Domaine incomplet"
|
||||
dom_act = "Domaine actif"
|
||||
data_inc = "Donnée incomplète"
|
||||
data_inv = "Donnée invalide"
|
||||
dom_no = "Aucun domaine trouvé"
|
||||
no_fidi = "Trou Noir: aucun fichier ou dossier ici"
|
||||
file_c = "Fichier créé"
|
||||
file_n = "Fichier modifié"
|
||||
file_e = "Fichier présent"
|
||||
dir_c = "Dossier créé"
|
||||
dir_e = "Dossier présent"
|
||||
|
||||
check_on = "Article vérifié le"
|
||||
was_chk = "Article déjà vérifié"
|
||||
was_wip = "Article déjà 'wip'"
|
||||
check_m = "Vérifier manuellement"
|
||||
post_inc = "Donnée manquante dans l'article"
|
||||
post_inv = "Article non valide"
|
||||
post_val = "Article valide"
|
||||
post_chg = "Article modifié : commencer par 'check'"
|
||||
sep_inv = "Séparateur manquant dans l'article"
|
||||
unused_v = "Valeur manquante dans l'article"
|
||||
unused_p = "L'article est vide"
|
||||
|
@ -53,6 +55,7 @@ nyfile = "Fichier pas encore créé"
|
|||
nycheck = "Article pas encore 'check'"
|
||||
nywip = "Article pas encore 'wip'"
|
||||
add = "Ajout:"
|
||||
|
||||
nomods = "Créer d'abord les modules HTML"
|
||||
status_r = "Vérification des ressources manquantes..."
|
||||
|
||||
laterout = "Pour plus tard..."
|
||||
|
|
|
@ -21,6 +21,7 @@ This is a python file, so... DO NOT REMOVE:
|
|||
'''
|
||||
|
||||
# Generic
|
||||
article = "Article"
|
||||
sidebar = 'Sidebar'
|
||||
navbar = 'Navbar'
|
||||
metas = 'Metas Tags'
|
||||
|
@ -28,6 +29,7 @@ footer = 'Footer'
|
|||
title = 'Title'
|
||||
File = 'File'
|
||||
name = 'Name'
|
||||
by = 'par'
|
||||
q = '?'
|
||||
i = '!'
|
||||
pp = ":"
|
||||
|
@ -39,6 +41,11 @@ source_code = "Source code"
|
|||
home = "Home"
|
||||
go_home = "Go to Homepage"
|
||||
read = "Read"
|
||||
tyto_psrc = "Show this article's source code in Tyto format"
|
||||
w_written = "was written the"
|
||||
w_published = "was published the"
|
||||
written = "written the"
|
||||
published = "wpublished the"
|
||||
|
||||
# Sidebar
|
||||
site_sdb_t = "Featured..."
|
||||
|
@ -83,6 +90,10 @@ form_ready = ' │\n' + \
|
|||
' ├──────────────────────────────────────┐\n' + \
|
||||
' │ Domain is ready. Have fun, writers ! │\n' + \
|
||||
' └──────────────────────────────────────┘'
|
||||
form_inv = ' │\n' + \
|
||||
' ├─────────────────────────────────────┐\n' + \
|
||||
' │ Domain is INVALID. Try form again ! │\n' + \
|
||||
' └─────────────────────────────────────┘'
|
||||
|
||||
form_opt = "[Optional]"
|
||||
form_url = "URL to official website?"
|
||||
|
@ -215,3 +226,54 @@ footer_about_doc = \
|
|||
'# - begin with "#"\n' + \
|
||||
'# - Do NOT copy to template directory\n' + \
|
||||
'# %s\n'%(20 * "-")
|
||||
|
||||
# Help with Tyto commands
|
||||
args_helps = """\n# New domain:
|
||||
- Create your domain folder, and go in
|
||||
- Create domain with 'tyto new domain [URL]'
|
||||
- Create article\'s file in articles/ directory
|
||||
- Use these actions on article\'s file: Check > wip > publish
|
||||
! Config\'s files are in _configs/ directory
|
||||
and used to create HTML file in your template
|
||||
Your template files (css, logo...) go to wip/template/ server\n
|
||||
# Usage: tyto [action] [target]
|
||||
- [action] > according to [target]:
|
||||
edit : Edit a file (article, config's module)
|
||||
edit-about: specific for (footer), or like [edit-db]
|
||||
edit-db : Edit a config file (domain, article (TAKE CARE !))
|
||||
edit-wip : Edit html file in wip server
|
||||
edit_www : Edit html file in www server
|
||||
new : Create new (domain, sidebar/footer... config's file)
|
||||
show : Show content file (article, config's module)
|
||||
show-about: specific for (footer), or like [show-db]
|
||||
show-db : Show content of article\'s database
|
||||
show-wip : Show content of HTML file in wip server
|
||||
show-www : Show content of HTML file in www server\n
|
||||
check : Check if article is valid and ready to convert
|
||||
wip : Create HTML page in wip server
|
||||
publish : Create HTML page in www server\n
|
||||
- [target] > according to [action]
|
||||
all : process (updated) valid articles
|
||||
again : process again ALL valid articles
|
||||
newer : [wip/publish] convert only newer articles
|
||||
template : - Create new navbar/sidebar/metas/footer in www server
|
||||
- Copy other wip/template/ files to www server
|
||||
domain : Create/Show domain config's file
|
||||
[file] : URI of an article's file (autocompletion's friend)
|
||||
footer : Create/Show footer HTML config's file
|
||||
metas : Create/Show metas HTML config's file
|
||||
navbar : Create/Show navbar config's file
|
||||
sidebar : Create/Show sidebar config's file
|
||||
stats : Create statistics file in root server\n
|
||||
# Examples:
|
||||
- Check article's syntax: tyto check mysubdir/index.tyto
|
||||
- Create default _configs/tyto.sidebar: tyto new sidebar
|
||||
- Edit _configs/tyto.navbar: tyto edit navbar
|
||||
(each edition launches process if file changed like:
|
||||
- check
|
||||
- (navbar, sidebar, metas, footer) : create file on wip server)
|
||||
- Edit index.html in www server: tyto edit-www index.tyto
|
||||
- Create sidebar.html in wip server: tyto wip sidebar
|
||||
- Show footer.html in wip server: tyto show-wip footer
|
||||
- Create metas.html in www server: tyto publish metas
|
||||
- Show navbar.html in www server: tyto show-www navbar"""
|
||||
|
|
|
@ -21,13 +21,15 @@ Ceci est un fichier python, donc... NE PAS ENLEVER :
|
|||
'''
|
||||
|
||||
# Generic
|
||||
article = "Article"
|
||||
sidebar = 'Barre Latérale'
|
||||
navbar = 'Barre de navigation'
|
||||
metas = 'Balises Metas'
|
||||
footer = "Pied de Page"
|
||||
footer = 'Pied de Page'
|
||||
title = 'Titre'
|
||||
File = 'Fichier'
|
||||
name = 'Nom'
|
||||
by = 'par'
|
||||
q = ' ?'
|
||||
i = ' !'
|
||||
pp = " :"
|
||||
|
@ -39,6 +41,11 @@ source_code = "Code source"
|
|||
home = "Accueil"
|
||||
go_home = "Aller à la page d'accueil"
|
||||
read = "À lire"
|
||||
tyto_psrc = "Voir le code source au format Tyto de cet article"
|
||||
w_written = "a été écrit le"
|
||||
w_published = "a été publié le"
|
||||
written = "écrit le"
|
||||
published = "publié le"
|
||||
|
||||
# Barre latérale
|
||||
site_sdb_t = "À l'affiche..."
|
||||
|
@ -84,6 +91,10 @@ form_ready = ' │\n' + \
|
|||
' ├─────────────────────────────────────────┐\n' + \
|
||||
' │ Le domaine est prêt. Amusez-vous bien ! │\n' + \
|
||||
' └─────────────────────────────────────────┘'
|
||||
form_inv = ' │\n' + \
|
||||
' ├───────────────────────────────────────────┐\n' + \
|
||||
' │ Le Domaine est INVALIDE. Essayez encore ! │\n' + \
|
||||
' └───────────────────────────────────────────┘'
|
||||
|
||||
form_opt = "[Optionnel]"
|
||||
form_url = "URL du site web officiel"
|
||||
|
@ -216,3 +227,54 @@ footer_about_doc = \
|
|||
'# - commencent par "#"\n' + \
|
||||
'# - Ne PAS copier ce fichier dans le dossier template\n' + \
|
||||
'# %s\n'%(20 * "-")
|
||||
|
||||
# Help with Tyto commands
|
||||
args_helps = """\n# New domain:
|
||||
- Create your domain folder, and go in
|
||||
- Create domain with 'tyto new domain [URL]'
|
||||
- Create article\'s file in articles/ directory
|
||||
- Use these actions on article\'s file: Check > wip > publish
|
||||
! Config\'s files are in _configs/ directory
|
||||
and used to create HTML file in your template
|
||||
Your template files (css, logo...) go to wip/template/ server\n
|
||||
# Usage: tyto [action] [target]
|
||||
- [action] > according to [target]:
|
||||
edit : Edit a file (article, config's module)
|
||||
edit-about: specific for (footer), or like [edit-db]
|
||||
edit-db : Edit a config file (domain, article (TAKE CARE !))
|
||||
edit-wip : Edit html file in wip server
|
||||
edit_www : Edit html file in www server
|
||||
new : Create new (domain, sidebar/footer... config's file)
|
||||
show : Show content file (article, config's module)
|
||||
show-about: specific for (footer), or like [show-db]
|
||||
show-db : Show content of article\'s database
|
||||
show-wip : Show content of HTML file in wip server
|
||||
show-www : Show content of HTML file in www server\n
|
||||
check : Check if article is valid and ready to convert
|
||||
wip : Create HTML page in wip server
|
||||
publish : Create HTML page in www server\n
|
||||
- [target] > according to [action]
|
||||
all : process (updated) valid articles
|
||||
again : process again ALL valid articles
|
||||
newer : [wip/publish] convert only newer articles
|
||||
template : - Create new navbar/sidebar/metas/footer in www server
|
||||
- Copy other wip/template/ files to www server
|
||||
domain : Create/Show domain config's file
|
||||
[file] : URI of an article's file (autocompletion's friend)
|
||||
footer : Create/Show footer HTML config's file
|
||||
metas : Create/Show metas HTML config's file
|
||||
navbar : Create/Show navbar config's file
|
||||
sidebar : Create/Show sidebar config's file
|
||||
stats : Create statistics file in root server\n
|
||||
# Examples:
|
||||
- Check article's syntax: tyto check mysubdir/index.tyto
|
||||
- Create default _configs/tyto.sidebar: tyto new sidebar
|
||||
- Edit _configs/tyto.navbar: tyto edit navbar
|
||||
(each edition launches process if file changed like:
|
||||
- check
|
||||
- (navbar, sidebar, metas, footer) : create file on wip server)
|
||||
- Edit index.html in www server: tyto edit-www index.tyto
|
||||
- Create sidebar.html in wip server: tyto wip sidebar
|
||||
- Show footer.html in wip server: tyto show-wip footer
|
||||
- Create metas.html in www server: tyto publish metas
|
||||
- Show navbar.html in www server: tyto show-www navbar"""
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
# Home Domain
|
||||
directory = ""
|
||||
database = ""
|
||||
|
||||
# Local user configuration
|
||||
lang_sys = "SYS"
|
||||
local_user = ""
|
||||
lang_logs = "SYS"
|
||||
articles_db_d = ""
|
||||
|
||||
# Working directories
|
||||
articles_d = ""
|
||||
files_d = ""
|
||||
images_d = ""
|
||||
modules_d = ""
|
||||
|
||||
# Modules files
|
||||
navbar_f = ""
|
||||
sidebar_f = ""
|
||||
metas_f = ""
|
||||
footer_f = ""
|
||||
footer_about_f = ""
|
||||
|
||||
# Domain
|
||||
shortname = ""
|
||||
www_url = ""
|
||||
wip_url = ""
|
||||
|
||||
# Servers directories
|
||||
srv_root = ""
|
||||
srv_domain = ""
|
||||
srv_wip = ""
|
||||
srv_wip_tpl_d = ""
|
||||
srv_wip_images_d = ""
|
||||
srv_wip_files_d = ""
|
||||
srv_www = ""
|
||||
srv_www_tpl_d = ""
|
||||
srv_www_images_d = ""
|
||||
srv_www_files_d = ""
|
||||
|
||||
# Servers files
|
||||
wip_navbar_f = ""
|
||||
wip_sidebar_f = ""
|
||||
wip_metas_f = ""
|
||||
wip_footer_f = ""
|
||||
www_navbar_f = ""
|
||||
www_sidebar_f = ""
|
||||
www_metas_f = ""
|
||||
www_footer_f = ""
|
||||
wip_logo_f = ""
|
||||
www_logo_f = ""
|
||||
www_rss_f = ""
|
||||
|
||||
# Domain user's settings
|
||||
logo = "logo.png"
|
||||
rss = "rss.xml"
|
||||
rss_items = 100
|
||||
title = ""
|
||||
date = ""
|
||||
about = ""
|
||||
lang_site = "SYS"
|
||||
mail = ""
|
||||
tags = ""
|
||||
license = ""
|
||||
license_url = ""
|
||||
legal_url = ""
|
||||
terms_url = ""
|
||||
css = "tyto"
|
||||
sep = "-"
|
||||
article_code = False
|
||||
relme = ""
|
||||
sidebar_title = ""
|
||||
sidebar_items = 6
|
||||
|
||||
activated = False
|
Loading…
Reference in New Issue