// ==UserScript== // @name 巴哈姆特郵件簽名檔 // @namespace https://blog.maple3142.net/ // @version 0.1 // @description try to take over the world! // @author maple3142 // @match https://mailbox.gamer.com.tw/send.php* // @match https://mailbox.gamer.com.tw/reply.php* // @require https://unpkg.com/vue // @require https://unpkg.com/vuex // @require https://unpkg.com/vuejs-storage // @grant none // @downloadURL none // ==/UserScript== (function (Vue,$,Vuex,vjss) { 'use strict'; Vue = Vue && Vue.hasOwnProperty('default') ? Vue['default'] : Vue; $ = $ && $.hasOwnProperty('default') ? $['default'] : $; var Vuex__default = 'default' in Vuex ? Vuex['default'] : Vuex; vjss = vjss && vjss.hasOwnProperty('default') ? vjss['default'] : vjss; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } Vue.use(Vuex__default); var Signature = function Signature(name) { _classCallCheck(this, Signature); this.name = name; this.content = ''; this.id = Date.now().toString() + Math.random(); }; var store = new Vuex__default.Store({ state: { signatures: [] }, mutations: { create: function create(state, _ref) { var name = _ref.name, content = _ref.content; state.signatures.push(new Signature(name, content)); }, edit: function edit(state, _ref2) { var id = _ref2.id, content = _ref2.content; state.signatures = state.signatures.map(function (s) { if (s.id !== id) return s; s.content = content; return s; }); }, rename: function rename(state, _ref3) { var id = _ref3.id, name = _ref3.name; state.signatures = state.signatures.map(function (s) { if (s.id !== id) return s; s.name = name; return s; }); }, del: function del(state, _ref4) { var id = _ref4.id; state.signatures = state.signatures.filter(function (s) { return s.id !== id; }); } }, plugins: [vjss({ namespace: 'bahamail-signature', keys: ['signatures'] })] }); var Signature$1 = { render: function render() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('div', { staticStyle: { "width": "100%" } }, [_c('h6', [_vm._v(_vm._s(_vm.signature.name) + " :")]), _vm._v(" "), _c('textarea', { directives: [{ name: "model", rawName: "v-model", value: _vm.text, expression: "text" }], staticStyle: { "width": "100%" }, attrs: { "rows": "5" }, domProps: { "value": _vm.text }, on: { "keyup": function keyup($event) { _vm.edit(_vm.text); }, "input": function input($event) { if ($event.target.composing) { return; } _vm.text = $event.target.value; } } }), _vm._v(" "), _c('div', [_c('button', { on: { "click": _vm.apply } }, [_vm._v("插入簽名檔")]), _vm._v(" "), _c('button', { on: { "click": _vm.rename } }, [_vm._v("重新命名")]), _vm._v(" "), _c('button', { on: { "click": function click($event) { _vm.del(_vm.signature); } } }, [_vm._v("刪除")])])]); }, staticRenderFns: [], props: { signature: { type: Object, required: true } }, data: function data() { return { text: this.signature.content }; }, methods: _objectSpread({ edit: function edit(content) { this.$store.commit('edit', _objectSpread({}, this.signature, { content: content })); }, apply: function apply() { var $tx = $('textarea[name=content]'); var val = $tx.val(); $tx.val(val + this.signature.content); }, rename: function rename() { var name = prompt("\u628A\u7C3D\u540D\u6A94 \"".concat(this.signature.name, "\" \u6539\u6210?")); if (!name) return; this.$store.commit('rename', _objectSpread({}, this.signature, { name: name })); } }, Vuex.mapMutations(['del'])) }; var App = { render: function render() { var _vm = this; var _h = _vm.$createElement; var _c = _vm._self._c || _h; return _c('div', [_c('div', [_c('button', { on: { "click": _vm.create } }, [_vm._v("新增簽名檔")])]), _vm._v(" "), _c('div', _vm._l(_vm.signatures, function (sig) { return _c('signature', { key: sig.id, attrs: { "signature": sig } }); }))]); }, staticRenderFns: [], components: { Signature: Signature$1 }, computed: Vuex.mapState(['signatures']), methods: { create: function create() { var name = prompt('新簽名檔名稱?'); if (!name) return; this.$store.commit('create', { name: name }); } } }; window.store = store; var app = new Vue({ render: function render(h) { return h(App); }, store: store }); var div = document.createElement('div'); $('#BH-slave').append(div); app.$mount(div); }(Vue,jQuery,Vuex,vuejsStorage));