// ==UserScript== // @name JR Mturk Panda Crazy // @version 0.3.12 // @description Collects panda's for you at a certain cycle instead of timers. Lot of organizing of panda's and grouping them together to start and stop them at once. // @author (JohnnyRS on mturkgrind.com and mturkcrowd.com) johnnyrs@allbyjohn.com // @include http*://www.mturk.com/mturk/welcome?pandacrazy=on* // @require http://code.jquery.com/jquery-2.1.4.min.js // @require http://code.jquery.com/ui/1.11.4/jquery-ui.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-layout/1.3.0-rc-30.79/jquery.layout.min.js // @resource jQueryUICSS http://code.jquery.com/ui/1.11.4/themes/pepper-grinder/jquery-ui.css // @resource jQueryLayoutCSS https://cdnjs.cloudflare.com/ajax/libs/jquery-layout/1.3.0-rc-30.79/layout-default.css // @connect allbyjohn.com // @connect mturk.com // @connect tiny.cc // @connect ibotta.com // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant GM_getResourceText // @grant GM_setClipboard // @namespace https://greasyfork.org/users/6406 // @downloadURL none // ==/UserScript== var gScriptVersion = "0.3.12"; var gScriptName = "pandacrazy"; var gDatabaseVersion = "JRAPR16-1.1-1.1.1"; // JR[Date]-[requesters DB Reset].[Alarms DB reset]-[requesters DB Version].[Options DB Version].[Tabs DB Version] var gResetDBVersion = gDatabaseVersion.split("-")[1]; var gLocation = window.location.href, gLastQueueCheck = null, gNumId=0, gQueueCheckinProgress=false, queueDelay=[], gNotifications = true; var gSlowDownAuto = true, gResetAllData = false, gDelayedSave = false, gScriptStatus = "normal", gFullQueue = false, gFullQueueTimer = null; var gSavedSearchArea = "", gSavedAddUrl = "", gMyLayout = null, gAcceptedLogTab = null, gStatusLogTab = null, gQueueWatchTab = null; var gMainData = {"hitCollection":{},"displayInfo":"1","accepted":0,"skipped":0,"errors":0,"searched":0,"noHits":0,"fullQueue":0,"orphan":0,"tooFast":0,"savedCycleNum":1, "hitsInQueue":0,"queueStatus":null,"notQual":0,"lastElapsed":0,"jobs":0,"payCounter":0.00,"totalEarnings":0.00,"projectedEarnings":0.00,"missed":0}; var gMainMenu = [{"name":"Main","theobject":null}]; var gHitBgColor="#AFEEEE", gFilteredHitBgColor="#D1E5E5", gSearchesHitBgColor="#AED2D2", gButtonOffBgColor="#FFFFF0", gButtonOnBgColor="#008000"; var gButtonDelayHamBgColor="#00A3CC", gButtonDisabledBgColor="#D3D3D3", gHitMutedColor="#8B4513", gBlockedBgColor="#3D3D3D"; var gTitleColor="#000080", gButtonOffColor="black", gButtonOnColor="white", gButtonDisabledColor="#808080", gNotQualedBgColor="#DDA0DD", gBlockedColor = "#FFF5EE"; var gHitMutedBorderStyle="dotted", gHitBorderStyle="solid", gHitTextColor="#000000", gHitShortIdColor = "#551A8B"; var gZingOptions = { "0.01":{"SearchGroupAllowed":1,"TallyCountTotalAllowed":0,"MaxProductsSearch":0,"AcceptCodesSearching":false,"MaxReceiptImages":3}, "0.03":{"SearchGroupAllowed":2,"TallyCountTotalAllowed":0,"MaxProductsSearch":2,"AcceptCodesSearching":true,"MaxReceiptImages":3}, "0.05":{"SearchGroupAllowed":3,"TallyCountTotalAllowed":0,"MaxProductsSearch":4,"AcceptCodesSearching":true,"MaxReceiptImages":4}, "0.07":{"SearchGroupAllowed":7,"TallyCountTotalAllowed":0,"MaxProductsSearch":5,"AcceptCodesSearching":true,"MaxReceiptImages":8} }; var gZingFuncOptions = { "1":{"filterName":"Parse Zing Hit Page","functionName":parseZingHitPage} }; var gAlarmSounds = { "less2":{"nameVar":"JR_PANDA_Soundless2","default":"http://tiny.cc/c6c1ay","audio":null,"desc":"Hits paying less than |: ","payRate":"0.02","lessMinutes":"99","base64":null}, "less2Short":{"nameVar":"JR_PANDA_Soundless2Short","default":"http://tiny.cc/kyh1ay","audio":null,"desc":"Hits paying less than | with a short timer less than | minute(s): ","payRate":"0.02","lessMinutes":"2","base64":null}, "less5":{"nameVar":"JR_PANDA_Soundless5","default":"http://tiny.cc/g7h1ay","audio":null,"desc":"Hits paying less than |: ","payRate":"0.05","lessMinutes":"99","base64":null}, "less5Short":{"nameVar":"JR_PANDA_Soundless5Short","default":"http://tiny.cc/99h1ay","audio":null,"desc":"Hits paying less than | with a short timer less than | minute(s): ","payRate":"0.05","lessMinutes":"5","base64":null}, "less15":{"nameVar":"JR_PANDA_Soundless15","default":"http://tiny.cc/qai1ay","audio":null,"desc":"Hits paying less than |: ","payRate":"0.15","lessMinutes":"99","base64":null}, "less15Short":{"nameVar":"JR_PANDA_Soundless15Short","default":"http://tiny.cc/uai1ay","audio":null,"desc":"Hits paying less than | with a short timer less than | minute(s): ","payRate":"0.15","lessMinutes":"8","base64":null}, "less99":{"nameVar":"JR_PANDA_Soundless99","default":"http://tiny.cc/gbi1ay","audio":null,"desc":"Hits paying MORE than |: ","payRate":"0.15","lessMinutes":"99","base64":null}, "fullQueue":{"nameVar":"JR_PANDA_FullQueue","default":"http://tiny.cc/wietby","audio":null,"desc":"You have a full queue!","payRate":"","lessMinutes":"99","base64":null}, "queueAlert":{"nameVar":"JR_PANDA_QueueAlert","default":"http://tiny.cc/cnxyby","audio":null,"desc":"Lowest timed hit in queue is less than || minutes.","payRate":"","lessMinutes":"5","base64":null}, "hasToPause":{"nameVar":"JR_PANDA_hasToPause","default":"http://tiny.cc/w823by","audio":null,"desc":"Logged out or captcha alarm!","payRate":"","lessMinutes":"99","base64":null}, }; var gSoundOptions = null, gLastAlarm = "", gSoundFile = null, gTabIndex = 0, gMouseDownTimeoutId = null, gPressAndHold = false, gQueueData = [], gQueueCount = {}; var gMuteQueueWatch = false, gGroupings = {}, gGroupingsSort = []; var gGroupingData = {"JR First":{"theNumber":"0","description":"First grouping by default.","grouping":[],"delayed":[]}}; var gDefaultGroupingData = {"JR First":{"theNumber":"0","description":"First grouping by default.","grouping":[],"delayed":[]}}; var gTabsInfo = {}, gTabsData = [], gMainOptions = {}, gExternalData = {}; var gDefaultExternalData = {"url":"url","numId":null,"mode":null,"sentPing":false,"gotPong":true}; var gSearchOptionsData = {"filterInclude":"","filterExclude":"",pay:"0","payHigher":true,"toCheck":3,"remember":false}; var gDefaultSearchOptions = {"exclude":"","include":"","minReward":"0.00"}; var gDefaultSearchHistory = {"groupId":"","pay":"","title":"","duration":"","theDate":null}; var gDefaultTabsInfo = {"nextTabNumber":"4","tabCount":"3"}; var gDefaultTabsData = [{"tabName":"Main","tabNumber":"1","positions":null},{"tabName":"Daily Hits","tabNumber":"2","positions":null},{"tabName":"Rare Hits","tabNumber":"3","positions":null}]; var gDefaultMainOptions = {"cycleNumber":980,"HamCycleNumber":700,"autoSlowDown":true,"cycleAutoIncrease":10,"alarmVolume":80,"cycleIncrease":10,"cycleDecrease":10,"cycleAdding":650,"queueTimer":40000,"hamDelayTimer":15,"showHelpTooltips":true,"cycleNumber2":1400,"cycleNumber3":2100,"disableCaptchaAlert":false,"disableQueueAlert":false,"disableNotifications":false,"debugger":0}; var gRequestersData = {}; var gJobDataDefault = {"requesterName":"","requesterId":"","groupId":"","pay":"","title":"","duration":"0","hitsAvailable":0,"timeLeft":"","totalSeconds":0,"hitId":"", "continueURL":"","returnURL":"","durationParsed":null,"jobNumber":"-1","friendlyRName":"","friendlyTitle":"","assignedOn":"","description":"","qual":"","keywords":""}; var gDefaultRequestersData = { "0":{"requesterName":gDatabaseVersion,"requesterId":28,"action":"","groupId":"","pay":"","qual":"","title":"","queueLimit":0,"duration":"0","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"1","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":{"searchOptions":{"exclude":"","include":"","minReward":"0.00"},"searchHistory":{"groupId":"","pay":"","title":"","duration":"","theDate":null}}}, "4":{"requesterName":"Zing","requesterId":"AGVV5AWLJY7H2","action":"Panda","groupId":"38MNOT6KWI2RBQGVM0MBPUP6RVH0T8","pay":"0.01","qual":"ibotta","title":"Are these the same?","queueLimit":0,"duration":"0","audioforce":"less2","dailyLimit":0,"mute":false,"position":null,"tabNumber":"2","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":15,"weight":0,"searchData":null}, "5":{"requesterName":"Zing","requesterId":"AGVV5AWLJY7H2","action":"Panda","groupId":"3XLZDG4M7280UYEGHLXC92IBFQGZL0","pay":"0.01","qual":"","title":"Are these the same?","queueLimit":0,"duration":"0","audioforce":"less2","dailyLimit":0,"mute":false,"position":null,"tabNumber":"2","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":15,"weight":0,"searchData":null}, "6":{"requesterName":"Zing","requesterId":"AGVV5AWLJY7H2","action":"Panda","groupId":"3ZXRRTK2NDCB5NW5M24C9P2OWG41OF","pay":"0.01","qual":"ibotta","title":"Does this receipt contain the following products?","queueLimit":0,"duration":"0","audioforce":"less2","dailyLimit":0,"mute":false,"position":null,"tabNumber":"2","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":8,"weight":0,"searchData":null}, "7":{"requesterName":"Zing","requesterId":"AGVV5AWLJY7H2","action":"Panda","groupId":"3NYGPW9OTYRQLJTE9DQJQJRQJ2IZPS","pay":"0.01","qual":"","title":"Does this receipt contain the following products?","queueLimit":0,"duration":"0","audioforce":"less2","dailyLimit":0,"mute":false,"position":null,"tabNumber":"2","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":8,"weight":0,"searchData":null}, "8":{"requesterName":"Zing","requesterId":"AGVV5AWLJY7H2","action":"Panda","groupId":"3R35RPFD7JUTQN8612HRYP7E6LZ1PV","pay":"0.03","qual":"ibotta","title":"Does this receipt contain the following products?","queueLimit":0,"duration":"0","audioforce":"less2","dailyLimit":0,"mute":false,"position":null,"tabNumber":"2","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":8,"weight":0,"searchData":null}, "9":{"requesterName":"Zing","requesterId":"AGVV5AWLJY7H2","action":"Panda","groupId":"3ZXRRTK2NDCB5NW5M24C9P2OVF61OE","pay":"0.03","qual":"","title":"Does this receipt contain the following products?","queueLimit":0,"duration":"0","audioforce":"less2","dailyLimit":0,"mute":false,"position":null,"tabNumber":"2","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":8,"weight":0,"searchData":null}, "10":{"requesterName":"Zing","requesterId":"AGVV5AWLJY7H2","action":"Panda","groupId":"3CRC4NO2BIQQWQ3GX0HLFPTFOD30SA","pay":"0.05","qual":"ibotta","title":"Does this receipt contain the following products?","queueLimit":0,"duration":"60 minutes","audioforce":"less2","dailyLimit":0,"mute":false,"position":null,"tabNumber":"2","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":12,"weight":0,"searchData":null}, "11":{"requesterName":"Zing","requesterId":"AGVV5AWLJY7H2","action":"Panda","groupId":"3787DLY3Y49RIF1DIJQB3Z8BUNP1T2","pay":"0.05","qual":"","title":"Does this receipt contain the following products?","queueLimit":0,"duration":"0","audioforce":"less2","dailyLimit":0,"mute":false,"position":null,"tabNumber":"2","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":12,"weight":0,"searchData":null}, "14":{"requesterName":"MyLikes","requesterId":"A239M0XNXTKQZ7","action":"Panda","groupId":"3EGCY5R6XY0PS57S4R2H1KZW7LSAYC","pay":"0.01","qual":"","title":"Identify Images with Mature Content","queueLimit":0,"duration":"0","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"1","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null}, "15":{"requesterName":"MyLikes","requesterId":"A239M0XNXTKQZ7","action":"Panda","groupId":"3USMLONC9E5D7T4TWRD6UWVBJLN85E","pay":"0.03","qual":"","title":"Identify Images with Mature Content","queueLimit":0,"duration":"0","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"1","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null}, "16":{"requesterName":"MyLikes","requesterId":"A239M0XNXTKQZ7","action":"Panda","groupId":"37G59K9AEU0BNMXNCLOH5POEZUC9YI","pay":"0.03","qual":"","title":"Identify Videos with Mature Content","queueLimit":0,"duration":"15 minutes","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"1","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null}, "17":{"requesterName":"Steven Snow","requesterId":"A3GAVAUPTHM0B8","action":"Panda","groupId":"3X19M43Z4VULD73G1I2N3GGRYF10D8","pay":"0.06","qual":"","title":"steven snow search 3X..D8","queueLimit":0,"duration":"0","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":3,"once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null}, "18":{"requesterName":"Steven Snow","requesterId":"A3GAVAUPTHM0B8","action":"Panda","groupId":"3TJJ8HSJVIVGSMA3ZXVL0CV5EGV28D","pay":"0.05","qual":"","title":"steven snow url 3T..8D","queueLimit":0,"duration":"0","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"3","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null}, "19":{"requesterName":"Venue Quality","requesterId":"A14AT838CPSKA6","action":"Panda","groupId":"3EM4DVSA8U8J6KF08Q5EM8I2NYE308","pay":"0.01","qual":"","title":"locations same","queueLimit":0,"duration":"0","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"1","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null}, "20":{"requesterName":"Venue Quality","requesterId":"A14AT838CPSKA6","action":"Panda","groupId":"3D8O2NKTAGFJD90I499E0D26RON13W","pay":"0.01","qual":"","title":"locations adult","queueLimit":0,"duration":"5 minutes","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"1","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null}, "21":{"requesterName":"Venue Quality","requesterId":"A14AT838CPSKA6","action":"Panda","groupId":"ZZAWVTYW3Z9ZTAX43ZD0","pay":"0.01","qual":"","title":"locations family","queueLimit":0,"duration":"0","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"1","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null}, "23":{"requesterName":"Rob Grady","requesterId":"AM07BBZNC6UTQ","action":"Panda","groupId":"33X7UBO5WUFB78Y5WJ3MVC35LFMU05","pay":"0.03","qual":"","title":"Transcribe Waffle House Guest Check","queueLimit":0,"duration":"5 minutes","audioforce":"","dailyLimit":0,"mute":false,"position":null,"tabNumber":"1","once":false,"dailyDone":0,"day":0,"filterMode":0,"hamTimer":20,"friendlyRName":"","friendlyTitle":"","queueHitLimit":0,"weight":0,"searchData":null} }; var gExcludeIds = ["38FT9G80DL83PUCSQBVANJBIKGSLHM"]; var jqUI_CssSrc = GM_getResourceText("jQueryUICSS"); var jqLayout_CssSrc = GM_getResourceText("jQueryLayoutCSS"); Date.prototype.stdTimezoneOffset = function() { var jan = new Date(this.getFullYear(), 0, 1); var jul = new Date(this.getFullYear(), 6, 1); return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()); }; Date.prototype.dst = function() { return this.getTimezoneOffset() < this.stdTimezoneOffset(); }; function formatAMPM(theFormat,theDate,theTimeZone) { var d = (theDate) ? theDate : new Date(); if (theTimeZone == "mturk") { var mturkTZOffset = -8; var today = new Date(); if (today.dst()) mturkTZOffset++; var utc = d.getTime() + (d.getTimezoneOffset() * 60000); var MturkTime = utc + (3600000 * mturkTZOffset); d = new Date(MturkTime); } var minutes = d.getMinutes().toString().length == 1 ? '0'+d.getMinutes() : d.getMinutes(), hours = d.getHours().toString().length == 1 ? '0'+d.getHours() : d.getHours(), ampm = d.getHours() >= 12 ? 'pm' : 'am', months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; if (theFormat=="short") return ('0' + (d.getMonth()+1)).slice(-2) + '-' + ('0' + d.getDate()).slice(-2) + '-' + d.getFullYear() + '(' + hours + ':' + minutes + ampm + ')'; else if (theFormat=="onlydate") return ('0' + (d.getMonth()+1)).slice(-2) + '-' + ('0' + d.getDate()).slice(-2) + '-' + d.getFullYear(); else return days[d.getDay()]+' '+months[d.getMonth()]+' '+d.getDate()+' '+d.getFullYear()+' '+hours+':'+minutes+ampm; } function formatTimeZone(theFormat,theDate,theTimeZone) { return formatAMPM(theFormat,theDate,theTimeZone); } function getTimeLeft(theTime) { if (theTime!==null && theTime!=="") { var tempArray = (theTime.indexOf("second") != -1) ? theTime.split("second")[0].trim().split(" ") : null; var seconds = (tempArray) ? parseInt(tempArray[tempArray.length-1]) : 0; tempArray = (theTime.indexOf("minute") != -1) ? theTime.split("minute")[0].trim().split(" ") : null; var minutes = (tempArray) ? parseInt(tempArray[tempArray.length-1]) : 0; tempArray = (theTime.indexOf("hour") != -1) ? theTime.split("hour")[0].trim().split(" ") : null; var hours = (tempArray) ? parseInt(tempArray[tempArray.length-1]) : 0; tempArray = (theTime.indexOf("day") != -1) ? theTime.split("day")[0].trim().split(" ") : null; var days = (tempArray) ? parseInt(tempArray[tempArray.length-1]) : 0; tempArray = (theTime.indexOf("week") != -1) ? theTime.split("week")[0].trim().split(" ") : null; var weeks = (tempArray) ? parseInt(tempArray[tempArray.length-1]) : 0; return( {"weeks":weeks,"days":days,"hours":hours,"minutes":minutes,"seconds":seconds} ); } else return null; } function formatTimeLeft(resetNow,thisDigit,timeString,lastDigit) { formatTimeLeft.timeFill = formatTimeLeft.timeFill || 0; if (resetNow) formatTimeLeft.timeFill = 0; var missingDigit = (lastDigit && !thisDigit) ? true : false; if ((thisDigit || missingDigit) && formatTimeLeft.timeFill<2) { formatTimeLeft.timeFill++; if (missingDigit) { return "00 " + timeString + "s"; } else { var addZero = (thisDigit<10) ? ((formatTimeLeft.timeFill==1) ? false : true) : false; var plural = (thisDigit==1) ? false : true; return ((addZero) ? "0" : "") + thisDigit + " " + ((plural) ? (timeString+"s") : timeString) + " "; } } else return ""; } function convertToTimeString(timeData) { var returnString = ""; returnString += formatTimeLeft(true,timeData.weeks,"week",false); returnString += formatTimeLeft(false,timeData.days,"day",timeData.weeks); returnString += formatTimeLeft(false,timeData.hours,"hour",timeData.days); returnString += formatTimeLeft(false,timeData.minutes,"minute",timeData.hours); returnString += formatTimeLeft(false,timeData.seconds,"second",timeData.minutes); return returnString.trim(); } function convertTimeToSeconds(timeData) { var totalSeconds = timeData.seconds + ((timeData.minutes) ? (timeData.minutes*60) : 0) + ((timeData.hours) ? (timeData.hours*3600) : 0) + ((timeData.days) ? (timeData.days*86400) : 0) + ((timeData.weeks) ? (timeData.weeks*604800) : 0); return totalSeconds; } function convertToSeconds(milliseconds,fixed) { fixed = fixed || 2; var seconds = parseFloat((milliseconds/1000.0 * 100) / 100).toFixed(fixed) + ""; return seconds.replace(/\.0*$/,""); } function convertToMilliseconds(seconds) { if (seconds) return seconds*1000 + ""; else return "0"; } function checkNotifications() { // Let's check if the browser supports notifications if (!("Notification" in window)) return false; else if (Notification.permission === "granted") return true; else if (Notification.permission !== 'denied') { Notification.requestPermission(function (permission) { if (permission === "granted") return true; }); } return false; } function showNotification( title, message, tag, groupId ) { if (gMainOptions.disableNotifications) return; showNotification.tagNumber = showNotification.tagNumber || 0; showNotification.lastGroupID = showNotification.lastGroupID || "0"; if (showNotification.lastGroupID != groupId) showNotification.tagNumber++; showNotification.lastGroupID = groupId; var n = new Notification(title, { body: message, icon: "http://www.allbyjohn.com/mturk/Messaging-Online-icon.png", tag: tag+showNotification.tagNumber}); if (navigator.userAgent.search("Chrome") >= 0) n.onshow = function () { setTimeout(n.close.bind(n), 28000); }; } // Database using setValue and getValue function convertDatabase(theDataBase) { var newDataBase = {}; $.each(theDataBase, function( index, value ) { newDataBase[index] = value; if (newDataBase[index].searchData===null) newDataBase[index].searchData=setSearchOptionsDefault(); if (newDataBase[index].searchData.searchOptions===null) newDataBase[index].searchData=setSearchOptionsDefault(); if (newDataBase[index].searchData.searchHistory===null ) newDataBase[index].searchData=setSearchOptionsDefault(); if (newDataBase[index].weight===null) newDataBase[index].weight=0; if (newDataBase[index].duration===null) newDataBase[index].duration=""; if (newDataBase[index].groupId===null) newDataBase[index].groupId=""; if (newDataBase[index].hamTimer===null) newDataBase[index].hamTimer=gDefaultMainOptions.hamDelayTimer; }); newDataBase[0].requesterName = gDatabaseVersion; return newDataBase; } function convertTabDatabase() { if (gTabsData[0].tabName == "Holder") { // temporary for testing computer var newDataBase = []; gTabInfo = {"nextTabNumber":"" + gTabsData[0].tabNumber,"tabCount":"" + gTabsData.length}; $.each(gTabsData, function( index, value ) { if (index>0) newDataBase.push(value); }); gTabsData = newDataBase; } } function getBase64Audio(theData) { var base64AudioData = new Uint8Array(theData); var i = base64AudioData.length; var binaryString = new Array(i); while (i--) { binaryString[i] = String.fromCharCode(base64AudioData[i]); } var data = binaryString.join(''); return(window.btoa(data)); } function fillInSoundOptions(soundOptions) { $.each(soundOptions, function( index, value ) { gAlarmSounds[index].payRate = value.payRate; gAlarmSounds[index].lessMinutes = value.lessMinutes; if (value.base64!==null) { gAlarmSounds[index].audio = new Audio("data:audio/wav;base64," + JSON.parse(value.base64)); GM_setValue(gAlarmSounds[index].nameVar,JSON.stringify(value.base64)); } }); } function loadSoundFiles(soundNumber,keyArray,resetMe) { resetMe = resetMe || false; var savedDBVersion = gRequestersData[0].requesterName; var resetDBVersion = savedDBVersion.split("-")[1]; if (soundNumber < keyArray.length) { if ((gResetDBVersion.split(".")[1] > resetDBVersion.split(".")[1]) || gResetAllData) GM_deleteValue(gAlarmSounds[keyArray[soundNumber]].nameVar); var gotBase64 = (resetMe) ? null : GM_getValue(gAlarmSounds[keyArray[soundNumber]].nameVar,null); this.firstTime = this.firstTime || false; if (gotBase64 === null) { if (!this.firstTime) addToWaitDialog("For your first time this might take a few seconds.
Loading Alarms ",false); this.firstTime = true; requestUrl(gAlarmSounds[keyArray[soundNumber]].default,0,function(theResult,theNumber,data1,data2) { addToWaitDialog(" .",false); var base64 = getBase64Audio(theResult.response); GM_setValue(gAlarmSounds[keyArray[soundNumber]].nameVar,JSON.stringify(base64)); gAlarmSounds[keyArray[soundNumber]].audio = new Audio("data:audio/wav;base64," + base64); loadSoundFiles(soundNumber+1,keyArray,resetMe); },function() { errorRequest(); }, "", "", "arraybuffer"); } else { gAlarmSounds[keyArray[soundNumber]].audio = new Audio("data:audio/wav;base64," + JSON.parse(gotBase64)); loadSoundFiles(soundNumber+1,keyArray,resetMe); } } else continueLoading(); } function fillInGroupings() { $.each(gGroupingData, function( index, value ) { if (!value.grouping) value.grouping = []; gGroupings[index] = {"data":value,"collecting":false}; gGroupingsSort.push(index); defaultFillIn(value,gDefaultGroupingData["JR First"]); }); } function defaultFillIn(data,defaultData) { $.each(defaultData, function( index, value ) { if (!(index in data)) { data[index] = value; } }); } function loadInDBVersions(passedDatabase) { var tempData = null; if (passedDatabase) tempData = passedDatabase; else tempData = JSON.parse(GM_getValue("JR_PANDA_RequestersData",JSON.stringify(gDefaultRequestersData))); var savedDBVersion = tempData[0].requesterName; var resetDBVersion = savedDBVersion.split("-")[1]; var defaultDBVersion = savedDBVersion.split("-")[2]; if (gResetDBVersion.split(".")[0] > resetDBVersion.split(".")[0]) { GM_deleteValue("JR_PANDA_RequestersData"); tempData = JSON.parse(GM_getValue("JR_PANDA_RequestersData",JSON.stringify(gDefaultRequestersData))); } tempData = convertDatabase(tempData); $.each(tempData, function( index, value ) { defaultFillIn(value,gDefaultRequestersData[0]); }); return tempData; } function changeOldSettings() { if (gMainOptions.cycleIncrease==5) gMainOptions.cycleIncrease = 10; if (gMainOptions.cycleDecrease==5) gMainOptions.cycleDecrease = 10; if (gMainOptions.hamDelayTimer===null) gMainOptions.hamDelayTimer=gDefaultMainOptions.hamDelayTimer; } function setupSoundOptions(base64) { base64 = base64 || false; var soundOptions = {}; $.each(gAlarmSounds, function( index, value ) { var theBase64 = (base64) ? GM_getValue(value.nameVar,null) : null; soundOptions[index] = {"payRate":value.payRate,"lessMinutes":value.lessMinutes,"base64":theBase64}; }); return soundOptions; } function clearOldMessages() { for (i = 0; i < localStorage.length; i++) { if ( localStorage.key(i).substring(0,11) == 'JR_message_' && localStorage.key(i).substr(localStorage.key(i).length - gScriptName.length) == gScriptName ) { localStorage.removeItem(localStorage.key(i)); } } } function loadSettings() { clearOldMessages(); var defaultSoundOptions = setupSoundOptions(); if (gResetAllData) GM_deleteValue("JR_PANDA_RequestersData"); gRequestersData = loadInDBVersions(); if (gResetAllData) GM_deleteValue("JR_PANDA_MainOptions"); gMainOptions = JSON.parse(GM_getValue("JR_PANDA_MainOptions",JSON.stringify(gDefaultMainOptions))); defaultFillIn(gMainOptions,gDefaultMainOptions); if (gResetAllData) GM_deleteValue("JR_PANDA_TabsData"); gTabsData = JSON.parse(GM_getValue("JR_PANDA_TabsData",JSON.stringify(gDefaultTabsData))); gTabsInfo = JSON.parse(GM_getValue("JR_PANDA_TabsInfo",JSON.stringify(gDefaultTabsInfo))); convertTabDatabase(); $.each(gTabsData, function( index, value ) { defaultFillIn(value,gDefaultTabsData[0]); }); if (gResetAllData) GM_deleteValue("JR_PANDA_GroupingData"); gGroupingData = JSON.parse(GM_getValue("JR_PANDA_GroupingData",JSON.stringify(gDefaultGroupingData))); fillInGroupings(); gSoundOptions = JSON.parse(GM_getValue("JR_PANDA_SoundOptions",JSON.stringify(defaultSoundOptions))); loadSoundFiles(0,Object.keys(gAlarmSounds)); fillInSoundOptions(gSoundOptions); changeOldSettings(); } function saveSettings(doAfter) { var soundOptions = setupSoundOptions(); GM_setValue("JR_PANDA_RequestersData",JSON.stringify(gRequestersData)); GM_setValue("JR_PANDA_MainOptions",JSON.stringify(gMainOptions)); GM_setValue("JR_PANDA_TabsData",JSON.stringify(gTabsData)); GM_setValue("JR_PANDA_TabsInfo",JSON.stringify(gTabsInfo)); GM_setValue("JR_PANDA_GroupingData",JSON.stringify(gGroupingData)); GM_setValue("JR_PANDA_SoundOptions",JSON.stringify(soundOptions)); if (doAfter) setTimeout( function() { doAfter(); },200); } function checkDelayedSave() { if (gDelayedSave) saveSettings(); } // Jquery Creating HTML elements Functions -------- function toggleButton(thisButton,doThisOn,doThisOff,mode,modeStatus) { // dothison = status on function, dothisOff = status off function, mode = status mode to force change to, modestatus = force on or off function var theStatus = $(thisButton).data("status"); // Get status of the button var doStatus = (modeStatus) ? modeStatus : (theStatus != "on" && theStatus!=mode) ? "on" : "off"; if (mode && theStatus!=mode) $(thisButton).data("status",mode); else $(thisButton).data("status",doStatus); if (doStatus=="on" && doThisOn) doThisOn($(thisButton).data("theNumber"),thisButton,mode); if (doStatus=="off" && doThisOff) doThisOff($(thisButton).data("theNumber"),thisButton,mode); updateHitColors($(thisButton).data("theNumber"),thisButton); } function toggleButtonOff(thisButton,doThisOn,doThisOff,passedMode) { $(thisButton).data("status","off"); updateHitColors($(thisButton).data("theNumber"),thisButton); if (doThisOff) doThisOff($(thisButton).data("theNumber"),thisButton,passedMode); } function toggleButtonOn(thisButton,doThisOn,doThisOff) { if ($(thisButton).data("status") == "off") { $(thisButton).data("status","on"); updateHitColors($(thisButton).data("theNumber"),thisButton); if (doThisOn) doThisOn($(thisButton).data("theNumber"),thisButton); } } function checkButtonsStatus() { if (gScriptStatus == "normal") return true; else return false; } function createDiv(theHtml) { var inner = (theHtml) ? theHtml : ""; return $('
').html(inner); } function createSpan(theHtml) { var inner = (theHtml) ? theHtml : ""; return $('').html(inner); } function createTextInput(theValue) { return $("").attr({ "type": "text", "value": theValue }); } function createCheckbox(theValue) { return $("").attr({ "type": "checkbox", "value": theValue }); } function createRadioButton(theName,theValue) { return $("").attr({ "type": "radio", "name": theName, "value": theValue }); } function createLink(theText,theUrl,theTarget,theTitle) { return $('',{text: theText,target: theTarget,title: theTitle,href: theUrl}); } function createSpanButton(toDo,theHtml,theBackgroundColor,theColor,theFontSize) { var backgroundColor = (theBackgroundColor) ? theBackgroundColor : "initial"; var textColor = (theColor) ? theColor : "initial"; var fontSize = (theFontSize) ? theFontSize : "9px"; var theButton = createSpan(theHtml).data({"backgroundColor":backgroundColor,"status":"off","textColor":textColor,"htmlText":theHtml}) .disableSelection() .dblclick(function(e) { e.stopPropagation(); }) .css({"font-size":fontSize,"padding":"0px 2px","background-color":backgroundColor,"color":textColor,"border":"2px groove red","cursor":"default","margin":"0px 1px"}); if (toDo) theButton.click( function(e) { if (checkButtonsStatus()) {toDo(e);} }); return theButton; } function createContainer() { var containerDiv = createDiv(); containerDiv.css({"padding-left":"3px", "padding-right":"3px","padding-top":"0px","padding-bottom":"1px"}); return containerDiv; } function createPanels(goAppend) { var panelContainer = createContainer() .attr("id","panelContainer") .appendTo(goAppend); return panelContainer; } function createPanel(goAppend) { var panel = createContainer().appendTo(goAppend); return panel; } function createTabs(goAppend,isSortable,idName) { var tabList = $("