通过QQ邮箱复制通讯录好友列表
// ==UserScript==
// @name QQ邮箱复制通讯录好友列表
// @namespace https://www.zhxlp.com
// @version 0.1
// @description 通过QQ邮箱复制通讯录好友列表
// @author Zhxlp
// @match https://mail.qq.com/cgi-bin/laddr_list*
// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
// @grant GM_log
// @grant GM_setClipboard
// ==/UserScript==
/* global jQuery */
// 复制按钮1
const copyUserListBtn1 = () => {
if(jQuery('#out #bar .nav_list .tool').length <= 0) return false;
let copyBtn = document.querySelector("#copy-user-list1");
if(!copyBtn){
jQuery('#out #bar .nav_list .tool').append('<a id="copy-user-list1" href="javascript:;" class="btn_gray btn_space">复制列表</a>');
}
}
// 复制按钮2
const copyUserListBtn2 = () => {
if(jQuery('#out #bar .nav_list .tool').length <= 0) return false;
let copyBtn = document.querySelector("#copy-user-list2");
if(!copyBtn){
jQuery('#out #bar .nav_list .tool').append('<a id="copy-user-list2" href="javascript:;" class="btn_gray btn_space">复制列表(格式化)</a>');
}
}
const copyUserList = (event) => {
let list = []
jQuery("#out #list ul li").each((_index, elem) => {
let row = []
jQuery(elem).children('span').each((_index2, elem2) => {
const col = jQuery(elem2).text();
row.push(col);
});
list.push(row);
});
const sList = formatList(list,event.data);
GM_log(sList);
GM_setClipboard(sList,'text');
window.alert('复制成功');
}
const formatList = (li,fill) => {
let list = li;
if(fill == true){
list = formatList2(li);
}
let formatStr = '';
for(let i = 0; i < list.length; i += 1) {
formatStr += '| ';
for(let j = 0; j < list[i].length; j += 1) {
formatStr += list[i][j];
if(j != list[i].length -1){
formatStr += ' | ';
}
}
formatStr += ' |\r\n';
}
return formatStr;
}
const formatList2 = (list) => {
let list2 = [];
let maxLength = [];
for(let i = 0; i < list.length; i += 1) {
for(let j = 0; j < list[i].length; j += 1) {
if (i == 0 ) {
maxLength[j] = byteLength(list[i][j]);
} else {
if (maxLength[j] < byteLength(list[i][j])) {
maxLength[j] = byteLength(list[i][j]);
}
}
}
}
for(let i = 0; i < list.length; i += 1) {
let col = [];
for(let j = 0; j < list[i].length; j += 1) {
const cStr = fillStr(list[i][j], maxLength[j]);
col.push(cStr);
}
list2.push(col);
}
return list2;
}
const fillStr = (str, len) => {
const len1 = Math.floor((len - byteLength(str)) / 2);
const len2 = Math.ceil((len - byteLength(str)) / 2);
let s = '';
for(let i = 0; i < len1; i += 1) {
s += ' ';
}
s += str;
for(let i = 0; i < len2; i += 1) {
s += ' ';
}
return s;
}
const byteLength = (str) => {
let b = 0;
const len = str.length;
if(len) {
for(let i = 0; i < len; i ++) {
const c = str.charCodeAt(i);
if((c >= 1 && c <= 10000)) {
b += 1;
}else {
b += 2;
}
}
return b;
} else {
return 0;
}
}
(function() {
'use strict';
// Your code here...
GM_log('init');
copyUserListBtn1();
copyUserListBtn2();
jQuery('#copy-user-list1').off("click").on("click", copyUserList);
jQuery('#copy-user-list2').off("click").on("click", true,copyUserList);
})();