Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
GROWIにクリップするやつ

GROWIにクリップするやつ

モロヘイヤを導入しているMastodonインスタンスで、
GROWIへ投稿をクリップするコマンドを簡単に生成するユーザースクリプトです。
grodemo.gif

機能

  • TLから各投稿のメニューみたいなのを開くとGROWIにクリップするためのコマンドをクリップボードへコピーする(v2.9.0で仕様変更)

動作環境

ユーザースクリプトですので、それを利用できる拡張機能を入れてください

Androidで使う場合

Firefoxの拡張機能、USIを使用してください(Tampermonkeyでは動きません)
Yandexの場合はChrome拡張 Tampermonkeyを使用します

インストール

Tampermonkeyを導入済みの場合、こちらからユーザースクリプトをインストールできます

インストール後、設定の「include/exclude」の「ユーザーによる match」へ自身の利用しているMastodonサーバーのURLを入れてください

// ==UserScript==
// @name GROWIにクリップするやつ
// @namespace https://mstdn.precure.fun/@karasu_sue
// @version 1.2
// @description GROWIにクリップするやつ
// @author Sue Karasugawa https://mstdn.precure.fun/@karasu_sue
// @match https://mstdn.precure.fun/*
// @match https://precure.ml/*
// ==/UserScript==
(function() {
'use strict';
window.addEventListener("load", function() {
document.querySelector('body').addEventListener('click', function(event) {
if (chromeClickChecker(event) || firefoxClickChecker(event)) {
var status = event.target.parentNode.parentNode.parentNode.parentNode.parentNode
if (status.querySelector('div.status__action-bar-dropdown') != null){
addGrowiTransferLink(status);
}
}
});
});
function chromeClickChecker(event) {
return(
event.target.tagName.toLowerCase() === 'i' &&
event.target.classList.contains('fa-ellipsis-h')
);
}
function firefoxClickChecker(event) {
return(
event.target.tagName.toLowerCase() === 'button' &&
event.target.classList.contains('icon-button')
);
}
function addGrowiTransferLink(status){
setTimeout(function() {
if((document.querySelector('div.dropdown-menu ul') != null)){
var dropdown = document.querySelector('div.dropdown-menu ul');
}else if(document.querySelector('.modal-root__modal ul') != null){
var dropdown = document.querySelector('.modal-root__modal ul');
}else{
return;
}
var listItem = document.createElement('li');
listItem.classList.add('dropdown-menu__item');
listItem.classList.add('growi-clip');
var link = document.createElement('a');
link.setAttribute('href', '#');
link.setAttribute('target', '_blank');
link.setAttribute('ref', 'noopener');
link.setAttribute('role', 'button');
link.textContent = 'GROWIにクリッピング';
link.addEventListener('click', function(e) {
e.preventDefault();
setTransferStatus(status);
});
listItem.appendChild(link);
dropdown.prepend(listItem);
}, 100);
}
function setTransferStatus(status){
var growiclipping_command = 'command: growi_clipping\nurl: '
var statusLink = status.querySelector('.status__relative-time');
var clipboad = document.createElement('textarea');
clipboad.setAttribute('type', 'hidden');
clipboad.textContent = growiclipping_command + statusLink.getAttribute('href');
document.body.appendChild(clipboad);
clipboad.select();
document.execCommand("copy");
document.body.removeChild(clipboad);
try{
document.querySelector('.dropdown-menu ul').remove();
} catch(e){}
if(document.querySelector('.autosuggest-textarea__textarea') != null){
document.querySelector('.autosuggest-textarea__textarea').focus();
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.