- // ==UserScript==
- // @name The West - Color tchat
- // @namespace TomRobert
- // @author Falc0n.RG (updated by Tom Robert)
- // @description Adds new features to the chat of The West
- // @include https://*.the-west.*/game.php*
- // @exclude https://classic.the-west.net*
- // @version 0.3.0.5
- //
- // @history 20/03/2019 : 0.3.0.5 bugfix
- // @history 20/03/2019 : 0.3.0.4 bugfixes
- // @history 24/06/2018 : 0.3.0.3 add greek translation (Timemod Herkumo)
- // @history 25/11/2017 : 0.3.0.2 bugfix, fixed flip for non-BMP chars, all game smiley variants recognized
- // @history 13/04/2017 : 0.3.0.1 fix button and lags
- // @history 06/04/2017 : 0.3.0 many bugfixes and improvements, better updater
- // @history 21/10/2016 : 0.2.9.8 "dayofdead!" and "independence!" icon added
- // @history 06/09/2016 : 0.2.9.7 "octoberfest!" icon added, flip mode improved, new forum links and choose language in script window, some bb code removed
- // @history 26/02/2016 : 0.2.9.6 "hearts!" icon added, new jscolor version
- // @history 30/03/2015 : 0.2.9.5 "easter!" icon added
- // @history 28/03/2015 : 0.2.9.4 update function fixed
- // @history 14/03/2015 : 0.2.9.3 little bugfix
- // @history 08/03/2015 : 0.2.9.2 add polish translation (TeeNOmore127), beta really fixed
- // @history 26/02/2015 : 0.2.9.1 more emojis
- // @history 25/02/2015 : 0.2.9 Emoji Update!
- // @history 11/02/2015 : 0.2.8.2 fix for the west beta
- // @history 14/01/2015 : 0.2.8.1 TheWestApi improvement
- // @history 07/01/2015 : 0.2.8 active for the west 2.16+, correct german translation (Tom Robert)
- // @history 19/05/2014 : 0.2.7.3 active for the west 2.09, bug fix in selectbox
- // @history 22/01/2014 : 0.2.7.2 active for the west 2.08
- // @history 13/11/2013 : 0.2.7.1 active for the west 2.07
- // @history 17/06/2013 : 0.2.7 active for the west 2.06
- // @history 15/06/2013 : 0.2.7 add flip mode [hiden]
- // @history 31/06/2013 : 0.2.7 add default/custom color for each tchat, save color for each tchat
- // @history 27/06/2013 : 0.2.6.3 active for the west 2.05
- // @history 18/06/2013 : 0.2.6.2 Bug fix smiley in first with one color tag
- // @history 17/06/2013 : 0.2.6.1 Bug fix for firefox
- // @history 17/06/2013 : 0.2.6 Add multi chat windows support, Disabled format for bdf
- // @history 15/06/2013 : 0.2.5.2 fix bold with one color tag
- // @history 25/05/2013 : 0.2.5.1 fix linear-gradiant to opera
- // @history 13/05/2013 : 0.2.5 add support to the west 2.042 (beta)
- // @history 13/02/2013 : 0.2.4.2 Bugfix on colorTxt.Window with Firefox
- // @history 13/02/2013 : 0.2.4.1 Bugfix inserRule with Firefox
- // @history 13/02/2013 : 0.2.4 active for the west 2.03
- // @history 09/02/2013 : 0.2.3 [Only Beta2.03 version] rewrite for the west v2.03
- // @history 23/11/2012 : 0.2.2 bugfix: update, rewrite and optimize the script
- // @history 25/10/2012 : 0.2.1 finish text input and load/save system
- // @history 23/10/2012 : 0.2.1 add more preset color (light red, pink, green), add load/save system (not full), add text input custom color
- // @history 22/10/2012 : 0.2.1 bugfix leave chat
- // @history 18/10/2012 : 0.2.0 active for the west 2.0
- // @history 14/10/2012 : 0.1.9 [Only Beta2.0 version] add more smilies
- // @history 06/10/2012 : 0.1.9 [Only Beta2.0 version] add selectbox smilies
- // @history 05/10/2012 : 0.1.9 [Only Beta2.0 version] Add item tag
- // @history 15/09/2012 : 0.1.9 [Only Beta2.0 version] rewrite to the west v2.0 [many function disabled]
- // @history 15/09/2012 : 0.1.8.1 adapt the system update for 2.0
- // @history 15/09/2012 : 0.1.8 disabled the script in 2.0 and beta
- // @history 11/05/2012 : 0.1.7 add bdf format
- // @history 11/05/2012 : 0.1.6 add custom color save, add bdf color change, add bolt choice, change smiley insert [bug with opera][chrome and firefox good]
- // @history 04/05/2012 : 0.1.6 change prompt for tell name select
- // @history 04/05/2012 : 0.1.5 add update system for chrome and firefox, add opera support
- // @history 04/05/2012 : 0.1.4b debug Multi Language system (sorry for the missing)
- // @history 30/04/2012 : 0.1.4 add Multi Language system
- // @history 30/04/2012 : 0.1.3 add preset color: '505606607709809', change CBImg, add smiley detect and activate smiley Div (and change this), Bug Fix command color, change all <a> to <div>
- // @history 29/04/2012 : 0.1.2 Bug Fix
- // @history 29/04/2012 : 0.1.1 add color tchat window
- // @history 27/04/2012 : 0.1.0 First Public Version
- // @grant none
- /*********************************************************************************************************************
- * jscolor, JavaScript Color Picker
- *
- * @version 1.4.5
- * @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html
- * @author Jan Odvarko, http://odvarko.cz
- * @created 2008-06-15
- * @updated 2015-09-19
- * @link http://jscolor.com
- **********************************************************************************************************************/
- // ==/UserScript==
- // translation:Falc0n.RG(French),pepe100(Spanish),Tom Robert(German&English),?(Portuguese),TeeNOmore127(Polish)
- (function (e) {
- var t = document;
- var n = document.createElement('script');
- n.type = 'application/javascript';
- n.textContent = '(' + e + ')();';
- (t.body || t.head || t.documentElement).appendChild(n);
- n.parentNode.removeChild(n);
- })(function () {
- CT = {
- version: '0.3.0.5',
- name: 'Color tchat',
- author: 'Falc0n.RG (updated by Tom Robert)',
- minGame: '2.0',
- maxGame: Game.version.toString(),
- website: 'https://greatest.deepsurf.us/scripts/7355',
- DATA: {},
- Window: {},
- Chat: {},
- Tools: {},
- langs: {
- en: {
- language: 'English',
- save: 'Save',
- saveMessage: 'Successfully saved',
- chooseLang: 'Choose language',
- contact: 'Contact',
- ColorWindowTitle: 'Color tchat setting',
- ColorWindowPreviewTxt: '*Click on the letters to change color',
- ColorWindowOkBtn: 'Apply',
- ColorWindowToDefaultBtn: 'Set to default',
- ColorWindowThisTchatBtn: 'Set to this',
- ColorWindowDefaultText: 'Select the tchat for reset to default: ',
- ColorWindowBold: 'Bold',
- ColorWindowCaps: 'Capitalized',
- ColorWindowFlip: 'Flip',
- ColorBtnTitle: '',
- ColorLoadListName: [
- 'No color',
- 'Enter a color code',
- 'red',
- 'brown',
- 'purple',
- 'blue',
- 'green',
- 'pink',
- 'magenta',
- 'violet gradient',
- 'degraded dark blue',
- 'green gradient',
- 'degraded red',
- 'blue gradient light',
- 'degraded pink',
- 'light green gradient',
- 'degraded pink',
- 'red gradient light'
- ],
- ColorLoadTitle: 'Click to load another color code<br>The current color code is: ',
- ColorSaveEmpty: '[empty]',
- CustomReady: 'Valid Code',
- CustomNotReady: 'Invalid Code',
- },
- fr: {
- language: 'French (français)',
- save: 'Sauvegarder',
- saveMessage: 'Enregistrer avec succès',
- chooseLang: 'Choisissez la langue',
- contact: 'Contact',
- ColorWindowTitle: 'Configurer Color tchat',
- ColorWindowPreviewTxt: '*Clickez sur la lettre à changer de couleur',
- ColorWindowOkBtn: 'Appliquer',
- ColorWindowToDefaultBtn: 'Par défaut',
- ColorWindowThisTchatBtn: 'Pour se tchat',
- ColorWindowDefaultText: 'Sélectionnez les tchat à Remettre par défaut:',
- ColorWindowBold: 'En gras',
- ColorWindowCaps: 'En majuscule',
- ColorWindowFlip: 'Flip',
- ColorBtnTitle: '',
- ColorLoadListName: [
- 'Sans couleur',
- 'Entrer des couleurs',
- 'rouge',
- 'marron',
- 'violet',
- 'bleu',
- 'vert',
- 'rose',
- 'magenta',
- 'dégradé violet',
- 'dégradé bleu foncé',
- 'dégradé vert',
- 'dégradé rouge',
- 'dégradé bleu clair',
- 'dégradé rose',
- 'dégradé vert clair',
- 'dégradé rose clair',
- 'dégradé rouge clair'
- ],
- ColorLoadTitle: 'Clickez pour charger un autre code couleur<br>Le code couleur actuel est: ',
- ColorSaveEmpty: '[vide]',
- CustomReady: 'Code valide',
- CustomNotReady: 'Non valide',
- },
- es: {
- language: 'Spanish (español)',
- save: 'Guardar',
- saveMessage: 'Guardar correctamente',
- chooseLang: 'Elige lengua',
- contact: 'Contacto',
- ColorWindowTitle: 'Configurar Color tchat',
- ColorWindowPreviewTxt: '*Haga clic en la carta de un cambio de color',
- ColorWindowOkBtn: 'Aplicar',
- ColorWindowToDefaultBtn: 'Color por defecto',
- ColorWindowThisTchatBtn: 'Elegir este color',
- ColorWindowDefaultText: 'Seleccione la tchat para restablecer a los valores predeterminados',
- ColorWindowBold: 'En negrita',
- ColorWindowCaps: 'Capitalizado',
- ColorWindowFlip: 'Flip',
- ColorBtnTitle: '',
- ColorLoadListName: [
- 'No hay color',
- 'Introduzca un código de color',
- 'rojo',
- 'marrón',
- 'morado',
- 'azul',
- 'verde',
- 'rosa',
- 'magenta',
- 'gradiente violeta',
- 'degradado rosa',
- 'degradado azul marino',
- 'gradient',
- 'rojo degradado',
- 'luz azul degradado',
- 'gradiente de luz verde',
- 'rosa degradado',
- 'luz pendiente roja'
- ],
- ColorLoadTitle: 'Haga clic para cargar otro código de colores<br>El código de color actual es: ',
- ColorSaveEmpty: '[vacío]',
- CustomReady: 'Código válido',
- CustomNotReady: 'No válido',
- },
- de: {
- language: 'German (Deutsch)',
- save: 'Speichern',
- saveMessage: 'Speichern erfolgreich',
- chooseLang: 'Sprache ändern',
- contact: 'Kontakt',
- ColorWindowTitle: 'Color tchat Einstellung',
- ColorWindowPreviewTxt: '*Klicke auf diese Buchstaben um die aktuell im oberen Feld gewählte Farbe reinzumischen',
- ColorWindowOkBtn: 'Übernehmen',
- ColorWindowToDefaultBtn: 'Zurücksetzen',
- ColorWindowThisTchatBtn: 'Einstellung speichern',
- ColorWindowDefaultText: 'Chaträume auf Standard setzen:',
- ColorWindowBold: 'Fett',
- ColorWindowCaps: 'CAPS LOCK',
- ColorWindowFlip: 'Flip',
- ColorBtnTitle: '',
- ColorLoadListName: [
- 'Keine Farbe',
- 'Eigener Farbcode',
- 'rot',
- 'braun',
- 'violett',
- 'blau',
- 'grün',
- 'pink',
- 'magenta',
- 'violett wechselnd',
- 'blau wechselnd',
- 'grün wechselnd',
- 'rot wechselnd',
- 'hellblau wechselnd',
- 'pink wechselnd',
- 'hellgrün wechselnd',
- 'pink wechselnd',
- 'hellrot wechselnd'
- ],
- ColorLoadTitle: 'Klicke um weitere Farben auszuwählen<br>Aktueller Farbcode: ',
- ColorSaveEmpty: '[leer]',
- CustomReady: 'Code ok',
- CustomNotReady: 'Ungültig',
- },
- pt: {
- language: 'Portuguese (português)',
- save: 'Salvar',
- saveMessage: 'Economize com sucesso',
- chooseLang: 'Escolhe idioma',
- contact: 'Contato',
- ColorWindowTitle: 'Set Color tchat',
- ColorWindowPreviewTxt: '*Clique na letra de uma mudança de cor',
- ColorWindowOkBtn: 'Aplicar',
- ColorWindowToDefaultBtn: 'Definido como padrão',
- ColorWindowThisTchatBtn: 'Definido para este',
- ColorWindowDefaultText: 'Selecione o tchat para repor as predefinições: ',
- ColorWindowBold: 'Em negrito',
- ColorWindowCaps: 'Capitalizados',
- ColorWindowFlip: 'Flip',
- ColorBtnTitle: '',
- ColorLoadListName: [
- 'Incolor',
- 'Insira um código de cor',
- 'vermelho',
- 'marrom',
- 'roxo',
- 'azul',
- 'verde',
- 'cor de rosa',
- 'magenta',
- 'gradiente violeta',
- 'gradiente azul escuro',
- 'gradiente verde',
- 'gradiente vermelho',
- 'gradiente de luz azul',
- 'Pink Gradient',
- 'gradiente luz verde',
- 'rosa Gradiente',
- 'gradiente claro vermelho'
- ],
- ColorLoadTitle: 'Clique para carregar outro código de cor<br>O código de cores atual é: ',
- ColorSaveEmpty: '[vazio]',
- CustomReady: 'Código válido',
- CustomNotReady: 'Inválido',
- },
- pl: {
- language: 'Polish (polski)',
- save: 'Zapisz',
- saveMessage: 'Zapisz powodzeniem',
- chooseLang: 'Wybierz język',
- contact: 'Kontakt',
- ColorWindowTitle: 'Ustawienia Koloru Tchat',
- ColorWindowPreviewTxt: '*Kliknij na literę, aby zmienić kolor',
- ColorWindowOkBtn: 'Zastosuj',
- ColorWindowToDefaultBtn: 'Ustaw na domyślny',
- ColorWindowThisTchatBtn: 'Ustaw na ten',
- ColorWindowDefaultText: 'Wybierz tchat, który ma być domyślny: ',
- ColorWindowBold: 'Grubość',
- ColorWindowCaps: 'Wielkie litery',
- ColorWindowFlip: 'Flip',
- ColorBtnTitle: '',
- ColorLoadListName: [
- 'Bez koloru',
- 'Wprowadź kod koloru',
- 'Czerwony',
- 'Brązowy',
- 'Fioletowy',
- 'Niebieski',
- 'Zielony',
- 'Różowy',
- 'Purpurowy',
- 'Fioletowo gradientowy',
- 'Zwietrzały ciemny niebieski',
- 'Zielony gradient',
- 'Zwietrzały czerwony',
- 'Jasnoniebieski gradient',
- 'Zwietrzały ciemny różowy',
- 'Jasnozielony gradient',
- 'Zwietrzały różowy',
- 'Jasnoczerwony gradient'
- ],
- ColorLoadTitle: 'Kliknij tutaj, aby załadować inny kod koloru<br>Twój obecny kod koloru jest: ',
- ColorSaveEmpty: '[pusty]',
- CustomReady: 'Prawidłowy Kod',
- CustomNotReady: 'Zły Kod',
- },
- el: {
- language: 'Greek (ελληνικά)',
- save: 'Αποθήκευση',
- saveMessage: 'Αποθηκεύτηκε με επιτυχία',
- chooseLang: 'Επιλογή γλώσσας',
- contact: 'Επικοινωνία',
- ColorWindowTitle: 'Ρυθμίσεις',
- ColorWindowPreviewTxt: '*Κάντε κλικ στα γράμματα για να αλλάξετε χρώμα',
- ColorWindowOkBtn: 'Εφαρμογή',
- ColorWindowToDefaultBtn: 'Προεπιλογή',
- ColorWindowThisTchatBtn: 'Ορίστε σε αυτό',
- ColorWindowDefaultText: 'Select the tchat for reset to default: ',
- ColorWindowBold: 'Έντονα',
- ColorWindowCaps: 'Κεφαλαία',
- ColorWindowFlip: 'Ανάποδα',
- ColorBtnTitle: '',
- ColorLoadListName: [
- 'Χωρίς χρώμα',
- 'Καταχωρίστε έναν κωδικό χρώματος',
- 'Κόκκινο',
- 'Καφέ',
- 'Μωβ',
- 'Μπλε',
- 'Πράσινο',
- 'Ροζ',
- 'Σκούρο μωβ',
- 'Βιολετί',
- 'Ξεθωριασμένο σκούρο μπλε',
- 'Ανοιχτό πράσινο',
- 'Υποβαθμισμένο κόκκινο',
- 'Γαλάζιο',
- 'Ξεθωριασμένο σκούρο ροζ',
- 'Λαχανί',
- 'Ξεθωριασμένο ροζ',
- 'Φωτεινό κόκκινο'
- ],
- ColorLoadTitle: 'Κάντε κλικ για να τοποθετήσετε έναν άλλο κωδικό χρώματος<br>Ο τρέχων κωδικός χρώματος είναι: ',
- ColorSaveEmpty: '[Άδειο]',
- CustomReady: 'Έγκυρος κωδικός',
- CustomNotReady: 'Μη έγκυρος κωδικός',
- },
- },
- updateLang: function () {
- var lg = CT.langs;
- CT.lang = lg[localStorage.getItem('scriptsLang')] ? localStorage.getItem('scriptsLang') : lg[Game.locale.substr(0, 2)] ? Game.locale.substr(0, 2) : 'en';
- CTlang = lg[CT.lang];
- },
- };
- CT.updateLang();
- var langBox = new west.gui.Combobox();
- for (var j in CT.langs)
- langBox.addItem(j, CT.langs[j].language);
- langBox.select(CT.lang);
- var saveBtn = new west.gui.Button(CTlang.save, function () {
- localStorage.setItem('scriptsLang', langBox.getValue());
- CT.updateLang();
- new UserMessage(CTlang.saveMessage, 'success').show();
- }),
- fmfb = function (l) {
- return 'https://forum.the-west.' + l + '/index.php?conversations/add&to=Tom Robert';
- };
- TheWestApi.register('Color_tchat', CT.name, CT.minGame, CT.maxGame, CT.author, CT.website).setGui($('<div>' + CTlang.chooseLang +
- ': </div>').append(langBox.getMainDiv()).append(saveBtn.getMainDiv()).append('<br><br>This script adds new features to the chat:<br>Smileys, BB-Codes and Emojis! 🐧🎉<br><br><i>' +
- CT.name + ' v' + CT.version + '</i><br><br><br><b>' + CTlang.contact +
- ':</b><ul style="margin-left:15px;"><li>Send a message to <a target=\'_blanck\' href="http://om.the-west.de/west/de/player/?ref=west_invite_linkrl&player_id=647936&world_id=13&hash=7dda">Tom Robert on German world Arizona</a></li>' +
- '<li>Contact me on <a target=\'_blanck\' href="https://greatest.deepsurf.us/forum/messages/add/Tom Robert">Greasy Fork</a></li>' +
- '<li>Message me on one of these The West Forum:<br>/ <a target=\'_blanck\' href="' + fmfb('de') + '">deutsches Forum</a> / ' +
- '<a target=\'_blanck\' href="' + fmfb('net') + '">English forum</a> / <a target=\'_blanck\' href="' + fmfb('pl') + '">forum polski</a> / ' +
- '<a target=\'_blanck\' href="' + fmfb('es') + '">foro español</a> /<br>/ <a target=\'_blanck\' href="' + fmfb('ru') + '">Русский форум</a> / ' +
- '<a target=\'_blanck\' href="' + fmfb('fr') + '">forum français</a> / <a target=\'_blanck\' href="' + fmfb('it') + '">forum italiano</a> / ' +
- '<a target=\'_blanck\' href="https://forum.beta.the-west.net//index.php?conversations/add&to=Tom Robert">beta forum</a> /<br>I will get an e-mail when you sent me the message <img src="images/chat/emoticons/smile.png"></li></ul>'));
- CT.DATA = new function () {
- this.Setting = {
- saves: {
- 'save 1': '999',
- 'save 2': '999',
- 'save 3': '999',
- 'save 4': '999',
- 'save 5': '999'
- },
- Default: {
- Format: '%c',
- colorTag: '999'
- },
- };
- this.Load = function () {
- this.Setting = JSON.parse(localStorage.getItem('CT_save')) || this.Setting;
- };
- this.Load();
- this.Save = function () {
- localStorage.CT_save = JSON.stringify(this.Setting);
- };
- };
- CT.Tools = new function () {
- this.colorTagInv = function (e) {
- if (e == null || e == undefined)
- return '';
- if (e.length == 3)
- return '';
- var t = '';
- for (var n = 1; n < e.length / 3 - 1; n++) {
- t = e.substring(n * 3, n * 3 + 3) + t;
- }
- return t;
- };
- this.Degrader = function (e) {
- var t;
- if (e.length == 3)
- t = '#' + this.colorrgb(e);
- else {
- t = 'linear-gradient(to right, ';
- for (var n = 0; n < e.length / 3; n++) {
- t += '#' + this.colorrgb(e.substring(n * 3, n * 3 + 3));
- if (n !== e.length / 3 - 1)
- t += ',';
- }
- t += ')';
- }
- return t;
- };
- this.colorrgb = function (e) {
- result = '';
- TransCode = {
- 0: '0',
- 1: '1',
- 2: '3',
- 3: '5',
- 4: '6',
- 5: '8',
- 6: 'a',
- 7: 'b',
- 8: 'd',
- 9: 'f'
- };
- for (var t = 0; t < e.length; t++) {
- result += TransCode[e.substring(t, t + 1)];
- }
- return result;
- };
- this.GuiSelectbox = west.gui.Selectbox;
- this.Guicheckbox = west.gui.Checkbox;
- this.Guitextfield = west.gui.Textfield;
- this.Guibutton = west.gui.Button;
- this.Guidialog = west.gui.Dialog;
- };
- CT.Chat = new function () {
- this.init = function () {
- if (!$('div.chat_room').length)
- return;
- clearInterval(CT.initInterval);
- this.Draw();
- CT.initInterval = setInterval(function () {
- CT.Chat.OnChanelChange();
- }, 500);
- };
- this.Draw = function () {
- if (isDefined(this.btncolor))
- return;
- var e;
- $('#colorTxtStyle').append('div.btnColor{cursor: pointer;position: absolute;right: 0px; width: 25px;height: 25px;}\n');
- $('#colorTxtStyle').append('div.btnColorBG{background-image: url(data:image/png;base64,' + border + ');background-position: 0px 3px;background-repeat: no-repeat;}\n.btnColorBG:hover{background-position: -25px 3px;}\n');
- $('#colorTxtStyle').append('div.btnColorImg{width: 11px; height: 11px; margin: 8px 0px 0px 5px; position: absolute; border-radius: 5px; background-image: url(data:image/png;base64,' + color + ');}\n');
- $('#colorTxtStyle').append('div.btnColorSmiley{border-top-right-radius: 10px;border-top-left-radius: 10px;border: 1px solid #646464;box-shadow: 0px 0px 1px 1px black;background-image: url(images/interface/wood_texture_dark.jpg);width: 425px;bottom: 18px;left: -400px;height: 208px;\tmargin: 0px 0px 6px 0px; position: absolute;}\n');
- $('#colorTxtStyle').append('div.btnColorOneSmiley{display: inline-block; cursor: pointer; width: 17px; height: 13px; padding: 1px; text-align: center; vertical-align: middle;}\n');
- this.btncolor = $('<div class="btnColor btnColorBG"/>').append($('<div class="btnColorImg btnColorImgTag"/>').click(function () {
- CT.Window.show();
- })).append(e = $('<div class="btnColorSmiley"/>').hide()).mouseout(function () {
- $('div.btnColorSmiley:last-child', this).hide();
- }).mouseover(function () {
- $('div.btnColorSmiley:last-child', this).show();
- });
- for (var t in sm) {
- if (sm[t] !== '') {
- e.append($('<div class="btnColorOneSmiley"/>').data('Tag', t).click(this.addSmToTxt).append(sm[t]));
- }
- }
- };
- this.addSmToTxt = function (e) {
- var inp = $(e.target).parentsUntil($('div.chat_main')).find('input');
- var n = $(e.currentTarget).data('Tag');
- var r = inp[0].selectionStart;
- var i = inp[0].selectionEnd;
- var s = inp.val();
- if (n == '[player][/player]') {
- s = s.substring(0, r) + '[player]' + s.substring(r, i) + '[/player]' + s.substring(i);
- } else if (n == '[item=]') {
- s = s.substring(0, r) + '[item=' + s.substring(r, i) + ']' + s.substring(i);
- } else {
- s = s.substring(0, r) + ' ' + n + s.substring(r);
- }
- inp.val(s);
- };
- this.appliquer_couleur = function (e, t) {
- if (e == '')
- return '';
- if (t == '999' && !CT.DATA.Setting.Default.Format.startsWith('/111* '))
- return e;
- if (e.toLowerCase().indexOf('[player]') == 0 && e.toLowerCase().indexOf('[/player]') !== -1)
- return e.substring(0, e.toLowerCase().indexOf('[/player]') + 10) + ' ' + this.appliquer_couleur(e.substring(e.toLowerCase().indexOf('[/player]') + 10), t);
- if (e.toLowerCase().indexOf('[report=') == 0 && e.toLowerCase().indexOf('[/report]') !== -1)
- return e.substring(0, e.toLowerCase().indexOf('[/report]') + 10) + ' ' + this.appliquer_couleur(e.substring(e.toLowerCase().indexOf('[/report]') + 10), t);
- if (e.toLowerCase().indexOf('http') == 0)
- if (e.indexOf(' ') !== -1)
- return e.substring(0, e.indexOf(' ') + 1) + ' ' + this.appliquer_couleur(e.substring(e.indexOf(' ') + 1), t);
- else
- return e;
- if (e.toLowerCase().indexOf('[item=') == 0 && e.indexOf(']') !== -1)
- return e.substring(0, e.indexOf(']') + 1) + ' ' + this.appliquer_couleur(e.substring(e.indexOf(']') + 1), t);
- if (e.toLowerCase().indexOf('[marker') == 0 && e.indexOf(']') !== -1)
- return e.substring(0, e.indexOf(']') + 1) + ' ' + this.appliquer_couleur(e.substring(e.indexOf(']') + 1), t);
- for (var n in sm) {
- if (e.indexOf(n) == 0)
- return e.substring(0, n.length) + ' ' + this.appliquer_couleur(e.substring(n.length), t);
- }
- if (t.length == 3)
- return '/' + t + e;
- if (e.charAt(0) == ' ')
- return e.charAt(0) + this.appliquer_couleur(e.substring(1), t.substring(3) + t.substring(0, 3));
- return '/' + t.substring(0, 3) + e.charAt(0) + ' ' + this.appliquer_couleur(e.substring(1), t.substring(3) + t.substring(0, 3));
- };
- this.fCharAt = function (str, idx) {
- str += '';
- var ret = '',
- end = str.length,
- surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
- while ((surrogatePairs.exec(str)) != null) {
- var li = surrogatePairs.lastIndex;
- if (li - 2 < idx)
- idx++;
- else
- break;
- }
- if (idx >= end || idx < 0)
- return '';
- ret += str.charAt(idx);
- if (/[\uD800-\uDBFF]/.test(ret) && /[\uDC00-\uDFFF]/.test(str.charAt(idx + 1)))
- ret += str.charAt(idx + 1);
- return ret;
- };
- this.flipString = function (e) {
- if (e.length === 0)
- return '';
- var eO = this.fCharAt(e, 0);
- for (var p in fl)
- if (p == eO)
- return this.flipString(e.substring(eO.length)) + fl[p];
- else if (fl[p] == eO)
- return this.flipString(e.substring(eO.length)) + p;
- return this.flipString(e.substring(eO.length)) + eO;
- };
- this.OnPressKeyEnter = function (e) {
- var obj = $.extend({}, $(e.target).data('ColorTchat'));
- var n = $(e.target).val();
- if (n.charAt(0) == '/') {
- if (n.substring(0, 6) == '/tell ') {
- if (n.indexOf(':') !== -1) {
- var r = n.substring(6, n.indexOf(':') + 1);
- n = n.substring(n.indexOf(':') + 1);
- }
- } else {
- var i = [
- '/topic',
- '/clear',
- '/logout',
- '/ignorelist',
- '/ignore',
- '/unignore',
- '/rights',
- '/color',
- '/me',
- '/help',
- '/?',
- '/join',
- '/items',
- '/items.s',
- '/items.add',
- ];
- for (var s = 0; s < i.length; s++) {
- if (n.substring(0, i[s].length) == i[s]) {
- return;
- }
- }
- }
- }
- if (/\/flip /.test(n.substring(0, 6))) {
- obj.Format = '%f';
- n = n.substring(6);
- }
- if (/\/[0-9]{3}/.test(n.substring(0, 5))) {
- obj.Format = '%n';
- }
- if (typeof r !== 'undefined')
- obj.Format = '/tell %t:' + obj.Format;
- var cT = function () {
- var te = '',
- co = obj.colorTag;
- if (!co || co.length % 3 !== 0)
- return '999';
- if (co.length !== 3) {
- for (var n = 1; n < co.length / 3 - 1; n++)
- te = co.substring(n * 3, n * 3 + 3) + te;
- return co + te;
- } else
- return co;
- }
- (),
- code = /%[C-n]/.exec(obj.Format)[0],
- newN;
- switch (code) {
- case '%c':
- newN = this.appliquer_couleur(n, cT);
- break;
- case '%C':
- newN = this.appliquer_couleur(n, cT).toUpperCase();
- break;
- case '%f':
- var u = this.flipString(n);
- newN = this.appliquer_couleur(u, cT);
- break;
- case '%F':
- var f = this.flipString(n.toUpperCase());
- newN = this.appliquer_couleur(f, cT);
- break;
- default: //%n
- newN = n;
- break;
- }
- $(e.target).val(obj.Format.replace(code, newN));
- };
- this.OnChanelChange = function () {
- if (!$('div.chat_room').length)
- return;
- clearInterval(CT.initInterval);
- $('div.chat_room').find('.chat_input').each(function (e) {
- if (!$(this).children().is('.btnColor')) {
- $(this).append(CT.Chat.btncolor.clone(true));
- $(this).find('input.message').keypress(function (e) {
- if (e.keyCode == 13) {
- CT.Chat.OnPressKeyEnter(e);
- document.focusing = undefined;
- }
- }).data('ColorTchat', CT.DATA.Setting.Default);
- CT.Chat.Change = true;
- }
- });
- this.ChangeColor();
- CT.initInterval = setInterval(function () {
- CT.Chat.OnChanelChange();
- }, 500);
- };
- this.ChangeColor = function () {
- if (this.Change === false)
- return;
- this.Change = false;
- var e = CT.DATA.Setting.Default.colorTag;
- if (pos[e])
- $('#colorTxtStyleTmp').text('div.btnColorImgTag{background-position: ' + pos[e] + '; z-index: 6}\n');
- else
- $('#colorTxtStyleTmp').text('div.btnColorImgTag{background: ' + CT.Tools.Degrader(e) + '}\n');
- $('div.chat_room').each(function (e) {
- $(this).find('input.message').data('ColorTchat', CT.DATA.Setting.Default);
- });
- };
- var fl = {
- a: 'ɐ',
- A: 'Ɐ',
- b: 'q',
- B: '𐐒',
- c: 'ɔ',
- C: 'Ɔ',
- d: 'p',
- D: 'ᗡ',
- e: 'ǝ',
- E: 'Ǝ',
- f: 'ɟ',
- F: 'Ⅎ',
- g: 'ƃ',
- G: '⅁',
- h: 'ɥ',
- i: 'ᴉ',
- j: 'ɾ',
- J: 'ſ',
- k: 'ʞ',
- K: 'ʞ',
- l: 'ן',
- L: '⅂',
- m: 'ɯ',
- M: 'W',
- n: 'u',
- N: 'N',
- P: 'Ԁ',
- Q: 'Ὁ',
- r: 'ɹ',
- R: 'ᴚ',
- t: 'ʇ',
- T: '⊥',
- U: '∩',
- v: 'ʌ',
- V: 'Ʌ',
- w: 'ʍ',
- y: 'ʎ',
- Y: '⅄',
- 1: 'ɩ',
- 2: 'ζ',
- 3: 'Ɛ',
- 4: 'ᔭ',
- 5: 'ﻛ',
- 6: '9',
- 7: 'ㄥ',
- '.': '˙',
- '[': ']',
- '(': ')',
- '{': '}',
- '?': '¿',
- '!': '¡',
- '\'': ',',
- '<': '>',
- '_': '‾',
- ';': '؛',
- '&': '⅋',
- '"': '„',
- '‿': '⁀',
- '⁅': '⁆',
- '∴': '∵',
- },
- sm = {
- ':-)': '',
- ':)': '<img src ="images/chat/emoticons/smile.png">',
- ':-D': '',
- ':D': '<img src ="images/chat/emoticons/grin.png">',
- ':-(': '',
- ':(': '<img src ="images/chat/emoticons/frown.png">',
- ';-)': '',
- ';)': '<img src ="images/chat/emoticons/smirk.png">',
- ':-p': '',
- ':p': '',
- ':-P': '',
- ':P': '<img src ="images/chat/emoticons/tongue.png">',
- '-.-': '<img src ="images/chat/emoticons/nc.png">',
- '^_^': '',
- '^^': '<img src ="images/chat/emoticons/happy.png">',
- 'O.o': '',
- 'o.O': '',
- 'O_o': '',
- 'o_O': '<img src ="images/chat/emoticons/oo.png">',
- ':-/': '',
- ':/': '<img src="images/chat/emoticons/sore.png">',
- '=:)': '<img src="images/chat/emoticons/invader.png">',
- '>:(': '<img src="images/chat/emoticons/angry.png">',
- 'T_T': '',
- 'T.T': '',
- ':\'(': '<img src="images/chat/emoticons/cry.png">',
- ':-o': '',
- ':o': '',
- ':-O': '',
- ':O': '<img src="images/chat/emoticons/ohmy.png">',
- ':-x': '',
- ':x': '',
- ':-X': '',
- ':X': '<img src="images/chat/emoticons/muted.png">',
- ':-|': '',
- ':|': '<img src="images/chat/emoticons/silent.png">',
- '>_<': '',
- '>.<': '<img src="images/chat/emoticons/palm.png">',
- 'X_X': '',
- 'x_x': '',
- 'X.X': '',
- 'x.x': '<img src="images/chat/emoticons/xx.png">',
- 'el pollo diablo!': '<img src ="images/chat/emoticons/elpollodiablo.png">',
- '!el pollo diablo': '<img src ="images/chat/emoticons/elpollodiablo_mirror.png">',
- 'el pollo diablo?!': '<img src ="images/chat/emoticons/elpollodiablo_front.png">',
- 'addme!': '<img src="images/chat/emoticons/sheep_rainbow.gif">',
- 'addme': '<img src="images/chat/emoticons/sheep.gif">',
- '[player][/player]': '<div style="background-image: url(images/tw2gui/tw2gui_bbcodes.png); background-position:-88px 20px; width: 21px; height: 20px">',
- '[item=]': '<img src="images/forum/icon/cowboy_boots.png" style="background: url(images/tw2gui/tw2gui_bbcodes.png); background-position:-22px 20px; width: 21px; height: 20px">',
- },
- em = [
- '😄', '😃', '😀', '😊', '😉', '😍', '😘', '😚', '😗', '😙', '😜', '😝', '😛', '😳', '😁', '😔', '😌', '😒', '😞', '😣', '😢', '😂', '😭', '😪', '😥', '😰', '😅', '😓', '😩', '😫', '😨', '😱', '😠', '😡', '😤', '😖', '😆', '😋', '😷', '😎', '😴', '😵', '😲', '😟', '😦', '😧', '😈', '😮', '😬', '😐', '😕', '😯', '😶', '😇', '😏', '😑', '🙈', '🙉', '🙊', '💀', '👽', '💩', '🔥', '🌟', '💫', '💦', '💧', '💤', '💨', '👍', '👎', '👌', '👊', '✌️', '👋', '👉', '👈', '🙌', '🙏', '👏', '💪', '🎩', '👑', '👒', '💼', '👜', '👓', '🌂', '💛', '💙', '💜', '💚', '❤️', '💔', '💗', '💓', '💕', '💘', '💌', '💋', '💍', '💎', '💬', '💭', '🐶', '🐺', '🐱', '🐭', '🐹', '🐰', '🐸', '🐯', '🐨', '🐻', '🐷', '🐮', '🐗', '🐵', '🐒', '🐴', '🐑', '🐘', '🐼', '🐧', '🐦', '🐤', '🐔', '🐍', '🐢', '🐛', '🐝', '🐜', '🐞', '🐌', '🐙', '🐚', '🐠', '🐟', '🐬', '🐳', '🐋', '🐄', '🐏', '🐀', '🐃', '🐅', '🐇', '🐉', '🐎', '🐐', '🐓', '🐕', '🐖', '🐁', '🐂', '🐡', '🐊', '🐫', '🐪', '🐆', '🐈', '🐩', '☀️', '⛅️', '☁️', '⚡️', '☔️', '❄️', '⛄️', '🌁', '🌈', '🌊', '🎓', '🎃', '🎅', '🎄', '🎁', '🎉', '🎊', '🎈', '📱', '📞', '⏰', '🔒', '🚿', '🚽', '🚬', '💣', '🔫', '🔪', '💰', '✂️', '🎤', '🎧', '🎶', '🎻', '🎺', '🎷', '🎸', '🎮', '🏈', '🏀', '⚽️', '⚾️', '🎾', '🎳', '⛳️', '🏁', '🏆', '🎿', '🏂', '🏊', '🏄', '☕️', '🍸', '🍹', '🍷', '🍴', '🍕', '🍔', '🍟', '🍳', '🍩', '🍦', '🍨', '🍪', '🍫', '🍬', '🍭', '🍎', '🍇', '🍓', '🍌', '🍍', '🍅',
- ],
- EvName = Object.keys(Game.sesData)[0];
- for (var j of em)
- sm[j] = j;
- if (EvName == 'Easter')
- sm['easter!'] = '<div style="background-image: url(images/window/events/easter/easter_sprite.png); background-position:-20px 0px; width: 17px; height: 20px">';
- else if (EvName)
- sm[EvName.toLowerCase() + '!'] = '<img src="images/icons/' + EvName + '.png">';
- var color = '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',
- border = 'iVBORw0KGgoAAAANSUhEUgAAADIAAAAZCAYAAABzVH1EAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHpsAACAjgAA+FQAAIITAAB2OwAA9IEAADvkAAAbd5lS/4AAAAnFSURBVHjazJhLb5xHdoafU1XfrdmkSJOWLGs8tjQzgDTKxAGCBEjCyYIDZBtAy8CL8e/QWkj+RgBvo613TJBoEiABJlZGE3EiS45lXakmu8m+fZeqc7JotkRZciazywG6PzTQXU+dt+qct6rlr3/+UwN4PJgC8IPvbVIWOQ/3B9TzyNmNihiFg+MZ6oTNfsHhqCGaIhiD4XNCscl6LwNgPD3gb//+6w+AAzObA/zNp3/+VsZ/Px6QVHl3vSJG5cnhjF4eONPPeXo4Q1jEYPjstzLC+pkzACyfGJgaF7beoYstk0nNdN7iRShyx389fESMHWWxQVIhAXfuPeAPfnSJ9V5GTArwU+CfgEenx37JOIkPL5ylbRtm9YzhuKFfBYos8O93HtDrl0ixijMD4Is3GX8M/OuSEX59/8l8NOuq4eEjEPDSp8gDuTNmUdEYaZtI7AxMF4lipPQE1YRzFWeAL+894Ic/usTvXfoI/vGby8AXywn/+v6T4WjWbXy2+ysAcu/wziFiGIthFWMxZ8EwzAzBEBH05Dt3vvkVn+z8ZMn4EPjPJSNc2FrhAnDz/te8u1Ywjg0hRloVSu8whNWQQaEQFBQEwUTIi0CZFUid+GrUcvX76y/HBdzyw5IBkAdHHgRQSnGId4Qgi+S8Q8wQJ5g4uqi0XUcTlS4a81ZPM/xpRrh9775sbpxjsSGNnIgzoyo9PnNk3uEEgneIMxRwBiZG5pV+1mBlRZ2t8HgwZTB8BixEXEJu37vvtjbewwmUAj/cKlkpPL3SUxUFeeYpMyP3INFIImQO6nnL4TTwzUQZjjtGkng0mHLwFkbY2jjnBofPWXU5H2ysMZ11eJ/wCAG7JcpNRHYT3CXJFWAnYdcQt21mjFLH+LDhAOinxNbGOeDJa7WwtfGefzF8xkoRuPLBBn/x8Vmy3GEGInLLOW46s11RvRtTulLP251m1lwzddv96Hm36TTriRMRXgyfcXb97BuMYAgh32T17DG0Y1bLgmgOgc/AbjhhzzCSAsrthN3G+Byx65r4ZDV3nDvXJw3nWH6GC1v9xeoar4OyTcowoApQBaOXecz4TMVuJNW9pAlNSkrxtmG3LfjPi2TXWfWfZGXmtszTPj4mz9d5f72vTkBPMZxg2epK4HB/xDQaYAS45bEbHtlTBU2Q1IgGqJASezHajaaxW8djYzgxxm1BL895NJgiiAB8+rOryw5anul5iiqw0gvUbcOknt6a1vMb00m9Nzmec3RUcziaMTyqOZ621E23F01voHari8ZwPGXamFbB6ePRDMG514QCEWeJMi/RoiRpxGE3gb1lJ7GXBW6ogHgQk72kdnPe2ra1xmh8xPn31hAqwAQgqp60dA0JoWuNw8MJz3uOMvc3nZM9OVFW1YiLVSdFiGp0Ke3Vrd6c1nE7RVgJ3kVMc8A5Q1VOJWKGCUicYpNAUyge2fWytBXBWLRHOWmPIot+EWC3q0CbhjL0UAt4AxxKgmQ4Fg/FouItdHjq5LBWd70I4sA5wYuQe4HgIAckkIBVk931pMzapPFwhuBIYuoC4qO9tiJgQlUF+quJWS0gdtdUEHeSzcvEF0mIBy+Ceu7GqVF3SkeHqQPMZGE3nNgEZmg0nJwobSgq/u7CtxY+IQgOW7zcwk0Eo1W92ybVrjWnJupNW0k4UmZq3cvt5RA4miUOp/BovyWIILgrJ9sck8WqCCDO8H4hmnNG5rmSV45eryQnZ5YSJiJiIk5EkppbCjGdJeeDiyuZ4SziLF0JYgSB3EEWjCwIWXB45xEX8C4QJFzxEpw5kCgc1SksmomJOyVxWIAS+1PH+rsOwxAnO4LcRljkI7ZYCeSlzCLgnNtZO7NCIRGr+ie6QsIMw7wXXaiFcw5cJmFlpWJ1rSLAjkdui4Bb1h3CchNgoAhO3E4SRRUkRBc8ToyoTnVZgrx0RhN6ldCTnGSGOK7h9bK4xYQ9QhDBy0nFqKKdXk6q1zKBOrZMJqMTjzoVr1ZVFcF3jiLz9BdmeK1X+cu9ylNVnqrMqMqMPM/wIYD3JJPLdbJrszoymScdNxEzFDEkYaaWXiYymnWIc1hsGNNSlY4isF3m7nqeyeW8EEK+sHNVpWsT8zpdnrZ6fd7adtvUxEkEiwtdTvX2uk0GMJq1zptSp4ZpA+tneqyvrWz3+9X1lV55uSwLihDIs0CeeYrgyYO7XGZyvfK2nUxAcUYGIs4JrtUkdooVnuwPMIN53VLFjC55IglvfILZR6Z6M6ntxqh3m06vNNF2OuUazm/3e47Bi5rzG2vEwwMeNwPi+quW+He/+I0BPN0/cGpoTHA0PHb3HmSs9XPyXD5xwkdmdtPMdhW7K8IVL+z44K95H7bLMmOtnZNUSU3N88GIGMV923RDPZ1Q9Pq0DdTB8/TpFBeNLDfUsZ2SbatBUkFNSTjEEk5hPplzrJ7x0YBx07G+2eP56FuWDpwwXDJjdaNHspr9g5ZJm2g72VZj23tHljnKXKhKT3CJwieq3NN6aE0Zt8q6wmB0cgQ/bYhFr1+vhrqkKBgft8yTkJpI39zCyR14bwQFEyETBRzzZMy9MG4bNK+IGlkNNW+Lotc/Wg31meN5ZP/FmD/6wSVmbcf8oGZWzxjXEcMIYoSTrhgI+CKQYkszc3Qe5m1kLX87I1y9eN4Gw2cMps+pO4+2CQmOqRSoGW0byXEQPFIITgSJxrzrKBplZsa0mbC1vkKvX7G18R7cHr4GuXrxvA6GzzAd8uio49/uPSe1LXleoEBRCE48rRrjtiN1iZAZpSWOjyPDWUurSpugt1Kx9c6bjDCadVUoNvnLP1lcJXVxAGM2mzA4OsbJKiv9Ak01asqLoxmbqxWFg6g1dx4e00yUq9+rWBR294Zao1m3EYpN/mrn1XVVBCbzYw6OJuTlFmUWsNhQNy2Tecs7Gz1EO+qtji+fHDOfKH/4443vZIQ/+8mHfHjxfQC+/urJsoWfvC8q6vH+IZr6zOqOjy+9T55n9Ff6qBnwS56PjNlkTq9f8ezF4WtnAYC3MRZxHnB0KfF8f0jUHlGVrbWSqirpVRXjaUMe7vxWRvj8H37B9+9f5MLW4mJU5h7vHON5ixNBDY7nLRpn+FDx5aOnxGT0QmQ4D0urYBxLXjw+Xhraa5eebzOqfPG7Sd3hRYhqHM8bTFucy/iPLx9RZoLGyDSGlzP+3xhiZojIReBnwKfAv7zpbN8ZJfBj4Je8OpVF4DfArpk9fOWNchH40xPGF78Do1r+wXCKkYBvgH9eMpaJ9IBzwMfAgzevRd8ZHrgAPDwFUWAMvDCz2alElozfB776HRnxW4koMDnNELP/63j/v+N/BgBXi5F3d3nGEQAAAABJRU5ErkJggg==',
- pos = {
- 999: '0px 0px',
- 308318328338348: '-24px -0px',
- 106117128139: '-36px -0px',
- 120130140150: '-48px -0px',
- 400500600700800: '-60px -0px',
- 199299399499599699: '-72px -0px',
- 505606607709809: '-84px -0px'
- };
- };
- CT.Window = new function () {
- var saveB = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAANCAIAAAAv2XlzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAH6SURBVHjaVM89a1RRFIXhtffZ9zOYTBKJYaKOiumiqdKKgmBhqUL+hI2VIFjYCZaChb9ABAtJIQbFIoJoQNSMEKLkC+IEZhLnzuTM3DP3nm2hhLjq9RYPRceOn5qeDUWcyw0jjUNjDBsTiEnikADbd13rbF7sbKwetLZkdPLs5Ru34cvv9ZXauNy6OlOrnZ6aOmmC+FN9KxQzd+HMs8Wv71caG6ufl54/EvW+28nyfr/V2hvh4KCb9W2XfP5rN3vwZCGJ5en9+Z7tZu3faZKaIBIiEKlhiqMgikMjwswKAJAgEBEAhskwoCVUBQBUiSGBRGEYCweGhPnE2PD8tdk4DCrDQ1nH2l6/KEsQBABB1StIfu5kr5c3zzcHE9udykhl5txEIPxicfnd8mpeStFzBAgBWcfud2xBYUH8diV7862tWldVKBQgIE3jsdGKVw9AitLvtTvMdGVuulYdJyLVvwQAIBAzrW3ufllrDJxT9VKW5X67e/3SxYd3bjKKvu2B6DCAahSFecn3Hi+8fLWuqjIoCmt7IsxMe812s9li5sO/934oTSar1TQJDqxVVfFenXO+LAGEYZikydFAVeM4BtHADVzuVFWIWFkUVBYuTZMwjvD/xLBqCZCyAZHkWUMa9Q9L7m573Xs9Kv7nJmLmj/XtQeuHd70/AwDj7v01yw6ZhAAAAABJRU5ErkJggg==',
- setB = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTM0A1t6AAACoUlEQVQ4T42Uy2sTURTGk1Zbq+ILUdyKG5uZSerQkPbeyYAYCZhlggurFUJN5xGUgiBushdBsQguFMGFC7EqLiyiCwWh0IL/QH3tFJcu1CKlft+duTqJieTA4Z7cOfeX755zZlLaarXaYBx2i9OMW63WQDI2ZDBniOCrKcMHo66/nfvKXNfdgkUlMo4Ppsrl8rCGYx2ybXtzZsIbN47W91vCuwLQhimDDQuekeFl5rUpKBQKIxpAMHwTY8IIN4QfmtL/Dv+WhKnY8S/qfGVJGA8nYXTDCU+YIvhhykbVFCHWBEwGz+1jtZ3MV0Y1vZTRGY8V64eh7BGgP+GPTeG/UjARvCkcr+5hjjKCkjXrBssVZ8YB+wJl96BmwZL+EtY1NOWZJb0VpLBkaX1WWS9lCib8j1knzANyC824b4jwIbr7EvFrQ/rXkJauVqsjXHnmv8rQiPem9GzsDVYqla2A3oayu1C8AOgTvY/0CMYNehz/C3P8IoC7jzinDtju3F7Aliw5exqTONABS2uOInfCTOF9yIjwBlT8QrzOeqEJKxFMWToJ45TEcReY9FbNyWAe11vnaKBmi+jmsiUaZ5CiAEkY66cbq14hvgGMc7Ixqq4JZX9hwSKV5SIYrSes7cqEYhyuA3S1TZkMlk1nZjrO6wnjlGCJVLLDrju9C4ffWSK4iQ6ucTQi2CxhtJ6w5FtGY7eGALgEwLw1ee4krngHvpp1GmfjnL5gek9d2RK+BPATavbWEmF9ojS1L37WF4yzrPdVMUulqW3o7sFD5eYwD6kHfcKSbxktnZUNAWUv8vnmjhjWt7IOmHrOL+9T1AxfDu+82o4BXOkEaBgByWtqGKdE76cwtBfgn61ic4y/4yTC9GwlYwXmH/ypWdRYPEulfgMLajrH8hIjewAAAABJRU5ErkJggg==',
- cList = [
- '999',
- 'custom',
- '700',
- '321',
- '409',
- '007',
- '031',
- '704',
- '608',
- '308318328338348',
- '106117128139',
- '120130140150',
- '400500600700800',
- '199299399499599699',
- '505606607709809',
- '696595494393292',
- '959949839829819',
- '900911922933944'
- ];
- this.show = function () {
- var e;
- var i;
- var format = CT.DATA.Setting.Default.Format;
- $((this.w = wman.open('Colorsettings').setTitle(CTlang.ColorWindowTitle).setMiniTitle(CT.name).setSize(350, 400)).getContentPane()).css('text-align', 'center').append(i = $('<input type=hidden class="color" id="colorinput" value="66ff00"/>'));
- (this.ColorPicker = new jscolor.color(i[0], {
- pickerOnfocus: false
- })).showPicker();
- this.tab1 = $('<div style="display:inline-block;width:290px;height:275px;position:relative;padding:4px12px4px4px;text-align:left"/>').appendTo(this.w.getContentPane()).append($(jscolor.picker.boxB).css({
- position: 'relative',
- display: 'inline-block',
- 'background-color': ''
- })).append($('<div id="colorPanelDIV" style="display:inline-block;width:auto;height:123px;position:relative;margin-left:7px;border:' + this.ColorPicker.pickerBorder + 'px solid;border-color:' + this.ColorPicker.pickerBorderColor + '"/>').append($('<div id="colorWSetbtn" style="width:20px;height:20px;background-image:url(' + setB + ');margin:10px;cursor:pointer;"/>').click(function (e) {
- CT.Window.SetPreviewColor(0);
- })).append($('<div id="colorWLoadbtn" style="width:20px;height:20px;margin:10px;cursor:pointer;"/>').click(function (e) {
- CT.Window.selectLoad.show(e);
- })).append($('<div id="colorWSavebtnBg" style="width:20px;height:20px;background-image:url(' + saveB + ');background-size:100%100%;margin:10px;cursor:pointer;"/>').click(function (e) {
- CT.Window.selectSave.show(e);
- }))).append(e = $('<div id="PreviewDIV" class="chatwindow_background" style="display:inline-block;width:287px;height:60px;position:relative;zIndex:5;margin-top:5px;border:' + this.ColorPicker.pickerInset + 'px solid;border-color:' + this.ColorPicker.pickerInsetColor + ';color:white;background:#1D1C1C;opacity:' + $('.tw2gui_window_inset', '.chat').css('opacity') + '"/>')).append($('<div style="display:inline-block;position:relative;padding:4px;width:45%"/>').append((this.Bold = new CT.Tools.Guicheckbox(CTlang.ColorWindowBold).setSelected(/\*.*\*/.test(format))).getMainDiv().click(function () {
- CT.Window.updateFormat();
- CT.Window.updatePreview();
- }))).append($('<div style="display:inline-block;position:relative;padding:4px;width:auto"/>').append((this.Caps = new CT.Tools.Guicheckbox(CTlang.ColorWindowCaps).setSelected(/%C|%F/.test(format))).getMainDiv().click(function () {
- CT.Window.updateFormat();
- CT.Window.updatePreview();
- }))).append($('<div style="display:inline-block;position:relative;padding:4px;width:45%"/>').append((this.Flip = new CT.Tools.Guicheckbox(CTlang.ColorWindowFlip).setSelected(/%f|%F/.test(format))).getMainDiv().click(function () {
- CT.Window.updateFormat();
- CT.Window.updatePreview();
- }))).append((this.inputFormat = new CT.Tools.Guitextfield('bdfFormat').setValue(format).setSize(14).setReadonly(true)).getMainDiv());
- $((this.selectLoad = (new CT.Tools.GuiSelectbox('topleft-left')).setPosition(42, 10).addListener(function (e) {
- CT.Window.LoadColor(e);
- setTimeout(function () {
- CT.Window.selectLoad.hide();
- }, 0);
- }).setWidth(200).setHeight(300)).elContent).css({
- 'overflow-y': 'auto'
- });
- this.selectSave = (new CT.Tools.GuiSelectbox('topleft-left')).setPosition(42).addListener(function (e) {
- CT.Window.SaveColor(e);
- setTimeout(function () {
- CT.Window.selectSave.hide();
- }, 0);
- }).setWidth(200);
- for (var s = 0; s < cList.length; s++)
- this.selectLoad.addItem(cList[s], $('<div style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap">').append($('<span style="display:inline-block;width:19px;height:19px;"/>').css('background', CT.Tools.Degrader(cList[s]))).append(CTlang.ColorLoadListName[s]), CTlang.ColorLoadListName[s]);
- for (s in CT.DATA.Setting.saves)
- this.selectLoad.addItem(s, $('<div>').append($('<span style="display:inline-block;width:19px;height:19px;"/>').css('background', CT.Tools.Degrader(CT.DATA.Setting.saves[s]))).append(s + (CT.DATA.Setting.saves[s] == cList[0] ? ' ' + CTlang.ColorSaveEmpty : '')));
- for (s in CT.DATA.Setting.saves)
- this.selectSave.addItem(s, $('<div>').append($('<span style="display:inline-block;width:19px;height:19px;"/>').css('background', CT.Tools.Degrader(CT.DATA.Setting.saves[s]))).append(s + (CT.DATA.Setting.saves[s] == cList[0] ? ' ' + CTlang.ColorSaveEmpty : '')));
- for (s = 1; s < CTlang.ColorWindowPreviewTxt.length; s++)
- $('<div id="idColorPreview_' + s + '"style="display:inline-block;cursor:pointer" onclick="javascript:CT.Window.SetPreviewColor(\'' + s + '\');"/>').appendTo(e);
- this.customTF = (new CT.Tools.Guitextfield).setSize(30);
- this.test = function () {
- CT.Window.customTest.html(CTlang.CustomNotReady).css('color', 'red');
- v = CT.Window.customTF.getValue();
- if (v.length % 3 == 0 && /[0-9]+/.exec(v) == v) {
- CT.Window.customTest.html(CTlang.CustomReady).css('color', 'green');
- CT.Window.customPrev.css('background', CT.Tools.Degrader(v));
- }
- };
- this.customTF.getField()[0].addEventListener('keyup', this.test);
- this.customPrev = $('<div style="float:left;margin-top:5px;width:19px;height:19px;"/>');
- this.customTest = $('<div style="height:12px;width:120px;"/>');
- this.customTF.divMain.append(this.customPrev, this.customTest);
- this.DefaultButton = (new CT.Tools.Guibutton(CTlang.ColorWindowToDefaultBtn, function () {
- CT.Window.DefaultClick();
- })).appendTo(this.w.getContentPane());
- this.OkButton = (new CT.Tools.Guibutton(CTlang.ColorWindowThisTchatBtn, function () {
- CT.Window.OkClick();
- })).appendTo(this.w.getContentPane());
- this.LoadColor(CT.DATA.Setting.Default.colorTag);
- };
- this.OkClick = function () {
- CT.DATA.Setting.Default = {
- Format: $('#bdfFormat').val(),
- colorTag: this.ColorTag
- };
- CT.DATA.Save();
- CT.Chat.Change = true;
- CT.Chat.ChangeColor();
- new UserMessage(CTlang.saveMessage, 'success').show();
- };
- this.DefaultClick = function () {
- CT.DATA.Setting.Default = {
- Format: '%c',
- colorTag: cList[0]
- };
- CT.DATA.Save();
- CT.Chat.Change = true;
- CT.Chat.ChangeColor();
- this.show();
- };
- this.SetPreviewColor = function (e) {
- if (e == 0) {
- this.ColorTag = this.colorwest(this.ColorPicker.toString());
- } else {
- e--;
- if (e > this.ColorTag.length / 3) {
- this.ColorTag += this.colorwest(this.ColorPicker.toString());
- } else {
- this.ColorTag = this.ColorTag.substring(0, e * 3) + this.colorwest(this.ColorPicker.toString()) + this.ColorTag.substring(e * 3 + 3);
- }
- }
- this.updatePreview();
- };
- this.updateFormat = function () {
- var e = this.Flip.isSelected() ? '%f' : '%c';
- if (this.Caps.isSelected())
- e = e.toUpperCase();
- if (this.Bold.isSelected())
- e = '/111* ' + e + ' /111*';
- $('#bdfFormat').val(e);
- };
- this.updatePreview = function () {
- var flip = this.Flip.isSelected();
- var e = flip ? '%f' : '%c';
- if (this.Bold.isSelected())
- e = e.bold();
- if (this.Caps.isSelected())
- e = e.toUpperCase();
- var n = this.ColorTag + CT.Tools.colorTagInv(this.ColorTag);
- var leng = CTlang.ColorWindowPreviewTxt.length;
- for (var r = 1; r < leng; r++) {
- var i = document.getElementById('idColorPreview_' + r);
- i.style.color = '#' + CT.Tools.colorrgb(n.substring(0, 3));
- var g = flip ? leng - r : r;
- var s = CTlang.ColorWindowPreviewTxt.charAt(g);
- if (s == ' ')
- i.innerHTML = ' ';
- else
- i.innerHTML = e.replace('%c', s).replace('%C', s.toUpperCase()).replace('%f', CT.Chat.flipString(s)).replace('%F', CT.Chat.flipString(s.toUpperCase()));
- n = n.substring(3) + n.substring(0, 3);
- }
- $('#colorWLoadbtn').css('background', CT.Tools.Degrader(this.ColorTag));
- $('#colorWLoadbtn').attr('title', CTlang.ColorLoadTitle + this.ColorTag);
- };
- this.SaveColor = function (e) {
- CT.DATA.Setting.saves[e] = this.ColorTag;
- for (var i in this.selectLoad.items) {
- if (this.selectLoad.items[i].value == e) {
- $(this.selectLoad.items[i].node[0].firstChild).css('background', CT.Tools.Degrader(CT.DATA.Setting.saves[e]));
- this.selectLoad.items[i].node[0].lastChild.textContent = e + (CT.DATA.Setting.saves[e] == cList[0] ? ' ' + CTlang.ColorSaveEmpty : '');
- }
- if (typeof this.selectSave.items[i] !== 'undefined')
- if (this.selectSave.items[i].value == e) {
- $(this.selectSave.items[i].node[0].firstChild).css('background', CT.Tools.Degrader(CT.DATA.Setting.saves[e]));
- this.selectSave.items[i].node[0].lastChild.textContent = e + (CT.DATA.Setting.saves[e] == cList[0] ? ' ' + CTlang.ColorSaveEmpty : '');
- }
- }
- this.updateFormat();
- CT.DATA.Save();
- };
- this.LoadColor = function (e) {
- if (/save/.test(e)) {
- e = CT.DATA.Setting.saves[e];
- }
- if (e == 'custom') {
- this.customTF.setValue(this.ColorTag);
- this.test();
- (new CT.Tools.Guidialog(CTlang.ColorLoadListName[1], this.customTF.getMainDiv(), 'question')).addButton(CTlang.ColorWindowOkBtn, function () {
- var e = CT.Window.customTF.getValue();
- if (e.length % 3 == 0 && /[0-9]+/.exec(e) == e)
- CT.Window.LoadColor(e);
- }).addButton('cancel').show();
- return;
- }
- this.ColorPicker.fromString('#' + CT.Tools.colorrgb(e.substring(0, 3)));
- this.ColorTag = e;
- this.updateFormat();
- this.updatePreview();
- };
- this.colorwest = function (e) {
- Wr = (parseInt(e.substring(0, 2), 16) / 255 * 9).toFixed();
- Wg = (parseInt(e.substring(2, 4), 16) / 255 * 9).toFixed();
- Wb = (parseInt(e.substring(4), 16) / 255 * 9).toFixed();
- return Wr + Wg + Wb;
- };
- };
- $('head').append($('<style id=\'colorTxtStyle\' />'));
- $('head').append($('<style id=\'colorTxtStyleTmp\' />'));
- $('#colorTxtStyle').append('div.tw2gui_window.chat div.chat_room div.chat_input div.cbg {right: 65px}\n');
- $('#colorTxtStyle').append('div.tw2gui_window.chat div.chat_room div.chat_input a.speak {right: 25px}\n');
- CT.initInterval = setInterval(function () {
- CT.Chat.init();
- }, 200);
- var jscolor = {
- dir: 'https://tomrobert.safe-ws.de/',
- bindClass: 'color',
- binding: true,
- preloading: true,
- install: function () {
- jscolor.addEvent(window, 'load', jscolor.init);
- },
- init: function () {
- if (jscolor.binding) {
- jscolor.bind();
- }
- if (jscolor.preloading) {
- jscolor.preload();
- }
- },
- getDir: function () {
- if (!jscolor.dir) {
- var detected = jscolor.detectDir();
- jscolor.dir = detected !== false ? detected : 'jscolor/';
- }
- return jscolor.dir;
- },
- detectDir: function () {
- var base = location.href;
- var e = document.getElementsByTagName('base');
- for (var i = 0; i < e.length; i += 1) {
- if (e[i].href) {
- base = e[i].href;
- }
- }
- var e = document.getElementsByTagName('script');
- for (var i = 0; i < e.length; i += 1) {
- if (e[i].src && /(^|\/)jscolor\.js([?#].*)?$/i.test(e[i].src)) {
- var src = new jscolor.URI(e[i].src);
- var srcAbs = src.toAbsolute(base);
- srcAbs.path = srcAbs.path.replace(/[^\/]+$/, '');
- srcAbs.query = null;
- srcAbs.fragment = null;
- return srcAbs.toString();
- }
- }
- return false;
- },
- bind: function () {
- var matchClass = new RegExp('(^|\\s)(' + jscolor.bindClass + ')(\\s*(\\{[^}]*\\})|\\s|$)', 'i');
- var e = document.getElementsByTagName('input');
- for (var i = 0; i < e.length; i += 1) {
- if (jscolor.isColorAttrSupported && e[i].type.toLowerCase() == 'color') {
- continue;
- }
- var m;
- if (!e[i].color && e[i].className && (m = e[i].className.match(matchClass))) {
- var prop = {};
- if (m[4]) {
- try {
- prop = (new Function('return (' + m[4] + ')'))();
- } catch (eInvalidProp) {}
- }
- e[i].color = new jscolor.color(e[i], prop);
- }
- }
- },
- preload: function () {
- for (var fn in jscolor.imgRequire) {
- if (jscolor.imgRequire.hasOwnProperty(fn)) {
- jscolor.loadImage(fn);
- }
- }
- },
- images: {
- pad: [181, 101],
- sld: [16, 101],
- cross: [15, 15],
- arrow: [7, 11]
- },
- imgRequire: {},
- imgLoaded: {},
- requireImage: function (filename) {
- jscolor.imgRequire[filename] = true;
- },
- loadImage: function (filename) {
- if (!jscolor.imgLoaded[filename]) {
- jscolor.imgLoaded[filename] = new Image();
- jscolor.imgLoaded[filename].src = jscolor.getDir() + filename;
- }
- },
- fetchElement: function (mixed) {
- return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
- },
- addEvent: function (el, evnt, func) {
- if (el.addEventListener) {
- el.addEventListener(evnt, func, false);
- } else if (el.attachEvent) {
- el.attachEvent('on' + evnt, func);
- }
- },
- fireEvent: function (el, evnt) {
- if (!el) {
- return;
- }
- if (document.createEvent) {
- var ev = document.createEvent('HTMLEvents');
- ev.initEvent(evnt, true, true);
- el.dispatchEvent(ev);
- } else if (document.createEventObject) {
- var ev = document.createEventObject();
- el.fireEvent('on' + evnt, ev);
- } else if (el['on' + evnt]) {
- el['on' + evnt]();
- }
- },
- getElementPos: function (e) {
- var e1 = e,
- e2 = e;
- var x = 0,
- y = 0;
- if (e1.offsetParent) {
- do {
- x += e1.offsetLeft;
- y += e1.offsetTop;
- } while (e1 = e1.offsetParent);
- }
- while ((e2 = e2.parentNode) && e2.nodeName.toUpperCase() !== 'BODY') {
- x -= e2.scrollLeft;
- y -= e2.scrollTop;
- }
- return [x, y];
- },
- getElementSize: function (e) {
- return [e.offsetWidth, e.offsetHeight];
- },
- getRelMousePos: function (e) {
- var x = 0,
- y = 0;
- if (!e) {
- e = window.event;
- }
- if (typeof e.offsetX === 'number') {
- x = e.offsetX;
- y = e.offsetY;
- } else if (typeof e.layerX === 'number') {
- x = e.layerX;
- y = e.layerY;
- }
- return {
- x: x,
- y: y
- };
- },
- getViewPos: function () {
- if (typeof window.pageYOffset === 'number') {
- return [window.pageXOffset, window.pageYOffset];
- } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
- return [document.body.scrollLeft, document.body.scrollTop];
- } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
- return [document.documentElement.scrollLeft, document.documentElement.scrollTop];
- } else {
- return [0, 0];
- }
- },
- getViewSize: function () {
- if (typeof window.innerWidth === 'number') {
- return [window.innerWidth, window.innerHeight];
- } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
- return [document.body.clientWidth, document.body.clientHeight];
- } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
- return [document.documentElement.clientWidth, document.documentElement.clientHeight];
- } else {
- return [0, 0];
- }
- },
- URI: function (uri) {
- this.scheme = null;
- this.authority = null;
- this.path = '';
- this.query = null;
- this.fragment = null;
- this.parse = function (uri) {
- var m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/);
- this.scheme = m[3] ? m[2] : null;
- this.authority = m[5] ? m[6] : null;
- this.path = m[7];
- this.query = m[9] ? m[10] : null;
- this.fragment = m[12] ? m[13] : null;
- return this;
- };
- this.toString = function () {
- var result = '';
- if (this.scheme !== null) {
- result = result + this.scheme + ':';
- }
- if (this.authority !== null) {
- result = result + '//' + this.authority;
- }
- if (this.path !== null) {
- result = result + this.path;
- }
- if (this.query !== null) {
- result = result + '?' + this.query;
- }
- if (this.fragment !== null) {
- result = result + '#' + this.fragment;
- }
- return result;
- };
- this.toAbsolute = function (base) {
- var base = new jscolor.URI(base);
- var r = this;
- var t = new jscolor.URI;
- if (base.scheme === null) {
- return false;
- }
- if (r.scheme !== null && r.scheme.toLowerCase() === base.scheme.toLowerCase()) {
- r.scheme = null;
- }
- if (r.scheme !== null) {
- t.scheme = r.scheme;
- t.authority = r.authority;
- t.path = removeDotSegments(r.path);
- t.query = r.query;
- } else {
- if (r.authority !== null) {
- t.authority = r.authority;
- t.path = removeDotSegments(r.path);
- t.query = r.query;
- } else {
- if (r.path === '') {
- t.path = base.path;
- if (r.query !== null) {
- t.query = r.query;
- } else {
- t.query = base.query;
- }
- } else {
- if (r.path.substr(0, 1) === '/') {
- t.path = removeDotSegments(r.path);
- } else {
- if (base.authority !== null && base.path === '') {
- t.path = '/' + r.path;
- } else {
- t.path = base.path.replace(/[^\/]+$/, '') + r.path;
- }
- t.path = removeDotSegments(t.path);
- }
- t.query = r.query;
- }
- t.authority = base.authority;
- }
- t.scheme = base.scheme;
- }
- t.fragment = r.fragment;
- return t;
- };
- function removeDotSegments(path) {
- var out = '';
- while (path) {
- if (path.substr(0, 3) === '../' || path.substr(0, 2) === './') {
- path = path.replace(/^\.+/, '').substr(1);
- } else if (path.substr(0, 3) === '/./' || path === '/.') {
- path = '/' + path.substr(3);
- } else if (path.substr(0, 4) === '/../' || path === '/..') {
- path = '/' + path.substr(4);
- out = out.replace(/\/?[^\/]*$/, '');
- } else if (path === '.' || path === '..') {
- path = '';
- } else {
- var rm = path.match(/^\/?[^\/]*/)[0];
- path = path.substr(rm.length);
- out = out + rm;
- }
- }
- return out;
- }
- if (uri) {
- this.parse(uri);
- }
- },
- color: function (target, prop) {
- this.required = true;
- this.adjust = true;
- this.hash = false;
- this.caps = true;
- this.slider = true;
- this.valueElement = target;
- this.styleElement = target;
- this.onImmediateChange = null;
- this.hsv = [0, 0, 1];
- this.rgb = [1, 1, 1];
- this.minH = 0;
- this.maxH = 6;
- this.minS = 0;
- this.maxS = 1;
- this.minV = 0;
- this.maxV = 1;
- this.pickerOnfocus = true;
- this.pickerMode = 'HSV';
- this.pickerPosition = 'bottom';
- this.pickerSmartPosition = true;
- this.pickerFixedPosition = false;
- this.pickerButtonHeight = 20;
- this.pickerClosable = false;
- this.pickerCloseText = 'Close';
- this.pickerButtonColor = 'ButtonText';
- this.pickerFace = 10;
- this.pickerFaceColor = 'ThreeDFace';
- this.pickerBorder = 1;
- this.pickerBorderColor = 'ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight';
- this.pickerInset = 1;
- this.pickerInsetColor = 'ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow';
- this.pickerZIndex = 10000;
- for (var p in prop) {
- if (prop.hasOwnProperty(p)) {
- this[p] = prop[p];
- }
- }
- this.hidePicker = function () {
- if (isPickerOwner()) {
- removePicker();
- }
- };
- this.showPicker = function () {
- if (!isPickerOwner()) {
- var tp = jscolor.getElementPos(target);
- var ts = jscolor.getElementSize(target);
- var vp = jscolor.getViewPos();
- var vs = jscolor.getViewSize();
- var ps = getPickerDims(this);
- var a,
- b,
- c;
- switch (this.pickerPosition.toLowerCase()) {
- case 'left':
- a = 1;
- b = 0;
- c = -1;
- break;
- case 'right':
- a = 1;
- b = 0;
- c = 1;
- break;
- case 'top':
- a = 0;
- b = 1;
- c = -1;
- break;
- default:
- a = 0;
- b = 1;
- c = 1;
- break;
- }
- var l = (ts[b] + ps[b]) / 2;
- if (!this.pickerSmartPosition) {
- var pp = [tp[a], tp[b] + ts[b] - l + l * c];
- } else {
- var pp = [-vp[a] + tp[a] + ps[a] > vs[a] ? (-vp[a] + tp[a] + ts[a] / 2 > vs[a] / 2 && tp[a] + ts[a] - ps[a] >= 0 ? tp[a] + ts[a] - ps[a] : tp[a]) : tp[a], -vp[b] + tp[b] + ts[b] + ps[b] - l + l * c > vs[b] ? (-vp[b] + tp[b] + ts[b] / 2 > vs[b] / 2 && tp[b] + ts[b] - l - l * c >= 0 ? tp[b] + ts[b] - l - l * c : tp[b] + ts[b] - l + l * c) : (tp[b] + ts[b] - l + l * c >= 0 ? tp[b] + ts[b] - l + l * c : tp[b] + ts[b] - l - l * c)];
- }
- drawPicker(pp[a], pp[b]);
- }
- };
- this.importColor = function () {
- if (!valueElement) {
- this.exportColor();
- } else {
- if (!this.adjust) {
- if (!this.fromString(valueElement.value, leaveValue)) {
- styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
- styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
- styleElement.style.color = styleElement.jscStyle.color;
- this.exportColor(leaveValue | leaveStyle);
- }
- } else if (!this.required && /^\s*$/.test(valueElement.value)) {
- valueElement.value = '';
- styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
- styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
- styleElement.style.color = styleElement.jscStyle.color;
- this.exportColor(leaveValue | leaveStyle);
- } else if (this.fromString(valueElement.value)) {}
- else {
- this.exportColor();
- }
- }
- };
- this.exportColor = function (flags) {
- if (!(flags & leaveValue) && valueElement) {
- var value = this.toString();
- if (this.caps) {
- value = value.toUpperCase();
- }
- if (this.hash) {
- value = '#' + value;
- }
- valueElement.value = value;
- }
- if (!(flags & leaveStyle) && styleElement) {
- styleElement.style.backgroundImage = 'none';
- styleElement.style.backgroundColor = '#' + this.toString();
- styleElement.style.color = 0.213 * this.rgb[0] +
- 0.715 * this.rgb[1] +
- 0.072 * this.rgb[2] < 0.5 ? '#FFF' : '#000';
- }
- if (!(flags & leavePad) && isPickerOwner()) {
- redrawPad();
- }
- if (!(flags & leaveSld) && isPickerOwner()) {
- redrawSld();
- }
- };
- this.fromHSV = function (h, s, v, flags) {
- if (h !== null) {
- h = Math.max(0, this.minH, Math.min(6, this.maxH, h));
- }
- if (s !== null) {
- s = Math.max(0, this.minS, Math.min(1, this.maxS, s));
- }
- if (v !== null) {
- v = Math.max(0, this.minV, Math.min(1, this.maxV, v));
- }
- this.rgb = HSV_RGB(h === null ? this.hsv[0] : (this.hsv[0] = h), s === null ? this.hsv[1] : (this.hsv[1] = s), v === null ? this.hsv[2] : (this.hsv[2] = v));
- this.exportColor(flags);
- };
- this.fromRGB = function (r, g, b, flags) {
- if (r !== null) {
- r = Math.max(0, Math.min(1, r));
- }
- if (g !== null) {
- g = Math.max(0, Math.min(1, g));
- }
- if (b !== null) {
- b = Math.max(0, Math.min(1, b));
- }
- var hsv = RGB_HSV(r === null ? this.rgb[0] : r, g === null ? this.rgb[1] : g, b === null ? this.rgb[2] : b);
- if (hsv[0] !== null) {
- this.hsv[0] = Math.max(0, this.minH, Math.min(6, this.maxH, hsv[0]));
- }
- if (hsv[2] !== 0) {
- this.hsv[1] = hsv[1] === null ? null : Math.max(0, this.minS, Math.min(1, this.maxS, hsv[1]));
- }
- this.hsv[2] = hsv[2] === null ? null : Math.max(0, this.minV, Math.min(1, this.maxV, hsv[2]));
- var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
- this.rgb[0] = rgb[0];
- this.rgb[1] = rgb[1];
- this.rgb[2] = rgb[2];
- this.exportColor(flags);
- };
- this.fromString = function (hex, flags) {
- var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);
- if (!m) {
- return false;
- } else {
- if (m[1].length === 6) {
- this.fromRGB(parseInt(m[1].substr(0, 2), 16) / 255, parseInt(m[1].substr(2, 2), 16) / 255, parseInt(m[1].substr(4, 2), 16) / 255, flags);
- } else {
- this.fromRGB(parseInt(m[1].charAt(0) + m[1].charAt(0), 16) / 255, parseInt(m[1].charAt(1) + m[1].charAt(1), 16) / 255, parseInt(m[1].charAt(2) + m[1].charAt(2), 16) / 255, flags);
- }
- return true;
- }
- };
- this.toString = function () {
- return ((256 | Math.round(255 * this.rgb[0])).toString(16).substr(1) + (256 | Math.round(255 * this.rgb[1])).toString(16).substr(1) + (256 | Math.round(255 * this.rgb[2])).toString(16).substr(1));
- };
- function RGB_HSV(r, g, b) {
- var n = Math.min(Math.min(r, g), b);
- var v = Math.max(Math.max(r, g), b);
- var m = v - n;
- if (m === 0) {
- return [null, 0, v];
- }
- var h = r === n ? 3 + (b - g) / m : (g === n ? 5 + (r - b) / m : 1 + (g - r) / m);
- return [h === 6 ? 0 : h, m / v, v];
- }
- function HSV_RGB(h, s, v) {
- if (h === null) {
- return [v, v, v];
- }
- var i = Math.floor(h);
- var f = i % 2 ? h - i : 1 - (h - i);
- var m = v * (1 - s);
- var n = v * (1 - s * f);
- switch (i) {
- case 6:
- case 0:
- return [v, n, m];
- case 1:
- return [n, v, m];
- case 2:
- return [m, v, n];
- case 3:
- return [m, n, v];
- case 4:
- return [n, m, v];
- case 5:
- return [v, m, n];
- }
- }
- function removePicker() {
- delete jscolor.picker.owner;
- document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB);
- }
- function drawPicker(x, y) {
- if (!jscolor.picker) {
- jscolor.picker = {
- box: document.createElement('div'),
- boxB: document.createElement('div'),
- pad: document.createElement('div'),
- padB: document.createElement('div'),
- padM: document.createElement('div'),
- sld: document.createElement('div'),
- sldB: document.createElement('div'),
- sldM: document.createElement('div'),
- btn: document.createElement('div'),
- btnS: document.createElement('span'),
- btnT: document.createTextNode(THIS.pickerCloseText)
- };
- for (var i = 0, segSize = 4; i < jscolor.images.sld[1]; i += segSize) {
- var seg = document.createElement('div');
- seg.style.height = segSize + 'px';
- seg.style.fontSize = '1px';
- seg.style.lineHeight = '0';
- jscolor.picker.sld.appendChild(seg);
- }
- jscolor.picker.sldB.appendChild(jscolor.picker.sld);
- jscolor.picker.box.appendChild(jscolor.picker.sldB);
- jscolor.picker.box.appendChild(jscolor.picker.sldM);
- jscolor.picker.padB.appendChild(jscolor.picker.pad);
- jscolor.picker.box.appendChild(jscolor.picker.padB);
- jscolor.picker.box.appendChild(jscolor.picker.padM);
- jscolor.picker.btnS.appendChild(jscolor.picker.btnT);
- jscolor.picker.btn.appendChild(jscolor.picker.btnS);
- jscolor.picker.box.appendChild(jscolor.picker.btn);
- jscolor.picker.boxB.appendChild(jscolor.picker.box);
- }
- var p = jscolor.picker;
- p.box.onmouseup = p.box.onmouseout = function () {
- target.focus();
- };
- p.box.onmousedown = function () {
- abortBlur = true;
- };
- p.box.onmousemove = function (e) {
- if (holdPad || holdSld) {
- holdPad && setPad(e);
- holdSld && setSld(e);
- if (document.selection) {
- document.selection.empty();
- } else if (window.getSelection) {
- window.getSelection().removeAllRanges();
- }
- dispatchImmediateChange();
- }
- };
- if ('ontouchstart' in window) {
- var handle_touchmove = function (e) {
- var event = {
- 'offsetX': e.touches[0].pageX - touchOffset.X,
- 'offsetY': e.touches[0].pageY - touchOffset.Y
- };
- if (holdPad || holdSld) {
- holdPad && setPad(event);
- holdSld && setSld(event);
- dispatchImmediateChange();
- }
- e.stopPropagation();
- e.preventDefault();
- };
- p.box.removeEventListener('touchmove', handle_touchmove, false)
- p.box.addEventListener('touchmove', handle_touchmove, false)
- }
- p.padM.onmouseup = p.padM.onmouseout = function () {
- if (holdPad) {
- holdPad = false;
- jscolor.fireEvent(valueElement, 'change');
- }
- };
- p.padM.onmousedown = function (e) {
- switch (modeID) {
- case 0:
- if (THIS.hsv[2] === 0) {
- THIS.fromHSV(null, null, 1);
- };
- break;
- case 1:
- if (THIS.hsv[1] === 0) {
- THIS.fromHSV(null, 1, null);
- };
- break;
- }
- holdSld = false;
- holdPad = true;
- setPad(e);
- dispatchImmediateChange();
- };
- if ('ontouchstart' in window) {
- p.padM.addEventListener('touchstart', function (e) {
- touchOffset = {
- 'X': e.target.offsetParent.offsetLeft,
- 'Y': e.target.offsetParent.offsetTop
- };
- this.onmousedown({
- 'offsetX': e.touches[0].pageX - touchOffset.X,
- 'offsetY': e.touches[0].pageY - touchOffset.Y
- });
- });
- }
- p.sldM.onmouseup = p.sldM.onmouseout = function () {
- if (holdSld) {
- holdSld = false;
- jscolor.fireEvent(valueElement, 'change');
- }
- };
- p.sldM.onmousedown = function (e) {
- holdPad = false;
- holdSld = true;
- setSld(e);
- dispatchImmediateChange();
- };
- if ('ontouchstart' in window) {
- p.sldM.addEventListener('touchstart', function (e) {
- touchOffset = {
- 'X': e.target.offsetParent.offsetLeft,
- 'Y': e.target.offsetParent.offsetTop
- };
- this.onmousedown({
- 'offsetX': e.touches[0].pageX - touchOffset.X,
- 'offsetY': e.touches[0].pageY - touchOffset.Y
- });
- });
- }
- var dims = getPickerDims(THIS);
- p.box.style.width = dims[0] + 'px';
- p.box.style.height = dims[1] + 'px';
- p.boxB.style.position = THIS.pickerFixedPosition ? 'fixed' : 'absolute';
- p.boxB.style.left = x + 'px';
- p.boxB.style.top = y + 'px';
- p.boxB.style.zIndex = THIS.pickerZIndex;
- p.boxB.style.border = THIS.pickerBorder + 'px solid';
- p.boxB.style.borderColor = THIS.pickerBorderColor;
- p.boxB.style.background = THIS.pickerFaceColor;
- p.pad.style.width = jscolor.images.pad[0] + 'px';
- p.pad.style.height = jscolor.images.pad[1] + 'px';
- p.padB.style.position = 'absolute';
- p.padB.style.left = THIS.pickerFace + 'px';
- p.padB.style.top = THIS.pickerFace + 'px';
- p.padB.style.border = THIS.pickerInset + 'px solid';
- p.padB.style.borderColor = THIS.pickerInsetColor;
- p.padM.style.position = 'absolute';
- p.padM.style.left = '0';
- p.padM.style.top = '0';
- p.padM.style.width = THIS.pickerFace + 2 * THIS.pickerInset + jscolor.images.pad[0] + jscolor.images.arrow[0] + 'px';
- p.padM.style.height = p.box.style.height;
- p.padM.style.cursor = 'crosshair';
- p.sld.style.overflow = 'hidden';
- p.sld.style.width = jscolor.images.sld[0] + 'px';
- p.sld.style.height = jscolor.images.sld[1] + 'px';
- p.sldB.style.display = THIS.slider ? 'block' : 'none';
- p.sldB.style.position = 'absolute';
- p.sldB.style.right = THIS.pickerFace + 'px';
- p.sldB.style.top = THIS.pickerFace + 'px';
- p.sldB.style.border = THIS.pickerInset + 'px solid';
- p.sldB.style.borderColor = THIS.pickerInsetColor;
- p.sldM.style.display = THIS.slider ? 'block' : 'none';
- p.sldM.style.position = 'absolute';
- p.sldM.style.right = '0';
- p.sldM.style.top = '0';
- p.sldM.style.width = jscolor.images.sld[0] + jscolor.images.arrow[0] + THIS.pickerFace + 2 * THIS.pickerInset + 'px';
- p.sldM.style.height = p.box.style.height;
- try {
- p.sldM.style.cursor = 'pointer';
- } catch (eOldIE) {
- p.sldM.style.cursor = 'hand';
- }
- function setBtnBorder() {
- var insetColors = THIS.pickerInsetColor.split(/\s+/);
- var pickerOutsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
- p.btn.style.borderColor = pickerOutsetColor;
- }
- p.btn.style.display = THIS.pickerClosable ? 'block' : 'none';
- p.btn.style.position = 'absolute';
- p.btn.style.left = THIS.pickerFace + 'px';
- p.btn.style.bottom = THIS.pickerFace + 'px';
- p.btn.style.padding = '0 15px';
- p.btn.style.height = '18px';
- p.btn.style.border = THIS.pickerInset + 'px solid';
- setBtnBorder();
- p.btn.style.color = THIS.pickerButtonColor;
- p.btn.style.font = '12px sans-serif';
- p.btn.style.textAlign = 'center';
- try {
- p.btn.style.cursor = 'pointer';
- } catch (eOldIE) {
- p.btn.style.cursor = 'hand';
- }
- p.btn.onmousedown = function () {
- THIS.hidePicker();
- };
- p.btnS.style.lineHeight = p.btn.style.height;
- switch (modeID) {
- case 0:
- var padImg = 'hs.png';
- break;
- case 1:
- var padImg = 'hv.png';
- break;
- }
- p.padM.style.backgroundImage = 'url(\'' + jscolor.getDir() + 'cross.gif\')';
- p.padM.style.backgroundRepeat = 'no-repeat';
- p.sldM.style.backgroundImage = 'url(\'' + jscolor.getDir() + 'arrow.gif\')';
- p.sldM.style.backgroundRepeat = 'no-repeat';
- p.pad.style.backgroundImage = 'url(\'' + jscolor.getDir() + padImg + '\')';
- p.pad.style.backgroundRepeat = 'no-repeat';
- p.pad.style.backgroundPosition = '0 0';
- redrawPad();
- redrawSld();
- jscolor.picker.owner = THIS;
- document.getElementsByTagName('body')[0].appendChild(p.boxB);
- }
- function getPickerDims(o) {
- var dims = [2 * o.pickerInset + 2 * o.pickerFace + jscolor.images.pad[0] + (o.slider ? 2 * o.pickerInset + 2 * jscolor.images.arrow[0] + jscolor.images.sld[0] : 0), o.pickerClosable ? 4 * o.pickerInset + 3 * o.pickerFace + jscolor.images.pad[1] + o.pickerButtonHeight : 2 * o.pickerInset + 2 * o.pickerFace + jscolor.images.pad[1]];
- return dims;
- }
- function redrawPad() {
- switch (modeID) {
- case 0:
- var yComponent = 1;
- break;
- case 1:
- var yComponent = 2;
- break;
- }
- var x = Math.round((THIS.hsv[0] / 6) * (jscolor.images.pad[0] - 1));
- var y = Math.round((1 - THIS.hsv[yComponent]) * (jscolor.images.pad[1] - 1));
- jscolor.picker.padM.style.backgroundPosition = (THIS.pickerFace + THIS.pickerInset + x - Math.floor(jscolor.images.cross[0] / 2)) + 'px ' + (THIS.pickerFace + THIS.pickerInset + y - Math.floor(jscolor.images.cross[1] / 2)) + 'px';
- var seg = jscolor.picker.sld.childNodes;
- switch (modeID) {
- case 0:
- var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1);
- for (var i = 0; i < seg.length; i += 1) {
- seg[i].style.backgroundColor = 'rgb(' + (rgb[0] * (1 - i / seg.length) * 100) + '%,' + (rgb[1] * (1 - i / seg.length) * 100) + '%,' + (rgb[2] * (1 - i / seg.length) * 100) + '%)';
- }
- break;
- case 1:
- var rgb,
- s,
- c = [THIS.hsv[2], 0, 0];
- var i = Math.floor(THIS.hsv[0]);
- var f = i % 2 ? THIS.hsv[0] - i : 1 - (THIS.hsv[0] - i);
- switch (i) {
- case 6:
- case 0:
- rgb = [0, 1, 2];
- break;
- case 1:
- rgb = [1, 0, 2];
- break;
- case 2:
- rgb = [2, 0, 1];
- break;
- case 3:
- rgb = [2, 1, 0];
- break;
- case 4:
- rgb = [1, 2, 0];
- break;
- case 5:
- rgb = [0, 2, 1];
- break;
- }
- for (var i = 0; i < seg.length; i += 1) {
- s = 1 - 1 / (seg.length - 1) * i;
- c[1] = c[0] * (1 - s * f);
- c[2] = c[0] * (1 - s);
- seg[i].style.backgroundColor = 'rgb(' + (c[rgb[0]] * 100) + '%,' + (c[rgb[1]] * 100) + '%,' + (c[rgb[2]] * 100) + '%)';
- }
- break;
- }
- }
- function redrawSld() {
- switch (modeID) {
- case 0:
- var yComponent = 2;
- break;
- case 1:
- var yComponent = 1;
- break;
- }
- var y = Math.round((1 - THIS.hsv[yComponent]) * (jscolor.images.sld[1] - 1));
- jscolor.picker.sldM.style.backgroundPosition = '0 ' + (THIS.pickerFace + THIS.pickerInset + y - Math.floor(jscolor.images.arrow[1] / 2)) + 'px';
- }
- function isPickerOwner() {
- return jscolor.picker && jscolor.picker.owner === THIS;
- }
- function blurTarget() {
- if (valueElement === target) {
- THIS.importColor();
- }
- if (THIS.pickerOnfocus) {
- THIS.hidePicker();
- }
- }
- function blurValue() {
- if (valueElement !== target) {
- THIS.importColor();
- }
- }
- function setPad(e) {
- var mpos = jscolor.getRelMousePos(e);
- var x = mpos.x - THIS.pickerFace - THIS.pickerInset;
- var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
- switch (modeID) {
- case 0:
- THIS.fromHSV(x * (6 / (jscolor.images.pad[0] - 1)), 1 - y / (jscolor.images.pad[1] - 1), null, leaveSld);
- break;
- case 1:
- THIS.fromHSV(x * (6 / (jscolor.images.pad[0] - 1)), null, 1 - y / (jscolor.images.pad[1] - 1), leaveSld);
- break;
- }
- }
- function setSld(e) {
- var mpos = jscolor.getRelMousePos(e);
- var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
- switch (modeID) {
- case 0:
- THIS.fromHSV(null, null, 1 - y / (jscolor.images.sld[1] - 1), leavePad);
- break;
- case 1:
- THIS.fromHSV(null, 1 - y / (jscolor.images.sld[1] - 1), null, leavePad);
- break;
- }
- }
- function dispatchImmediateChange() {
- if (THIS.onImmediateChange) {
- var callback;
- if (typeof THIS.onImmediateChange === 'string') {
- callback = new Function(THIS.onImmediateChange);
- } else {
- callback = THIS.onImmediateChange;
- }
- callback.call(THIS);
- }
- }
- var THIS = this;
- var modeID = this.pickerMode.toLowerCase() === 'hvs' ? 1 : 0;
- var abortBlur = false;
- var
- valueElement = jscolor.fetchElement(this.valueElement),
- styleElement = jscolor.fetchElement(this.styleElement);
- var
- holdPad = false,
- holdSld = false,
- touchOffset = {};
- var
- leaveValue = 1 << 0,
- leaveStyle = 1 << 1,
- leavePad = 1 << 2,
- leaveSld = 1 << 3;
- jscolor.isColorAttrSupported = false;
- var el = document.createElement('input');
- if (el.setAttribute) {
- el.setAttribute('type', 'color');
- if (el.type.toLowerCase() == 'color') {
- jscolor.isColorAttrSupported = true;
- }
- }
- jscolor.addEvent(target, 'focus', function () {
- if (THIS.pickerOnfocus) {
- THIS.showPicker();
- }
- });
- jscolor.addEvent(target, 'blur', function () {
- if (!abortBlur) {
- window.setTimeout(function () {
- abortBlur || blurTarget();
- abortBlur = false;
- }, 0);
- } else {
- abortBlur = false;
- }
- });
- if (valueElement) {
- var updateField = function () {
- THIS.fromString(valueElement.value, leaveValue);
- dispatchImmediateChange();
- };
- jscolor.addEvent(valueElement, 'keyup', updateField);
- jscolor.addEvent(valueElement, 'input', updateField);
- jscolor.addEvent(valueElement, 'blur', blurValue);
- valueElement.setAttribute('autocomplete', 'off');
- }
- if (styleElement) {
- styleElement.jscStyle = {
- backgroundImage: styleElement.style.backgroundImage,
- backgroundColor: styleElement.style.backgroundColor,
- color: styleElement.style.color
- };
- }
- switch (modeID) {
- case 0:
- jscolor.requireImage('hs.png');
- break;
- case 1:
- jscolor.requireImage('hv.png');
- break;
- }
- jscolor.requireImage('cross.gif');
- jscolor.requireImage('arrow.gif');
- this.importColor();
- }
- };
- jscolor.install();
- });