diff --git a/public/language/en-GB/admin/menu.json b/public/language/en-GB/admin/menu.json index 1db5c15abf..7a5327f643 100644 --- a/public/language/en-GB/admin/menu.json +++ b/public/language/en-GB/admin/menu.json @@ -58,6 +58,7 @@ "advanced/errors": "Errors", "advanced/cache": "Cache", "development/logger": "Logger", + "development/info": "Info", "reload-forum": "Reload Forum", "restart-forum": "Restart Forum", diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index 6dabcb9f38..217438e146 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -116,13 +116,14 @@ }); }); - var title; - if (/admin\/general\/dashboard$/.test(url)) { + var title = url; + if (/admin\/general\/dashboard$/.test(title)) { title = '[[admin/menu:general/dashboard]]'; } else { - title = url.match(/admin\/(.+?)\/(.+?)$/); - title = '[[admin/menu:section-' + title[1] + ']]' + - (title[2] ? (' > [[admin/menu:' + + title = title.match(/admin\/(.+?)\/(.+?)$/); + title = '[[admin/menu:section-' + + (title[1] === 'development' ? 'advanced' : title[1]) + + ']]' + (title[2] ? (' > [[admin/menu:' + title[1] + '/' + title[2] + ']]') : ''); } diff --git a/public/src/admin/modules/search.js b/public/src/admin/modules/search.js index 4f46898b8e..29379f0dac 100644 --- a/public/src/admin/modules/search.js +++ b/public/src/admin/modules/search.js @@ -4,39 +4,41 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) { var search = {}; - function nsToTitle(namespace) { - return namespace.replace('admin/', '').split('/').map(function (str) { - return str[0].toUpperCase() + str.slice(1); - }).join(' > '); - } - function find(dict, term) { var html = dict.filter(function (elem) { return elem.translations.toLowerCase().includes(term); }).map(function (params) { var namespace = params.namespace; var translations = params.translations; - var title = params.title == null ? nsToTitle(namespace) : params.title; + var title = params.title; var results = translations // remove all lines without a match .replace(new RegExp('^(?:(?!' + term + ').)*$', 'gmi'), '') - // get up to 25 characaters of context on both sides of the match + // remove lines that only match the title + .replace(new RegExp('(^|\\n).*?' + title + '.*?(\\n|$)', 'g'), '') + // get up to 25 characters of context on both sides of the match // and wrap the match in a `.search-match` element .replace( new RegExp('^[\\s\\S]*?(.{0,25})(' + term + ')(.{0,25})[\\s\\S]*?$', 'gmi'), '...$1$2$3...
' ) // collapse whitespace - .replace(/(?:\n ?)+/g, '\n'); + .replace(/(?:\n ?)+/g, '\n') + .trim(); + + title = title.replace( + new RegExp('(^.*?)(' + term + ')(.*?$)', 'gi'), + '$1$2$3' + ); return ''; }).join(''); diff --git a/src/admin/search.js b/src/admin/search.js index 8f567071bf..0bd140e3ba 100644 --- a/src/admin/search.js +++ b/src/admin/search.js @@ -54,7 +54,7 @@ function simplify(translations) { function nsToTitle(namespace) { return namespace.replace('admin/', '').split('/').map(function (str) { return str[0].toUpperCase() + str.slice(1); - }).join(' > '); + }).join(' > ').replace(/[^a-zA-Z> ]/g, ' '); } var fallbackCacheInProgress = {}; @@ -67,15 +67,17 @@ function initFallback(namespace, callback) { } var template = file.toString(); + var title = nsToTitle(namespace); var translations = sanitize(template); translations = Translator.removePatterns(translations); translations = simplify(translations); - translations += '\n' + nsToTitle(namespace); + translations += '\n' + title; callback(null, { namespace: namespace, translations: translations, + title: title, }); }); } @@ -124,17 +126,32 @@ function initDict(language, callback) { var str = Object.keys(translations).map(function (key) { return translations[key]; }).join('\n'); + str = sanitize(str); - next(null, { - namespace: namespace, - translations: str, - }); - } + var title = namespace; + if (/admin\/general\/dashboard$/.test(title)) { + title = '[[admin/menu:general/dashboard]]'; + } else { + title = title.match(/admin\/(.+?)\/(.+?)$/); + title = '[[admin/menu:section-' + + (title[1] === 'development' ? 'advanced' : title[1]) + + ']]' + (title[2] ? (' > [[admin/menu:' + + title[1] + '/' + title[2] + ']]') : ''); + } + + Translator.create(language).translate(title).then(function (title) { + next(null, { + namespace: namespace, + translations: str + '\n' + title, + title: title, + }); + }).catch(err); + }, ], function (err, params) { if (err) { return fallback(namespace, function (err, params) { if (err) { - return cb({ + return cb(null, { namespace: namespace, translations: '', });