diff options
| -rw-r--r-- | ext/mixed/css/display.css | 13 | ||||
| -rw-r--r-- | ext/mixed/display-templates.html | 22 | ||||
| -rw-r--r-- | ext/mixed/js/display-generator.js | 10 | ||||
| -rw-r--r-- | ext/mixed/js/html-template-collection.js | 29 | 
4 files changed, 61 insertions, 13 deletions
| diff --git a/ext/mixed/css/display.css b/ext/mixed/css/display.css index a54ebe4c..cacfe8c9 100644 --- a/ext/mixed/css/display.css +++ b/ext/mixed/css/display.css @@ -58,6 +58,8 @@      --entry-current-indicator: calc(4em / var(--font-size-no-units));      --entry-current-indicator-transition-duration: 0.125s; +    --expression-space-size: 0.5em; +      /* Colors */      --background-color: #ffffff;      --glossary-image-background-color: #eeeeee; @@ -590,8 +592,11 @@ button.action-button {  .term-expression {      display: inline;  } -.term-expression-text { +.term-expression-text-container {      display: inline-block; +} +.term-expression-text { +    display: inline;      font-size: var(--expression-font-size);  }  .term-expression-details { @@ -603,7 +608,7 @@ button.action-button {  .term-expression-details>.frequencies {      display: none;  } -.term-expression-list>.term-expression:not(:last-of-type)>.term-expression-text::after { +.term-expression-list>.term-expression:not(:last-of-type)>.term-expression-text-container>.term-expression-text::after {      content: "\3001";  }  .term-frequency-separator::before { @@ -630,6 +635,10 @@ button.action-button {  /* Merged term styles */ +.entry[data-expression-multi=true] .term-expression-list, +.entry:not([data-expression-multi=true]) .term-expression-text-container { +    margin-right: var(--expression-space-size); +}  .entry[data-expression-multi=true] .term-expression-list .term-expression-details {      display: inline-block;      position: relative; diff --git a/ext/mixed/display-templates.html b/ext/mixed/display-templates.html index 7416b223..3b8d97a2 100644 --- a/ext/mixed/display-templates.html +++ b/ext/mixed/display-templates.html @@ -1,6 +1,7 @@  <!DOCTYPE html><html><head></head><body> -<template id="term-entry-template"><div class="entry" data-type="term"> +<!-- Term entry templates --> +<template id="term-entry-template" data-remove-whitespace-text="true"><div class="entry" data-type="term">      <div class="entry-current-indicator" title="Current entry (Alt + Up/Down/Home/End/PgUp/PgDn)"></div>      <div class="entry-header1">          <div class="entry-header2"> @@ -23,17 +24,23 @@      </div>      <div class="debug-info"><a class="debug-log-link">Log debug info to console</a></div>  </div></template> -<template id="term-expression-template"><div class="term-expression"><span class="term-expression-text source-text"></span><div class="term-expression-details"> -    <button class="action-button action-play-audio" data-icon="play-audio" title="Play audio"></button> -    <div class="tags tag-list"></div> -    <div class="frequencies tag-list"></div> -</div></div></template> +<template id="term-expression-template" data-remove-whitespace-text="true"><div class="term-expression"> +    <div class="term-expression-text-container"> +        <span class="term-expression-text source-text"></span> +    </div> +    <div class="term-expression-details"> +        <button class="action-button action-play-audio" data-icon="play-audio" title="Play audio"></button> +        <div class="tags tag-list"></div> +        <div class="frequencies tag-list"></div> +    </div> +</div></template>  <template id="term-definition-item-template"><li class="term-definition-item"><div class="term-definition-tag-list tag-list"></div><div class="term-definition-disambiguation-list"></div><ul class="term-glossary-list"></ul></li></template>  <template id="term-definition-disambiguation-template"><span class="term-definition-disambiguation"></span></template>  <template id="term-glossary-item-template"><li class="term-glossary-item"><span class="term-glossary-separator"> </span><span class="term-glossary"></span></li></template>  <template id="term-glossary-item-image-template"><li class="term-glossary-item" data-has-image="true"><span class="term-glossary-separator"> </span><span class="term-glossary"><a class="term-glossary-image-link" target="_blank" rel="noreferrer noopener"><span class="term-glossary-image-container"><span class="term-glossary-image-aspect-ratio-sizer"></span><img class="term-glossary-image" alt="" /><span class="term-glossary-image-container-overlay"></span></span><span class="term-glossary-image-link-text">Image</span></a> <span class="term-glossary-image-description"></span></span></li></template>  <template id="term-reason-template"><span class="term-reason"></span><span class="term-reason-separator"> </span></template> +<!-- Pitch accent templates -->  <template id="term-pitch-accent-static-template"><svg xmlns="http://www.w3.org/2000/svg" style="display: none;">      <defs>          <g id="term-pitch-accent-graph-dot"><circle cx="0" cy="0" r="15" /></g> @@ -46,6 +53,7 @@  <template id="term-pitch-accent-template"><li class="term-pitch-accent"><span class="term-pitch-accent-tag-list tag-list"></span><span class="term-pitch-accent-disambiguation-list"></span><span class="term-pitch-accent-characters"></span><span class="term-pitch-accent-position"></span><span class="term-pitch-accent-details"><svg class="term-pitch-accent-graph" xmlns="http://www.w3.org/2000/svg"><path class="term-pitch-accent-graph-line" /><path class="term-pitch-accent-graph-line-tail" /></svg></span></li></template>  <template id="term-pitch-accent-character-template"><span class="term-pitch-accent-character"><span class="term-pitch-accent-character-inner"></span></span></template> +<!-- Kanji entry templates -->  <template id="kanji-entry-template"><div class="entry" data-type="kanji">      <div class="entry-current-indicator" title="Current entry (Alt + Up/Down/Home/End/PgUp/PgDn)"></div>      <div class="entry-header1"> @@ -87,8 +95,8 @@  <template id="kanji-glossary-item-template"><li class="kanji-glossary-item"><span class="kanji-glossary"></span></li></template>  <template id="kanji-reading-template"><dd class="kanji-reading"></dd></template> +<!-- Tag templates -->  <template id="tag-template"><span class="tag"><span class="tag-inner"></span></span></template>  <template id="tag-frequency-template"><span class="tag" data-category="frequency"><span class="tag-inner"><span class="term-frequency-disambiguation"><span class="term-frequency-disambiguation-expression"></span><span class="term-frequency-disambiguation-separator"></span><span class="term-frequency-disambiguation-reading"></span></span><span class="term-frequency-dictionary-name"></span><span class="term-frequency-separator"></span><span class="term-frequency-value"></span></span></span></template> -<template id="tag-search-template"><span class="tag" data-category="search"></span></template>  </body></html> diff --git a/ext/mixed/js/display-generator.js b/ext/mixed/js/display-generator.js index 09bfe411..0cf1e8c6 100644 --- a/ext/mixed/js/display-generator.js +++ b/ext/mixed/js/display-generator.js @@ -317,10 +317,12 @@ class DisplayGenerator {      }      _createSearchTag(text) { -        const node = this._templates.instantiate('tag-search'); -        node.textContent = text; -        node.dataset.query = text; -        return node; +        return this._createTag({ +            notes: '', +            name: text, +            category: 'search', +            redundant: false +        });      }      _createPitches(details) { diff --git a/ext/mixed/js/html-template-collection.js b/ext/mixed/js/html-template-collection.js index 56da68b8..d3e2e6fd 100644 --- a/ext/mixed/js/html-template-collection.js +++ b/ext/mixed/js/html-template-collection.js @@ -29,6 +29,7 @@ class HtmlTemplateCollection {          for (const template of sourceNode.querySelectorAll('template')) {              const match = pattern.exec(template.id);              if (match === null) { continue; } +            this._prepareTemplate(template);              this._templates.set(match[1], template);          }      } @@ -42,4 +43,32 @@ class HtmlTemplateCollection {          const template = this._templates.get(name);          return document.importNode(template.content, true);      } + +    // Private + +    _prepareTemplate(template) { +        if (template.dataset.removeWhitespaceText === 'true') { +            this._removeWhitespaceText(template); +        } +    } + +    _removeWhitespaceText(template) { +        const {content} = template; +        const {TEXT_NODE} = Node; +        const iterator = document.createNodeIterator(content, NodeFilter.SHOW_TEXT); +        const removeNodes = []; +        while (true) { +            const node = iterator.nextNode(); +            if (node === null) { break; } +            if (node.nodeType === TEXT_NODE && node.nodeValue.trim().length === 0) { +                removeNodes.push(node); +            } +        } +        for (const node of removeNodes) { +            const {parentNode} = node; +            if (parentNode !== null) { +                parentNode.removeChild(node); +            } +        } +    }  } |