// ==UserScript==
// @name Procore Development helper (Mturk)
// @namespace https://greasyfork.org/users/3408
// @author DonovanM
// @description Makes it easier to do Procore Development drawing number and title HITs on Mturk.
// @include https://www.procoretech.com/mechanical_turk/show_drawing_revision*
// @include http://www.procoretech.com/mechanical_turk/show_drawing_revision*
// @include https://get.thecurrentset.com/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
// @version 0.9.2
// @grant none
// ==/UserScript==
// Automatically scrolls to the bottom right on load. Whatever you type into the floating
// form will be entered into the real form. Pressing enter or clicking the Done button will
// bring the window back to the top with the input fields filled in (so you can preview
// before you submit). Hitting Enter again will submit the hit. Use Ctrl + arrow keys to
// move around the window.
var clone,
currentSet = false;
$(document).ready(function() {
if (document.URL.indexOf("get.thecurrentset.com") !== -1)
currentSet = true;
if (!currentSet){
// Stretch out the input boxes to make sure everything was typed out correctly
$("#drawing_number").css('width', "500px");
$("#drawing_title").css('width', "500px");
} else {
$("div.drawing-image").css({
'max-width': "100%",
'position': "absolute",
'right': "0",
'left': "195px",
'width': "auto",
'top': "0",
'bottom': "30px",
'height': "auto"
});
$("hr").remove();
}
var form = $("<form>");
// Container
var div = $("<div>")
.css('position', "fixed")
.css('right', "0px")
.css('bottom', "0px")
.css('padding', "3px")
.css('background-color', "rgba(160,215,255,0.75)")
.css('border', "1px solid rgba(130,200,220,0.75)")
.css('border-width', "1px 0 0 1px")
.css('border-radius', "2px 0 0 0")
.css('font', "11pt sans-serif")
.append(
$("<p>")
.html("Drawing/sheet number: ")
.append(
$("<input>") // First input (drawing number)
.attr('id', "clone_number")
.keydown(function() { clone.number() })
)
)
.append(
$("<p>")
.html("Drawing/sheet title: ")
.css('margin-left', "20px")
.append(
$("<input>") // Second input (drawing number)
.attr('id', "clone_title")
.css('width', "500px")
.keydown(function() { clone.title() })
)
.append(
$("<button>") // Done button (doesn't submit, just takes you to the real sumbit button)
.html("Done")
.prop('type', "button")
.css('margin', "0 10px 0 20px")
.click(function() {
$(window).scrollTop(0).scrollLeft(0);
$("button[name='commit']").focus();
})
)
)
// Add some shared styles
$("p", div).css('text-align', "right").css('display', "inline");
$("input", div).css('background-color', "rgba(255,255,255,0.65)").css('border', "1px solid #ddd");
form.append(div);
$("body").append(form);
$("#clone_number")[0].focus();
clone = new Clone();
});
$(window).load(function(e) {
// Timeout needed for Chrome or it will scroll to the bottom right and quickly back to it's original position
// otherwise. Not sure if a longer timeout is needed for slower computers.
setTimeout(function() { Scroll.bottom(); Scroll.farRight() }, 100);
});
// Clone object. Copies text from the floating form to the HIT form. Created as an object to keep references to
// jQuery objects instead of doing a search on each keypress. The timeout allows the text to go into the floating
// form before copying it, otherwise it'll copy before the text is actually in the input box.
function Clone() {
var self = this;
this.numberBox = $("#drawing_number");
this.titleBox = $("#drawing_title");
this.numberClone = $("#clone_number");
this.titleClone = $("#clone_title");
this.number = function() {
setTimeout(function() {
self.numberBox.val(self.numberClone.val());
}, 100);
}
this.title = function() {
setTimeout(function() {
self.titleBox.val(self.titleClone.val());
}, 100);
}
}
$(document).keydown(function(e) {
if (e.keyCode == 13) {
$(window).scrollTop(0).scrollLeft(0);
$("*[name='commit']").focus();
} else if (e.ctrlKey) {
switch (e.keyCode) {
case 38: // Up
Scroll.top();
break;
case 40: // Down
Scroll.bottom();
break;
case 37: // Left
Scroll.farLeft();
break;
case 39: // Right
Scroll.farRight();
break;
}
}
});
var Scroll = {
top: function() {
if (currentSet)
$("div.drawing-image").scrollTop(0);
else
$(window).scrollTop(0);
},
bottom: function() {
if (currentSet)
$("div.drawing-image").scrollTop($("div.drawing-image")[0].scrollHeight);
else
$(window).scrollTop($(this).height());
},
farLeft: function() {
if (currentSet)
$("div.drawing-image").scrollLeft(0);
else
$(window).scrollLeft(0);
},
farRight: function() {
if (currentSet)
$("div.drawing-image").scrollLeft($("div.drawing-image")[0].scrollWidth);
else
$(window).scrollLeft($(document).outerWidth() - $(window).width());
}
}