word: order siblings by grade
authorMischa POSLAWSKY <perl@shiar.org>
Sat, 30 May 2020 06:27:30 +0000 (08:27 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Sat, 6 Jun 2020 01:49:20 +0000 (03:49 +0200)
Optional precedence before alphabetical neutral.

tools/word.pg.sql
writer.plp

index 1dc4f5bc68c8b3ed107967e6c69b9eaaa8a9d613..31a117e83001ba926fd8ec06b09a95c1e6b085b1 100644 (file)
@@ -5,6 +5,7 @@ CREATE TABLE word (
        cat        integer              REFERENCES word (id),
        ref        integer              REFERENCES word (id),
        prio       smallint    NOT NULL DEFAULT '1',
        cat        integer              REFERENCES word (id),
        ref        integer              REFERENCES word (id),
        prio       smallint    NOT NULL DEFAULT '1',
+       grade      integer,
        cover      boolean     NOT NULL DEFAULT FALSE,
        source     text,
        thumb      text[],
        cover      boolean     NOT NULL DEFAULT FALSE,
        source     text,
        thumb      text[],
@@ -19,6 +20,7 @@ COMMENT ON COLUMN word.lang       IS 'ISO 639-3 language code';
 COMMENT ON COLUMN word.cat        IS 'hierarchical classification';
 COMMENT ON COLUMN word.ref        IS 'reference to equivalent eng translation';
 COMMENT ON COLUMN word.prio       IS 'difficulty level or importance; lower values have precedence';
 COMMENT ON COLUMN word.cat        IS 'hierarchical classification';
 COMMENT ON COLUMN word.ref        IS 'reference to equivalent eng translation';
 COMMENT ON COLUMN word.prio       IS 'difficulty level or importance; lower values have precedence';
+COMMENT ON COLUMN word.grade      IS 'ascending hierarchical order, preceding default alphabetical';
 COMMENT ON COLUMN word.cover      IS 'highlight if selected';
 COMMENT ON COLUMN word.source     IS 'URI of downloaded image';
 COMMENT ON COLUMN word.thumb      IS 'ImageMagick convert options to create thumbnail from source image';
 COMMENT ON COLUMN word.cover      IS 'highlight if selected';
 COMMENT ON COLUMN word.source     IS 'URI of downloaded image';
 COMMENT ON COLUMN word.thumb      IS 'ImageMagick convert options to create thumbnail from source image';
@@ -34,6 +36,6 @@ $$ LANGUAGE SQL IMMUTABLE;
 CREATE OR REPLACE VIEW _cat_words AS
        SELECT exportform(word.*) form, sub.*, word.lang, word.ref
        FROM word RIGHT JOIN (
 CREATE OR REPLACE VIEW _cat_words AS
        SELECT exportform(word.*) form, sub.*, word.lang, word.ref
        FROM word RIGHT JOIN (
-               SELECT cat id, array_agg(exportform(word.*) ORDER BY form) forms
+               SELECT cat id, array_agg(exportform(word.*) ORDER BY grade, form) forms
                        FROM word WHERE ref IS NULL GROUP BY cat
        ) sub USING (id);
                        FROM word WHERE ref IS NULL GROUP BY cat
        ) sub USING (id);
index bae010cf19aa89e20ec950652848b3293ee987af..f4819b735e7bcf04953f461ea8a82e186376f125 100644 (file)
@@ -37,6 +37,9 @@ input:not([type]) {
        padding: .4rem;
        font-family: monospace;
 }
        padding: .4rem;
        font-family: monospace;
 }
+input[type=number] {
+       max-width: 7em;
+}
 select {
        padding: .3rem .2rem; /* TODO: input */
 }
 select {
        padding: .3rem .2rem; /* TODO: input */
 }
@@ -103,6 +106,7 @@ my @wordcols = (
        lang    => 'Language',
        cat     => 'Category',
        ref     => undef, # included with cat
        lang    => 'Language',
        cat     => 'Category',
        ref     => undef, # included with cat
+       grade   => undef, # "
        prio    => 'Level',
        cover   => undef, # included with prio
        form    => 'Translation',
        prio    => 'Level',
        cover   => undef, # included with prio
        form    => 'Translation',
@@ -225,6 +229,9 @@ for my $colinfo (pairs @wordcols) {
                        ),
                        'cover', !!$row->{cover} && ' checked', 'Highlighted'
                );
                        ),
                        'cover', !!$row->{cover} && ' checked', 'Highlighted'
                );
+               printf('<label for="%s">%s</label><input id="%1$s" name="%1$s" value="%s" type="number" />',
+                       'grade', 'Order', Entity($row->{grade})
+               );
        }
        else {
                printf '<input id="%s" name="%1$s" value="%s" />', $col, Entity($val);
        }
        else {
                printf '<input id="%s" name="%1$s" value="%s" />', $col, Entity($val);
@@ -261,7 +268,7 @@ while (my $ref = $parents->hash) {
        printf '<li><a href="/writer/%d">%s</a></li>', $ref->{id}, Entity($ref->{form});
 }
 say "<li><strong>$row->{form}</strong></li>";
        printf '<li><a href="/writer/%d">%s</a></li>', $ref->{id}, Entity($ref->{form});
 }
 say "<li><strong>$row->{form}</strong></li>";
-my $children = $db->select(word => '*', {cat => $row->{id}});
+my $children = $db->select(word => '*', {cat => $row->{id}}, 'grade, id');
 while (my $ref = $children->hash) {
        printf '<li><a href="/writer/%d">%s</a></li>', $ref->{id}, Entity($ref->{form});
 }
 while (my $ref = $children->hash) {
        printf '<li><a href="/writer/%d">%s</a></li>', $ref->{id}, Entity($ref->{form});
 }