Planets.nu - Message Links Plugin

Adds links to ships/planets/bases in reports and messages.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name          Planets.nu - Message Links Plugin
// @description   Adds links to ships/planets/bases in reports and messages.
// @include       http://*.planets.nu/*
// @include       http://planets.nu/*
// @version 1.0
// @namespace https://greatest.deepsurf.us/users/7189
// ==/UserScript==

/*------------------------------------------------------------------------------
This add-on improves inter-player communications by adding links into the 
message to replace strings of the following formats:

s#XXX
p#XXX
b#XXX

where s, p, b are for ship, planet, base respectively, and XXX is the id 
number of the object. The # may be omitted. If the object is found, 
the text is replace by a link including the name, that when clicked
selects the object on the map. 

Example, the string:

s#42

will be replaced by a link similar to "S#42: GOBRIE CLASS BATTLE CARRIER", 
which will also select that ship when clicked.

Version History:
0.3 Adds notes to bottom of ship and planet screens. Applies same link format.
0.4 Adds links to system messages too, searching for "ID#XXX". Simple mided
    implementation, will likely give strange results in some corner cases,
    such as a planet and a ship having both the same ID *and* name, or a ship
    having a name set to the name and ID of a different ship/planet.
0.5 Fixes system message links to handle ship names with special chars.
0.7 Changes link color for new version
1.0 Major update for new version
    - now uses plugin toolkit
    - fixed some links to stuff owned by others
    - added map highlighting of object when selected
    - added parsing of formats without the # sign in between, ie. s42 or p123
      (this seems to be a more common usage)
    - links are now also added to activity feed
    - activity feed is detachable, can be viewed as movable window and is visible
      on map and other screens
------------------------------------------------------------------------------*/

function wrapper () { // wrapper for injection

    
var pluginName = "MessageLinks";
var mintoolkit = 5;

if (!vgap) return;
if (vgap.version < 3) return;

if (!vgap.toolkit || !vgap.toolkit.version || vgap.toolkit.version < mintoolkit) {
    var html = "<div class=ToolkitWarning style='width: 600px; height: 200px; position: absolute; top: 50%; left: 50%; margin-left: -310px; margin-top: -110px; padding: 20px; background-color: #888888'>";
    html    += "<div style='width: 100%; text-align: right;'><a onclick='$(\"div.ToolkitWarning\").remove(); return false;'><span style='padding: 5px; background-color: #aaaaaa; cursor: pointer;'>X</span></a></div>";
    html    += "WARNING: Toolkit Not Installed or Needs Update<br><br>";
    html    += "The plugin <span style='font-style: italic;'>" + pluginName + "</span> requires the Planets.nu Plugin Toolkit to be installed.<br><br>";
    html    += "To install the latest toolkit, click <a href='http://planets.nu/_library/toolkit/install.html' target='_blank'>HERE</a><br>";
    html    += "(You will need to exit any open game and refresh your browser after installing)<br><br>";    
    html    += "Note: If you have installed the toolkit and are still getting this error, you may need to adjust the script execution order so that the toolkit is run first.</div>";
    $("body").append(html);
    return;
}
    
var plugin = {
    name: pluginName,
    
    detachActivityPane: function () {
        $("#DetachActivity").remove();
        nu.modal($("<div id='ActivityFloat'></div>"), "Activity", 380, true, function () { if ($("#GameActivity").length == 0) vgap.dash.summary(); } );
        nu.overlay.hide();
        var ga = $("#GameActivity");
        var offset = ga.offset();
        offset.left -= 2;
        offset.top -= 22;
        nu.modalwin.offset( offset );
        $(".esimplewincontent").css( {padding: 0, position: "relative"} ).height(ga.height);
        ga.css({"background-color": "#555", "border-radius": 0}).appendTo("#ActivityFloat");
        $("#GameActivity .ecancelbutton").tclick( function () {vgap.plugins.MessageLinks.activityupdated = true; vgap.dash.summary();} );
        
    },

    // Actual functions moved to toolkit, just re-reference here to avoid changing a lot of code.
    addLinksToText: vgap.addLinksToText,
    addLinksToMessage: vgap.addLinksToMessage,    

    drawNoteOnActiveScreen: function (note) {
        if (note != null) {
            $("#Notes").html(note.body.replace(/\n/g, "<br/>"));
            $("#Notes").html(this.addLinksToText);
        }
    },

    loadship: function () {

        $("#ShipOrders").after("<div class='SepContainer' id='Notes'/>");
        this.drawNoteOnActiveScreen(vgap.getNote(vgap.shipScreen.ship.id, 2));

    },

    loadplanet: function () {

        $("#Colony").after("<div class='SepContainer' id='Notes'/>");
        this.drawNoteOnActiveScreen(vgap.getNote(vgap.planetScreen.planet.id, 1));

    },
    
    showsummary: function () {
        if ($("#ActivityFloat").length > 0) {
            if (this.activityupdated) {
                $("#ActivityFloat").empty();
                $("#GameActivity").css({"background-color": "#555", "border-radius": 0}).appendTo("#ActivityFloat");
                $("#GameActivity .ecancelbutton").tclick( function () {vgap.plugins.MessageLinks.activityupdated = true; vgap.dash.summary();} );
            }
            else {
                $("#PlanetsContainer #GameActivity").remove();
            }
        }
        else {
            $("#PlanetsContainer #GameActivity").prepend("<div id='DetachActivity' style='color: cyan; text-align: center; height: 20px; width: 100%;'><a onclick='vgap.plugins.MessageLinks.detachActivityPane();'>DETACH</a></div>");        
        }
        vgap.plugins.MessageLinks.activityupdated = false;
    }

}
vgap.toolkit.registerPlugin(plugin);


    //Legacy Overrides
    var old_saveNote = vgaPlanets.prototype.saveNote;
    vgaPlanets.prototype.saveNote = function (id, noteType) {

        old_saveNote.apply(this, arguments);

        if ( (noteType == 2 && this.shipScreenOpen && this.shipScreen.ship.id == id) || (noteType == 1 && this.planetScreenOpen && this.planetScreen.planet.id == id))
            drawNoteOnActiveScreen(vgap.getNote(id, noteType));

    };

    var oldShowPlayerMessages = vgapDashboard.prototype.showPlayerMessages;
    vgapDashboard.prototype.showPlayerMessages = function () {

        oldShowPlayerMessages.apply(this, arguments);

        $("#MessageInbox td").html(vgap.plugins.MessageLinks.addLinksToText);
        //return "Beefer";

    };

    var oldShowMessages = vgapDashboard.prototype.showMessages;
    vgapDashboard.prototype.showMessages = function (messagetype) {

        oldShowMessages.apply(this, arguments);

        $("#MessageInbox td").html(vgap.plugins.MessageLinks.addLinksToMessage);
        //return "Beefer";

    };
    
    var old_massageActivity = vgaPlanets.prototype.massageActivity;
    vgaPlanets.prototype.massageActivity = function (item, isreply) {

        old_massageActivity.apply(this, arguments);    
        
        item.message = vgap.plugins.MessageLinks.addLinksToText(item.message);
        item.excerpt = vgap.plugins.MessageLinks.addLinksToText(item.excerpt);
        
    };
    
    var old_processActivity = vgaPlanets.prototype.processActivity;
    vgaPlanets.prototype.processActivity = function (item, isreply) {

        old_processActivity.apply(this, arguments);    
        
        vgap.plugins.MessageLinks.activityupdated = true;
        
    };
    
    var old_showActivity = vgapDashboard.prototype.showActivity;
    vgapDashboard.prototype.showActivity = function () {

        old_showActivity.apply(this, arguments);

        $("#ecancelbutton").tclick( function () {vgap.plugins.MessageLinks.activityupdated = true; vgap.dash.summary();} );

    };    
    
    
    
} //wrapper for injection

var script = document.createElement("script");
script.type = "application/javascript";
script.textContent = "(" + wrapper + ")();";

document.body.appendChild(script); 
document.body.removeChild(script);