eUSA Forums Feed for Erepublik

Preview the latest posts on your favorite eUSA Forums board from the Erepublik homepage

// ==UserScript==
// @version    0.4
// @name       eUSA Forums Feed for Erepublik
// @namespace  http://eusaforums.com/
// @description  Preview the latest posts on your favorite eUSA Forums board from the Erepublik homepage
// @require		http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
// @grant       GM_addStyle
// @grant		GM_setValue
// @grant		GM_deleteValue
// @grant		GM_getValue
// @grant		GM_xmlhttpRequest
// @match      *://www.erepublik.com/*
// @exclude    *://www.erepublik.com/*/*
// @copyright  2014+, Mike Ontry
// ==/UserScript==

jQuery("body").append ( '                                                          																	\
    <div id="gmPopupContainer">                                               																		\
    <form> 																																			\
		<h2>eUSA Forums Feed Settings</h2><br />																									\
		<small>The username and password fields are optional. Use them if you are not already logged in to the forums on this device.</small><br />	\
		Username:<br />														  																		\
        <input type="text" id="eUSAForums-user" value="'+GM_getValue("user", "Forum Username")+'"><br />											\
		Password:<br />														  																		\
        <input type="password" id="eUSAForums-pass" value="'+GM_getValue("pass", "")+'"><br />          											\
		Number of posts to show:<br />														  														\
        <input type="text" id="eUSAForums-posts" value="'+GM_getValue("posts", "5")+'"><br />          												\
                                                                              																		\
        <button id="eUSAForums-submit" type="button">Save</button>			  																		\
		<button id="eUSAForums-clear" type="button">Clear Settings</button><br /><br />																\
		<h2>Add board</h2><br />																													\
		Board name:<br />																															\
        <input type="text" id="addboard-name"><br />																								\
		Board id:<br />																																\
		<input type="text" id="addboard-id"><br />																									\
		<button id="addboard-submit" type="button">Add</button><br /><br />																			\
		<h2>Remove board</h2><br />																													\
        <div id="removeboard-div"></div><br />																										\
		<button id="removeboard-submit" type="button">Remove</button><br />																			\
        <div id="gmCloseDlgBtn" title="Close"><img src="http://ereptools.tk/images/close.png"/></div>   											\
    </form>                                                                   																		\
    </div>                                                                    																		\
' );

jQuery(document).on("change", "#eUSAForums-board", function (e) {
    var board = jQuery("#eUSAForums-board").val();
    if(GM_getValue("board") != board) {
        GM_setValue("board", board);
        waitForFeed(GM_getValue("board"), GM_getValue("posts"));
    }
});

jQuery("#addboard-submit").click ( function () {
    var addName = jQuery("#addboard-name").val();
    var addId = jQuery("#addboard-id").val();
    jQuery("#addboard-name").val("");
    jQuery("#addboard-id").val("");
    if (addName != "" || addId != ""){
        if( GM_getValue("boardsList", "") != ""){
            var oldBoards = JSON.parse(GM_getValue("boardsList"));
            oldBoards.push(addName);
            oldBoards.push(addId);
            GM_setValue("boardsList", JSON.stringify(oldBoards));
        }else{
            var boardsList = [addName, addId];
            GM_setValue("boardsList", JSON.stringify(boardsList));
        }
    }
    jQuery("#gmPopupContainer").hide();
    loadBoardList();
});

jQuery("#removeboard-submit").click ( function () {
    var removeName = jQuery("#removeboard-name").val();
    if (removeName != ""){
        if( GM_getValue("boardsList", "") != ""){
            var oldBoards = JSON.parse(GM_getValue("boardsList"));
            for (i = 0; i < oldBoards.length; i++) { 
                if(oldBoards[i] == removeName){
                    oldBoards.splice(i-1,2);
                }
            }
            GM_setValue("boardsList", JSON.stringify(oldBoards));
        }
    }
    jQuery("#gmPopupContainer").hide();
    loadBoardList();
});

jQuery("#eUSAForums-submit").click ( function () {
    var user = jQuery("#eUSAForums-user").val();
    var pass = jQuery("#eUSAForums-pass").val();    
    var posts = jQuery("#eUSAForums-posts").val();
    if (GM_getValue("user") != user || GM_getValue("pass") != pass || GM_getValue("posts") != posts ) {
        GM_setValue("posts", posts);
        jQuery("#gmPopupContainer").hide();
        if(GM_getValue("user") != user || GM_getValue("pass") != pass){
            GM_setValue("user", user);
            GM_setValue("pass", pass);
            if(GM_getValue("user") != "Forum Username" || GM_getValue("pass") != ""){
            	loginForums();
            }
        }
        waitForFeed(GM_getValue("board"), GM_getValue("posts"));
    }else {
        jQuery("#gmPopupContainer").hide();
    }
});

jQuery("#eUSAForums-clear").click ( function () {
    jQuery("#eUSAForums-user").val("");
    jQuery("#eUSAForums-pass").val("");
    jQuery("#eUSAForums-posts").val("");
    GM_deleteValue("user");
    GM_deleteValue("pass");
    GM_deleteValue("board");
    GM_deleteValue("posts");
    waitForFeed("", "");
    loadBoardList();
    jQuery("#gmPopupContainer").hide();
} );

jQuery("#gmCloseDlgBtn").click ( function () {
    jQuery("#gmPopupContainer").hide();
} );

jQuery(".column:first").append('<h1 class="noborder eUSAForums-title" style="clear:left;"></h1><div id="eUSAForums-config">Feed Settings</div><div id="eUSAForums-select"></div>');
jQuery(".column:first").append('<div class="media_widget eUSAForums"><div id="eUSAForums-container"><ul></ul></div><a href="http://eusaforums.com/forum/index.php?action=forum" target="_blank" class="visit_eUSAForums" title="Visit Forums">Visit Forum</a></div>');
jQuery("#gmPopupContainer").css({top: jQuery("#eUSAForums-config").offset().top, left: jQuery("#eUSAForums-config").offset().left});
jQuery("#eUSAForums-config").click ( function () {
    jQuery("#gmPopupContainer").show();
});

jQuery(document).on("mouseleave mouseenter", "li.eUSAForums-list", function (e) {
    if (e.type === 'mouseenter') {
        jQuery(this).children('.eUSAForums-items').css('display', 'none');
        jQuery(this).children('.eUSAForums-desc').css('display', 'inline-block');
        jQuery(this).height(140);
        jQuery(this).children('.eUSAForums-desc').height(140);
    }
    else{
        jQuery(this).children('.eUSAForums-items').css('display', 'block');
        jQuery(this).children('.eUSAForums-desc').css('display', 'none');
        jQuery(this).height(70);
        jQuery(this).children('.eUSAForums-desc').height(70);
    }
});

function loginForums() {
    GM_xmlhttpRequest({
        method: "POST",
        url: "http://eusaforums.com/forum/index.php?action=login2",
        data: "&action=login2&user="+GM_getValue("user")+"&passwrd="+GM_getValue("pass")+"&cookieneverexp=on&hash_passwrd=",
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        },
        onload: function() {
            waitForFeed(GM_getValue("board"), GM_getValue("posts"));
        }
    });
}

function loadBoardList() {
    var selectMenu = '<select id="eUSAForums-board"><option value="">All Boards</option>';
    var selectConfigMenu = '<select id="removeboard-name"><option value="">Select Board</option>';
	if( GM_getValue("boardsList", "") != ""){
		var oldBoards = JSON.parse(GM_getValue("boardsList"));
        for (i = 0; i < oldBoards.length; i+=2) {
            selectMenu += '<option value="'+oldBoards[i+1]+'">'+oldBoards[i]+'</option>';
            selectConfigMenu += '<option value="'+oldBoards[i+1]+'">'+oldBoards[i]+'</option>';
        }
    }
    selectMenu += '</select>';
    selectConfigMenu += '</select>';
    jQuery("#eUSAForums-select").empty();
    jQuery("#eUSAForums-select").append(selectMenu);
    jQuery("#removeboard-div").empty();
    jQuery("#removeboard-div").append(selectConfigMenu);
}

function waitForFeed(b,p) {
    b = typeof b !== 'undefined' ? b : GM_getValue("board", "");
    p = typeof p !== 'undefined' ? p : GM_getValue("posts", "");
    jQuery("#eUSAForums-container").find("ul").empty();
    GM_xmlhttpRequest({
        method: "GET",
        url: "http://eusaforums.com/forum/index.php?action=.xml;sa=recent;board="+b+";limit="+p+";type=atom",
        onload: function(response) {
            var data = jQuery.parseXML(response.responseText);
    
            jQuery(data).find("feed").each(function () {
                var el = jQuery(this);        
                var title = el.find("title:first").text();
                jQuery(".eUSAForums-title").html(title);
            });
            jQuery(data).find("entry").each(function () {
                var el = jQuery(this);        
                var title = el.find("title").text();
                var link = el.find("id").text();
                var pubDate = el.find("published").text();
                var desc = el.find("summary").text();
                var author = el.find("author").find("name").text();
                var authorLink = el.find("author").find("uri").text();
                
                jQuery("#eUSAForums-container").find("ul").append('<li class="eUSAForums-list"><div class="eUSAForums-items"><div><a href="'+link+'" target="_blank" class="eUSAForums-link">'+title+'</a><br /><a href="'+authorLink+'" target="_blank">'+author+'</a><br /><br /><small>'+pubDate+'</small></div></div><br /><br /><div class="eUSAForums-desc"><a href="'+link+'" target="_blank" class="eUSAForums-link">'+title+'</a><br /><a href="'+authorLink+'" target="_blank">'+author+'</a><br /><br />'+desc+'<br /><br /><a href="'+link+'" target="_blank" class="eUSAForums-link">Continue Reading...</a></div></li>');
            });
        }
    });
}

loadBoardList();

//CSS
GM_addStyle ( "                                                 			\
    #gmPopupContainer {                                         			\
        position:               absolute;                       			\
		width:					278px;										\
        padding:                2em;                            			\
        background:             #C1E4F1;                     				\
        border:                 3px double black;               			\
        border-radius:          1ex;                            			\
        z-index:                999;										\
		display:				none;										\
    }                                                           			\
    #gmPopupContainer button{                                   			\
        cursor:                 pointer;                        			\
        margin:                 1em 1em 0;                      			\
        border:                 1px outset buttonface;          			\
    }                                                           			\
	#gmCloseDlgBtn {         		                            			\
		cursor:                 pointer;                        			\
		position:				absolute;									\
		top:					0px;										\
		right:					0px;										\
    }                                                           			\
	#eUSAForums-config {													\
		background-color:		#C1E4F1;									\
		text-align:				center;										\
		cursor:                 pointer;                        			\
	}																		\
	#eUSAForums-select {													\
		background-color:		#C1E4F1;									\
		text-align:				center;										\
	}																		\
	#eUSAForums-select select {												\
        background: #C1E4F1;												\
        border:none;														\
        outline:none;														\
        cursor:pointer;														\
    }																		\
    .eUSAForums-items a { 													\
        float: left; 														\
        color: #333; 														\
        line-height: 15px; 													\
        clear: both; 														\
        font-size: 14px; 													\
        font-family: Cambria,Georgia,serif; 								\
    } 																		\
    .eUSAForums li { 														\
        width: 318px; 														\
        height: 70px;														\
        top: 0; 															\
        left: 0; 															\
        padding: 7px; 														\
        float: left; 														\
        clear: both; 														\
        border-bottom: 1px solid #efeded; 									\
        position: relative; 												\
    } 																		\
    .eUSAForums ul { 														\
        list-style-type: none; 												\
    } 																		\
    .visit_eUSAForums { 													\
        float: left; 														\
        width: 100px; 														\
        height: 20px; 														\
        -moz-border-radius-topleft: 5px; 									\
        -moz-border-radius-topright: 5px; 									\
        border-radius: 5px 5px 0 0; 										\
        background-color: #e0ddd0; 											\
        background-image: -webkit-linear-gradient(#f2f0ec 0,#e0ddd0 100%); 	\
        background-image: linear-gradient(#f2f0ec 0,#e0ddd0 100%); 			\
        box-shadow: #d6d1c5 0 1px 2px inset; 								\
        position: absolute; 												\
        bottom: 3px; 														\
        font-size: 11px; 													\
        text-shadow: #fff 0 1px 0; 											\
        color: #726c5f; 													\
        left: 116px; 														\
        text-align: center; 												\
        line-height: 22px; 													\
    } 																		\
    .eUSAForums-desc { 														\
		background-color: #E7EAEF;											\
        display: none; 														\
        z-index: 10; 														\
        width: 318px; 														\
        height: 70px; 														\
        position: absolute; 												\
        top: 0; 															\
        left: 0; 															\
        padding: 7px; 														\
        overflow-y: auto; 													\
        overflow-x: auto; 													\
        color: #333; 														\
        line-height: 15px; 													\
        clear: both; 														\
        font-size: 14px; 													\
        font-family: Cambria,Georgia,serif; 								\
    } 																		\
    .eUSAForums-desc a { 													\
        color: #346; 														\
		text-decoration: underline;											\
        line-height: 15px; 													\
        clear: both; 														\
        font-size: 14px; 													\
        font-family: Cambria,Georgia,serif; 								\
    } 																		\
	.eUSAForums-desc .bbc_standard_quote { 									\
        background-color: #D7DAEC; 											\
		border-bottom-style: solid;											\
        border-bottom-color:          #9999AA;                            	\
		padding: 3px; 														\
        font-size: small; 													\
        font-family: Cambria,Georgia,serif; 								\
    } 																		\
	.eUSAForums-desc .bbc_alternate_quote { 								\
        background-color: #E7EAFC; 											\
		border-bottom-style: solid;											\
        border-bottom-color:          #9999AA;                            	\
		border-top-style: solid;											\
        border-top-color:          #9999AA;                            		\
		padding: 3px; 														\
        font-size: small; 													\
        font-family: Cambria,Georgia,serif; 								\
    } 																		\
	.eUSAForums-desc .topslice_quote { 										\
        background-color: #D7DAEC; 											\
		border-top-style: solid;											\
		border-top-color:          #9999AA;                            		\
		padding: 3px; 														\
        font-size: small; 													\
        font-family: Cambria,Georgia,serif; 								\
    } 																		\
	.eUSAForums-desc .topslice_quote a { 									\
        font-size: x-small; 												\
        font-family: Cambria,Georgia,serif; 								\
    } 																		\
	.eUSAForums-desc .bbc_img { 											\
        max-width: 300px; 													\
        max-height: 400px; 													\
    }																		\
	.youtube iframe { 														\
        width: 275px; 														\
        height: 140px; 														\
    }																		\
" );
window.addEventListener('load', waitForFeed(), false);