possibilité de documenter les workflows (et +) (#19777) #1374
Loading…
Reference in New Issue
No description provided.
Delete Branch "wip/19777-workflow-documentation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
acab879f15
to0416235276
0416235276
to10bd9e61ca
10bd9e61ca
toff723d40a3
ff723d40a3
to76d1483306
76d1483306
to36bdd67459
36bdd67459
to09d618bcaf
09d618bcaf
to5a7b27ef5c
5a7b27ef5c
to574211a89f
574211a89f
tob420cf11f6
b420cf11f6
to1772066c00
1772066c00
to7945a797b7
7945a797b7
tofa56f6abd7
fa56f6abd7
to5bb49f3029
@ -195,7 +195,6 @@ def test_data_sources_new(pub):
resp = app.get('/backoffice/settings/data-sources/')
resp = resp.click('New Data Source')
resp.forms[0]['name'] = 'a new data source'
resp.forms[0]['description'] = 'description of the data source'
L'attribut description qui existait sur les sources de données et appels webservice (et les modèles de courriels et de messages), déplacé pour être désormais géré comme la documentation des workflows.
@ -4432,0 +4432,4 @@
def test_workflow_documentation(pub):
create_superuser(pub)
Ce test sur les workflows est un peu plus long que les autres, pour tester des trucs en plus.
@ -4432,0 +4456,4 @@
resp = app.post_json(workflow.get_admin_url() + 'update-documentation', {'content': ''})
assert resp.json == {'err': 0, 'empty': True, 'changed': False}
resp = app.post_json(workflow.get_admin_url() + 'update-documentation', {'content': '<p>doc</p>'})
assert resp.json == {'err': 0, 'empty': False, 'changed': True}
Sur la gestion des erreurs.
@ -4432,0 +4467,4 @@
)
assert resp.json == {'err': 0, 'empty': False, 'changed': True}
workflow.refresh_from_storage()
assert workflow.documentation == '<p>iframe</p>'
Et sur le nettoyage de l'HTML
@ -113,11 +114,13 @@ class BlockDirectory(FieldsDirectory):
r += htmltext('<li><a href="export">%s</a></li>') % _('Export')
r += htmltext('<li><a href="delete" rel="popup">%s</a></li>') % _('Delete')
r += htmltext('</ul>')
r += self.get_documentable_button()
Le bouton avec l'icône.
@ -118,3 +120,4 @@
r += htmltext('</div>')
r += utils.last_modification_block(obj=self.objectdef)
r += get_session().display_message()
r += self.get_documentable_zone()
Et la zone d'affichage.
@ -0,0 +31,4 @@
def get_documentable_zone(self):
return htmltext('<span class="actions">%s</span>') % template.render(
'wcs/backoffice/includes/documentation.html',
{'element': self.documented_element, 'object': self.documented_object},
Mixin pour fournir presque partout ces deux méthodes (pour les endroits où le rendu se fait encore en dur dans le python, pour les pages qui font leur rendu via un template, c'est directement un include dedans).
@ -0,0 +36,4 @@
def update_documentation(self):
get_request().ignore_session = True
get_response().set_content_type('application/json')
Et la vue de mise à jour.
@ -0,0 +55,4 @@
class DocumentableFieldMixin:
def documentation_part(self):
if not self.field.documentation:
get_response().filter['sidebar_attrs'] = 'hidden'
Pour les champs ce truc particulier de garder la barre latérale cachée s'il n'y a pas de documentation.
@ -500,0 +509,4 @@
'get_substitution_html_table': get_publisher().substitutions.get_substitution_html_table,
}
return template.QommonTemplateResponse(
templates=['wcs/backoffice/workflow-action.html'],
Un premier commit pour utiliser un template pour le rendu de la page d'une action.
@ -44,3 +44,3 @@
('name', 'str'),
('slug', 'str'),
('description', 'str'),
('description', 'str'), # legacy
Il est conservé dans l'XML, pour à l'import pouvoir le convertir.
@ -55,0 +57,4 @@
changed = False
if getattr(self, 'description', None): # 2024-04-07
self.documentation = getattr(self, 'description')
self.description = None
Migration là où il y avait "description".
@ -68,3 +79,3 @@
return '%s/workflows/comment-templates/%s/' % (base_url, self.id)
def store(self, comment=None, application=None, *args, **kwargs):
def store(self, comment=None, snapshot_store_user=True, application=None, *args, **kwargs):
Et il n'y avait pas le snapshot_store_user, donc voilà.
@ -2682,2 +2682,4 @@
return misc.html2text(self.value)
def clean_html(self, value):
try:
Le code n'a pas changé, il est juste déplacé.
@ -257,3 +257,3 @@
if ($('#sticky-sidebar').css('display') === 'none') {
$('#sidebar').animate(
{'max-width': '23rem'},
{'max-width': '24rem'},
À force d'ouvrir/fermer la barre latérale je me suis rendu compte que depuis plusieurs années la taille n'était pas restaurée à sa valeur initiale.
@ -522,0 +531,4 @@
documentation_save_button.addEventListener('click', (e) => {
editor.sourceContent = editor.getHTML()
var documentation_message = Object()
bouton "ernegistrer", qui prend ce qui a été saisi et le POSTe sur l'API.
@ -522,0 +535,4 @@
documentation_message['content'] = editor.sourceContent.innerHTML
document.querySelector('.documentation-save-marks .mark-error').style.visibility = 'hidden'
document.querySelector('.documentation-save-marks .mark-success').style.visibility = 'hidden'
document.querySelector('.documentation-save-marks .mark-sent').style.visibility = 'visible'
Il y a trois marques (deux ✓ et une croix), les deux ✓ pour en avoir 1 affiché à l'envoi, 1 autre à la réponse ok, la croix en cas d'erreur.
@ -522,0 +565,4 @@
document.querySelector('.documentation-save-marks .mark-error').style.visibility = 'hidden'
document.querySelector('.documentation-save-marks .mark-success').style.visibility = 'hidden'
document.querySelector('.documentation-save-marks .mark-sent').style.visibility = 'hidden'
}, 5000)
Retrait des deux marques de sèccus après 5 secondes.
@ -522,0 +573,4 @@
e.preventDefault()
if (editor_link.getAttribute('aria-pressed') == 'true') {
editor.validEdition()
documentation_save_button.dispatchEvent(new Event('click'))
Sur le clic sur le bouton d'édition, validation du contenu de l'éditeur si c'était coché, et évènement sur le bouton enregistrer, pour faire le POST.
@ -522,0 +575,4 @@
editor.validEdition()
documentation_save_button.dispatchEvent(new Event('click'))
documentation_block.classList.remove('active')
document.querySelector('#documentation-editor .godo--editor').setAttribute('contenteditable', 'false')
Retrait du contenteditable, pour que les liens puissent être cliqués.
@ -522,0 +580,4 @@
if (title_byline) title_byline.style.visibility = 'visible'
} else {
documentation_block.classList.add('active')
document.querySelector('.bo-block.documentation').removeAttribute('hidden')
À l'inverse, quand l'édition n'était pas active, on affiche le bloc.
@ -522,0 +583,4 @@
document.querySelector('.bo-block.documentation').removeAttribute('hidden')
if (document.querySelector('aside .bo-block.documentation')) {
document.getElementById('sidebar').style.display = 'block'
document.getElementById('sidebar').removeAttribute('hidden')
Et si jamais il était dans la barre latérale et que celle-ci était cachée, on l'affiche.
@ -5,1 +5,4 @@
/* do not turn all contenteditable into ckeditor, as some pages may have both
* godo and ckeditor */
CKEDITOR.disableAutoInline = true;
Moment bizarre où godo se mélangeait avec ckeditor; en fait ckeditor réagit automatiquement à l'apparition d'un contenteditable.
WIP: possibilité de documenter les workflows (et +) (#19777)to possibilité de documenter les workflows (et +) (#19777)