Merge pull request #2487 from ether/html-e-hook

Better HTML Export rewrite hook allows functions to be passed instead of strings means state is saved between plugins
pull/2494/merge
John McLear 2015-01-25 00:07:34 +00:00
commit 831151cfba
2 changed files with 51 additions and 4 deletions

View File

@ -245,7 +245,7 @@ Things in context:
2. attribLine - line attributes
3. text - line text
This hook will allow a plug-in developer to re-write each line when exporting to HTML.
This hook will allow a plug-in developer to re-write each line when exporting to HTML. Note that you problably don't want to use this plugin and will probably get better results from `asyncLineHTMLForExport`
Example:
```
@ -271,6 +271,39 @@ function _analyzeLine(alineAttrs, apool) {
}
```
## asyncLineHTMLForExport
Called from: src/node/utils/ExportHtml.js
Things in context:
1. The context of the line
2. lineContents - The HTML of the line
3. Attribute pool
4. Attribute line
5. Line Text
This hook will allow functions to be returned to modify the HTML.
Example:
```
exports.asyncLineHTMLForExport = function (hook, context, cb) {
cb(rewriteLine);
}
function rewriteLine(context){
var lineContent = context.lineContent;
sizes.forEach(function(size){
size = size.replace("fs","");
if(lineContent){
lineContent = lineContent.replace("<fs"+size, "<span style='font-size:"+size+"px'");
lineContent = lineContent.replace("</fs"+size, "</span");
}
});
return lineContent;
}
```
## stylesForExport
Called from: src/node/utils/ExportHtml.js

View File

@ -411,14 +411,28 @@ function getHTMLFromAtext(pad, atext, authorColors)
}
lists = []
var lineContentFromHook = hooks.callAllStr("getLineHTMLForExport",
{
var context = {
line: line,
lineContent: lineContent,
apool: apool,
attribLine: attribLines[i],
text: textLines[i]
}, " ", " ", "");
}
// See https://github.com/ether/etherpad-lite/issues/2486
hooks.aCallAll("asyncLineHTMLForExport", context, function(err, newLineFunction){
// For each function returned by the hook call
// Process the text based on the function
newLineFunction.forEach(function(fn){
context.lineContent = fn(context); // note the fn
});
// We now have a line that has been processed by each hook function
lineContent = context.lineContent; // modified lineContent here
});
// Old hook probably not to be used..
var lineContentFromHook = hooks.callAllStr("getLineHTMLForExport", context, " ", " ", "");
if (lineContentFromHook)
{
pieces.push(lineContentFromHook, '');