init
This commit is contained in:
62
Outline背景颜色修改.user.js
Normal file
62
Outline背景颜色修改.user.js
Normal file
@@ -0,0 +1,62 @@
|
||||
// ==UserScript==
|
||||
// @name Outline背景颜色修改
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 2025-05-16
|
||||
// @description
|
||||
// @author ClanEver
|
||||
// @match https://outline.eimsound.com/*
|
||||
// @icon https://minio.eimsound.com/outline/public/d4335404-a074-4741-a98c-05f7b4f013bd/4b90f268-826c-420f-80a9-34cad76922c5/Icon-1024.png
|
||||
// @updateURL https://dev.eimsound.com/-/snippets/8/raw/main/bg.outline.eimsound.user.js
|
||||
// @downloadURL https://dev.eimsound.com/-/snippets/8/raw/main/bg.outline.eimsound.user.js
|
||||
// @grant GM_registerMenuCommand
|
||||
// @grant GM_getValue
|
||||
// @grant GM_setValue
|
||||
// @run-at document-start
|
||||
// ==/UserScript==
|
||||
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
const need_change_css_selector = [
|
||||
'.heading-actions', // h1, h2, ...前的#
|
||||
'.byXfdg', // header
|
||||
'.cENRKu', // body
|
||||
'.VYaRH', // 标题
|
||||
'.fTNybC', // 大纲
|
||||
'.gAJGaK', // body
|
||||
'.hzusXH', // tab
|
||||
'.jyiNkt', // list
|
||||
'.eSXWfi', // tab
|
||||
'.grkcCz', // list
|
||||
]
|
||||
const need_change_css_str = need_change_css_selector.join(',')
|
||||
const DEFAULT_COLOR = '#f7f8fa';
|
||||
|
||||
function getColor() {
|
||||
return GM_getValue('bgColor', DEFAULT_COLOR);
|
||||
}
|
||||
|
||||
function setColor(color) {
|
||||
GM_setValue('bgColor', color);
|
||||
}
|
||||
|
||||
// 注册菜单命令
|
||||
GM_registerMenuCommand('设置背景颜色', () => {
|
||||
const current = getColor();
|
||||
const newColor = prompt('请输入新的背景颜色(如 #ffffff 或 red):', current);
|
||||
if (newColor) {
|
||||
setColor(newColor);
|
||||
}
|
||||
});
|
||||
|
||||
const style = document.createElement('style');
|
||||
style.innerHTML = `
|
||||
${need_change_css_str} {
|
||||
background-color: ${getColor()} !important;
|
||||
}
|
||||
`;
|
||||
document.documentElement.appendChild(style);
|
||||
//window.addEventListener('load', () => {
|
||||
// document.head.appendChild(style);
|
||||
//});
|
||||
})();
|
||||
135
auth.eimsound自动登录.user.js
Normal file
135
auth.eimsound自动登录.user.js
Normal file
@@ -0,0 +1,135 @@
|
||||
// ==UserScript==
|
||||
// @name auth.eimsound自动登录
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 1.0.9
|
||||
// @description no desc
|
||||
// @author ClanEver
|
||||
// @match https://auth.eimsound.com/*
|
||||
// @match https://outline.eimsound.com
|
||||
// @match https://outline.eimsound.com/*
|
||||
// @match https://chat.eimsound.com
|
||||
// @match https://chat.eimsound.com/*
|
||||
// @match https://chat2.eimsound.com
|
||||
// @match https://chat2.eimsound.com/*
|
||||
// @icon https://auth.eimsound.com/static/dist/assets/icons/icon.png
|
||||
// @updateURL https://dev.eimsound.com/-/snippets/5/raw/main/auto.auth.eimsound.user.js
|
||||
// @downloadURL https://dev.eimsound.com/-/snippets/5/raw/main/auto.auth.eimsound.user.js
|
||||
// @grant GM_registerMenuCommand
|
||||
// @grant GM_unregisterMenuCommand
|
||||
// @grant GM_getValue
|
||||
// @grant GM_setValue
|
||||
// @grant GM_log
|
||||
// ==/UserScript==
|
||||
|
||||
(function () {
|
||||
'use strict';
|
||||
// Your code here...
|
||||
let items = ["Github", "Google", "QQ", "None"];
|
||||
let menus = [];
|
||||
|
||||
function fresh_menu() {
|
||||
for (let i of menus) {
|
||||
GM_unregisterMenuCommand(i);
|
||||
}
|
||||
menus = [];
|
||||
|
||||
let login_target = GM_getValue('login_target', 'None');
|
||||
for (let i of items) {
|
||||
let name = i;
|
||||
if (login_target == name) name = `✅ ` + i;
|
||||
const menu_command = GM_registerMenuCommand(name, function (event) {
|
||||
GM_setValue("login_target", i);
|
||||
fresh_menu();
|
||||
});
|
||||
menus.push(menu_command);
|
||||
}
|
||||
}
|
||||
fresh_menu();
|
||||
|
||||
const value_map = {
|
||||
"Github": "Github",
|
||||
"Google": "google",
|
||||
"QQ": "qq",
|
||||
"None": "None",
|
||||
};
|
||||
|
||||
// auth 登录
|
||||
if (location.href.includes(`auth.eimsound.com/if/flow/default-authentication-flow`)) {
|
||||
const interval_1 = setInterval(() => {
|
||||
let login_target = value_map[GM_getValue('login_target', 'None')];
|
||||
if (login_target == 'None') return
|
||||
var btn = document.querySelector('ak-flow-executor').shadowRoot.
|
||||
querySelector("ak-locale-context").
|
||||
querySelector('ak-stage-identification').shadowRoot.
|
||||
querySelector(`img[alt="${login_target}"]`).parentNode.parentNode;
|
||||
if (btn) {
|
||||
btn.click();
|
||||
clearInterval(interval_1);
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
|
||||
// auth 继续
|
||||
if (location.href.includes(`auth.eimsound.com/if/flow`)) {
|
||||
const interval_3 = setInterval(() => {
|
||||
var btns = document.querySelectorAll('ak-flow-executor').shadowRoot.
|
||||
querySelector("ak-locale-context").
|
||||
querySelector('ak-stage-consent').shadowRoot.
|
||||
querySelectors(`button`);
|
||||
for (let btn of btns) {
|
||||
if (btn.textContent.includes('继续') || btn.textContent.includes('Continue')) {
|
||||
btn.click();
|
||||
clearInterval(interval_3);
|
||||
}
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
|
||||
// outline 登录
|
||||
if (location.href.includes(`outline.eimsound.com`)) {
|
||||
const interval_2 = setInterval(() => {
|
||||
try {
|
||||
var h2 = document.querySelector('h2');
|
||||
if (h2.textContent.includes('登录到 EIM Notes') || h2.textContent.includes('Login to EIM Notes')) {
|
||||
var btns = document.querySelectorAll('button');
|
||||
for (let btn of btns) {
|
||||
if (btn.textContent.includes('OpenID')) {
|
||||
btn.click();
|
||||
clearInterval(interval_2);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) { }
|
||||
}, 500);
|
||||
}
|
||||
|
||||
// LiberChat 登录
|
||||
if (location.href.includes(`chat.eimsound.com`)) {
|
||||
const interval_4 = setInterval(() => {
|
||||
if (location.href.includes(`login`)) {
|
||||
var btns = document.querySelectorAll('a');
|
||||
for (let btn of btns) {
|
||||
if (btn.textContent.includes('Authtik')) {
|
||||
btn.click();
|
||||
clearInterval(interval_4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
|
||||
// Open Webui 登录
|
||||
if (location.href.includes(`chat2.eimsound.com`)) {
|
||||
const interval_5 = setInterval(() => {
|
||||
if (location.href.includes(`auth`)) {
|
||||
var btns = document.querySelectorAll('button');
|
||||
for (let btn of btns) {
|
||||
if (btn.textContent.includes('Authentik')) {
|
||||
btn.click();
|
||||
clearInterval(interval_5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
})();
|
||||
153
py-clanever.postfixTemplates
Normal file
153
py-clanever.postfixTemplates
Normal file
@@ -0,0 +1,153 @@
|
||||
.enum : Enumerate value
|
||||
ANY → enumerate($expr$)
|
||||
|
||||
.reversed : Reverse iterable
|
||||
ANY → reversed($expr$)
|
||||
|
||||
.sort : Sort iterable
|
||||
ANY → sorted($expr$)$END$
|
||||
|
||||
.sortk : Sort iterable with key
|
||||
ANY → sorted($expr$, key=$key$)$END$
|
||||
|
||||
.sortl : Sort iterable with lambda key
|
||||
ANY → sorted($expr$, key=lambda o: $key$)$END$
|
||||
|
||||
.open : Open a path
|
||||
ANY → with open($expr$) as f:\
|
||||
$END$
|
||||
|
||||
.openm : Open a path with mode
|
||||
ANY → with open($expr$, mode='$mode$') as f:\
|
||||
$END$
|
||||
|
||||
.openp : Open a Path object
|
||||
ANY → with closing($expr$.open()) as f:\
|
||||
$END$
|
||||
|
||||
.for : Iterate through an object
|
||||
ANY → for $var$ in $expr$:\
|
||||
$END$
|
||||
|
||||
.fori : Iterate through an object
|
||||
ANY → for i, $var$ in enumerate($expr$):\
|
||||
$END$
|
||||
|
||||
.try : Wrap with try except
|
||||
ANY → try:\
|
||||
$expr$\
|
||||
except $error$ as $error_var$:\
|
||||
$END$
|
||||
|
||||
.tryf : Wrap with try except and finally
|
||||
ANY → try:\
|
||||
$expr$\
|
||||
except $error$ as $error_var$:\
|
||||
$except$\
|
||||
finally:\
|
||||
$END$
|
||||
|
||||
.bytes : Cast to bytes
|
||||
ANY → bytes($expr$)$END$
|
||||
|
||||
.str : Cast to str
|
||||
ANY → str($expr$)$END$
|
||||
|
||||
.float : Cast to float
|
||||
ANY → float($expr$)$END$
|
||||
|
||||
.int : Cast to int
|
||||
ANY → int($expr$)$END$
|
||||
|
||||
.set : Wrap with set
|
||||
ANY → set($expr$)$END$
|
||||
|
||||
#.frozenset : Wrap with frozenset
|
||||
# ANY → frozenset($expr$)$END$
|
||||
|
||||
.list : Wrap with list
|
||||
ANY → list($expr$)$END$
|
||||
|
||||
.dict : Wrap with dict
|
||||
ANY → dict($expr$)$END$
|
||||
|
||||
.tuple : Wrap with tuple
|
||||
ANY → tuple($expr$)$END$
|
||||
|
||||
.next : Retrieve the next item from the iterator
|
||||
ANY → next($expr$)$END$
|
||||
|
||||
.iter : Return an iterator object
|
||||
ANY → iter($expr$)$END$
|
||||
|
||||
.min : Return the minimal
|
||||
ANY → min($expr$)$END$
|
||||
|
||||
.max : Return the maximal
|
||||
ANY → max($expr$)$END$
|
||||
|
||||
.abs : Return the absolute value
|
||||
ANY → abs($expr$)$END$
|
||||
|
||||
.pri : print iter
|
||||
ANY → for i in $expr$:\
|
||||
print(i)
|
||||
|
||||
.prid : dict print iter
|
||||
ANY → for k, v in $expr$.items():\
|
||||
print(k, v)
|
||||
|
||||
.b : par but to bracket start
|
||||
ANY → $END$($expr$)
|
||||
|
||||
.comp : comprehension
|
||||
ANY → ($i$ for i in $expr$)
|
||||
|
||||
.compif : comprehension with if
|
||||
ANY → ($i$ for i in $expr$ if $condition$)
|
||||
|
||||
.lcomp : list comprehension
|
||||
ANY → [$i$ for i in $expr$]
|
||||
|
||||
.lcompif : list comprehension with if
|
||||
ANY → [$i$ for i in $expr$ if $condition$]
|
||||
|
||||
.dcomp : dict comprehension
|
||||
ANY → {$i$: $j$ for $i$, $j$ in $expr$}
|
||||
|
||||
.dcompif : dict comprehension with if
|
||||
ANY → {$i$: $j$ for $i$, $j$ in $expr$ if $condition$}
|
||||
|
||||
.join : str join iter
|
||||
ANY → "$sep$".join($expr$)
|
||||
|
||||
.ford : iterate k, v for dict
|
||||
ANY → for $key$, $val$ in $expr$.items():\
|
||||
$END$
|
||||
|
||||
.nextif : find first val in iter
|
||||
ANY → next((x for x in $expr$ if x$condition$), None)
|
||||
|
||||
.repa : django request.query_params.get("param")
|
||||
ANY → $expr$ = request.query_params.get("$expr$$END$")
|
||||
|
||||
.jsonl: json.loads
|
||||
ANY → json.loads($expr$)
|
||||
|
||||
.jsond: json.dumps
|
||||
ANY → json.dumps($expr$)
|
||||
|
||||
.len: len(expr)
|
||||
ANY → len($expr$)
|
||||
|
||||
.round : round($expr$)
|
||||
ANY → round($expr$)
|
||||
|
||||
.dfiter : pandas.Datafream.iterrows()
|
||||
ANY → for i, row in $expr$.iterrows():
|
||||
|
||||
.pdna : pandas.isna()
|
||||
ANY → pd.isna($expr$)
|
||||
|
||||
.resplit : re.split()
|
||||
ANY → re.split(r'[\n\t, ]+', $expr$)
|
||||
Reference in New Issue
Block a user