InstaSynchP Event Hooks

Add hooks to the events on the InstaSynch page

اعتبارا من 14-10-2014. شاهد أحدث إصدار.

// ==UserScript==
// @name        InstaSynchP Event Hooks
// @namespace   InstaSynchP
// @description Add hooks to the events on the InstaSynch page

// @version     1.0.4
// @author      Zod-
// @source      https://github.com/Zod-/InstaSynchP-Event-Hooks
// @license     GPL-3.0

// @include     http://*.instasynch.com/*
// @include     http://instasynch.com/*
// @include     http://*.instasync.com/*
// @include     http://instasync.com/*
// @grant       none
// @run-at      document-start

// @require     https://greasyfork.dpdns.org/scripts/2857-jquery-bind-first/code/jquerybind-first.js
// @require     https://greasyfork.dpdns.org/scripts/5647-instasynchp-library/code/InstaSynchP%20Library.js
// ==/UserScript==

function EventBase(version) {
    "use strict";
    this.version = version;
}

function eventBaseRef() {
    return window.plugins.eventBase;
}

EventBase.prototype.executeOnceCore = function () {
    "use strict";

    var hooks = {
        'sendcmd':{'loc':'global','name':'SendCmd'},
        'onConnecting':{'loc':'global','name':'Connecting'},
        'onConnected':{'loc':'global','name':'Connected'},
        'onJoining':{'loc':'global','name':'Joining'},
        'onJoined':{'loc':'global','name':'Joined'},
        'onReconnecting':{'loc':'global','name':'Reconnecting'},
        'onReconnect':{'loc':'global','name':'Reconnect'},
        'reconnectFailed':{'loc':'global','name':'ReconnectFailed'},
        'onError':{'loc':'global','name':'Error'},
        'onDisconnect':{'loc':'global','name':'Disconnect'},
        'requestPartialPage':{'loc':'global','name':'RequestPartialPage'},
        'loadRoomObj':{'loc':'global','name':'LoadRoom'},
        'addMessage':{'name':'AddMessage'},
        'addUser':{'name':'AddUser'},
        'removeUser':{'name':'RemoveUser'},
        'makeLeader':{'name':'MakeLeader'},
        'renameUser':{'name':'RenameUser'},
        'addVideo':{'name':'AddVideo'},
        'removeVideo':{'name':'RemoveVideo'},
        'moveVideo':{'name':'MoveVideo'},
        'playVideo':{'name':'PlayVideo'},
        'resume':{'name':'Resume'},
        'pause':{'name':'Pause'},
        'seekTo':{'name':'SeekTo'},
        'purge':{'name':'Purge'},
        'skips':{'name':'Skips'},
        'loadPlaylist':{'name':'LoadPlaylist'},
        'loadUserlist':{'name':'LoadUserlist'},
        'createPoll':{'name':'CreatePoll'},
        'addPollVote':{'name':'AddPollVote'},
        'removePollVote':{'name':'RemovePollVote'},
        'endPoll':{'name':'EndPoll'}
    };

    function createHookFunction(ev) {
        function defaultFunction() {
                events.fire(ev.name, arguments, true);
                ev.old.apply(undefined, arguments);
                events.fire(ev.name, arguments, false);
            }
            //custom hooks
        switch (ev.name) {
        case 'RemoveUser':
            return function () {
                var args = [].slice.call(arguments);
                args.push(findUserId(args[0])); //user
                defaultFunction.apply(undefined, args);
            };
        case 'RemoveVideo':
            return function () {
                var indexOfVid = window.getVideoIndex(arguments[0].info),
                    video = window.playlist[indexOfVid],
                    args = [].slice.call(arguments);
                args.push(video);
                args.push(indexOfVid);
                defaultFunction.apply(undefined, args);
            };
        case 'MoveVideo':
            return function () {
                var args = [].slice.call(arguments);
                args.push(window.getVideoIndex(args[0]).info); //old position
                defaultFunction.apply(undefined, args);
            };
        }
        return defaultFunction;
    }
    for (var hook in hooks) {
        if (hooks.hasOwnProperty(hook)) {
            var ev = hooks[hook];
            if (ev.location && ev.location === 'global') {
                ev.old = window.global[hook];
                window.global[hook] = createHookFunction(ev);
            } else {
                ev.old = window[hook];
                window[hook] = createHookFunction(ev);
            }
        }
    }

    window.addEventListener("message", function (event) {
        try {
            var parsed = JSON.parse(event.data);
            if (parsed.action) {
                //own events
                events.fire(parsed.action, [parsed.data], false);
            }
            //all
            events.fire('PageMessage', [parsed], false);
        } catch (ignore) {}
    }, false);
};

EventBase.prototype.preConnect = function () {
    "use strict";
    var oldPlayerDestroy = window.video.destroy;
    $("#chat input").bindFirst('keypress', function (event) {
        events.fire('InputKeypress[{0}]'.format(event.keyCode), [event, $("#chat input").val()], false);
        if (event.keyCode === 13 && $("#chat input").val() !== '') {
            events.fire('SendChat', [event, $("#chat input").val()], false);
        }
    });
    $("#chat input").bindFirst('keydown', function (event) {
        events.fire('InputKeydown[{0}]'.format(event.keyCode), [event, $("#chat input").val()], false);
    });
    $("#chat input").bindFirst('keyup', function (event) {
        events.fire('InputKeyup[{0}]'.format(event.keyCode), [event, $("#chat input").val()], false);
    });
    window.video.destroy = function () {
        events.fire('PlayerDestroy', [], true);
        oldPlayerDestroy();
        events.fire('PlayerDestroy', [], false);
    };
};


window.plugins = window.plugins || {};
window.plugins.eventBase = new EventBase("1.0.4");
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元