[Worker MTurk] Group Id History

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

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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))
  }
}