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[],
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';
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);
padding: .4rem;
font-family: monospace;
}
+input[type=number] {
+ max-width: 7em;
+}
select {
padding: .3rem .2rem; /* TODO: input */
}
lang => 'Language',
cat => 'Category',
ref => undef, # included with cat
+ grade => undef, # "
prio => 'Level',
cover => undef, # included with prio
form => 'Translation',
),
'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);
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});
}