Large

Hubdub Market Responses [discontinued]

By kruijs Last update Sep 7, 2009 — Installed 67 times.

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();
}