v1.18.x
psychobunny 9 years ago
commit 89425cbdeb

@ -8,12 +8,12 @@
"no_replies": "Nadie ha respondido aún", "no_replies": "Nadie ha respondido aún",
"no_new_posts": "No hay mensajes nuevos.", "no_new_posts": "No hay mensajes nuevos.",
"share_this_category": "Compartir esta categoría", "share_this_category": "Compartir esta categoría",
"watch": "Siguiendo", "watch": "Seguir",
"ignore": "Ignorando", "ignore": "Ignorar",
"watching": "Watching", "watching": "Siguiendo",
"ignoring": "Ignoring", "ignoring": "Ignorando",
"watching.description": "Show topics in unread", "watching.description": "Mostrar temas en no leidos",
"ignoring.description": "Do not show topics in unread", "ignoring.description": "No mostrar temas en no leidos",
"watch.message": "Ahora estás viendo actualizaciones de esta categoría", "watch.message": "Ahora estás viendo actualizaciones de esta categoría",
"ignore.message": "Ahora estás ignorando las actualizaciones de esta categoría", "ignore.message": "Ahora estás ignorando las actualizaciones de esta categoría",
"watched-categories": "Categorías seguidas" "watched-categories": "Categorías seguidas"

@ -30,7 +30,7 @@
"user-banned": "Usuario baneado", "user-banned": "Usuario baneado",
"user-too-new": "Lo sentimos, es necesario que esperes %1 segundo(s) antes poder hacer tu primera publicación", "user-too-new": "Lo sentimos, es necesario que esperes %1 segundo(s) antes poder hacer tu primera publicación",
"blacklisted-ip": "Lo sentimos, tu dirección IP ha sido baneada de esta comunidad. Si crees que debe de haber un error, por favor contacte con un administrador.", "blacklisted-ip": "Lo sentimos, tu dirección IP ha sido baneada de esta comunidad. Si crees que debe de haber un error, por favor contacte con un administrador.",
"ban-expiry-missing": "Please provide an end date for this ban", "ban-expiry-missing": "Por favor pon una fecha de fin del ban",
"no-category": "La categoría no existe", "no-category": "La categoría no existe",
"no-topic": "El tema no existe", "no-topic": "El tema no existe",
"no-post": "La publicación no existe", "no-post": "La publicación no existe",
@ -40,20 +40,20 @@
"no-privileges": "No tienes suficientes privilegios para realizar esta acción.", "no-privileges": "No tienes suficientes privilegios para realizar esta acción.",
"category-disabled": "Categoría deshabilitada", "category-disabled": "Categoría deshabilitada",
"topic-locked": "Tema bloqueado", "topic-locked": "Tema bloqueado",
"post-edit-duration-expired": "Sólo puedes editar mensajes durante %1 segundo(s) después de haberlo escrito", "post-edit-duration-expired": "No puedes editar mensajes hasta pasado %1 segundo(s) después de haberlo escrito",
"post-edit-duration-expired-minutes": "You are only allowed to edit posts for %1 minute(s) after posting", "post-edit-duration-expired-minutes": "No puedes editar mensajes hasta pasado %1 minuto(s) después de haberlo escrito",
"post-edit-duration-expired-minutes-seconds": "You are only allowed to edit posts for %1 minute(s) %2 second(s) after posting", "post-edit-duration-expired-minutes-seconds": "No puedes editar mensajes hasta pasado %1 minuto(s) y %2 segundo(s) después de haberlo escrito",
"post-edit-duration-expired-hours": "You are only allowed to edit posts for %1 hour(s) after posting", "post-edit-duration-expired-hours": "No puedes editar mensajes hasta pasado %1 hora(s) después de haberlo escrito",
"post-edit-duration-expired-hours-minutes": "You are only allowed to edit posts for %1 hour(s) %2 minute(s) after posting", "post-edit-duration-expired-hours-minutes": "No puedes editar mensajes hasta pasado %1 hora(s) y %2 minuto(s) después de haberlo escrito",
"post-edit-duration-expired-days": "You are only allowed to edit posts for %1 day(s) after posting", "post-edit-duration-expired-days": "No puedes editar mensajes hasta pasado %1 día(s) después de haberlo escrito",
"post-edit-duration-expired-days-hours": "You are only allowed to edit posts for %1 day(s) %2 hour(s) after posting", "post-edit-duration-expired-days-hours": "No puedes editar mensajes hasta pasado %1 día(s) y %2 hora(s) después de haberlo escrito",
"post-delete-duration-expired": "You are only allowed to delete posts for %1 second(s) after posting", "post-delete-duration-expired": "No puedes borrar mensajes hasta pasado %1 segundo(s) después de haberlo escrito",
"post-delete-duration-expired-minutes": "You are only allowed to delete posts for %1 minute(s) after posting", "post-delete-duration-expired-minutes": "No puedes borrar mensajes hasta pasado %1 minuto(s) después de haberlo escrito",
"post-delete-duration-expired-minutes-seconds": "You are only allowed to delete posts for %1 minute(s) %2 second(s) after posting", "post-delete-duration-expired-minutes-seconds": "No puedes borrar mensajes hasta pasado %1 minuto(s) y %2 segundo(s) después de haberlo escrito",
"post-delete-duration-expired-hours": "You are only allowed to delete posts for %1 hour(s) after posting", "post-delete-duration-expired-hours": "No puedes borrar mensajes hasta pasado %1 hora(s) después de haberlo escrito",
"post-delete-duration-expired-hours-minutes": "You are only allowed to delete posts for %1 hour(s) %2 minute(s) after posting", "post-delete-duration-expired-hours-minutes": "No puedes borrar mensajes hasta pasado %1 hora(s) y %2 minuto(s) después de haberlo escrito",
"post-delete-duration-expired-days": "You are only allowed to delete posts for %1 day(s) after posting", "post-delete-duration-expired-days": "No puedes borrar mensajes hasta pasado %1 día(s) después de haberlo escrito",
"post-delete-duration-expired-days-hours": "You are only allowed to delete posts for %1 day(s) %2 hour(s) after posting", "post-delete-duration-expired-days-hours": "No puedes borrar mensajes hasta pasado %1 día(s) y %2 hora(s) después de haberlo escrito",
"content-too-short": "Por favor introduzca una publicación más larga. Las publicaciones deben contener al menos %1 caractere(s).", "content-too-short": "Por favor introduzca una publicación más larga. Las publicaciones deben contener al menos %1 caractere(s).",
"content-too-long": "Por favor introduzca un mensaje más corto. Los mensajes no pueden exceder los %1 caractere(s).", "content-too-long": "Por favor introduzca un mensaje más corto. Los mensajes no pueden exceder los %1 caractere(s).",
"title-too-short": "Por favor introduzca un título más largo. Los títulos deben contener al menos %1 caractere(s).", "title-too-short": "Por favor introduzca un título más largo. Los títulos deben contener al menos %1 caractere(s).",
@ -71,12 +71,12 @@
"already-unfavourited": "Ya habías desguardado este post.", "already-unfavourited": "Ya habías desguardado este post.",
"cant-ban-other-admins": "¡No puedes expulsar a otros administradores!", "cant-ban-other-admins": "¡No puedes expulsar a otros administradores!",
"cant-remove-last-admin": "Tu eres el unico administrador. Añade otro usuario como administrador antes de eliminarte a ti mismo.", "cant-remove-last-admin": "Tu eres el unico administrador. Añade otro usuario como administrador antes de eliminarte a ti mismo.",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", "cant-delete-admin": "Quitar privilegios de administrador de ésta cuenta antes de intentar borrarla",
"invalid-image-type": "Tipo de imagen inválido. Los tipos permitidos son: %1", "invalid-image-type": "Tipo de imagen inválido. Los tipos permitidos son: %1",
"invalid-image-extension": "Extensión de imagen inválida", "invalid-image-extension": "Extensión de imagen inválida",
"invalid-file-type": "Tipo de fichero inválido. Los tipos permitidos son: %1", "invalid-file-type": "Tipo de fichero inválido. Los tipos permitidos son: %1",
"group-name-too-short": "Nombre del grupo es demasiado corto.", "group-name-too-short": "Nombre del grupo es demasiado corto.",
"group-name-too-long": "Group name too long", "group-name-too-long": "Nombre de grupo demasiado largo",
"group-already-exists": "El grupo ya existe.", "group-already-exists": "El grupo ya existe.",
"group-name-change-not-allowed": "El nombre del grupo deseado no está permitido.", "group-name-change-not-allowed": "El nombre del grupo deseado no está permitido.",
"group-already-member": "Ya eres miembro de este grupo", "group-already-member": "Ya eres miembro de este grupo",
@ -119,5 +119,5 @@
"not-in-room": "El usuario no está en la sala", "not-in-room": "El usuario no está en la sala",
"no-users-in-room": "No hay usuarios en esta sala", "no-users-in-room": "No hay usuarios en esta sala",
"cant-kick-self": "No te puedes expulsar a ti mismo del grupo", "cant-kick-self": "No te puedes expulsar a ti mismo del grupo",
"no-users-selected": "No user(s) selected" "no-users-selected": "Ningun usuario(s) seleccionado"
} }

@ -50,9 +50,9 @@
"topics": "Temas", "topics": "Temas",
"posts": "Posts", "posts": "Posts",
"best": "Mejor valorados", "best": "Mejor valorados",
"upvoters": "Upvoters", "upvoters": "Positivos",
"upvoted": "Votado positivamente", "upvoted": "Votado positivamente",
"downvoters": "Downvoters", "downvoters": "Negativos",
"downvoted": "Votado negativamente", "downvoted": "Votado negativamente",
"views": "Visitas", "views": "Visitas",
"reputation": "Reputación", "reputation": "Reputación",

@ -12,7 +12,7 @@
"users/sort-posts": "Top por mensajes", "users/sort-posts": "Top por mensajes",
"users/sort-reputation": "Más reputados", "users/sort-reputation": "Más reputados",
"users/banned": "Usuarios baneados", "users/banned": "Usuarios baneados",
"users/most-flags": "Most flagged users", "users/most-flags": "Usuarios mas reportados",
"users/search": "Buscar", "users/search": "Buscar",
"notifications": "Notificaciones", "notifications": "Notificaciones",
"tags": "Etiquetas", "tags": "Etiquetas",
@ -29,7 +29,7 @@
"account/edit/password": "Editar contraseña de \"%1\"", "account/edit/password": "Editar contraseña de \"%1\"",
"account/edit/username": "Editar nombre de usuario de \"%1\"", "account/edit/username": "Editar nombre de usuario de \"%1\"",
"account/edit/email": "Editar email \"%1\"", "account/edit/email": "Editar email \"%1\"",
"account/info": "Account Info", "account/info": "Información de cuenta",
"account/following": "Gente que sigue %1", "account/following": "Gente que sigue %1",
"account/followers": "Seguidores de %1", "account/followers": "Seguidores de %1",
"account/posts": "Publicados por %1", "account/posts": "Publicados por %1",

@ -1,6 +1,6 @@
{ {
"register": "Registrarse", "register": "Registrarse",
"cancel_registration": "Cancel Registration", "cancel_registration": "Cancelar registro",
"help.email": "Por defecto, tu cuenta de correo electrónico estará oculta al publico.", "help.email": "Por defecto, tu cuenta de correo electrónico estará oculta al publico.",
"help.username_restrictions": "El nombre de usuario debe tener entre %1 y %2 carácteres. Los miembros pueden responderte escribiendo @<span id='yourUsername'>usuario</span>.", "help.username_restrictions": "El nombre de usuario debe tener entre %1 y %2 carácteres. Los miembros pueden responderte escribiendo @<span id='yourUsername'>usuario</span>.",
"help.minimum_password_length": "Tu contraseña debe tener al menos %1 carácteres.", "help.minimum_password_length": "Tu contraseña debe tener al menos %1 carácteres.",
@ -16,8 +16,8 @@
"alternative_registration": "Métodos de registro alternativos", "alternative_registration": "Métodos de registro alternativos",
"terms_of_use": "Términos y Condiciones de uso", "terms_of_use": "Términos y Condiciones de uso",
"agree_to_terms_of_use": "Acepto los Términos y Condiciones de uso", "agree_to_terms_of_use": "Acepto los Términos y Condiciones de uso",
"terms_of_use_error": "You must agree to the Terms of Use", "terms_of_use_error": "Debes aceptar los términos de uso",
"registration-added-to-queue": "Tu registro se ha añadido a la cola de aprobación,. Recibirás un correo cuando este sea aceptado por un administrador. ", "registration-added-to-queue": "Tu registro se ha añadido a la cola de aprobación,. Recibirás un correo cuando este sea aceptado por un administrador. ",
"interstitial.intro": "We require some additional information before we can create your account.", "interstitial.intro": "Se requiere de información adicional antes de crear tu cuenta.",
"interstitial.errors-found": "We could not complete your registration:" "interstitial.errors-found": "No pudimos completar tu registro:"
} }

@ -31,7 +31,7 @@
"flag_success": "Este mensaje ha sido reportado para moderación.", "flag_success": "Este mensaje ha sido reportado para moderación.",
"deleted_message": "Este tema ha sido borrado. Solo los usuarios que tengan privilegios de administración de temas pueden verlo.", "deleted_message": "Este tema ha sido borrado. Solo los usuarios que tengan privilegios de administración de temas pueden verlo.",
"following_topic.message": "Ahora recibiras notificaciones cuando alguien publique en este tema.", "following_topic.message": "Ahora recibiras notificaciones cuando alguien publique en este tema.",
"not_following_topic.message": "You will see this topic in the unread topics list, but you will not receive notifications when somebody posts to this topic.", "not_following_topic.message": "Podras ver este tema en la lista de no leidos, pero no recibirás notificaciones cuando alguien escriba en él.",
"ignoring_topic.message": "Ya no verás este tema en no leídos. Serás notificado si te mencionan o te votan.", "ignoring_topic.message": "Ya no verás este tema en no leídos. Serás notificado si te mencionan o te votan.",
"login_to_subscribe": "Por favor, conéctate para subscribirte a este tema.", "login_to_subscribe": "Por favor, conéctate para subscribirte a este tema.",
"markAsUnreadForAll.success": "Publicación marcada como no leída para todos.", "markAsUnreadForAll.success": "Publicación marcada como no leída para todos.",

@ -6,7 +6,7 @@
"postcount": "Número De Publicaciones", "postcount": "Número De Publicaciones",
"email": "Correo electrónico", "email": "Correo electrónico",
"confirm_email": "Confirmar correo electrónico", "confirm_email": "Confirmar correo electrónico",
"account_info": "Account Info", "account_info": "Información de cuenta",
"ban_account": "Banear cuenta", "ban_account": "Banear cuenta",
"ban_account_confirm": "Quieres confirmar el baneo de este usuario?", "ban_account_confirm": "Quieres confirmar el baneo de este usuario?",
"unban_account": "Desbanear cuenta", "unban_account": "Desbanear cuenta",
@ -96,8 +96,8 @@
"delay_image_loading": "Retrasar la carga de imágenes", "delay_image_loading": "Retrasar la carga de imágenes",
"image_load_delay_help": "Si se habilita, las imágenes no cargarán hasta que se vean en pantalla", "image_load_delay_help": "Si se habilita, las imágenes no cargarán hasta que se vean en pantalla",
"scroll_to_my_post": "Luego de enviar una respuesta, mostrar el nuevo mensaje", "scroll_to_my_post": "Luego de enviar una respuesta, mostrar el nuevo mensaje",
"follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_reply_to": "Seguir temas a los que respondes",
"follow_topics_you_create": "Watch topics you create", "follow_topics_you_create": "Seguir temas creados por ti",
"grouptitle": "Título del grupo", "grouptitle": "Título del grupo",
"no-group-title": "Sin título de grupo", "no-group-title": "Sin título de grupo",
"select-skin": "Seleccionar una plantilla", "select-skin": "Seleccionar una plantilla",
@ -109,10 +109,10 @@
"sso.title": "Servicios de Inicio de sesión Único", "sso.title": "Servicios de Inicio de sesión Único",
"sso.associated": "Asociado con", "sso.associated": "Asociado con",
"sso.not-associated": "Da clic aquí para asociarse con", "sso.not-associated": "Da clic aquí para asociarse con",
"info.latest-flags": "Latest Flags", "info.latest-flags": "Ultimos reportes",
"info.no-flags": "No Flagged Posts Found", "info.no-flags": "Ningun mensaje reportado encontrado",
"info.ban-history": "Recent Ban History", "info.ban-history": "Histórico reciente de bans",
"info.no-ban-history": "This user has never been banned", "info.no-ban-history": "Este usuario nunca ha sido baneado",
"info.banned-until": "Banned until %1", "info.banned-until": "Baneado hasta %1",
"info.banned-permanently": "Banned permanently" "info.banned-permanently": "Baneado permanentemente"
} }

@ -2,7 +2,7 @@
"latest_users": "Últimos usuarios", "latest_users": "Últimos usuarios",
"top_posters": "Top por mensajes", "top_posters": "Top por mensajes",
"most_reputation": "Más reputados", "most_reputation": "Más reputados",
"most_flags": "Most Flags", "most_flags": "Más Reportados",
"search": "Buscar", "search": "Buscar",
"enter_username": "Ingresa el nombre de usuario que quieres buscar", "enter_username": "Ingresa el nombre de usuario que quieres buscar",
"load_more": "Cargar más", "load_more": "Cargar más",

@ -16,7 +16,7 @@
"alternative_registration": "روش ثبت نام جایگزین", "alternative_registration": "روش ثبت نام جایگزین",
"terms_of_use": "شرایط استفاده", "terms_of_use": "شرایط استفاده",
"agree_to_terms_of_use": "با شرایط استفاده موافقم", "agree_to_terms_of_use": "با شرایط استفاده موافقم",
"terms_of_use_error": "You must agree to the Terms of Use", "terms_of_use_error": "شما باید با شرایط انجمن موافقت کنید",
"registration-added-to-queue": "ثبت نام شما به صف تایید اضافه شد. وقتی توسط یک مدیر تایید شد شما ایمیلی دریافت خواهید کرد.", "registration-added-to-queue": "ثبت نام شما به صف تایید اضافه شد. وقتی توسط یک مدیر تایید شد شما ایمیلی دریافت خواهید کرد.",
"interstitial.intro": "ما نیاز به برخی اطلاعات اضافی شما قبل از ایجاد شناسه کاربری داریم.", "interstitial.intro": "ما نیاز به برخی اطلاعات اضافی شما قبل از ایجاد شناسه کاربری داریم.",
"interstitial.errors-found": "شما نمی‌توانید ثبت نام خود را تکمیل کنید:" "interstitial.errors-found": "شما نمی‌توانید ثبت نام خود را تکمیل کنید:"

@ -377,15 +377,18 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
} }
templates.parse('partials/modals/votes_modal', data, function(html) { templates.parse('partials/modals/votes_modal', data, function(html) {
var dialog = bootbox.dialog({ translator.translate(html, function(translated) {
title: 'Voters', var dialog = bootbox.dialog({
message: html, title: 'Voters',
className: 'vote-modal', message: translated,
show: true className: 'vote-modal',
}); show: true
});
dialog.on('click', function() {
dialog.modal('hide'); dialog.on('click', function() {
dialog.modal('hide');
});
}); });
}); });
}); });

@ -1,36 +1,36 @@
/* /*
RequireJS 2.1.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. RequireJS 2.2.0 Copyright jQuery Foundation and other contributors.
Available via the MIT or new BSD license. Released under MIT license, http://github.com/requirejs/requirejs/LICENSE
see: http://github.com/jrburke/requirejs for details
*/ */
var requirejs,require,define; var requirejs,require,define;
(function(ba){function J(b){return"[object Function]"===N.call(b)}function K(b){return"[object Array]"===N.call(b)}function z(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function O(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function t(b,c){return ha.call(b,c)}function m(b,c){return t(b,c)&&b[c]}function H(b,c){for(var d in b)if(t(b,d)&&c(b[d],d))break}function S(b,c,d,m){c&&H(c,function(c,l){if(d||!t(b,l))m&&"string"!==typeof c?(b[l]||(b[l]={}),S(b[l], (function(ga){function ka(b,c,d,g){return g||""}function K(b){return"[object Function]"===Q.call(b)}function L(b){return"[object Array]"===Q.call(b)}function y(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function X(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));--d);}}function x(b,c){return la.call(b,c)}function e(b,c){return x(b,c)&&b[c]}function D(b,c){for(var d in b)if(x(b,d)&&c(b[d],d))break}function Y(b,c,d,g){c&&D(c,function(c,e){if(d||!x(b,e))!g||"object"!==
c,d,m)):b[l]=c});return b}function v(b,c){return function(){return c.apply(b,arguments)}}function ca(b){throw b;}function da(b){if(!b)return b;var c=ba;z(b.split("."),function(b){c=c[b]});return c}function B(b,c,d,m){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=m;d&&(c.originalError=d);return c}function ia(b){function c(a,f,C){var e,n,b,c,d,T,k,g=f&&f.split("/");e=g;var l=j.map,h=l&&l["*"];if(a&&"."===a.charAt(0))if(f){e=m(j.pkgs,f)?g=[f]:g.slice(0,g.length- typeof c||!c||L(c)||K(c)||c instanceof RegExp?b[e]=c:(b[e]||(b[e]={}),Y(b[e],c,d,g))});return b}function z(b,c){return function(){return c.apply(b,arguments)}}function ha(b){throw b;}function ia(b){if(!b)return b;var c=ga;y(b.split("."),function(b){c=c[b]});return c}function F(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ma(b){function c(a,n,b){var h,k,f,c,d,l,g,r;n=n&&n.split("/");var q=p.map,m=q&&q["*"];
1);f=a=e.concat(a.split("/"));for(e=0;f[e];e+=1)if(n=f[e],"."===n)f.splice(e,1),e-=1;else if(".."===n)if(1===e&&(".."===f[2]||".."===f[0]))break;else 0<e&&(f.splice(e-1,2),e-=2);e=m(j.pkgs,f=a[0]);a=a.join("/");e&&a===f+"/"+e.main&&(a=f)}else 0===a.indexOf("./")&&(a=a.substring(2));if(C&&l&&(g||h)){f=a.split("/");for(e=f.length;0<e;e-=1){b=f.slice(0,e).join("/");if(g)for(n=g.length;0<n;n-=1)if(C=m(l,g.slice(0,n).join("/")))if(C=m(C,b)){c=C;d=e;break}if(c)break;!T&&(h&&m(h,b))&&(T=m(h,b),k=e)}!c&& if(a){a=a.split("/");k=a.length-1;p.nodeIdCompat&&U.test(a[k])&&(a[k]=a[k].replace(U,""));"."===a[0].charAt(0)&&n&&(k=n.slice(0,n.length-1),a=k.concat(a));k=a;for(f=0;f<k.length;f++)c=k[f],"."===c?(k.splice(f,1),--f):".."===c&&0!==f&&(1!==f||".."!==k[2])&&".."!==k[f-1]&&0<f&&(k.splice(f-1,2),f-=2);a=a.join("/")}if(b&&q&&(n||m)){k=a.split("/");f=k.length;a:for(;0<f;--f){d=k.slice(0,f).join("/");if(n)for(c=n.length;0<c;--c)if(b=e(q,n.slice(0,c).join("/")))if(b=e(b,d)){h=b;l=f;break a}!g&&m&&e(m,d)&&
T&&(c=T,d=k);c&&(f.splice(0,d,c),a=f.join("/"))}return a}function d(a){A&&z(document.getElementsByTagName("script"),function(f){if(f.getAttribute("data-requiremodule")===a&&f.getAttribute("data-requirecontext")===k.contextName)return f.parentNode.removeChild(f),!0})}function p(a){var f=m(j.paths,a);if(f&&K(f)&&1<f.length)return d(a),f.shift(),k.require.undef(a),k.require([a]),!0}function g(a){var f,b=a?a.indexOf("!"):-1;-1<b&&(f=a.substring(0,b),a=a.substring(b+1,a.length));return[f,a]}function l(a, (g=e(m,d),r=f)}!h&&g&&(h=g,l=r);h&&(k.splice(0,l,h),a=k.join("/"))}return(h=e(p.pkgs,a))?h:a}function d(a){E&&y(document.getElementsByTagName("script"),function(n){if(n.getAttribute("data-requiremodule")===a&&n.getAttribute("data-requirecontext")===l.contextName)return n.parentNode.removeChild(n),!0})}function m(a){var n=e(p.paths,a);if(n&&L(n)&&1<n.length)return n.shift(),l.require.undef(a),l.makeRequire(null,{skipMap:!0})([a]),!0}function r(a){var n,b=a?a.indexOf("!"):-1;-1<b&&(n=a.substring(0,
f,b,e){var n,D,i=null,d=f?f.name:null,l=a,h=!0,j="";a||(h=!1,a="_@r"+(N+=1));a=g(a);i=a[0];a=a[1];i&&(i=c(i,d,e),D=m(r,i));a&&(i?j=D&&D.normalize?D.normalize(a,function(a){return c(a,d,e)}):c(a,d,e):(j=c(a,d,e),a=g(j),i=a[0],j=a[1],b=!0,n=k.nameToUrl(j)));b=i&&!D&&!b?"_unnormalized"+(O+=1):"";return{prefix:i,name:j,parentMap:f,unnormalized:!!b,url:n,originalName:l,isDefine:h,id:(i?i+"!"+j:j)+b}}function s(a){var f=a.id,b=m(q,f);b||(b=q[f]=new k.Module(a));return b}function u(a,f,b){var e=a.id,n=m(q, b),a=a.substring(b+1,a.length));return[n,a]}function q(a,n,b,h){var k,f,d=null,g=n?n.name:null,p=a,q=!0,m="";a||(q=!1,a="_@r"+(Q+=1));a=r(a);d=a[0];a=a[1];d&&(d=c(d,g,h),f=e(v,d));a&&(d?m=f&&f.normalize?f.normalize(a,function(a){return c(a,g,h)}):-1===a.indexOf("!")?c(a,g,h):a:(m=c(a,g,h),a=r(m),d=a[0],m=a[1],b=!0,k=l.nameToUrl(m)));b=!d||f||b?"":"_unnormalized"+(T+=1);return{prefix:d,name:m,parentMap:n,unnormalized:!!b,url:k,originalName:p,isDefine:q,id:(d?d+"!"+m:m)+b}}function u(a){var b=a.id,
e);if(t(r,e)&&(!n||n.defineEmitComplete))"defined"===f&&b(r[e]);else if(n=s(a),n.error&&"error"===f)b(n.error);else n.on(f,b)}function w(a,f){var b=a.requireModules,e=!1;if(f)f(a);else if(z(b,function(f){if(f=m(q,f))f.error=a,f.events.error&&(e=!0,f.emit("error",a))}),!e)h.onError(a)}function x(){U.length&&(ja.apply(I,[I.length-1,0].concat(U)),U=[])}function y(a){delete q[a];delete W[a]}function G(a,f,b){var e=a.map.id;a.error?a.emit("error",a.error):(f[e]=!0,z(a.depMaps,function(e,c){var d=e.id, c=e(t,b);c||(c=t[b]=new l.Module(a));return c}function w(a,b,c){var h=a.id,k=e(t,h);if(!x(v,h)||k&&!k.defineEmitComplete)if(k=u(a),k.error&&"error"===b)c(k.error);else k.on(b,c);else"defined"===b&&c(v[h])}function A(a,b){var c=a.requireModules,h=!1;if(b)b(a);else if(y(c,function(b){if(b=e(t,b))b.error=a,b.events.error&&(h=!0,b.emit("error",a))}),!h)g.onError(a)}function B(){V.length&&(y(V,function(a){var b=a[0];"string"===typeof b&&(l.defQueueMap[b]=!0);G.push(a)}),V=[])}function C(a){delete t[a];
g=m(q,d);g&&(!a.depMatched[c]&&!b[d])&&(m(f,d)?(a.defineDep(c,r[d]),a.check()):G(g,f,b))}),b[e]=!0)}function E(){var a,f,b,e,n=(b=1E3*j.waitSeconds)&&k.startTime+b<(new Date).getTime(),c=[],i=[],g=!1,l=!0;if(!X){X=!0;H(W,function(b){a=b.map;f=a.id;if(b.enabled&&(a.isDefine||i.push(b),!b.error))if(!b.inited&&n)p(f)?g=e=!0:(c.push(f),d(f));else if(!b.inited&&(b.fetched&&a.isDefine)&&(g=!0,!a.prefix))return l=!1});if(n&&c.length)return b=B("timeout","Load timeout for modules: "+c,null,c),b.contextName= delete Z[a]}function J(a,b,c){var h=a.map.id;a.error?a.emit("error",a.error):(b[h]=!0,y(a.depMaps,function(h,f){var d=h.id,g=e(t,d);!g||a.depMatched[f]||c[d]||(e(b,d)?(a.defineDep(f,v[d]),a.check()):J(g,b,c))}),c[h]=!0)}function H(){var a,b,c=(a=1E3*p.waitSeconds)&&l.startTime+a<(new Date).getTime(),h=[],k=[],f=!1,g=!0;if(!aa){aa=!0;D(Z,function(a){var l=a.map,e=l.id;if(a.enabled&&(l.isDefine||k.push(a),!a.error))if(!a.inited&&c)m(e)?f=b=!0:(h.push(e),d(e));else if(!a.inited&&a.fetched&&l.isDefine&&
k.contextName,w(b);l&&z(i,function(a){G(a,{},{})});if((!n||e)&&g)if((A||ea)&&!Y)Y=setTimeout(function(){Y=0;E()},50);X=!1}}function F(a){t(r,a[0])||s(l(a[0],null,!0)).init(a[1],a[2])}function L(a){var a=a.currentTarget||a.srcElement,b=k.onScriptLoad;a.detachEvent&&!Z?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=k.onScriptError;(!a.detachEvent||Z)&&a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function M(){var a;for(x();I.length;){a= (f=!0,!l.prefix))return g=!1});if(c&&h.length)return a=F("timeout","Load timeout for modules: "+h,null,h),a.contextName=l.contextName,A(a);g&&y(k,function(a){J(a,{},{})});c&&!b||!f||!E&&!ja||ba||(ba=setTimeout(function(){ba=0;H()},50));aa=!1}}function I(a){x(v,a[0])||u(q(a[0],null,!0)).init(a[1],a[2])}function O(a){a=a.currentTarget||a.srcElement;var b=l.onScriptLoad;a.detachEvent&&!ca?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=l.onScriptError;a.detachEvent&&!ca||a.removeEventListener("error",
I.shift();if(null===a[0])return w(B("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));F(a)}}var X,$,k,P,Y,j={waitSeconds:7,baseUrl:"./",paths:{},pkgs:{},shim:{},config:{}},q={},W={},aa={},I=[],r={},V={},N=1,O=1;P={require:function(a){return a.require?a.require:a.require=k.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?a.exports:a.exports=r[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){var b= b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function P(){var a;for(B();G.length;){a=G.shift();if(null===a[0])return A(F("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));I(a)}l.defQueueMap={}}var aa,da,l,R,ba,p={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},t={},Z={},ea={},G=[],v={},W={},fa={},Q=1,T=1;R={require:function(a){return a.require?a.require:a.require=l.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?
m(j.pkgs,a.map.id);return(b?m(j.config,a.map.id+"/"+b.main):m(j.config,a.map.id))||{}},exports:r[a.map.id]}}};$=function(a){this.events=m(aa,a.id)||{};this.map=a;this.shim=m(j.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};$.prototype={init:function(a,b,c,e){e=e||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=v(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited= v[a.map.id]=a.exports:a.exports=v[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return e(p.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};da=function(a){this.events=e(ea,a.id)||{};this.map=a;this.shim=e(p.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};da.prototype={init:function(a,b,c,h){h=h||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&
!0;this.ignore=e.ignore;e.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;k.startTime=(new Date).getTime();var a=this.map;if(this.shim)k.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],v(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a= (c=z(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;this.ignore=h.ignore;h.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,--this.depCount,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;l.startTime=(new Date).getTime();var a=this.map;if(this.shim)l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],z(this,function(){return a.prefix?this.callPlugin():
this.map.url;V[a]||(V[a]=!0,k.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var e=this.exports,n=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(J(n)){if(this.events.error&&this.map.isDefine||h.onError!==ca)try{e=k.execCb(c,n,b,e)}catch(d){a=d}else e=k.execCb(c,n,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!== this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=this.map.url;W[a]||(W[a]=!0,l.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var h=this.exports,k=this.factory;if(!this.inited)x(l.defQueueMap,c)||this.fetch();else if(this.error)this.emit("error",this.error);else if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(K(k)){if(this.events.error&&this.map.isDefine||g.onError!==
this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else e=n;this.exports=e;if(this.map.isDefine&&!this.ignore&&(r[c]=e,h.onResourceLoad))h.onResourceLoad(k,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete= ha)try{h=l.execCb(c,k,b,h)}catch(d){a=d}else h=l.execCb(c,k,b,h);this.map.isDefine&&void 0===h&&((b=this.module)?h=b.exports:this.usingExports&&(h=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",A(this.error=a)}else h=k;this.exports=h;if(this.map.isDefine&&!this.ignore&&(v[c]=h,g.onResourceLoad)){var f=[];y(this.depMaps,function(a){f.push(a.normalizedMap||a)});g.onResourceLoad(l,this.map,f)}C(c);
!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=l(a.prefix);this.depMaps.push(d);u(d,"defined",v(this,function(e){var n,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,C=k.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,!0)})||""),e=l(a.prefix+"!"+d,this.map.parentMap),u(e,"defined",v(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})), this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}},callPlugin:function(){var a=this.map,b=a.id,d=q(a.prefix);this.depMaps.push(d);w(d,"defined",z(this,function(h){var k,f,d=e(fa,this.map.id),M=this.map.name,r=this.map.parentMap?this.map.parentMap.name:null,m=l.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(h.normalize&&(M=h.normalize(M,function(a){return c(a,r,!0)})||
d=m(q,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",v(this,function(a){this.emit("error",a)}));d.enable()}}else n=v(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),n.error=v(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];H(q,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),n.fromText=v(this,function(e,c){var d=a.name,g=l(d),i=Q;c&&(e=c);i&&(Q=!1);s(g);t(j.config,b)&&(j.config[d]=j.config[b]);try{h.exec(e)}catch(D){return w(B("fromtexteval", ""),f=q(a.prefix+"!"+M,this.map.parentMap),w(f,"defined",z(this,function(a){this.map.normalizedMap=f;this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),h=e(t,f.id)){this.depMaps.push(f);if(this.events.error)h.on("error",z(this,function(a){this.emit("error",a)}));h.enable()}}else d?(this.map.url=l.nameToUrl(d),this.load()):(k=z(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),k.error=z(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];D(t,function(a){0===
"fromText eval for "+b+" failed: "+D,D,[b]))}i&&(Q=!0);this.depMaps.push(g);k.completeLoad(d);C([d],n)}),e.load(a.name,C,n,j)}));k.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;z(this.depMaps,v(this,function(a,b){var c,e;if("string"===typeof a){a=l(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(P,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;u(a,"defined",v(this,function(a){this.defineDep(b, a.map.id.indexOf(b+"_unnormalized")&&C(a.map.id)});A(a)}),k.fromText=z(this,function(h,c){var d=a.name,f=q(d),M=S;c&&(h=c);M&&(S=!1);u(f);x(p.config,b)&&(p.config[d]=p.config[b]);try{g.exec(h)}catch(e){return A(F("fromtexteval","fromText eval for "+b+" failed: "+e,e,[b]))}M&&(S=!0);this.depMaps.push(f);l.completeLoad(d);m([d],k)}),h.load(a.name,m,k,p))}));l.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){Z[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,z(this,function(a,
a);this.check()}));this.errback&&u(a,"error",v(this,this.errback))}c=a.id;e=q[c];!t(P,c)&&(e&&!e.enabled)&&k.enable(a,this)}));H(this.pluginMaps,v(this,function(a){var b=m(q,a.id);b&&!b.enabled&&k.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){z(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};k={config:j,contextName:b,registry:q,defined:r,urlFetched:V,defQueue:I,Module:$,makeModuleMap:l, b){var c,h;if("string"===typeof a){a=q(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=e(R,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;w(a,"defined",z(this,function(a){this.undefed||(this.defineDep(b,a),this.check())}));this.errback?w(a,"error",z(this,this.errback)):this.events.error&&w(a,"error",z(this,function(a){this.emit("error",a)}))}c=a.id;h=t[c];x(R,c)||!h||h.enabled||l.enable(a,this)}));D(this.pluginMaps,z(this,function(a){var b=e(t,a.id);
nextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.pkgs,c=j.shim,e={paths:!0,config:!0,map:!0};H(a,function(a,b){e[b]?"map"===b?(j.map||(j.map={}),S(j[b],a,!0,!0)):S(j[b],a,!0):j[b]=a});a.shim&&(H(a.shim,function(a,b){K(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=k.makeShimExports(a);c[b]=a}),j.shim=c);a.packages&&(z(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name, b&&!b.enabled&&l.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};l={config:p,contextName:b,registry:t,defined:v,urlFetched:W,defQueue:G,defQueueMap:{},Module:da,makeModuleMap:q,nextTick:g.nextTick,onError:A,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");if("string"===typeof a.urlArgs){var b=
location:a.location||a.name,main:(a.main||"main").replace(ka,"").replace(fa,"")}}),j.pkgs=b);H(q,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=l(b))});if(a.deps||a.callback)k.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,f){function d(e,c,g){var i,j;f.enableBuildCallback&&(c&&J(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(J(c))return w(B("requireargs", a.urlArgs;a.urlArgs=function(a,c){return(-1===c.indexOf("?")?"?":"&")+b}}var c=p.shim,h={paths:!0,bundles:!0,config:!0,map:!0};D(a,function(a,b){h[b]?(p[b]||(p[b]={}),Y(p[b],a,!0,!0)):p[b]=a});a.bundles&&D(a.bundles,function(a,b){y(a,function(a){a!==b&&(fa[a]=b)})});a.shim&&(D(a.shim,function(a,b){L(a)&&(a={deps:a});!a.exports&&!a.init||a.exportsFn||(a.exportsFn=l.makeShimExports(a));c[b]=a}),p.shim=c);a.packages&&y(a.packages,function(a){var b;a="string"===typeof a?{name:a}:a;b=a.name;a.location&&
"Invalid require call"),g);if(a&&t(P,e))return P[e](q[a.id]);if(h.get)return h.get(k,e,a,d);i=l(e,a,!1,!0);i=i.id;return!t(r,i)?w(B("notloaded",'Module name "'+i+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[i]}M();k.nextTick(function(){M();j=s(l(null,a));j.skipMap=f.skipMap;j.init(e,c,g,{enabled:!0});E()});return d}f=f||{};S(d,{isBrowser:A,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==f&&(!("."===g||".."===g)||1<f))d=b.substring(f,b.length),b= (p.paths[b]=a.location);p.pkgs[b]=a.name+"/"+(a.main||"main").replace(na,"").replace(U,"")});D(t,function(a,b){a.inited||a.map.unnormalized||(a.map=q(b,null,!0))});(a.deps||a.callback)&&l.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ga,arguments));return b||a.exports&&ia(a.exports)}},makeRequire:function(a,n){function m(c,d,f){var e,r;n.enableBuildCallback&&d&&K(d)&&(d.__requireJsBuild=!0);if("string"===typeof c){if(K(d))return A(F("requireargs",
b.substring(0,f);return k.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return t(r,l(b,a,!1,!0).id)},specified:function(b){b=l(b,a,!1,!0).id;return t(r,b)||t(q,b)}});a||(d.undef=function(b){x();var c=l(b,a,!0),d=m(q,b);delete r[b];delete V[c.url];delete aa[b];d&&(d.events.defined&&(aa[b]=d.events),y(b))});return d},enable:function(a){m(q,a.id)&&s(a).enable()},completeLoad:function(a){var b,c,e=m(j.shim,a)||{},d=e.exports;for(x();I.length;){c=I.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]=== "Invalid require call"),f);if(a&&x(R,c))return R[c](t[a.id]);if(g.get)return g.get(l,c,a,m);e=q(c,a,!1,!0);e=e.id;return x(v,e)?v[e]:A(F("notloaded",'Module name "'+e+'" has not been loaded yet for context: '+b+(a?"":". Use require([])")))}P();l.nextTick(function(){P();r=u(q(null,a));r.skipMap=n.skipMap;r.init(c,d,f,{enabled:!0});H()});return m}n=n||{};Y(m,{isBrowser:E,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];-1!==f&&("."!==g&&".."!==g||1<f)&&(d=b.substring(f,b.length),b=b.substring(0,
a&&(b=!0);F(c)}c=m(q,a);if(!b&&!t(r,a)&&c&&!c.inited){if(j.enforceDefine&&(!d||!da(d)))return p(a)?void 0:w(B("nodefine","No define call for "+a,null,[a]));F([a,e.deps||[],e.exportsFn])}E()},nameToUrl:function(a,b,c){var d,g,l,i,k,p;if(h.jsExtRegExp.test(a))i=a+(b||"");else{d=j.paths;g=j.pkgs;i=a.split("/");for(k=i.length;0<k;k-=1)if(p=i.slice(0,k).join("/"),l=m(g,p),p=m(d,p)){K(p)&&(p=p[0]);i.splice(0,k,p);break}else if(l){a=a===l.name?l.location+"/"+l.main:l.location;i.splice(0,k,a);break}i=i.join("/"); f));return l.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return x(v,q(b,a,!1,!0).id)},specified:function(b){b=q(b,a,!1,!0).id;return x(v,b)||x(t,b)}});a||(m.undef=function(b){B();var c=q(b,a,!0),f=e(t,b);f.undefed=!0;d(b);delete v[b];delete W[c.url];delete ea[b];X(G,function(a,c){a[0]===b&&G.splice(c,1)});delete l.defQueueMap[b];f&&(f.events.defined&&(ea[b]=f.events),C(b))});return m},enable:function(a){e(t,a.id)&&u(a).enable()},completeLoad:function(a){var b,c,d=e(p.shim,a)||{},g=d.exports;
i+=b||(/\?/.test(i)||c?"":".js");i=("/"===i.charAt(0)||i.match(/^[\w\+\.\-]+:/)?"":j.baseUrl)+i}return j.urlArgs?i+((-1===i.indexOf("?")?"?":"&")+j.urlArgs):i},load:function(a,b){h.load(k,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||la.test((a.currentTarget||a.srcElement).readyState))R=null,a=L(a),k.completeLoad(a.id)},onScriptError:function(a){var b=L(a);if(!p(b.id))return w(B("scripterror","Script error for: "+b.id,a,[b.id]))}};k.require=k.makeRequire(); for(B();G.length;){c=G.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);I(c)}l.defQueueMap={};c=e(t,a);if(!b&&!x(v,a)&&c&&!c.inited)if(!p.enforceDefine||g&&ia(g))I([a,d.deps||[],d.exportsFn]);else return m(a)?void 0:A(F("nodefine","No define call for "+a,null,[a]));H()},nameToUrl:function(a,b,c){var d,k,f,m;(d=e(p.pkgs,a))&&(a=d);if(d=e(fa,a))return l.nameToUrl(d,b,c);if(g.jsExtRegExp.test(a))d=a+(b||"");else{d=p.paths;k=a.split("/");for(f=k.length;0<f;--f)if(m=k.slice(0,f).join("/"),
return k}var h,x,y,E,L,F,R,M,s,ga,ma=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,na=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,fa=/\.js$/,ka=/^\.\//;x=Object.prototype;var N=x.toString,ha=x.hasOwnProperty,ja=Array.prototype.splice,A=!!("undefined"!==typeof window&&navigator&&window.document),ea=!A&&"undefined"!==typeof importScripts,la=A&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,Z="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),G={},u={},U=[],Q= m=e(d,m)){L(m)&&(m=m[0]);k.splice(0,f,m);break}d=k.join("/");d+=b||(/^data\:|^blob\:|\?/.test(d)||c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":p.baseUrl)+d}return p.urlArgs&&!/^blob\:/.test(d)?d+p.urlArgs(a,d):d},load:function(a,b){g.load(l,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||oa.test((a.currentTarget||a.srcElement).readyState))N=null,a=O(a),l.completeLoad(a.id)},onScriptError:function(a){var b=O(a);if(!m(b.id)){var c=[];
!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(J(requirejs))return;u=requirejs;requirejs=void 0}"undefined"!==typeof require&&!J(require)&&(u=require,require=void 0);h=requirejs=function(b,c,d,p){var g,l="_";!K(b)&&"string"!==typeof b&&(g=b,K(c)?(b=c,c=d,d=p):b=[]);g&&g.context&&(l=g.context);(p=m(G,l))||(p=G[l]=h.s.newContext(l));g&&p.configure(g);return p.require(b,c,d)};h.config=function(b){return h(b)};h.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b, D(t,function(a,d){0!==d.indexOf("_@r")&&y(a.depMaps,function(a){if(a.id===b.id)return c.push(d),!0})});return A(F("scripterror",'Script error for "'+b.id+(c.length?'", needed by: '+c.join(", "):'"'),a,[b.id]))}}};l.require=l.makeRequire();return l}function pa(){if(N&&"interactive"===N.readyState)return N;X(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return N=b});return N}var g,B,C,H,O,I,N,P,u,T,qa=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ra=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
4)}:function(b){b()};require||(require=h);h.version="2.1.6";h.jsExtRegExp=/^\/|:|\?|\.js$/;h.isBrowser=A;x=h.s={contexts:G,newContext:ia};h({});z(["toUrl","undef","defined","specified"],function(b){h[b]=function(){var c=G._;return c.require[b].apply(c,arguments)}});if(A&&(y=x.head=document.getElementsByTagName("head")[0],E=document.getElementsByTagName("base")[0]))y=x.head=E.parentNode;h.onError=ca;h.load=function(b,c,d){var h=b&&b.config||{},g;if(A)return g=h.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml", U=/\.js$/,na=/^\.\//;B=Object.prototype;var Q=B.toString,la=B.hasOwnProperty,E=!("undefined"===typeof window||"undefined"===typeof navigator||!window.document),ja=!E&&"undefined"!==typeof importScripts,oa=E&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,ca="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),J={},w={},V=[],S=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(K(requirejs))return;w=requirejs;requirejs=void 0}"undefined"===typeof require||
"html:script"):document.createElement("script"),g.type=h.scriptType||"text/javascript",g.charset="utf-8",g.async=!0,g.setAttribute("data-requirecontext",b.contextName),g.setAttribute("data-requiremodule",c),g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf("[native code"))&&!Z?(Q=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)):(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error",b.onScriptError,!1)),g.src=d,M=g,E?y.insertBefore(g,E):y.appendChild(g), K(require)||(w=require,require=void 0);g=requirejs=function(b,c,d,m){var r,q="_";L(b)||"string"===typeof b||(r=b,L(c)?(b=c,c=d,d=m):b=[]);r&&r.context&&(q=r.context);(m=e(J,q))||(m=J[q]=g.s.newContext(q));r&&m.configure(r);return m.require(b,c,d)};g.config=function(b){return g(b)};g.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=g);g.version="2.2.0";g.jsExtRegExp=/^\/|:|\?|\.js$/;g.isBrowser=E;B=g.s={contexts:J,newContext:ma};g({});y(["toUrl",
M=null,g;if(ea)try{importScripts(d),b.completeLoad(c)}catch(l){b.onError(B("importscripts","importScripts failed for "+c+" at "+d,l,[c]))}};A&&O(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(L=b.getAttribute("data-main"))return s=L,u.baseUrl||(F=s.split("/"),s=F.pop(),ga=F.length?F.join("/")+"/":"./",u.baseUrl=ga),s=s.replace(fa,""),h.jsExtRegExp.test(s)&&(s=L),u.deps=u.deps?u.deps.concat(s):[s],!0});define=function(b,c,d){var h,g;"string"!==typeof b&&(d=c,c=b,b=null); "undef","defined","specified"],function(b){g[b]=function(){var c=J._;return c.require[b].apply(c,arguments)}});E&&(C=B.head=document.getElementsByTagName("head")[0],H=document.getElementsByTagName("base")[0])&&(C=B.head=H.parentNode);g.onError=ha;g.createNode=function(b,c,d){c=b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};g.load=function(b,c,d){var m=b&&b.config||
K(c)||(d=c,c=null);!c&&J(d)&&(c=[],d.length&&(d.toString().replace(ma,"").replace(na,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(Q){if(!(h=M))R&&"interactive"===R.readyState||O(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return R=b}),h=R;h&&(b||(b=h.getAttribute("data-requiremodule")),g=G[h.getAttribute("data-requirecontext")])}(g?g.defQueue:U).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)}; {},e;if(E){e=g.createNode(m,c,d);e.setAttribute("data-requirecontext",b.contextName);e.setAttribute("data-requiremodule",c);!e.attachEvent||e.attachEvent.toString&&0>e.attachEvent.toString().indexOf("[native code")||ca?(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)):(S=!0,e.attachEvent("onreadystatechange",b.onScriptLoad));e.src=d;if(m.onNodeCreated)m.onNodeCreated(e,m,c,d);P=e;H?C.insertBefore(e,H):C.appendChild(e);P=null;return e}if(ja)try{setTimeout(function(){},
h(u)}})(this); 0),importScripts(d),b.completeLoad(c)}catch(q){b.onError(F("importscripts","importScripts failed for "+c+" at "+d,q,[c]))}};E&&!w.skipDataMain&&X(document.getElementsByTagName("script"),function(b){C||(C=b.parentNode);if(O=b.getAttribute("data-main"))return u=O,w.baseUrl||-1!==u.indexOf("!")||(I=u.split("/"),u=I.pop(),T=I.length?I.join("/")+"/":"./",w.baseUrl=T),u=u.replace(U,""),g.jsExtRegExp.test(u)&&(u=O),w.deps=w.deps?w.deps.concat(u):[u],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&
(d=c,c=b,b=null);L(c)||(d=c,c=null);!c&&K(d)&&(c=[],d.length&&(d.toString().replace(qa,ka).replace(ra,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));S&&(e=P||pa())&&(b||(b=e.getAttribute("data-requiremodule")),g=J[e.getAttribute("data-requirecontext")]);g?(g.defQueue.push([b,c,d]),g.defQueueMap[b]=!0):V.push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(w)}})(this);

@ -1,188 +1,200 @@
/*! /*!
* Tinycon - A small library for manipulating the Favicon * Tinycon - A small library for manipulating the Favicon
* Tom Moor, http://tommoor.com * Tom Moor, http://tommoor.com
* Copyright (c) 2012 Tom Moor * Copyright (c) 2015 Tom Moor
* MIT Licensed * @license MIT Licensed
* @version 0.6.1 * @version 0.6.4
*/ */
(function(){ (function(){
var Tinycon = {}; var Tinycon = {};
var currentFavicon = null; var currentFavicon = null;
var originalFavicon = null; var originalFavicon = null;
var originalTitle = document.title; var faviconImage = null;
var faviconImage = null; var canvas = null;
var canvas = null; var options = {};
var options = {}; var r = window.devicePixelRatio || 1;
var r = window.devicePixelRatio || 1; var size = 16 * r;
var size = 16 * r; var defaults = {
var defaults = { width: 7,
width: 7, height: 9,
height: 9, font: 10 * r + 'px arial',
font: 9 * r + 'px arial', color: '#ffffff',
colour: '#ffffff', background: '#F03D25',
background: '#F03D25', fallback: true,
fallback: true, crossOrigin: true,
crossOrigin: true, abbreviate: true
abbreviate: true };
};
var ua = (function () {
var ua = (function () { var agent = navigator.userAgent.toLowerCase();
var agent = navigator.userAgent.toLowerCase(); // New function has access to 'agent' via closure
// New function has access to 'agent' via closure return function (browser) {
return function (browser) { return agent.indexOf(browser) !== -1;
return agent.indexOf(browser) !== -1; };
}; }());
}());
var browser = {
var browser = { ie: ua('trident'),
ie: ua('msie'), chrome: ua('chrome'),
chrome: ua('chrome'), webkit: ua('chrome') || ua('safari'),
webkit: ua('chrome') || ua('safari'), safari: ua('safari') && !ua('chrome'),
safari: ua('safari') && !ua('chrome'), mozilla: ua('mozilla') && !ua('chrome') && !ua('safari')
mozilla: ua('mozilla') && !ua('chrome') && !ua('safari') };
};
// private methods
// private methods var getFaviconTag = function(){
var getFaviconTag = function(){
var links = document.getElementsByTagName('link');
var links = document.getElementsByTagName('link');
for(var i=0, len=links.length; i < len; i++) {
for(var i=0, len=links.length; i < len; i++) { if ((links[i].getAttribute('rel') || '').match(/\bicon\b/i)) {
if ((links[i].getAttribute('rel') || '').match(/\bicon\b/)) { return links[i];
return links[i]; }
} }
}
return false;
return false; };
};
var removeFaviconTag = function(){
var removeFaviconTag = function(){
var links = document.getElementsByTagName('link');
var links = document.getElementsByTagName('link'); var head = document.getElementsByTagName('head')[0];
var head = document.getElementsByTagName('head')[0];
for(var i=0, len=links.length; i < len; i++) {
for(var i=0, len=links.length; i < len; i++) { var exists = (typeof(links[i]) !== 'undefined');
var exists = (typeof(links[i]) !== 'undefined'); if (exists && (links[i].getAttribute('rel') || '').match(/\bicon\b/i)) {
if (exists && (links[i].getAttribute('rel') || '').match(/\bicon\b/)) { head.removeChild(links[i]);
head.removeChild(links[i]); }
} }
} };
};
var getCurrentFavicon = function(){
var getCurrentFavicon = function(){
if (!originalFavicon || !currentFavicon) {
if (!originalFavicon || !currentFavicon) { var tag = getFaviconTag();
var tag = getFaviconTag(); currentFavicon = tag ? tag.getAttribute('href') : '/favicon.ico';
originalFavicon = currentFavicon = tag ? tag.getAttribute('href') : '/favicon.ico'; if (!originalFavicon) {
} originalFavicon = currentFavicon;
}
return currentFavicon; }
};
return currentFavicon;
var getCanvas = function (){ };
if (!canvas) { var getCanvas = function (){
canvas = document.createElement("canvas");
canvas.width = size; if (!canvas) {
canvas.height = size; canvas = document.createElement("canvas");
} canvas.width = size;
canvas.height = size;
return canvas; }
};
return canvas;
var setFaviconTag = function(url){ };
removeFaviconTag();
var setFaviconTag = function(url){
var link = document.createElement('link'); if(url){
link.type = 'image/x-icon'; removeFaviconTag();
link.rel = 'icon';
link.href = url; var link = document.createElement('link');
document.getElementsByTagName('head')[0].appendChild(link); link.type = 'image/x-icon';
}; link.rel = 'icon';
link.href = url;
var log = function(message){ document.getElementsByTagName('head')[0].appendChild(link);
if (window.console) window.console.log(message); }
}; };
var drawFavicon = function(label, colour) { var log = function(message){
if (window.console) window.console.log(message);
// fallback to updating the browser title if unsupported };
if (!getCanvas().getContext || browser.ie || browser.safari || options.fallback === 'force') {
return updateTitle(label); var drawFavicon = function(label, color) {
}
// fallback to updating the browser title if unsupported
var context = getCanvas().getContext("2d"); if (!getCanvas().getContext || browser.ie || browser.safari || options.fallback === 'force') {
var colour = colour || '#000000'; return updateTitle(label);
var src = getCurrentFavicon(); }
faviconImage = document.createElement('img'); var context = getCanvas().getContext("2d");
faviconImage.onload = function() { var color = color || '#000000';
var src = getCurrentFavicon();
// clear canvas
context.clearRect(0, 0, size, size); faviconImage = document.createElement('img');
faviconImage.onload = function() {
// draw the favicon
context.drawImage(faviconImage, 0, 0, faviconImage.width, faviconImage.height, 0, 0, size, size); // clear canvas
context.clearRect(0, 0, size, size);
// draw the favicon
context.drawImage(faviconImage, 0, 0, faviconImage.width, faviconImage.height, 0, 0, size, size);
// draw bubble over the top
if ((label + '').length > 0) drawBubble(context, label, color);
// draw bubble over the top // refresh tag in page
if ((label + '').length > 0) drawBubble(context, label, colour); refreshFavicon();
};
// refresh tag in page // allow cross origin resource requests if the image is not a data:uri
refreshFavicon(); // as detailed here: https://github.com/mrdoob/three.js/issues/1305
}; if (!src.match(/^data/) && options.crossOrigin) {
faviconImage.crossOrigin = 'anonymous';
}
// allow cross origin resource requests if the image is not a data:uri faviconImage.src = src;
// as detailed here: https://github.com/mrdoob/three.js/issues/1305 };
if (!src.match(/^data/) && options.crossOrigin) {
faviconImage.crossOrigin = 'anonymous';
}
faviconImage.src = src; var updateTitle = function(label) {
};
var updateTitle = function(label) { if (options.fallback) {
// Grab the current title that we can prefix with the label
var originalTitle = document.title;
if (options.fallback) { // Strip out the old label if there is one
if ((label + '').length > 0) { if (originalTitle[0] === '(') {
document.title = '(' + label + ') ' + originalTitle; originalTitle = originalTitle.slice(originalTitle.indexOf(' '));
} else { }
document.title = originalTitle;
}
}
};
var drawBubble = function(context, label, colour) { if ((label + '').length > 0) {
document.title = '(' + label + ') ' + originalTitle;
} else {
document.title = originalTitle;
}
}
};
// automatic abbreviation for long (>2 digits) numbers var drawBubble = function(context, label, color) {
if (typeof label == 'number' && label > 99 && options.abbreviate) {
label = abbreviateNumber(label);
}
// bubble needs to be larger for double digits // automatic abbreviation for long (>2 digits) numbers
var len = (label + '').length-1; if (typeof label == 'number' && label > 99 && options.abbreviate) {
label = abbreviateNumber(label);
}
var width = options.width * r + (6 * r * len), // bubble needs to be larger for double digits
height = options.height * r; var len = (label + '').length-1;
var top = size - height, var width = options.width * r + (6 * r * len),
height = options.height * r;
var top = size - height,
left = size - width - r, left = size - width - r,
bottom = 16 * r, bottom = 16 * r,
right = 16 * r, right = 16 * r,
radius = 2 * r; radius = 2 * r;
// webkit seems to render fonts lighter than firefox // webkit seems to render fonts lighter than firefox
context.font = (browser.webkit ? 'bold ' : '') + options.font; context.font = (browser.webkit ? 'bold ' : '') + options.font;
context.fillStyle = options.background; context.fillStyle = options.background;
context.strokeStyle = options.background; context.strokeStyle = options.background;
context.lineWidth = r; context.lineWidth = r;
// bubble // bubble
context.beginPath(); context.beginPath();
context.moveTo(left + radius, top); context.moveTo(left + radius, top);
context.quadraticCurveTo(left, top, left, top + radius); context.quadraticCurveTo(left, top, left, top + radius);
context.lineTo(left, bottom - radius); context.lineTo(left, bottom - radius);
context.quadraticCurveTo(left, bottom, left + radius, bottom); context.quadraticCurveTo(left, bottom, left + radius, bottom);
context.lineTo(right - radius, bottom); context.lineTo(right - radius, bottom);
context.quadraticCurveTo(right, bottom, right, bottom - radius); context.quadraticCurveTo(right, bottom, right, bottom - radius);
@ -191,77 +203,85 @@
context.closePath(); context.closePath();
context.fill(); context.fill();
// bottom shadow // bottom shadow
context.beginPath(); context.beginPath();
context.strokeStyle = "rgba(0,0,0,0.3)"; context.strokeStyle = "rgba(0,0,0,0.3)";
context.moveTo(left + radius / 2.0, bottom); context.moveTo(left + radius / 2.0, bottom);
context.lineTo(right - radius / 2.0, bottom); context.lineTo(right - radius / 2.0, bottom);
context.stroke(); context.stroke();
// label // label
context.fillStyle = options.colour; context.fillStyle = options.color;
context.textAlign = "right"; context.textAlign = "right";
context.textBaseline = "top"; context.textBaseline = "top";
// unfortunately webkit/mozilla are a pixel different in text positioning // unfortunately webkit/mozilla are a pixel different in text positioning
context.fillText(label, r === 2 ? 29 : 15, browser.mozilla ? 7*r : 6*r); context.fillText(label, r === 2 ? 29 : 15, browser.mozilla ? 7*r : 6*r);
}; };
var refreshFavicon = function(){ var refreshFavicon = function(){
// check support // check support
if (!getCanvas().getContext) return; if (!getCanvas().getContext) return;
setFaviconTag(getCanvas().toDataURL()); setFaviconTag(getCanvas().toDataURL());
}; };
var abbreviateNumber = function(label) { var abbreviateNumber = function(label) {
var metricPrefixes = [ var metricPrefixes = [
['G', 1000000000], ['G', 1000000000],
['M', 1000000], ['M', 1000000],
['k', 1000] ['k', 1000]
]; ];
for(var i = 0; i < metricPrefixes.length; ++i) { for(var i = 0; i < metricPrefixes.length; ++i) {
if (label >= metricPrefixes[i][1]) { if (label >= metricPrefixes[i][1]) {
label = round(label / metricPrefixes[i][1]) + metricPrefixes[i][0]; label = round(label / metricPrefixes[i][1]) + metricPrefixes[i][0];
break; break;
} }
} }
return label; return label;
}; };
var round = function (value, precision) { var round = function (value, precision) {
var number = new Number(value); var number = new Number(value);
return number.toFixed(precision); return number.toFixed(precision);
}; };
// public methods // public methods
Tinycon.setOptions = function(custom){ Tinycon.setOptions = function(custom){
options = {}; options = {};
for(var key in defaults){ // account for deprecated UK English spelling
options[key] = custom.hasOwnProperty(key) ? custom[key] : defaults[key]; if (custom.colour) {
} custom.color = custom.colour;
return this; }
};
for(var key in defaults){
Tinycon.setImage = function(url){ options[key] = custom.hasOwnProperty(key) ? custom[key] : defaults[key];
currentFavicon = url; }
refreshFavicon(); return this;
return this; };
};
Tinycon.setImage = function(url){
Tinycon.setBubble = function(label, colour) { currentFavicon = url;
label = label || ''; refreshFavicon();
drawFavicon(label, colour); return this;
return this; };
};
Tinycon.setBubble = function(label, color) {
Tinycon.reset = function(){ label = label || '';
setFaviconTag(originalFavicon); drawFavicon(label, color);
}; return this;
};
Tinycon.setOptions(defaults);
window.Tinycon = Tinycon; Tinycon.reset = function(){
})(); currentFavicon = originalFavicon;
setFaviconTag(originalFavicon);
};
Tinycon.setOptions(defaults);
window.Tinycon = Tinycon;
})();

Loading…
Cancel
Save