{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///scribble-live.js","webpack:///webpack/bootstrap df8261b322bc2a7dabe5","webpack:///./src/index.js","webpack:///./package.json","webpack:///./src/scribblelive.js","webpack:///./src/tempo.js","webpack:///./src/constants.js","webpack:///./src/templates/widget.html","webpack:///./src/templates/content.html"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_init","app","context$","$","each","container$","template","site","editions","hits","url","page","options","attr","window","performance","now","Date","data","_constants","DEFAULTS","SL_valor_numeroMensajesPagina","SL_valor_evento1URLPaginaDetalle","lookup","extend","medio","media","edicion","current","Scribble_pageElementId","SL_valor_evento1ID","Scribble_template","PageNumber","empty","_scribblelive","SL_construyeModulo","Object","defineProperty","value","VERSION","undefined","_package","_package2","_widget","_widget2","_content","_content2","_Voonto","Voonto","ready","then","on","event","version","name","description","main","scripts","start","build","contributors","license","devDependencies","babel-core","babel-loader","babel-preset-es2015","chai","chalk","html-loader","html-webpack-plugin","json-loader","mocha","mocha-loader","webpack","webpack-shell-plugin","FacebookFeedDialog","appID","linkTarget","redirectTarget","mParams","app_id","link","redirect_uri","display","encodeCGIArgs","paramObject","result","key","encodeURIComponent","popup","mylink","windowname","width","height","focus","href","open","getHTTPObject","xhr","XMLHttpRequest","ActiveXObject","e","callbackFunction","xmlHttp","readyState","status","responseText","getMediaResizerUrl","resizerUrl","getInstance","indexOf","isUrlImagenInterna","domain","split","formatMensaje","mensaje","tituloPestana","comillas","gTituloPestana","substring","replace","trim","encodeURI","length","urlAbsoluta","urlAbs","location","protocol","document","edition","isTwitterPost","post","twtpl","PostMeta","source","Source","twitterShare","urlPaginaDetalle","escape","socialNetworks","getTwitterAccount","left","top","opts","getFBId","addFBShare","dialog","addParam","toLowerCase","facebookShare","codigoHTMLFacebook","loadPreviousPage","lastPage","lastMessages","show","InvocaScribbleLive","GetInstance","instanceIndex","GetOldPosts","SL_cambiaPestana","_ref","numPestana","idEvento","escribeCapaJs","avatar","ColumnLocation","SL_valor_plantilla","Scribble_ancho","Scribble_alto","Scribble_Iframe_API","APIToken","Scribble_API","SL_valor_ancho","SL_valor_ancho_embebido","ancho","parseInt","css","err","SL_valor_alto","SL_valor_alto_embebido","alto","voc_pl","pageElementId","templateTwitter","Scribble_template_twitter","dateFormat","Scribble_dateFormat","todayDateFormat","Scribble_todayDateFormat","html","EventId","TotalPostsToShow","DateFormat","TodayDateFormat","PageElementId","ShowAvatars","Template","TemplateTwitter","HTMLElementId","Medio","Edicion","UrlPaginaDetalle","codigoHTMLIframe","hide","re","RegExp","parametrosLlamada","gUrlPaginaDetalle","codigoHTMLURLPaginaDetalle","tipoEspecial","Scribble_posicionColumna","codigoHTMLTwitter","getElementById","hasClass","addClass","innerHTML","removeClass","_ref2","avatar1","avatar2","avatar3","avatar4","SL_valor_epigrafe","SL_url_epigrafe","Scribble_tipoEspecial","SL_valor_evento1Titulo","SL_valor_evento2ID","SL_valor_evento2Titulo","SL_valor_evento2URLPaginaDetalle","SL_valor_evento3ID","SL_valor_evento3Titulo","SL_valor_evento3URLPaginaDetalle","SL_valor_evento4ID","SL_valor_evento4Titulo","SL_valor_evento4URLPaginaDetalle","isArticulo","marcadorManualActivo","numEventos","cambiaPestanaCfg","strCfg","JSON","stringify","codigoHTMLPestana1","codigoHTMLPestana2","codigoHTMLPestana3","codigoHTMLPestana4","Opciones","ShowImages","ShowVideos","ShowAudio","ShowStuckPosts","ShowTextPosts","ShowPolls","ShowCaptions","ShowComments","ShowOfficialPosts","ShowTweets","ShowMobilePosts","ShowFacebookPosts","ShowOnlyTweets","ShowOnlyFacebookPosts","ShowOnlyPolls","AutoUpdateTimeOut","opt","hasOwnProperty","isNaN","clearDelayFetch","Wait","LastModifiedTime","DeviceAgent","navigator","userAgent","InstanceIndex","StoreInstance","originales","Array","elementos","fijos","TemplateData","inicial","GetAllPosts","_tempo","_tempo2","moment","locale","relativeTimeLanguage","reBC","pageToGet","fn","isAfter","sel","prevAll","filter","isBefore","nextAll","prototype","Index","pIndex","__instances","pInvocaScribbleLiveInstance","_Index","DrawPosts","pResponse","insertadosDesdeEdicion","addedNewPosts","newPostsCount","Edits","maxId","mi","Id","ed","push","AddPost","Posts","arrayEdicion","arrayFijosEdicion","inArray","b","LastModified","PostLastModified","eval","arrayEdiciones","EditPost","eliminados","Deletes","d","a","eliminado","DeletePost","slice","pop","i","Pages","EditJsonElement","divs","getElementsByTagName","divsArray","primerIdAntiguo","pintados","contiene","j","capa","createElement","append","insertBefore","appendChild","tempoRender","k","replaceChild","errorEdit","remove","stuckPosition","toBeReplacedId","IsStuck","stuckedId","setRetryFetch","twttr","widgets","load","trigger","triggerFullItemsRendered","itemsCount","_this","setTimeout","children","get","promised","time","setDelayFetch","_this2","GetNewPosts","clearId","clearTimeout","DrawOldPosts","ultimoIdAntiguo","insertAfter","scape","elemento","prepare","when","_ref3","element","type","render","GetCaption","Content","caption","exec","FormatVideoPlayer","videoId","origenVideo","maBC","inicio","videoPlayer","lastIndexOf","modal","brDiv","brCall","contenido","FormatVideoObject","end","lentgh","ResizeIframe","regWidth","regHeight","maxWidth","proportion","ResizeImageWidth","newWidth","ResizeImage","finalContent","index","urlImagen","imagen","FormatLink","ResizeEmbed","pPost","Type","IsComment","match","unshift","pPostId","splice","pPostToEdit","stuckedPos","CapitalizeFirstLetter","string","charAt","toUpperCase","today","format","PostDate","duration","diff","asSeconds","FormattedDate","asMinutes","minutes","brightcoveParsed","arrayBrightcove","test","imgs","videos","medias","Media","Url","srcImagen","element_class","brightcoveVideoId","videoWidth","videoHeight","erroreMedia","screenName","TwScreenName","TwDate","CreationDate","FacebookShare","TwitterShare","Link","Scripts","_this3","head","ScriptSource","src","removeChild","LastModifiedTimeFormatted","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","res","hasChanges","_this4","_this5","TempoEvent","item","_typeof","Symbol","iterator","constructor","Types","RENDER_STARTING","ITEM_RENDER_STARTING","ITEM_RENDER_COMPLETE","RENDER_COMPLETE","BEFORE_CLEAR","AFTER_CLEAR","Tempo","tempo","Templates","params","nestedItem","defaultTemplate","namedTemplates","container","var_brace_left","var_brace_right","tag_brace_left","tag_brace_right","dataIsMap","attributes","prop","Renderer","templates","listener","started","varRegex","tagRegex","filterSplitter","utils","memberRegex","filters","errorHandler","NUMBER_FORMAT_REGEX","_window","member_regex","member","pad","val","size","str","startsWith","prefix","clearContainer","el","childNodes","getAttribute","parentNode","isNested","hasAttr","equalsIgnoreCase","str1","str2","getElement","appVersion","tagName","depth","lastChild","setAttribute","typeOf","HTMLElement","nodeType","nodeName","jQuery","hasAttribute","removeAttr","merge","obj1","obj2","obj3","attr1","attr2","notify","arrayContains","array","file","callback","contents","iframe","contentWindow","documentElement","contentDocument","body","style","attachEvent","onload","_insertTemplate","child","parse","foundTemplates","s","createTemplate","node","cloneNode","removeAttribute","removeProperty","nonDefault","templateFor","templateName","_getValue","renderer","variable","t","_replaceVariables","self","args","filter_args","substr","_onError","_replaceObjects","regex","_applyAttributeSetters","data_value","_applyTags","tag","tags","starting","_renderNestedItem","nested","r","_parent","renderItem","_tempo_info","fragment","tempo_info","nestedDeclaration","specified","_createFragment","createDocumentFragment","mapped","pair","first","last","into","target","clear","ref","prepend","firstChild","nextSibling","errors","if","_if","expr","blockRegex","blocks","toString","&","<",">","_encodeURI","_x","_x2","apply","arguments","decodeURI","_decodeURI","_x3","_x4","truncate","len","rep","parseFloat","toFixed","x","x1","x2","upper","lower","titlecase","blacklist","join","date","isUTC","toLocaleDateString","toLocaleTimeString","toDateString","toTimeString","MONTHS","DAYS","DATE_PATTERNS","YYYY","getFullYear","YY","MMMM","getMonth","MMM","MM","M","DD","getDate","D","EEEE","getUTCDay","getDay","EEE","E","HH","getHours","H","h","hours","mm","getMinutes","ss","getSeconds","SSS","getUTCMilliseconds","getMilliseconds","S","pattern","init","CONFIG_NAMESPACE","DEFAULT_TEMPLATE","freeze"],"mappings":"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","file":"scribble-live.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ScribbleLive\"] = factory();\n\telse\n\t\troot[\"ScribbleLive\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ScribbleLive\"] = factory();\n\telse\n\t\troot[\"ScribbleLive\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.VERSION = undefined;\n\t\n\tvar _package = __webpack_require__(1);\n\t\n\tvar _package2 = _interopRequireDefault(_package);\n\t\n\tvar _scribblelive = __webpack_require__(2);\n\t\n\tvar _constants = __webpack_require__(4);\n\t\n\tvar _widget = __webpack_require__(5);\n\t\n\tvar _widget2 = _interopRequireDefault(_widget);\n\t\n\tvar _content = __webpack_require__(6);\n\t\n\tvar _content2 = _interopRequireDefault(_content);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar _Voonto = Voonto,\n\t $ = _Voonto.$;\n\t\n\t\n\tVoonto.ready.then(function (app) {\n\t _init(app);\n\t app.on('voonto:reload', function (event, context$) {\n\t return _init(app, context$);\n\t });\n\t});\n\t\n\tvar VERSION = exports.VERSION = _package2.default.version;\n\t\n\t/* Private */\n\t\n\tfunction _init(app, context$) {\n\t $('[data-voc-scribblelive]', context$).each(function () {\n\t var container$,\n\t id,\n\t options = {},\n\t template,\n\t site,\n\t editions,\n\t hits,\n\t url,\n\t page;\n\t\n\t container$ = $(this);\n\t id = container$.attr('id') || 'sl-' + (window.performance ? window.performance.now() : Date.now());\n\t container$.attr('id', id);\n\t\n\t template = _widget2.default;\n\t if (container$.data('voc-scribblelive-template')) {\n\t template = _content2.default;\n\t }\n\t\n\t hits = _constants.DEFAULTS.SL_valor_numeroMensajesPagina;\n\t if ($(container$).data('voc-scribblelive-hits')) {\n\t hits = $(container$).data('voc-scribblelive-hits');\n\t }\n\t\n\t page = 'last';\n\t if ($(container$).data('voc-scribblelive-page')) {\n\t page = $(container$).data('voc-scribblelive-page');\n\t }\n\t\n\t url = _constants.DEFAULTS.SL_valor_evento1URLPaginaDetalle;\n\t if ($(container$).data('voc-scribblelive-url')) {\n\t url = $(container$).data('voc-scribblelive-url');\n\t }\n\t\n\t site = app.lookup('vocento.site');\n\t editions = app.lookup('vocento.site.editions');\n\t\n\t $.extend(options, _constants.DEFAULTS, {\n\t medio: site.media,\n\t edicion: editions.current,\n\t Scribble_pageElementId: id,\n\t SL_valor_evento1ID: container$.data('voc-scribblelive'),\n\t Scribble_template: template,\n\t SL_valor_numeroMensajesPagina: hits,\n\t SL_valor_evento1URLPaginaDetalle: url,\n\t PageNumber: page,\n\t container$: container$\n\t });\n\t container$.empty();\n\t (0, _scribblelive.SL_construyeModulo)(options);\n\t });\n\t}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = {\n\t\t\"name\": \"scribble-live\",\n\t\t\"version\": \"2.0.2\",\n\t\t\"description\": \"\",\n\t\t\"main\": \"src/index.js\",\n\t\t\"scripts\": {\n\t\t\t\"start\": \"webpack-dev-server\",\n\t\t\t\"build\": \"./node_modules/webpack/bin/webpack.js\"\n\t\t},\n\t\t\"contributors\": [\n\t\t\t\"Iván Pérez \",\n\t\t\t\"Jose Manuel Ortega \",\n\t\t\t\"Adolfo Sanz \"\n\t\t],\n\t\t\"license\": \"SEE LICENSE IN LICENSE.md\",\n\t\t\"devDependencies\": {\n\t\t\t\"babel-core\": \"^6.17.0\",\n\t\t\t\"babel-loader\": \"^6.2.5\",\n\t\t\t\"babel-preset-es2015\": \"^6.16.0\",\n\t\t\t\"chai\": \"^3.5.0\",\n\t\t\t\"chalk\": \"^1.1.3\",\n\t\t\t\"html-loader\": \"^0.4.5\",\n\t\t\t\"html-webpack-plugin\": \"^2.24.1\",\n\t\t\t\"json-loader\": \"^0.5.4\",\n\t\t\t\"mocha\": \"^3.1.0\",\n\t\t\t\"mocha-loader\": \"^1.0.0\",\n\t\t\t\"webpack\": \"^1.13.2\",\n\t\t\t\"webpack-shell-plugin\": \"^0.4.3\"\n\t\t}\n\t};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.SL_cambiaPestana = SL_cambiaPestana;\n\texports.SL_construyeModulo = SL_construyeModulo;\n\texports.InvocaScribbleLive = InvocaScribbleLive;\n\t\n\tvar _tempo = __webpack_require__(3);\n\t\n\tvar _tempo2 = _interopRequireDefault(_tempo);\n\t\n\tvar _constants = __webpack_require__(4);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t// tempo.js - http://tempojs.com/\n\tvar _Voonto = Voonto,\n\t $ = _Voonto.$,\n\t moment = _Voonto.moment;\n\t\n\t\n\tmoment.locale(_constants.DEFAULTS.relativeTimeLanguage);\n\t\n\t// FUTURE: refactor\n\t\n\t/* ----------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t VARIABLES GLOBALES\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-----------------------------------------------------------------------------------------------------------*/\n\t// Objeto XMLHttpRequest para los distintos navegadores\n\tvar xmlHttp = false;\n\t// Resultado de la llamada repetitiva para obtener nuevos mensajes\n\tvar Wait;\n\t// Tipo de especial\n\tvar tipoEspecial = \"\";\n\t// Módulo o artículo\n\tvar isArticulo = false;\n\t// Expresión regular para encontrar vídeos de Brightcove\n\tvar reBC = /##()?([a-zA-Z0-9-\\s_]{3,60})(<\\/small>)?##/;\n\t// Url de la página de detalle del evento\n\tvar gUrlPaginaDetalle;\n\t// Título de la pestaña activa\n\tvar gTituloPestana;\n\t// Índice para los eventos múltiples del script\n\tvar instanceIndex;\n\t// Número total de páginas del evento\n\tvar lastPage;\n\t// Nueva página a mostrar cuando se hace la paginación\n\tvar pageToGet;\n\t// Tipo de obtención de mensajes. false cuando se obtienen los mensajes más recientes, true cuando es una llamada para obtener más páginas\n\tvar lastMessages;\n\t\n\t// Funciones de jquery para comprobar si un div está antes o después de otro\n\t(function ($) {\n\t $.fn.isAfter = function (sel) {\n\t return this.prevAll().filter(sel).length !== 0;\n\t };\n\t $.fn.isBefore = function (sel) {\n\t return this.nextAll().filter(sel).length !== 0;\n\t };\n\t})($);\n\t\n\t/* ----------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t CÓDIGO ESPECÍFICO PARA MOSTRAR COMPARTIR EN FACEBOOK\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-----------------------------------------------------------------------------------------------------------*/\n\t\n\t/* by Steven Yang, Feb 2015, originally for www.mathscore.com. This code is free for anybody to use as long as you include this comment. */\n\tfunction FacebookFeedDialog(appID, linkTarget, redirectTarget) {\n\t this.mParams = {\n\t app_id: appID,\n\t link: linkTarget,\n\t redirect_uri: redirectTarget,\n\t display: \"popup\"\n\t };\n\t};\n\t\n\t/* Common params include:\n\tname - the title that appears in bold font\n\tdescription - the text that appears below the title\n\tpicture - complete URL path to the image on the left of the dialog\n\tcaption - replaces the link text\n\t*/\n\tFacebookFeedDialog.prototype.addParam = function (key, value) {\n\t this.mParams[key] = value;\n\t};\n\t\n\tFacebookFeedDialog.prototype.open = function () {\n\t var url = 'https://www.facebook.com/dialog/feed?' + encodeCGIArgs(this.mParams);\n\t popup(url, 'feedDialog', 700, 400);\n\t};\n\t\n\t/* Takes a param object like this:\n\t { arg1: \"value1\", arg2: \"value2\" }\n\t and converts into CGI args like this:\n\t arg1=value1&arg2=value2\n\t\n\t The values and args will be properly URI encoded\n\t*/\n\tfunction encodeCGIArgs(paramObject) {\n\t var result = '';\n\t for (var key in paramObject) {\n\t if (result) result += '&';\n\t result += encodeURIComponent(key) + '=' + encodeURIComponent(paramObject[key]);\n\t }\n\t return result;\n\t}\n\t\n\tfunction popup(mylink, windowname, width, height) {\n\t if (!window.focus) return;\n\t var href;\n\t if (typeof mylink == 'string') href = mylink;else href = mylink.href;\n\t if (!windowname) windowname = 'mywindow';\n\t if (!width) width = 600;\n\t if (!height) height = 350;\n\t window.open(href, windowname, 'resizable=yes,width=' + width + ',height=' + height + ',scrollbars=yes');\n\t}\n\t\n\t/* ----------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t FUNCIONES GENERALES\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-----------------------------------------------------------------------------------------------------------*/\n\t\n\t/**\n\t * Obtiene el objeto XMLHttpRequest del navegador. Como siempre IE dando por el culo\n\t * @returns Objeto XMLHttpRequest propio del navegador\n\t */\n\tfunction getHTTPObject() {\n\t var xhr = false;\n\t if (window.XMLHttpRequest) {\n\t var xhr = new XMLHttpRequest();\n\t } else if (window.ActiveXObject) {\n\t try {\n\t var xhr = new ActiveXObject(\"Msxml2.XMLHTTP\");\n\t } catch (e) {\n\t try {\n\t var xhr = new ActiveXObject(\"Microsoft.XMLHTTP\");\n\t } catch (e) {\n\t xhr = false;\n\t }\n\t }\n\t }\n\t return xhr;\n\t}\n\t\n\t/**\n\t * Resultado del callback para obtener la plantilla de cada mensaje del módulo\n\t * @returns Contenido (cadena) con el contenido de la plantilla para mostrar cada uno de los mensajes del módulo\n\t */\n\tfunction callbackFunction() {\n\t if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\n\t return xmlHttp.responseText;\n\t }\n\t}\n\t\n\t/**\n\t * Obtiene el resizer para el medio\n\t * @returns {String} URL del resizer del medio\n\t */\n\tfunction getMediaResizerUrl() {\n\t var resizerUrl = \"http://resizer.\";\n\t var media = Voonto.getInstance().lookup('vocento.site.media');\n\t if (media.indexOf(\"diariovasco\") > -1 || media.indexOf(\"larioja\") > -1 || media.indexOf(\"elcorreo\") > -1 || media.indexOf(\"leonoticias\") > -1) {\n\t resizerUrl = resizerUrl + media + \".com\";\n\t } else if (media.indexOf(\"elbierzonoticias\") > -1) {\n\t resizerUrl = resizerUrl + \"leonoticias.com\";\n\t } else {\n\t resizerUrl = resizerUrl + media + \".es\";\n\t }\n\t return resizerUrl;\n\t}\n\t\n\t/**\n\t * Obtiene si una imagen contenida en una url es interna o externa los medios locales\n\t * @param url Url de la imagen\n\t * @returns {Boolean} Verdadero si la imagen pertenece a un medio local, falso si es una imagen externa\n\t */\n\tfunction isUrlImagenInterna(url) {\n\t var domain;\n\t try {\n\t if (url.indexOf(\"://\") > -1) {\n\t domain = url.split('/')[2];\n\t } else {\n\t domain = url.split('/')[0];\n\t }\n\t domain = domain.split(':')[0];\n\t if (domain.indexOf(\"elcorreo.com\") > -1 || domain.indexOf(\"diariovasco.com\") > -1 || domain.indexOf(\"elcomercio.es\") > -1 || domain.indexOf(\"eldiariomontanes.es\") > -1 || domain.indexOf(\"larioja.com\") > -1 || domain.indexOf(\"elnortedecastilla.es\") > -1 || domain.indexOf(\"leonoticias.com\") > -1 || domain.indexOf(\"hoy.es\") > -1 || domain.indexOf(\"ideal.es\") > -1 || domain.indexOf(\"laverdad.es\") > -1 || domain.indexOf(\"lasprovincias.es\") > -1 || domain.indexOf(\"elbierzonoticias.com\") > -1) {\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t } catch (e) {\n\t return false;\n\t }\n\t}\n\t\n\t/**\n\t * Formatea un mensaje para las redes sociales. Si hay código html en el mensaje entonces se obvia\n\t * y se recoge en su lugar el título de la pestaña\n\t * @param mensaje Mensaje para formatear\n\t * @param tituloPestana Título de la pestaña. Texto a usar por defecto cuando no hay mensaje\n\t * @param comillas Indica si debe escapar las comillas dobles y simples (Facebook) o no escaparlas (Twitter)\n\t * @returns Mensaje formateado\n\t */\n\tfunction formatMensaje(mensaje, tituloPestana, comillas) {\n\t\n\t if (typeof tituloPestana == \"undefined\") {\n\t tituloPestana = gTituloPestana;\n\t }\n\t // El mensaje será nulo cuando se comparte desde la parte inferior del módulo\n\t if (mensaje == null) {\n\t mensaje = tituloPestana;\n\t }\n\t // Elimina un código html que inserta la API de SL y que aquí nos suda la polla\n\t if (mensaje.indexOf(\"ScribbleLiveCountImage\") > -1) {\n\t mensaje = mensaje.substring(0, mensaje.indexOf(\" -1) {\n\t mensaje = mensaje.replace(/(<([^>]+)>)/ig, \"\");\n\t }\n\t mensaje = $.trim(mensaje);\n\t if (comillas) {\n\t mensaje = mensaje.replace(/\"/g, '\\\\\"');\n\t mensaje = mensaje.replace(/'/g, '\\\\\"');\n\t mensaje = mensaje.substring(0, 200);\n\t } else {\n\t mensaje = mensaje.substring(0, 140);\n\t mensaje = encodeURI(mensaje);\n\t mensaje = mensaje.replace(/'/g, \"%27\");\n\t }\n\t\n\t if (mensaje.length == 0) {\n\t mensaje = tituloPestana;\n\t }\n\t\n\t return mensaje;\n\t}\n\t\n\t/**\n\t * Pasa una url de relativa a absoluta si no lo es\n\t * @param url Url a convertir. Si es absoluta se deja tal cual\n\t * @returns {String} Url siempre absoluta\n\t */\n\tfunction urlAbsoluta(url) {\n\t if (url.indexOf(\"http\") != 0) {\n\t var urlAbs = location.protocol + \"//\" + document.domain;\n\t var edition = Voonto.getInstance().lookup('vocento.site.editions.current');\n\t if (edition != null && edition != \"null\" && edition.replace(/\\s/g, \"\") != \"\") {\n\t urlAbs += \"/\" + edition;\n\t }\n\t urlAbs += url;\n\t url = urlAbs;\n\t }\n\t return url;\n\t}\n\t\n\t/**\n\t * Averigua si un post tiene como origen Twitter o no\n\t * @param post Elemento json con toda la información del post\n\t * @param twtpl Template de Twitter\n\t * @returns Verdadero si el post tiene como origen Twitter, falso en caso contrario\n\t */\n\tfunction isTwitterPost(post, twtpl) {\n\t try {\n\t if ((post.PostMeta.source == \"twitter\" || post.Source.indexOf(\"twitter\") > -1) && twtpl != null) {\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t } catch (e) {\n\t return false;\n\t }\n\t}\n\t\n\t/**\n\t * Genera el código HTML para compartir una página en Twitter\n\t * @param urlPaginaDetalle URL de la página a compartir\n\t * @param tituloPestana Texto explicativo para compartir\n\t * @param mensaje Texto del mensaje a compartir. Este parámetro vendrá con valor cuando se comparta un mensaje en concreto\n\t * @returns {String} Cadena HTML para compartir en Twitter\n\t */\n\tfunction twitterShare(urlPaginaDetalle, tituloPestana, mensaje) {\n\t\n\t mensaje = formatMensaje(mensaje, tituloPestana, false);\n\t urlPaginaDetalle = typeof urlPaginaDetalle != \"undefined\" && urlPaginaDetalle.replace(/\\s/g, \"\") != \"\" ? urlPaginaDetalle : location.href;\n\t urlPaginaDetalle = urlAbsoluta(urlPaginaDetalle);\n\t var url = 'https://twitter.com/intent/tweet?url=' + escape(urlPaginaDetalle) + '&text=' + mensaje + '&via=' + socialNetworks.getTwitterAccount();\n\t var width = 575;\n\t var height = 400;\n\t var left = ($(window).width() - width) / 2;\n\t var top = ($(window).height() - height) / 2;\n\t var opts = 'status=1' + ',width=' + width + ',height=' + height + ',top=' + top + ',left=' + left;\n\t return 'T';\n\t}\n\t\n\t/**\n\t * Obtiene el id de la aplicación de Facebook según el medio\n\t * @returns {String} Id de la aplicación de Facebook del medio\n\t */\n\tfunction getFBId() {\n\t var media = Voonto.getInstance().lookup('vocento.site.media');\n\t if (media.indexOf(\"comercio\") > -1) {\n\t return \"95009241017\";\n\t } else if (media.indexOf(\"diariomontanes\") > -1) {\n\t return \"77981614515\";\n\t } else if (media.indexOf(\"elcorreo\") > -1) {\n\t return \"101374325995\";\n\t } else if (media.indexOf(\"diariovasco\") > -1) {\n\t return \"189716465103\";\n\t } else if (media.indexOf(\"larioja\") > -1) {\n\t return \"84755916337\";\n\t } else if (media.indexOf(\"nortedecastilla\") > -1) {\n\t return \"85441402889\";\n\t } else if (media.indexOf(\"provincias\") > -1) {\n\t return \"192864680242\";\n\t } else if (media.indexOf(\"laverdad\") > -1) {\n\t return \"84315835682\";\n\t } else if (media.indexOf(\"ideal\") > -1) {\n\t return \"99542490759\";\n\t } else if (media.indexOf(\"diariosur\") > -1) {\n\t return \"96373116360\";\n\t } else if (media.indexOf(\"hoy\") > -1) {\n\t return \"79017991068\";\n\t } else if (media.indexOf(\"leonoticias\") > -1 || media.indexOf(\"elbierzonoticias\") > -1) {\n\t return \"885569074898163\";\n\t } else {\n\t // Por defecto se devuelve el Id de El Correo\n\t return \"101374325995\";\n\t }\n\t}\n\t\n\t/**\n\t * Código JS para hacer la llamada a Facebook\n\t * @param id Id del mensaje de Scribblive. Cuando viene desde la llamada global será un \"0\"\n\t * @param urlPaginaDetalle URL de la página a compartir\n\t * @param tituloPestana Texto explicativo para compartir\n\t * @param mensaje Texto del mensaje a compartir. Este parámetro vendrá con valor cuando se comparta un mensaje en concreto\n\t */\n\tfunction addFBShare(id, urlPaginaDetalle, tituloPestana, mensaje) {\n\t\n\t var dialog = new FacebookFeedDialog(getFBId(), urlPaginaDetalle, 'http://' + document.domain + '/comun/html/2014/facebook-redirect-uri.html');\n\t dialog.addParam('name', mensaje);\n\t // Lotería\n\t if (tituloPestana.toLowerCase().indexOf(\"loter\") > -1) {\n\t dialog.addParam('description', \"Cobertura en directo de la Loter\\xEDa de Navidad\");\n\t } else {\n\t dialog.addParam('description', 'Cobertura en directo');\n\t }\n\t dialog.addParam('picture', 'http://' + document.domain + '/img/2014/logoC-200.png');\n\t var media = Voonto.getInstance().lookup('vocento.site.media');\n\t dialog.addParam('caption', media);\n\t\n\t dialog.open();\n\t}\n\t\n\t/**\n\t * Genera el código HTML para compartir una página en Facebook\n\t * @param urlPaginaDetalle URL de la página a compartir\n\t * @param tituloPestana Texto explicativo para compartir\n\t * @param mensaje Texto del mensaje a compartir. Este parámetro vendrá con valor cuando se comparta un mensaje en concreto\n\t * @param id Id del mensaje de Scribblive. Cuando viene desde la llamada global será un \"0\"\n\t * @returns {String} Cadena HTML para compartir en Facebook\n\t */\n\tfunction facebookShare(urlPaginaDetalle, tituloPestana, mensaje, id) {\n\t mensaje = formatMensaje(mensaje, tituloPestana, true);\n\t urlPaginaDetalle = typeof urlPaginaDetalle != \"undefined\" && urlPaginaDetalle.replace(/\\s/g, \"\") != \"\" ? urlPaginaDetalle : location.href;\n\t urlPaginaDetalle = urlAbsoluta(urlPaginaDetalle);\n\t var codigoHTMLFacebook = \"F\";\n\t return codigoHTMLFacebook;\n\t}\n\t\n\t/**\n\t * Carga los mensajes de la anterior página (siempre y cuando haya más de una página)\n\t */\n\tfunction loadPreviousPage() {\n\t if (lastPage > 0) {\n\t // Indica que se quieren obtener los últimos mensajes\n\t lastMessages = true;\n\t // Muestra la capa de carga\n\t $(\"#SL_loadingPages\").show();\n\t // Obtiene los mensajes de la página anterior\n\t InvocaScribbleLive.GetInstance(instanceIndex).GetOldPosts();\n\t }\n\t}\n\t\n\t/**\n\t * Evento que se lanza al cambiar la pestaña del módulo\n\t * @param numPestana Número de pestaña (numérico) a mostrar\n\t * @param idEvento Id del evento de la pestaña\n\t * @param urlPaginaDetalle URL de la página de detalle de la pestaña\n\t * @param escribeCapaJs true cuando se carga el módulo vía JavaScript, false si se carga el iframe\n\t * @param SL_valor_numeroMensajesPagina Número de mensajes a mostrar en la pestaña\n\t * @param PageNumber Número de la página seleccionada\n\t * @param avatar Indica si debe mostrar o no el avatar del usuario\n\t * @param ColumnLocation Posición del módulo en la página (C, AB)\n\t * @param tituloPestana Título de la pestaña\n\t * @param medio Medio donde se muestra el módulo\n\t * @param edicion Edición del medio donde se muestra el módulo\n\t */\n\tfunction SL_cambiaPestana(_ref) {\n\t var numPestana = _ref.numPestana,\n\t idEvento = _ref.idEvento,\n\t urlPaginaDetalle = _ref.urlPaginaDetalle,\n\t escribeCapaJs = _ref.escribeCapaJs,\n\t SL_valor_numeroMensajesPagina = _ref.SL_valor_numeroMensajesPagina,\n\t PageNumber = _ref.PageNumber,\n\t avatar = _ref.avatar,\n\t ColumnLocation = _ref.ColumnLocation,\n\t tituloPestana = _ref.tituloPestana,\n\t medio = _ref.medio,\n\t edicion = _ref.edicion,\n\t SL_valor_plantilla = _ref.SL_valor_plantilla,\n\t Scribble_ancho = _ref.Scribble_ancho,\n\t Scribble_alto = _ref.Scribble_alto,\n\t Scribble_pageElementId = _ref.Scribble_pageElementId,\n\t Scribble_template = _ref.Scribble_template,\n\t Scribble_Iframe_API = _ref.Scribble_Iframe_API,\n\t APIToken = _ref.APIToken,\n\t Scribble_API = _ref.Scribble_API,\n\t container$ = _ref.container$;\n\t\n\t\n\t // Se lee la plantilla interna de Scribble a utilizar. Si no hay ninguna definida se utiliza la plantilla por defecto\n\t\n\t var marcadorManualActivo = false;\n\t // Obtiene los valores de alto y ancho\n\t var SL_valor_ancho = '300';\n\t var SL_valor_ancho_embebido = '300';\n\t if (typeof Scribble_ancho != \"undefined\") {\n\t try {\n\t SL_valor_ancho = Scribble_ancho;\n\t if (SL_valor_ancho.indexOf('px') != -1) {\n\t SL_valor_ancho = SL_valor_ancho.replace('px', '');\n\t }\n\t var ancho = parseInt(SL_valor_ancho);\n\t SL_valor_ancho_embebido = ancho;\n\t $(\".SL_moduloDirecto\").css(\"width\", \"\" + ancho + \"px\");\n\t } catch (err) {}\n\t }\n\t\n\t var SL_valor_alto = '450';\n\t var SL_valor_alto_embebido = '340';\n\t if (typeof Scribble_alto != \"undefined\") {\n\t try {\n\t SL_valor_alto = Scribble_alto;\n\t var alto = parseInt(SL_valor_alto);\n\t SL_valor_alto_embebido = alto - 110;\n\t if (typeof voc_pl == \"undefined\" || voc_pl != 'm') {\n\t $(\".SL_moduloDirecto\").css(\"height\", \"\" + alto + \"px\");\n\t $(\"#SL_evento\").css(\"height\", \"\" + (alto - 70) + \"px\");\n\t }\n\t } catch (err) {}\n\t }\n\t\n\t // Id de la capa donde se escribirá el contenido de Scribblelive\n\t var pageElementId = \"SL_evento\";\n\t if (typeof Scribble_pageElementId != \"undefined\") {\n\t pageElementId = Scribble_pageElementId;\n\t }\n\t // Carga rápida\n\t\n\t if (escribeCapaJs) {\n\t var template = \"\";\n\t if (typeof Scribble_template != \"undefined\") {\n\t template = Scribble_template;\n\t }\n\t var templateTwitter = null;\n\t if (typeof Scribble_template_twitter != \"undefined\") {\n\t templateTwitter = Scribble_template_twitter;\n\t }\n\t var dateFormat = \"DD/MM - HH:mm\";\n\t if (typeof Scribble_dateFormat != \"undefined\") {\n\t dateFormat = Scribble_dateFormat;\n\t }\n\t var todayDateFormat = \"HH:mm:ss\";\n\t if (typeof Scribble_todayDateFormat != \"undefined\") {\n\t todayDateFormat = Scribble_todayDateFormat;\n\t }\n\t // Borra todo contenido donde se van a mostrar los mensajes de Scribblelive\n\t $(\"#\" + pageElementId).html(\"\");\n\t // Invoca a Scribble\n\t var ScribbleLiveInstance = new InvocaScribbleLive({\n\t \"APIToken\": APIToken,\n\t \"EventId\": idEvento,\n\t container$: container$,\n\t \"TotalPostsToShow\": SL_valor_numeroMensajesPagina,\n\t \"DateFormat\": dateFormat,\n\t \"TodayDateFormat\": todayDateFormat,\n\t \"PageElementId\": pageElementId,\n\t \"ShowAvatars\": avatar,\n\t \"Template\": template,\n\t \"TemplateTwitter\": templateTwitter,\n\t \"HTMLElementId\": \"scribbleContent\",\n\t \"ColumnLocation\": ColumnLocation,\n\t \"Medio\": medio,\n\t \"Edicion\": edicion,\n\t \"UrlPaginaDetalle\": urlPaginaDetalle,\n\t \"Scribble_API\": Scribble_API,\n\t \"PageNumber\": PageNumber\n\t });\n\t } else {\n\t // Se muestra el iframe\n\t var codigoHTMLIframe = '';\n\t $(\"#\" + pageElementId).html(codigoHTMLIframe).ready(function () {\n\t $(\"#SL_imagenCargando\").hide();\n\t });\n\t }\n\t\n\t // Enlace a la pagina de detalle\n\t if (urlPaginaDetalle != null && urlPaginaDetalle != 'null') {\n\t // Si la url lleva a live.vocento.com se añade medio y edición\n\t if (urlPaginaDetalle.indexOf(\"live.vocento.com/scribblelive/redirect.php?recid=\") > -1 && urlPaginaDetalle.indexOf(\"medio=\") == -1) {\n\t var re = new RegExp(\"recid=([^&].*)\");\n\t var parametrosLlamada = \"&medio=\" + medio;\n\t if (edicion != null && edicion != \"null\" && edicion.replace(/\\s/g, \"\") != \"\") {\n\t parametrosLlamada = parametrosLlamada + \"&edicionLocal=\" + edicion;\n\t }\n\t urlPaginaDetalle = urlPaginaDetalle.replace(re, \"recid=$1\" + parametrosLlamada);\n\t }\n\t // Asignación de la variable global\n\t gUrlPaginaDetalle = urlPaginaDetalle;\n\t var codigoHTMLURLPaginaDetalle = 'Ver cobertura completa';\n\t $(\"#SL_coberturaCompleta\").html(codigoHTMLURLPaginaDetalle);\n\t if (tipoEspecial != \"elecciones-2015\") {\n\t $(\"#SL_coberturaCompleta\").show();\n\t }\n\t\n\t if (urlPaginaDetalle.indexOf('redirect.php') == -1 || tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") {\n\t // Se muestran los iconos de las redes sociales. El de Twitter no lleva URL como parametro así que no hace falta sobreescribirlo\n\t if (tituloPestana == null || tituloPestana.replace(/\\s/g, \"\") == \"\") {\n\t tituloPestana = \"Actualidad en directo\";\n\t }\n\t if ((tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") && typeof Scribble_posicionColumna != \"undefined\" && Scribble_posicionColumna != \"AB\") {\n\t var codigoHTMLTwitter = twitterShare(urlPaginaDetalle, tituloPestana, null);\n\t var codigoHTMLFacebook = facebookShare(urlPaginaDetalle, tituloPestana, null, '0');\n\t } else {\n\t var codigoHTMLFacebook = '';\n\t var codigoHTMLTwitter = 'Tweet';\n\t }\n\t $(\"#SL_iconoFacebook\").html(codigoHTMLFacebook);\n\t $(\"#SL_iconoTwitter\").html(codigoHTMLTwitter);\n\t $(\"#SL_iconos\").show();\n\t } else {\n\t $(\"#SL_iconos\").hide();\n\t }\n\t // Iframe\n\t } else {\n\t $(\"#SL_coberturaCompleta\").hide();\n\t $(\"#SL_iconos\").hide();\n\t }\n\t\n\t if (document.getElementById(\"contentMarcador\" + numPestana + \"Manual\")) {\n\t $(\"#SL_marcadoresDirecto\").css(\"margin-top\", \"44px\");\n\t } else {\n\t $(\"#SL_marcadoresDirecto\").css(\"margin-top\", \"0px\");\n\t }\n\t\n\t // Se marca como activa la pestaña correspondiente y se desactivan las demás\n\t if (!$(\"#SL_pestana\" + numPestana).hasClass('activo')) {\n\t $(\"#SL_pestana\" + numPestana).addClass('activo');\n\t if (document.getElementById(\"SL_marcadorDirecto\" + numPestana) && $.trim(document.getElementById(\"SL_marcadorDirecto\" + numPestana).innerHTML) != '') {\n\t $(\"#SL_marcadorDirecto\" + numPestana).show();\n\t }\n\t }\n\t if (numPestana != 1 && $(\"#SL_pestana1\").hasClass('activo')) {\n\t $(\"#SL_pestana1\").removeClass('activo');\n\t $(\"#SL_marcadorDirecto1\").hide();\n\t }\n\t if (numPestana != 2 && $(\"#SL_pestana2\").hasClass('activo')) {\n\t $(\"#SL_pestana2\").removeClass('activo');\n\t $(\"#SL_marcadorDirecto2\").hide();\n\t }\n\t if (numPestana != 3 && $(\"#SL_pestana3\").hasClass('activo')) {\n\t $(\"#SL_pestana3\").removeClass('activo');\n\t $(\"#SL_marcadorDirecto3\").hide();\n\t }\n\t if (numPestana != 4 && $(\"#SL_pestana4\").hasClass('activo')) {\n\t $(\"#SL_pestana4\").removeClass('activo');\n\t $(\"#SL_marcadorDirecto4\").hide();\n\t }\n\t\n\t // Asignación de la variable global\n\t gTituloPestana = tituloPestana;\n\t}\n\t\n\t/**\n\t * Llamada principal para construir el módulo de Scribble y obtener los mensajes\n\t * @param medio Medio donde se construye el módulo\n\t * @param edicion Edición de se construye el módulo\n\t */\n\tfunction SL_construyeModulo(_ref2) {\n\t var medio = _ref2.medio,\n\t edicion = _ref2.edicion,\n\t escribeCapaJs = _ref2.escribeCapaJs,\n\t ColumnLocation = _ref2.ColumnLocation,\n\t avatar1 = _ref2.avatar1,\n\t avatar2 = _ref2.avatar2,\n\t avatar3 = _ref2.avatar3,\n\t avatar4 = _ref2.avatar4,\n\t SL_valor_epigrafe = _ref2.SL_valor_epigrafe,\n\t SL_url_epigrafe = _ref2.SL_url_epigrafe,\n\t Scribble_tipoEspecial = _ref2.Scribble_tipoEspecial,\n\t SL_valor_numeroMensajesPagina = _ref2.SL_valor_numeroMensajesPagina,\n\t PageNumber = _ref2.PageNumber,\n\t SL_valor_evento1ID = _ref2.SL_valor_evento1ID,\n\t SL_valor_evento1Titulo = _ref2.SL_valor_evento1Titulo,\n\t SL_valor_evento1URLPaginaDetalle = _ref2.SL_valor_evento1URLPaginaDetalle,\n\t SL_valor_evento2ID = _ref2.SL_valor_evento2ID,\n\t SL_valor_evento2Titulo = _ref2.SL_valor_evento2Titulo,\n\t SL_valor_evento2URLPaginaDetalle = _ref2.SL_valor_evento2URLPaginaDetalle,\n\t SL_valor_evento3ID = _ref2.SL_valor_evento3ID,\n\t SL_valor_evento3Titulo = _ref2.SL_valor_evento3Titulo,\n\t SL_valor_evento3URLPaginaDetalle = _ref2.SL_valor_evento3URLPaginaDetalle,\n\t SL_valor_evento4ID = _ref2.SL_valor_evento4ID,\n\t SL_valor_evento4Titulo = _ref2.SL_valor_evento4Titulo,\n\t SL_valor_evento4URLPaginaDetalle = _ref2.SL_valor_evento4URLPaginaDetalle,\n\t SL_valor_plantilla = _ref2.SL_valor_plantilla,\n\t Scribble_ancho = _ref2.Scribble_ancho,\n\t Scribble_alto = _ref2.Scribble_alto,\n\t Scribble_pageElementId = _ref2.Scribble_pageElementId,\n\t Scribble_template = _ref2.Scribble_template,\n\t Scribble_template_twitter = _ref2.Scribble_template_twitter,\n\t Scribble_dateFormat = _ref2.Scribble_dateFormat,\n\t Scribble_todayDateFormat = _ref2.Scribble_todayDateFormat,\n\t Scribble_Iframe_API = _ref2.Scribble_Iframe_API,\n\t APIToken = _ref2.APIToken,\n\t Scribble_API = _ref2.Scribble_API,\n\t container$ = _ref2.container$;\n\t\n\t\n\t // Se obtienen los mensajes más nuevos\n\t lastMessages = false;\n\t\n\t if (ColumnLocation == \"AB\") {\n\t isArticulo = true;\n\t }\n\t\n\t tipoEspecial = Scribble_tipoEspecial;\n\t\n\t if (SL_url_epigrafe != null && (SL_url_epigrafe.indexOf(\"http://\") > -1 || SL_url_epigrafe.indexOf(\"https://\") > -1)) {\n\t // Si la url lleva a live.vocento.com se añade medio y edición\n\t if (SL_url_epigrafe.indexOf(\"live.vocento.com/scribblelive/redirect.php?recid=\") > -1 && SL_url_epigrafe.indexOf(\"medio=\") == -1) {\n\t var re = new RegExp(\"recid=([^&].*)\");\n\t var parametrosLlamada = \"&medio=\" + medio;\n\t if (edicion != null && edicion != \"null\" && edicion.replace(/\\s/g, \"\") != \"\") {\n\t parametrosLlamada = parametrosLlamada + \"&edicionLocal=\" + edicion;\n\t }\n\t SL_url_epigrafe = SL_url_epigrafe.replace(re, \"recid=$1\" + parametrosLlamada);\n\t }\n\t SL_valor_epigrafe = \"\" + SL_valor_epigrafe + \"\";\n\t }\n\t if ((tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") && SL_url_epigrafe != null) {\n\t $(\"#enlaceSLElecciones2015\").attr(\"href\", urlAbsoluta(SL_url_epigrafe));\n\t } else {\n\t $(\"#SL_epigrafe\").html(SL_valor_epigrafe);\n\t $(\"#SL_epigrafe\").show();\n\t }\n\t\n\t var marcadorManualActivo = false;\n\t // Eventos. Si hay más de uno se muestran las pestañas\n\t var numEventos = 0;\n\t\n\t if ((tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") && typeof SL_valor_evento1URLPaginaDetalle != \"undefined\" && SL_valor_evento1URLPaginaDetalle != null && SL_valor_evento1URLPaginaDetalle != \"\") {\n\t var urlAbs = urlAbsoluta(SL_valor_evento1URLPaginaDetalle);\n\t $(\"#spanSDElecciones2015\").html(\"Sigue el Directo\");\n\t }\n\t if (SL_valor_evento1ID != null && SL_valor_evento1ID != \"\" && SL_valor_evento1Titulo != null) {\n\t var cambiaPestanaCfg = {\n\t escribeCapaJs: escribeCapaJs,\n\t ColumnLocation: ColumnLocation,\n\t SL_valor_numeroMensajesPagina: SL_valor_numeroMensajesPagina,\n\t PageNumber: PageNumber,\n\t medio: medio,\n\t edicion: edicion,\n\t SL_valor_plantilla: SL_valor_plantilla,\n\t Scribble_ancho: Scribble_ancho,\n\t Scribble_alto: Scribble_alto,\n\t Scribble_pageElementId: Scribble_pageElementId,\n\t Scribble_template: Scribble_template,\n\t Scribble_template_twitter: Scribble_template_twitter,\n\t Scribble_dateFormat: Scribble_dateFormat,\n\t Scribble_todayDateFormat: Scribble_todayDateFormat,\n\t Scribble_Iframe_API: Scribble_Iframe_API,\n\t APIToken: APIToken,\n\t Scribble_API: Scribble_API,\n\t numPestana: 1,\n\t idEvento: SL_valor_evento1ID,\n\t urlPaginaDetalle: SL_valor_evento1URLPaginaDetalle,\n\t avatar: avatar1,\n\t tituloPestana: SL_valor_evento1Titulo\n\t };\n\t var strCfg = JSON.stringify(cambiaPestanaCfg);\n\t var codigoHTMLPestana1 = '' + SL_valor_evento1Titulo + '';\n\t $(\"#SL_pestana1\").html(codigoHTMLPestana1);\n\t if (document.getElementById(\"contentMarcador1\") && $.trim(document.getElementById(\"contentMarcador1\").innerHTML) != '') {\n\t $(\"#SL_marcadorDirecto1\").html(document.getElementById(\"contentMarcador1\").innerHTML);\n\t if (document.getElementById(\"contentMarcador1Manual\")) {\n\t $(\"#SL_marcadorDirecto1\").addClass(\"nmarcador\");\n\t $(\"#SL_marcadoresDirecto\").addClass(\"noticia-marcador\");\n\t $(\"#SL_marcadoresDirecto\").css(\"position\", \"relative\");\n\t marcadorManualActivo = true;\n\t }\n\t $(\"#SL_marcadorDirecto1\").show();\n\t }\n\t numEventos++;\n\t }\n\t\n\t if (SL_valor_evento2ID != null && SL_valor_evento2ID != \"\" && SL_valor_evento2Titulo != null) {\n\t var _cambiaPestanaCfg = {\n\t escribeCapaJs: escribeCapaJs,\n\t ColumnLocation: ColumnLocation,\n\t SL_valor_numeroMensajesPagina: SL_valor_numeroMensajesPagina,\n\t PageNumber: PageNumber,\n\t medio: medio,\n\t edicion: edicion,\n\t SL_valor_plantilla: SL_valor_plantilla,\n\t Scribble_ancho: Scribble_ancho,\n\t Scribble_alto: Scribble_alto,\n\t Scribble_pageElementId: Scribble_pageElementId,\n\t Scribble_template: Scribble_template,\n\t Scribble_template_twitter: Scribble_template_twitter,\n\t Scribble_dateFormat: Scribble_dateFormat,\n\t Scribble_todayDateFormat: Scribble_todayDateFormat,\n\t Scribble_Iframe_API: Scribble_Iframe_API,\n\t APIToken: APIToken,\n\t Scribble_API: Scribble_API,\n\t numPestana: 2,\n\t idEvento: SL_valor_evento2ID,\n\t urlPaginaDetalle: SL_valor_evento2URLPaginaDetalle,\n\t avatar: avatar2,\n\t tituloPestana: SL_valor_evento2Titulo\n\t };\n\t var _strCfg = JSON.stringify(_cambiaPestanaCfg);\n\t var codigoHTMLPestana2 = '' + SL_valor_evento2Titulo + '';\n\t $(\"#SL_pestana2\").html(codigoHTMLPestana2);\n\t $(\"#SL_pestana2\").show();\n\t if (document.getElementById(\"contentMarcador2\") && $.trim(document.getElementById(\"contentMarcador2\").innerHTML) != '') {\n\t\n\t $(\"#SL_marcadorDirecto2\").html(document.getElementById(\"contentMarcador2\").innerHTML);\n\t if (document.getElementById(\"contentMarcador2Manual\")) {\n\t $(\"#SL_marcadorDirecto2\").addClass(\"nmarcador\");\n\t $(\"#SL_marcadoresDirecto\").addClass(\"noticia-marcador\");\n\t $(\"#SL_marcadoresDirecto\").css(\"position\", \"relative\");\n\t }\n\t }\n\t numEventos++;\n\t }\n\t\n\t if (SL_valor_evento3ID != null && SL_valor_evento3ID != \"\" && SL_valor_evento3Titulo != null) {\n\t var _cambiaPestanaCfg2 = {\n\t escribeCapaJs: escribeCapaJs,\n\t ColumnLocation: ColumnLocation,\n\t SL_valor_numeroMensajesPagina: SL_valor_numeroMensajesPagina,\n\t PageNumber: PageNumber,\n\t medio: medio,\n\t edicion: edicion,\n\t SL_valor_plantilla: SL_valor_plantilla,\n\t Scribble_ancho: Scribble_ancho,\n\t Scribble_alto: Scribble_alto,\n\t Scribble_pageElementId: Scribble_pageElementId,\n\t Scribble_template: Scribble_template,\n\t Scribble_template_twitter: Scribble_template_twitter,\n\t Scribble_dateFormat: Scribble_dateFormat,\n\t Scribble_todayDateFormat: Scribble_todayDateFormat,\n\t Scribble_Iframe_API: Scribble_Iframe_API,\n\t APIToken: APIToken,\n\t Scribble_API: Scribble_API,\n\t numPestana: 3,\n\t idEvento: SL_valor_evento3ID,\n\t urlPaginaDetalle: SL_valor_evento3URLPaginaDetalle,\n\t avatar: avatar3,\n\t tituloPestana: SL_valor_evento3Titulo\n\t };\n\t var _strCfg2 = JSON.stringify(_cambiaPestanaCfg2);\n\t var codigoHTMLPestana3 = '' + SL_valor_evento3Titulo + '';\n\t $(\"#SL_pestana3\").html(codigoHTMLPestana3);\n\t $(\"#SL_pestana3\").show();\n\t if (document.getElementById(\"contentMarcador3\") && $.trim(document.getElementById(\"contentMarcador3\").innerHTML) != '') {\n\t $(\"#SL_marcadorDirecto3\").html(document.getElementById(\"contentMarcador3\").innerHTML);\n\t if (document.getElementById(\"contentMarcador3Manual\")) {\n\t $(\"#SL_marcadorDirecto3\").addClass(\"nmarcador\");\n\t $(\"#SL_marcadoresDirecto\").addClass(\"noticia-marcador\");\n\t $(\"#SL_marcadoresDirecto\").css(\"position\", \"relative\");\n\t }\n\t }\n\t numEventos++;\n\t }\n\t\n\t if (SL_valor_evento4ID != null && SL_valor_evento4ID != \"\" && SL_valor_evento4Titulo != null) {\n\t var _cambiaPestanaCfg3 = {\n\t escribeCapaJs: escribeCapaJs,\n\t ColumnLocation: ColumnLocation,\n\t SL_valor_numeroMensajesPagina: SL_valor_numeroMensajesPagina,\n\t PageNumber: PageNumber,\n\t medio: medio,\n\t edicion: edicion,\n\t SL_valor_plantilla: SL_valor_plantilla,\n\t Scribble_ancho: Scribble_ancho,\n\t Scribble_alto: Scribble_alto,\n\t Scribble_pageElementId: Scribble_pageElementId,\n\t Scribble_template: Scribble_template,\n\t Scribble_template_twitter: Scribble_template_twitter,\n\t Scribble_dateFormat: Scribble_dateFormat,\n\t Scribble_todayDateFormat: Scribble_todayDateFormat,\n\t Scribble_Iframe_API: Scribble_Iframe_API,\n\t APIToken: APIToken,\n\t Scribble_API: Scribble_API,\n\t numPestana: 4,\n\t idEvento: SL_valor_evento4ID,\n\t urlPaginaDetalle: SL_valor_evento4URLPaginaDetalle,\n\t avatar: avatar4,\n\t tituloPestana: SL_valor_evento4Titulo\n\t };\n\t var _strCfg3 = JSON.stringify(_cambiaPestanaCfg3);\n\t\n\t var codigoHTMLPestana4 = '' + SL_valor_evento4Titulo + '';\n\t $(\"#SL_pestana4\").html(codigoHTMLPestana4);\n\t $(\"#SL_pestana4\").show();\n\t if (document.getElementById(\"contentMarcador4\") && $.trim(document.getElementById(\"contentMarcador4\").innerHTML) != '') {\n\t $(\"#SL_marcadorDirecto4\").html(document.getElementById(\"contentMarcador4\").innerHTML);\n\t if (document.getElementById(\"contentMarcador4Manual\")) {\n\t $(\"#SL_marcadorDirecto4\").addClass(\"nmarcador\");\n\t $(\"#SL_marcadoresDirecto\").addClass(\"noticia-marcador\");\n\t $(\"#SL_marcadoresDirecto\").css(\"position\", \"relative\");\n\t }\n\t }\n\t numEventos++;\n\t }\n\t\n\t if (marcadorManualActivo) {\n\t $(\"#SL_marcadoresDirecto\").css(\"margin-top\", \"44px\");\n\t }\n\t if (numEventos < 2) {\n\t // No se muestran las pestañas\n\t $(\"#SL_pestanas\").css(\"display\", \"none\");\n\t } else {\n\t // Se muestran las pestañas al haber más de un evento activo\n\t $(\"#SL_pestanas\").css(\"display\", \"block\");\n\t }\n\t\n\t // Por defecto siempre se muestra el primer evento\n\t SL_cambiaPestana({\n\t escribeCapaJs: escribeCapaJs,\n\t ColumnLocation: ColumnLocation,\n\t SL_valor_numeroMensajesPagina: SL_valor_numeroMensajesPagina,\n\t PageNumber: PageNumber,\n\t medio: medio,\n\t edicion: edicion,\n\t SL_valor_plantilla: SL_valor_plantilla,\n\t Scribble_ancho: Scribble_ancho,\n\t Scribble_alto: Scribble_alto,\n\t Scribble_pageElementId: Scribble_pageElementId,\n\t Scribble_template: Scribble_template,\n\t Scribble_template_twitter: Scribble_template_twitter,\n\t Scribble_dateFormat: Scribble_dateFormat,\n\t Scribble_todayDateFormat: Scribble_todayDateFormat,\n\t Scribble_Iframe_API: Scribble_Iframe_API,\n\t APIToken: APIToken,\n\t Scribble_API: Scribble_API,\n\t numPestana: 1,\n\t idEvento: SL_valor_evento1ID,\n\t urlPaginaDetalle: SL_valor_evento1URLPaginaDetalle,\n\t avatar: avatar1,\n\t tituloPestana: SL_valor_evento1Titulo,\n\t container$: container$\n\t });\n\t $(\"#SL_pestana1\").addClass('activo');\n\t}\n\t\n\t/* ----------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t CÓDIGO ESPECÍFICO PARA MOSTRAR LOS MENSAJES DE SCRIBBLELIVE\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-------------------------------------------------------------------------------------------------------------\n\t-----------------------------------------------------------------------------------------------------------*/\n\t\n\tfunction InvocaScribbleLive(Opciones) {\n\t\n\t // Inicialización por defecto de los parámetros de Scribble\n\t this.Opciones = {\n\t // You can find your API tokens - and generate new ones - under the general API section of your ScribbleLive back end. https://client.scribblelive.com/client/API.aspx\n\t APIToken: \"\",\n\t // You can find your event id under the API section of your event in the ScribbleLive back end. You can also view source on your event and search for \"ThreadId\".\n\t EventId: \"\",\n\t // The number of posts you would like to display.\n\t TotalPostsToShow: 10,\n\t // Show images, true or false.\n\t ShowImages: true,\n\t // Show videos, true or false.\n\t ShowVideos: true,\n\t // Show audio, true or false.\n\t ShowAudio: true,\n\t // Show stuck posts, true or false.\n\t ShowStuckPosts: true,\n\t //Show avatars, true or false.\n\t ShowAvatars: false,\n\t // Show text posts, true or false.\n\t ShowTextPosts: true,\n\t // Show polls, true or false.\n\t ShowPolls: false,\n\t // Show media captions, true or false.\n\t ShowCaptions: true,\n\t // Show comments, true or false.\n\t ShowComments: true,\n\t // Show official (writer, editor, moderator, administrator, guest writer, etc.) posts, true or false.\n\t ShowOfficialPosts: true,\n\t // Show Twitter posts, true or false.\n\t ShowTweets: true,\n\t // Show mobile posts, true of false.\n\t ShowMobilePosts: true,\n\t // Show Facebook posts, true or false.\n\t ShowFacebookPosts: true,\n\t // Show only Twitter posts, true or false.\n\t ShowOnlyTweets: false,\n\t // Show only Facebook posts, true or false.\n\t ShowOnlyFacebookPosts: false,\n\t // Show only polls, true or false.\n\t ShowOnlyPolls: false,\n\t // Tiempo de recarga\n\t AutoUpdateTimeOut: 10,\n\t // Formato de fecha para un mensaje anterior al día de hoy\n\t DateFormat: \"HH:mm:ss\",\n\t // Formato de fecha para un mensaje del día de hoy\n\t TodayDateFormat: \"HH:mm:ss\",\n\t // Id de la capa donde irá incrustado todo el contenido de ScribbleLive\n\t PageElementId: \"\",\n\t // Ruta de la plantilla que se usará para mostrar cada uno de los mensajes\n\t Template: \"\",\n\t // Ruta de la plantilla que se usará para mostrar un mensaje de Twitter en un artículo noticia\n\t TemplateTwitter: null,\n\t // Id de la capa del elemento HTML que incluirá en su interior cada uno de los mensajes\n\t HTMLElementId: \"\",\n\t // Posición del módulo en la página (AB, B, C)\n\t ColumnLocation: \"C\",\n\t // Medio\n\t Medio: \"\",\n\t // Edición local\n\t Edicion: \"\",\n\t Scribble_API: \"\",\n\t UrlPaginaDetalle: \"\",\n\t PageNumber: 'last'\n\t };\n\t\n\t // Inicializa los parámetros de la función\n\t for (var opt in Opciones) {\n\t if (Opciones.hasOwnProperty(opt)) {\n\t this.Opciones[opt] = Opciones[opt];\n\t }\n\t }\n\t\n\t // Número de mensajes a mostrar\n\t if (this.Opciones.TotalPostsToShow == \"\" || isNaN(this.Opciones.TotalPostsToShow)) {\n\t this.Opciones.TotalPostsToShow = 10;\n\t }\n\t if (this.Opciones.TotalPostsToShow > 100 && this.Opciones.ColumnLocation != \"AB\") {\n\t this.Opciones.TotalPostsToShow = 50;\n\t }\n\t\n\t // Tiempo mínimo (en segundos) de recarga del contenido\n\t if (this.Opciones.AutoUpdateTimeOut < 10) {\n\t this.Opciones.AutoUpdateTimeOut = 10;\n\t }\n\t\n\t // Detiene cualquier posible llamada anterior al método\n\t this.clearDelayFetch(Wait);\n\t\n\t // Objeto XMLHttpRequest para los distintos navegadores\n\t xmlHttp = getHTTPObject();\n\t\n\t // Momento de última modificación\n\t this.LastModifiedTime = \"\";\n\t\n\t // User agent del dispositivo\n\t this.DeviceAgent = navigator.userAgent.toLowerCase();\n\t\n\t // Índice para los eventos múltiples del script\n\t\n\t this.InstanceIndex = InvocaScribbleLive.StoreInstance(this);\n\t\n\t instanceIndex = this.InstanceIndex;\n\t\n\t // Array con los elementos originales\n\t this.originales = new Array();\n\t\n\t // Array con los elementos JSON a mostrar\n\t this.elementos = new Array();\n\t\n\t // Array con los mensajes fijos\n\t this.fijos = new Array();\n\t\n\t // Obtiene el contenido de la plantilla\n\t this.TemplateData = this.Opciones.Template;\n\t\n\t // Plantilla de Twitter para el artículo noticia\n\t this.TemplateTwitter = this.Opciones.TemplateTwitter;\n\t if (this.TemplateTwitter != null) {\n\t this.TemplateTwitter = this.Opciones.TemplateTwitter;\n\t }\n\t\n\t // Indica que se trata de la carga inicial\n\t this.inicial = true;\n\t\n\t // Obtiene los mensajes más recientes. Esta llamada solo se hace la primera vez que se carga el módulo\n\t this.GetAllPosts();\n\t}\n\t\n\t// Índice\n\tInvocaScribbleLive.Index = 0;\n\t\n\t// The function that decides which instance of the recent posts object is currently being used.\n\tInvocaScribbleLive.GetInstance = function (pIndex) {\n\t\n\t if (InvocaScribbleLive.__instances == undefined) {\n\t return undefined;\n\t } else {\n\t return InvocaScribbleLive.__instances[\"\" + pIndex];\n\t }\n\t};\n\t\n\t// The function that sets the instance of the recent posts object.\n\tInvocaScribbleLive.StoreInstance = function (pInvocaScribbleLiveInstance) {\n\t\n\t if (InvocaScribbleLive.__instances == undefined) {\n\t InvocaScribbleLive.__instances = [];\n\t }\n\t\n\t var _Index = InvocaScribbleLive.Index;\n\t InvocaScribbleLive.Index++;\n\t\n\t InvocaScribbleLive.__instances[_Index] = pInvocaScribbleLiveInstance;\n\t\n\t return _Index;\n\t};\n\t\n\t// Aquí se muestran los post obtenidos de la llamada recursiva\n\tInvocaScribbleLive.prototype.DrawPosts = function (pResponse) {\n\t // Array de comprobación de mensajes \"editados\" que son realmente mensajes nuevos\n\t var insertadosDesdeEdicion = new Array();\n\t var addedNewPosts = false;\n\t var newPostsCount = 0;\n\t if (!this.inicial) {\n\t\n\t if (pResponse.Edits != undefined) {\n\t // Obtiene el máximo Id que se muestra actualmente, es decir, el id del mensaje más reciente\n\t var maxId = 0;\n\t try {\n\t for (var mi = 0; mi < this.elementos.length; mi++) {\n\t if (maxId < parseInt(this.elementos[mi].Id)) {\n\t maxId = parseInt(this.elementos[mi].Id);\n\t }\n\t }\n\t } catch (e) {}\n\t for (var ed = 0; ed < pResponse.Edits.length; ed++) {\n\t // Si el Id del mensaje editado es superior al Id más reciente acumulado hasta el momento\n\t // indica que se trata de un nuevo post posiblemente con origen sindicado\n\t if (parseInt(pResponse.Edits[ed].Id) > maxId) {\n\t insertadosDesdeEdicion.push(parseInt(pResponse.Edits[ed].Id));\n\t // Se trata como un mensaje nuevo\n\t addedNewPosts = this.AddPost(pResponse.Edits[ed]);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Añade los nuevos elementos a la lista JSON\n\t if (pResponse.Posts != undefined) {\n\t for (var p = 0; p < pResponse.Posts.length; p++) {\n\t addedNewPosts = this.AddPost(pResponse.Posts[p]);\n\t }\n\t }\n\t\n\t // Actualiza los elementos editados si están en la lista a mostrar y no han sido ya modificados\n\t var arrayEdicion = new Array();\n\t var arrayFijosEdicion = new Array();\n\t if (pResponse.Edits != undefined) {\n\t for (var e = 0; e < pResponse.Edits.length; e++) {\n\t // Se comprueba que el elemento no esté ya el array de insertados desde edición,\n\t // en cuyo caso no hay nada que editar al tratarse de un mensaje nuevo\n\t if ($.inArray(parseInt(pResponse.Edits[e].Id), insertadosDesdeEdicion) == -1) {\n\t for (var b = 0; b < this.elementos.length; b++) {\n\t pResponse.Edits[e].LastModified = pResponse.Edits[e].LastModified.replace(/\\+0000/g, \"\");\n\t var PostLastModified = eval(\"new \" + pResponse.Edits[e].LastModified.replace(/\\//g, \"\"));\n\t\n\t if (pResponse.Edits[e].Id == parseInt(this.elementos[b].Id) && PostLastModified > this.LastModifiedTime) {\n\t var arrayEdiciones = this.EditPost(pResponse.Edits[e]);\n\t if (arrayEdiciones[0] > -1) {\n\t arrayEdicion.push(arrayEdiciones[0]);\n\t }\n\t if (arrayEdiciones[1] > -1) {\n\t arrayFijosEdicion.push(arrayEdiciones[1]);\n\t }\n\t }\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Si hay elementos eliminados comprueba que estén en la lista a mostrar y en tal caso los elimina\n\t var eliminados = 0;\n\t if (pResponse.Deletes != undefined) {\n\t for (var d = 0; d < pResponse.Deletes.length; d++) {\n\t for (var a = 0; a < this.elementos.length; a++) {\n\t if (pResponse.Deletes[d].Id == parseInt(this.elementos[a].Id)) {\n\t var eliminado = this.DeletePost(pResponse.Deletes[d].Id);\n\t if (eliminado) {\n\t eliminados++;\n\t }\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Copia con los elementos originales\n\t if (this.inicial) {\n\t this.originales = this.elementos.slice();\n\t }\n\t\n\t // Elimina los elementos sobrantes\n\t if (tipoEspecial != \"elecciones-2015\" || !isArticulo) {\n\t while (this.elementos.length > this.Opciones.TotalPostsToShow) {\n\t this.elementos.pop();\n\t }\n\t }\n\t\n\t // Rehace el array de elementos si ha habido alguna eliminación\n\t if (tipoEspecial != \"elecciones-2015\" || !isArticulo) {\n\t if (!this.inicial && this.elementos.length < this.Opciones.TotalPostsToShow && this.originales.length >= this.Opciones.TotalPostsToShow) {\n\t for (var i = this.elementos.length; this.elementos.length < this.Opciones.TotalPostsToShow; i++) {\n\t this.elementos.push(this.originales[i]);\n\t }\n\t }\n\t }\n\t\n\t // Obtiene el momento de última modificación del evento\n\t pResponse.LastModified = pResponse.LastModified.replace(/\\+0000/g, \"\"); //octal literales forbidden in scrict mode\n\t this.LastModifiedTime = eval(\"new \" + pResponse.LastModified.replace(/\\//g, \"\"));\n\t\n\t // Última página. Se le resta uno pues en realidad da la longitud de páginas, no la última (el muy gilipollas)\n\t lastPage = pResponse.Pages - 1;\n\t if (this.inicial) {\n\t pageToGet = lastPage - 1;\n\t if (pageToGet < 0) {\n\t pageToGet = 0;\n\t }\n\t }\n\t\n\t // Se formatea cada uno de elementos del JSON\n\t this.EditJsonElement(pResponse);\n\t\n\t // Divs actuales de la página\n\t var divs = document.getElementsByTagName('div');\n\t var divsArray = new Array();\n\t\n\t // Busca el primero div de la serie anterior de mensajes (solo lo encontrará si no es la primera carga), es decir, el mensaje más reciente hasta el momento\n\t var primerIdAntiguo = null;\n\t // Filtra solo los div de ScribbleLive y añade nuevos div con los nuevos mensajes\n\t for (var i = 0; i < divs.length; i++) {\n\t if (divs[i].id.indexOf(this.Opciones.HTMLElementId) > -1) {\n\t divsArray.push(divs[i]);\n\t if (!this.inicial && primerIdAntiguo == null) {\n\t primerIdAntiguo = divs[i].id;\n\t }\n\t }\n\t }\n\t\n\t var pintados = 0;\n\t for (var i = 0; i < this.elementos.length; i++) {\n\t var contiene = false;\n\t for (var j = 0; j < divsArray.length; j++) {\n\t // Comprueba si el div ya está incluido en la página\n\t if (divsArray[j].id == this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id) {\n\t contiene = true;\n\t break;\n\t }\n\t }\n\t // Si el div no está incluido se pinta en la página\n\t if (!contiene) {\n\t var capa = document.createElement('div');\n\t capa.id = this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id;\n\t if (isTwitterPost(this.elementos[i], this.TemplateTwitter)) {\n\t capa.innerHTML = this.TemplateTwitter;\n\t } else {\n\t capa.innerHTML = this.TemplateData;\n\t }\n\t if (primerIdAntiguo != null) {\n\t if (eliminados > 0) {\n\t if ($(\".mCSB_container\").length) {\n\t $(\".mCSB_container\").append(capa);\n\t } else {\n\t $(\"#\" + this.Opciones.PageElementId).append(capa);\n\t }\n\t eliminados--;\n\t } else {\n\t newPostsCount++;\n\t $(capa).insertBefore($(\"#\" + primerIdAntiguo));\n\t }\n\t } else {\n\t // Si es la carga inicial añade el elemento al final\n\t document.getElementById(this.Opciones.PageElementId).appendChild(capa);\n\t }\n\t\n\t // Render vía tempo del mensaje\n\t this.tempoRender(capa, { escape: false }, this.elementos[i]);\n\t pintados++;\n\t }\n\t // Si hay que editar el post se actualiza la capa\n\t if (arrayEdicion.length > 0) {\n\t for (var k = 0; k < arrayEdicion.length; k++) {\n\t if (i == arrayEdicion[k]) {\n\t var id = this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id;\n\t var capa = document.getElementById(id);\n\t if (isTwitterPost(this.elementos[i], this.TemplateTwitter)) {\n\t capa.innerHTML = this.TemplateTwitter;\n\t } else {\n\t capa.innerHTML = this.TemplateData;\n\t }\n\t try {\n\t document.getElementById(this.Opciones.PageElementId).replaceChild(capa, document.getElementById(id));\n\t } catch (errorEdit) {}\n\t this.tempoRender(capa, { escape: false }, this.elementos[i]);\n\t break;\n\t }\n\t }\n\t }\n\t }\n\t\n\t if (!this.inicial) {\n\t // Elimina los posibles elementos sobrantes (post antiguos)\n\t for (var i = 0; i < divsArray.length; i++) {\n\t var contiene = false;\n\t for (var j = 0; j < this.elementos.length; j++) {\n\t var id = this.Opciones.HTMLElementId + \"-\" + this.elementos[j].Id;\n\t if (divsArray[i].id == id) {\n\t contiene = true;\n\t break;\n\t }\n\t }\n\t if (!contiene) {\n\t $(\"#\" + divsArray[i].id).remove();\n\t }\n\t }\n\t\n\t // Posiciona los mensajes fijos en los primeros lugares\n\t var stuckPosition = 0;\n\t for (var i = 0; i < this.fijos.length; i++) {\n\t // Id del elemento a reemplazar. Ha de ser no fijo\n\t var toBeReplacedId = null;\n\t for (var j = 0; j < this.elementos.length; j++) {\n\t if (this.elementos[j].IsStuck != 1) {\n\t toBeReplacedId = this.Opciones.HTMLElementId + \"-\" + this.elementos[j].Id;\n\t break;\n\t }\n\t }\n\t if (toBeReplacedId != null) {\n\t // Id del elemento fijo\n\t var stuckedId = this.Opciones.HTMLElementId + \"-\" + this.fijos[i].Id;\n\t // Mueve el elemento fijo a la posición indicada por stuckPosition, siempre y cuando no sea la posición que ya ocupaba previamente\n\t if (toBeReplacedId != stuckedId && $(\"#\" + toBeReplacedId).isBefore($(\"#\" + stuckedId))) {\n\t // Borra el elemento fijo de su antigua posición\n\t if (document.getElementById(stuckedId)) {\n\t $(\"#\" + stuckedId).remove();\n\t }\n\t // Capa con el mensaje\n\t var capa = document.createElement('div');\n\t capa.id = stuckedId;\n\t if (isTwitterPost(this.fijos[i], this.TemplateTwitter)) {\n\t capa.innerHTML = this.TemplateTwitter;\n\t } else {\n\t capa.innerHTML = this.TemplateData;\n\t }\n\t // Inserta el elemento fijo en la posición stuckPosition\n\t $(capa).insertBefore($(\"#\" + toBeReplacedId));\n\t this.tempoRender(capa, { escape: false }, this.fijos[i]);\n\t }\n\t stuckPosition++;\n\t }\n\t // Elementos fijos editados\n\t for (var k = 0; k < arrayFijosEdicion.length; k++) {\n\t if (i == arrayFijosEdicion[k]) {\n\t var id = stuckedId;\n\t var capa = document.getElementById(id);\n\t if (isTwitterPost(this.fijos[i], this.TemplateTwitter)) {\n\t capa.innerHTML = this.TemplateTwitter;\n\t } else {\n\t capa.innerHTML = this.TemplateData;\n\t }\n\t document.getElementById(this.Opciones.PageElementId).replaceChild(capa, document.getElementById(id));\n\t\n\t this.tempoRender(capa, { escape: false }, this.fijos[i]);\n\t break;\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Mensajes más nuevos\n\t lastMessages = false;\n\t\n\t // Llamada repetitiva para obtener nuevos mensajes\n\t this.setRetryFetch();\n\t\n\t if (window.twttr) {\n\t window.twttr.widgets.load();\n\t }\n\t\n\t if (this.inicial || addedNewPosts) {\n\t //Refrescamos video-player para que funcione\n\t Voonto.getInstance().trigger('videoplayer:refresh', [$('.voc-live-scribble')]);\n\t Voonto.getInstance().trigger('videoplayer:refresh', [$('.voc-live-module')]);\n\t }\n\t\n\t this.inicial ? this.triggerFullItemsRendered() : this.triggerFullItemsRendered(newPostsCount);\n\t\n\t this.inicial = false;\n\t};\n\t\n\tInvocaScribbleLive.prototype.triggerFullItemsRendered = function (itemsCount) {\n\t var _this = this;\n\t\n\t window.setTimeout(function () {\n\t if (itemsCount) {\n\t window.Voonto.getInstance().trigger('scribblelive:updated', [_this.Opciones.container$.children().slice(0, itemsCount).get()]);\n\t } else {\n\t window.Voonto.getInstance().promised('scribblelive:ready', _this.Opciones.container$.get(0));\n\t }\n\t }, 0);\n\t};\n\t\n\tInvocaScribbleLive.prototype.setRetryFetch = function (time) {\n\t this.clearDelayFetch(this.Wait);\n\t this.Wait = this.setDelayFetch(time);\n\t};\n\t\n\tInvocaScribbleLive.prototype.setDelayFetch = function (time) {\n\t var _this2 = this;\n\t\n\t this.Wait = setTimeout(function () {\n\t InvocaScribbleLive.GetInstance(_this2.InstanceIndex).GetNewPosts();\n\t }, (time || this.Opciones.AutoUpdateTimeOut) * 1000);\n\t return this.Wait;\n\t};\n\t\n\tInvocaScribbleLive.prototype.clearDelayFetch = function (clearId) {\n\t clearTimeout(clearId || this.Wait);\n\t};\n\t\n\t// Muestra los post antiguos\n\tInvocaScribbleLive.prototype.DrawOldPosts = function (pResponse) {\n\t\n\t // Si no obtiene nada no sigue la ejecución\n\t if (pResponse.Posts.length == 0) {\n\t $(\"#SL_loadingPages\").hide();\n\t return;\n\t }\n\t\n\t // Añade los nuevos elementos a la lista JSON\n\t if (pResponse.Posts != undefined) {\n\t for (var p = 0; p < pResponse.Posts.length; p++) {\n\t this.AddPost(pResponse.Posts[p]);\n\t }\n\t }\n\t\n\t // Se formatea cada uno de elementos del JSON\n\t this.EditJsonElement(pResponse);\n\t\n\t // Divs actuales de la página\n\t var divs = document.getElementsByTagName('div');\n\t var divsArray = new Array();\n\t var ultimoIdAntiguo = null;\n\t // Filtra solo los div de ScribbleLive y añade nuevos div con los nuevos mensajes\n\t for (var i = 0; i < divs.length; i++) {\n\t if (divs[i].id.indexOf(this.Opciones.HTMLElementId) > -1) {\n\t divsArray.push(divs[i]);\n\t }\n\t }\n\t ultimoIdAntiguo = divsArray[divsArray.length - 1].id;\n\t\n\t for (var i = 0; i < this.elementos.length; i++) {\n\t var contiene = false;\n\t for (var j = 0; j < divsArray.length; j++) {\n\t // Comprueba si el div ya está incluido en la página\n\t if (divsArray[j].id == this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id) {\n\t contiene = true;\n\t break;\n\t }\n\t }\n\t // Si el div no está incluido se pinta en la página\n\t if (!contiene) {\n\t var capa = document.createElement('div');\n\t capa.id = this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id;\n\t if (isTwitterPost(this.elementos[i], this.TemplateTwitter)) {\n\t capa.innerHTML = this.TemplateTwitter;\n\t } else {\n\t capa.innerHTML = this.TemplateData;\n\t }\n\t $(capa).insertAfter($(\"#\" + ultimoIdAntiguo));\n\t // Render vía tempo del mensaje\n\t this.tempoRender(capa, { escape: false }, this.elementos[i]);\n\t }\n\t }\n\t\n\t this.triggerFullItemsRendered();\n\t\n\t $(\"#SL_loadingPages\").hide();\n\t};\n\t\n\tInvocaScribbleLive.prototype.tempoRender = function (capa, scape, elemento) {\n\t _tempo2.default.prepare(capa, scape).when('render_complete', function (_ref3) {\n\t var type = _ref3.type,\n\t element = _ref3.element;\n\t\n\t window.Voonto.getInstance().trigger('scribblelive:item-rendered', element);\n\t }).render(elemento);\n\t};\n\t\n\t// Obtiene el caption (pie) de un elemento\n\tInvocaScribbleLive.prototype.GetCaption = function (Content) {\n\t var caption = \"\";\n\t if (Content.indexOf(\"p class=\\\"Caption\\\"\") > -1) {\n\t try {\n\t var m = /

(.*?)<\\/p>/g.exec(Content);\n\t if (m != null) {\n\t caption = m[1];\n\t }\n\t } catch (e) {}\n\t }\n\t if (Content.indexOf(\"figcaption\") > -1) {\n\t try {\n\t var m = /(.*?)<\\/figcaption>/g.exec(Content);\n\t if (m != null) {\n\t caption = m[2];\n\t }\n\t } catch (e) {}\n\t }\n\t return caption;\n\t};\n\t\n\t// Formatea un mensaje con un vídeo de Brightcove para invocar al player interno. El mensaje será del estilo ##[ID_DE_REFERENCIA]##\n\tInvocaScribbleLive.prototype.FormatVideoPlayer = function (Content) {\n\t\n\t var videoId;\n\t var origenVideo = \"bc\";\n\t var maBC = null;\n\t if (Content.indexOf(\" -1 && Content.indexOf(\"youtube.com\") > -1) {\n\t // Vídeo de YouTube\n\t var inicio = Content.indexOf(\"src=\") + 5;\n\t var videoPlayer = Content.substring(inicio, Content.indexOf(\"\\\"\", inicio));\n\t if (videoPlayer.indexOf(\"?\") > -1) {\n\t videoPlayer = videoPlayer.substring(0, videoPlayer.indexOf(\"?\"));\n\t }\n\t videoId = videoPlayer.substring(videoPlayer.lastIndexOf(\"/\") + 1, videoPlayer.length);\n\t origenVideo = \"youtube\";\n\t } else {\n\t // Transforma el id de ##[ID_DE_REFERENCIA]## a ID_DE_REFERENCIA\n\t maBC = reBC.exec(Content);\n\t videoId = maBC[0].replace(/#/g, '');\n\t videoId = videoId.replace(//g, '');\n\t videoId = videoId.replace(/<\\/small>/g, '');\n\t }\n\t\n\t var modal = true;\n\t var width = 150;\n\t if (this.Opciones.ColumnLocation == \"AB\") {\n\t width = 490;\n\t modal = false;\n\t }\n\t if (this.Opciones.ColumnLocation == \"C\") {\n\t if (tipoEspecial == \"elecciones-2015\") {\n\t width = 190;\n\t } else {\n\t width = 280;\n\t }\n\t }\n\t\n\t // Proporción 16:9\n\t var height = parseInt(width / 1.77777777);\n\t var brDiv = \"\";\n\t var brCall = \"\";\n\t // Capa donde se pintará el vídeo\n\t if (origenVideo != 'bc') {\n\t var media = Voonto.getInstance().lookup('vocento.site.media');\n\t brDiv += \"

\";\n\t } else {\n\t var media = Voonto.getInstance().lookup('vocento.site.media');\n\t brDiv += \" \";\n\t }\n\t\n\t var contenido;\n\t if (maBC) {\n\t contenido = Content.replace(reBC, brDiv);\n\t } else {\n\t contenido = Content.replace(//g, brDiv);\n\t }\n\t\n\t return [contenido, brCall];\n\t};\n\t\n\t// Formatea un mensaje con un vídeo de Brightcove contenido dentro de un object para invocar al player interno\n\tInvocaScribbleLive.prototype.FormatVideoObject = function (Content) {\n\t\n\t var start = Content.indexOf(\"\") + 9;\n\t // Id del vídeo (videoPlayer=X)\n\t var videoPlayer = Content.substring(Content.indexOf(\"videoPlayer=\") + 12, Content.indexOf(\"&\", Content.indexOf(\"videoPlayer=\")));\n\t if (isNaN(videoPlayer)) {\n\t // Busca de forma alternativa por (videoId=X)\n\t videoPlayer = Content.substring(Content.indexOf(\"videoId=\") + 8, Content.indexOf(\"&\", Content.indexOf(\"videoId=\")));\n\t if (isNaN(videoPlayer)) {\n\t return [Content, \"\"];\n\t }\n\t }\n\t\n\t var width = 150;\n\t if (this.Opciones.ColumnLocation == \"AB\") {\n\t width = 490;\n\t }\n\t if (this.Opciones.ColumnLocation == \"C\") {\n\t if (tipoEspecial == \"elecciones-2015\") {\n\t width = 190;\n\t } else {\n\t width = 280;\n\t }\n\t }\n\t // Proporción 16:9\n\t var height = parseInt(width / 1.77777777);\n\t\n\t // Capa donde se pintará el vídeo\n\t var brDiv = \"
\";\n\t // Llamada al JS\n\t //TODO Hacer la llamada al js necesario para videos que no sean youtube\n\t var brCall = \"\";\n\t\n\t var media = Voonto.getInstance().lookup('vocento.site.media');\n\t brDiv += \"
\";\n\t brDiv += \"\";\n\t brDiv += \"
\";\n\t brDiv += \" 2:10 \";\n\t brDiv += \"
\";\n\t brDiv += \"
\";\n\t brDiv += \"
\";\n\t\n\t return [Content.substring(0, start) + brDiv + Content.substring(end, Content.lentgh), brCall];\n\t};\n\t\n\t// Reescala un iframe para que encaje en el módulo\n\tInvocaScribbleLive.prototype.ResizeIframe = function (Content) {\n\t\n\t var regWidth = new RegExp(/(width=)('|\\\")(\\d+)('|\\\")/);\n\t var regHeight = new RegExp(/(height=)('|\\\")(\\d+)('|\\\")/);\n\t try {\n\t var width = regWidth.exec(Content)[3];\n\t var height = regHeight.exec(Content)[3];\n\t // Proporción de reducción\n\t var maxWidth = 280;\n\t if (this.Opciones.ColumnLocation == \"AB\") {\n\t maxWidth = 615;\n\t }\n\t if (this.Opciones.ColumnLocation == \"C\" && tipoEspecial == \"elecciones-2015\") {\n\t maxWidth = 190;\n\t }\n\t var proportion = 1.0;\n\t if (width > maxWidth) {\n\t proportion = width / maxWidth;\n\t width = parseInt(width / proportion);\n\t height = parseInt(height / proportion);\n\t }\n\t Content = Content.replace(regWidth, '$1$2' + width + '$4');\n\t Content = Content.replace(regHeight, '$1$2' + height + '$4');\n\t } catch (err) {}\n\t\n\t return Content;\n\t};\n\t\n\t// Tamaño de la imagen para el resizer\n\tInvocaScribbleLive.prototype.ResizeImageWidth = function () {\n\t var newWidth = 280;\n\t if (this.Opciones.ColumnLocation == \"C\" && tipoEspecial == \"elecciones-2015\") {\n\t maxWidth = 190;\n\t }\n\t if (this.Opciones.ShowAvatars == \"true\") {\n\t newWidth = 200;\n\t }\n\t if (this.Opciones.ColumnLocation == \"B\") {\n\t newWidth = newWidth - 55;\n\t } else if (this.Opciones.ColumnLocation == \"AB\") {\n\t newWidth = 615;\n\t }\n\t return newWidth;\n\t};\n\t\n\t// Redimensiona las imágenes\n\tInvocaScribbleLive.prototype.ResizeImage = function (Content) {\n\t var re = new RegExp(/['\"]/);\n\t var start = Content.indexOf(\" -1) {\n\t start = Content.indexOf(\"src=\", start + 1);\n\t if (start > -1) {\n\t var end = re.exec(Content.substring(start + 5, Content.length));\n\t var finalContent = Content.substring(start + 6 + end.index, Content.length);\n\t var urlImagen = Content.substring(start + 5, start + 5 + end.index);\n\t var imagen = \"src=\\\"\" + urlImagen + \"\\\"\";\n\t if (isUrlImagenInterna(urlImagen)) {\n\t imagen = \"src=\\\"\" + getMediaResizerUrl() + \"/resizer/resizer.php?imagen=\" + urlImagen + \"&nuevoancho=\" + newWidth + \"©right=conCopyright&encrypt=false\\\"\";\n\t }\n\t Content = Content.substring(0, start) + imagen + finalContent;\n\t }\n\t }\n\t return Content;\n\t};\n\t\n\t// Añade el elemento target=\"_blank\" a los enlaces de un mensaje y el parámetro \"medio\" y \"edicionLocal\" a las llamadas a \"live.vocento.com/scribblelive/redirect.php\"\n\tInvocaScribbleLive.prototype.FormatLink = function (Content) {\n\t // Expresión regular para sustituir la llamada al redirector de noticias de RC de ScribbleLive\n\t var re = new RegExp(\"recid=([^\\\"'].*)(\\\">|'>)\");\n\t var start = Content.toLowerCase().indexOf(\" -1) {\n\t var end = Content.toLowerCase().indexOf(\"\", start);\n\t if (end > -1) {\n\t var link = Content.substring(start, end + 4);\n\t // Comprueba si se trata de una llamada a \"live.vocento.com/scribblelive/redirect.php\"\n\t if (link.indexOf(\"live.vocento.com/scribblelive/redirect.php?recid=\") > -1 && link.indexOf(\"medio=\") == -1) {\n\t var parametrosLlamada = \"&medio=\" + this.Opciones.Medio;\n\t if (this.Opciones.Edicion != null && this.Opciones.Edicion.replace(/\\s/g, \"\") != \"\") {\n\t parametrosLlamada = parametrosLlamada + \"&edicionLocal=\" + this.Opciones.Edicion;\n\t }\n\t link = link.replace(re, \"recid=$1\" + parametrosLlamada + \"$2\");\n\t Content = Content.substring(0, start) + link + Content.substring(end + 4, Content.length);\n\t // Recalcula la nueva posición del fin del tag \n\t end = Content.toLowerCase().indexOf(\"\", start);\n\t }\n\t // Añade target blank a los enlaces\n\t if (link.toLowerCase().indexOf(\"target=\") == -1 && link.toLowerCase().indexOf(\"href=\") > -1) {\n\t link = link.replace(\"href=\", \"target=\\\"_blank\\\" href=\");\n\t Content = Content.substring(0, start) + link + Content.substring(end + 4, Content.length);\n\t }\n\t }\n\t start = Content.toLowerCase().indexOf(\" -1) {\n\t if (start > -1) {\n\t var end = re.exec(Content.substring(start + 7, Content.length));\n\t var finalContent = Content.substring(start + 8 + end.index, Content.length);\n\t Content = Content.substring(0, start) + \"width=\\\"\" + newWidth + \"\\\"\" + finalContent;\n\t }\n\t start = Content.indexOf(\"width=\", start + 1);\n\t }\n\t // Alto\n\t start = Content.indexOf(\"height=\");\n\t while (start > -1) {\n\t if (start > -1) {\n\t var end = re.exec(Content.substring(start + 8, Content.length));\n\t var finalContent = Content.substring(start + 9 + end.index, Content.length);\n\t Content = Content.substring(0, start) + \"height=\\\"180\\\"\" + finalContent;\n\t }\n\t start = Content.indexOf(\"height=\", start + 1);\n\t }\n\t return Content;\n\t};\n\t\n\t// The function that adds a post.\n\tInvocaScribbleLive.prototype.AddPost = function (pPost) {\n\t\n\t // A huge if statement that decides if it should be showing a post or not based on the options set when the widget is loaded.\n\t if (pPost.Type == \"IMAGE\" && !this.Opciones.ShowImages || pPost.Type == \"VIDEO\" && !this.Opciones.ShowVideos || pPost.Type == \"AUDIO\" && !this.Opciones.ShowAudio || pPost.IsStuck == 1 && !this.Opciones.ShowStuckPosts || pPost.Type == \"TEXT\" && !this.Opciones.ShowTextPosts || pPost.Type == \"POLL\" && !this.Opciones.ShowPolls || pPost.IsComment == 1 && !this.Opciones.ShowComments || pPost.IsComment == 0 && !this.Opciones.ShowOfficialPosts || pPost.Source.match(\"twitter\") && !this.Opciones.ShowTweets || !pPost.Source.match(\"twitter\") && this.Opciones.ShowOnlyTweets || (pPost.Source.match(\"mobile\") || pPost.Source.match(\"SMS\")) && !this.Opciones.ShowMobilePosts || pPost.Source.match(\"www.facebook.com\") && !this.Opciones.ShowFacebookPosts || !pPost.Source.match(\"www.facebook.com\") && this.Opciones.ShowOnlyFacebookPosts || pPost.Type != \"POLL\" && this.Opciones.ShowOnlyPolls) {\n\t return false;\n\t }\n\t\n\t // If the post you are trying to add is already on the page, stop trying to add it.\n\t for (var c = 0; c < this.elementos.length; c++) {\n\t if (pPost.Id == parseInt(this.elementos[c].Id)) {\n\t return false;\n\t }\n\t }\n\t\n\t // Si se trata de la carga inicial inserta los elementos al final del array, en caso contrario inserta los nuevos elementos al inicio del array\n\t if (this.inicial) {\n\t this.elementos.push(pPost);\n\t } else {\n\t this.elementos.unshift(pPost);\n\t this.originales.unshift(pPost);\n\t return true;\n\t }\n\t\n\t // Elemento fijo\n\t if (pPost.IsStuck == 1) {\n\t this.fijos.unshift(pPost);\n\t return true;\n\t }\n\t};\n\t\n\t// Elimina el elemento del array y de la página\n\tInvocaScribbleLive.prototype.DeletePost = function (pPostId) {\n\t for (var i = 0; i < this.originales.length; i++) {\n\t if (parseInt(this.originales[i].Id) == parseInt(pPostId)) {\n\t this.originales.splice(i, 1);\n\t }\n\t }\n\t for (var i = 0; i < this.fijos.length; i++) {\n\t if (parseInt(this.fijos[i].Id) == parseInt(pPostId)) {\n\t this.fijos.splice(i, 1);\n\t }\n\t }\n\t for (var i = 0; i < this.elementos.length; i++) {\n\t if (parseInt(this.elementos[i].Id) == parseInt(pPostId)) {\n\t this.elementos.splice(i, 1);\n\t // Elimina el elemento de la página\n\t $(\"#\" + this.Opciones.HTMLElementId + \"-\" + pPostId).remove();\n\t return true;\n\t }\n\t }\n\t return false;\n\t};\n\t\n\t// Reemplaza el elemento editado del array\n\tInvocaScribbleLive.prototype.EditPost = function (pPostToEdit) {\n\t\n\t for (var i = 0; i < this.originales.length; i++) {\n\t if (parseInt(this.originales[i].Id) == parseInt(pPostToEdit.Id)) {\n\t this.originales.splice(i, 1, pPostToEdit);\n\t }\n\t }\n\t var stuckedPos = -1;\n\t for (var i = 0; i < this.fijos.length; i++) {\n\t if (parseInt(this.fijos[i].Id) == parseInt(pPostToEdit.Id)) {\n\t if (pPostToEdit.IsStuck != 1) {\n\t this.fijos.splice(i, 1);\n\t } else {\n\t this.fijos.splice(i, 1, pPostToEdit);\n\t stuckedPos = i;\n\t }\n\t }\n\t }\n\t for (var i = 0; i < this.elementos.length; i++) {\n\t if (parseInt(this.elementos[i].Id) == parseInt(pPostToEdit.Id)) {\n\t this.elementos.splice(i, 1, pPostToEdit);\n\t return [i, stuckedPos];\n\t }\n\t }\n\t return [-1, -1];\n\t};\n\t\n\tInvocaScribbleLive.prototype.CapitalizeFirstLetter = function (string) {\n\t return string.charAt(0).toUpperCase() + string.slice(1);\n\t};\n\t\n\t// Formatea cada uno de los elementos de JSON en función de su contenido\n\tInvocaScribbleLive.prototype.EditJsonElement = function (pResponse) {\n\t\n\t // Elimina todos los elementos Posts del objeto JSON\n\t pResponse.Posts.splice(0, pResponse.Posts.length);\n\t // Hoy\n\t var today = moment(Date.now()).format(\"YYYYMMDD\");\n\t\n\t // Añade los elementos Posts correctos al objeto JSON\n\t for (var i = 0; i < this.elementos.length; i++) {\n\t try {\n\t this.elementos[i].LastModified = this.elementos[i].LastModified.replace(/\\+0000/g, \"\"); //octal literales forbidden in scrict mode\n\t var PostDate = eval(\"new \" + this.elementos[i].LastModified.replace(/\\//g, \"\"));\n\t\n\t // Formato de fecha de un mensaje escrito a día de hoy\n\t if (moment(PostDate).format(\"YYYYMMDD\") == today) {\n\t var duration = moment.duration(moment(Date.now()).diff(moment(PostDate)));\n\t\n\t if (duration.asSeconds() < 60) {\n\t this.elementos[i].FormattedDate = 'En este momento';\n\t } else if (duration.asMinutes() < 60) {\n\t this.elementos[i].FormattedDate = 'Hace ' + duration.minutes() + ' minutos';\n\t } else if (duration.asMinutes() < 120) {\n\t this.elementos[i].FormattedDate = 'Hace 1 hora';\n\t } else if (duration.asMinutes() < 180) {\n\t this.elementos[i].FormattedDate = 'Hace 2 horas';\n\t } else {\n\t this.elementos[i].FormattedDate = moment(PostDate).format(\"HH:mm\");\n\t }\n\t // Formato de fecha de un mensaje antes del día de hoy\n\t } else {\n\t this.elementos[i].FormattedDate = moment(PostDate).format(this.Opciones.DateFormat);\n\t }\n\t } catch (e) {\n\t this.elementos[i].FormattedDate = \"-\";\n\t }\n\t\n\t // Si sube un mensaje con una imagen y sin ningún texto puede ser que this.elementos[i].Content esté sin definir.\n\t // En tal caso se le da un valor vacío para evitar posteriores errores\n\t if (typeof this.elementos[i].Content == \"undefined\") {\n\t this.elementos[i].Content = \"\";\n\t }\n\t // Avatars\n\t this.elementos[i].ShowAvatars = this.Opciones.ShowAvatars;\n\t // Vídeo de Brightcove\n\t var brightcoveParsed = false;\n\t if (this.elementos[i].Content.indexOf(\" -1 && this.elementos[i].Content.indexOf(\"brightcove.com\") > -1 && this.elementos[i].Content.indexOf(\"/object\") > -1 && this.elementos[i].Content.indexOf(\"playerID=\") > -1) {\n\t var arrayBrightcove = this.FormatVideoObject(this.elementos[i].Content);\n\t this.elementos[i].Content = arrayBrightcove[0];\n\t if (arrayBrightcove[1] != \"\") {\n\t eval(arrayBrightcove[1]);\n\t }\n\t brightcoveParsed = true;\n\t }\n\t // Vídeo de Brighcove según el modelo ##[ID_DE_REFERENCIA]##\n\t if (reBC.test($.trim(this.elementos[i].Content)) || this.elementos[i].Content.indexOf(\" -1 && this.elementos[i].Content.indexOf(\"youtube.com\") > -1) {\n\t var arrayBrightcove = this.FormatVideoPlayer(this.elementos[i].Content);\n\t this.elementos[i].Content = arrayBrightcove[0];\n\t if (arrayBrightcove[1] != \"\") {\n\t eval(arrayBrightcove[1]);\n\t }\n\t }\n\t // Iframe (por ejemplo nuevos vídeos de Brightcove)\n\t if (this.elementos[i].Content.indexOf(\" -1) {\n\t this.elementos[i].Content = this.ResizeIframe(this.elementos[i].Content);\n\t }\n\t // Cualquier otro object excepto Brightcove\n\t if (!brightcoveParsed && (this.elementos[i].Content.indexOf(\" -1 && this.elementos[i].Content.indexOf(\"/object\") > -1 || this.elementos[i].Content.indexOf(\" -1)) {\n\t this.elementos[i].Content = this.ResizeEmbed(this.elementos[i].Content);\n\t }\n\t // Resizer\n\t if (this.elementos[i].Content.indexOf(\" -1) {\n\t this.elementos[i].Content = this.ResizeImage(this.elementos[i].Content);\n\t }\n\t // Imágenes subidas desde el editor de SL\n\t try {\n\t var imgs = \"\";\n\t var videos = \"\";\n\t for (var medias = 0; medias < this.elementos[i].Media.length; medias++) {\n\t if (this.elementos[i].Media[medias].Type == \"IMAGE\" && this.elementos[i].Media[medias].Url.length > 0) {\n\t var srcImagen = this.elementos[i].Media[medias].Url;\n\t if (isUrlImagenInterna(this.elementos[i].Media[medias].Url)) {\n\t srcImagen = getMediaResizerUrl() + \"/resizer/resizer.php?imagen=\" + this.elementos[i].Media[medias].Url + \"&nuevoancho=\" + this.ResizeImageWidth() + \"©right=conCopyright&encrypt=false\";\n\t }\n\t var element_class = 'voc-horizontal';\n\t if ($('[data-voc-scribblelive]').data('voc-scribblelive-template')) {\n\t element_class = ''; /*Si se trata de content no tiene que tener esta clase*/\n\t }\n\t imgs += \"
\\\"\\\"
\";\n\t } else if (this.elementos[i].Media[medias].Type == \"VIDEO\" && this.elementos[i].Media[medias].Url.length > 0) {\n\t var brightcoveVideoId = this.elementos[i].Content.match(/##([a-zA-Z0-9-\\s_]{3,60})##/g);\n\t if (!brightcoveVideoId) {\n\t var videoWidth = \"280\";\n\t if (tipoEspecial == \"elecciones-2015\") {\n\t videoWidth = \"190\";\n\t }\n\t if (this.Opciones.ColumnLocation == \"AB\") {\n\t videoWidth = \"560\";\n\t }\n\t var videoHeight = parseInt(videoWidth / 1.77777777);\n\t videos = \"\";\n\t } else {\n\t var media = Voonto.getInstance().lookup('vocento.site.media');\n\t videos = \"\";\n\t }\n\t }\n\t }\n\t // El vídeo es prioritario sobre la imagen\n\t if (imgs.length > 0 && videos.length == 0) {\n\t this.elementos[i].Content = imgs + \"

\" + this.elementos[i].Content + \"

\";\n\t }\n\t if (videos.length > 0) {\n\t this.elementos[i].Content = videos + \"

\" + this.elementos[i].Content + \"

\";\n\t }\n\t } catch (erroreMedia) {}\n\t // Enlaces\n\t if (this.elementos[i].Content.indexOf(\" -1) {\n\t this.elementos[i].Content = this.FormatLink(this.elementos[i].Content);\n\t }\n\t // Mensaje de Twitter\n\t if (this.elementos[i].PostMeta != null && this.elementos[i].PostMeta.source == \"twitter\") {\n\t var screenName = /twitter\\.com\\/(#!\\/)?([^\\/?]+)/.exec(this.elementos[i].Source)[2];\n\t this.elementos[i].TwScreenName = \"@\" + screenName + \"\";\n\t try {\n\t this.elementos[i].TwDate = moment(new Date(this.elementos[i].PostMeta.CreationDate * 1000)).format('HH:mm - DD/MM/YYYY');\n\t } catch (e) {}\n\t }\n\t // Twitter\n\t if (this.elementos[i].Source != null && this.elementos[i].Source.match(\"twitter\")) {\n\t this.elementos[i].Content = \"
\" + this.elementos[i].Source + \"
\";\n\t try {\n\t this.elementos[i].TwDate = moment(new Date(this.elementos[i].PostMeta.CreationDate * 1000)).format('HH:mm - DD/MM/YYYY');\n\t } catch (e) {}\n\t }\n\t // Redes sociales\n\t if (tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") {\n\t this.elementos[i].FacebookShare = facebookShare(gUrlPaginaDetalle, gTituloPestana, this.elementos[i].Content, this.elementos[i].Id);\n\t this.elementos[i].TwitterShare = twitterShare(gUrlPaginaDetalle, gTituloPestana, this.elementos[i].Content);\n\t }\n\t // Pie de foto\n\t var caption = this.GetCaption(this.elementos[i].Content);\n\t if (caption != \"\" && this.elementos[i].Content.indexOf(\"\") > -1) {\n\t var m = /<\\/figure>(.*)/g.exec(this.elementos[i].Content);\n\t if (m != null) {\n\t this.elementos[i].Content = this.elementos[i].Content.replace(m[1], \"

\" + caption + \"

\" + m[1]);\n\t }\n\t }\n\t\n\t // Se eliminan ciertos tags HTML\n\t this.elementos[i].Content = this.elementos[i].Content.replace(/

/g, \"

\");\n\t this.elementos[i].Content = this.elementos[i].Content.replace(/(.*)<\\/figcaption>/g, \"\");\n\t this.elementos[i].Content = this.elementos[i].Content.replace(/
/g, \"\");\n\t this.elementos[i].Content = this.elementos[i].Content.replace(//g, \"\");\n\t this.elementos[i].Content = this.elementos[i].Content.replace(/

.{1}<\\/div>/g, \"\");\n\t this.elementos[i].Content = this.elementos[i].Content.replace(/
 <\\/div>/g, \"\");\n\t this.elementos[i].Content = this.elementos[i].Content.replace(/
(.*)<\\/div>/g, \"$1\");\n\t // en luga de eliminar figure lo sustituimos con la clase y estilo correcto\n\t var element_class = 'voc-horizontal';\n\t if ($('[data-voc-scribblelive]').data('voc-scribblelive-template')) {\n\t element_class = ''; /*Si se trata de content no tiene que tener esta clase*/\n\t }\n\t this.elementos[i].Content = this.elementos[i].Content.replace(/
(.*)<\\/figure>/g, \"
$1
\");\n\t\n\t this.elementos[i].Link = \"\";\n\t if (this.Opciones.UrlPaginaDetalle) {\n\t this.elementos[i].Link = this.Opciones.UrlPaginaDetalle + \"#scribbleContent-\" + this.elementos[i].Id;\n\t }\n\t\n\t pResponse.Posts.push(this.elementos[i]);\n\t }\n\t};\n\t\n\t// Llamada recurrente que se ejecuta cada cierto tiempo (marcado por AutoUpdateTimeOut)\n\tInvocaScribbleLive.prototype.GetNewPosts = function () {\n\t var _this3 = this;\n\t\n\t // Delete any API calls that are currently on the page.\n\t var Scripts;\n\t if (document.head) {\n\t Scripts = document.head.getElementsByTagName(\"script\");\n\t } else {\n\t Scripts = document.getElementsByTagName('head')[0].getElementsByTagName(\"script\");\n\t }\n\t for (var i = 0; i < Scripts.length; i++) {\n\t var ScriptSource = Scripts[i].src;\n\t if (ScriptSource.match(this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \".*\") != null) {\n\t if (document.head) {\n\t document.head.removeChild(Scripts[i]);\n\t } else {\n\t document.getElementsByTagName('head')[0].removeChild(Scripts[i]);\n\t }\n\t }\n\t }\n\t\n\t var LastModifiedTimeFormatted = this.LastModifiedTime.getUTCFullYear() + \"/\" + (this.LastModifiedTime.getUTCMonth() + 1) + \"/\" + this.LastModifiedTime.getUTCDate() + \" \" + this.LastModifiedTime.getUTCHours() + \":\" + this.LastModifiedTime.getUTCMinutes() + \":\" + this.LastModifiedTime.getUTCSeconds();\n\t\n\t var url = this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \"/all/?Token=\" + this.Opciones.APIToken + \"&Order=asc&format=json&Since=\" + LastModifiedTimeFormatted;\n\t $.get(url, function (res) {\n\t if (res) {\n\t var hasChanges = res.Posts && res.Posts.length || res.Edits && res.Edits.length || res.Deletes && res.Deletes.length;\n\t\n\t if (hasChanges) {\n\t InvocaScribbleLive.GetInstance(_this3.InstanceIndex).DrawPosts(res);\n\t }\n\t }\n\t\n\t _this3.setRetryFetch();\n\t });\n\t};\n\t\n\t// Esta llamada solo se hace la primera vez que se carga el módulo. Obtiene los últimos mensajes ordenados de más nuevo a más antiguo\n\tInvocaScribbleLive.prototype.GetAllPosts = function () {\n\t var _this4 = this;\n\t\n\t var url = this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \"/page/\" + this.Opciones.PageNumber + \"/?Token=\" + this.Opciones.APIToken + \"&PageSize=\" + this.Opciones.TotalPostsToShow + \"&Order=asc&format=json&IncludeDeleted=0\";\n\t\n\t $.get(url, function (res) {\n\t InvocaScribbleLive.GetInstance(_this4.InstanceIndex).DrawPosts(res);\n\t });\n\t};\n\t\n\t// Llamada para obtener las páginas antiguas (paginación hacia atrás)\n\tInvocaScribbleLive.prototype.GetOldPosts = function () {\n\t var _this5 = this;\n\t\n\t // Delete any API calls that are currently on the page.\n\t var Scripts;\n\t if (document.head) {\n\t Scripts = document.head.getElementsByTagName(\"script\");\n\t } else {\n\t Scripts = document.getElementsByTagName('head')[0].getElementsByTagName(\"script\");\n\t }\n\t for (var i = 0; i < Scripts.length; i++) {\n\t var ScriptSource = Scripts[i].src;\n\t if (ScriptSource.match(this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \".*\") != null) {\n\t if (document.head) {\n\t document.head.removeChild(Scripts[i]);\n\t } else {\n\t document.getElementsByTagName('head')[0].removeChild(Scripts[i]);\n\t }\n\t }\n\t }\n\t\n\t var url = this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \"/page/\" + pageToGet + \"/?Token=\" + this.Opciones.APIToken + \"&PageSize=\" + this.Opciones.TotalPostsToShow + \"&Order=desc&format=json&IncludeDeleted=0\";\n\t $.get(url, function (res) {\n\t InvocaScribbleLive.GetInstance(_this5.InstanceIndex).DrawOldPosts(res);\n\t });\n\t\n\t // Se resta uno a la última página a mostrar para posteriores llamadas\n\t pageToGet--;\n\t};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\t/*!\r\n\t * Tempo Template Engine 2.1\r\n\t *\r\n\t * http://tempojs.com/\r\n\t */\n\tfunction TempoEvent(type, item, element) {\n\t 'use strict';\n\t\n\t this.type = type;\n\t this.item = item;\n\t this.element = element;\n\t\n\t return this;\n\t}\n\t\n\tTempoEvent.Types = {\n\t RENDER_STARTING: 'render_starting',\n\t ITEM_RENDER_STARTING: 'item_render_starting',\n\t ITEM_RENDER_COMPLETE: 'item_render_complete',\n\t RENDER_COMPLETE: 'render_complete',\n\t BEFORE_CLEAR: 'before_clear',\n\t AFTER_CLEAR: 'after_clear'\n\t};\n\t\n\tvar Tempo = function (tempo) {\n\t 'use strict';\n\t\n\t /*!\r\n\t * Constants\r\n\t */\n\t\n\t var NUMBER_FORMAT_REGEX = /(\\d+)(\\d{3})/;\n\t\n\t var _window;\n\t\n\t /*!\r\n\t * Helpers\r\n\t */\n\t var utils = {\n\t memberRegex: function memberRegex(obj) {\n\t var member_regex = '(';\n\t for (var member in obj) {\n\t if (obj.hasOwnProperty(member)) {\n\t if (member_regex.length > 1) {\n\t member_regex += '|';\n\t }\n\t member_regex += member;\n\t }\n\t }\n\t return member_regex + ')[\\\\.]?' + '(?!\\\\w)';\n\t },\n\t\n\t pad: function pad(val, _pad, size) {\n\t while (val.length < size) {\n\t val = _pad + val;\n\t }\n\t return val;\n\t },\n\t\n\t trim: function trim(str) {\n\t return str.replace(/^\\s*([\\S\\s]*?)\\s*$/, '$1');\n\t },\n\t\n\t startsWith: function startsWith(str, prefix) {\n\t return str.indexOf(prefix) === 0;\n\t },\n\t\n\t clearContainer: function clearContainer(el) {\n\t if (el !== null && el !== undefined && el.childNodes !== undefined) {\n\t for (var i = el.childNodes.length - 1; i >= 0; i--) {\n\t if (el.childNodes[i] !== undefined && el.childNodes[i].getAttribute !== undefined && (el.childNodes[i].getAttribute('data-template') !== null || el.childNodes[i].getAttribute('data-template-for') !== null)) {\n\t el.childNodes[i].parentNode.removeChild(el.childNodes[i]);\n\t }\n\t }\n\t }\n\t },\n\t\n\t isNested: function isNested(el) {\n\t var p = el.parentNode;\n\t while (p) {\n\t if (this.hasAttr(p, 'data-template') || this.hasAttr(p, 'data-template-for')) {\n\t return true;\n\t }\n\t p = p.parentNode;\n\t }\n\t return false;\n\t },\n\t\n\t equalsIgnoreCase: function equalsIgnoreCase(str1, str2) {\n\t return str1.toLowerCase() === str2.toLowerCase();\n\t },\n\t\n\t getElement: function getElement(template, html) {\n\t if (navigator.appVersion.indexOf(\"MSIE\") > -1 && utils.equalsIgnoreCase(template.tagName, 'tr')) {\n\t // Wrapping to get around read-only innerHTML\n\t var el = _window.document.createElement('div');\n\t el.innerHTML = '' + html + '
';\n\t var depth = 3;\n\t while (depth--) {\n\t el = el.lastChild;\n\t }\n\t el.setAttribute('data-template', '');\n\t return el;\n\t } else {\n\t // No need to wrap\n\t template.innerHTML = html;\n\t return template;\n\t }\n\t },\n\t\n\t typeOf: function typeOf(obj) {\n\t if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === \"object\") {\n\t if (obj === null) {\n\t return \"null\";\n\t }\n\t if (obj.constructor === [].constructor) {\n\t return \"array\";\n\t }\n\t if (obj.constructor === new Date().constructor) {\n\t return \"date\";\n\t }\n\t if (obj.constructor === new RegExp().constructor) {\n\t return \"regex\";\n\t }\n\t if ((typeof HTMLElement === 'undefined' ? 'undefined' : _typeof(HTMLElement)) === \"object\" ? obj instanceof HTMLElement : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === \"object\" && obj.nodeType === 1 && typeof obj.nodeName === \"string\") {\n\t return 'element';\n\t }\n\t if (typeof jQuery !== 'undefined' && obj instanceof jQuery) {\n\t return 'jquery';\n\t }\n\t return \"object\";\n\t }\n\t return typeof obj === 'undefined' ? 'undefined' : _typeof(obj);\n\t },\n\t\n\t hasAttr: function hasAttr(el, name) {\n\t if (el !== undefined) {\n\t if (el.hasAttribute !== undefined) {\n\t return el.hasAttribute(name);\n\t } else if (el.getAttribute !== undefined) {\n\t return el.getAttribute(name) !== null;\n\t }\n\t }\n\t\n\t return false;\n\t },\n\t\n\t removeAttr: function removeAttr(el, name) {\n\t if (el !== undefined) {\n\t el.setAttribute(name, '');\n\t // if (el.removeAttribute) {\n\t // el.removeAttribute(name);\n\t // }\n\t }\n\t },\n\t\n\t merge: function merge(obj1, obj2) {\n\t var obj3 = {};\n\t\n\t for (var attr1 in obj1) {\n\t if (obj1.hasOwnProperty(attr1)) {\n\t obj3[attr1] = obj1[attr1];\n\t }\n\t }\n\t\n\t for (var attr2 in obj2) {\n\t if (obj2.hasOwnProperty(attr2)) {\n\t obj3[attr2] = obj2[attr2];\n\t }\n\t }\n\t return obj3;\n\t },\n\t notify: function notify(listener, event) {\n\t if (listener !== undefined && listener.length > 0) {\n\t for (var i = 0; i < listener.length; i++) {\n\t if (event.type === listener[i].type) {\n\t listener[i].listener(event);\n\t }\n\t }\n\t }\n\t },\n\t container: function container(_container) {\n\t if (utils.typeOf(_container) === 'string') {\n\t if (_container === '*') {\n\t _container = _window.document.getElementsByTagName('html')[0];\n\t } else {\n\t _container = _window.document.getElementById(_container);\n\t }\n\t } else if (utils.typeOf(_container) === 'jquery' && _container.length > 0) {\n\t _container = _container[0];\n\t }\n\t\n\t return _container;\n\t },\n\t arrayContains: function arrayContains(array, obj) {\n\t if (!Array.prototype.indexOf) {\n\t for (var i = 0; i < this.length; i++) {\n\t if (this[i] === obj) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t } else {\n\t return array.indexOf(obj) > -1;\n\t }\n\t }\n\t };\n\t\n\t function Templates(params, nestedItem) {\n\t this.params = params;\n\t this.defaultTemplate = null;\n\t this.namedTemplates = {};\n\t this.container = null;\n\t\n\t this.nestedItem = nestedItem !== undefined ? nestedItem : null;\n\t\n\t this.escape = true;\n\t this.var_brace_left = '\\\\{\\\\{';\n\t this.var_brace_right = '\\\\}\\\\}';\n\t this.tag_brace_left = '\\\\{%';\n\t this.tag_brace_right = '%\\\\}';\n\t\n\t this.dataIsMap = false;\n\t\n\t this.attributes = {};\n\t\n\t if (typeof params !== 'undefined') {\n\t for (var prop in params) {\n\t if (prop === 'var_braces') {\n\t this.var_brace_left = params[prop].substring(0, params[prop].length / 2);\n\t this.var_brace_right = params[prop].substring(params[prop].length / 2);\n\t } else if (prop === 'tag_braces') {\n\t this.tag_brace_left = params[prop].substring(0, params[prop].length / 2);\n\t this.tag_brace_right = params[prop].substring(params[prop].length / 2);\n\t } else if (typeof this[prop] !== 'undefined') {\n\t this[prop] = params[prop];\n\t }\n\t }\n\t }\n\t\n\t return this;\n\t }\n\t\n\t Templates.prototype = {\n\t load: function load(file, callback) {\n\t function contents(iframe) {\n\t return iframe.contentWindow ? iframe.contentWindow.document.documentElement.innerHTML : iframe.contentDocument ? iframe.contentDocument.body.innerHTML : iframe.document.body.innerHTML;\n\t }\n\t\n\t if (_window.document.getElementById(file) !== null) {\n\t callback(contents(_window.document.getElementById(file)));\n\t } else {\n\t var el = _window.document.createElement('iframe');\n\t el.id = file;\n\t el.name = file;\n\t el.style.height = 0;\n\t el.style.width = 0;\n\t el.src = file;\n\t\n\t if (el.attachEvent) {\n\t el.attachEvent('onload', function () {\n\t callback(contents(el));\n\t });\n\t } else {\n\t el.onload = function () {\n\t callback(contents(el));\n\t };\n\t }\n\t\n\t _window.document.body.appendChild(el);\n\t }\n\t },\n\t _insertTemplate: function _insertTemplate(child, templates, container, callback) {\n\t return function (el) {\n\t utils.removeAttr(child, 'data-template-file');\n\t child.innerHTML = el;\n\t templates.parse(container, callback);\n\t };\n\t },\n\t\n\t parse: function parse(container, callback) {\n\t this.container = container;\n\t var children = container.getElementsByTagName('*');\n\t\n\t var ready = true;\n\t\n\t // Preprocessing for referenced templates\n\t for (var i = 0; i < children.length; i++) {\n\t if (ready === true && callback !== undefined && utils.hasAttr(children[i], 'data-template-file')) {\n\t var child = children[i];\n\t if (child.getAttribute('data-template-file').length > 0) {\n\t var templates = this;\n\t ready = false;\n\t\n\t this.load(child.getAttribute('data-template-file'), this._insertTemplate(child, templates, container, callback));\n\t }\n\t } else if (utils.hasAttr(children[i], 'data-template-fallback')) {\n\t // Hiding the fallback template\n\t children[i].style.display = 'none';\n\t }\n\t }\n\t\n\t // Parsing\n\t if (ready) {\n\t var foundTemplates = {};\n\t for (var s = 0; s < children.length; s++) {\n\t if (children[s].getAttribute !== undefined) {\n\t if (utils.hasAttr(children[s], 'data-template-for') && children[s].getAttribute('data-template-for').length > 0 && this.nestedItem === children[s].getAttribute('data-template-for') && !foundTemplates[this.nestedItem]) {\n\t // Nested template\n\t this.createTemplate(children[s]);\n\t // Guards against recursion when child template has same name!\n\t foundTemplates[this.nestedItem] = true;\n\t } else if (utils.hasAttr(children[s], 'data-template') && !utils.isNested(children[s])) {\n\t // Normal template\n\t this.createTemplate(children[s]);\n\t }\n\t }\n\t }\n\t\n\t // If there is no default template (data-template) then create one from container\n\t // if (this.defaultTemplate === null) {\n\t // this.createTemplate(container);\n\t // }\n\t\n\t utils.clearContainer(this.container);\n\t if (callback !== undefined) {\n\t callback(this);\n\t }\n\t }\n\t },\n\t\n\t createTemplate: function createTemplate(node) {\n\t var element = node.cloneNode(true);\n\t\n\t // Clear display: none;\n\t if (element.style.removeAttribute) {\n\t element.style.removeAttribute('display');\n\t } else if (element.style.removeProperty) {\n\t element.style.removeProperty('display');\n\t } else {\n\t element.style.display = 'block';\n\t }\n\t\n\t // Remapping container element in case template\n\t // is deep in container\n\t this.container = node.parentNode;\n\t\n\t // Element is a template\n\t var nonDefault = false;\n\t for (var a = 0; a < element.attributes.length; a++) {\n\t var attr = element.attributes[a];\n\t // If attribute\n\t if (utils.startsWith(attr.name, 'data-if-')) {\n\t var val;\n\t if (attr.value === '') {\n\t val = true;\n\t } else if (attr.value === 'null') {\n\t val = null;\n\t } else {\n\t val = '\\'' + attr.value + '\\'';\n\t }\n\t this.namedTemplates[attr.name.substring(8, attr.name.length) + '==' + val] = element;\n\t utils.removeAttr(element, attr.name);\n\t nonDefault = true;\n\t } else if (attr.name === 'data-has') {\n\t this.namedTemplates[attr.value + '!==undefined'] = element;\n\t utils.removeAttr(element, attr.name);\n\t nonDefault = true;\n\t } else if (attr.name === 'data-from-map') {\n\t this.dataIsMap = true;\n\t } else if (!utils.startsWith(attr.name, 'data-template') && utils.startsWith(attr.name, 'data-')) {\n\t // Treat as an attribute for template\n\t this.attributes[attr.name.substring(5, attr.name.length)] = attr.value;\n\t }\n\t }\n\t // Setting as default template, last one wins\n\t if (!nonDefault) {\n\t this.defaultTemplate = element;\n\t }\n\t },\n\t\n\t templateFor: function templateFor(i) {\n\t for (var templateName in this.namedTemplates) {\n\t if (eval('i.' + templateName)) {\n\t return this.namedTemplates[templateName].cloneNode(true);\n\t }\n\t }\n\t if (this.defaultTemplate) {\n\t return this.defaultTemplate.cloneNode(true);\n\t }\n\t }\n\t };\n\t\n\t /*!\r\n\t * Renderer for populating containers with data using templates.\r\n\t */\n\t function Renderer(templates) {\n\t this.templates = templates;\n\t this.listener = [];\n\t this.started = false;\n\t this.varRegex = new RegExp(this.templates.var_brace_left + '[ ]?([A-Za-z0-9$\\\\._\\\\[\\\\]]*?)([ ]?\\\\|[ ]?.*?)?[ ]?' + this.templates.var_brace_right, 'g');\n\t this.tagRegex = new RegExp(this.templates.tag_brace_left + '[ ]?([\\\\s\\\\S]*?)( [\\\\s\\\\S]*?)?[ ]?' + this.templates.tag_brace_right + '(([\\\\s\\\\S]*?)(?=' + this.templates.tag_brace_left + '[ ]?end\\\\1[ ]?' + this.templates.tag_brace_right + '))?', 'g');\n\t this.filterSplitter = new RegExp('\\\\|[ ]?(?=' + utils.memberRegex(this.filters) + ')', 'g');\n\t this.errorHandler = null;\n\t return this;\n\t }\n\t\n\t Renderer.prototype = {\n\t when: function when(type, listener) {\n\t this.listener.push({ 'type': type, 'listener': listener });\n\t\n\t return this;\n\t },\n\t\n\t _getValue: function _getValue(renderer, variable, i, t) {\n\t var val = null;\n\t // Handling tempo_info variable\n\t if (utils.startsWith(variable, '_tempo.')) {\n\t return eval('t.' + variable.substring(7, variable.length));\n\t }\n\t\n\t if (variable === '.') {\n\t val = eval('i');\n\t } else if (variable === 'this' || variable.match(/this[\\\\[\\\\.]/) !== null) {\n\t val = eval('i' + variable.substring(4, variable.length));\n\t } else if (utils.typeOf(i) === 'array') {\n\t val = eval('i' + variable);\n\t } else {\n\t val = eval('i.' + variable);\n\t }\n\t\n\t return val;\n\t },\n\t\n\t _replaceVariables: function _replaceVariables(renderer, _tempo, i, str) {\n\t var self = this;\n\t return str.replace(this.varRegex, function (match, variable, args) {\n\t\n\t try {\n\t var val = renderer._getValue(renderer, variable, i, _tempo);\n\t // Handle filters\n\t if (args !== undefined && args !== '') {\n\t var filters = utils.trim(utils.trim(args).substring(1)).split(self.filterSplitter);\n\t for (var p = 0; p < filters.length; p++) {\n\t var filter = utils.trim(filters[p]),\n\t filter_args,\n\t j = filter.indexOf(' ');\n\t // If there is a space, there must be arguments\n\t if (~j) {\n\t filter_args = filter.substr(j).replace(/(^ *['\"])|(['\"] *$)/g, '').split(/['\"] *, *['\"]/);\n\t filter = filter.substr(0, j);\n\t } else {\n\t filter_args = [];\n\t }\n\t val = renderer.filters[filter](val, filter_args);\n\t }\n\t }\n\t\n\t if (val !== undefined) {\n\t if (self.templates.escape) {\n\t val = self.filters.escape(val, {});\n\t }\n\t return val;\n\t }\n\t } catch (err) {\n\t self._onError.call(self, err);\n\t }\n\t\n\t return '';\n\t });\n\t },\n\t\n\t _replaceObjects: function _replaceObjects(renderer, _tempo, i, str, regex) {\n\t return str.replace(regex, function (match, variable, args) {\n\t try {\n\t var val = renderer._getValue(renderer, variable, i, _tempo);\n\t\n\t if (val !== undefined) {\n\t if (utils.typeOf(val) === 'string') {\n\t return '\\'' + val + '\\'';\n\t } else {\n\t return val;\n\t }\n\t }\n\t } catch (err) {\n\t self._onError.call(self, err);\n\t }\n\t\n\t return undefined;\n\t });\n\t },\n\t\n\t _applyAttributeSetters: function _applyAttributeSetters(renderer, item, str) {\n\t // Adding a space in front of first part to make sure I don't get partial matches\n\t return str.replace(/(\\b[A-z0-9]+?)(?:=\"[^\"']*?\"[^>]*?)data-\\1=\"(.*?)\"/g, function (match, attr, data_value) {\n\t if (data_value !== '') {\n\t return attr + '=\"' + data_value + '\"';\n\t }\n\t return match;\n\t });\n\t },\n\t\n\t _applyTags: function _applyTags(renderer, item, str) {\n\t return str.replace(this.tagRegex, function (match, tag, args, body) {\n\t if (renderer.tags.hasOwnProperty(tag)) {\n\t args = args.substring(args.indexOf(' ')).replace(/^[ ]*|[ ]*$/g, '');\n\t var filter_args = args.split(/(?:['\"])[ ]?,[ ]?(?:['\"])/);\n\t return renderer.tags[tag](renderer, item, match, filter_args, body);\n\t } else {\n\t return '';\n\t }\n\t });\n\t },\n\t\n\t starting: function starting(event) {\n\t // Use this to manually fire the RENDER_STARTING event e.g. just before you issue an AJAX request\n\t // Useful if you're not calling prepare immediately before render\n\t this.started = true;\n\t if (event === undefined) {\n\t event = new TempoEvent(TempoEvent.Types.RENDER_STARTING, undefined, undefined);\n\t }\n\t utils.notify(this.listener, event);\n\t\n\t return this;\n\t },\n\t\n\t _renderNestedItem: function _renderNestedItem(i, nested) {\n\t var self = this;\n\t return function (templates) {\n\t var r = new Renderer(templates);\n\t var data = null;\n\t\n\t if (nested === '*' || i.hasOwnProperty(nested.split('.')[0])) {\n\t if (nested === '*') {\n\t data = i;\n\t } else {\n\t data = eval('i.' + nested);\n\t }\n\t\n\t if (data) {\n\t try {\n\t if (utils.typeOf(data) === 'array') {\n\t for (var s = 0; s < data.length; s++) {\n\t if (utils.typeOf(data[s]) === 'object') {\n\t data[s]._parent = function () {\n\t return i;\n\t }();\n\t }\n\t }\n\t } else {\n\t data._parent = function () {\n\t return i;\n\t }();\n\t }\n\t } catch (err) {\n\t self._onError.call(self, err);\n\t }\n\t }\n\t }\n\t r.render(data);\n\t };\n\t },\n\t\n\t renderItem: function renderItem(renderer, _tempo_info, i, fragment) {\n\t var memberRegex = new RegExp('(?:__[\\\\.]?)((_tempo|\\\\[|' + utils.memberRegex(i) + '|this)([A-Za-z0-9$\\\\._\\\\[\\\\]]+)?)', 'g');\n\t var template = renderer.templates.templateFor(i);\n\t var tempo_info = utils.merge(_tempo_info, renderer.templates.attributes);\n\t\n\t // Clear attributes in case of recursive nesting (TODO: Probably need to clear more)\n\t if (utils.hasAttr(template, 'data-template-for')) {\n\t utils.removeAttr(template, 'data-template-for');\n\t }\n\t if (utils.hasAttr(template, 'data-template-file')) {\n\t utils.removeAttr(template, 'data-template-file');\n\t }\n\t\n\t if (template && i) {\n\t utils.notify(this.listener, new TempoEvent(TempoEvent.Types.ITEM_RENDER_STARTING, i, template));\n\t var nestedDeclaration = template.innerHTML.match(/data-template-for=\"([^\"]+?)\"/g);\n\t if (nestedDeclaration) {\n\t for (var p = 0; p < nestedDeclaration.length; p++) {\n\t var nested = nestedDeclaration[p].match(/data-template-for=\"([^\"]+?)\"/);\n\t if (nested && nested[1]) {\n\t var t = new Templates(renderer.templates.params, nested[1]);\n\t try {\n\t t.parse(template, this._renderNestedItem(i, nested[1]));\n\t } catch (err) {\n\t this._onError.call(this, err);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Processing template element attributes\n\t for (var a = 0; a < template.attributes.length; a++) {\n\t var attr = template.attributes[a];\n\t if (attr !== null && attr.specified && attr.value !== null && attr.value.length > 0 && attr.name.match(/style|data-template.*/) === null) {\n\t attr.value = this._applyTags(this, i, attr.value);\n\t attr.value = this._replaceVariables(this, tempo_info, i, attr.value);\n\t }\n\t }\n\t\n\t // Dealing with HTML as a String from now on (to be reviewed)\n\t // Attribute values are escaped in FireFox so making sure there are no escaped tags\n\t var html = template.innerHTML.replace(/%7B%7B/g, '{{').replace(/%7D%7D/g, '}}');\n\t\n\t // Tags\n\t html = this._applyTags(this, i, html);\n\t\n\t // Content\n\t html = this._replaceVariables(this, tempo_info, i, html);\n\t\n\t // JavaScript objects\n\t html = this._replaceObjects(this, tempo_info, i, html, memberRegex);\n\t\n\t html = this._applyAttributeSetters(this, i, html);\n\t\n\t fragment.appendChild(utils.getElement(template, html));\n\t\n\t utils.notify(this.listener, new TempoEvent(TempoEvent.Types.ITEM_RENDER_COMPLETE, i, template));\n\t }\n\t },\n\t\n\t _createFragment: function _createFragment(data) {\n\t if (data) {\n\t var tempo_info = {};\n\t var fragment = _window.document.createDocumentFragment();\n\t\n\t // If object then wrapping in an array\n\t if (utils.typeOf(data) === 'object') {\n\t if (this.templates.dataIsMap) {\n\t var mapped = [];\n\t for (var member in data) {\n\t if (data.hasOwnProperty(member) && member !== '_parent') {\n\t var pair = {};\n\t pair.key = member;\n\t pair.value = data[member];\n\t mapped.push(pair);\n\t }\n\t }\n\t data = mapped;\n\t } else {\n\t data = [data];\n\t }\n\t }\n\t\n\t for (var i = 0; i < data.length; i++) {\n\t tempo_info.index = i;\n\t tempo_info.first = i < 1;\n\t tempo_info.last = i == data.length - 1;\n\t this.renderItem(this, tempo_info, data[i], fragment);\n\t }\n\t\n\t return fragment;\n\t }\n\t\n\t return null;\n\t },\n\t\n\t into: function into(target) {\n\t if (target !== undefined) {\n\t this.templates.container = utils.container(target);\n\t }\n\t\n\t return this;\n\t },\n\t\n\t render: function render(data) {\n\t // Check if starting event was manually fired\n\t if (!this.started) {\n\t this.starting(new TempoEvent(TempoEvent.Types.RENDER_STARTING, data, this.templates.container));\n\t }\n\t\n\t this.clear();\n\t this.append(data);\n\t\n\t return this;\n\t },\n\t\n\t append: function append(data) {\n\t // Check if starting event was manually fired\n\t if (!this.started) {\n\t this.starting(new TempoEvent(TempoEvent.Types.RENDER_STARTING, data, this.templates.container));\n\t }\n\t\n\t var fragment = this._createFragment(data);\n\t if (fragment !== null && this.templates.container !== null) {\n\t if (fragment !== null) {\n\t var ref = null;\n\t for (var i = this.templates.container.childNodes.length; i >= 0; i--) {\n\t\n\t if (this.templates.container.childNodes[i] !== undefined && this.templates.container.childNodes[i].getAttribute !== undefined && this.templates.container.childNodes[i].getAttribute('data-after-template') !== null) {\n\t ref = this.templates.container.childNodes[i];\n\t }\n\t }\n\t if (ref === null) {\n\t ref = this.templates.container.lastChild;\n\t }\n\t if (ref !== null) {\n\t this.templates.container.insertBefore(fragment, ref);\n\t } else {\n\t this.templates.container.appendChild(fragment);\n\t }\n\t }\n\t }\n\t\n\t utils.notify(this.listener, new TempoEvent(TempoEvent.Types.RENDER_COMPLETE, data, this.templates.container));\n\t\n\t return this;\n\t },\n\t\n\t prepend: function prepend(data) {\n\t // Check if starting event was manually fired\n\t if (!this.started) {\n\t this.starting(new TempoEvent(TempoEvent.Types.RENDER_STARTING, data, this.templates.container));\n\t }\n\t\n\t var fragment = this._createFragment(data);\n\t if (fragment !== null) {\n\t var ref = null;\n\t for (var i = 0; i < this.templates.container.childNodes.length; i++) {\n\t if (this.templates.container.childNodes[i] !== undefined && this.templates.container.childNodes[i].getAttribute !== undefined && this.templates.container.childNodes[i].getAttribute('data-before-template') !== null) {\n\t ref = this.templates.container.childNodes[i];\n\t }\n\t }\n\t if (ref === null) {\n\t ref = this.templates.container.firstChild;\n\t }\n\t if (ref !== null) {\n\t if (ref.nextSibling !== null && ref.getAttribute && ref.getAttribute('data-before-template') !== null) {\n\t ref = ref.nextSibling;\n\t }\n\t this.templates.container.insertBefore(fragment, ref);\n\t } else {\n\t this.templates.container.appendChild(fragment);\n\t }\n\t }\n\t\n\t utils.notify(this.listener, new TempoEvent(TempoEvent.Types.RENDER_COMPLETE, data, this.templates.container));\n\t\n\t return this;\n\t },\n\t\n\t errors: function errors(errorHandler) {\n\t this.errorHandler = errorHandler;\n\t return this;\n\t },\n\t\n\t _onError: function _onError(err) {\n\t if (this.errorHandler !== null) {\n\t this.errorHandler.call(this, err);\n\t }\n\t },\n\t\n\t clear: function clear() {\n\t utils.notify(this.listener, new TempoEvent(TempoEvent.Types.BEFORE_CLEAR, {}, this.templates.container));\n\t utils.clearContainer(this.templates.container);\n\t utils.notify(this.listener, new TempoEvent(TempoEvent.Types.AFTER_CLEAR, {}, this.templates.container));\n\t },\n\t\n\t tags: {\n\t 'if': function _if(renderer, i, match, args, body) {\n\t var member_regex = utils.memberRegex(i);\n\t\n\t var expr = args[0].replace(/&/g, '&').replace(/>/g, '>').replace(/</g, '<');\n\t expr = expr.replace(new RegExp(member_regex, 'gi'), function (match) {\n\t return 'i.' + match;\n\t });\n\t\n\t var blockRegex = new RegExp(renderer.templates.tag_brace_left + '[ ]?else[ ]?' + renderer.templates.tag_brace_right, 'g');\n\t var blocks = body.split(blockRegex);\n\t\n\t if (eval(expr)) {\n\t return blocks[0];\n\t } else if (blocks.length > 1) {\n\t return blocks[1];\n\t }\n\t\n\t return '';\n\t }\n\t },\n\t\n\t filters: {\n\t 'escape': function escape(value, args) {\n\t return value.toString().replace(/[&<>]/g, function (c) {\n\t return {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>'\n\t }[c] || c;\n\t });\n\t },\n\t 'encodeURI': function (_encodeURI) {\n\t function encodeURI(_x, _x2) {\n\t return _encodeURI.apply(this, arguments);\n\t }\n\t\n\t encodeURI.toString = function () {\n\t return _encodeURI.toString();\n\t };\n\t\n\t return encodeURI;\n\t }(function (value, args) {\n\t return encodeURI(value.toString());\n\t }),\n\t 'decodeURI': function (_decodeURI) {\n\t function decodeURI(_x3, _x4) {\n\t return _decodeURI.apply(this, arguments);\n\t }\n\t\n\t decodeURI.toString = function () {\n\t return _decodeURI.toString();\n\t };\n\t\n\t return decodeURI;\n\t }(function (value, args) {\n\t return decodeURI(value.toString());\n\t }),\n\t 'truncate': function truncate(value, args) {\n\t if (value !== undefined) {\n\t var len = 0;\n\t var rep = '...';\n\t if (args.length > 0) {\n\t len = parseInt(args[0], 10);\n\t }\n\t if (args.length > 1) {\n\t rep = args[1];\n\t }\n\t if (value.length > len - 3) {\n\t return value.substr(0, len - 3) + rep;\n\t }\n\t return value;\n\t }\n\t },\n\t 'format': function format(value, args) {\n\t if (value !== undefined) {\n\t if (args.length === 1) {\n\t value = parseFloat(value + '').toFixed(parseInt(args[0], 10));\n\t }\n\t var x = (value + '').split('.');\n\t var x1 = x[0];\n\t var x2 = x.length > 1 ? '.' + x[1] : '';\n\t\n\t while (NUMBER_FORMAT_REGEX.test(x1)) {\n\t x1 = x1.replace(NUMBER_FORMAT_REGEX, '$1' + ',' + '$2');\n\t }\n\t\n\t return x1 + x2;\n\t }\n\t },\n\t 'upper': function upper(value, args) {\n\t return value.toUpperCase();\n\t },\n\t 'lower': function lower(value, args) {\n\t return value.toLowerCase();\n\t },\n\t 'titlecase': function titlecase(value, args) {\n\t var blacklist = [];\n\t if (args !== undefined && args.length === 1) {\n\t blacklist = args[0].split(' ');\n\t }\n\t return value.replace(/\\w[a-z]\\S*/g, function (m, i) {\n\t if (blacklist.length === 0 || !(utils.arrayContains(blacklist, m) && i > 0)) {\n\t return m.charAt(0).toUpperCase() + m.substr(1).toLowerCase();\n\t }\n\t return m;\n\t });\n\t },\n\t 'trim': function trim(value, args) {\n\t return utils.trim(value);\n\t },\n\t 'replace': function replace(value, args) {\n\t if (value !== undefined && args.length === 2) {\n\t return value.replace(new RegExp(args[0], 'g'), args[1]);\n\t }\n\t return value;\n\t },\n\t 'append': function append(value, args) {\n\t if (value !== undefined && args.length === 1) {\n\t return value + '' + args[0];\n\t }\n\t return value;\n\t },\n\t 'prepend': function prepend(value, args) {\n\t if (value !== undefined && args.length === 1) {\n\t return args[0] + '' + value;\n\t }\n\t return value;\n\t },\n\t 'join': function join(value, args) {\n\t if (args.length === 1 && value !== undefined && utils.typeOf(value) === 'array') {\n\t return value.join(args[0]);\n\t }\n\t return value;\n\t },\n\t 'default': function _default(value, args) {\n\t if (value !== undefined && value !== null) {\n\t return value;\n\t }\n\t if (args.length === 1) {\n\t return args[0];\n\t }\n\t return value;\n\t },\n\t 'date': function date(value, args) {\n\t if (value !== undefined && args.length >= 1 && args.length <= 2) {\n\t var date = new Date(value);\n\t var format = args[0];\n\t var isUTC = args.length === 2 && args[1] === 'UTC';\n\t if (format === 'localedate') {\n\t return date.toLocaleDateString();\n\t } else if (format === 'localetime') {\n\t return date.toLocaleTimeString();\n\t } else if (format === 'date') {\n\t return date.toDateString();\n\t } else if (format === 'time') {\n\t return date.toTimeString();\n\t } else {\n\t var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\t var DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\t var DATE_PATTERNS = {\n\t 'YYYY': function YYYY(date) {\n\t return isUTC ? date.getUTCFullYear() : date.getFullYear();\n\t },\n\t 'YY': function YY(date) {\n\t return (isUTC ? date.getUTCFullYear() : date.getFullYear()).toFixed().substring(2);\n\t },\n\t 'MMMM': function MMMM(date) {\n\t return MONTHS[isUTC ? date.getUTCMonth() : date.getMonth()];\n\t },\n\t 'MMM': function MMM(date) {\n\t return MONTHS[isUTC ? date.getUTCMonth() : date.getMonth()].substring(0, 3);\n\t },\n\t 'MM': function MM(date) {\n\t return utils.pad(((isUTC ? date.getUTCMonth() : date.getMonth()) + 1).toFixed(), '0', 2);\n\t },\n\t 'M': function M(date) {\n\t return (isUTC ? date.getUTCMonth() : date.getMonth()) + 1;\n\t },\n\t 'DD': function DD(date) {\n\t return utils.pad((isUTC ? date.getUTCDate() : date.getDate()).toFixed(), '0', 2);\n\t },\n\t 'D': function D(date) {\n\t return isUTC ? date.getUTCDate() : date.getDate();\n\t },\n\t 'EEEE': function EEEE(date) {\n\t return DAYS[isUTC ? date.getUTCDay() : date.getDay()];\n\t },\n\t 'EEE': function EEE(date) {\n\t return DAYS[isUTC ? date.getUTCDay() : date.getDay()].substring(0, 3);\n\t },\n\t 'E': function E(date) {\n\t return isUTC ? date.getUTCDay() : date.getDay();\n\t },\n\t 'HH': function HH(date) {\n\t return utils.pad((isUTC ? date.getUTCHours() : date.getHours()).toFixed(), '0', 2);\n\t },\n\t 'H': function H(date) {\n\t return isUTC ? date.getUTCHours() : date.getHours();\n\t },\n\t 'h': function h(date) {\n\t var hours = isUTC ? date.getUTCHours() : date.getHours();\n\t return hours < 13 ? hours === 0 ? 12 : hours : hours - 12;\n\t },\n\t 'mm': function mm(date) {\n\t return utils.pad((isUTC ? date.getUTCMinutes() : date.getMinutes()).toFixed(), '0', 2);\n\t },\n\t 'm': function m(date) {\n\t return isUTC ? date.getUTCMinutes() : date.getMinutes();\n\t },\n\t 'ss': function ss(date) {\n\t return utils.pad((isUTC ? date.getUTCSeconds() : date.getSeconds()).toFixed(), '0', 2);\n\t },\n\t 's': function s(date) {\n\t return isUTC ? date.getUTCSeconds() : date.getSeconds();\n\t },\n\t 'SSS': function SSS(date) {\n\t return utils.pad((isUTC ? date.getUTCMilliseconds() : date.getMilliseconds()).toFixed(), '0', 3);\n\t },\n\t 'S': function S(date) {\n\t return isUTC ? date.getUTCMilliseconds() : date.getMilliseconds();\n\t },\n\t 'a': function a(date) {\n\t return (isUTC ? date.getUTCHours() : date.getHours()) < 12 ? 'AM' : 'PM';\n\t }\n\t };\n\t format = format.replace(/(\\\\)?(Y{2,4}|M{1,4}|D{1,2}|E{1,4}|H{1,2}|h|m{1,2}|s{1,2}|S{1,3}|a)/g, function (match, escape, pattern) {\n\t if (!escape) {\n\t if (DATE_PATTERNS.hasOwnProperty(pattern)) {\n\t return DATE_PATTERNS[pattern](date);\n\t }\n\t }\n\t return pattern;\n\t });\n\t\n\t return format;\n\t }\n\t }\n\t\n\t return '';\n\t }\n\t }\n\t };\n\t\n\t /*!\r\n\t * Initialising Tempo with a Window object in case running inside Node.\r\n\t */\n\t tempo.init = function (window) {\n\t _window = window;\n\t return this;\n\t };\n\t\n\t /*!\r\n\t * Prepare a container for rendering, gathering templates and\r\n\t * clearing afterwards.\r\n\t */\n\t tempo.prepare = function (container, params, callback) {\n\t container = utils.container(container);\n\t\n\t var templates = new Templates(params);\n\t if (callback !== undefined) {\n\t templates.parse(container, function (templates) {\n\t callback(new Renderer(templates));\n\t });\n\t } else {\n\t templates.parse(container);\n\t return new Renderer(templates);\n\t }\n\t };\n\t\n\t tempo.exports = {\n\t 'templates': Templates,\n\t 'utils': utils\n\t };\n\t\n\t tempo.test = {\n\t 'utils': utils,\n\t 'templates': new Templates({}),\n\t 'renderer': new Renderer(new Templates({}))\n\t };\n\t\n\t // Default initialisation\n\t try {\n\t tempo.init(window);\n\t } catch (e) {\n\t exports.tempo = tempo;\n\t }\n\t\n\t return tempo;\n\t}(Tempo || {});\n\t\n\texports.default = Tempo;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t// NOTE: aquí hay un ejemplo [http://athletic.elcorreo.com/noticias/201703/12/real-sociedad-athletic-directo-20170306121619.html?op=cscribble]\n\t\n\tvar CONFIG_NAMESPACE = exports.CONFIG_NAMESPACE = 'vocento.config.scribblelive';\n\tvar DEFAULT_TEMPLATE = exports.DEFAULT_TEMPLATE = 'widget';\n\t\n\tvar DEFAULTS = exports.DEFAULTS = Object.freeze({\n\t APIToken: 'CFhft3e',\n\t escribeCapaJs: true, // true -> use template, false -> use IframeApi with embedded template\n\t ColumnLocation: 'C',\n\t avatar1: false,\n\t avatar2: false,\n\t avatar3: false,\n\t avatar4: false,\n\t SL_valor_epigrafe: 'Última hora',\n\t SL_url_epigrafe: null,\n\t Scribble_tipoEspecial: '', // Se utiliza para cambiar algunos aspetos de presentación('elecciones-2015' | 'nuevo')\n\t SL_valor_numeroMensajesPagina: 40,\n\t SL_valor_evento1Titulo: 'Directo',\n\t SL_valor_evento1URLPaginaDetalle: null,\n\t SL_valor_evento2ID: null,\n\t SL_valor_evento2Titulo: null,\n\t SL_valor_evento2URLPaginaDetalle: null,\n\t SL_valor_evento3ID: null,\n\t SL_valor_evento3Titulo: null,\n\t SL_valor_evento3URLPaginaDetalle: null,\n\t SL_valor_evento4ID: null,\n\t SL_valor_evento4Titulo: null,\n\t SL_valor_evento4URLPaginaDetalle: null,\n\t SL_valor_plantilla: '1998',\n\t Scribble_ancho: undefined, // by default 300\n\t Scribble_alto: undefined, // by default 450\n\t Scribble_pageElementId: 'SL_eventoNoticia', // place where comments will be displayed, by default SL_evento\n\t Scribble_template_twitter: null,\n\t Scribble_dateFormat: null, // by default DD/MM/YYYY HH:mm:ss\n\t Scribble_todayDateFormat: null, // by default HH:mm:ss\n\t Scribble_Iframe_API: '//embed.scribblelive.com/Embed/v5.aspx',\n\t Scribble_API: '//apiv1.scribblelive.com',\n\t relativeTimeLanguage: 'es'\n\t});\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"
{{FormattedDate}} {{Creator.Name}}

{% if Link %} {{Content}} {% else %} {{Content}} {% endif %}

\";\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = \"
{% if Creator.Avatar.length > 0 %} \\\"\\\" {% endif %} {% if Creator.Avatar.length == 0 %} {% endif %}

{{FormattedDate}}

{{Creator.Name}}

{{Content}}

\";\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// scribble-live.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap df8261b322bc2a7dabe5","import pkg from '../package.json';\nimport {SL_construyeModulo} from './scribblelive.js';\nimport {\n DEFAULTS,\n CONFIG_NAMESPACE,\n DEFAULT_TEMPLATE,\n DEFAULT_AD_INDEX,\n} from './constants.js';\n\nimport WidgetTemplate from './templates/widget.html';\nimport ContentTemplate from './templates/content.html';\n\nconst {$} = Voonto;\n\nVoonto.ready.then((app) => {\n _init(app);\n app.on('voonto:reload', (event, context$) => _init(app, context$));\n});\n\nexport const VERSION = pkg.version;\n\n/* Private */\n\nfunction _init(app, context$) {\n $('[data-voc-scribblelive]', context$).each(function () {\n var container$, id, options = {}, template, site, editions, hits, url, page;\n\n container$ = $(this);\n id = container$.attr('id') || `sl-${window.performance ? window.performance.now() : Date.now()}`;\n container$.attr('id', id);\n\n template = WidgetTemplate;\n if (container$.data('voc-scribblelive-template')) {\n template = ContentTemplate;\n }\n\n hits = DEFAULTS.SL_valor_numeroMensajesPagina;\n if ($(container$).data('voc-scribblelive-hits')) {\n hits = $(container$).data('voc-scribblelive-hits');\n }\n\n page = 'last';\n if ($(container$).data('voc-scribblelive-page')) {\n page = $(container$).data('voc-scribblelive-page');\n }\n\n url = DEFAULTS.SL_valor_evento1URLPaginaDetalle;\n if ($(container$).data('voc-scribblelive-url')) {\n url = $(container$).data('voc-scribblelive-url');\n }\n\n site = app.lookup('vocento.site');\n editions = app.lookup('vocento.site.editions');\n\n $.extend(options, DEFAULTS, {\n medio: site.media,\n edicion: editions.current,\n Scribble_pageElementId: id,\n SL_valor_evento1ID: container$.data('voc-scribblelive'),\n Scribble_template: template,\n SL_valor_numeroMensajesPagina: hits,\n SL_valor_evento1URLPaginaDetalle: url,\n PageNumber: page,\n container$\n });\n container$.empty();\n SL_construyeModulo(options);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","module.exports = {\n\t\"name\": \"scribble-live\",\n\t\"version\": \"2.0.2\",\n\t\"description\": \"\",\n\t\"main\": \"src/index.js\",\n\t\"scripts\": {\n\t\t\"start\": \"webpack-dev-server\",\n\t\t\"build\": \"./node_modules/webpack/bin/webpack.js\"\n\t},\n\t\"contributors\": [\n\t\t\"Iván Pérez \",\n\t\t\"Jose Manuel Ortega \",\n\t\t\"Adolfo Sanz \"\n\t],\n\t\"license\": \"SEE LICENSE IN LICENSE.md\",\n\t\"devDependencies\": {\n\t\t\"babel-core\": \"^6.17.0\",\n\t\t\"babel-loader\": \"^6.2.5\",\n\t\t\"babel-preset-es2015\": \"^6.16.0\",\n\t\t\"chai\": \"^3.5.0\",\n\t\t\"chalk\": \"^1.1.3\",\n\t\t\"html-loader\": \"^0.4.5\",\n\t\t\"html-webpack-plugin\": \"^2.24.1\",\n\t\t\"json-loader\": \"^0.5.4\",\n\t\t\"mocha\": \"^3.1.0\",\n\t\t\"mocha-loader\": \"^1.0.0\",\n\t\t\"webpack\": \"^1.13.2\",\n\t\t\"webpack-shell-plugin\": \"^0.4.3\"\n\t}\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./package.json\n// module id = 1\n// module chunks = 0","// tempo.js - http://tempojs.com/\nimport Tempo from \"./tempo.js\";\nimport {DEFAULTS} from './constants.js';\n\nconst {$, moment} = Voonto;\n\nmoment.locale(DEFAULTS.relativeTimeLanguage);\n\n\n\n// FUTURE: refactor\n\n/* ----------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n VARIABLES GLOBALES\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-----------------------------------------------------------------------------------------------------------*/\n// Objeto XMLHttpRequest para los distintos navegadores\nvar xmlHttp = false;\n// Resultado de la llamada repetitiva para obtener nuevos mensajes\nvar Wait;\n// Tipo de especial\nvar tipoEspecial = \"\";\n// Módulo o artículo\nvar isArticulo = false;\n// Expresión regular para encontrar vídeos de Brightcove\nvar reBC = /##()?([a-zA-Z0-9-\\s_]{3,60})(<\\/small>)?##/;\n// Url de la página de detalle del evento\nvar gUrlPaginaDetalle;\n// Título de la pestaña activa\nvar gTituloPestana;\n// Índice para los eventos múltiples del script\nvar instanceIndex;\n// Número total de páginas del evento\nvar lastPage;\n// Nueva página a mostrar cuando se hace la paginación\nvar pageToGet;\n// Tipo de obtención de mensajes. false cuando se obtienen los mensajes más recientes, true cuando es una llamada para obtener más páginas\nvar lastMessages;\n\n// Funciones de jquery para comprobar si un div está antes o después de otro\n(function($) {\n $.fn.isAfter = function(sel){\n return this.prevAll().filter(sel).length !== 0;\n };\n $.fn.isBefore= function(sel){\n return this.nextAll().filter(sel).length !== 0;\n };\n})($);\n\n\n/* ----------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n CÓDIGO ESPECÍFICO PARA MOSTRAR COMPARTIR EN FACEBOOK\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-----------------------------------------------------------------------------------------------------------*/\n\n/* by Steven Yang, Feb 2015, originally for www.mathscore.com. This code is free for anybody to use as long as you include this comment. */\nfunction FacebookFeedDialog(appID, linkTarget, redirectTarget) {\n this.mParams = {\n app_id: appID,\n link: linkTarget,\n redirect_uri: redirectTarget,\n display: \"popup\"\n }\n};\n\n/* Common params include:\nname - the title that appears in bold font\ndescription - the text that appears below the title\npicture - complete URL path to the image on the left of the dialog\ncaption - replaces the link text\n*/\nFacebookFeedDialog.prototype.addParam = function(key, value) {\n this.mParams[key] = value;\n};\n\nFacebookFeedDialog.prototype.open = function() {\n var url = 'https://www.facebook.com/dialog/feed?' + encodeCGIArgs(this.mParams);\n popup(url, 'feedDialog', 700, 400);\n};\n\n/* Takes a param object like this:\n { arg1: \"value1\", arg2: \"value2\" }\n and converts into CGI args like this:\n arg1=value1&arg2=value2\n\n The values and args will be properly URI encoded\n*/\nfunction encodeCGIArgs(paramObject) {\n var result = '';\n for (var key in paramObject) {\n if (result)\n result += '&';\n result += encodeURIComponent(key) + '=' + encodeURIComponent(paramObject[key]);\n }\n return result;\n}\n\nfunction popup(mylink,windowname,width,height) {\n if (!window.focus)\n return;\n var href;\n if (typeof(mylink) == 'string')\n href=mylink;\n else\n href=mylink.href;\n if (!windowname)\n windowname='mywindow';\n if (!width)\n width=600;\n if (!height)\n height=350;\n window.open(href, windowname, 'resizable=yes,width='+width+',height='+height+',scrollbars=yes');\n}\n\n\n/* ----------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n FUNCIONES GENERALES\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-----------------------------------------------------------------------------------------------------------*/\n\n/**\n * Obtiene el objeto XMLHttpRequest del navegador. Como siempre IE dando por el culo\n * @returns Objeto XMLHttpRequest propio del navegador\n */\nfunction getHTTPObject() {\n var xhr = false;\n if (window.XMLHttpRequest) {\n var xhr = new XMLHttpRequest();\n } else if (window.ActiveXObject) {\n try {\n var xhr = new ActiveXObject(\"Msxml2.XMLHTTP\");\n } catch(e) {\n try {\n var xhr = new ActiveXObject(\"Microsoft.XMLHTTP\");\n } catch(e) {\n xhr = false;\n }\n }\n }\n return xhr;\n}\n\n/**\n * Resultado del callback para obtener la plantilla de cada mensaje del módulo\n * @returns Contenido (cadena) con el contenido de la plantilla para mostrar cada uno de los mensajes del módulo\n */\nfunction callbackFunction() {\n if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {\n return xmlHttp.responseText;\n }\n}\n\n/**\n * Obtiene el resizer para el medio\n * @returns {String} URL del resizer del medio\n */\nfunction getMediaResizerUrl() {\n var resizerUrl = \"http://resizer.\";\n var media = Voonto.getInstance().lookup('vocento.site.media');\n if (media.indexOf(\"diariovasco\") > -1 || media.indexOf(\"larioja\") > -1 || media.indexOf(\"elcorreo\") > -1 || media.indexOf(\"leonoticias\") > -1) {\n resizerUrl = resizerUrl + media + \".com\";\n } else if (media.indexOf(\"elbierzonoticias\") > -1) {\n resizerUrl = resizerUrl + \"leonoticias.com\";\n } else {\n resizerUrl = resizerUrl + media + \".es\";\n }\n return resizerUrl;\n}\n\n/**\n * Obtiene si una imagen contenida en una url es interna o externa los medios locales\n * @param url Url de la imagen\n * @returns {Boolean} Verdadero si la imagen pertenece a un medio local, falso si es una imagen externa\n */\nfunction isUrlImagenInterna(url) {\n var domain;\n try {\n if (url.indexOf(\"://\") > -1) {\n domain = url.split('/')[2];\n } else {\n domain = url.split('/')[0];\n }\n domain = domain.split(':')[0];\n if (domain.indexOf(\"elcorreo.com\") > -1 || domain.indexOf(\"diariovasco.com\") > -1 || domain.indexOf(\"elcomercio.es\") > -1 || domain.indexOf(\"eldiariomontanes.es\") > -1 || domain.indexOf(\"larioja.com\") > -1 || domain.indexOf(\"elnortedecastilla.es\") > -1 || domain.indexOf(\"leonoticias.com\") > -1 || domain.indexOf(\"hoy.es\") > -1 || domain.indexOf(\"ideal.es\") > -1 || domain.indexOf(\"laverdad.es\") > -1 || domain.indexOf(\"lasprovincias.es\") > -1 || domain.indexOf(\"elbierzonoticias.com\") > -1) {\n return true;\n } else {\n return false;\n }\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Formatea un mensaje para las redes sociales. Si hay código html en el mensaje entonces se obvia\n * y se recoge en su lugar el título de la pestaña\n * @param mensaje Mensaje para formatear\n * @param tituloPestana Título de la pestaña. Texto a usar por defecto cuando no hay mensaje\n * @param comillas Indica si debe escapar las comillas dobles y simples (Facebook) o no escaparlas (Twitter)\n * @returns Mensaje formateado\n */\nfunction formatMensaje(mensaje, tituloPestana, comillas) {\n\n if (typeof tituloPestana == \"undefined\") {\n tituloPestana = gTituloPestana;\n }\n // El mensaje será nulo cuando se comparte desde la parte inferior del módulo\n if (mensaje == null) {\n mensaje = tituloPestana\n }\n // Elimina un código html que inserta la API de SL y que aquí nos suda la polla\n if (mensaje.indexOf(\"ScribbleLiveCountImage\") > -1) {\n mensaje = mensaje.substring(0, mensaje.indexOf(\" -1) {\n mensaje = mensaje.replace(/(<([^>]+)>)/ig, \"\");\n }\n mensaje = $.trim(mensaje);\n if (comillas) {\n mensaje = mensaje.replace(/\"/g,'\\\\\"');\n mensaje = mensaje.replace(/'/g,'\\\\\"');\n mensaje = mensaje.substring(0,200);\n } else {\n mensaje = mensaje.substring(0,140);\n mensaje = encodeURI(mensaje);\n mensaje = mensaje.replace(/'/g, \"%27\");\n }\n\n if (mensaje.length == 0) {\n mensaje = tituloPestana\n }\n\n return mensaje;\n\n}\n\n/**\n * Pasa una url de relativa a absoluta si no lo es\n * @param url Url a convertir. Si es absoluta se deja tal cual\n * @returns {String} Url siempre absoluta\n */\nfunction urlAbsoluta(url) {\n if (url.indexOf(\"http\") != 0) {\n var urlAbs = location.protocol + \"//\" + document.domain;\n var edition = Voonto.getInstance().lookup('vocento.site.editions.current');\n if (edition != null && edition != \"null\" && edition.replace(/\\s/g,\"\") != \"\") {\n urlAbs += \"/\" + edition;\n }\n urlAbs += url;\n url = urlAbs;\n }\n return url;\n}\n\n/**\n * Averigua si un post tiene como origen Twitter o no\n * @param post Elemento json con toda la información del post\n * @param twtpl Template de Twitter\n * @returns Verdadero si el post tiene como origen Twitter, falso en caso contrario\n */\nfunction isTwitterPost(post, twtpl) {\n try {\n if ((post.PostMeta.source == \"twitter\" || post.Source.indexOf(\"twitter\") > -1) && twtpl != null) {\n return true;\n } else {\n return false;\n }\n } catch (e) {\n return false;\n }\n\n}\n\n/**\n * Genera el código HTML para compartir una página en Twitter\n * @param urlPaginaDetalle URL de la página a compartir\n * @param tituloPestana Texto explicativo para compartir\n * @param mensaje Texto del mensaje a compartir. Este parámetro vendrá con valor cuando se comparta un mensaje en concreto\n * @returns {String} Cadena HTML para compartir en Twitter\n */\nfunction twitterShare(urlPaginaDetalle, tituloPestana, mensaje) {\n\n mensaje = formatMensaje(mensaje, tituloPestana, false);\n urlPaginaDetalle = (typeof urlPaginaDetalle != \"undefined\" && urlPaginaDetalle.replace(/\\s/g,\"\") != \"\") ? urlPaginaDetalle : location.href;\n urlPaginaDetalle = urlAbsoluta(urlPaginaDetalle);\n var url = 'https://twitter.com/intent/tweet?url=' + escape(urlPaginaDetalle) +\n '&text=' + mensaje +\n '&via=' + socialNetworks.getTwitterAccount();\n var width = 575;\n var height = 400;\n var left = ($(window).width() - width) / 2;\n var top = ($(window).height() - height) / 2;\n var opts = 'status=1' +\n ',width=' + width +\n ',height=' + height +\n ',top=' + top +\n ',left=' + left;\n return 'T';\n\n}\n\n/**\n * Obtiene el id de la aplicación de Facebook según el medio\n * @returns {String} Id de la aplicación de Facebook del medio\n */\nfunction getFBId() {\n var media = Voonto.getInstance().lookup('vocento.site.media');\n if (media.indexOf(\"comercio\") > -1) {\n return \"95009241017\";\n } else if (media.indexOf(\"diariomontanes\") > -1) {\n return \"77981614515\";\n } else if (media.indexOf(\"elcorreo\") > -1) {\n return \"101374325995\";\n } else if (media.indexOf(\"diariovasco\") > -1) {\n return \"189716465103\";\n } else if (media.indexOf(\"larioja\") > -1) {\n return \"84755916337\";\n } else if (media.indexOf(\"nortedecastilla\") > -1) {\n return \"85441402889\";\n } else if (media.indexOf(\"provincias\") > -1) {\n return \"192864680242\";\n } else if (media.indexOf(\"laverdad\") > -1) {\n return \"84315835682\";\n } else if (media.indexOf(\"ideal\") > -1) {\n return \"99542490759\";\n } else if (media.indexOf(\"diariosur\") > -1) {\n return \"96373116360\";\n } else if (media.indexOf(\"hoy\") > -1) {\n return \"79017991068\";\n } else if (media.indexOf(\"leonoticias\") > -1 || media.indexOf(\"elbierzonoticias\") > -1) {\n return \"885569074898163\";\n } else {\n // Por defecto se devuelve el Id de El Correo\n return \"101374325995\";\n }\n}\n\n/**\n * Código JS para hacer la llamada a Facebook\n * @param id Id del mensaje de Scribblive. Cuando viene desde la llamada global será un \"0\"\n * @param urlPaginaDetalle URL de la página a compartir\n * @param tituloPestana Texto explicativo para compartir\n * @param mensaje Texto del mensaje a compartir. Este parámetro vendrá con valor cuando se comparta un mensaje en concreto\n */\nfunction addFBShare(id, urlPaginaDetalle, tituloPestana, mensaje) {\n\n var dialog = new FacebookFeedDialog(getFBId(), urlPaginaDetalle,\n 'http://' + document.domain + '/comun/html/2014/facebook-redirect-uri.html');\n dialog.addParam('name', mensaje);\n // Lotería\n if (tituloPestana.toLowerCase().indexOf(\"loter\") > -1) {\n dialog.addParam('description', 'Cobertura en directo de la Loter\\u00eda de Navidad');\n } else {\n dialog.addParam('description', 'Cobertura en directo');\n }\n dialog.addParam('picture', 'http://' + document.domain + '/img/2014/logoC-200.png');\n var media = Voonto.getInstance().lookup('vocento.site.media');\n dialog.addParam('caption', media);\n\n dialog.open();\n\n}\n\n/**\n * Genera el código HTML para compartir una página en Facebook\n * @param urlPaginaDetalle URL de la página a compartir\n * @param tituloPestana Texto explicativo para compartir\n * @param mensaje Texto del mensaje a compartir. Este parámetro vendrá con valor cuando se comparta un mensaje en concreto\n * @param id Id del mensaje de Scribblive. Cuando viene desde la llamada global será un \"0\"\n * @returns {String} Cadena HTML para compartir en Facebook\n */\nfunction facebookShare(urlPaginaDetalle, tituloPestana, mensaje, id) {\n mensaje = formatMensaje(mensaje, tituloPestana, true);\n urlPaginaDetalle = (typeof urlPaginaDetalle != \"undefined\" && urlPaginaDetalle.replace(/\\s/g,\"\") != \"\") ? urlPaginaDetalle : location.href;\n urlPaginaDetalle = urlAbsoluta(urlPaginaDetalle);\n var codigoHTMLFacebook = \"F\";\n return codigoHTMLFacebook;\n}\n\n/**\n * Carga los mensajes de la anterior página (siempre y cuando haya más de una página)\n */\nfunction loadPreviousPage() {\n if (lastPage > 0) {\n // Indica que se quieren obtener los últimos mensajes\n lastMessages = true;\n // Muestra la capa de carga\n $(\"#SL_loadingPages\").show();\n // Obtiene los mensajes de la página anterior\n InvocaScribbleLive.GetInstance(instanceIndex).GetOldPosts();\n }\n}\n\n/**\n * Evento que se lanza al cambiar la pestaña del módulo\n * @param numPestana Número de pestaña (numérico) a mostrar\n * @param idEvento Id del evento de la pestaña\n * @param urlPaginaDetalle URL de la página de detalle de la pestaña\n * @param escribeCapaJs true cuando se carga el módulo vía JavaScript, false si se carga el iframe\n * @param SL_valor_numeroMensajesPagina Número de mensajes a mostrar en la pestaña\n * @param PageNumber Número de la página seleccionada\n * @param avatar Indica si debe mostrar o no el avatar del usuario\n * @param ColumnLocation Posición del módulo en la página (C, AB)\n * @param tituloPestana Título de la pestaña\n * @param medio Medio donde se muestra el módulo\n * @param edicion Edición del medio donde se muestra el módulo\n */\nexport function SL_cambiaPestana({\n numPestana,\n idEvento,\n urlPaginaDetalle,\n escribeCapaJs,\n SL_valor_numeroMensajesPagina,\n PageNumber,\n avatar,\n ColumnLocation,\n tituloPestana,\n medio,\n edicion,\n SL_valor_plantilla,\n Scribble_ancho,\n Scribble_alto,\n Scribble_pageElementId,\n Scribble_template,\n Scribble_Iframe_API,\n APIToken,\n Scribble_API,\n container$\n}) {\n\n // Se lee la plantilla interna de Scribble a utilizar. Si no hay ninguna definida se utiliza la plantilla por defecto\n\n var marcadorManualActivo = false;\n // Obtiene los valores de alto y ancho\n var SL_valor_ancho = '300';\n var SL_valor_ancho_embebido = '300';\n if (typeof Scribble_ancho != \"undefined\") {\n try {\n SL_valor_ancho = Scribble_ancho;\n if (SL_valor_ancho.indexOf('px') != -1) {\n SL_valor_ancho = SL_valor_ancho.replace('px', '');\n }\n var ancho = parseInt(SL_valor_ancho);\n SL_valor_ancho_embebido = ancho;\n $(\".SL_moduloDirecto\").css(\"width\", \"\" + ancho + \"px\");\n } catch(err) {\n }\n }\n\n var SL_valor_alto = '450';\n var SL_valor_alto_embebido = '340';\n if (typeof Scribble_alto != \"undefined\") {\n try {\n SL_valor_alto = Scribble_alto;\n var alto = parseInt(SL_valor_alto);\n SL_valor_alto_embebido = alto - 110;\n if (typeof voc_pl == \"undefined\" || voc_pl != 'm') {\n $(\".SL_moduloDirecto\").css(\"height\", \"\" + alto + \"px\");\n $(\"#SL_evento\").css(\"height\", \"\" + (alto - 70) + \"px\");\n }\n } catch(err) {\n }\n }\n\n // Id de la capa donde se escribirá el contenido de Scribblelive\n var pageElementId = \"SL_evento\";\n if (typeof Scribble_pageElementId != \"undefined\") {\n pageElementId = Scribble_pageElementId;\n }\n // Carga rápida\n\n if (escribeCapaJs) {\n var template = \"\";\n if (typeof Scribble_template != \"undefined\") {\n template = Scribble_template;\n }\n var templateTwitter = null;\n if (typeof Scribble_template_twitter != \"undefined\") {\n templateTwitter = Scribble_template_twitter;\n }\n var dateFormat = \"DD/MM - HH:mm\";\n if (typeof Scribble_dateFormat != \"undefined\") {\n dateFormat = Scribble_dateFormat;\n }\n var todayDateFormat = \"HH:mm:ss\";\n if (typeof Scribble_todayDateFormat != \"undefined\") {\n todayDateFormat = Scribble_todayDateFormat;\n }\n // Borra todo contenido donde se van a mostrar los mensajes de Scribblelive\n $(\"#\" + pageElementId).html(\"\");\n // Invoca a Scribble\n var ScribbleLiveInstance = new InvocaScribbleLive({\n \"APIToken\": APIToken,\n \"EventId\": idEvento,\n container$,\n \"TotalPostsToShow\": SL_valor_numeroMensajesPagina,\n \"DateFormat\": dateFormat,\n \"TodayDateFormat\": todayDateFormat,\n \"PageElementId\": pageElementId,\n \"ShowAvatars\": avatar,\n \"Template\": template,\n \"TemplateTwitter\": templateTwitter,\n \"HTMLElementId\": \"scribbleContent\",\n \"ColumnLocation\": ColumnLocation,\n \"Medio\": medio,\n \"Edicion\": edicion,\n \"UrlPaginaDetalle\": urlPaginaDetalle,\n \"Scribble_API\": Scribble_API,\n \"PageNumber\": PageNumber,\n });\n } else {\n // Se muestra el iframe\n var codigoHTMLIframe = '';\n $(\"#\" + pageElementId).html(codigoHTMLIframe).ready(() => {\n $(\"#SL_imagenCargando\").hide();\n });\n }\n\n // Enlace a la pagina de detalle\n if (urlPaginaDetalle != null && urlPaginaDetalle != 'null') {\n // Si la url lleva a live.vocento.com se añade medio y edición\n if (urlPaginaDetalle.indexOf(\"live.vocento.com/scribblelive/redirect.php?recid=\") > -1 && urlPaginaDetalle.indexOf(\"medio=\") == -1) {\n var re = new RegExp(\"recid=([^&].*)\");\n var parametrosLlamada = \"&medio=\" + medio;\n if (edicion != null && edicion != \"null\" && edicion.replace(/\\s/g,\"\") != \"\") {\n parametrosLlamada = parametrosLlamada + \"&edicionLocal=\" + edicion;\n }\n urlPaginaDetalle = urlPaginaDetalle.replace(re, \"recid=$1\" + parametrosLlamada);\n }\n // Asignación de la variable global\n gUrlPaginaDetalle = urlPaginaDetalle;\n var codigoHTMLURLPaginaDetalle = 'Ver cobertura completa';\n $(\"#SL_coberturaCompleta\").html(codigoHTMLURLPaginaDetalle);\n if (tipoEspecial != \"elecciones-2015\") {\n $(\"#SL_coberturaCompleta\").show();\n }\n\n if (urlPaginaDetalle.indexOf('redirect.php') == -1 || tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") {\n // Se muestran los iconos de las redes sociales. El de Twitter no lleva URL como parametro así que no hace falta sobreescribirlo\n if (tituloPestana == null || tituloPestana.replace(/\\s/g,\"\") == \"\") {\n tituloPestana = \"Actualidad en directo\";\n }\n if ((tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") && (typeof Scribble_posicionColumna != \"undefined\" && Scribble_posicionColumna != \"AB\")) {\n var codigoHTMLTwitter = twitterShare(urlPaginaDetalle, tituloPestana, null);\n var codigoHTMLFacebook = facebookShare(urlPaginaDetalle, tituloPestana, null, '0');\n } else {\n var codigoHTMLFacebook = '';\n var codigoHTMLTwitter = 'Tweet';\n }\n $(\"#SL_iconoFacebook\").html(codigoHTMLFacebook);\n $(\"#SL_iconoTwitter\").html(codigoHTMLTwitter);\n $(\"#SL_iconos\").show();\n } else {\n $(\"#SL_iconos\").hide();\n }\n // Iframe\n } else {\n $(\"#SL_coberturaCompleta\").hide();\n $(\"#SL_iconos\").hide();\n }\n\n if (document.getElementById(\"contentMarcador\" + numPestana + \"Manual\")) {\n $(\"#SL_marcadoresDirecto\").css(\"margin-top\",\"44px\");\n } else {\n $(\"#SL_marcadoresDirecto\").css(\"margin-top\",\"0px\");\n }\n\n // Se marca como activa la pestaña correspondiente y se desactivan las demás\n if (!$(\"#SL_pestana\" + numPestana).hasClass('activo')) {\n $(\"#SL_pestana\" + numPestana).addClass('activo');\n if (document.getElementById(\"SL_marcadorDirecto\" + numPestana) && $.trim(document.getElementById(\"SL_marcadorDirecto\" + numPestana).innerHTML) != '') {\n $(\"#SL_marcadorDirecto\" + numPestana).show();\n }\n }\n if ((numPestana != 1) && $(\"#SL_pestana1\").hasClass('activo')) {\n $(\"#SL_pestana1\").removeClass('activo');\n $(\"#SL_marcadorDirecto1\").hide();\n }\n if ((numPestana != 2) && $(\"#SL_pestana2\").hasClass('activo')) {\n $(\"#SL_pestana2\").removeClass('activo');\n $(\"#SL_marcadorDirecto2\").hide();\n }\n if ((numPestana != 3) && $(\"#SL_pestana3\").hasClass('activo')) {\n $(\"#SL_pestana3\").removeClass('activo');\n $(\"#SL_marcadorDirecto3\").hide();\n }\n if ((numPestana != 4) && $(\"#SL_pestana4\").hasClass('activo')) {\n $(\"#SL_pestana4\").removeClass('activo');\n $(\"#SL_marcadorDirecto4\").hide();\n }\n\n // Asignación de la variable global\n gTituloPestana = tituloPestana;\n\n}\n\n/**\n * Llamada principal para construir el módulo de Scribble y obtener los mensajes\n * @param medio Medio donde se construye el módulo\n * @param edicion Edición de se construye el módulo\n */\nexport function SL_construyeModulo({\n medio,\n edicion,\n escribeCapaJs,\n ColumnLocation,\n avatar1,\n avatar2,\n avatar3,\n avatar4,\n SL_valor_epigrafe,\n SL_url_epigrafe,\n Scribble_tipoEspecial,\n SL_valor_numeroMensajesPagina,\n PageNumber,\n\n SL_valor_evento1ID,\n SL_valor_evento1Titulo,\n SL_valor_evento1URLPaginaDetalle,\n\n SL_valor_evento2ID,\n SL_valor_evento2Titulo,\n SL_valor_evento2URLPaginaDetalle,\n\n SL_valor_evento3ID,\n SL_valor_evento3Titulo,\n SL_valor_evento3URLPaginaDetalle,\n\n SL_valor_evento4ID,\n SL_valor_evento4Titulo,\n SL_valor_evento4URLPaginaDetalle,\n\n SL_valor_plantilla,\n Scribble_ancho,\n Scribble_alto,\n Scribble_pageElementId,\n Scribble_template,\n Scribble_template_twitter,\n Scribble_dateFormat,\n Scribble_todayDateFormat,\n Scribble_Iframe_API,\n APIToken,\n Scribble_API,\n\n container$\n}) {\n\n // Se obtienen los mensajes más nuevos\n lastMessages = false;\n\n if (ColumnLocation == \"AB\") {\n isArticulo = true;\n }\n\n tipoEspecial = Scribble_tipoEspecial;\n\n if (SL_url_epigrafe != null && (SL_url_epigrafe.indexOf(\"http://\") > -1 || SL_url_epigrafe.indexOf(\"https://\") > -1)) {\n // Si la url lleva a live.vocento.com se añade medio y edición\n if (SL_url_epigrafe.indexOf(\"live.vocento.com/scribblelive/redirect.php?recid=\") > -1 && SL_url_epigrafe.indexOf(\"medio=\") == -1) {\n var re = new RegExp(\"recid=([^&].*)\");\n var parametrosLlamada = \"&medio=\" + medio;\n if (edicion != null && edicion != \"null\" && edicion.replace(/\\s/g,\"\") != \"\") {\n parametrosLlamada = parametrosLlamada + \"&edicionLocal=\" + edicion;\n }\n SL_url_epigrafe = SL_url_epigrafe.replace(re, \"recid=$1\" + parametrosLlamada);\n }\n SL_valor_epigrafe = \"\" + SL_valor_epigrafe + \"\";\n }\n if ((tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") && SL_url_epigrafe != null) {\n $(\"#enlaceSLElecciones2015\").attr(\"href\", urlAbsoluta(SL_url_epigrafe));\n } else {\n $(\"#SL_epigrafe\").html(SL_valor_epigrafe);\n $(\"#SL_epigrafe\").show();\n }\n\n var marcadorManualActivo = false;\n // Eventos. Si hay más de uno se muestran las pestañas\n var numEventos = 0;\n\n if ((tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") && typeof SL_valor_evento1URLPaginaDetalle != \"undefined\" && SL_valor_evento1URLPaginaDetalle != null && SL_valor_evento1URLPaginaDetalle != \"\") {\n var urlAbs = urlAbsoluta(SL_valor_evento1URLPaginaDetalle);\n $(\"#spanSDElecciones2015\").html(\"Sigue el Directo\");\n }\n if (SL_valor_evento1ID != null && SL_valor_evento1ID != \"\" && SL_valor_evento1Titulo != null) {\n let cambiaPestanaCfg = {\n escribeCapaJs,\n ColumnLocation,\n SL_valor_numeroMensajesPagina,\n PageNumber,\n medio,\n edicion,\n SL_valor_plantilla,\n Scribble_ancho,\n Scribble_alto,\n Scribble_pageElementId,\n Scribble_template,\n Scribble_template_twitter,\n Scribble_dateFormat,\n Scribble_todayDateFormat,\n Scribble_Iframe_API,\n APIToken,\n Scribble_API,\n numPestana: 1,\n idEvento: SL_valor_evento1ID,\n urlPaginaDetalle: SL_valor_evento1URLPaginaDetalle,\n avatar: avatar1,\n tituloPestana: SL_valor_evento1Titulo\n };\n let strCfg = JSON.stringify(cambiaPestanaCfg);\n var codigoHTMLPestana1 = '' + SL_valor_evento1Titulo + '';\n $(\"#SL_pestana1\").html(codigoHTMLPestana1);\n if (document.getElementById(\"contentMarcador1\") && $.trim(document.getElementById(\"contentMarcador1\").innerHTML) != '') {\n $(\"#SL_marcadorDirecto1\").html(document.getElementById(\"contentMarcador1\").innerHTML);\n if (document.getElementById(\"contentMarcador1Manual\")) {\n $(\"#SL_marcadorDirecto1\").addClass(\"nmarcador\");\n $(\"#SL_marcadoresDirecto\").addClass(\"noticia-marcador\");\n $(\"#SL_marcadoresDirecto\").css(\"position\",\"relative\");\n marcadorManualActivo = true;\n }\n $(\"#SL_marcadorDirecto1\").show();\n }\n numEventos++;\n }\n\n if (SL_valor_evento2ID != null && SL_valor_evento2ID != \"\" && SL_valor_evento2Titulo != null) {\n let cambiaPestanaCfg = {\n escribeCapaJs,\n ColumnLocation,\n SL_valor_numeroMensajesPagina,\n PageNumber,\n medio,\n edicion,\n SL_valor_plantilla,\n Scribble_ancho,\n Scribble_alto,\n Scribble_pageElementId,\n Scribble_template,\n Scribble_template_twitter,\n Scribble_dateFormat,\n Scribble_todayDateFormat,\n Scribble_Iframe_API,\n APIToken,\n Scribble_API,\n numPestana: 2,\n idEvento: SL_valor_evento2ID,\n urlPaginaDetalle: SL_valor_evento2URLPaginaDetalle,\n avatar: avatar2,\n tituloPestana: SL_valor_evento2Titulo\n };\n let strCfg = JSON.stringify(cambiaPestanaCfg);\n var codigoHTMLPestana2 = '' + SL_valor_evento2Titulo + '';\n $(\"#SL_pestana2\").html(codigoHTMLPestana2);\n $(\"#SL_pestana2\").show();\n if (document.getElementById(\"contentMarcador2\") && $.trim(document.getElementById(\"contentMarcador2\").innerHTML) != '') {\n\n $(\"#SL_marcadorDirecto2\").html(document.getElementById(\"contentMarcador2\").innerHTML);\n if (document.getElementById(\"contentMarcador2Manual\")) {\n $(\"#SL_marcadorDirecto2\").addClass(\"nmarcador\");\n $(\"#SL_marcadoresDirecto\").addClass(\"noticia-marcador\");\n $(\"#SL_marcadoresDirecto\").css(\"position\",\"relative\");\n }\n }\n numEventos++;\n }\n\n if (SL_valor_evento3ID != null && SL_valor_evento3ID != \"\" && SL_valor_evento3Titulo != null) {\n let cambiaPestanaCfg = {\n escribeCapaJs,\n ColumnLocation,\n SL_valor_numeroMensajesPagina,\n PageNumber,\n medio,\n edicion,\n SL_valor_plantilla,\n Scribble_ancho,\n Scribble_alto,\n Scribble_pageElementId,\n Scribble_template,\n Scribble_template_twitter,\n Scribble_dateFormat,\n Scribble_todayDateFormat,\n Scribble_Iframe_API,\n APIToken,\n Scribble_API,\n numPestana: 3,\n idEvento: SL_valor_evento3ID,\n urlPaginaDetalle: SL_valor_evento3URLPaginaDetalle,\n avatar: avatar3,\n tituloPestana: SL_valor_evento3Titulo\n };\n let strCfg = JSON.stringify(cambiaPestanaCfg);\n var codigoHTMLPestana3 = '' + SL_valor_evento3Titulo + '';\n $(\"#SL_pestana3\").html(codigoHTMLPestana3);\n $(\"#SL_pestana3\").show();\n if (document.getElementById(\"contentMarcador3\") && $.trim(document.getElementById(\"contentMarcador3\").innerHTML) != '') {\n $(\"#SL_marcadorDirecto3\").html(document.getElementById(\"contentMarcador3\").innerHTML);\n if (document.getElementById(\"contentMarcador3Manual\")) {\n $(\"#SL_marcadorDirecto3\").addClass(\"nmarcador\");\n $(\"#SL_marcadoresDirecto\").addClass(\"noticia-marcador\");\n $(\"#SL_marcadoresDirecto\").css(\"position\",\"relative\");\n }\n }\n numEventos++;\n }\n\n if (SL_valor_evento4ID != null && SL_valor_evento4ID != \"\" && SL_valor_evento4Titulo != null) {\n let cambiaPestanaCfg = {\n escribeCapaJs,\n ColumnLocation,\n SL_valor_numeroMensajesPagina,\n PageNumber,\n medio,\n edicion,\n SL_valor_plantilla,\n Scribble_ancho,\n Scribble_alto,\n Scribble_pageElementId,\n Scribble_template,\n Scribble_template_twitter,\n Scribble_dateFormat,\n Scribble_todayDateFormat,\n Scribble_Iframe_API,\n APIToken,\n Scribble_API,\n numPestana: 4,\n idEvento: SL_valor_evento4ID,\n urlPaginaDetalle: SL_valor_evento4URLPaginaDetalle,\n avatar: avatar4,\n tituloPestana: SL_valor_evento4Titulo\n };\n let strCfg = JSON.stringify(cambiaPestanaCfg);\n\n var codigoHTMLPestana4 = '' + SL_valor_evento4Titulo + '';\n $(\"#SL_pestana4\").html(codigoHTMLPestana4);\n $(\"#SL_pestana4\").show();\n if (document.getElementById(\"contentMarcador4\") && $.trim(document.getElementById(\"contentMarcador4\").innerHTML) != '') {\n $(\"#SL_marcadorDirecto4\").html(document.getElementById(\"contentMarcador4\").innerHTML);\n if (document.getElementById(\"contentMarcador4Manual\")) {\n $(\"#SL_marcadorDirecto4\").addClass(\"nmarcador\");\n $(\"#SL_marcadoresDirecto\").addClass(\"noticia-marcador\");\n $(\"#SL_marcadoresDirecto\").css(\"position\",\"relative\");\n }\n }\n numEventos++;\n }\n\n if (marcadorManualActivo) {\n $(\"#SL_marcadoresDirecto\").css(\"margin-top\",\"44px\");\n }\n if (numEventos < 2) {\n // No se muestran las pestañas\n $(\"#SL_pestanas\").css(\"display\", \"none\");\n } else {\n // Se muestran las pestañas al haber más de un evento activo\n $(\"#SL_pestanas\").css(\"display\", \"block\");\n }\n\n // Por defecto siempre se muestra el primer evento\n SL_cambiaPestana({\n escribeCapaJs,\n ColumnLocation,\n SL_valor_numeroMensajesPagina,\n PageNumber,\n medio,\n edicion,\n SL_valor_plantilla,\n Scribble_ancho,\n Scribble_alto,\n Scribble_pageElementId,\n Scribble_template,\n Scribble_template_twitter,\n Scribble_dateFormat,\n Scribble_todayDateFormat,\n Scribble_Iframe_API,\n APIToken,\n Scribble_API,\n numPestana: 1,\n idEvento: SL_valor_evento1ID,\n urlPaginaDetalle: SL_valor_evento1URLPaginaDetalle,\n avatar: avatar1,\n tituloPestana: SL_valor_evento1Titulo,\n container$\n });\n $(\"#SL_pestana1\").addClass('activo');\n}\n\n\n\n/* ----------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n CÓDIGO ESPECÍFICO PARA MOSTRAR LOS MENSAJES DE SCRIBBLELIVE\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-------------------------------------------------------------------------------------------------------------\n-----------------------------------------------------------------------------------------------------------*/\n\nexport function InvocaScribbleLive(Opciones) {\n\n // Inicialización por defecto de los parámetros de Scribble\n this.Opciones = {\n // You can find your API tokens - and generate new ones - under the general API section of your ScribbleLive back end. https://client.scribblelive.com/client/API.aspx\n APIToken: \"\",\n // You can find your event id under the API section of your event in the ScribbleLive back end. You can also view source on your event and search for \"ThreadId\".\n EventId: \"\",\n // The number of posts you would like to display.\n TotalPostsToShow: 10,\n // Show images, true or false.\n ShowImages: true,\n // Show videos, true or false.\n ShowVideos: true,\n // Show audio, true or false.\n ShowAudio: true,\n // Show stuck posts, true or false.\n ShowStuckPosts: true,\n //Show avatars, true or false.\n ShowAvatars: false,\n // Show text posts, true or false.\n ShowTextPosts: true,\n // Show polls, true or false.\n ShowPolls: false,\n // Show media captions, true or false.\n ShowCaptions: true,\n // Show comments, true or false.\n ShowComments: true,\n // Show official (writer, editor, moderator, administrator, guest writer, etc.) posts, true or false.\n ShowOfficialPosts: true,\n // Show Twitter posts, true or false.\n ShowTweets: true,\n // Show mobile posts, true of false.\n ShowMobilePosts: true,\n // Show Facebook posts, true or false.\n ShowFacebookPosts: true,\n // Show only Twitter posts, true or false.\n ShowOnlyTweets: false,\n // Show only Facebook posts, true or false.\n ShowOnlyFacebookPosts: false,\n // Show only polls, true or false.\n ShowOnlyPolls: false,\n // Tiempo de recarga\n AutoUpdateTimeOut: 10,\n // Formato de fecha para un mensaje anterior al día de hoy\n DateFormat: \"HH:mm:ss\",\n // Formato de fecha para un mensaje del día de hoy\n TodayDateFormat: \"HH:mm:ss\",\n // Id de la capa donde irá incrustado todo el contenido de ScribbleLive\n PageElementId: \"\",\n // Ruta de la plantilla que se usará para mostrar cada uno de los mensajes\n Template: \"\",\n // Ruta de la plantilla que se usará para mostrar un mensaje de Twitter en un artículo noticia\n TemplateTwitter: null,\n // Id de la capa del elemento HTML que incluirá en su interior cada uno de los mensajes\n HTMLElementId: \"\",\n // Posición del módulo en la página (AB, B, C)\n ColumnLocation: \"C\",\n // Medio\n Medio: \"\",\n // Edición local\n Edicion: \"\",\n Scribble_API: \"\",\n UrlPaginaDetalle: \"\",\n PageNumber: 'last'\n }\n\n // Inicializa los parámetros de la función\n for (var opt in Opciones) {\n if (Opciones.hasOwnProperty(opt)) {\n this.Opciones[opt] = Opciones[opt];\n }\n }\n\n // Número de mensajes a mostrar\n if (this.Opciones.TotalPostsToShow == \"\" || isNaN(this.Opciones.TotalPostsToShow)) {\n this.Opciones.TotalPostsToShow = 10;\n }\n if (this.Opciones.TotalPostsToShow > 100 && this.Opciones.ColumnLocation != \"AB\") {\n this.Opciones.TotalPostsToShow = 50;\n }\n\n // Tiempo mínimo (en segundos) de recarga del contenido\n if (this.Opciones.AutoUpdateTimeOut < 10) {\n this.Opciones.AutoUpdateTimeOut = 10;\n }\n\n // Detiene cualquier posible llamada anterior al método\n this.clearDelayFetch(Wait);\n\n // Objeto XMLHttpRequest para los distintos navegadores\n xmlHttp = getHTTPObject();\n\n // Momento de última modificación\n this.LastModifiedTime = \"\";\n\n // User agent del dispositivo\n this.DeviceAgent = navigator.userAgent.toLowerCase();\n\n // Índice para los eventos múltiples del script\n\n this.InstanceIndex = InvocaScribbleLive.StoreInstance(this);\n\n instanceIndex = this.InstanceIndex;\n\n // Array con los elementos originales\n this.originales = new Array();\n\n // Array con los elementos JSON a mostrar\n this.elementos = new Array();\n\n // Array con los mensajes fijos\n this.fijos = new Array();\n\n // Obtiene el contenido de la plantilla\n this.TemplateData = this.Opciones.Template;\n\n // Plantilla de Twitter para el artículo noticia\n this.TemplateTwitter = this.Opciones.TemplateTwitter;\n if (this.TemplateTwitter != null) {\n this.TemplateTwitter = this.Opciones.TemplateTwitter;\n }\n\n // Indica que se trata de la carga inicial\n this.inicial = true;\n\n // Obtiene los mensajes más recientes. Esta llamada solo se hace la primera vez que se carga el módulo\n this.GetAllPosts();\n\n}\n\n\n// Índice\nInvocaScribbleLive.Index = 0;\n\n// The function that decides which instance of the recent posts object is currently being used.\nInvocaScribbleLive.GetInstance = function (pIndex) {\n\n if (InvocaScribbleLive.__instances == undefined) {\n return undefined;\n }\n else {\n return InvocaScribbleLive.__instances[\"\" + pIndex];\n }\n};\n\n// The function that sets the instance of the recent posts object.\nInvocaScribbleLive.StoreInstance = function (pInvocaScribbleLiveInstance) {\n\n if (InvocaScribbleLive.__instances == undefined) {\n InvocaScribbleLive.__instances = [];\n }\n\n var _Index = InvocaScribbleLive.Index;\n InvocaScribbleLive.Index++;\n\n InvocaScribbleLive.__instances[_Index] = pInvocaScribbleLiveInstance;\n\n return _Index;\n};\n\n// Aquí se muestran los post obtenidos de la llamada recursiva\nInvocaScribbleLive.prototype.DrawPosts = function (pResponse) {\n // Array de comprobación de mensajes \"editados\" que son realmente mensajes nuevos\n var insertadosDesdeEdicion = new Array();\n var addedNewPosts = false;\n var newPostsCount = 0;\n if (!this.inicial) {\n\n if (pResponse.Edits != undefined) {\n // Obtiene el máximo Id que se muestra actualmente, es decir, el id del mensaje más reciente\n var maxId = 0;\n try {\n for (var mi = 0; mi < this.elementos.length; mi++) {\n if (maxId < parseInt(this.elementos[mi].Id)) {\n maxId = parseInt(this.elementos[mi].Id);\n }\n }\n\n } catch (e) {}\n for (var ed = 0; ed < pResponse.Edits.length; ed++) {\n // Si el Id del mensaje editado es superior al Id más reciente acumulado hasta el momento\n // indica que se trata de un nuevo post posiblemente con origen sindicado\n if (parseInt(pResponse.Edits[ed].Id) > maxId) {\n insertadosDesdeEdicion.push(parseInt(pResponse.Edits[ed].Id));\n // Se trata como un mensaje nuevo\n addedNewPosts = this.AddPost(pResponse.Edits[ed]);\n }\n }\n }\n }\n\n // Añade los nuevos elementos a la lista JSON\n if (pResponse.Posts != undefined) {\n for (var p = 0; p < pResponse.Posts.length; p++) {\n addedNewPosts = this.AddPost(pResponse.Posts[p]);\n }\n }\n\n // Actualiza los elementos editados si están en la lista a mostrar y no han sido ya modificados\n var arrayEdicion = new Array();\n var arrayFijosEdicion = new Array();\n if (pResponse.Edits != undefined) {\n for (var e = 0; e < pResponse.Edits.length; e++) {\n // Se comprueba que el elemento no esté ya el array de insertados desde edición,\n // en cuyo caso no hay nada que editar al tratarse de un mensaje nuevo\n if ($.inArray(parseInt(pResponse.Edits[e].Id), insertadosDesdeEdicion) == -1) {\n for (var b = 0; b < this.elementos.length; b++) {\n pResponse.Edits[e].LastModified = pResponse.Edits[e].LastModified.replace(/\\+0000/g, \"\");\n var PostLastModified = eval(\"new \" + (pResponse.Edits[e].LastModified.replace(/\\//g, \"\")));\n\n if (pResponse.Edits[e].Id == parseInt(this.elementos[b].Id) && PostLastModified > this.LastModifiedTime) {\n var arrayEdiciones = this.EditPost(pResponse.Edits[e]);\n if (arrayEdiciones[0] > -1) {\n arrayEdicion.push(arrayEdiciones[0]);\n }\n if (arrayEdiciones[1] > -1) {\n arrayFijosEdicion.push(arrayEdiciones[1]);\n }\n }\n }\n }\n }\n }\n\n // Si hay elementos eliminados comprueba que estén en la lista a mostrar y en tal caso los elimina\n var eliminados = 0;\n if (pResponse.Deletes != undefined) {\n for (var d = 0; d < pResponse.Deletes.length; d++) {\n for (var a = 0; a < this.elementos.length; a++) {\n if (pResponse.Deletes[d].Id == parseInt(this.elementos[a].Id)) {\n var eliminado = this.DeletePost(pResponse.Deletes[d].Id);\n if (eliminado) {\n eliminados++;\n }\n }\n }\n }\n }\n\n // Copia con los elementos originales\n if (this.inicial) {\n this.originales = this.elementos.slice();\n }\n\n // Elimina los elementos sobrantes\n if (tipoEspecial != \"elecciones-2015\" || !isArticulo) {\n while (this.elementos.length > this.Opciones.TotalPostsToShow) {\n this.elementos.pop();\n }\n }\n\n // Rehace el array de elementos si ha habido alguna eliminación\n if (tipoEspecial != \"elecciones-2015\" || !isArticulo) {\n if (!this.inicial && this.elementos.length < this.Opciones.TotalPostsToShow && this.originales.length >= this.Opciones.TotalPostsToShow) {\n for (var i = this.elementos.length; this.elementos.length < this.Opciones.TotalPostsToShow; i++) {\n this.elementos.push(this.originales[i]);\n }\n }\n }\n\n // Obtiene el momento de última modificación del evento\n pResponse.LastModified = pResponse.LastModified.replace(/\\+0000/g, \"\"); //octal literales forbidden in scrict mode\n this.LastModifiedTime = eval(\"new \" + pResponse.LastModified.replace(/\\//g, \"\"));\n\n // Última página. Se le resta uno pues en realidad da la longitud de páginas, no la última (el muy gilipollas)\n lastPage = pResponse.Pages - 1;\n if (this.inicial) {\n pageToGet = lastPage - 1;\n if (pageToGet < 0) {\n pageToGet = 0;\n }\n }\n\n // Se formatea cada uno de elementos del JSON\n this.EditJsonElement(pResponse);\n\n // Divs actuales de la página\n var divs = document.getElementsByTagName('div');\n var divsArray = new Array();\n\n // Busca el primero div de la serie anterior de mensajes (solo lo encontrará si no es la primera carga), es decir, el mensaje más reciente hasta el momento\n var primerIdAntiguo = null;\n // Filtra solo los div de ScribbleLive y añade nuevos div con los nuevos mensajes\n for (var i = 0; i < divs.length; i++) {\n if (divs[i].id.indexOf(this.Opciones.HTMLElementId) > -1) {\n divsArray.push(divs[i]);\n if (!this.inicial && primerIdAntiguo == null) {\n primerIdAntiguo = divs[i].id;\n }\n }\n }\n\n var pintados = 0;\n for (var i = 0; i < this.elementos.length; i++) {\n var contiene = false;\n for (var j = 0; j < divsArray.length; j++) {\n // Comprueba si el div ya está incluido en la página\n if (divsArray[j].id == (this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id)) {\n contiene = true;\n break;\n }\n }\n // Si el div no está incluido se pinta en la página\n if (!contiene) {\n var capa = document.createElement('div');\n capa.id = this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id;\n if (isTwitterPost(this.elementos[i], this.TemplateTwitter)) {\n capa.innerHTML = this.TemplateTwitter;\n } else {\n capa.innerHTML = this.TemplateData;\n }\n if (primerIdAntiguo != null) {\n if (eliminados > 0) {\n if ($(\".mCSB_container\").length) {\n $(\".mCSB_container\").append(capa);\n } else {\n $(\"#\" + this.Opciones.PageElementId).append(capa);\n }\n eliminados--;\n } else {\n newPostsCount++;\n $(capa).insertBefore($(\"#\" + primerIdAntiguo));\n }\n } else {\n // Si es la carga inicial añade el elemento al final\n document.getElementById(this.Opciones.PageElementId).appendChild(capa);\n }\n\n // Render vía tempo del mensaje\n this.tempoRender(capa, { escape: false }, this.elementos[i]);\n pintados++;\n }\n // Si hay que editar el post se actualiza la capa\n if (arrayEdicion.length > 0) {\n for (var k = 0; k < arrayEdicion.length; k++) {\n if (i == arrayEdicion[k]) {\n var id = this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id;\n var capa = document.getElementById(id);\n if (isTwitterPost(this.elementos[i], this.TemplateTwitter)) {\n capa.innerHTML = this.TemplateTwitter;\n } else {\n capa.innerHTML = this.TemplateData;\n }\n try {\n document.getElementById(this.Opciones.PageElementId).replaceChild(capa, document.getElementById(id));\n } catch (errorEdit) {\n }\n this.tempoRender(capa, { escape: false }, this.elementos[i]);\n break;\n }\n }\n }\n\n }\n\n if (!this.inicial) {\n // Elimina los posibles elementos sobrantes (post antiguos)\n for (var i = 0; i < divsArray.length; i++) {\n var contiene = false;\n for (var j = 0; j < this.elementos.length; j++) {\n var id = this.Opciones.HTMLElementId + \"-\" + this.elementos[j].Id;\n if (divsArray[i].id == id) {\n contiene = true;\n break;\n }\n }\n if (!contiene) {\n $(\"#\" + divsArray[i].id).remove();\n }\n }\n\n // Posiciona los mensajes fijos en los primeros lugares\n var stuckPosition = 0;\n for (var i = 0; i < this.fijos.length; i++) {\n // Id del elemento a reemplazar. Ha de ser no fijo\n var toBeReplacedId = null;\n for (var j = 0; j < this.elementos.length; j++) {\n if (this.elementos[j].IsStuck != 1) {\n toBeReplacedId = this.Opciones.HTMLElementId + \"-\" + this.elementos[j].Id;\n break;\n }\n }\n if (toBeReplacedId != null) {\n // Id del elemento fijo\n var stuckedId = this.Opciones.HTMLElementId + \"-\" + this.fijos[i].Id;\n // Mueve el elemento fijo a la posición indicada por stuckPosition, siempre y cuando no sea la posición que ya ocupaba previamente\n if (toBeReplacedId != stuckedId && $(\"#\" + toBeReplacedId).isBefore($(\"#\" + stuckedId))) {\n // Borra el elemento fijo de su antigua posición\n if (document.getElementById(stuckedId)) {\n $(\"#\" + stuckedId).remove();\n }\n // Capa con el mensaje\n var capa = document.createElement('div');\n capa.id = stuckedId;\n if (isTwitterPost(this.fijos[i], this.TemplateTwitter)) {\n capa.innerHTML = this.TemplateTwitter;\n } else {\n capa.innerHTML = this.TemplateData;\n }\n // Inserta el elemento fijo en la posición stuckPosition\n $(capa).insertBefore($(\"#\" + toBeReplacedId));\n this.tempoRender(capa, { escape: false }, this.fijos[i]);\n }\n stuckPosition++;\n }\n // Elementos fijos editados\n for (var k = 0; k < arrayFijosEdicion.length; k++) {\n if (i == arrayFijosEdicion[k]) {\n var id = stuckedId;\n var capa = document.getElementById(id);\n if (isTwitterPost(this.fijos[i], this.TemplateTwitter)) {\n capa.innerHTML = this.TemplateTwitter;\n } else {\n capa.innerHTML = this.TemplateData;\n }\n document.getElementById(this.Opciones.PageElementId).replaceChild(capa, document.getElementById(id));\n\n this.tempoRender(capa, { escape: false }, this.fijos[i]);\n break;\n }\n }\n }\n }\n\n // Mensajes más nuevos\n lastMessages = false;\n\n // Llamada repetitiva para obtener nuevos mensajes\n this.setRetryFetch();\n\n if (window.twttr) {\n window.twttr.widgets.load();\n }\n\n if (this.inicial || addedNewPosts) {\n //Refrescamos video-player para que funcione\n Voonto.getInstance().trigger('videoplayer:refresh', [$('.voc-live-scribble')]);\n Voonto.getInstance().trigger('videoplayer:refresh', [$('.voc-live-module')]);\n }\n\n this.inicial ?\n this.triggerFullItemsRendered()\n :\n this.triggerFullItemsRendered(newPostsCount);\n\n this.inicial = false;\n};\n\nInvocaScribbleLive.prototype.triggerFullItemsRendered = function (itemsCount) {\n window.setTimeout(() => {\n if (itemsCount) {\n window.Voonto.getInstance().trigger('scribblelive:updated',[\n this.Opciones.container$.children().slice(0, itemsCount).get()\n ]);\n } else {\n window.Voonto.getInstance().promised('scribblelive:ready',\n this.Opciones.container$.get(0)\n );\n }\n }, 0);\n};\n\nInvocaScribbleLive.prototype.setRetryFetch = function (time) {\n this.clearDelayFetch(this.Wait);\n this.Wait = this.setDelayFetch(time);\n};\n\nInvocaScribbleLive.prototype.setDelayFetch = function (time) {\n this.Wait = setTimeout(() => {\n InvocaScribbleLive.GetInstance(this.InstanceIndex).GetNewPosts();\n }, (time || this.Opciones.AutoUpdateTimeOut) * 1000);\n return this.Wait;\n};\n\nInvocaScribbleLive.prototype.clearDelayFetch = function (clearId) {\n clearTimeout(clearId || this.Wait);\n};\n\n// Muestra los post antiguos\nInvocaScribbleLive.prototype.DrawOldPosts = function (pResponse) {\n\n // Si no obtiene nada no sigue la ejecución\n if (pResponse.Posts.length == 0) {\n $(\"#SL_loadingPages\").hide();\n return;\n }\n\n // Añade los nuevos elementos a la lista JSON\n if (pResponse.Posts != undefined) {\n for (var p = 0; p < pResponse.Posts.length; p++) {\n this.AddPost(pResponse.Posts[p]);\n }\n }\n\n // Se formatea cada uno de elementos del JSON\n this.EditJsonElement(pResponse);\n\n // Divs actuales de la página\n var divs = document.getElementsByTagName('div');\n var divsArray = new Array();\n var ultimoIdAntiguo = null;\n // Filtra solo los div de ScribbleLive y añade nuevos div con los nuevos mensajes\n for (var i = 0; i < divs.length; i++) {\n if (divs[i].id.indexOf(this.Opciones.HTMLElementId) > -1) {\n divsArray.push(divs[i]);\n }\n }\n ultimoIdAntiguo = divsArray[divsArray.length - 1].id;\n\n for (var i = 0; i < this.elementos.length; i++) {\n var contiene = false;\n for (var j = 0; j < divsArray.length; j++) {\n // Comprueba si el div ya está incluido en la página\n if (divsArray[j].id == (this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id)) {\n contiene = true;\n break;\n }\n }\n // Si el div no está incluido se pinta en la página\n if (!contiene) {\n var capa = document.createElement('div');\n capa.id = this.Opciones.HTMLElementId + \"-\" + this.elementos[i].Id;\n if (isTwitterPost(this.elementos[i], this.TemplateTwitter)) {\n capa.innerHTML = this.TemplateTwitter;\n } else {\n capa.innerHTML = this.TemplateData;\n }\n $(capa).insertAfter($(\"#\" + ultimoIdAntiguo));\n // Render vía tempo del mensaje\n this.tempoRender(capa, { escape: false }, this.elementos[i]);\n }\n }\n\n this.triggerFullItemsRendered();\n\n $(\"#SL_loadingPages\").hide();\n\n};\n\nInvocaScribbleLive.prototype.tempoRender = function (capa, scape, elemento) {\n Tempo.prepare(capa, scape).when('render_complete', ({ type, element }) => {\n window.Voonto.getInstance().trigger('scribblelive:item-rendered', element);\n }).render(elemento);\n};\n\n\n// Obtiene el caption (pie) de un elemento\nInvocaScribbleLive.prototype.GetCaption = function (Content) {\n var caption = \"\";\n if (Content.indexOf(\"p class=\\\"Caption\\\"\") > -1) {\n try {\n var m = /

(.*?)<\\/p>/g.exec(Content);\n if (m != null) {\n caption = m[1];\n }\n } catch (e) {\n }\n }\n if (Content.indexOf(\"figcaption\") > -1) {\n try {\n var m = /(.*?)<\\/figcaption>/g.exec(Content);\n if (m != null) {\n caption = m[2];\n }\n } catch (e) {\n }\n }\n return caption;\n};\n\n// Formatea un mensaje con un vídeo de Brightcove para invocar al player interno. El mensaje será del estilo ##[ID_DE_REFERENCIA]##\nInvocaScribbleLive.prototype.FormatVideoPlayer = function (Content) {\n\n var videoId;\n var origenVideo = \"bc\";\n var maBC = null;\n if (Content.indexOf(\" -1 && Content.indexOf(\"youtube.com\") > -1) {\n // Vídeo de YouTube\n var inicio = Content.indexOf(\"src=\") + 5;\n var videoPlayer = Content.substring(inicio, Content.indexOf(\"\\\"\", inicio));\n if (videoPlayer.indexOf(\"?\") > - 1) {\n videoPlayer = videoPlayer.substring(0, videoPlayer.indexOf(\"?\"));\n }\n videoId = videoPlayer.substring(videoPlayer.lastIndexOf(\"/\") + 1, videoPlayer.length);\n origenVideo = \"youtube\";\n } else {\n // Transforma el id de ##[ID_DE_REFERENCIA]## a ID_DE_REFERENCIA\n maBC = reBC.exec(Content);\n videoId = maBC[0].replace(/#/g,'');\n videoId = videoId.replace(//g,'');\n videoId = videoId.replace(/<\\/small>/g,'');\n }\n\n var modal = true;\n var width = 150;\n if (this.Opciones.ColumnLocation == \"AB\") {\n width = 490;\n modal = false;\n }\n if (this.Opciones.ColumnLocation == \"C\") {\n if (tipoEspecial == \"elecciones-2015\") {\n width = 190;\n } else {\n width = 280;\n }\n }\n\n // Proporción 16:9\n var height = parseInt(width / 1.77777777);\n var brDiv = \"\";\n var brCall = \"\";\n // Capa donde se pintará el vídeo\n if (origenVideo != 'bc') {\n var media = Voonto.getInstance().lookup('vocento.site.media');\n brDiv += \"

\";\n }\n else {\n var media = Voonto.getInstance().lookup('vocento.site.media');\n brDiv += \" \";\n }\n\n var contenido;\n if (maBC) {\n contenido = Content.replace(reBC, brDiv);\n } else {\n contenido = Content.replace(//g, brDiv);\n }\n\n return [contenido, brCall];\n}\n\n// Formatea un mensaje con un vídeo de Brightcove contenido dentro de un object para invocar al player interno\nInvocaScribbleLive.prototype.FormatVideoObject = function (Content) {\n\n var start = Content.indexOf(\"\") + 9;\n // Id del vídeo (videoPlayer=X)\n var videoPlayer = Content.substring(Content.indexOf(\"videoPlayer=\") + 12, Content.indexOf(\"&\", Content.indexOf(\"videoPlayer=\")));\n if (isNaN(videoPlayer)) {\n // Busca de forma alternativa por (videoId=X)\n videoPlayer = Content.substring(Content.indexOf(\"videoId=\") + 8, Content.indexOf(\"&\", Content.indexOf(\"videoId=\")));\n if (isNaN(videoPlayer)) {\n return [Content, \"\"];\n }\n }\n\n var width = 150;\n if (this.Opciones.ColumnLocation == \"AB\") {\n width = 490;\n }\n if (this.Opciones.ColumnLocation == \"C\") {\n if (tipoEspecial == \"elecciones-2015\") {\n width = 190;\n } else {\n width = 280;\n }\n }\n // Proporción 16:9\n var height = parseInt(width / 1.77777777);\n\n // Capa donde se pintará el vídeo\n var brDiv = \"
\";\n // Llamada al JS\n //TODO Hacer la llamada al js necesario para videos que no sean youtube\n var brCall = \"\";\n\n var media = Voonto.getInstance().lookup('vocento.site.media');\n brDiv += \"
\";\n brDiv += \"\";\n brDiv += \"
\";\n brDiv += \" 2:10 \";\n brDiv += \"
\";\n brDiv += \"
\";\n brDiv += \"
\";\n\n return [Content.substring(0, start) + brDiv + Content.substring(end, Content.lentgh), brCall];\n};\n\n// Reescala un iframe para que encaje en el módulo\nInvocaScribbleLive.prototype.ResizeIframe = function (Content) {\n\n var regWidth = new RegExp(/(width=)('|\\\")(\\d+)('|\\\")/);\n var regHeight = new RegExp(/(height=)('|\\\")(\\d+)('|\\\")/);\n try {\n var width = regWidth.exec(Content)[3];\n var height = regHeight.exec(Content)[3];\n // Proporción de reducción\n var maxWidth = 280;\n if (this.Opciones.ColumnLocation == \"AB\") {\n maxWidth = 615;\n }\n if (this.Opciones.ColumnLocation == \"C\" && tipoEspecial == \"elecciones-2015\") {\n maxWidth = 190;\n }\n var proportion = 1.0;\n if (width > maxWidth) {\n proportion = width / maxWidth;\n width = parseInt(width / proportion);\n height = parseInt(height / proportion);\n }\n Content = Content.replace(regWidth, '$1$2' + width + '$4');\n Content = Content.replace(regHeight, '$1$2' + height + '$4');\n } catch (err) {\n }\n\n return Content;\n};\n\n// Tamaño de la imagen para el resizer\nInvocaScribbleLive.prototype.ResizeImageWidth = function () {\n var newWidth = 280;\n if (this.Opciones.ColumnLocation == \"C\" && tipoEspecial == \"elecciones-2015\") {\n maxWidth = 190;\n }\n if (this.Opciones.ShowAvatars == \"true\") {\n newWidth = 200;\n }\n if (this.Opciones.ColumnLocation == \"B\") {\n newWidth = newWidth - 55;\n } else if (this.Opciones.ColumnLocation == \"AB\") {\n newWidth = 615;\n }\n return newWidth;\n};\n\n// Redimensiona las imágenes\nInvocaScribbleLive.prototype.ResizeImage = function (Content) {\n var re = new RegExp(/['\"]/);\n var start = Content.indexOf(\" -1) {\n start = Content.indexOf(\"src=\", start + 1);\n if (start > -1) {\n var end = re.exec(Content.substring(start + 5, Content.length));\n var finalContent = Content.substring(start + 6 + end.index, Content.length);\n var urlImagen = Content.substring(start + 5, start + 5 + end.index);\n var imagen = \"src=\\\"\" + urlImagen + \"\\\"\";\n if (isUrlImagenInterna(urlImagen)) {\n imagen = \"src=\\\"\" + getMediaResizerUrl() + \"/resizer/resizer.php?imagen=\" + urlImagen + \"&nuevoancho=\" + newWidth + \"©right=conCopyright&encrypt=false\\\"\";\n }\n Content = Content.substring(0, start) + imagen + finalContent;\n }\n }\n return Content;\n};\n\n// Añade el elemento target=\"_blank\" a los enlaces de un mensaje y el parámetro \"medio\" y \"edicionLocal\" a las llamadas a \"live.vocento.com/scribblelive/redirect.php\"\nInvocaScribbleLive.prototype.FormatLink = function (Content) {\n // Expresión regular para sustituir la llamada al redirector de noticias de RC de ScribbleLive\n var re = new RegExp(\"recid=([^\\\"'].*)(\\\">|'>)\");\n var start = Content.toLowerCase().indexOf(\" -1) {\n var end = Content.toLowerCase().indexOf(\"\", start);\n if (end > -1) {\n var link = Content.substring(start, end + 4);\n // Comprueba si se trata de una llamada a \"live.vocento.com/scribblelive/redirect.php\"\n if (link.indexOf(\"live.vocento.com/scribblelive/redirect.php?recid=\") > -1 && link.indexOf(\"medio=\") == -1) {\n var parametrosLlamada = \"&medio=\" + this.Opciones.Medio;\n if (this.Opciones.Edicion != null && this.Opciones.Edicion.replace(/\\s/g,\"\") != \"\") {\n parametrosLlamada = parametrosLlamada + \"&edicionLocal=\" + this.Opciones.Edicion;\n }\n link = link.replace(re, \"recid=$1\" + parametrosLlamada + \"$2\");\n Content = Content.substring(0, start) + link + Content.substring(end + 4, Content.length);\n // Recalcula la nueva posición del fin del tag \n end = Content.toLowerCase().indexOf(\"\", start);\n }\n // Añade target blank a los enlaces\n if (link.toLowerCase().indexOf(\"target=\") == -1 && link.toLowerCase().indexOf(\"href=\") > -1) {\n link = link.replace(\"href=\", \"target=\\\"_blank\\\" href=\");\n Content = Content.substring(0, start) + link + Content.substring(end + 4, Content.length);\n }\n }\n start = Content.toLowerCase().indexOf(\" -1) {\n if (start > -1) {\n var end = re.exec(Content.substring(start + 7, Content.length));\n var finalContent = Content.substring(start + 8 + end.index, Content.length);\n Content = Content.substring(0, start) +\"width=\\\"\" + newWidth + \"\\\"\" + finalContent;\n }\n start = Content.indexOf(\"width=\", start + 1);\n }\n // Alto\n start = Content.indexOf(\"height=\");\n while (start > -1) {\n if (start > -1) {\n var end = re.exec(Content.substring(start + 8, Content.length));\n var finalContent = Content.substring(start + 9 + end.index, Content.length);\n Content = Content.substring(0, start) + \"height=\\\"180\\\"\" + finalContent;\n }\n start = Content.indexOf(\"height=\", start + 1);\n }\n return Content;\n};\n\n\n// The function that adds a post.\nInvocaScribbleLive.prototype.AddPost = function (pPost) {\n\n // A huge if statement that decides if it should be showing a post or not based on the options set when the widget is loaded.\n if (\n (pPost.Type == \"IMAGE\" && !this.Opciones.ShowImages) ||\n (pPost.Type == \"VIDEO\" && !this.Opciones.ShowVideos) ||\n (pPost.Type == \"AUDIO\" && !this.Opciones.ShowAudio) ||\n (pPost.IsStuck == 1 && !this.Opciones.ShowStuckPosts) ||\n (pPost.Type == \"TEXT\" && !this.Opciones.ShowTextPosts) ||\n (pPost.Type == \"POLL\" && !this.Opciones.ShowPolls) ||\n (pPost.IsComment == 1 && !this.Opciones.ShowComments) ||\n (pPost.IsComment == 0 && !this.Opciones.ShowOfficialPosts) ||\n (pPost.Source.match(\"twitter\") && !this.Opciones.ShowTweets) ||\n (!pPost.Source.match(\"twitter\") && this.Opciones.ShowOnlyTweets) ||\n ((pPost.Source.match(\"mobile\") || pPost.Source.match(\"SMS\")) && !this.Opciones.ShowMobilePosts) ||\n (pPost.Source.match(\"www.facebook.com\") && !this.Opciones.ShowFacebookPosts) ||\n (!pPost.Source.match(\"www.facebook.com\") && this.Opciones.ShowOnlyFacebookPosts) ||\n (pPost.Type != \"POLL\" && this.Opciones.ShowOnlyPolls)\n ) {\n return false;\n }\n\n // If the post you are trying to add is already on the page, stop trying to add it.\n for (var c = 0; c < this.elementos.length; c++) {\n if (pPost.Id == parseInt(this.elementos[c].Id)) {\n return false;\n }\n }\n\n // Si se trata de la carga inicial inserta los elementos al final del array, en caso contrario inserta los nuevos elementos al inicio del array\n if (this.inicial) {\n this.elementos.push(pPost);\n } else {\n this.elementos.unshift(pPost);\n this.originales.unshift(pPost);\n return true;\n }\n\n // Elemento fijo\n if (pPost.IsStuck == 1) {\n this.fijos.unshift(pPost);\n return true;\n }\n};\n\n// Elimina el elemento del array y de la página\nInvocaScribbleLive.prototype.DeletePost = function (pPostId) {\n for (var i = 0; i < this.originales.length; i++) {\n if (parseInt(this.originales[i].Id) == parseInt(pPostId)) {\n this.originales.splice(i,1);\n }\n }\n for (var i = 0; i < this.fijos.length; i++) {\n if (parseInt(this.fijos[i].Id) == parseInt(pPostId)) {\n this.fijos.splice(i,1);\n }\n }\n for (var i = 0; i < this.elementos.length; i++) {\n if (parseInt(this.elementos[i].Id) == parseInt(pPostId)) {\n this.elementos.splice(i,1);\n // Elimina el elemento de la página\n $(\"#\" + this.Opciones.HTMLElementId + \"-\" + pPostId).remove();\n return true;\n }\n }\n return false;\n};\n\n// Reemplaza el elemento editado del array\nInvocaScribbleLive.prototype.EditPost = function (pPostToEdit) {\n\n for (var i = 0; i < this.originales.length; i++) {\n if (parseInt(this.originales[i].Id) == parseInt(pPostToEdit.Id)) {\n this.originales.splice(i,1,pPostToEdit);\n }\n }\n var stuckedPos = -1;\n for (var i = 0; i < this.fijos.length; i++) {\n if (parseInt(this.fijos[i].Id) == parseInt(pPostToEdit.Id)) {\n if (pPostToEdit.IsStuck != 1) {\n this.fijos.splice(i,1);\n } else {\n this.fijos.splice(i,1,pPostToEdit);\n stuckedPos = i;\n }\n }\n }\n for (var i = 0; i < this.elementos.length; i++) {\n if (parseInt(this.elementos[i].Id) == parseInt(pPostToEdit.Id)) {\n this.elementos.splice(i,1,pPostToEdit);\n return [i, stuckedPos];\n }\n }\n return [-1, -1];\n\n};\n\nInvocaScribbleLive.prototype.CapitalizeFirstLetter = function (string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n// Formatea cada uno de los elementos de JSON en función de su contenido\nInvocaScribbleLive.prototype.EditJsonElement = function (pResponse) {\n\n // Elimina todos los elementos Posts del objeto JSON\n pResponse.Posts.splice(0, pResponse.Posts.length);\n // Hoy\n var today = moment(Date.now()).format(\"YYYYMMDD\");\n\n // Añade los elementos Posts correctos al objeto JSON\n for (var i = 0; i < this.elementos.length; i++) {\n try {\n this.elementos[i].LastModified = this.elementos[i].LastModified.replace(/\\+0000/g, \"\"); //octal literales forbidden in scrict mode\n var PostDate = eval(\"new \" + (this.elementos[i].LastModified.replace(/\\//g, \"\")));\n\n // Formato de fecha de un mensaje escrito a día de hoy\n if (moment(PostDate).format(\"YYYYMMDD\") == today) {\n var duration = moment.duration(moment(Date.now()).diff(moment(PostDate)));\n\n if(duration.asSeconds() < 60) {\n this.elementos[i].FormattedDate = 'En este momento';\n }\n else if (duration.asMinutes() < 60 ) {\n this.elementos[i].FormattedDate = 'Hace ' + duration.minutes() + ' minutos';\n }\n else if (duration.asMinutes() < 120 ) {\n this.elementos[i].FormattedDate = 'Hace 1 hora';\n }\n else if (duration.asMinutes() < 180 ) {\n this.elementos[i].FormattedDate = 'Hace 2 horas';\n }\n else {\n this.elementos[i].FormattedDate = moment(PostDate).format(\"HH:mm\");\n }\n // Formato de fecha de un mensaje antes del día de hoy\n } else {\n this.elementos[i].FormattedDate = moment(PostDate).format(this.Opciones.DateFormat);\n }\n } catch(e) {\n this.elementos[i].FormattedDate = \"-\";\n }\n\n // Si sube un mensaje con una imagen y sin ningún texto puede ser que this.elementos[i].Content esté sin definir.\n // En tal caso se le da un valor vacío para evitar posteriores errores\n if (typeof this.elementos[i].Content == \"undefined\") {\n this.elementos[i].Content = \"\";\n }\n // Avatars\n this.elementos[i].ShowAvatars = this.Opciones.ShowAvatars;\n // Vídeo de Brightcove\n var brightcoveParsed = false;\n if (this.elementos[i].Content.indexOf(\" -1 && this.elementos[i].Content.indexOf(\"brightcove.com\") > -1 && this.elementos[i].Content.indexOf(\"/object\") > -1 && this.elementos[i].Content.indexOf(\"playerID=\") > -1) {\n var arrayBrightcove = this.FormatVideoObject(this.elementos[i].Content);\n this.elementos[i].Content = arrayBrightcove[0];\n if (arrayBrightcove[1] != \"\") {\n eval(arrayBrightcove[1]);\n }\n brightcoveParsed = true;\n }\n // Vídeo de Brighcove según el modelo ##[ID_DE_REFERENCIA]##\n if (reBC.test($.trim(this.elementos[i].Content)) ||\n (this.elementos[i].Content.indexOf(\" -1 && this.elementos[i].Content.indexOf(\"youtube.com\") > -1)) {\n var arrayBrightcove = this.FormatVideoPlayer(this.elementos[i].Content);\n this.elementos[i].Content = arrayBrightcove[0];\n if (arrayBrightcove[1] != \"\") {\n eval(arrayBrightcove[1]);\n }\n }\n // Iframe (por ejemplo nuevos vídeos de Brightcove)\n if (this.elementos[i].Content.indexOf(\" -1) {\n this.elementos[i].Content = this.ResizeIframe(this.elementos[i].Content);\n }\n // Cualquier otro object excepto Brightcove\n if (!brightcoveParsed && (\n (this.elementos[i].Content.indexOf(\" -1 && this.elementos[i].Content.indexOf(\"/object\") > -1)\n ||\n (this.elementos[i].Content.indexOf(\" -1)\n )) {\n this.elementos[i].Content = this.ResizeEmbed(this.elementos[i].Content);\n }\n // Resizer\n if (this.elementos[i].Content.indexOf(\" -1 ) {\n this.elementos[i].Content = this.ResizeImage(this.elementos[i].Content);\n }\n // Imágenes subidas desde el editor de SL\n try {\n var imgs = \"\";\n var videos = \"\";\n for (var medias = 0; medias < this.elementos[i].Media.length; medias++) {\n if (this.elementos[i].Media[medias].Type == \"IMAGE\" && (this.elementos[i].Media[medias].Url).length > 0) {\n var srcImagen = this.elementos[i].Media[medias].Url;\n if (isUrlImagenInterna(this.elementos[i].Media[medias].Url)) {\n srcImagen = getMediaResizerUrl() + \"/resizer/resizer.php?imagen=\" + this.elementos[i].Media[medias].Url + \"&nuevoancho=\" + this.ResizeImageWidth() + \"©right=conCopyright&encrypt=false\";\n }\n var element_class = 'voc-horizontal';\n if ($('[data-voc-scribblelive]').data('voc-scribblelive-template')) {\n element_class = ''; /*Si se trata de content no tiene que tener esta clase*/\n }\n imgs += \"
\\\"\\\"
\";\n } else if (this.elementos[i].Media[medias].Type == \"VIDEO\" && (this.elementos[i].Media[medias].Url).length > 0) {\n var brightcoveVideoId = this.elementos[i].Content.match(/##([a-zA-Z0-9-\\s_]{3,60})##/g);\n if (!brightcoveVideoId) {\n var videoWidth = \"280\";\n if (tipoEspecial == \"elecciones-2015\") {\n videoWidth = \"190\";\n }\n if (this.Opciones.ColumnLocation == \"AB\") {\n videoWidth = \"560\";\n }\n var videoHeight = parseInt(videoWidth / 1.77777777);\n videos = \"\";\n }\n else {\n var media = Voonto.getInstance().lookup('vocento.site.media');\n videos = \"\";\n }\n }\n }\n // El vídeo es prioritario sobre la imagen\n if (imgs.length > 0 && videos.length == 0) {\n this.elementos[i].Content = imgs + \"

\" + this.elementos[i].Content + \"

\";\n }\n if (videos.length > 0) {\n this.elementos[i].Content = videos + \"

\"+this.elementos[i].Content + \"

\";\n }\n } catch (erroreMedia) {\n }\n // Enlaces\n if (this.elementos[i].Content.indexOf(\" -1 ) {\n this.elementos[i].Content = this.FormatLink(this.elementos[i].Content);\n }\n // Mensaje de Twitter\n if (this.elementos[i].PostMeta != null && this.elementos[i].PostMeta.source == \"twitter\") {\n var screenName = (/twitter\\.com\\/(#!\\/)?([^\\/?]+)/.exec(this.elementos[i].Source))[2];\n this.elementos[i].TwScreenName = \"@\" + screenName + \"\";\n try {\n this.elementos[i].TwDate = moment(new Date(this.elementos[i].PostMeta.CreationDate * 1000)).format('HH:mm - DD/MM/YYYY');\n } catch (e) {\n }\n }\n // Twitter\n if (this.elementos[i].Source != null && this.elementos[i].Source.match(\"twitter\")) {\n this.elementos[i].Content = \"
\" + this.elementos[i].Source + \"
\";\n try {\n this.elementos[i].TwDate = moment(new Date(this.elementos[i].PostMeta.CreationDate * 1000)).format('HH:mm - DD/MM/YYYY');\n } catch (e) {\n }\n }\n // Redes sociales\n if (tipoEspecial == \"elecciones-2015\" || tipoEspecial == \"nuevo\") {\n this.elementos[i].FacebookShare = facebookShare(gUrlPaginaDetalle, gTituloPestana, this.elementos[i].Content, this.elementos[i].Id);\n this.elementos[i].TwitterShare = twitterShare(gUrlPaginaDetalle, gTituloPestana, this.elementos[i].Content);\n }\n // Pie de foto\n var caption = this.GetCaption(this.elementos[i].Content);\n if (caption != \"\" && this.elementos[i].Content.indexOf(\"\") > -1) {\n var m = /<\\/figure>(.*)/g.exec(this.elementos[i].Content);\n if (m != null) {\n this.elementos[i].Content = this.elementos[i].Content.replace(m[1], \"

\" + caption + \"

\" + m[1]);\n }\n }\n\n // Se eliminan ciertos tags HTML\n this.elementos[i].Content = this.elementos[i].Content.replace(/

/g, \"

\");\n this.elementos[i].Content = this.elementos[i].Content.replace(/(.*)<\\/figcaption>/g, \"\");\n this.elementos[i].Content = this.elementos[i].Content.replace(/
/g, \"\");\n this.elementos[i].Content = this.elementos[i].Content.replace(//g, \"\");\n this.elementos[i].Content = this.elementos[i].Content.replace(/

.{1}<\\/div>/g, \"\");\n this.elementos[i].Content = this.elementos[i].Content.replace(/
 <\\/div>/g, \"\");\n this.elementos[i].Content = this.elementos[i].Content.replace(/
(.*)<\\/div>/g, \"$1\");\n // en luga de eliminar figure lo sustituimos con la clase y estilo correcto\n var element_class = 'voc-horizontal';\n if ($('[data-voc-scribblelive]').data('voc-scribblelive-template')) {\n element_class = ''; /*Si se trata de content no tiene que tener esta clase*/\n }\n this.elementos[i].Content = this.elementos[i].Content.replace(/
(.*)<\\/figure>/g, \"
$1
\");\n\n this.elementos[i].Link = \"\";\n if(this.Opciones.UrlPaginaDetalle) {\n this.elementos[i].Link = this.Opciones.UrlPaginaDetalle + \"#scribbleContent-\" + this.elementos[i].Id;\n }\n\n pResponse.Posts.push(this.elementos[i]);\n }\n};\n\n// Llamada recurrente que se ejecuta cada cierto tiempo (marcado por AutoUpdateTimeOut)\nInvocaScribbleLive.prototype.GetNewPosts = function () {\n\n // Delete any API calls that are currently on the page.\n var Scripts;\n if (document.head) {\n Scripts = document.head.getElementsByTagName(\"script\");\n } else {\n Scripts = document.getElementsByTagName('head')[0].getElementsByTagName(\"script\");\n }\n for (var i = 0; i < Scripts.length; i++) {\n var ScriptSource = Scripts[i].src;\n if (ScriptSource.match(this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \".*\") != null) {\n if (document.head) {\n document.head.removeChild(Scripts[i]);\n } else {\n document.getElementsByTagName('head')[0].removeChild(Scripts[i]);\n }\n }\n }\n\n var LastModifiedTimeFormatted = this.LastModifiedTime.getUTCFullYear() + \"/\" + (this.LastModifiedTime.getUTCMonth() + 1) + \"/\" + this.LastModifiedTime.getUTCDate() + \" \" + this.LastModifiedTime.getUTCHours() + \":\" + this.LastModifiedTime.getUTCMinutes() + \":\" + this.LastModifiedTime.getUTCSeconds();\n\n var url = this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \"/all/?Token=\" + this.Opciones.APIToken + \"&Order=asc&format=json&Since=\" + LastModifiedTimeFormatted;\n $.get(url, (res) => {\n if (res) {\n var hasChanges = (res.Posts && res.Posts.length) ||\n (res.Edits && res.Edits.length) ||\n (res.Deletes && res.Deletes.length);\n\n if (hasChanges) {\n InvocaScribbleLive.GetInstance(this.InstanceIndex).DrawPosts(res);\n }\n }\n\n this.setRetryFetch();\n });\n};\n\n// Esta llamada solo se hace la primera vez que se carga el módulo. Obtiene los últimos mensajes ordenados de más nuevo a más antiguo\nInvocaScribbleLive.prototype.GetAllPosts = function () {\n\n let url = this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \"/page/\" + this.Opciones.PageNumber + \"/?Token=\" + this.Opciones.APIToken + \"&PageSize=\" + this.Opciones.TotalPostsToShow + \"&Order=asc&format=json&IncludeDeleted=0\" ;\n\n $.get(url, res => {\n InvocaScribbleLive.GetInstance(this.InstanceIndex).DrawPosts(res);\n });\n};\n\n\n// Llamada para obtener las páginas antiguas (paginación hacia atrás)\nInvocaScribbleLive.prototype.GetOldPosts = function () {\n\n // Delete any API calls that are currently on the page.\n var Scripts;\n if (document.head) {\n Scripts = document.head.getElementsByTagName(\"script\");\n } else {\n Scripts = document.getElementsByTagName('head')[0].getElementsByTagName(\"script\");\n }\n for (var i = 0; i < Scripts.length; i++) {\n var ScriptSource = Scripts[i].src;\n if (ScriptSource.match(this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \".*\") != null) {\n if (document.head) {\n document.head.removeChild(Scripts[i]);\n } else {\n document.getElementsByTagName('head')[0].removeChild(Scripts[i]);\n }\n }\n }\n\n let url = this.Opciones.Scribble_API + \"/event/\" + this.Opciones.EventId + \"/page/\" + pageToGet + \"/?Token=\" + this.Opciones.APIToken + \"&PageSize=\" + this.Opciones.TotalPostsToShow + \"&Order=desc&format=json&IncludeDeleted=0\";\n $.get(url, res => {\n InvocaScribbleLive.GetInstance(this.InstanceIndex).DrawOldPosts(res);\n });\n\n // Se resta uno a la última página a mostrar para posteriores llamadas\n pageToGet--;\n\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/scribblelive.js","/*!\r\n * Tempo Template Engine 2.1\r\n *\r\n * http://tempojs.com/\r\n */\r\nfunction TempoEvent(type, item, element) {\r\n 'use strict';\r\n this.type = type;\r\n this.item = item;\r\n this.element = element;\r\n\r\n return this;\r\n}\r\n\r\nTempoEvent.Types = {\r\n RENDER_STARTING: 'render_starting',\r\n ITEM_RENDER_STARTING: 'item_render_starting',\r\n ITEM_RENDER_COMPLETE: 'item_render_complete',\r\n RENDER_COMPLETE: 'render_complete',\r\n BEFORE_CLEAR: 'before_clear',\r\n AFTER_CLEAR: 'after_clear'\r\n};\r\n\r\n\r\nvar Tempo = (function (tempo) {\r\n 'use strict';\r\n\r\n /*!\r\n * Constants\r\n */\r\n var NUMBER_FORMAT_REGEX = /(\\d+)(\\d{3})/;\r\n\r\n\r\n var _window;\r\n\r\n\r\n /*!\r\n * Helpers\r\n */\r\n var utils = {\r\n memberRegex: function (obj) {\r\n var member_regex = '(';\r\n for (var member in obj) {\r\n if (obj.hasOwnProperty(member)) {\r\n if (member_regex.length > 1) {\r\n member_regex += '|';\r\n }\r\n member_regex += member;\r\n }\r\n }\r\n return member_regex + ')[\\\\.]?' + '(?!\\\\w)';\r\n },\r\n\r\n pad: function (val, pad, size) {\r\n while (val.length < size) {\r\n val = pad + val;\r\n }\r\n return val;\r\n },\r\n\r\n trim: function (str) {\r\n return str.replace(/^\\s*([\\S\\s]*?)\\s*$/, '$1');\r\n },\r\n\r\n startsWith: function (str, prefix) {\r\n return (str.indexOf(prefix) === 0);\r\n },\r\n\r\n clearContainer: function (el) {\r\n if (el !== null && el !== undefined && el.childNodes !== undefined) {\r\n for (var i = el.childNodes.length - 1; i >= 0; i--) {\r\n if (el.childNodes[i] !== undefined && el.childNodes[i].getAttribute !== undefined && (el.childNodes[i].getAttribute('data-template') !== null || el.childNodes[i].getAttribute('data-template-for') !== null)) {\r\n el.childNodes[i].parentNode.removeChild(el.childNodes[i]);\r\n }\r\n }\r\n }\r\n },\r\n\r\n isNested: function (el) {\r\n var p = el.parentNode;\r\n while (p) {\r\n if (this.hasAttr(p, 'data-template') || this.hasAttr(p, 'data-template-for')) {\r\n return true;\r\n }\r\n p = p.parentNode;\r\n }\r\n return false;\r\n },\r\n\r\n equalsIgnoreCase: function (str1, str2) {\r\n return str1.toLowerCase() === str2.toLowerCase();\r\n },\r\n\r\n getElement: function (template, html) {\r\n if (navigator.appVersion.indexOf(\"MSIE\") > -1 && utils.equalsIgnoreCase(template.tagName, 'tr')) {\r\n // Wrapping to get around read-only innerHTML\r\n var el = _window.document.createElement('div');\r\n el.innerHTML = '' + html + '
';\r\n var depth = 3;\r\n while (depth--) {\r\n el = el.lastChild;\r\n }\r\n el.setAttribute('data-template', '');\r\n return el;\r\n } else {\r\n // No need to wrap\r\n template.innerHTML = html;\r\n return template;\r\n }\r\n },\r\n\r\n typeOf: function (obj) {\r\n if (typeof(obj) === \"object\") {\r\n if (obj === null) {\r\n return \"null\";\r\n }\r\n if (obj.constructor === ([]).constructor) {\r\n return \"array\";\r\n }\r\n if (obj.constructor === (new Date()).constructor) {\r\n return \"date\";\r\n }\r\n if (obj.constructor === (new RegExp()).constructor) {\r\n return \"regex\";\r\n }\r\n if (typeof HTMLElement === \"object\" ? obj instanceof HTMLElement : obj && typeof obj === \"object\" && obj.nodeType === 1 && typeof obj.nodeName === \"string\") {\r\n return 'element';\r\n }\r\n if (typeof jQuery !== 'undefined' && obj instanceof jQuery) {\r\n return 'jquery';\r\n }\r\n return \"object\";\r\n }\r\n return typeof(obj);\r\n },\r\n\r\n hasAttr: function (el, name) {\r\n if (el !== undefined) {\r\n if (el.hasAttribute !== undefined) {\r\n return el.hasAttribute(name);\r\n } else if (el.getAttribute !== undefined) {\r\n return el.getAttribute(name) !== null;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n removeAttr: function (el, name) {\r\n if (el !== undefined) {\r\n el.setAttribute(name, '');\r\n// if (el.removeAttribute) {\r\n// el.removeAttribute(name);\r\n// }\r\n }\r\n },\r\n\r\n merge: function (obj1, obj2) {\r\n var obj3 = {};\r\n\r\n for (var attr1 in obj1) {\r\n if (obj1.hasOwnProperty(attr1)) {\r\n obj3[attr1] = obj1[attr1];\r\n }\r\n }\r\n\r\n for (var attr2 in obj2) {\r\n if (obj2.hasOwnProperty(attr2)) {\r\n obj3[attr2] = obj2[attr2];\r\n }\r\n }\r\n return obj3;\r\n },\r\n notify: function (listener, event) {\r\n if (listener !== undefined && listener.length > 0) {\r\n for (var i = 0; i < listener.length; i++) {\r\n if (event.type === listener[i].type) {\r\n listener[i].listener(event);\r\n }\r\n }\r\n }\r\n },\r\n container: function (container) {\r\n if (utils.typeOf(container) === 'string') {\r\n if (container === '*') {\r\n container = _window.document.getElementsByTagName('html')[0];\r\n } else {\r\n container = _window.document.getElementById(container);\r\n }\r\n } else if (utils.typeOf(container) === 'jquery' && container.length > 0) {\r\n container = container[0];\r\n }\r\n\r\n return container;\r\n },\r\n arrayContains: function (array, obj) {\r\n if (!Array.prototype.indexOf) {\r\n for (var i = 0; i < this.length; i++) {\r\n if (this[i] === obj) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n return array.indexOf(obj) > -1;\r\n }\r\n }\r\n };\r\n\r\n function Templates(params, nestedItem) {\r\n this.params = params;\r\n this.defaultTemplate = null;\r\n this.namedTemplates = {};\r\n this.container = null;\r\n\r\n this.nestedItem = nestedItem !== undefined ? nestedItem : null;\r\n\r\n this.escape = true;\r\n this.var_brace_left = '\\\\{\\\\{';\r\n this.var_brace_right = '\\\\}\\\\}';\r\n this.tag_brace_left = '\\\\{%';\r\n this.tag_brace_right = '%\\\\}';\r\n\r\n this.dataIsMap = false;\r\n\r\n this.attributes = {};\r\n\r\n if (typeof params !== 'undefined') {\r\n for (var prop in params) {\r\n if (prop === 'var_braces') {\r\n this.var_brace_left = params[prop].substring(0, params[prop].length / 2);\r\n this.var_brace_right = params[prop].substring(params[prop].length / 2);\r\n } else if (prop === 'tag_braces') {\r\n this.tag_brace_left = params[prop].substring(0, params[prop].length / 2);\r\n this.tag_brace_right = params[prop].substring(params[prop].length / 2);\r\n } else if (typeof this[prop] !== 'undefined') {\r\n this[prop] = params[prop];\r\n }\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n Templates.prototype = {\r\n load: function (file, callback) {\r\n function contents(iframe) {\r\n return iframe.contentWindow ? iframe.contentWindow.document.documentElement.innerHTML : iframe.contentDocument ? iframe.contentDocument.body.innerHTML : iframe.document.body.innerHTML;\r\n }\r\n\r\n if (_window.document.getElementById(file) !== null) {\r\n callback(contents(_window.document.getElementById(file)));\r\n } else {\r\n var el = _window.document.createElement('iframe');\r\n el.id = file;\r\n el.name = file;\r\n el.style.height = 0;\r\n el.style.width = 0;\r\n el.src = file;\r\n\r\n if (el.attachEvent) {\r\n el.attachEvent('onload', function () {\r\n callback(contents(el));\r\n });\r\n } else {\r\n el.onload = function () {\r\n callback(contents(el));\r\n };\r\n }\r\n\r\n _window.document.body.appendChild(el);\r\n }\r\n },\r\n _insertTemplate: function (child, templates, container, callback) {\r\n return function (el) {\r\n utils.removeAttr(child, 'data-template-file');\r\n child.innerHTML = el;\r\n templates.parse(container, callback);\r\n };\r\n },\r\n\r\n parse: function (container, callback) {\r\n this.container = container;\r\n var children = container.getElementsByTagName('*');\r\n\r\n var ready = true;\r\n\r\n // Preprocessing for referenced templates\r\n for (var i = 0; i < children.length; i++) {\r\n if (ready === true && callback !== undefined && utils.hasAttr(children[i], 'data-template-file')) {\r\n var child = children[i];\r\n if (child.getAttribute('data-template-file').length > 0) {\r\n var templates = this;\r\n ready = false;\r\n\r\n this.load(child.getAttribute('data-template-file'), this._insertTemplate(child, templates, container, callback));\r\n }\r\n } else if (utils.hasAttr(children[i], 'data-template-fallback')) {\r\n // Hiding the fallback template\r\n children[i].style.display = 'none';\r\n }\r\n }\r\n\r\n // Parsing\r\n if (ready) {\r\n var foundTemplates = {};\r\n for (var s = 0; s < children.length; s++) {\r\n if (children[s].getAttribute !== undefined) {\r\n if (utils.hasAttr(children[s], 'data-template-for') && children[s].getAttribute('data-template-for').length > 0 && this.nestedItem === children[s].getAttribute('data-template-for') && !foundTemplates[this.nestedItem]) {\r\n // Nested template\r\n this.createTemplate(children[s]);\r\n // Guards against recursion when child template has same name!\r\n foundTemplates[this.nestedItem] = true;\r\n } else if (utils.hasAttr(children[s], 'data-template') && !utils.isNested(children[s])) {\r\n // Normal template\r\n this.createTemplate(children[s]);\r\n }\r\n }\r\n }\r\n\r\n // If there is no default template (data-template) then create one from container\r\n// if (this.defaultTemplate === null) {\r\n// this.createTemplate(container);\r\n// }\r\n\r\n utils.clearContainer(this.container);\r\n if (callback !== undefined) {\r\n callback(this);\r\n }\r\n }\r\n },\r\n\r\n createTemplate: function (node) {\r\n var element = node.cloneNode(true);\r\n\r\n // Clear display: none;\r\n if (element.style.removeAttribute) {\r\n element.style.removeAttribute('display');\r\n } else if (element.style.removeProperty) {\r\n element.style.removeProperty('display');\r\n } else {\r\n element.style.display = 'block';\r\n }\r\n\r\n // Remapping container element in case template\r\n // is deep in container\r\n this.container = node.parentNode;\r\n\r\n // Element is a template\r\n var nonDefault = false;\r\n for (var a = 0; a < element.attributes.length; a++) {\r\n var attr = element.attributes[a];\r\n // If attribute\r\n if (utils.startsWith(attr.name, 'data-if-')) {\r\n var val;\r\n if (attr.value === '') {\r\n val = true;\r\n } else if (attr.value === 'null') {\r\n val = null;\r\n } else {\r\n val = '\\'' + attr.value + '\\'';\r\n }\r\n this.namedTemplates[attr.name.substring(8, attr.name.length) + '==' + val] = element;\r\n utils.removeAttr(element, attr.name);\r\n nonDefault = true;\r\n } else if (attr.name === 'data-has') {\r\n this.namedTemplates[attr.value + '!==undefined'] = element;\r\n utils.removeAttr(element, attr.name);\r\n nonDefault = true;\r\n } else if (attr.name === 'data-from-map') {\r\n this.dataIsMap = true;\r\n } else if (!utils.startsWith(attr.name, 'data-template') && utils.startsWith(attr.name, 'data-')) {\r\n // Treat as an attribute for template\r\n this.attributes[attr.name.substring(5, attr.name.length)] = attr.value;\r\n }\r\n }\r\n // Setting as default template, last one wins\r\n if (!nonDefault) {\r\n this.defaultTemplate = element;\r\n }\r\n },\r\n\r\n templateFor: function (i) {\r\n for (var templateName in this.namedTemplates) {\r\n if (eval('i.' + templateName)) {\r\n return this.namedTemplates[templateName].cloneNode(true);\r\n }\r\n }\r\n if (this.defaultTemplate) {\r\n return this.defaultTemplate.cloneNode(true);\r\n }\r\n }\r\n };\r\n\r\n\r\n /*!\r\n * Renderer for populating containers with data using templates.\r\n */\r\n function Renderer(templates) {\r\n this.templates = templates;\r\n this.listener = [];\r\n this.started = false;\r\n this.varRegex = new RegExp(this.templates.var_brace_left + '[ ]?([A-Za-z0-9$\\\\._\\\\[\\\\]]*?)([ ]?\\\\|[ ]?.*?)?[ ]?' + this.templates.var_brace_right, 'g');\r\n this.tagRegex = new RegExp(this.templates.tag_brace_left + '[ ]?([\\\\s\\\\S]*?)( [\\\\s\\\\S]*?)?[ ]?' + this.templates.tag_brace_right + '(([\\\\s\\\\S]*?)(?=' + this.templates.tag_brace_left + '[ ]?end\\\\1[ ]?' + this.templates.tag_brace_right + '))?', 'g');\r\n this.filterSplitter = new RegExp('\\\\|[ ]?(?=' + utils.memberRegex(this.filters) + ')', 'g');\r\n this.errorHandler = null;\r\n return this;\r\n }\r\n\r\n Renderer.prototype = {\r\n when: function (type, listener) {\r\n this.listener.push({'type': type, 'listener': listener});\r\n\r\n return this;\r\n },\r\n\r\n _getValue: function (renderer, variable, i, t) {\r\n var val = null;\r\n // Handling tempo_info variable\r\n if (utils.startsWith(variable, '_tempo.')) {\r\n return eval('t.' + variable.substring(7, variable.length));\r\n }\r\n\r\n if (variable === '.') {\r\n val = eval('i');\r\n } else if (variable === 'this' || variable.match(/this[\\\\[\\\\.]/) !== null) {\r\n val = eval('i' + variable.substring(4, variable.length));\r\n } else if (utils.typeOf(i) === 'array') {\r\n val = eval('i' + variable);\r\n } else {\r\n val = eval('i.' + variable);\r\n }\r\n\r\n return val;\r\n },\r\n\r\n _replaceVariables: function (renderer, _tempo, i, str) {\r\n var self = this;\r\n return str.replace(this.varRegex, function (match, variable, args) {\r\n\r\n try {\r\n var val = renderer._getValue(renderer, variable, i, _tempo);\r\n // Handle filters\r\n if (args !== undefined && args !== '') {\r\n var filters = utils.trim(utils.trim(args).substring(1)).split(self.filterSplitter);\r\n for (var p = 0; p < filters.length; p++) {\r\n var filter = utils.trim(filters[p]), filter_args, j = filter.indexOf(' ');\r\n // If there is a space, there must be arguments\r\n if (~j) {\r\n filter_args = filter.substr(j).replace(/(^ *['\"])|(['\"] *$)/g, '').split(/['\"] *, *['\"]/);\r\n filter = filter.substr(0, j);\r\n } else {\r\n filter_args = [];\r\n }\r\n val = renderer.filters[filter](val, filter_args);\r\n }\r\n }\r\n\r\n if (val !== undefined) {\r\n if (self.templates.escape) {\r\n val = self.filters.escape(val, {});\r\n }\r\n return val;\r\n }\r\n } catch (err) {\r\n self._onError.call(self, err);\r\n }\r\n\r\n return '';\r\n });\r\n },\r\n\r\n _replaceObjects: function (renderer, _tempo, i, str, regex) {\r\n return str.replace(regex, function (match, variable, args) {\r\n try {\r\n var val = renderer._getValue(renderer, variable, i, _tempo);\r\n\r\n if (val !== undefined) {\r\n if (utils.typeOf(val) === 'string') {\r\n return '\\'' + val + '\\'';\r\n } else {\r\n return val;\r\n }\r\n }\r\n } catch (err) {\r\n self._onError.call(self, err);\r\n }\r\n\r\n return undefined;\r\n });\r\n },\r\n\r\n _applyAttributeSetters: function (renderer, item, str) {\r\n // Adding a space in front of first part to make sure I don't get partial matches\r\n return str.replace(/(\\b[A-z0-9]+?)(?:=\"[^\"']*?\"[^>]*?)data-\\1=\"(.*?)\"/g, function (match, attr, data_value) {\r\n if (data_value !== '') {\r\n return attr + '=\"' + data_value + '\"';\r\n }\r\n return match;\r\n });\r\n },\r\n\r\n _applyTags: function (renderer, item, str) {\r\n return str.replace(this.tagRegex, function (match, tag, args, body) {\r\n if (renderer.tags.hasOwnProperty(tag)) {\r\n args = args.substring(args.indexOf(' ')).replace(/^[ ]*|[ ]*$/g, '');\r\n var filter_args = args.split(/(?:['\"])[ ]?,[ ]?(?:['\"])/);\r\n return renderer.tags[tag](renderer, item, match, filter_args, body);\r\n } else {\r\n return '';\r\n }\r\n });\r\n },\r\n\r\n starting: function (event) {\r\n // Use this to manually fire the RENDER_STARTING event e.g. just before you issue an AJAX request\r\n // Useful if you're not calling prepare immediately before render\r\n this.started = true;\r\n if (event === undefined) {\r\n event = new TempoEvent(TempoEvent.Types.RENDER_STARTING, undefined, undefined);\r\n }\r\n utils.notify(this.listener, event);\r\n\r\n return this;\r\n },\r\n\r\n _renderNestedItem: function (i, nested) {\r\n var self = this;\r\n return function (templates) {\r\n var r = new Renderer(templates);\r\n var data = null;\r\n\r\n if (nested === '*' || i.hasOwnProperty(nested.split('.')[0])) {\r\n if (nested === '*') {\r\n data = i;\r\n } else {\r\n data = eval('i.' + nested);\r\n }\r\n\r\n if (data) {\r\n try {\r\n if (utils.typeOf(data) === 'array') {\r\n for (var s = 0; s < data.length; s++) {\r\n if (utils.typeOf(data[s]) === 'object') {\r\n data[s]._parent = function () {\r\n return i;\r\n }()\r\n }\r\n }\r\n } else {\r\n data._parent = function () {\r\n return i;\r\n }();\r\n }\r\n } catch (err) {\r\n self._onError.call(self, err);\r\n }\r\n }\r\n }\r\n r.render(data);\r\n };\r\n },\r\n\r\n renderItem: function (renderer, _tempo_info, i, fragment) {\r\n var memberRegex = new RegExp('(?:__[\\\\.]?)((_tempo|\\\\[|' + utils.memberRegex(i) + '|this)([A-Za-z0-9$\\\\._\\\\[\\\\]]+)?)', 'g');\r\n var template = renderer.templates.templateFor(i);\r\n var tempo_info = utils.merge(_tempo_info, renderer.templates.attributes);\r\n\r\n // Clear attributes in case of recursive nesting (TODO: Probably need to clear more)\r\n if (utils.hasAttr(template, 'data-template-for')) {\r\n utils.removeAttr(template, 'data-template-for');\r\n }\r\n if (utils.hasAttr(template, 'data-template-file')) {\r\n utils.removeAttr(template, 'data-template-file');\r\n }\r\n\r\n if (template && i) {\r\n utils.notify(this.listener, new TempoEvent(TempoEvent.Types.ITEM_RENDER_STARTING, i, template));\r\n var nestedDeclaration = template.innerHTML.match(/data-template-for=\"([^\"]+?)\"/g);\r\n if (nestedDeclaration) {\r\n for (var p = 0; p < nestedDeclaration.length; p++) {\r\n var nested = nestedDeclaration[p].match(/data-template-for=\"([^\"]+?)\"/);\r\n if (nested && nested[1]) {\r\n var t = new Templates(renderer.templates.params, nested[1]);\r\n try {\r\n t.parse(template, this._renderNestedItem(i, nested[1]));\r\n } catch (err) {\r\n this._onError.call(this, err);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Processing template element attributes\r\n for (var a = 0; a < template.attributes.length; a++) {\r\n var attr = template.attributes[a];\r\n if (attr !== null && attr.specified && attr.value !== null && attr.value.length > 0 && attr.name.match(/style|data-template.*/) === null) {\r\n attr.value = this._applyTags(this, i, attr.value);\r\n attr.value = this._replaceVariables(this, tempo_info, i, attr.value);\r\n }\r\n }\r\n\r\n // Dealing with HTML as a String from now on (to be reviewed)\r\n // Attribute values are escaped in FireFox so making sure there are no escaped tags\r\n var html = template.innerHTML.replace(/%7B%7B/g, '{{').replace(/%7D%7D/g, '}}');\r\n\r\n // Tags\r\n html = this._applyTags(this, i, html);\r\n\r\n // Content\r\n html = this._replaceVariables(this, tempo_info, i, html);\r\n\r\n // JavaScript objects\r\n html = this._replaceObjects(this, tempo_info, i, html, memberRegex);\r\n\r\n html = this._applyAttributeSetters(this, i, html);\r\n\r\n fragment.appendChild(utils.getElement(template, html));\r\n\r\n utils.notify(this.listener, new TempoEvent(TempoEvent.Types.ITEM_RENDER_COMPLETE, i, template));\r\n }\r\n },\r\n\r\n _createFragment: function (data) {\r\n if (data) {\r\n var tempo_info = {};\r\n var fragment = _window.document.createDocumentFragment();\r\n\r\n // If object then wrapping in an array\r\n if (utils.typeOf(data) === 'object') {\r\n if (this.templates.dataIsMap) {\r\n var mapped = [];\r\n for (var member in data) {\r\n if (data.hasOwnProperty(member) && member !== '_parent') {\r\n var pair = {};\r\n pair.key = member;\r\n pair.value = data[member];\r\n mapped.push(pair);\r\n }\r\n }\r\n data = mapped;\r\n } else {\r\n data = [data];\r\n }\r\n }\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n tempo_info.index = i;\r\n tempo_info.first = i < 1;\r\n tempo_info.last = i == data.length - 1;\r\n this.renderItem(this, tempo_info, data[i], fragment);\r\n }\r\n\r\n return fragment;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n into: function (target) {\r\n if (target !== undefined) {\r\n this.templates.container = utils.container(target);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n render: function (data) {\r\n // Check if starting event was manually fired\r\n if (!this.started) {\r\n this.starting(new TempoEvent(TempoEvent.Types.RENDER_STARTING, data, this.templates.container));\r\n }\r\n\r\n this.clear();\r\n this.append(data);\r\n\r\n return this;\r\n },\r\n\r\n append: function (data) {\r\n // Check if starting event was manually fired\r\n if (!this.started) {\r\n this.starting(new TempoEvent(TempoEvent.Types.RENDER_STARTING, data, this.templates.container));\r\n }\r\n\r\n var fragment = this._createFragment(data);\r\n if (fragment !== null && this.templates.container !== null) {\r\n if (fragment !== null) {\r\n var ref = null;\r\n for (var i = this.templates.container.childNodes.length; i >= 0; i--) {\r\n\r\n if (this.templates.container.childNodes[i] !== undefined && this.templates.container.childNodes[i].getAttribute !== undefined && this.templates.container.childNodes[i].getAttribute('data-after-template') !== null) {\r\n ref = this.templates.container.childNodes[i];\r\n }\r\n }\r\n if (ref === null) {\r\n ref = this.templates.container.lastChild;\r\n }\r\n if (ref !== null) {\r\n this.templates.container.insertBefore(fragment, ref);\r\n } else {\r\n this.templates.container.appendChild(fragment);\r\n }\r\n }\r\n }\r\n\r\n utils.notify(this.listener, new TempoEvent(TempoEvent.Types.RENDER_COMPLETE, data, this.templates.container));\r\n\r\n return this;\r\n },\r\n\r\n prepend: function (data) {\r\n // Check if starting event was manually fired\r\n if (!this.started) {\r\n this.starting(new TempoEvent(TempoEvent.Types.RENDER_STARTING, data, this.templates.container));\r\n }\r\n\r\n var fragment = this._createFragment(data);\r\n if (fragment !== null) {\r\n var ref = null;\r\n for (var i = 0; i < this.templates.container.childNodes.length; i++) {\r\n if (this.templates.container.childNodes[i] !== undefined && this.templates.container.childNodes[i].getAttribute !== undefined && this.templates.container.childNodes[i].getAttribute('data-before-template') !== null) {\r\n ref = this.templates.container.childNodes[i];\r\n }\r\n }\r\n if (ref === null) {\r\n ref = this.templates.container.firstChild;\r\n }\r\n if (ref !== null) {\r\n if (ref.nextSibling !== null && ref.getAttribute && ref.getAttribute('data-before-template') !== null) {\r\n ref = ref.nextSibling;\r\n }\r\n this.templates.container.insertBefore(fragment, ref);\r\n } else {\r\n this.templates.container.appendChild(fragment);\r\n }\r\n }\r\n\r\n utils.notify(this.listener, new TempoEvent(TempoEvent.Types.RENDER_COMPLETE, data, this.templates.container));\r\n\r\n return this;\r\n },\r\n\r\n errors: function (errorHandler) {\r\n this.errorHandler = errorHandler;\r\n return this;\r\n },\r\n\r\n _onError: function (err) {\r\n if (this.errorHandler !== null) {\r\n this.errorHandler.call(this, err);\r\n }\r\n },\r\n\r\n clear: function () {\r\n utils.notify(this.listener, new TempoEvent(TempoEvent.Types.BEFORE_CLEAR, {}, this.templates.container));\r\n utils.clearContainer(this.templates.container);\r\n utils.notify(this.listener, new TempoEvent(TempoEvent.Types.AFTER_CLEAR, {}, this.templates.container));\r\n },\r\n\r\n tags: {\r\n 'if': function (renderer, i, match, args, body) {\r\n var member_regex = utils.memberRegex(i);\r\n\r\n var expr = args[0].replace(/&/g, '&').replace(/>/g, '>').replace(/</g, '<');\r\n expr = expr.replace(new RegExp(member_regex, 'gi'), function (match) {\r\n return 'i.' + match;\r\n });\r\n\r\n var blockRegex = new RegExp(renderer.templates.tag_brace_left + '[ ]?else[ ]?' + renderer.templates.tag_brace_right, 'g');\r\n var blocks = body.split(blockRegex);\r\n\r\n if (eval(expr)) {\r\n return blocks[0];\r\n } else if (blocks.length > 1) {\r\n return blocks[1];\r\n }\r\n\r\n return '';\r\n }\r\n },\r\n\r\n filters: {\r\n 'escape': function (value, args) {\r\n return value.toString().replace(/[&<>]/g, function (c) {\r\n return {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>'\r\n }[c] || c;\r\n });\r\n },\r\n 'encodeURI': function (value, args) {\r\n return encodeURI(value.toString());\r\n },\r\n 'decodeURI': function (value, args) {\r\n return decodeURI(value.toString());\r\n },\r\n 'truncate': function (value, args) {\r\n if (value !== undefined) {\r\n var len = 0;\r\n var rep = '...';\r\n if (args.length > 0) {\r\n len = parseInt(args[0], 10);\r\n }\r\n if (args.length > 1) {\r\n rep = args[1];\r\n }\r\n if (value.length > len - 3) {\r\n return value.substr(0, len - 3) + rep;\r\n }\r\n return value;\r\n }\r\n },\r\n 'format': function (value, args) {\r\n if (value !== undefined) {\r\n if (args.length === 1) {\r\n value = parseFloat(value + '').toFixed(parseInt(args[0], 10));\r\n }\r\n var x = (value + '').split('.');\r\n var x1 = x[0];\r\n var x2 = x.length > 1 ? '.' + x[1] : '';\r\n\r\n while (NUMBER_FORMAT_REGEX.test(x1)) {\r\n x1 = x1.replace(NUMBER_FORMAT_REGEX, '$1' + ',' + '$2');\r\n }\r\n\r\n return x1 + x2;\r\n }\r\n },\r\n 'upper': function (value, args) {\r\n return value.toUpperCase();\r\n },\r\n 'lower': function (value, args) {\r\n return value.toLowerCase();\r\n },\r\n 'titlecase': function (value, args) {\r\n var blacklist = [];\r\n if (args !== undefined && args.length === 1) {\r\n blacklist = args[0].split(' ');\r\n }\r\n return value.replace(/\\w[a-z]\\S*/g, function (m, i) {\r\n if (blacklist.length === 0 || !(utils.arrayContains(blacklist, m) && i > 0)) {\r\n return m.charAt(0).toUpperCase() + m.substr(1).toLowerCase();\r\n }\r\n return m;\r\n });\r\n },\r\n 'trim': function (value, args) {\r\n return utils.trim(value);\r\n },\r\n 'replace': function (value, args) {\r\n if (value !== undefined && args.length === 2) {\r\n return value.replace(new RegExp(args[0], 'g'), args[1]);\r\n }\r\n return value;\r\n },\r\n 'append': function (value, args) {\r\n if (value !== undefined && args.length === 1) {\r\n return value + '' + args[0];\r\n }\r\n return value;\r\n },\r\n 'prepend': function (value, args) {\r\n if (value !== undefined && args.length === 1) {\r\n return args[0] + '' + value;\r\n }\r\n return value;\r\n },\r\n 'join': function (value, args) {\r\n if (args.length === 1 && value !== undefined && utils.typeOf(value) === 'array') {\r\n return value.join(args[0]);\r\n }\r\n return value;\r\n },\r\n 'default': function (value, args) {\r\n if (value !== undefined && value !== null) {\r\n return value;\r\n }\r\n if (args.length === 1) {\r\n return args[0];\r\n }\r\n return value;\r\n },\r\n 'date': function (value, args) {\r\n if (value !== undefined && args.length >= 1 && args.length <= 2) {\r\n var date = new Date(value);\r\n var format = args[0];\r\n var isUTC = (args.length === 2 && args[1] === 'UTC');\r\n if (format === 'localedate') {\r\n return date.toLocaleDateString();\r\n } else if (format === 'localetime') {\r\n return date.toLocaleTimeString();\r\n } else if (format === 'date') {\r\n return date.toDateString();\r\n } else if (format === 'time') {\r\n return date.toTimeString();\r\n } else {\r\n var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n var DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n var DATE_PATTERNS = {\r\n 'YYYY': function (date) {\r\n return (isUTC ? date.getUTCFullYear() : date.getFullYear());\r\n },\r\n 'YY': function (date) {\r\n return (isUTC ? date.getUTCFullYear() : date.getFullYear()).toFixed().substring(2);\r\n },\r\n 'MMMM': function (date) {\r\n return MONTHS[(isUTC ? date.getUTCMonth() : date.getMonth())];\r\n },\r\n 'MMM': function (date) {\r\n return MONTHS[(isUTC ? date.getUTCMonth() : date.getMonth())].substring(0, 3);\r\n },\r\n 'MM': function (date) {\r\n return utils.pad(((isUTC ? date.getUTCMonth() : date.getMonth()) + 1).toFixed(), '0', 2);\r\n },\r\n 'M': function (date) {\r\n return (isUTC ? date.getUTCMonth() : date.getMonth()) + 1;\r\n },\r\n 'DD': function (date) {\r\n return utils.pad((isUTC ? date.getUTCDate() : date.getDate()).toFixed(), '0', 2);\r\n },\r\n 'D': function (date) {\r\n return (isUTC ? date.getUTCDate() : date.getDate());\r\n },\r\n 'EEEE': function (date) {\r\n return DAYS[(isUTC ? date.getUTCDay() : date.getDay())];\r\n },\r\n 'EEE': function (date) {\r\n return DAYS[(isUTC ? date.getUTCDay() : date.getDay())].substring(0, 3);\r\n },\r\n 'E': function (date) {\r\n return (isUTC ? date.getUTCDay() : date.getDay());\r\n },\r\n 'HH': function (date) {\r\n return utils.pad((isUTC ? date.getUTCHours() : date.getHours()).toFixed(), '0', 2);\r\n },\r\n 'H': function (date) {\r\n return (isUTC ? date.getUTCHours() : date.getHours());\r\n },\r\n 'h': function (date) {\r\n var hours = (isUTC ? date.getUTCHours() : date.getHours());\r\n return hours < 13 ? (hours === 0 ? 12 : hours) : hours - 12;\r\n },\r\n 'mm': function (date) {\r\n return utils.pad((isUTC ? date.getUTCMinutes() : date.getMinutes()).toFixed(), '0', 2);\r\n },\r\n 'm': function (date) {\r\n return (isUTC ? date.getUTCMinutes() : date.getMinutes());\r\n },\r\n 'ss': function (date) {\r\n return utils.pad((isUTC ? date.getUTCSeconds() : date.getSeconds()).toFixed(), '0', 2);\r\n },\r\n 's': function (date) {\r\n return (isUTC ? date.getUTCSeconds() : date.getSeconds());\r\n },\r\n 'SSS': function (date) {\r\n return utils.pad((isUTC ? date.getUTCMilliseconds() : date.getMilliseconds()).toFixed(), '0', 3);\r\n },\r\n 'S': function (date) {\r\n return (isUTC ? date.getUTCMilliseconds() : date.getMilliseconds());\r\n },\r\n 'a': function (date) {\r\n return (isUTC ? date.getUTCHours() : date.getHours()) < 12 ? 'AM' : 'PM';\r\n }\r\n };\r\n format = format.replace(/(\\\\)?(Y{2,4}|M{1,4}|D{1,2}|E{1,4}|H{1,2}|h|m{1,2}|s{1,2}|S{1,3}|a)/g,\r\n function (match, escape, pattern) {\r\n if (!escape) {\r\n if (DATE_PATTERNS.hasOwnProperty(pattern)) {\r\n return DATE_PATTERNS[pattern](date);\r\n }\r\n }\r\n return pattern;\r\n });\r\n\r\n return format;\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n }\r\n };\r\n\r\n /*!\r\n * Initialising Tempo with a Window object in case running inside Node.\r\n */\r\n tempo.init = function (window) {\r\n _window = window;\r\n return this;\r\n };\r\n\r\n /*!\r\n * Prepare a container for rendering, gathering templates and\r\n * clearing afterwards.\r\n */\r\n tempo.prepare = function (container, params, callback) {\r\n container = utils.container(container);\r\n\r\n var templates = new Templates(params);\r\n if (callback !== undefined) {\r\n templates.parse(container, function (templates) {\r\n callback(new Renderer(templates));\r\n });\r\n } else {\r\n templates.parse(container);\r\n return new Renderer(templates);\r\n }\r\n };\r\n\r\n tempo.exports = {\r\n 'templates': Templates,\r\n 'utils': utils\r\n };\r\n\r\n tempo.test = {\r\n 'utils': utils,\r\n 'templates': new Templates({}),\r\n 'renderer': new Renderer(new Templates({}))\r\n };\r\n\r\n // Default initialisation\r\n try {\r\n tempo.init(window);\r\n } catch (e) {\r\n exports.tempo = tempo;\r\n }\r\n\r\n return tempo;\r\n\r\n})(Tempo || {});\r\n\r\nexport default Tempo;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/tempo.js","// NOTE: aquí hay un ejemplo [http://athletic.elcorreo.com/noticias/201703/12/real-sociedad-athletic-directo-20170306121619.html?op=cscribble]\n\nexport const CONFIG_NAMESPACE = 'vocento.config.scribblelive';\nexport const DEFAULT_TEMPLATE = 'widget';\n\nexport const DEFAULTS = Object.freeze({\n APIToken: 'CFhft3e',\n escribeCapaJs: true, // true -> use template, false -> use IframeApi with embedded template\n ColumnLocation: 'C',\n avatar1: false,\n avatar2: false,\n avatar3: false,\n avatar4: false,\n SL_valor_epigrafe: 'Última hora',\n SL_url_epigrafe: null,\n Scribble_tipoEspecial: '', // Se utiliza para cambiar algunos aspetos de presentación('elecciones-2015' | 'nuevo')\n SL_valor_numeroMensajesPagina: 40,\n SL_valor_evento1Titulo: 'Directo',\n SL_valor_evento1URLPaginaDetalle: null,\n SL_valor_evento2ID: null,\n SL_valor_evento2Titulo: null,\n SL_valor_evento2URLPaginaDetalle: null,\n SL_valor_evento3ID: null,\n SL_valor_evento3Titulo: null,\n SL_valor_evento3URLPaginaDetalle: null,\n SL_valor_evento4ID: null,\n SL_valor_evento4Titulo: null,\n SL_valor_evento4URLPaginaDetalle: null,\n SL_valor_plantilla: '1998',\n Scribble_ancho: undefined, // by default 300\n Scribble_alto: undefined, // by default 450\n Scribble_pageElementId: 'SL_eventoNoticia', // place where comments will be displayed, by default SL_evento\n Scribble_template_twitter: null,\n Scribble_dateFormat: null, // by default DD/MM/YYYY HH:mm:ss\n Scribble_todayDateFormat: null, // by default HH:mm:ss\n Scribble_Iframe_API: '//embed.scribblelive.com/Embed/v5.aspx',\n Scribble_API: '//apiv1.scribblelive.com',\n relativeTimeLanguage: 'es'\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/constants.js","module.exports = \"
{{FormattedDate}} {{Creator.Name}}

{% if Link %} {{Content}} {% else %} {{Content}} {% endif %}

\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/widget.html\n// module id = 5\n// module chunks = 0","module.exports = \"
{% if Creator.Avatar.length > 0 %} \\\"\\\" {% endif %} {% if Creator.Avatar.length == 0 %} {% endif %}

{{FormattedDate}}

{{Creator.Name}}

{{Content}}

\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/templates/content.html\n// module id = 6\n// module chunks = 0"],"sourceRoot":""}