index: link rss feed of git repository
[sheet.git] / latinsample.js
index f4a6a6de0af8bb11182c1d62383b6db62d449d32..406cac12cdb355f3dd38070c9ccf7172ead633ec 100644 (file)
@@ -1,15 +1,12 @@
 function appendsample() {
        var rows = document.getElementsByClassName('glyphs')[0].rows;
        for (var row of rows) {
-               cols = [ row.cells[0] ];
-               for (var col = 1; col <= 26; col++) {
-                       cols[col] = cols[ col - 1 ].nextSibling;
-                       for (var span = 1; span < cols[col].colSpan; span++) {
-                               var same = cols[col];
-                               cols[++col] = same;
-                       }
-               }
+               // append sample column
                var samplecol = row.getElementsByClassName('sample');
+               if (!this.value.length) {
+                       row.removeChild(samplecol[0]);
+                       continue;
+               }
                if (samplecol.length) {
                        samplecol = samplecol[0];
                }
@@ -18,31 +15,73 @@ function appendsample() {
                        samplecol.className = 'sample';
                }
 
+               // prepare alphabet lookup table
+               cols = [ row.cells[0] ];
+               for (var col = 1; col <= samplecol.cellIndex; col++) {
+                       var next = cols[col - 1].nextSibling;
+                       if (next == samplecol) break;
+                       cols[col] = next;
+                       for (var span = 1; span < cols[col].colSpan; span++) {
+                               var same = cols[col];
+                               cols[++col] = same;
+                       }
+               }
+               for (var col = 0; col < cols.length; col++) {
+                       cols[col] = cols[col].innerHTML.trimRight();
+               }
+
+               // copy letters into sample
                var output = '';
                var input = this.value.toUpperCase();
                for (var i = 0; i < input.length; i++) {
                        var col = input.charCodeAt(i) - 64;
-                       if (col < 1 || col > 26) {
-                               output += ' &nbsp; ';
+                       if (col < 1) col = 27; // space
+                       else if (cols[28] && i && col == input.charCodeAt(i - 1) - 64) {
+                               col = 28; // repetition char
+                       }
+                       if (row.id == 'suetterlin' && col == 19) {
+                               var final = input.length == i + 1 || input[i + 1] == ' ';
+                               output += cols[col].split('&nbsp;')[final ? 1 : 0];
+                       }
+                       else if (col < cols.length) {
+                               output += '<span>' + (cols[col] || ' ') + '</span>';
                        }
                        else {
-                               output += '<span>' + cols[col].innerHTML.trimRight() + '</span>';
+                               output += '<b> </b>';
                        }
+                       if (row.parentNode.tagName == 'THEAD') {
+                               output += col < 26 ? ' ' : 'ยท '; // number separator
+                       }
+               }
+               if (cols[29] && !cols[28]) {
+                       // circumfix sign if no repetition
+                       output = cols[29] + output + (cols[30] || cols[29]);
                }
                samplecol.innerHTML = output;
        }
 };
 
+function getrequest(name) {
+       // find GET variable in page request
+       var match = new RegExp('[?&]'+name+'=([^&]*)');
+       var param = match.exec(window.location.search);
+       return param ? decodeURIComponent(param[1]) : '';
+}
+
 function prependinput(target) {
        var form = document.createElement('FORM');
        form.id = 'search';
        form.className = 'aside';
+       form.onsubmit = function () { return false };
 
        var input = document.createElement('INPUT');
        input.oninput = appendsample;
        input.placeholder = 'Sample';
        input.type = 'search';
        input.name = 'q';
+       if (input.value = getrequest('q')) {
+               input.oninput();
+       }
 
        form.appendChild(input);
        target.parentNode.insertBefore(form, target);