方便的把任务指给参与讨论的某个人
// ==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);})();