diff options
-rw-r--r-- | ext/css/display.css | 102 | ||||
-rw-r--r-- | ext/display-templates.html | 3 | ||||
-rw-r--r-- | ext/js/display/display-generator.js | 13 | ||||
-rw-r--r-- | ext/js/display/display.js | 5 |
4 files changed, 71 insertions, 52 deletions
diff --git a/ext/css/display.css b/ext/css/display.css index e9339ccc..ec117a1c 100644 --- a/ext/css/display.css +++ b/ext/css/display.css @@ -674,73 +674,87 @@ button.action-button[data-icon=source-term]::before { /* Tags */ .tag { - display: inline-block; - padding: 0.2em 0.6em 0.3em; - font-size: var(--tag-font-size); - font-weight: var(--tag-font-weight); - line-height: 1.25; - text-align: center; - white-space: nowrap; - vertical-align: baseline; + --tag-color: var(--tag-default-background-color); + + display: inline-flex; + flex-flow: row nowrap; + align-items: stretch; + border: none; + border-right: none; + font-size: 1em; + margin: calc(1em / var(--font-size-no-units)) 0.375em calc(1em / var(--font-size-no-units)) 0; +} +.tag-label { + display: flex; + flex-flow: row nowrap; + align-items: center; + background-color: var(--tag-color); border-radius: 0.25em; + padding: calc(2.5em / var(--font-size-no-units)) 0.375em calc(2.5em / var(--font-size-no-units)) 0.375em; color: var(--tag-text-color); - background-color: var(--tag-default-background-color); - border: var(--tag-border-size) var(--tag-border-style) var(--tag-border-color); - margin-right: 0.375em; cursor: pointer; } +.tag-label-content { + font-size: var(--tag-font-size); + font-weight: var(--tag-font-weight); +} +.tag-body { + position: relative; + padding: 0 0.375em 0 0.375em; +} +.tag-body::before { + content: ''; + display: block; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + border-radius: 0.25em; + border: var(--tag-border-size) var(--tag-border-style) var(--tag-color); + border-left: none; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.tag-body-content { + position: relative; +} +.tag:not(.tag-has-body)>.tag-body { + display: none; +} +.tag.tag-has-body>.tag-label { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} .tag[data-category=name] { - background-color: var(--tag-name-background-color); + --tag-color: var(--tag-name-background-color); } .tag[data-category=expression] { - background-color: var(--tag-expression-background-color); + --tag-color: var(--tag-expression-background-color); } .tag[data-category=popular] { - background-color: var(--tag-popular-background-color); + --tag-color: var(--tag-popular-background-color); } .tag[data-category=frequent] { - background-color: var(--tag-frequent-background-color); + --tag-color: var(--tag-frequent-background-color); } .tag[data-category=archaism] { - background-color: var(--tag-archaism-background-color); + --tag-color: var(--tag-archaism-background-color); } .tag[data-category=dictionary] { - background-color: var(--tag-dictionary-background-color); + --tag-color: var(--tag-dictionary-background-color); } .tag[data-category=frequency] { - background-color: var(--tag-frequency-background-color); + --tag-color: var(--tag-frequency-background-color); } .tag[data-category=partOfSpeech] { - background-color: var(--tag-part-of-speech-background-color); + --tag-color: var(--tag-part-of-speech-background-color); } .tag[data-category=search] { - background-color: var(--tag-search-background-color); + --tag-color: var(--tag-search-background-color); } .tag[data-category=pitch-accent-dictionary] { - background-color: var(--tag-pitch-accent-dictionary-background-color); -} -.tag-inner { - display: block; -} -.tag-details-disambiguation-list::before { - content: 'Only: '; -} -.tag-details-disambiguation-list ruby>rt { - display: inline; - font-size: 1em; -} -.tag-details-disambiguation-list ruby>rt::before { - content: '('; -} -.tag-details-disambiguation-list ruby>rt::after { - content: ')'; -} -.tag-details-disambiguation-list[data-unmatched-expression-count='0'], -.tag-details-disambiguation-list:not([data-unmatched-expression-count]) { - display: none; -} -.tag-details-disambiguation:not(:last-child)::after { - content: ', '; + --tag-color: var(--tag-pitch-accent-dictionary-background-color); } diff --git a/ext/display-templates.html b/ext/display-templates.html index e506159e..bb89ceaa 100644 --- a/ext/display-templates.html +++ b/ext/display-templates.html @@ -130,7 +130,8 @@ <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-template"><span class="tag"><span class="tag-label"><span class="tag-label-content"></span></span></span></template> +<template id="tag-with-body-template"><span class="tag tag-has-body"><span class="tag-label"><span class="tag-label-content"></span></span><span class="tag-body"><span class="tag-body-content"></span></span></span></template> <!-- Extra --> <template id="footer-notification-template"><div class="footer-notification scrollbar-inverse"> diff --git a/ext/js/display/display-generator.js b/ext/js/display/display-generator.js index d02e2d9c..9b451995 100644 --- a/ext/js/display/display-generator.js +++ b/ext/js/display/display-generator.js @@ -413,15 +413,16 @@ class DisplayGenerator { } _createTag(details) { + const {notes, name, category, redundant} = details; const node = this._templates.instantiate('tag'); - const inner = node.querySelector('.tag-inner'); + const inner = node.querySelector('.tag-label-content'); - node.title = details.notes; - this._setTextContent(inner, details.name); - node.dataset.details = details.notes || details.name; - node.dataset.category = details.category; - if (details.redundant) { node.dataset.redundant = 'true'; } + node.title = notes; + this._setTextContent(inner, name); + node.dataset.details = notes || name; + node.dataset.category = category; + if (redundant) { node.dataset.redundant = 'true'; } return node; } diff --git a/ext/js/display/display.js b/ext/js/display/display.js index 35f22718..517b391d 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -787,6 +787,9 @@ class Display extends EventDispatcher { } _showTagNotification(tagNode) { + tagNode = tagNode.parentNode; + if (tagNode === null) { return; } + if (this._tagNotification === null) { const node = this._displayGenerator.createEmptyFooterNotification(); node.classList.add('click-scannable'); @@ -1677,7 +1680,7 @@ class Display extends EventDispatcher { this._addMultipleEventListeners(entry, '.action-view-note', 'click', this._onNoteView.bind(this)); this._addMultipleEventListeners(entry, '.kanji-link', 'click', this._onKanjiLookup.bind(this)); this._addMultipleEventListeners(entry, '.debug-log-link', 'click', this._onDebugLogClick.bind(this)); - this._addMultipleEventListeners(entry, '.tag', 'click', this._onTagClick.bind(this)); + this._addMultipleEventListeners(entry, '.tag-label', 'click', this._onTagClick.bind(this)); } _updateDefinitionTextScanner(options) { |