A Etherpad, ci sono scorciatoie per altre azioni rispetto al grassetto, in corsivo e sottolineatura (Strike, Bullet Point, ...)?

StackOverflow https://stackoverflow.com//questions/10698889

  •  12-12-2019
  •  | 
  •  

Domanda

Bene, praticamente tutto è nel titolo: Ci sono scorciatoie per eseguire qualcos'altro che fare testo in grassetto, in corsivo o sottolineato?O qualsiasi plugin che consente di farlo?

Secondo un mio collega, il codice sorgente non sembra contenere queste cose, ma forse abbiamo perso qualcosa?

È stato utile?

Soluzione

Etherpad contiene un editor rich-text incorporato chiamato ACE2 (originariamente Editor di codice AppJet), che sembra essere responsabile per la gestione della scelta rapida della tastiera.

Il file ace.js incorporato da default utilizzato per essere minificato e quindi difficile da leggere nella versione precedente di Etherpad, ma è possibile leggere i file di origine originali direttamente nel infrastructure/ace Parte del codice sorgente , da cui viene prodotta la versione minificata. Per ulteriori informazioni su questo, uno sguardo a HAPME < / a>. Le versioni più recenti (almeno l'etherpad.org) sembrano includere la normale sorgente ACE2 JS.

Il codice di gestione della scelta rapida della tastiera si trova in ace2_inner.js, all'interno del handleKeyEvent() Funzione. Sulla base di questo, sembra che le scorciatoie da tastiera supportate da Sosted Out-of-the-box siano le seguenti (in cima alle scorciatoie del browser come taglio / copia / incolla):

    .
  • Inserisci - Speciale etherpad carriage ritorno
  • scheda o shift + scheda - indent o ovent bullet elenchi
  • ctrl + z - Speciale Etherpad Annulla
  • ctrl + y - Special etherpad redo
  • ctrl + B - Bold
  • ctrl + i - corsivo
  • ctrl + u - Sottolinea
  • ctrl + h - Elimina
  • ctrl + s - Salva una revisione

Niente per uno stikethrough o elenchi di proiettili, e nulla che assomigli a un facile meccanismo di estensione per collegamenti, quindi potrebbe essere necessario sporcare le mani ;-)

Se hai il proprio implementazione di EtherPad potrebbe essere il più semplice potrebbe essere quello di modificare il codice sorgente di ACE2 per gestire scorciatoie aggiuntive, quindi riabilitare la versione minificata ace2.js (secondo le istruzioni in readme ) se necessario. Ecco un esempio di come gestire ctrl + s scorciatoia per interruttore Strikethrough, e ctrl + l per la lista dei proiettili Toggle. La scorciatoia Strikethrough disabilita il browser incorporato Salva come ... Raccolta, che trovo è un bonus, ma se non ti piace è sempre possibile optare per un'altra chiave rispetto a s .
Inserire il seguente frammento di snippet in ace2_inner.js tra blocchi dall'aspetto simile che gestiscono altre scorciatoie, attorno alla linea 3200:

/* Ctrl+S toggles striketrough, and prevents triggering the browser's Save dialog */
if ((!specialHandled) && isTypeForCmdKey &&
    String.fromCharCode(which).toLowerCase() == "s" &&
    (evt.metaKey ||  evt.ctrlKey)) {
  // ctrl/cmd-s (strikethrough toggle)
  fastIncorp(13); // don't ask me ;-)
  evt.preventDefault();
  toggleAttributeOnSelection('strikethrough');
  specialHandled = true;
}
if ((!specialHandled) && isTypeForCmdKey &&
    String.fromCharCode(which).toLowerCase() == "l" &&
    (evt.ctrlKey)) {
  // ctrl/cmd-L (bullet list toggle)
  fastIncorp(9); // seriously, don't ask me ;-)
  evt.preventDefault();
  doInsertUnorderedList();
  specialHandled = true;
}
.

Se non è possibile ricostruire la versione minificata è anche possibile provare a patchare direttamente utilizzando i nomi minificati. Ecco la versione minificata dello snippet sopra per me, anche se YMMV, non ho controllato se la minificazione è stabile e riutilizza gli stessi nomi abbreviati ogni volta. Cerca "Y" (con le virgolette) per individuare la versione minificata di handleKeyEvent() all'interno ace.js:

if ((!Cp)&&Cu&&String.fromCharCode(Ct).toLowerCase()=="s"&&(i.metaKey || i.ctrlKey)){G(13);\\ni.preventDefault();c("strikethrough");Cp=true;}if((!Cp)&&Cu&&String.fromCharCode(Ct).toLowerCase()=="l"&&(i.metaKey||i.ctrlKey)){G(9);\\ni.preventDefault();As();Cp=true;}
.

Infine, se non controlli la distribuzione etherpad, potresti forse implementare qualcosa di simile utilizzando un in-browser Greasemonkey Script che toppa la funzione handleKeyEvent() predefinita. Come punto di partenza per il collegamento nell'editor, prova a ispezionare gli oggetti window.pad*, come window.padeditor. Ad esempio selezionare un po 'di testo nell'editor e provare quanto segue nella console:

> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist') 
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top