| Date | Requester | HIT Title | Reward | Status | Feedback |
|---|---|---|---|---|---|
| $' + sum.toFixed(2) + ' |
Found " + results.length + " matching HITs. $" + sum_approved.toFixed(2) + " approved, " + "$" + sum_rejected.toFixed(2) + " rejected and $" + sum_pending.toFixed(2) + " pending.
"); resultsWindow.document.write(""); resultsWindow.document.close(); } // ---- vB function export_func(item) { HIT = item; gedit_button.textContent = 'Edit Template'; apply_template(item); gdiv.style.display = 'block'; gtextarea.select(); } function apply_template(hit_data) { var txt = TEMPLATE; var vars = ['title', 'requester', 'rid', 'description', 'reward', 'quals', 'prev_link', 'time', 'hits', 'to_stuff', 'to_text']; var resp = null; if (txt.indexOf('{to_text}') >= 0 || txt.indexOf('{to_stuff}') >= 0){ var url = buildXhrUrl(hit_data["rid"]); resp = getTOMulti(hit_data["rid"]); //console.log(resp); } var toText = ""; var toStuff = ""; var toData = ""; var numResp = (resp == null || resp == "TO DOWN" ? "n/a" : resp[hit_data["rid"]].reviews); if (resp == "TO DOWN"){ toStuff = " [URL=\""+TO_BASE+hit_data['rid']+"\"]TO down.[/URL]"; toText = toStuff; } else if (resp == null || resp[hit_data["rid"]].attrs == null && resp != "TO DOWN") { toStuff = " No TO "; toText = " No TO "; toStuff += "[URL=\""+TO_BASE+"report?requester[amzn_id]=" + hit_data['rid'] + "&requester[amzn_name]=" + hit_data['requester'] + "\"]"; toStuff += "(Submit a new TO rating for this requester)[/URL]"; } else { for (var key in resp[hit_data["rid"]].attrs) { //toText += "\n[*]"+key+": "+resp[hit_data["requesterId"]].attrs[key]+"\n"; var i = 0; var color = "green"; var name = key; var num = Math.floor(resp[hit_data["rid"]].attrs[key]); switch (key){ case "comm": name = "Communicativity"; break; case "pay": name = "Generosity"; break; case "fast": name = "Promptness"; break; case "fair": name = "Fairness"; break; default: name = key; break; } switch (num){ case 0: color = "red"; break; case 1: color = "red"; break; case 2: color = "orange"; break; case 3: color = "yellow"; break; default: break; } toText += (num > 0 ? "\n[color="+color+"]" : "\n"); for (i; i < num; i++){ toText += "[b]"+symbol+"[/b]"; } toText += (num > 0 ? "[/color]" : ""); if (i < 5){ toText += "[color=white]"; for (i; i < 5; i++) toText += "[b]"+symbol+"[/b]"; toText += "[/color]"; } toText += " "+Number(resp[hit_data["rid"]].attrs[key]).toFixed(2)+" "+name; toData += Number(resp[hit_data["rid"]].attrs[key]).toFixed(2) + ","; } //toText += "[/list]"; toText += (txt.indexOf('{to_stuff}') >= 0 ? "" : "\nNumber of Reviews: "+numResp+"\n[URL=\""+TO_BASE+"report?requester[amzn_id]=" + hit_data['rid'] + "&requester[amzn_name]=" + hit_data['requester'] + "\"](Submit a new TO rating for this requester)[/URL]"); toStuff = '\n[img]http://data.istrack.in/to/' + toData.slice(0,-1) + '.png[/img]'; toStuff += (txt.indexOf('{to_stuff}') >= 0 ? (txt.indexOf('{to_text}') >= 0 ? "" : toText) : ""); toStuff += "\nNumber of Reviews: "+numResp; toStuff += "[URL=\""+TO_BASE+"report?requester[amzn_id]=" + hit_data['rid'] + "&requester[amzn_name]=" + hit_data['requester'] + "\"]"; toStuff += "\n(Submit a new TO rating for this requester)[/URL]"; } for (var u = 0; u < vars.length; u++) { var t = new RegExp('\{' + vars[u] + '\}', 'g'); if (vars[u] == "to_stuff") { txt = txt.replace(t, toStuff); } else if (vars[u] == "to_text") { txt = txt.replace(t, toText); } else if (vars[u] == "prev_link") { txt = txt.replace(t,"https://www.mturk.com"+hit_data[vars[u]]); } else if (vars[u] == "acc_link") { txt = txt.replace(t,"https://www.mturk.com"+hit_data[vars[u]]); } else txt = txt.replace(t, hit_data[vars[u]]); } gtextarea.value = txt; } function hide_func(div) { if (EDIT == false) div.style.display = 'none'; } function edit_func() { if (EDIT == true) { EDIT = false; TEMPLATE = gtextarea.value; gedit_button.textContent = 'Edit Template'; apply_template(HIT); } else { //console.log("Editing"); EDIT = true; gedit_button.textContent = 'Show Changes'; gsave_button.disabled = false; gtextarea.value = TEMPLATE; } } function default_func() { GM_deleteValue('HITScraper Template'); TEMPLATE = DEFAULT_TEMPLATE; EDIT = false; gedit_button.textContent = 'Edit Template'; apply_template(HIT); } function save_func() { if (EDIT) TEMPLATE = gtextarea.value; GM_setValue('HITScraper Template', TEMPLATE); } var gdiv = document.createElement('div'); var gtextarea = document.createElement('textarea'); var gdiv2 = document.createElement('label'); gdiv.style.position = 'fixed'; gdiv.style.width = '500px'; gdiv.style.height = '235px'; gdiv.style.left = '50%'; gdiv.style.right = '50%'; gdiv.style.margin = '-250px 0px 0px -250px'; gdiv.style.top = '300px'; gdiv.style.padding = '5px'; gdiv.style.border = '2px'; gdiv.style.backgroundColor = 'black'; gdiv.style.color = 'white'; gdiv.style.zIndex = '100'; gtextarea.style.padding = '2px'; gtextarea.style.width = '500px'; gtextarea.style.height = '200px'; gtextarea.title = '{title}\n{requester}\n{rid}\n{description}\n{reward}\n{quals}\n{prev_link}\n{time}\n{hit}\n{to_stuff}\n{to_text}'; gdiv.textContent = 'Press Ctrl+C to copy to clipboard. Click textarea to close'; gdiv.style.fontSize = '12px'; gdiv.appendChild(gtextarea); var gedit_button = document.createElement('button'); var gsave_button = document.createElement('button'); var gdefault_button = document.createElement('button'); var geasy_button = document.createElement('button'); gedit_button.textContent = 'Edit Template'; gedit_button.setAttribute('id', 'edit_button'); gedit_button.style.height = '18px'; gedit_button.style.width = '100px'; gedit_button.style.fontSize = '10px'; gedit_button.style.paddingLeft = '3px'; gedit_button.style.paddingRight = '3px'; gedit_button.style.backgroundColor = 'white'; gsave_button.textContent = 'Save Template'; gsave_button.setAttribute('id', 'save_button'); gsave_button.style.height = '18px'; gsave_button.style.width = '100px'; gsave_button.style.fontSize = '10px'; gsave_button.style.paddingLeft = '3px'; gsave_button.style.paddingRight = '3px'; gsave_button.style.backgroundColor = 'white'; gsave_button.style.marginLeft = '5px'; geasy_button.textContent = 'Change Adfly Url'; geasy_button.setAttribute('id', 'easy_button'); geasy_button.style.height = '18px'; geasy_button.style.width = '100px'; geasy_button.style.fontSize = '10px'; geasy_button.style.paddingLeft = '3px'; gdefault_button.textContent = ' D '; gdefault_button.setAttribute('id', 'default_button'); gdefault_button.style.height = '18px'; gdefault_button.style.width = '20px'; gdefault_button.style.fontSize = '10px'; gdefault_button.style.paddingLeft = '3px'; gdefault_button.style.paddingRight = '3px'; gdefault_button.style.backgroundColor = 'white'; gdefault_button.style.marginLeft = '5px'; gdefault_button.title = 'Return default template'; gdiv.appendChild(gedit_button); gdiv.appendChild(gsave_button); gdiv.appendChild(gdefault_button); gdiv.appendChild(geasy_button); gsave_button.disabled = true; gdiv.style.display = 'none'; gtextarea.addEventListener("click", function() {hide_func(gdiv);}, false); gedit_button.addEventListener("click", function() {edit_func();}, false); gsave_button.addEventListener("click", function() {save_func();}, false); gdefault_button.addEventListener("click", function() {default_func();}, false); document.body.insertBefore(gdiv, document.body.firstChild); // ---- vB end //Functions below were added for the irc export with the help of clickhappier and Cristo function getTO(f){ var toComp = []; var toUrl2 = 'https://mturk-api.istrack.in/multi-attrs.php?ids='+f; var toUrl = 'https://turkopticon.ucsd.edu/api/multi-attrs.php?ids='+f; var requestTO = new XMLHttpRequest(); try{ // first try Miku's TO mirror server (istrack.in) requestTO.onreadystatechange = function () { if ((requestTO.readyState ===4) && (requestTO.status ===200)) { if (requestTO.responseText.split(':').length > 2) { var toInfo = requestTO.responseText.split('{')[3].split('}')[0].split(','); for (var t = 0; t < 4; t++) { var arrTo = toInfo[t].split(':'); toComp.push(arrTo[1].substring(1,4)); } } else { toComp = ['-','-','-','-']; } } }; requestTO.open('GET', toUrl, false); requestTO.send(null); return toComp; } catch(err){ // if mirror unavailable, try main TO server try{ requestTO.onreadystatechange = function () { if ((requestTO.readyState ===4) && (requestTO.status ===200)) { if (requestTO.responseText.split(':').length > 2) { var toInfo = requestTO.responseText.split('{')[3].split('}')[0].split(','); for (var t = 0; t < 4; t++) { var arrTo = toInfo[t].split(':'); toComp.push(arrTo[1].substring(1,4)); } } else { toComp = ['-','-','-','-']; } } }; requestTO.open('GET', toUrl2, false); requestTO.send(null); return toComp; } catch(err){ // if both unavailable, return 'na's toComp = ['na','na','na','na']; return toComp; } } } function getTOMulti(f){ var toComp = {}; var toUrl2 = 'https://mturk-api.istrack.in/multi-attrs.php?ids='+f; var toUrl = 'https://turkopticon.ucsd.edu/api/multi-attrs.php?ids='+f; var rids = f.split(','); var requestTO = new XMLHttpRequest(); try{ // first try Miku's TO mirror server (istrack.in) requestTO.onreadystatechange = function () { if ((requestTO.readyState ===4) && (requestTO.status ===200)) { if (requestTO.responseText.split(':').length > 2) toComp = $.parseJSON(requestTO.responseText); else toComp = null; } }; requestTO.open('GET', toUrl, false); requestTO.send(null); return toComp; } catch(err){ // if mirror unavailable, try main TO server try{ requestTO.onreadystatechange = function () { if ((requestTO.readyState ===4) && (requestTO.status ===200)) { if (requestTO.responseText.split(':').length > 2) toComp = $.parseJSON(requestTO.responseText); else toComp = null; } }; requestTO.open('GET', toUrl2, false); requestTO.send(null); return toComp; } catch(err){ // if both unavailable, return 'na's toComp = "TO DOWN"; return toComp; } } } function sleep(ms){ // from http://www.digimantra.com/tutorials/sleep-or-wait-function-in-javascript/ var dt = new Date(); dt.setTime(dt.getTime() + ms); while (new Date().getTime() < dt.getTime()); } function ns4tShorten(url){ // mturk-only URL shortener on Tjololo's server ns4t.net console.log("ns4tShorten function"); var shortRes; var urlT = "https://ns4t.net/yourls-api.php" + "?action=shorturl&url=" + encodeURIComponent(url) + "&format=simple&title=MTurk&username=publicuser&password=publicpass"; var requestNs4t = new XMLHttpRequest(); try{ requestNs4t.onreadystatechange = function () { if (requestNs4t.readyState == 4) { if (requestNs4t.status == 200) { shortRes = requestNs4t.responseText; console.log("ns4t.net response: " + requestNs4t.status + " " + requestNs4t.statusText + " " + requestNs4t.responseText); } else { console.log('ns4t.net unsuccessful: ' + requestNs4t.status + " " + requestNs4t.statusText); } } }; requestNs4t.open('GET', urlT, false); requestNs4t.send(null); return shortRes; } catch(err){ return shortRes; } } function tnyimShorten(url){ // Tny.im URL Shortener - http://tny.im/aboutapi.php - this is only possible this way because their server has the "Access-Control-Allow-Origin = *" headers enabled (the above TO mirror server does too) console.log("tnyimShorten function"); var shortRes; var urlT = "https://tny.im/yourls-api.php" + "?action=shorturl&url=" + encodeURIComponent(url) + "&format=simple&title=MTurk"; var requestTnyim = new XMLHttpRequest(); try{ requestTnyim.onreadystatechange = function () { if (requestTnyim.readyState == 4) { if (requestTnyim.status == 200) { shortRes = requestTnyim.responseText; console.log("tny.im response: " + requestTnyim.status + " " + requestTnyim.statusText + " " + requestTnyim.responseText); } else { console.log('tny.im unsuccessful: ' + requestTnyim.status + " " + requestTnyim.statusText); } } }; requestTnyim.open('GET', urlT, false); requestTnyim.send(null); return shortRes; } catch(err){ return shortRes; } } function googlShorten(url){ // Goo.gl URL Shortener console.log("googlShorten function"); var shortRes; var urlG = "https://www.googleapis.com/urlshortener/v1/url"; var requestGoogl = new XMLHttpRequest(); try{ requestGoogl.open("POST", urlG, false); requestGoogl.setRequestHeader("Content-Type", "application/json"); requestGoogl.onreadystatechange = function() { if (requestGoogl.readyState == 4) { if (requestGoogl.status == 200) { shortRes = JSON.parse(requestGoogl.response).id; console.log("goo.gl response: " + requestGoogl.status + " " + requestGoogl.statusText + " " + JSON.parse(requestGoogl.response).id ); } else { console.log('goo.gl unsuccessful: ' + requestGoogl.status + " " + requestGoogl.statusText); } } }; var data = new Object(); data.longUrl = url; requestGoogl.send(JSON.stringify(data)); return shortRes; } catch(err){ return shortRes; } } function shortenUrl(url){ sleep(500); // milliseconds delay - wait some milliseconds (currently half a second) between shortens to reduce chance of hitting usage limits var shortRes; shortRes = ns4tShorten(url); if ( shortRes === undefined ) { // if you reached the ns4t.net URL shortener's temporary usage limits or the server is otherwise unavailable shortRes = tnyimShorten(url); if ( shortRes === undefined ) { // if you reached the tny.im URL shortener's temporary limits or the server is otherwise unavailable shortRes = googlShorten(url); if ( shortRes === undefined ) { // if you reached the Google URL shortener's temporary limits too or the server is otherwise unavailable shortRes = "(x)"; } } } return shortRes; } // output display box // this is messy // TODO: make it cleaner var exportdiv = document.createElement('div'); var exporttextarea1 = document.createElement('textarea'); var exporttextarea2 = document.createElement('textarea'); var exporttextarea3 = document.createElement('textarea'); var exporttextarea4 = document.createElement('textarea'); var exporttextarea5 = document.createElement('textarea'); var exportclosebutton = document.createElement('button');var exporttitlebutton = document.createElement('button');var exporturlbutton = document.createElement('button'); var exportreqbutton = document.createElement('button');var exportpandabutton = document.createElement('button');var exporttobutton = document.createElement('button'); exportclosebutton.style.backgroundColor = 'black'; exportclosebutton.style.color = 'white'; exportclosebutton.style.border = 'none'; exportclosebutton.style.width = '505px'; exportclosebutton.style.align = 'center'; exportclosebutton.textContent='Close'; exporttitlebutton.style.backgroundColor = 'black'; exporttitlebutton.style.color = 'white'; exporttitlebutton.style.border = 'none'; exporttitlebutton.style.width = '101px'; exporttitlebutton.style.align = 'center'; exporttitlebutton.textContent='Title'; exporturlbutton.style.backgroundColor = 'black'; exporturlbutton.style.color = 'white'; exporturlbutton.style.border = 'none'; exporturlbutton.style.width = '101px'; exporturlbutton.style.align = 'center'; exporturlbutton.textContent='URL'; exportreqbutton.style.backgroundColor = 'black'; exportreqbutton.style.color = 'white'; exportreqbutton.style.border = 'none'; exportreqbutton.style.width = '101px'; exportreqbutton.style.align = 'center'; exportreqbutton.textContent='Req'; exportpandabutton.style.backgroundColor = 'black'; exportpandabutton.style.color = 'white'; exportpandabutton.style.border = 'none'; exportpandabutton.style.width = '101px'; exportpandabutton.style.align = 'center'; exportpandabutton.textContent='PandA'; exporttobutton.style.backgroundColor = 'black'; exporttobutton.style.color = 'white'; exporttobutton.style.border = 'none'; exporttobutton.style.width = '101px'; exporttobutton.style.align = 'center'; exporttobutton.textContent='TO'; exportdiv.style.position = 'fixed'; exportdiv.style.width = '505px'; exportdiv.style.height = '155px'; exportdiv.style.left = '50%'; exportdiv.style.right = '50%'; exportdiv.style.margin = '-250px 0px 0px -250px'; exportdiv.style.top = '300px'; exportdiv.style.padding = 'none'; // def 5px exportdiv.style.border = 'none'; //def 2px exportdiv.style.backgroundColor = 'black'; exportdiv.style.color = 'white'; exportdiv.style.zIndex = '1000'; exportdiv.setAttribute('id','export_div'); exportdiv.style.display = 'none'; exporttextarea1.style.padding = 'none'; exporttextarea1.style.width = '500px'; exporttextarea2.style.padding = 'none'; exporttextarea2.style.width = '500px'; exporttextarea2.style.height = '30px'; exporttextarea2.style.overflow = 'hidden'; exporttextarea2.setAttribute('id','hwtf_url'); exporttextarea3.style.padding = 'none'; exporttextarea3.style.width = '500px'; exporttextarea3.style.height = '30px'; exporttextarea3.style.overflow = 'hidden'; exporttextarea3.setAttribute('id','hwtf_req'); exporttextarea4.style.padding = 'none'; exporttextarea4.style.width = '500px'; exporttextarea4.style.height = '30px'; exporttextarea4.style.overflow = 'hidden'; exporttextarea4.setAttribute('id','hwtf_panda'); exporttextarea5.style.padding = '2px'; exporttextarea5.style.width = '500px'; exporttextarea5.style.height = '20px'; exporttextarea5.style.overflow = 'hidden'; exporttextarea5.setAttribute('id','hwtf_to'); exportdiv.style.fontSize = '12px'; exportdiv.style.display = 'block'; function display(hit, extype){ var capReq = hit["requester"]; var capReqId = hit["rid"]; var capTitle = hit["title"].replace(" (Requester link substituted)",""); var capRew = hit["reward"]; var capTime = hit["time"]; var capAvailable = hit["hits"]; var qualList = hit["quals"]; var qualColl = qualList.split(','); var masterStat = ''; var locationStat = 'ICA'; var locationIndex = null; for ( var m = 0; m < qualColl.length; m++ ) { if ( qualColl[m].indexOf('Masters') > -1 ) { masterStat = (extype == "irc") ? 'MASTERS • ' : ' [MASTERS]'; } else if (qualColl[m].indexOf('is US') > -1) { locationStat = 'US'; locationIndex = m; } else if (qualColl[m].match(/approval rate/)) { qualColl[m] = qualColl[m].replace(/[A-Za-z ]+\(%\) is (?:not less than (\d+)|greater than (\d+))/, '>$1$2%'); } else if (qualColl[m].match(/approved HITs/)) { qualColl[m] = qualColl[m].replace(/Total approved HITs is (?:not less than (\d+)|greater than (\d+))/, '>$1$2'); qualColl[m] = qualColl[m].replace(/Total approved HITs is (?:not greater than (\d+)|less than (\d+))/, '<$1$2'); } } if (extype == "reddit" && locationIndex != null) qualColl.splice(locationIndex,1); if (qualColl[0] == null) qualColl = "None"; //console.log('col: ' + qualColl); //console.log('list: ' + qualList); //URL SHORTENERS var capUrl = (extype == "irc") ? shortenUrl(LINK_BASE+hit["prev_link"]) : LINK_BASE+hit["prev_link"]; var pandaUrl = (extype == "irc") ? shortenUrl(LINK_BASE+hit["acc_link"]) : LINK_BASE+hit["acc_link"]; var capReqUrl = (extype == "irc") ? shortenUrl(LINK_BASE+hit["req_link"]) : LINK_BASE+hit["req_link"]; var toLink = (extype == "irc") ? shortenUrl(TO_BASE+capReqId) : TO_BASE+capReqId; var hitLinkUnav = ''; if (hit["prev_link"].indexOf("requesterId") > -1) { hitLinkUnav = " (preview link unavailable)"; pandaUrl = ""; } var capToStats = getTO(capReqId); var shortUrlUnav = ''; if ( capUrl == '(x)' && hit["prev_link"] != 'unavailable' ) { shortUrlUnav = ' \r\n^ https://www.mturk.com'+hit["prev_link"]; } // add the full-length preview link at the end if both URL shortener attempts failed var exIRC = masterStat + 'Requester: ' + capReq + ' ' + capReqUrl + ' • ' + 'HIT: ' + capTitle + ' ' + capUrl + hitLinkUnav + ' • ' + 'Pay: ' + capRew + ' • ' + 'Avail: ' + capAvailable + ' • ' + 'Time Limit: ' + capTime + ' • ' + 'TO: ' + 'Pay='+capToStats[1] + ' Fair='+capToStats[2] + ' Comm='+capToStats[0] + ' ' + toLink + ' • ' + 'PandA: ' + pandaUrl + hitLinkUnav + shortUrlUnav ; var exTitle = locationStat + ' - ' + capTitle + ' - ' + capReq + ' - ' + capRew + '/' + 'COMTIME - ' + '(' + qualColl + ')' + masterStat; var exUrl = 'URL: ' + capUrl +'\n\n'; var exReq = 'Req: ' + capReqUrl +'\n\n'; var exTO = 'TO: ' + toLink +'\n\n'; var exPanda = 'PandA: ' + pandaUrl +'\n\n'; if (extype == "irc") { if (GM_setClipboard) { GM_setClipboard(exIRC); } // pre-copies irc string exporttextarea1.value = exIRC; exporttextarea1.style.height = '130px'; exporttextarea1.setAttribute('id', 'ircexport_text'); exportdiv.textContent = 'IRC Export: Press Ctrl+C to (re-)copy to clipboard. Click textarea to close.'; exportdiv.appendChild(exporttextarea1); exporttextarea1.addEventListener("click", function(){ exportdiv.style.display = 'none'; }, false); exportdiv.style.display = 'block'; exporttextarea1.select(); } else if (extype == "reddit") { exporttextarea1.value = exTitle; exporttextarea2.value = exUrl; exporttextarea3.value = exReq; exporttextarea4.value = exPanda; exporttextarea5.value = exTO; exporttextarea1.style.height = '50px'; exporttextarea1.setAttribute('id','hwtf_title'); exportdiv.textContent = 'r/hwtf Export: Use the buttons for single-click copying.'; exportdiv.appendChild(exporttextarea1); exportdiv.appendChild(exporttextarea2); exportdiv.appendChild(exporttextarea3); exportdiv.appendChild(exporttextarea4); exportdiv.appendChild(exporttextarea5); exportdiv.appendChild(exporttitlebutton); exportdiv.appendChild(exporturlbutton); exportdiv.appendChild(exportreqbutton); exportdiv.appendChild(exportpandabutton); exportdiv.appendChild(exporttobutton); exportdiv.appendChild(exportclosebutton); document.body.insertBefore(exportdiv, document.body.firstChild); exportclosebutton.addEventListener("click", function(){ exportdiv.style.display = 'none'; }, false); exporttitlebutton.addEventListener("click", function(){ exporttextarea1.select(); if (GM_setClipboard) { GM_setClipboard(exporttextarea1.value); } }, false); exporturlbutton.addEventListener("click", function(){ exporttextarea2.select(); if (GM_setClipboard) { GM_setClipboard(exporttextarea2.value); } }, false); exportreqbutton.addEventListener("click", function(){ exporttextarea3.select(); if (GM_setClipboard) { GM_setClipboard(exporttextarea3.value); } }, false); exportpandabutton.addEventListener("click", function(){ exporttextarea4.select(); if (GM_setClipboard) { GM_setClipboard(exporttextarea4.value); } }, false); exporttobutton.addEventListener("click", function(){ exporttextarea5.select(); if (GM_setClipboard) { GM_setClipboard(exporttextarea5.value); } }, false); exportdiv.style.display = 'block'; //exporttextarea1.focus(); var tindex = exTitle.search(/COMTIME/); exporttextarea1.setSelectionRange(tindex, tindex+7); // pre-select completion time } }