Version 0.5.6 (correction de bugs de la version 0.5.5)

screenshot news sorting
Figure 1. Les en-têtes de colonne indiquent les directions du tri
Comment conserver le contexte en cliquant sur un tableau
def showPart(PlmFreeCadPart part, Long partVersion, Boolean isHistory) {(1)
    taackUiService.show(
            plmFreeCadUiService.buildFreeCadPartBlockShow(
                    part, partVersion, false, isHistory),               (2)
            buildMenu(),
            "isHistory")                                                (3)
}
1 isHistory est un paramètre d’action
2 isHistory est utilisé lors du dessin du bloc ; il faut le retransmettre pour dessiner exactement la même disposition de blocs, en gardant le contexte
3 La clé isHistory est passée comme dernier argument taackUiService.show. Vous pouvez mettre plusieurs clés à conserver.

Version 0.5.4

Version 0.5.3

  • Correction des checkboxes dans les formulaires

  • Autorise les alias en TQL pour les colonnes de formule

  • Nettoyage du code

Version 0.5.2

  • Le client JDBC est aussi une extension AsciidoctorJ

  • Ajout de l’accès au getter dans la clause select du driver JDBC pour les classes du domain.

  • Ajout du DSL TQL and TDL (Taack Display Language) pour décrire comment afficher les données des requêtes

  • Les libéllé manuel sur les menus sont de nouveau autorisé

  • Meilleure customisation du thème

TQL and TDL (Taack Display Language)
select
    u.rawImg,
    u.username,
    u.manager.username
from User u
where u.dateCreated > '2024-01-01' and u.manager.username = 'admin';
--
table rawImg as "Pic", username as "Name", manager as "Manager"
news table
Figure 2. Results

Version 0.5.1

Remplacement de TaackPlugin
@PostConstruct
void init() {
    TaackUiEnablerService.securityClosure(
        this.&securityClosure,
        CrewController.&editUser as MC,
        CrewController.&saveUser as MC)
    TaackAppRegisterService.register(
        new TaackApp(
            CrewController.&index as MC,                    (1)
            new String(
                this.class
                    .getResourceAsStream("/crew/crew.svg")  (2)
                    .readAllBytes()
            )
        )
    )
}
1 Entry Point
2 Icon
Remplacement des Charts : Diagrams
private static UiDiagramSpecifier d1() {
    new UiDiagramSpecifier().ui {
        bar(["T1", "T2", "T3", "T4"] as List<String>, false, {
            dataset 'Truc1', [1.0, 2.0, 1.0, 4.0]
            dataset 'Truc2', [2.0, 0.1, 1.0, 0.0]
            dataset 'Truc3', [2.0, 0.1, 1.0, 1.0]
        }, DiagramTypeSpec.HeightWidthRadio.ONE)
    }
}
PDF contenant des diagrammes
printableBody {
    diagram(d1(), BlockSpec.Width.HALF)
    diagram(d2(), BlockSpec.Width.HALF)
}
Diagramme Stacked Bar

news diagram

Version 0.5.0

Basée sur Bootstrap uniquement

  • Themable

    • Schemas de couleur du bureau (light ou dark)

    • Taille des composants ajustable

  • Plus extensible

Optimisation du chargement des pages

  • Optimisation de la taille des fichiers assets

  • CSS plus concis et factorisé

Changement du codage

DSL pour la disposition des objets

  • Définition de la disposition est maintenant identique pour les form et blocs

    • col et row

    • tabs et tab

  • Argument With uniquement réservé à col

  • Meilleurs paramètres par défaut.

DSL Menu pour les blocs

  • Les actions icônes sont remplacées par le DSL Menu

  • Possibilité de ne pas utiliser d’actions icônes

  • Traduction automatique des actions de base

Simplification du code

  • Maintenance du code plus aisée

  • Contributions externes plus simples

  • Meilleure évolutivité

  • Application de test pour débugage

Version 0.4.2

À paraître…​ cette version devrait comporter quelques changements intéressants (en cassant parfois du vieux code)

  • Améliorer la hiérarchie DSL

    • champs cachés en haut uniquement pour la lisibilité

    • pas de passage de paramètres redondants dans le formulaire

    • pas de passage de paramètres redondants dans le filtre

    • filterField uniquement sous la section uniquement

    • champ de niveau supérieur du formulaire uniquement sur l’en-tête

  • crochet pour les champs de formulaire pour afficher M2M correctement

  • crochet pour enregistrer un filtre d’objet typique

  • Améliorer l’état de restauration

  • Correction du regroupement/des arborescences de tables avec pagination

  • À déterminer

Version 0.4.1

Mise à jour de la disposition des menus

screenshot news menu 0.4.1

Mise à jour de la disposition des menus codage
private UiMenuSpecifier buildMenu(String q = null) {
    new UiMenuSpecifier().ui {
        menu CrewController.&index as MC
        menu CrewController.&listRoles as MC
        menu CrewController.&hierarchy as MC
        menuIcon ActionIcon.CONFIG_USER, this.&editUser as MC
        menuIcon ActionIcon.EXPORT_PDF, this.&downloadBinPdf as MC
        menuSearch this.&search as MethodClosure, q
        menuOptions(SupportedLanguage.fromContext())            (1)
    }
}
1 Le choix de la langue se trouve à droite de la barre de recherche et d’autres énumérations peuvent être ajoutées
Kotlin JS Debug HowTo
$ cd infra/browser/client                             (1)
$ ./gradlew browserDevelopmentRun                     (2)
$ vi intranet/server/grails-app/conf/application.yml  (3)
# Uncomment line bellow
# client.js.path: 'http://localhost:8080/client.js'

# Then your browser should show Kotlin code !
1 Déplacez-vous vers le dossier client où le code JS est généré
2 Lancez un serveur servant client.js et client.js.map…​
3 Modifiez votre fichier intranet application.yml
Nouvelle simplification DSL Solr (plus besoin de labels)
@PostConstruct
private void init() {
    taackSearchService.registerSolrSpecifier(this,
            new SolrSpecifier(User,
                CrewController.&showUserFromSearch as MethodClosure,
                this.&labeling as MethodClosure, { User u ->
        u ?= new User()
        indexField SolrFieldType.TXT_NO_ACCENT, u.username_
        indexField SolrFieldType.TXT_GENERAL, u.username_
        indexField SolrFieldType.TXT_NO_ACCENT, u.firstName_
        indexField SolrFieldType.TXT_NO_ACCENT, u.lastName_
        indexField SolrFieldType.POINT_STRING, "mainSubsidiary", true, u.subsidiary?.toString()
        indexField SolrFieldType.POINT_STRING, "businessUnit", true, u.businessUnit?.toString()
        indexField SolrFieldType.DATE, 0.5f, true, u.dateCreated_
        indexField SolrFieldType.POINT_STRING, "userCreated", 0.5f, true, u.userCreated?.username
    }))
}

Version 0.4.0

  • Plus de paginate dans les tableaux. Voir Nouveau : iterate

  • Pas de list, mais un iterate prenant une fermeture comme paramètre, avec une approche de modèle de construction pour passer des arguments

  • Les menus sont désormais étiquetés automatiquement, (utilisez lang=test dans l’URL pour traduire les menus). Voir Nouveau code menu

  • Plus de paramètre isAjax dans les tableaux…​ Voir Nouveau code rowAction

  • Changer rowLink en rowAction [i18n_isAjax]

  • Pas d’étiquette nécessaire sur rowAction dans les tableaux. Voir Nouveau code rowAction

  • Plus besoin d’ajaxBlock pour les tables, les formulaires, les tableFilters

  • formAction n’a plus de paramètre isAjax

  • formAction n’a plus de paramètre i18n obligatoire

  • form n’a plus de paramètre i18n obligatoire, i18n est basé sur le nom de l’action actuelle

  • block action n’a plus de paramètre i18n obligatoire, i18n est basé sur l’action cible

  • block action n’a plus de paramètre isAjax obligatoire

Nouveau : iterate
iterate(taackFilterService.getBuilder(Role)                     (1)
        .setMaxNumberOfLine(20)                                 (2)
        .setSortOrder(TaackFilter.Order.DESC, u.authority_)     (3)
        .build()) { Role r, Long counter ->
            row {
                rowColumn {
                    rowField r.authority
                    if (hasSelect)
                        rowAction
                            ActionIcon.SELECT * IconStyle.SCALE_DOWN,
                            CrewController.&selectRole as MC
                            r.id                                (4)
                }
            }
        }
1 itérer
2 Spécifier max est suffisant pour déclencher la pagination s’il y a plus de lignes
3 Remplacer l’ancien modèle inefficace pour décrire le tri et l’ordre initiaux
4 Plus de paramètres i18n et isAjax
Nouveau code menu
private UiMenuSpecifier buildMenu(String q = null) {
    UiMenuSpecifier m = new UiMenuSpecifier()
    m.ui {
        menu CrewController.&index as MC        (1)
        menu CrewController.&listRoles as MC
        menu CrewController.&hierarchy as MC
        menuSearch this.&search as MethodClosure, q
    }
    m
}
1 Aucun paramètre i18n
Nouveau code rowAction
if (hasActions) {
    rowColumn {
        rowAction ActionIcon.EDIT * IconStyle.SCALE_DOWN, this.&roleForm as MC, r.id (1)
    }
}
1 Pas de paramètre i18n, pas de dernier paramètre isAjax

Version 0.3.9

Aucune mise à jour depuis trop longtemps, l’hibernation touche à sa fin. Cette version offre :

  • Grails 6.2.0

  • Groovy 3.0.21

  • Bumping Various deps …​ (Voir Changelog)