HIT Export Mod for HIT Catcher

Adds panda and once links to HIT exports

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         HIT Export Mod for HIT Catcher
// @namespace    https://gist.github.com/Kadauchi
// @version      1.0.4
// @description  Adds panda and once links to HIT exports
// @author       Kadauchi
// @icon         http://i.imgur.com/oGRQwPN.png
// @include      https://turkerhub.com/threads/*
// @include      http://www.mturkcrowd.com/threads/*
// ==/UserScript==

const extId = `iglbakfobmoijpbigmlfklckogbefnlf`;

function addButtons (elem) {
  const key = elem.querySelector(`a[href^="https://www.mturk.com/mturk/preview?groupId="]`).getAttribute(`href`).match(/roupId=(.*)/)[1];

  elem.insertAdjacentHTML(
    `afterbegin`,
    `<div>
      <button data-key="${key}" type="button" class="button primary HIT-Catcher-Panda">Panda</button>
      <button data-key="${key}" type="button" class="button primary HIT-Catcher-Once">Once</button>
    </div>`
  );
}

function sendToHC (once, hitSetId) {
  chrome.runtime.sendMessage(extId, {
    type: `hitCatcherAddWatcher`,
    message: {
      nickname: null,
      once: once,
      sound: true,
      requesterName: null,
      requesterId: null,
      title: null,
      hitSetId: hitSetId,
      reward: null,
      assignmentDuration: null,
      hitRequirements: null,
      hitAutoAppDelay: null
    }
  });
}

function nom (elem) {
  if (document.URL.match(`turkerhub`)) {
    const post = elem.closest(`li[id^="post-"]`);
    const postId = post.id.match(/[0-9]+/)[0];
    const quoted = elem.closest(`.quoteContainer`);
    const xfToken = document.querySelector(`input[name=_xfToken]`).value;

    if (quoted) {
      const post = quoted.previousElementSibling.querySelector(`.AttributionLink`).getAttribute(`href`).match(/[0-9]+/)[0];
      $.post(`https://turkerhub.com/posts/${post}/rate`, {rating: `15`, _xfToken: xfToken});
    }
    else {
      $.post(`https://turkerhub.com/posts/${postId}/rate`, {rating: `15`, _xfToken: xfToken});
    }
  }
}

for (let elem of document.getElementsByClassName(`ctaBbcodeTable`)) {
  if (elem.querySelector(`a[href^="https://www.mturk.com/mturk/preview?groupId="]`)) addButtons(elem);
}

const observer = new MutationObserver(function (mutations) {
  mutations.forEach(function (mutation) {
    for (let i = 0; i < mutation.addedNodes.length; i++) {
      const added = mutation.addedNodes[i];

      for (let elem of added.getElementsByClassName(`ctaBbcodeTable`)) {
        if (elem.querySelector(`a[href^="https://www.mturk.com/mturk/preview?groupId="]`)) addButtons(elem);
      }
    }
  });
});

observer.observe(document.getElementById(`messageList`), {childList: true});

document.addEventListener(`click`, function (event) {
  const elem = event.target;

  if (elem.matches(`.HIT-Catcher-Panda`)) {
    sendToHC(false, elem.dataset.key);
    nom(elem);
  }
  if (elem.matches(`.HIT-Catcher-Once`)) {
    sendToHC(true, elem.dataset.key);
    nom(elem);
  }
});