diff --git a/src/controllers/index.js b/src/controllers/index.js index 49c1c4c2c2..a02e3c9fbd 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -32,6 +32,7 @@ Controllers.mods = require('./mods'); Controllers.sitemap = require('./sitemap'); Controllers['404'] = require('./404'); Controllers.errors = require('./errors'); +Controllers.handleOSDRequest = require('./osd'); Controllers.home = function (req, res, next) { var route = meta.config.homePageRoute || (meta.config.homePageCustom || '').replace(/^\/+/, '') || 'categories'; diff --git a/src/controllers/osd.js b/src/controllers/osd.js new file mode 100644 index 0000000000..b05fac72c9 --- /dev/null +++ b/src/controllers/osd.js @@ -0,0 +1,44 @@ +'use strict'; + +var xml = require('xml'); +var nconf = require('nconf'); + +var plugins = require('../plugins'); +var meta = require('../meta'); + +module.exports = function (req, res, next) { + if (plugins.hasListeners('filter:search.query')) { + res.type('application/xml').send(generateXML()); + } else { + next(); + } +}; + +function generateXML() { + return xml([{ + OpenSearchDescription: [ + { + _attr: { + xmlns: 'http://a9.com/-/spec/opensearch/1.1/', + }, + }, + { + ShortName: String(meta.config.title || meta.config.browserTitle || 'NodeBB'), + }, + { + Description: String(meta.config.description || ''), + }, + { + Url: [ + { + _attr: { + type: 'text/html', + method: 'get', + template: nconf.get('url') + '/search?term={searchTerms}&in=titlesposts', + }, + }, + ], + }, + ], + }], { declaration: true, indent: '\t' }); +} diff --git a/src/meta.js b/src/meta.js index f0c1756053..6cbccd70a1 100644 --- a/src/meta.js +++ b/src/meta.js @@ -21,7 +21,6 @@ var utils = require('../public/src/utils'); require('./meta/errors')(Meta); require('./meta/tags')(Meta); require('./meta/dependencies')(Meta); - require('./meta/osd')(Meta); Meta.templates = require('./meta/templates'); Meta.blacklist = require('./meta/blacklist'); Meta.languages = require('./meta/languages'); diff --git a/src/meta/osd.js b/src/meta/osd.js deleted file mode 100644 index 5db9578047..0000000000 --- a/src/meta/osd.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var xml = require('xml'); -var nconf = require('nconf'); - -var plugins = require('../plugins'); - -module.exports = function (Meta) { - Meta.osd = {}; - function generateXML() { - var osdObject = { - OpenSearchDescription: [ - { - _attr: { - xmlns: 'http://a9.com/-/spec/opensearch/1.1/', - }, - }, - { - ShortName: String(Meta.config.title || Meta.config.browserTitle || 'NodeBB'), - }, - { - Description: String(Meta.config.description || ''), - }, - { - Url: [ - { - _attr: { - type: 'text/html', - method: 'get', - template: nconf.get('url') + '/search?term={searchTerms}&in=titlesposts', - }, - }, - ], - }, - ], - }; - return xml([osdObject], { declaration: true, indent: '\t' }); - } - Meta.osd.handleOSDRequest = function (req, res, next) { - if (plugins.hasListeners('filter:search.query')) { - res.type('application/xml').send(generateXML()); - } - next(); - }; -}; diff --git a/src/routes/meta.js b/src/routes/meta.js index 0d97468c84..e17533af05 100644 --- a/src/routes/meta.js +++ b/src/routes/meta.js @@ -8,5 +8,5 @@ module.exports = function (app, middleware, controllers) { app.get('/robots.txt', controllers.robots); app.get('/manifest.json', controllers.manifest); app.get('/css/previews/:theme', controllers.admin.themes.get); - app.get('/osd.xml', require('../meta').osd.handleOSDRequest); + app.get('/osd.xml', controllers.handleOSDRequest); };