A solution for spellcheck in Ghost
目前為
// ==UserScript==
// @name Dirty Ghost Spellchecker
// @namespace http://reaves.co/
// @version 0.1.2
// @description A solution for spellcheck in Ghost
// @match http://*/ghost/editor/*
// @copyright 2014+, Ryan Reaves
// ==/UserScript==
$(document).ready(function(){
executeDirty();
});
var checkIt = setInterval(function()
{
if(document.getElementById('spellModal') == undefined){
executeDirty();
clearInterval(checkIt);
}
}, 500);
function executeDirty(){
var helpLink = document.querySelectorAll('a.markdown-help')[0];
var $floatingHeader = document.querySelectorAll('header.floatingheader')[0];
var $btn = $('<a id="spellModal" href="#" style="float:right" class="spellchecker">SPELLCHECK</a>');
$btn.appendTo($floatingHeader);
var textArea;
// define a handler
function doc_keyDown(e) {
if (e.altKey && e.keyCode == 70) {
$('#spellModal').trigger('click');
e.preventDefault();
}
else if (e.altKey && e.keyCode == 87) {
$('a.close').trigger('click');
e.preventDefault();
}
}
// register the handler
document.addEventListener('keydown', doc_keyDown, false);
$btn.on('click', function(e) {
var cpeditorElements = document.querySelectorAll('div.CodeMirror-code')[0].children.length;
var cpeditor = document.querySelectorAll('div.CodeMirror-code')[0].childNodes[0].childNodes[0];
var textArea = cpeditor.innerHTML;
textArea = textArea.replace(/<\/?span[^>]*>/g,"");
textArea = textArea.replace(/\u200B/g,'');
for(i=1;i<cpeditorElements;i++){
cpeditor = document.querySelectorAll('div.CodeMirror-code')[0].childNodes[i].childNodes[0].innerHTML;
cpeditor = cpeditor.replace(/<\/?span[^>]*>/g,"");
textArea = textArea.replace(/\u200B/g,'');
textSub = textArea.substr(textArea.length - 1);
console.log('textSub: "'+textSub.charCodeAt(0)+'"');
textArea = textArea +' '+ cpeditor;
}
//textArea = textArea.replace(/\u000D/g,'');
//Content area will not highlight spelling mistakes with a space on the end, so I will attach it below
lastChar = textArea.substr(textArea.length - 1);
if(lastChar != " "){
textArea = textArea + " ";
}
$editables = $('[contenteditable=true]');
$editables.filter("p,span").on('keypress',function(e){
if(e.keyCode==13){ //enter && shift
e.preventDefault(); //Prevent default browser behavior
if (window.getSelection) {
var selection = window.getSelection(),
range = selection.getRangeAt(0),
br = document.createElement("br"),
textNode = document.createTextNode("\u00a0"); //Passing " " directly will not end up being shown correctly
range.deleteContents();//required or not?
range.insertNode(br);
range.collapse(false);
range.insertNode(textNode);
range.selectNodeContents(textNode);
selection.removeAllRanges();
selection.addRange(range);
return false;
}
}
});
//initiate help link, but then override the content in the modal window for spellcheck
helpLink.click();
var spellModal = document.querySelectorAll('header.modal-header')[0];
spellModal.childNodes[0].innerHTML = 'Dirty Ghost SpellCheck';
if(document.getElementById('spellTips') == undefined){
spellModal.childNodes[0].insertAdjacentHTML('afterend','<span id="spellTips" style="float: right; padding-right: 25px">Open - Alt+F | Close - Alt+W</span>');
}
var shortcuts = document.querySelectorAll('section.modal-body')[0];
$(".modal").css("width","75%");
if(shortcuts != undefined){
shortcuts.remove();
}
var txtbox = "1.) When done press [Ctrl+A] & then [Ctrl+C]<br>2.) Close window [Alt+W] and press [Ctrl+A] & [Ctrl+P]<br>Note: Mac Users will use Cmd<br><textarea style='width:100%; max-width:100% !important; height:100%' rows='20' spellcheck='true' id='spellcheck'>"+textArea+"</textarea>";
spellModal.insertAdjacentHTML('afterend',txtbox);
$("#spellcheck").focus();
});
}