possibilité de documenter les workflows (et +) (#19777) #1374

Merged
fpeters merged 4 commits from wip/19777-workflow-documentation into main 2024-04-15 10:21:54 +02:00
Owner
No description provided.
fpeters added 3 commits 2024-04-07 10:37:58 +02:00
fpeters force-pushed wip/19777-workflow-documentation from acab879f15 to 0416235276 2024-04-07 10:40:42 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 0416235276 to 10bd9e61ca 2024-04-07 10:53:28 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 10bd9e61ca to ff723d40a3 2024-04-07 11:03:33 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from ff723d40a3 to 76d1483306 2024-04-07 11:18:28 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 76d1483306 to 36bdd67459 2024-04-07 12:21:16 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 36bdd67459 to 09d618bcaf 2024-04-07 12:44:06 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 09d618bcaf to 5a7b27ef5c 2024-04-07 17:29:57 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 5a7b27ef5c to 574211a89f 2024-04-07 18:42:33 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 574211a89f to b420cf11f6 2024-04-07 19:00:37 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from b420cf11f6 to 1772066c00 2024-04-12 09:27:43 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 1772066c00 to 7945a797b7 2024-04-12 10:56:31 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from 7945a797b7 to fa56f6abd7 2024-04-12 11:36:19 +02:00 Compare
fpeters force-pushed wip/19777-workflow-documentation from fa56f6abd7 to 5bb49f3029 2024-04-12 12:17:26 +02:00 Compare
Author
Owner
No description provided.
fpeters reviewed 2024-04-12 13:05:48 +02:00
@ -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'
Author
Owner

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.

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)
Author
Owner

Ce test sur les workflows est un peu plus long que les autres, pour tester des trucs en plus.

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}
Author
Owner

Sur la gestion des erreurs.

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>'
Author
Owner

Et sur le nettoyage de l'HTML

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()
Author
Owner

Le bouton avec l'icône.

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()
Author
Owner

Et la zone d'affichage.

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},
Author
Owner

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).

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')
Author
Owner

Et la vue de mise à jour.

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'
Author
Owner

Pour les champs ce truc particulier de garder la barre latérale cachée s'il n'y a pas de documentation.

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'],
Author
Owner

Un premier commit pour utiliser un template pour le rendu de la page d'une action.

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
Author
Owner

Il est conservé dans l'XML, pour à l'import pouvoir le convertir.

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
Author
Owner

Migration là où il y avait "description".

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):
Author
Owner

Et il n'y avait pas le snapshot_store_user, donc voilà.

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:
Author
Owner

Le code n'a pas changé, il est juste déplacé.

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'},
Author
Owner

À 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.

À 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()
Author
Owner

bouton "ernegistrer", qui prend ce qui a été saisi et le POSTe sur l'API.

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'
Author
Owner

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.

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)
Author
Owner

Retrait des deux marques de sèccus après 5 secondes.

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'))
Author
Owner

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.

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')
Author
Owner

Retrait du contenteditable, pour que les liens puissent être cliqués.

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')
Author
Owner

À l'inverse, quand l'édition n'était pas active, on affiche le bloc.

À 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')
Author
Owner

Et si jamais il était dans la barre latérale et que celle-ci était cachée, on l'affiche.

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;
Author
Owner

Moment bizarre où godo se mélangeait avec ckeditor; en fait ckeditor réagit automatiquement à l'apparition d'un contenteditable.

Moment bizarre où godo se mélangeait avec ckeditor; en fait ckeditor réagit automatiquement à l'apparition d'un contenteditable.
fpeters changed title from WIP: possibilité de documenter les workflows (et +) (#19777) to possibilité de documenter les workflows (et +) (#19777) 2024-04-12 13:05:56 +02:00
lguerin approved these changes 2024-04-15 10:19:02 +02:00
fpeters merged commit 81373a2af9 into main 2024-04-15 10:21:54 +02:00
fpeters deleted branch wip/19777-workflow-documentation 2024-04-15 10:21:54 +02:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/wcs#1374
No description provided.