Merge pull request #433 from toasted-nutbread/extra-dictionary-information
Extra dictionary information
This commit is contained in:
commit
ac1ecb35ee
@ -235,6 +235,43 @@ html:root[data-operating-system=openbsd] [data-hide-for-operating-system~=openbs
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dict-details-container {
|
||||||
|
margin: 0.5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dict-details-toggle-link {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dict-details {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dict-details-table {
|
||||||
|
display: table;
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.dict-details-entry {
|
||||||
|
display: table-row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dict-details-entry+.dict-details-entry>* {
|
||||||
|
padding-top: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dict-details-entry-label {
|
||||||
|
display: table-cell;
|
||||||
|
font-weight: bold;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding-right: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dict-details-entry-info {
|
||||||
|
display: table-cell;
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@media screen and (max-width: 740px) {
|
@media screen and (max-width: 740px) {
|
||||||
.col-xs-6 {
|
.col-xs-6 {
|
||||||
|
@ -30,6 +30,22 @@
|
|||||||
"description": "Alias for format.",
|
"description": "Alias for format.",
|
||||||
"enum": [1, 2, 3]
|
"enum": [1, 2, 3]
|
||||||
},
|
},
|
||||||
|
"author": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Creator of the dictionary."
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "URL for the source of the dictionary."
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Description of the dictionary data."
|
||||||
|
},
|
||||||
|
"attribution": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Attribution information for the dictionary data."
|
||||||
|
},
|
||||||
"tagMeta": {
|
"tagMeta": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"description": "Tag information for terms and kanji. This object is obsolete and individual tag files should be used instead.",
|
"description": "Tag information for terms and kanji. This object is obsolete and individual tag files should be used instead.",
|
||||||
|
@ -150,13 +150,7 @@ class DictionaryImporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add dictionary
|
// Add dictionary
|
||||||
const summary = {
|
const summary = this._createSummary(dictionaryTitle, version, index, {prefixWildcardsSupported});
|
||||||
title: dictionaryTitle,
|
|
||||||
revision: index.revision,
|
|
||||||
sequenced: index.sequenced,
|
|
||||||
version,
|
|
||||||
prefixWildcardsSupported
|
|
||||||
};
|
|
||||||
|
|
||||||
database.bulkAdd('dictionaries', [summary], 0, 1);
|
database.bulkAdd('dictionaries', [summary], 0, 1);
|
||||||
|
|
||||||
@ -199,6 +193,25 @@ class DictionaryImporter {
|
|||||||
return {result: summary, errors};
|
return {result: summary, errors};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_createSummary(dictionaryTitle, version, index, details) {
|
||||||
|
const summary = {
|
||||||
|
title: dictionaryTitle,
|
||||||
|
revision: index.revision,
|
||||||
|
sequenced: index.sequenced,
|
||||||
|
version
|
||||||
|
};
|
||||||
|
|
||||||
|
const {author, url, description, attribution} = index;
|
||||||
|
if (typeof author === 'string') { summary.author = author; }
|
||||||
|
if (typeof url === 'string') { summary.url = url; }
|
||||||
|
if (typeof description === 'string') { summary.description = description; }
|
||||||
|
if (typeof attribution === 'string') { summary.attribution = attribution; }
|
||||||
|
|
||||||
|
Object.assign(summary, details);
|
||||||
|
|
||||||
|
return summary;
|
||||||
|
}
|
||||||
|
|
||||||
async _getSchema(fileName) {
|
async _getSchema(fileName) {
|
||||||
let schemaPromise = this._schemas.get(fileName);
|
let schemaPromise = this._schemas.get(fileName);
|
||||||
if (typeof schemaPromise !== 'undefined') {
|
if (typeof schemaPromise !== 'undefined') {
|
||||||
|
@ -199,11 +199,16 @@ class SettingsDictionaryEntryUI {
|
|||||||
this.allowSecondarySearchesCheckbox = this.content.querySelector('.dict-allow-secondary-searches');
|
this.allowSecondarySearchesCheckbox = this.content.querySelector('.dict-allow-secondary-searches');
|
||||||
this.priorityInput = this.content.querySelector('.dict-priority');
|
this.priorityInput = this.content.querySelector('.dict-priority');
|
||||||
this.deleteButton = this.content.querySelector('.dict-delete-button');
|
this.deleteButton = this.content.querySelector('.dict-delete-button');
|
||||||
|
this.detailsToggleLink = this.content.querySelector('.dict-details-toggle-link');
|
||||||
|
this.detailsContainer = this.content.querySelector('.dict-details');
|
||||||
|
this.detailsTable = this.content.querySelector('.dict-details-table');
|
||||||
|
|
||||||
if (this.dictionaryInfo.version < 3) {
|
if (this.dictionaryInfo.version < 3) {
|
||||||
this.content.querySelector('.dict-outdated').hidden = false;
|
this.content.querySelector('.dict-outdated').hidden = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.setupDetails(dictionaryInfo);
|
||||||
|
|
||||||
this.content.querySelector('.dict-title').textContent = this.dictionaryInfo.title;
|
this.content.querySelector('.dict-title').textContent = this.dictionaryInfo.title;
|
||||||
this.content.querySelector('.dict-revision').textContent = `rev.${this.dictionaryInfo.revision}`;
|
this.content.querySelector('.dict-revision').textContent = `rev.${this.dictionaryInfo.revision}`;
|
||||||
this.content.querySelector('.dict-prefix-wildcard-searches-supported').checked = !!this.dictionaryInfo.prefixWildcardsSupported;
|
this.content.querySelector('.dict-prefix-wildcard-searches-supported').checked = !!this.dictionaryInfo.prefixWildcardsSupported;
|
||||||
@ -214,6 +219,45 @@ class SettingsDictionaryEntryUI {
|
|||||||
this.eventListeners.addEventListener(this.allowSecondarySearchesCheckbox, 'change', this.onAllowSecondarySearchesChanged.bind(this), false);
|
this.eventListeners.addEventListener(this.allowSecondarySearchesCheckbox, 'change', this.onAllowSecondarySearchesChanged.bind(this), false);
|
||||||
this.eventListeners.addEventListener(this.priorityInput, 'change', this.onPriorityChanged.bind(this), false);
|
this.eventListeners.addEventListener(this.priorityInput, 'change', this.onPriorityChanged.bind(this), false);
|
||||||
this.eventListeners.addEventListener(this.deleteButton, 'click', this.onDeleteButtonClicked.bind(this), false);
|
this.eventListeners.addEventListener(this.deleteButton, 'click', this.onDeleteButtonClicked.bind(this), false);
|
||||||
|
this.eventListeners.addEventListener(this.detailsToggleLink, 'click', this.onDetailsToggleLinkClicked.bind(this), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
setupDetails(dictionaryInfo) {
|
||||||
|
const targets = [
|
||||||
|
['Author', 'author'],
|
||||||
|
['URL', 'url'],
|
||||||
|
['Description', 'description'],
|
||||||
|
['Attribution', 'attribution']
|
||||||
|
];
|
||||||
|
|
||||||
|
let count = 0;
|
||||||
|
for (const [label, key] of targets) {
|
||||||
|
const info = dictionaryInfo[key];
|
||||||
|
if (typeof info !== 'string') { continue; }
|
||||||
|
|
||||||
|
const n1 = document.createElement('div');
|
||||||
|
n1.className = 'dict-details-entry';
|
||||||
|
n1.dataset.type = key;
|
||||||
|
|
||||||
|
const n2 = document.createElement('span');
|
||||||
|
n2.className = 'dict-details-entry-label';
|
||||||
|
n2.textContent = `${label}:`;
|
||||||
|
n1.appendChild(n2);
|
||||||
|
|
||||||
|
const n3 = document.createElement('span');
|
||||||
|
n3.className = 'dict-details-entry-info';
|
||||||
|
n3.textContent = info;
|
||||||
|
n1.appendChild(n3);
|
||||||
|
|
||||||
|
this.detailsTable.appendChild(n1);
|
||||||
|
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count === 0) {
|
||||||
|
this.detailsContainer.hidden = true;
|
||||||
|
this.detailsToggleLink.hidden = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
@ -318,6 +362,12 @@ class SettingsDictionaryEntryUI {
|
|||||||
document.querySelector('#dict-remove-modal-dict-name').textContent = title;
|
document.querySelector('#dict-remove-modal-dict-name').textContent = title;
|
||||||
$(n).modal('show');
|
$(n).modal('show');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onDetailsToggleLinkClicked(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
this.detailsContainer.hidden = !this.detailsContainer.hidden;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SettingsDictionaryExtraUI {
|
class SettingsDictionaryExtraUI {
|
||||||
|
@ -674,6 +674,10 @@
|
|||||||
<label class="dict-result-priority-label">Result priority</label>
|
<label class="dict-result-priority-label">Result priority</label>
|
||||||
<input type="number" class="form-control dict-priority">
|
<input type="number" class="form-control dict-priority">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="dict-details-container">
|
||||||
|
<a class="dict-details-toggle-link">Details...</a>
|
||||||
|
<div class="dict-details" hidden><div class="dict-details-table"></div></div>
|
||||||
|
</div>
|
||||||
<div class="dict-delete-table">
|
<div class="dict-delete-table">
|
||||||
<div>
|
<div>
|
||||||
<button class="btn btn-default dict-delete-button">Delete Dictionary</button>
|
<button class="btn btn-default dict-delete-button">Delete Dictionary</button>
|
||||||
|
Loading…
Reference in New Issue
Block a user