Greasy Fork is available in English.

[Worker MTurk] Group Id History

Saves the most recently viewed source for all different type of HITs

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         [Worker MTurk] Group Id History
// @namespace    https://github.com/Kadauchi
// @version      1.0.1
// @description  Saves the most recently viewed source for all different type of HITs
// @author       Kadauchi
// @icon         http://i.imgur.com/oGRQwPN.png
// @include      https://worker.mturk.com/groupIds
// @include      https://worker.mturk.com/projects/*/tasks*
// @grant        GM.setValue
// @grant        GM.getValue
// ==/UserScript==

if (window.location.href === `https://worker.mturk.com/groupIds`) groupIds()
else projects()

async function groupIds () {
  while (document.body.firstChild) {
    document.body.removeChild(document.body.firstChild)
  }

  const table = document.createElement(`table`)
  table.className = `table table-striped`
  document.body.appendChild(table)

  const thead = document.createElement(`thead`)
  table.appendChild(thead)

  const thName = document.createElement(`th`)
  thName.textContent = `Name`
  thead.appendChild(thName)

  const thTitle = document.createElement(`th`)
  thTitle.textContent = `Title`
  thead.appendChild(thTitle)

  const thReward = document.createElement(`th`)
  thReward.className = `text-xs-center`
  thReward.textContent = `Reward`
  thead.appendChild(thReward)

  const thActions = document.createElement(`th`)
  thActions.className = `text-xs-center`
  thActions.textContent = `Actions`
  thActions.style.width = `150px`
  thead.appendChild(thActions)

  const tbody = document.createElement(`tbody`)
  table.appendChild(tbody)

  const hits = JSON.parse(await GM.getValue(`hits`, `{}`))
  const sorted = Object.keys(hits).sort((a, b) => hits[a].viewed - hits[b].viewed)

  for (let i = sorted.length - 1; i > -1; i --) {
    const key = sorted[i]
    const hit = hits[key]

    const row = document.createElement(`tr`)

    const name = document.createElement(`td`)
    name.textContent = hit.name
    row.appendChild(name)

    const title = document.createElement(`td`)
    title.textContent = hit.title
    row.appendChild(title)

    const reward = document.createElement(`td`)
    reward.className = `text-xs-center`
    reward.textContent = `$${hit.reward.toFixed(2)}`
    row.appendChild(reward)

    const actions = document.createElement(`td`)
    actions.className = `text-xs-center`
    row.appendChild(actions)

    const preview = document.createElement(`a`)
    preview.href = `https://worker.mturk.com/projects/${key}/tasks`
    preview.target = `_blank`
    preview.className = `p-r-sm preview`
    preview.textContent = `Preview`
    actions.appendChild(preview)

    const view = document.createElement(`a`)
    view.href = hit.src
    view.target = `_blank`
    view.title = new Date(hit.viewed)
    view.className = `btn btn-primary`
    view.textContent = `View Source`
    view.style.marginRight = `5px`
    actions.appendChild(view)

    tbody.appendChild(row)
  }
}

async function projects () {
  const id = window.location.href.match(/projects\/([A-Z0-9]+)\/tasks/)[1]
  const details = document.querySelector(`[data-react-class="require('reactComponents/common/ShowModal')['default']"]`)

  if (id && details) {
    const props = JSON.parse(details.dataset.reactProps)
    const hits = JSON.parse(await GM.getValue(`hits`, `{}`))

    hits[id] = {
      src: document.querySelector(`iframe.embed-responsive-item`).src,
      name: props.modalOptions.requesterName,
      title: props.modalOptions.projectTitle,
      reward: props.modalOptions.monetaryReward.amountInDollars,
      viewed: +new Date()
    }

    GM.setValue(`hits`, JSON.stringify(hits))
  }
}