'use strict'; /** * Configuration dependencies. */ var config = require('../config/production/config'); Object.keys(config).length === 0 && (config = require('../config/production/config.backup')); /** * 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 .replace(/![^\s]+/g, '') .split('|') .map(function(genre) { return genre.trim(); }) .filter(Boolean), 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: '' }); } var dflt = true; 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' && typeof keywords['genres'] !== 'undefined' && keywords['type'] + '' && keywords['genres'] + '' ) { var i = 0, l = 0; var stop = true; if (stop) { for (i = 0, l = types.anime.length; i < l; i++) { if (('' + keywords['genres']).indexOf(types.anime[i]) + 1) { keywordRegExp = config.urls.types.anime; stop = false; break; } } } if (stop) { 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') { 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) { keywordRegExp = config.urls.types.serial; } } if (stop && '' + keywords['type'] !== '1') { 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) { 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) { var defaultSpecific = new RegExp( '(\\s*\\(\\s*default\\s*\\)\\s*\\{([^]*?)\\}\\s*)', 'gi' ); text = text.replace(defaultSpecific, ' $2 '); } var allSpecifics = new RegExp('(\\s*\\([^]*?\\)\\s*\\{([^]*?)\\}\\s*)', 'gi'); text = text.replace(allSpecifics, ' '); 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; } } return text.replace(/\s+/g, ' ').replace(/(^\s*)|(\s*)$/g, ''); } module.exports = { formatting: textFormatting };