Commit e945654

bryfry <bryon@fryer.io>
2016-11-17 13:28:15
init
Changed files (1)
Chronos_Trigger.user.js
@@ -0,0 +1,208 @@
+// ==UserScript==
+// @name         Chronos Trigger
+// @namespace    http://tampermonkey.net/
+// @version      0.2.04
+// @description  Making WMKS.js Great Again!
+// @author       @bryfry
+// @match        http://ginkgo.azuretitan.com/*vm_view*
+// @updateURL    http://trustme.click/Chronos_Trigger.user.js
+// @require      http://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/0.11.16/js/jquery.terminal.min.js
+// @require      https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js
+// @require      https://cdn.jsdelivr.net/mousetrap/1.6.0/mousetrap.min.js
+// @resource     jqt_css http://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/0.11.16/css/jquery.terminal.min.css
+// @grant        GM_addStyle
+// @grant        GM_getResourceText
+// ==/UserScript==
+
+// Set an object's width and height to the parent's width and height while preserving content aspect ratio
+jQuery.fn.fitToParent = function() {
+    this.each(function() {
+        var width  = $(this).width();
+        var height = $(this).height();
+        var parentWidth  = $(this).parent().width();
+        var parentHeight = $(this).parent().height()-termBarHeight;
+        if(width/parentWidth > height/parentHeight) {
+            newWidth  = parentWidth;
+            newHeight = newWidth/width*height;
+        }
+        else {
+            newHeight = parentHeight;
+            newWidth  = (newHeight/height*width);
+        }
+        $(this).css({'height':newHeight + 'px', 'width':newWidth + 'px'});
+    });
+};
+
+// I'm not proud of this
+window.sourceWidth=0;
+window.soruceHeight=0;
+window.termBarHeight=18;
+
+// Over-write _sendMouseEvent to enable scaling the mouse locations
+WMKS.VNCDecoder.prototype._sendMouseEvent = function () {
+   var canvas = $("#mainCanvas");
+   var viewWidth = canvas.width();
+   var viewHeight = canvas.height();
+   var scaledX = Math.round(this._mouseX * (window.sourceWidth/viewWidth));
+   var scaledY = Math.round(this._mouseY * (window.sourceHeight/viewHeight));
+   var arr = [];
+   arr.push8(this.msgPointerEvent);
+   arr.push8(this._mouseButtonMask);
+   arr.push16(scaledX);
+   arr.push16(scaledY);
+   this._sendBytes(arr);
+   this._mouseActive = false;
+};
+
+
+
+// not very dry
+function toggleOld(show,delay){
+    if (delay) {
+        setTimeout(function(){
+            if (!show) {
+                $('#bar').hide();
+                $('#bar').css({'padding':0, 'height':0});
+            } else {
+                $('#bar').show();
+                $('#bar').css({'padding':6, 'height':60});
+                window.termBarHeight=0;
+            }
+        },delay);
+    } else {
+        if (!show) {
+            $('#bar').hide();
+            $('#bar').css({'padding':0, 'height':0});
+        } else {
+            $('#bar').show();
+            $('#bar').css({'padding':6, 'height':60});
+            window.termBarHeight=0;
+        }
+    }
+}
+
+function resizeView(delay){
+    if (delay) {
+        setTimeout(function(){
+            $("#mainCanvas").fitToParent();
+            $("#console").css("height","auto");  // ಠ_ಠ
+        },delay);
+    } else {
+        $("#mainCanvas").fitToParent();
+    }
+    $("#console").css('top',0); // see note in Make things pretty: ಠ_ಠ
+    $("#console").css("position","relative");  // ಠ_ಠ
+    $("#console").css("height","auto");  // ಠ_ಠ
+    $("#mainCanvas").css("position","relative");  // ಠ_ಠ
+
+}
+
+// Do things to the page
+(function() {
+    'use strict';
+
+    // Because one is the loneliest number of input lines. <input> bad, <textarea> good.
+    $("#pasteTextInput").replaceWith(function() { return "<textarea id='pasteTextInput'></textarea>"; });
+
+    // useless buttons are useless
+    $('#toggle-keyboard').hide();
+    $('#spinner').remove();
+    toggleOld(false,0);
+
+    // on resize events, resize the view
+    $("#console").bind("wmksconnected", function() {
+        var canvas = $("#mainCanvas");
+        window.sourceWidth = canvas.width();
+        window.sourceHeight = canvas.height();
+        resizeView(250);
+    });
+    $("#console").bind("wmksresolutionchanged", function() {
+        var canvas = $("#mainCanvas");
+        window.sourceWidth = canvas.width();
+        window.sourceHeight = canvas.height();
+        resizeView(0);
+    });
+    $(window).resize(function() {
+        resizeView(0);
+    });
+
+    // Append terminal bar to bottom
+    $("#console").after("<div id='termBar'></div>");
+    $("#termBar").append("<div id='termNav' class='terminal cmd'>| </div>");
+    $("#termBar").append("<div id='termCmd'></div>");
+    $("#termNav").append("<input type='checkbox' id='termNewLine' checked>NL</a>");
+    $("#termNav").append("<a href='#' class='termnavlink' id='navCAD'>CAD</a>");
+    $("#termNav").append("<a href='#' class='termnavlink' id='navFull'>Full</a>");
+    $("#termNav").append("<a href='#' class='termnavlink' id='navOld'>Old</a>");
+
+    $("#navCAD").click(function() {
+        $("#console").wmks('sendKeyCodes', [
+            $.ui.keyCode.CONTROL,
+            $.ui.keyCode.ALT,
+            $.ui.keyCode.DELETE]);
+    });
+
+    $("#navFull").click( function() {
+        var el = document.documentElement,
+            rfs = el.requestFullscreen
+                || el.webkitRequestFullScreen
+                || el.mozRequestFullScreen
+                || el.msRequestFullscreen;
+        rfs.call(el);
+    });
+
+     $("#navOld").click(function() {
+        $('#termBar').hide();
+        toggleOld(true,0);
+    });
+
+    $('#termCmd').terminal(function(command, term) {
+        if (command !== '') {
+            if ($("#termNewLine").is(':checked')) {
+                command = command+"\n";
+                console.log(command);
+            }
+            _wmks.wmks('sendInputString', command);
+        } else {
+           term.echo('');
+        }
+    }, {
+        greetings: false,
+        name: 'paste_bar',
+        height: window.termBarHeight,
+        prompt: 'ct > '
+    });
+
+    // Make things pretty
+    //   Because there are a ton of jquery css manipulations in the source js
+    //   files we have to run around and undo all of those changes all the time.
+    //   You will find these jqery css manipulations annotated with a ಠ_ಠ. This
+    //   is why we can't have nice things.  YRMV but as a general rule, if you
+    //   are doing css maniplations in jquery you are going to have a bad time,
+    //   this is why.  Some of these are also fixing inline styles.
+    $("#console").css("position","relative");  // ಠ_ಠ
+    $("#console").css("height","auto");  // ಠ_ಠ
+    $("#mainCanvas").css("position","relative");  // ಠ_ಠ
+    var jqt_css = GM_getResourceText ("jqt_css");
+    GM_addStyle (jqt_css);
+    GM_addStyle('#pasteTextInput {margin: 0px; width: 500px; height: 40px !important; }');
+    GM_addStyle('#vmTitle { text-shadow: 1px 1px 3px rgba(50, 50, 50, 1) !important; }');
+    GM_addStyle('#console {  overflow: hidden; text-align: center; height: auto; !important }');
+    GM_addStyle('#mainCanvas { left: 0px; right:0; margin-left:auto; margin-right: auto; !important }');
+    GM_addStyle('#termCmd {  padding-left: 5px; padding-right: 5px; padding-top: 0px; padding-bottom: 0px; width: -webkit-calc(100% - 155px); float:right; overflow: hidden; !important }');
+    GM_addStyle('a.termnavlink { padding: 0px 5px 0px 5px; !important }');
+    GM_addStyle('#termNewLine { width: 7px; height: 7px }');
+
+    // This is getting silly enough I might host a css file instead of this madness
+    // This is why you don't do css in js.
+    var termNav = " \
+      #termNav{        \
+        padding 0px 5px 0px 5px; \
+        float:right; \
+        text-align: left; \
+        width: 145px; \
+        !important \
+    }";
+    GM_addStyle(termNav);
+
+})();