Etherpad:如何从 etherpad 中捕获选定的文本
Etherpad: How to capture selected text from etherpad
我想从 Etherpad 中捕获选定的文本。有 API 方法可用 /getText 将 return 整个文本。
我的要求是只获取选定的文本。
提前致谢!
如果您想在外部框架中使用选定的文本,您可以使用 postMessage 系统。
exports.postAceInit = (hookName, context) => {
window.addEventListener('message', function receiver(e) {
// Data of Request
let data = e.data;
// Origin URL of Request
let origin = e.origin;
if(data == 'GET_SELECTION'){
context.ace.callWithAce((ace) => {
// Read current selection
let rep = ace.ace_getRep();
// Start of the Selection [x,y]
let selStart = rep.selStart;
// End of the Selection [x,y]
let selEnd = rep.selEnd;
// Read Lines of Pad
let lines = rep.lines;
let retVal = '';
// Run through Selection
for(let idx = selStart[0]; idx < selEnd[0]+1; idx++){
retVal = retVal + lines.atIndex(idx).text;
}
// Send text to Receiver
e.source.postMessage(retVal, origin);
}, 'GET_SELECTION', true);
}
, false);
}
收件人和发件人站点:
<script type="text/javascript">
function sendMessage(message) {
document.getElementById('etherpad').contentWindow.postMessage(message, '_URL OF YOUR ETHERPAD INSTANCE_');
}
function receiver(e) {
// Read Data of Request
let data = e.data;
// Origin URL of Request
let origin = e.origin;
alert("GOT: " + data + "\nFROM: " + origin);
e.source.postMessage('Thanks', origin);
}
// Listener gets Requests
window.addEventListener('message', receiver, false);
</script>
<button type="button" onclick="sendMessage('GET_SELECTION')">GET SELECTION</button>
此代码将从所选内容中获取整行文本。如果你想获得精确的字符,你需要在 idx for-loop
中进行第二个循环
我想从 Etherpad 中捕获选定的文本。有 API 方法可用 /getText 将 return 整个文本。 我的要求是只获取选定的文本。
提前致谢!
如果您想在外部框架中使用选定的文本,您可以使用 postMessage 系统。
exports.postAceInit = (hookName, context) => {
window.addEventListener('message', function receiver(e) {
// Data of Request
let data = e.data;
// Origin URL of Request
let origin = e.origin;
if(data == 'GET_SELECTION'){
context.ace.callWithAce((ace) => {
// Read current selection
let rep = ace.ace_getRep();
// Start of the Selection [x,y]
let selStart = rep.selStart;
// End of the Selection [x,y]
let selEnd = rep.selEnd;
// Read Lines of Pad
let lines = rep.lines;
let retVal = '';
// Run through Selection
for(let idx = selStart[0]; idx < selEnd[0]+1; idx++){
retVal = retVal + lines.atIndex(idx).text;
}
// Send text to Receiver
e.source.postMessage(retVal, origin);
}, 'GET_SELECTION', true);
}
, false);
}
收件人和发件人站点:
<script type="text/javascript">
function sendMessage(message) {
document.getElementById('etherpad').contentWindow.postMessage(message, '_URL OF YOUR ETHERPAD INSTANCE_');
}
function receiver(e) {
// Read Data of Request
let data = e.data;
// Origin URL of Request
let origin = e.origin;
alert("GOT: " + data + "\nFROM: " + origin);
e.source.postMessage('Thanks', origin);
}
// Listener gets Requests
window.addEventListener('message', receiver, false);
</script>
<button type="button" onclick="sendMessage('GET_SELECTION')">GET SELECTION</button>
此代码将从所选内容中获取整行文本。如果你想获得精确的字符,你需要在 idx for-loop
中进行第二个循环