mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-21 16:06:16 -04:00
Move code from Html export to a Helper file
This commit is contained in:
parent
60ef5f210a
commit
0b5c948549
3 changed files with 147 additions and 144 deletions
139
src/node/utils/ExportHelper.js
Normal file
139
src/node/utils/ExportHelper.js
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
/**
|
||||||
|
* Helpers for export requests
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 2011 Peter 'Pita' Martischka (Primary Technology Ltd)
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS-IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var async = require("async");
|
||||||
|
var Changeset = require("ep_etherpad-lite/static/js/Changeset");
|
||||||
|
var padManager = require("../db/PadManager");
|
||||||
|
var ERR = require("async-stacktrace");
|
||||||
|
var Security = require('ep_etherpad-lite/static/js/security');
|
||||||
|
var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
|
||||||
|
|
||||||
|
exports.getPadPlainText = function(pad, revNum){
|
||||||
|
var atext = ((revNum !== undefined) ? pad.getInternalRevisionAText(revNum) : pad.atext());
|
||||||
|
var textLines = atext.text.slice(0, -1).split('\n');
|
||||||
|
var attribLines = Changeset.splitAttributionLines(atext.attribs, atext.text);
|
||||||
|
var apool = pad.pool();
|
||||||
|
|
||||||
|
var pieces = [];
|
||||||
|
for (var i = 0; i < textLines.length; i++){
|
||||||
|
var line = _analyzeLine(textLines[i], attribLines[i], apool);
|
||||||
|
if (line.listLevel){
|
||||||
|
var numSpaces = line.listLevel * 2 - 1;
|
||||||
|
var bullet = '*';
|
||||||
|
pieces.push(new Array(numSpaces + 1).join(' '), bullet, ' ', line.text, '\n');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
pieces.push(line.text, '\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pieces.join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
// copied from ACE
|
||||||
|
exports._processSpaces = function(s){
|
||||||
|
var doesWrap = true;
|
||||||
|
if (s.indexOf("<") < 0 && !doesWrap){
|
||||||
|
// short-cut
|
||||||
|
return s.replace(/ /g, ' ');
|
||||||
|
}
|
||||||
|
var parts = [];
|
||||||
|
s.replace(/<[^>]*>?| |[^ <]+/g, function (m){
|
||||||
|
parts.push(m);
|
||||||
|
});
|
||||||
|
if (doesWrap){
|
||||||
|
var endOfLine = true;
|
||||||
|
var beforeSpace = false;
|
||||||
|
// last space in a run is normal, others are nbsp,
|
||||||
|
// end of line is nbsp
|
||||||
|
for (var i = parts.length - 1; i >= 0; i--){
|
||||||
|
var p = parts[i];
|
||||||
|
if (p == " "){
|
||||||
|
if (endOfLine || beforeSpace) parts[i] = ' ';
|
||||||
|
endOfLine = false;
|
||||||
|
beforeSpace = true;
|
||||||
|
}
|
||||||
|
else if (p.charAt(0) != "<"){
|
||||||
|
endOfLine = false;
|
||||||
|
beforeSpace = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// beginning of line is nbsp
|
||||||
|
for (var i = 0; i < parts.length; i++){
|
||||||
|
var p = parts[i];
|
||||||
|
if (p == " "){
|
||||||
|
parts[i] = ' ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (p.charAt(0) != "<"){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (var i = 0; i < parts.length; i++){
|
||||||
|
var p = parts[i];
|
||||||
|
if (p == " "){
|
||||||
|
parts[i] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return parts.join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
exports._analyzeLine = function(text, aline, apool){
|
||||||
|
var line = {};
|
||||||
|
|
||||||
|
// identify list
|
||||||
|
var lineMarker = 0;
|
||||||
|
line.listLevel = 0;
|
||||||
|
if (aline){
|
||||||
|
var opIter = Changeset.opIterator(aline);
|
||||||
|
if (opIter.hasNext()){
|
||||||
|
var listType = Changeset.opAttributeValue(opIter.next(), 'list', apool);
|
||||||
|
if (listType){
|
||||||
|
lineMarker = 1;
|
||||||
|
listType = /([a-z]+)([12345678])/.exec(listType);
|
||||||
|
if (listType){
|
||||||
|
line.listTypeName = listType[1];
|
||||||
|
line.listLevel = Number(listType[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lineMarker){
|
||||||
|
line.text = text.substring(1);
|
||||||
|
line.aline = Changeset.subattribution(aline, 1);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
line.text = text;
|
||||||
|
line.aline = aline;
|
||||||
|
}
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
exports._encodeWhitespace = function(s){
|
||||||
|
return s.replace(/[^\x21-\x7E\s\t\n\r]/g, function(c){
|
||||||
|
return "&#" +c.charCodeAt(0) + ";"
|
||||||
|
});
|
||||||
|
}
|
|
@ -21,31 +21,10 @@ var padManager = require("../db/PadManager");
|
||||||
var ERR = require("async-stacktrace");
|
var ERR = require("async-stacktrace");
|
||||||
var Security = require('ep_etherpad-lite/static/js/security');
|
var Security = require('ep_etherpad-lite/static/js/security');
|
||||||
var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
|
var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
|
||||||
function getPadPlainText(pad, revNum)
|
var getPadPlainText = require('./ExportHelper').getPadPlainText
|
||||||
{
|
var _processSpaces = require('./ExportHelper')._processSpaces;
|
||||||
var atext = ((revNum !== undefined) ? pad.getInternalRevisionAText(revNum) : pad.atext());
|
var _analyzeLine = require('./ExportHelper')._analyzeLine;
|
||||||
var textLines = atext.text.slice(0, -1).split('\n');
|
var _encodeWhitespace = require('./ExportHelper')._encodeWhitespace;
|
||||||
var attribLines = Changeset.splitAttributionLines(atext.attribs, atext.text);
|
|
||||||
var apool = pad.pool();
|
|
||||||
|
|
||||||
var pieces = [];
|
|
||||||
for (var i = 0; i < textLines.length; i++)
|
|
||||||
{
|
|
||||||
var line = _analyzeLine(textLines[i], attribLines[i], apool);
|
|
||||||
if (line.listLevel)
|
|
||||||
{
|
|
||||||
var numSpaces = line.listLevel * 2 - 1;
|
|
||||||
var bullet = '*';
|
|
||||||
pieces.push(new Array(numSpaces + 1).join(' '), bullet, ' ', line.text, '\n');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pieces.push(line.text, '\n');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return pieces.join('');
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPadHTML(pad, revNum, callback)
|
function getPadHTML(pad, revNum, callback)
|
||||||
{
|
{
|
||||||
|
@ -92,7 +71,6 @@ function getPadHTML(pad, revNum, callback)
|
||||||
|
|
||||||
exports.getPadHTML = getPadHTML;
|
exports.getPadHTML = getPadHTML;
|
||||||
exports.getHTMLFromAtext = getHTMLFromAtext;
|
exports.getHTMLFromAtext = getHTMLFromAtext;
|
||||||
exports.getPadPlainText = getPadPlainText;
|
|
||||||
|
|
||||||
function getHTMLFromAtext(pad, atext, authorColors)
|
function getHTMLFromAtext(pad, atext, authorColors)
|
||||||
{
|
{
|
||||||
|
@ -504,47 +482,6 @@ function getHTMLFromAtext(pad, atext, authorColors)
|
||||||
return pieces.join('');
|
return pieces.join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
function _analyzeLine(text, aline, apool)
|
|
||||||
{
|
|
||||||
var line = {};
|
|
||||||
|
|
||||||
// identify list
|
|
||||||
var lineMarker = 0;
|
|
||||||
line.listLevel = 0;
|
|
||||||
if (aline)
|
|
||||||
{
|
|
||||||
var opIter = Changeset.opIterator(aline);
|
|
||||||
if (opIter.hasNext())
|
|
||||||
{
|
|
||||||
var listType = Changeset.opAttributeValue(opIter.next(), 'list', apool);
|
|
||||||
if (listType)
|
|
||||||
{
|
|
||||||
lineMarker = 1;
|
|
||||||
listType = /([a-z]+)([12345678])/.exec(listType);
|
|
||||||
if (listType)
|
|
||||||
{
|
|
||||||
line.listTypeName = listType[1];
|
|
||||||
line.listLevel = Number(listType[2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (lineMarker)
|
|
||||||
{
|
|
||||||
line.text = text.substring(1);
|
|
||||||
line.aline = Changeset.subattribution(aline, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
line.text = text;
|
|
||||||
line.aline = aline;
|
|
||||||
}
|
|
||||||
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
exports._analyzeLine = _analyzeLine;
|
|
||||||
|
|
||||||
exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback)
|
exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback)
|
||||||
{
|
{
|
||||||
padManager.getPad(padId, function (err, pad)
|
padManager.getPad(padId, function (err, pad)
|
||||||
|
@ -581,79 +518,6 @@ exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function _encodeWhitespace(s) {
|
|
||||||
return s.replace(/[^\x21-\x7E\s\t\n\r]/g, function(c)
|
|
||||||
{
|
|
||||||
return "&#" +c.charCodeAt(0) + ";"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
exports._encodeWhitespace = _encodeWhitespace;
|
|
||||||
|
|
||||||
// copied from ACE
|
|
||||||
function _processSpaces(s)
|
|
||||||
{
|
|
||||||
var doesWrap = true;
|
|
||||||
if (s.indexOf("<") < 0 && !doesWrap)
|
|
||||||
{
|
|
||||||
// short-cut
|
|
||||||
return s.replace(/ /g, ' ');
|
|
||||||
}
|
|
||||||
var parts = [];
|
|
||||||
s.replace(/<[^>]*>?| |[^ <]+/g, function (m)
|
|
||||||
{
|
|
||||||
parts.push(m);
|
|
||||||
});
|
|
||||||
if (doesWrap)
|
|
||||||
{
|
|
||||||
var endOfLine = true;
|
|
||||||
var beforeSpace = false;
|
|
||||||
// last space in a run is normal, others are nbsp,
|
|
||||||
// end of line is nbsp
|
|
||||||
for (var i = parts.length - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
var p = parts[i];
|
|
||||||
if (p == " ")
|
|
||||||
{
|
|
||||||
if (endOfLine || beforeSpace) parts[i] = ' ';
|
|
||||||
endOfLine = false;
|
|
||||||
beforeSpace = true;
|
|
||||||
}
|
|
||||||
else if (p.charAt(0) != "<")
|
|
||||||
{
|
|
||||||
endOfLine = false;
|
|
||||||
beforeSpace = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// beginning of line is nbsp
|
|
||||||
for (var i = 0; i < parts.length; i++)
|
|
||||||
{
|
|
||||||
var p = parts[i];
|
|
||||||
if (p == " ")
|
|
||||||
{
|
|
||||||
parts[i] = ' ';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if (p.charAt(0) != "<")
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (var i = 0; i < parts.length; i++)
|
|
||||||
{
|
|
||||||
var p = parts[i];
|
|
||||||
if (p == " ")
|
|
||||||
{
|
|
||||||
parts[i] = ' ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return parts.join('');
|
|
||||||
}
|
|
||||||
|
|
||||||
exports._processSpaces = _processSpaces;
|
|
||||||
|
|
||||||
// copied from ACE
|
// copied from ACE
|
||||||
var _REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/;
|
var _REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/;
|
||||||
|
|
|
@ -21,10 +21,10 @@ var padManager = require("../db/PadManager");
|
||||||
var ERR = require("async-stacktrace");
|
var ERR = require("async-stacktrace");
|
||||||
var Security = require('ep_etherpad-lite/static/js/security');
|
var Security = require('ep_etherpad-lite/static/js/security');
|
||||||
var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
|
var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks');
|
||||||
var getPadPlainText = require('./ExportHtml').getPadPlainText;
|
var getPadPlainText = require('./ExportHelper').getPadPlainText;
|
||||||
var _processSpaces = require('./ExportHtml')._processSpaces;
|
var _processSpaces = require('./ExportHelper')._processSpaces;
|
||||||
var _analyzeLine = require('./ExportHtml')._analyzeLine;
|
var _analyzeLine = require('./ExportHelper')._analyzeLine;
|
||||||
var _encodeWhitespace = require('./ExportHtml')._encodeWhitespace;
|
var _encodeWhitespace = require('./ExportHelper')._encodeWhitespace;
|
||||||
|
|
||||||
// This is slightly different than the HTML method as it passes the output to getTXTFromAText
|
// This is slightly different than the HTML method as it passes the output to getTXTFromAText
|
||||||
function getPadTXT(pad, revNum, callback)
|
function getPadTXT(pad, revNum, callback)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue