Skip to content

Instantly share code, notes, and snippets.

@karasugawasu
Last active September 7, 2019 06:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karasugawasu/d2c7a8431f60df07c850123a99ea45e7 to your computer and use it in GitHub Desktop.
Save karasugawasu/d2c7a8431f60df07c850123a99ea45e7 to your computer and use it in GitHub Desktop.
GROWIにクリップするやつ

GROWIにクリップするやつ

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

機能

  • TLから各投稿のメニューみたいなのを開くとGROWIにクリップするためのコマンドを自動で入力します

動作環境

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

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.3
// @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){
const growiclipping_command = 'command: growi_clipping\nurl: '
const statusLink = status.querySelector('.status__relative-time');
const clipboad = document.createElement('textarea');
const drawer = document.querySelector('.drawer');
const textarea = drawer.querySelector('.autosuggest-textarea__textarea');
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(textarea), 'value').set
.call(textarea, growiclipping_command + statusLink.getAttribute('href'));
textarea.dispatchEvent(new Event('input', { bubbles: true }));
// 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