331 lines
9.2 KiB
JavaScript
331 lines
9.2 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Configuration dependencies.
|
|
*/
|
|
|
|
var config = require('../config/production/config');
|
|
Object.keys(config).length === 0 &&
|
|
(config = require('../config/production/config.backup'));
|
|
var config_md5 = require('md5')(JSON.stringify(config));
|
|
|
|
setInterval(function() {
|
|
if (
|
|
config_md5 &&
|
|
process.env['CP_CONFIG_MD5'] &&
|
|
config_md5 !== process.env['CP_CONFIG_MD5']
|
|
) {
|
|
config = require('../config/production/config');
|
|
Object.keys(config).length === 0 &&
|
|
(config = require('../config/production/config.backup'));
|
|
config_md5 = process.env['CP_CONFIG_MD5'];
|
|
}
|
|
}, 3333);
|
|
|
|
/**
|
|
* Formatting text to create synonyms, categories and keys.
|
|
*
|
|
* @param {String} text
|
|
* @param {Object} [keywords]
|
|
* @return {String}
|
|
*/
|
|
|
|
var types = {
|
|
mult: config.default.types.mult
|
|
.replace(/![^\s]+/g, '')
|
|
.split('|')
|
|
.map(function(genre) {
|
|
return genre.trim();
|
|
})
|
|
.filter(Boolean),
|
|
anime: config.default.types.anime
|
|
? config.default.types.anime
|
|
.replace(/![^\s]+/g, '')
|
|
.split('|')
|
|
.map(function(genre) {
|
|
return genre.trim();
|
|
})
|
|
.filter(Boolean)
|
|
: [],
|
|
anime_country: config.default.types.anime_country
|
|
? config.default.types.anime_country
|
|
.replace(/![^\s]+/g, '')
|
|
.split('|')
|
|
.map(function(country) {
|
|
return country.trim();
|
|
})
|
|
.filter(Boolean)
|
|
: [],
|
|
tv: config.default.types.tv
|
|
? config.default.types.tv
|
|
.replace(/![^\s]+/g, '')
|
|
.split('|')
|
|
.map(function(genre) {
|
|
return genre.trim();
|
|
})
|
|
.filter(Boolean)
|
|
: []
|
|
};
|
|
|
|
function textFormatting(text, keys) {
|
|
if (typeof text === 'undefined') {
|
|
text = '';
|
|
} else {
|
|
text = '' + text;
|
|
}
|
|
|
|
var keywords = {};
|
|
|
|
if (typeof keys !== 'undefined' && typeof keys === 'object') {
|
|
keywords = Object.assign({}, keys, {
|
|
types: '',
|
|
category:
|
|
keys['year'] ||
|
|
keys['genre'] ||
|
|
keys['country'] ||
|
|
keys['actor'] ||
|
|
keys['director'] ||
|
|
keys['search'] ||
|
|
keys['type'] ||
|
|
''
|
|
});
|
|
}
|
|
|
|
var dflt = true;
|
|
|
|
if (
|
|
text.indexOf('}') === -1 &&
|
|
text.indexOf(']') === -1 &&
|
|
text.indexOf('|') === -1
|
|
) {
|
|
return text.replace(/\s+/g, ' ').replace(/(^\s*)|(\s*)$/g, '');
|
|
}
|
|
|
|
for (var key in keywords) {
|
|
if (
|
|
keywords.hasOwnProperty(key) &&
|
|
(typeof keywords[key] === 'string' ||
|
|
typeof keywords[key] === 'number') &&
|
|
!/_full|_page|_url|_arr|poster|picture|description|year2|year3/i.test(key)
|
|
) {
|
|
var keyRegExp = ('' + key).replace(/[-\/\\^$*+?.()|\[\]{}]/g, '\\$&');
|
|
var keyRegExp2 = keyRegExp.charAt(0).toUpperCase() + keyRegExp.slice(1);
|
|
var keyword = '' + keywords[key];
|
|
var keywordRegExp = keyword.replace(/[-\/\\^$*+?.()|\[\]{}]/g, '\\$&');
|
|
|
|
if (keyRegExp === 'types') {
|
|
if (typeof keywords['type'] !== 'undefined' && keywords['type'] + '') {
|
|
var i = 0,
|
|
l = 0;
|
|
var stop = true;
|
|
var types_set = [
|
|
config.urls.types.movie,
|
|
config.urls.types.serial,
|
|
config.urls.types.mult,
|
|
config.urls.types.multserial,
|
|
config.urls.types.anime,
|
|
config.urls.types.tv
|
|
]
|
|
.filter(Boolean)
|
|
.filter(function(t) {
|
|
return t === '' + keywords['type'];
|
|
});
|
|
if (types_set.length) {
|
|
keywordRegExp = types_set[0];
|
|
stop = false;
|
|
}
|
|
if (
|
|
stop &&
|
|
typeof keywords['genres'] !== 'undefined' &&
|
|
keywords['genres'] + '' &&
|
|
types.anime &&
|
|
types.anime.length
|
|
) {
|
|
for (i = 0, l = types.anime.length; i < l; i++) {
|
|
if (('' + keywords['genres']).indexOf(types.anime[i]) + 1) {
|
|
if (
|
|
stop &&
|
|
typeof keywords['country'] !== 'undefined' &&
|
|
keywords['country'] + '' &&
|
|
types.anime_country &&
|
|
types.anime_country.length
|
|
) {
|
|
var ii = 0,
|
|
ll = 0;
|
|
for (ii = 0, ll = types.anime_country.length; ii < ll; ii++) {
|
|
if (
|
|
('' + keywords['country']).indexOf(
|
|
types.anime_country[ii]
|
|
) + 1
|
|
) {
|
|
keywordRegExp = config.urls.types.anime;
|
|
stop = false;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
keywordRegExp = config.urls.types.anime;
|
|
stop = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (
|
|
stop &&
|
|
typeof keywords['genres'] !== 'undefined' &&
|
|
keywords['genres'] + '' &&
|
|
types.tv &&
|
|
types.tv.length
|
|
) {
|
|
for (i = 0, l = types.tv.length; i < l; i++) {
|
|
if (('' + keywords['genres']).indexOf(types.tv[i]) + 1) {
|
|
keywordRegExp = config.urls.types.tv;
|
|
stop = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (
|
|
stop &&
|
|
('' + keywords['type'] === '1' ||
|
|
'' + keywords['type'] === config.urls.types.serial ||
|
|
'' + keywords['type'] === config.urls.types.multserial)
|
|
) {
|
|
if (
|
|
typeof keywords['genres'] !== 'undefined' &&
|
|
keywords['genres'] + '' &&
|
|
types.mult &&
|
|
types.mult.length
|
|
) {
|
|
for (i = 0, l = types.mult.length; i < l; i++) {
|
|
if (('' + keywords['genres']).indexOf(types.mult[i]) + 1) {
|
|
keywordRegExp = config.urls.types.multserial;
|
|
stop = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (stop) {
|
|
stop = false;
|
|
keywordRegExp = config.urls.types.serial;
|
|
}
|
|
}
|
|
if (
|
|
stop &&
|
|
'' + keywords['type'] !== '1' &&
|
|
'' + keywords['type'] !== config.urls.types.serial &&
|
|
'' + keywords['type'] !== config.urls.types.multserial
|
|
) {
|
|
if (
|
|
typeof keywords['genres'] !== 'undefined' &&
|
|
keywords['genres'] + '' &&
|
|
types.mult &&
|
|
types.mult.length
|
|
) {
|
|
for (i = 0, l = types.mult.length; i < l; i++) {
|
|
if (('' + keywords['genres']).indexOf(types.mult[i]) + 1) {
|
|
keywordRegExp = config.urls.types.mult;
|
|
stop = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (stop) {
|
|
stop = false;
|
|
keywordRegExp = config.urls.types.movie;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (text.indexOf('}') + 1) {
|
|
var allSpecific = new RegExp(
|
|
'(\\s*\\(\\s*' + keywordRegExp + '\\s*\\)\\s*\\{([^]*?)\\}\\s*)',
|
|
'gi'
|
|
);
|
|
var match = allSpecific.exec(text);
|
|
if (match) {
|
|
dflt = false;
|
|
}
|
|
text = text.replace(allSpecific, ' $2 ');
|
|
}
|
|
|
|
if (text.indexOf(']') + 1) {
|
|
var allKeys = new RegExp('\\[' + keyRegExp + '\\]', 'g');
|
|
var allKeys2 = new RegExp('\\[' + keyRegExp2 + '\\]', 'g');
|
|
text = text
|
|
.replace(allKeys, keyword)
|
|
.replace(
|
|
allKeys2,
|
|
keyword.charAt(0).toUpperCase() + keyword.slice(1)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (dflt && text.indexOf('default') + 1) {
|
|
var defaultSpecific = new RegExp(
|
|
'(\\s*\\(\\s*default\\s*\\)\\s*\\{([^]*?)\\}\\s*)',
|
|
'gi'
|
|
);
|
|
text = text.replace(defaultSpecific, ' $2 ');
|
|
}
|
|
|
|
if (text.indexOf('}') + 1) {
|
|
var allSpecifics = new RegExp(
|
|
'(\\s*\\([^]*?\\)\\s*\\{([^]*?)\\}\\s*)',
|
|
'gi'
|
|
);
|
|
text = text.replace(allSpecifics, ' ');
|
|
}
|
|
|
|
if (text.indexOf(']') + 1) {
|
|
text = text.replace(/\s+/g, ' ').replace(/(^\s*)|(\s*)$/g, '');
|
|
|
|
while (true) {
|
|
var p = new RegExp('\\[([^]*?)\\]', 'g');
|
|
var parts = p.exec(text);
|
|
|
|
if (parts) {
|
|
var search = parts[0];
|
|
if (parts[1] && parts[1].indexOf('|') + 1) {
|
|
var part = parts[1].split('|');
|
|
var replace = part[Math.floor(Math.random() * part.length)];
|
|
text = text.replace(search, replace);
|
|
} else {
|
|
text = text.replace(search, '');
|
|
}
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (text.indexOf('+?') + 1) {
|
|
text = text
|
|
.replace(
|
|
/(\+\?\s*\+\?\s*\+\?\s*\+\?\s*\+\?|\+\?\s*\+\?\s*\+\?\s*\+\?|\+\?\s*\+\?\s*\+\?|\+\?\s*\+\?)/g,
|
|
'+?'
|
|
)
|
|
.replace(/(^\s*\+\?\s*)|(\s*\+\?\s*)$/g, '')
|
|
.replace(/(\+\?)/g, '+');
|
|
}
|
|
|
|
if (text.indexOf('-?') + 1) {
|
|
text = text
|
|
.replace(
|
|
/(-\?\s*-\?\s*-\?\s*-\?\s*-\?|-\?\s*-\?\s*-\?\s*-\?|-\?\s*-\?\s*-\?|-\?\s*-\?)/g,
|
|
'-?'
|
|
)
|
|
.replace(/(^\s*-\?\s*)|(\s*-\?\s*)$/g, '')
|
|
.replace(/(-\?)/g, '-');
|
|
}
|
|
|
|
return text.replace(/\s+/g, ' ').replace(/(^\s*)|(\s*)$/g, '');
|
|
}
|
|
|
|
module.exports = {
|
|
formatting: textFormatting
|
|
};
|