There are 13 previous versions of this script.
// ==UserScript==
// @name Hubdub Market Responses
// @namespace http://www.vanderkruijs.net/dev/userscripts/hubdub/marketresponses/
// @version 1.4.0
// @description Hubdub Market Responses add the mechanisms of creating markets "in response" to other markets and showing these relation.
// @author Constantinus van der Kruijs
// @copyright 2009, Constantinus van der Kruijs (http://www.vanderkruijs.net/)
// @include http://www.hubdub.com/*
// @homepage http://www.vanderkruijs.net/dev/userscripts/hubdub/marketresponses/
// @require http://www.vanderkruijs.net/dev/userscripts/hubdub/libs/hubdubpage.js?1.4.0
// @require http://www.vanderkruijs.net/dev/userscripts/hubdub/libs/hubdubmarkets.js?1.4.0
// @require http://www.vanderkruijs.net/dev/userscripts/hubdub/libs/hubdubmultipurposebox.js?1.4.0
// @require http://www.vanderkruijs.net/dev/userscripts/libs/gm_userconfig.js?1.4.0
// @require http://www.vanderkruijs.net/dev/userscripts/libs/cookies.js?1.4.0
// @require http://www.vanderkruijs.net/dev/userscripts/libs/request.js?1.4.0
// @require http://www.vanderkruijs.net/dev/userscripts/libs/string.js?1.4.0
// ==/UserScript==
var gm_config = hubdubPage.addConfig(
"55633", "1.4.0",
"Market Responses"
);
function modifyMarketDetailsPage()
{
var marketId = hubdubMarkets.getMarketId();
var marketTitle = hubdubMarkets.getMarketTitle();
var marketCreator = hubdubMarkets.getMarketCreatorName();
var marketState = hubdubMarkets.getMarketState();
/* ADD RESPONSES BOX */
var box = new hubdubMultiPurposeBox(document, "Responses", "market_responses", "related_tags");
var destDiv = document.createElement("div");
destDiv.id = "market_responses_info";
destDiv.innerHTML = "<i>Loading...</i>";
box.body.appendChild(destDiv);
/* add create response to the responses box */
var newLinkDiv = document.createElement("div");
newLinkDiv.className = "maintabs";
newLinkDiv.style.margin = "4px";
newLinkDiv.style.height = "";
var oldLink = document.getElementById("newquestion");
var newLink = document.createElement("a");
newLink.id = "newquestion";
newLink.style.width = "auto";
newLink.href = oldLink.href + "?inresponsetoId=" + marketId
+ "&inresponsetoTitle=" + escape(marketTitle)
+ "&inresponsetoState=" + escape(marketState);
var newImg = document.createElement("img");
newImg.border = "0";
newImg.style.cssFloat = "left";
newImg.style.marginRight = "3px";
newImg.style.marginTop = "0px";
newImg.src = "http://www.hubdub.com/images/icon_newquestion.gif";
newLink.appendChild(newImg);
newLink.appendChild(document.createTextNode("Create a market in response to: " + marketTitle));
newLinkDiv.appendChild(newLink);
box.body.appendChild(newLinkDiv);
getMarketResponseInfo(marketId, destDiv);
updateMarketInfo(marketId, marketTitle, marketCreator, marketState);
}
function modifyHomePage()
{
/* ADD RESPONSES BOX */
var box = new hubdubMultiPurposeBox(document, "Responses", "market_responses", 9);
var destDiv = document.createElement("div");
destDiv.id = "market_responses_info";
destDiv.innerHTML = "<i>Loading...</i>";
box.body.appendChild(destDiv);
getMarketResponsesInfo(destDiv);
}
function modifyNewMarketPage1()
{
var responseId = request.getQueryParameter("inresponsetoId");
if (!responseId)
return;
var newFormRow = document.createElement("div");
var responseTitle = request.getQueryParameter("inresponsetoTitle");
var responseState = request.getQueryParameter("inresponsetoState");
newFormRow.className = "form-row";
newFormRow.style.marginTop = "22px";
newFormRow.innerHTML = " \
<label style='width:105px;'>Response:</label> \
<span style='width: 465px;'> \
<input type='checkbox' id='inresponsetoYes' checked='checked' value='1' /> \
Create this question in response to this " + responseState.toLowerCase() +" question:<br /> \
<i>" + responseTitle + "</i> \
</span> \
";
var submitRow = document.getElementById("ccf3_create").parentNode;
var destElement = submitRow.parentNode
destElement.insertBefore(newFormRow, submitRow);
var form = document.getElementById("ccf3");
form.addEventListener(
'submit',
function ()
{
var url = document.location.href;
var check = document.getElementById("inresponsetoYes");
if (check && check.checked)
{
var responseId = request.getQueryParameter("inresponsetoId");
var responseTitle = request.getQueryParameter("inresponsetoTitle");
var responseState = request.getQueryParameter("inresponsetoState");
cookies.set("inresponsetoId", responseId, 120, "/");
cookies.set("inresponsetoTitle", responseTitle, 120, "/");
cookies.set("inresponsetoState", responseState, 120, "/");
}
else
{
cookies.set("inresponsetoId");
cookies.set("inresponsetoTitle");
cookies.set("inresponsetoState");
}
},
false
);
}
function modifyNewMarketPage2()
{
// nothing to do
}
function modifyNewMarketPage3()
{
var responseId = cookies.get("inresponsetoId");
if (!responseId)
return;
var newFormRow = document.createElement("div");
var responseTitle = cookies.get("inresponsetoTitle");
var responseState = cookies.get("inresponsetoState");
newFormRow.className = "form-row";
newFormRow.style.marginTop = "22px";
newFormRow.innerHTML = " \
<label style='width:105px;'>Response:</label> \
<span style='width: 465px;'> \
Create this question in response to this " + responseState.toLowerCase() +" question:<br /> \
<i>" + responseTitle + "</i> \
</span> \
";
var submitRow = document.getElementById("ccf3_adddetail").parentNode;
var destElement = submitRow.parentNode
destElement.insertBefore(newFormRow, submitRow);
var addDetailButton = document.getElementById("ccf3_adddetail");
addDetailButton.addEventListener("click", function () { registerResponse("Created"); }, false);
var saveButton = document.getElementById("ccf3_save");
saveButton.addEventListener("click", function () { registerResponse("Created"); }, false);
}
function modifyNewMarketPage4()
{
var responseId = cookies.get("inresponsetoId");
if (!responseId)
return;
var newFormRow = document.createElement("div");
var responseTitle = cookies.get("inresponsetoTitle");
var responseState = cookies.get("inresponsetoState");
newFormRow.className = "form-row";
newFormRow.style.marginTop = "22px";
newFormRow.innerHTML = " \
<label style='width:105px;'>Response:</label> \
<span style='width: 465px;'> \
Create this question in response to this " + responseState.toLowerCase() +" question:<br /> \
<i>" + responseTitle + "</i> \
</span> \
";
var submitRow = document.getElementById("ccf3_adddetail").parentNode;
var destElement = submitRow.parentNode
destElement.insertBefore(newFormRow, submitRow);
var addDetailButton = document.getElementById("ccf3_adddetail");
addDetailButton.addEventListener("click", function () { registerResponse("Open"); }, false);
}
function registerResponse(responseState)
{
var originId = cookies.get("inresponsetoId");
var responseId = hubdubMarkets.getMarketIdFromContent();
registerMarketResponse(originId, responseId);
}
function registerMarketResponse(originId, responseId)
{
var requesturl = "http://www.vanderkruijs.net/dev/userscripts/hubdub/_misc/register_response.php"
+ "?originMarketId=" + originId
+ "&responseMarketId=" + responseId
GM_xmlhttpRequest({
method: "GET", url: requesturl, headers: {},
onload: function(response) {
}
});
}
function getMarketResponseInfo(marketId, destDiv)
{
var requesturl = "http://www.vanderkruijs.net/dev/userscripts/hubdub/marketresponses/service/get_market_responses_div.php"
+ "?marketId=" + marketId
+ "?version=" + gm_config.version;
GM_xmlhttpRequest({
method: "GET", url: requesturl, headers: {},
onload: function(response) {
destDiv.innerHTML = response.responseText;
}
});
}
function getMarketResponsesInfo(destDiv)
{
var requesturl = "http://www.vanderkruijs.net/dev/userscripts/hubdub/marketresponses/service/get_latest_responses_div.php"
+ "?version=" + gm_config.version;
GM_xmlhttpRequest({
method: "GET", url: requesturl, headers: {},
onload: function(response) {
destDiv.innerHTML = response.responseText;
}
});
}
function updateMarketInfo(marketId, marketTitle, marketCreator, marketState)
{
var requesturl = "http://www.vanderkruijs.net/dev/userscripts/hubdub/_misc/update_market_info.php"
+ "?marketId=" + marketId
+ "&marketTitle=" + escape(marketTitle)
+ "&marketCreator=" + escape(marketCreator)
+ "&marketState=" + escape(marketState);
GM_xmlhttpRequest({
method: "GET", url: requesturl, headers: {},
onload: function(response) {
}
});
}
if (document.location.href.match(/^http:\/\/www.hubdub.com\/m.*/gi))
{
modifyMarketDetailsPage();
}
else if (document.location.href.match(/^http:\/\/www.hubdub.com\/p\/market_new.*/gi))
{
modifyNewMarketPage1();
}
else if (document.location.href.match(/^http:\/\/www.hubdub.com\/p\/MarketDuplicateCheck.*/gi))
{
modifyNewMarketPage2();
}
else if (document.location.href.match(/^http:\/\/www.hubdub.com\/e\/Market\/.*\/Create/gi))
{
modifyNewMarketPage3();
}
else if (document.location.href.match(/^http:\/\/www.hubdub.com\/e\/Market\/.*\/confirm/gi))
{
modifyNewMarketPage4();
}
else if (document.location.href.match(/^http:\/\/www.hubdub.com\/?/gi))
{
modifyHomePage();
}