方便的把任务指给参与讨论的某个人
// ==UserScript== // @name tower // @namespace [email protected] // @description 方便的把任务指给参与讨论的某个人 // @include https://tower.im/* // @version 1.1 // @grant unsafeWindow // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // ==/UserScript== // var $ = unsafeWindow.$; var members = unsafeWindow.members = {}; var assignee = unsafeWindow.assignee = ""; (function() { function contains(name) { return members[name] !== undefined; } function listUsers() { $("a[class='author']").each(function() { var name = $(this).html(); if (!contains(name)) { var url = $(this).attr("href"); var uid = url.match(/members\/(\w+)/)[1]; members[name] = uid; } }); for (v in members) { console.log(v); if (v !== assignee) createButton(v, members[v]); } } function createButton(name, uid) { var button = document.createElement("button"); button.innerText = name; button.onclick = assignUser; $(button).attr("uid", uid); $(button).css({ "padding" : "0 10px", "margin" : "0 5px 0 5px", "color" : "#666", "background-color" : "#eee", "border" : "none", "border-radius" : "20px", "height" : "20px", "line-height" : "1.6", "vertical-align" : "baseline", "cursor" : "pointer", "font-size" : "100%" }); $(".todo-wrap").append(button); } function csrfToken() { return $("meta[name='csrf-token']").attr("content"); } function connGuid() { return $("input[id='conn-guid']").val(); } function test() { console.log("aaa", connGuid()); } function assignUser() { var uid = $(this).attr("uid"); $.ajax({ url : location.href + "edit", type : "post", headers : { "X-Requested-With" : "XMLHttpRequest", "X-CSRF-Token" : csrfToken() }, data : { "conn_guid" : connGuid(), "assignee_guid" : uid }, dataType : "json", success : function(data) { // console.log(data); location.reload(); } }); } function findAssignee() { assignee = $.trim($(".assignee").html()); } function init() { var button = document.createElement("button"); button.innerText = "✓"; button.onclick = test; $(button).css({ "height" : "30px", "color" : "black", "padding" : "0" }); $(".todo-wrap").append(button); } // document.addEventListener('hashchange', function() { // }, false); // unsafeWindow.history.pushState = function() { // alert(/x/); // } // unsafeWindow.$(document).on("pjax:end", exportFunction(function() { // console.log('test @grant GM_* 1'); // }, unsafeWindow)); // unsafeWindow.$(window).on('pushstate', function() { // console.log('test @grant none 2'); // }); // (function (old) { // unsafeWindow.history.pushState = function () { // old.apply(unsafeWindow.history, arguments); // alert(unsafeWindow.location.href); // } // })(unsafeWindow.history.pushState); // function hackPushState(a, b, c) { // alert(a + b + c); // alert(unsafeWindow.history.pushStateHacked); // unsafeWindow.history.pushStateHacked(a, b, c); // } // unsafeWindow.history.pushStateHacked = unsafeWindow.history.pushState; // unsafeWindow.history.pushState = exportFunction(hackPushState, unsafeWindow); // waitForKeyElements('div#page-todo', function() {alert(/cc/);}); // document.addEventListener('DOMContentLoaded', function() { // init(); $(document).on('DOMNodeInserted', function(e) { // alert($(e.target).hasClass('assignee')); // console.log(e.toSource()); if (!$(".todo-wrap > button").length) { //alert(/x/); members = {}; findAssignee(); listUsers(); } }); // unsafeWindow.onpopstate = function(e) { // alert(e.state); // alert(location.href); // } // $(unsafeWindow).on('popstate', function() { // console.log(document.href); // alert(/x/); // }); // alert(/a/); // }, false); // alert(location.href); })();