// ==UserScript== // @name SpeedCalling for Popmundo // @namespace http://popmundo.psicofrenia.com/ // @description Calls everyone in your contact list // @include http://*.popmundo.com/World/Popmundo.aspx/Character/AddressBook // @include http://*.popmundo.com/World/Popmundo.aspx/Interact/Phone/* // @require https://greasyfork.org/scripts/3355-popmundo-lib/code/popmundo_lib.js?version=10024 // @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js // @grant GM_info // @version 3.2 // @downloadURL https://update.greasyfork.icu/scripts/3357/SpeedCalling%20for%20Popmundo.user.js // @updateURL https://update.greasyfork.icu/scripts/3357/SpeedCalling%20for%20Popmundo.meta.js // ==/UserScript== var gexQuery = jQuery.noConflict(); // ------------------------------------------------------------------------ // ----------- DEFINITIONS AREA var _locVersion_SpeedCalling = '3.1'; // External script with SpeedCalling functions var _jsFile = 'http://resources.psicofrenia.com/popmundo.js'; // Logical variable to detect if the script should use Portuguese or English var _isPortuguese = 0; // Current URL var _urlCurrent = window.location.pathname; // Url to make the calls var _urlToCall = '/World/Popmundo.aspx/Interact/Phone/'; // Url to mark the page as usable by this script var _urlToCall_Token = '#toCall'; var _urlToContact_Token = '#toContact'; // Id of the char logged in var _idMainChar = 0; // Id of the char currently being interacted with var _idCurrentChar = 0; // Id to be used to store values on local storage var _idStorage = '_GEX_MAIN_ID_'; // Array with runtimes values var _valuesRunTime = {}; // Array with stored values var _valuesStorage = {}; // Default value for callings var _valueDefault = 24; // All possible values for calling var _valueCalls = Array(9999,121,24,61,58,26,25,73,74); // ------------------------------------------------------------------------ // ----------- GLOBAL CODE appendJsFile(_jsFile); detectLanguage(); getIdMain(); checkVersion(); if( _urlCurrent.match(/\/World\/Popmundo.aspx\/Character\/AddressBook/g)){ executeOnPage_Book(); } if( _urlCurrent.match(/\/World\/Popmundo.aspx\/Interact\/Phone/g)){ executeOnPage_Contact(); } // ------------------------------------------------------------------------ // ----------- FUNCTIONS AREA //Adds any external JS Script to the Popmundo page function appendJsFile(jsUrl){ var scriptTag = ''; gexQuery(scriptTag).appendTo('head'); } // Detects if Popmundo is being used in one of the Portuguese translations function detectLanguage(){ var langIdentifier = 'notícias'; if (gexQuery('#ctl00_ucMenu_lnkStart').text().toLowerCase() == langIdentifier) _isPortuguese = 1; } //Gets the correct label for the language function getLabel(label){ var translations = new Array(); translations.call_everyone = 'Call everyone#Ligar para todos'; translations.bug_report = 'Report a bug#Reportar um bug'; translations.update = 'Theres a new Version avaiable. Click here to update SpeedCalling.#Há uma nova versão disponível. Clique aqui para atualizá-la.'; translations.i9999 = 'Dont Call#Não telefonar'; translations.i121 = 'Gossip on the phone#Fofocar ao telefone'; translations.i24 = 'Wazzup call#Ligar para papear'; translations.i61 = 'SMS friendly text#Mandar mensagem no celular'; translations.i58 = 'SMS funny pic#Mandar foto engraçada por MMS'; translations.i26 = 'Prank call#Passar trote'; translations.i25 = 'Lover call#Ligar para namorar'; translations.i73 = 'Flirty Phone call#Ligar para flertar'; translations.i74 = 'Flirty SMS#Flertar por SMS'; if(translations[label] == undefined) return 'OOps!!!'; return translations[label].split("#")[_isPortuguese]; } //Gets the ID of the logged char and sets the storage ID function getIdMain(){ _idMainChar = gexQuery('.idHolder').first().html(); _idStorage += _idMainChar; } //Gets the ID of the logged char and sets the storage ID function getIdCurrent(){ _idMainChar = gexQuery('.idHolder').first().html(); } //Returns the button to make the calls function getCallButton(){ var callButton = "" callButton += checkVersion(); callButton += ""; callButton += ""; callButton += ""; gexQuery(callButton).insertAfter('thead'); } //Returns the character ID based on the link URI function getIdFromUrl(value) { var urlItems = value.split('/'); return urlItems[urlItems.length -1]; } //Loads all contact entries values into memory and updates localStorage function loadValues(){ //Loads all current contacts (existant in the links) gexQuery("a[id^='ctl00_cphLeftColumn_ctl00_repAddressBook_ctl'][id$=_lnkCharacter]") .each(function() { var key = getIdFromUrl(gexQuery(this).attr('href')); _valuesRunTime[key] = _valueDefault; }); //Updates the localStorage if not present if(window.localStorage.getItem(_idStorage) === null) { window.localStorage.setItem(_idStorage,JSON.stringify(_valuesRunTime)); _valuesStorage = _valuesRunTime; } else { _valuesStorage = JSON.parse(window.localStorage.getItem(_idStorage)); } //Loads stored values into runtime values for(var key in _valuesRunTime) { if(typeof(_valuesStorage[key]) != 'undefined') { _valuesRunTime[key] = _valuesStorage[key]; } } //Saves the localStorage window.localStorage.setItem(_idStorage,JSON.stringify(_valuesRunTime)); } //Returns the combobox ID based on contact ID function getSelect() { //The combobox Id var tmpSelId = 'gex_CharId_' + _idMainChar + '_ContId_' + _idCurrentChar; //The script that will be used to store the changings in the combobox var tmpScript = " onchange=\"storeValue('" + _idStorage + "', '" + _idCurrentChar + "', '" + tmpSelId + "')\" " //The combobox itself var tmpSelect = "
"; return tmpSelect; } //Creates the selects to be used with the contacts function getsCallSelects(){ gexQuery("a[id^='ctl00_cphLeftColumn_ctl00_repAddressBook_ctl'][id$=_lnkCharacter]") .each(function() { var objId = gexQuery(this).attr('id'); _idCurrentChar = getIdFromUrl(gexQuery(this).attr('href')); gexQuery(this).attr('href',_urlToCall + _idCurrentChar + _urlToCall_Token + _idMainChar); gexQuery(this).attr('target','_BLANK'); var gexSelect = getSelect(); gexQuery(gexSelect).insertAfter("a[id^='" + objId + "']"); }); } //Executes on Phonebook page function executeOnPage_Book(){ getCallButton(); loadValues(); getsCallSelects(); } function executeOnPage_Contact(){ //Exits if not to be used by this script var tmpLocation = window.location.href; if(tmpLocation.indexOf("#toCall") < 5) exit; //Gets current char Id tmpIdCurrentChar = gexQuery('.idHolder').eq(1).html(); //Calls current char if activated var tmpAction = 9999; gexQuery("select[id='ctl00_cphTopColumn_ctl00_ddlInteractionTypes']") .each(function() { _valuesStorage = JSON.parse(window.localStorage.getItem(_idStorage)); tmpAction = _valuesStorage[tmpIdCurrentChar]; }); //Don't call if set to not to call if(tmpAction == 9999) exit; //Changes the select to the right value gexQuery("select option:selected").attr("selected", false); gexQuery("select option[value='" + tmpAction + "']").attr("selected", true); gexQuery("#ctl00_cphTopColumn_ctl00_btnInteract").click(); } //Checks if the script is updated and adds a links to update if it's not function checkVersion(){ if (_locVersion_SpeedCalling == GM_info.script.version) return ''; return '

' + getLabel('update') + '

'; }