// ==UserScript==
// @name 巴哈姆特站內信簽名檔
// @namespace https://blog.maple3142.net/
// @version 0.5.1
// @description 幫巴哈姆特站內信的站內信加上簽名檔功能
// @author maple3142
// @match https://mailbox.gamer.com.tw/*
// @require https://unpkg.com/vue@2.5.16/dist/vue.runtime.min.js
// @require https://unpkg.com/vuex@3.0.1/dist/vuex.min.js
// @require https://unpkg.com/vuejs-storage@2.1.1/dist/vuejs-storage.js
// @require https://unpkg.com/sortablejs@1.7.0/Sortable.min.js
// @grant none
// ==/UserScript==
(function (Vue,$,Vuex,vjss,Sortable) {
'use strict';
Vue = Vue && Vue.hasOwnProperty('default') ? Vue['default'] : Vue;
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Vuex = Vuex && Vuex.hasOwnProperty('default') ? Vuex['default'] : Vuex;
vjss = vjss && vjss.hasOwnProperty('default') ? vjss['default'] : vjss;
Sortable = Sortable && Sortable.hasOwnProperty('default') ? Sortable['default'] : Sortable;
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);
var Signature = function Signature(name) {
_classCallCheck(this, Signature);
this.name = name;
this.content = '';
this.id = Date.now().toString() + Math.random();
};
var store = new Vuex.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;
});
},
updateSignatures: function updateSignatures(state, sigs) {
state.signatures = sigs;
}
},
plugins: [vjss({
namespace: 'bahamail-signature',
keys: ['signatures']
})]
});
var isMailingPage = $('textarea[name=content]').length > 0;
(function () {
if (typeof document !== 'undefined') {
var head = document.head || document.getElementsByTagName('head')[0],
style = document.createElement('style'),
css = " .fw[data-v-125f8210] { width: 100%; } ";
style.type = 'text/css';
if (style.styleSheet) {
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
head.appendChild(style);
}
})();
var Signature$1 = {
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('div', {
staticClass: "fw BH-rbox"
}, [_c('h5', [_c('i', {
staticClass: "sig-drag fa fa-bars"
}), _vm._v(" " + _vm._s(_vm.signature.name) + " ")]), _vm._v(" "), _c('textarea', {
directives: [{
name: "model",
rawName: "v-model",
value: _vm.text,
expression: "text"
}],
staticClass: "fw",
attrs: {
"rows": "5"
},
domProps: {
"value": _vm.text
},
on: {
"input": function input($event) {
if ($event.target.composing) {
return;
}
_vm.text = $event.target.value;
}
}
}), _vm._v(" "), _c('div', [_vm.isMailingPage ? _c('button', {
on: {
"click": function click($event) {
_vm.apply(_vm.signature.content);
}
}
}, [_vm._v("插入簽名檔")]) : _vm._e(), _vm._v(" "), _c('button', {
on: {
"click": _vm.rename
}
}, [_vm._v("重新命名")]), _vm._v(" "), _c('button', {
on: {
"click": _vm.del
}
}, [_vm._v("刪除")])])]);
},
staticRenderFns: [],
_scopeId: 'data-v-125f8210',
props: {
signature: {
type: Object,
required: true
}
},
computed: {
text: {
get: function get() {
return this.signature.content;
},
set: function set(content) {
this.$store.commit('edit', _objectSpread({}, this.signature, {
content: content
}));
}
},
isMailingPage: function isMailingPage$$1() {
return isMailingPage;
}
},
methods: {
apply: function apply(text) {
var $tx = $('textarea[name=content]');
var val = $tx.val();
$tx.val(val + text);
},
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
}));
},
del: function del() {
var result = confirm("\u78BA\u8A8D\u522A\u9664\u7C3D\u540D\u6A94 \"".concat(this.signature.name, "\"?"));
if (result) this.$store.commit('del', this.signature);
}
}
};
(function () {
if (typeof document !== 'undefined') {
var head = document.head || document.getElementsByTagName('head')[0],
style = document.createElement('style'),
css = " .bms-btn-wrap[data-v-38cab9c1] { margin-bottom: 1em; } ";
style.type = 'text/css';
if (style.styleSheet) {
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
head.appendChild(style);
}
})(); //vuedraggable doesn't export anything to window
var App = {
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('div', [_c('div', {
staticClass: "bms-btn-wrap"
}, [_c('button', {
on: {
"click": _vm.create
}
}, [_vm._v("新增簽名檔")])]), _vm._v(" "), _c('div', [_c('div', {
ref: "list"
}, _vm._l(_vm.signatures, function (sig) {
return _c('signature', {
key: sig.id,
attrs: {
"signature": sig
}
});
}))])]);
},
staticRenderFns: [],
_scopeId: 'data-v-38cab9c1',
components: {
Signature: Signature$1
},
computed: {
signatures: {
get: function get() {
return this.$store.state.signatures;
},
set: function set(value) {
this.$store.commit('updateSignatures', value);
}
}
},
methods: {
create: function create() {
var name = prompt('新簽名檔名稱?');
if (!name) return;
this.$store.commit('create', {
name: name
});
}
},
mounted: function mounted() {
var _this = this;
Sortable.create(this.$refs.list, {
handle: '.sig-drag',
onUpdate: function onUpdate(e) {
var s = _this.signatures;
var oldIndex = e.oldIndex,
newIndex = e.newIndex;
var _ref = [s[newIndex], s[oldIndex]];
s[oldIndex] = _ref[0];
s[newIndex] = _ref[1];
_this.signatures = s;
}
});
}
};
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);
window.__bahamail_signature = {
app: app,
store: store
};
}(Vue,jQuery,Vuex,vuejsStorage,Sortable));