diff --git a/src/node/db/API.js b/src/node/db/API.js
index 2c8b91abb..ef341bef9 100644
--- a/src/node/db/API.js
+++ b/src/node/db/API.js
@@ -618,7 +618,6 @@ exports.createDiff = function(padID, startRev, endRev, callback){
try {
var padDiff = new PadDiff(pad, startRev, endRev);
} catch(e) {
- // console.warn(e.stack);
return callback({stop:e.message});
}
var html, authors;
diff --git a/src/node/db/AuthorManager.js b/src/node/db/AuthorManager.js
index 28b2dd91e..667e0605d 100644
--- a/src/node/db/AuthorManager.js
+++ b/src/node/db/AuthorManager.js
@@ -24,6 +24,10 @@ var db = require("./DB").db;
var async = require("async");
var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString;
+exports.getColorPalette = function(){
+ return ["#ffc7c7", "#fff1c7", "#e3ffc7", "#c7ffd5", "#c7ffff", "#c7d5ff", "#e3c7ff", "#ffc7f1", "#ff8f8f", "#ffe38f", "#c7ff8f", "#8fffab", "#8fffff", "#8fabff", "#c78fff", "#ff8fe3", "#d97979", "#d9c179", "#a9d979", "#79d991", "#79d9d9", "#7991d9", "#a979d9", "#d979c1", "#d9a9a9", "#d9cda9", "#c1d9a9", "#a9d9b5", "#a9d9d9", "#a9b5d9", "#c1a9d9", "#d9a9cd", "#4c9c82", "#12d1ad", "#2d8e80", "#7485c3", "#a091c7", "#3185ab", "#6818b4", "#e6e76d", "#a42c64", "#f386e5", "#4ecc0c", "#c0c236", "#693224", "#b5de6a", "#9b88fd", "#358f9b", "#496d2f", "#e267fe", "#d23056", "#1a1a64", "#5aa335", "#d722bb", "#86dc6c", "#b5a714", "#955b6a", "#9f2985", "#4b81c8", "#3d6a5b", "#434e16", "#d16084", "#af6a0e", "#8c8bd8"];
+};
+
/**
* Checks if the author exists
*/
diff --git a/src/node/db/Pad.js b/src/node/db/Pad.js
index 037886eac..4701e82a3 100644
--- a/src/node/db/Pad.js
+++ b/src/node/db/Pad.js
@@ -227,7 +227,8 @@ Pad.prototype.getAllAuthorColors = function getAllAuthorColors(callback){
if(err){
return callback(err);
}
- returnTable[author]=colorPalette[colorId];
+ //colorId might be a hex color or an number out of the palette
+ returnTable[author]=colorPalette[colorId] || colorId;
callback();
});
diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js
index 434c25ad6..24f72c796 100644
--- a/src/node/handler/PadMessageHandler.js
+++ b/src/node/handler/PadMessageHandler.js
@@ -1028,7 +1028,7 @@ function handleClientReady(client, message)
"globalPadId": message.padId,
"time": currentTime,
},
- "colorPalette": ["#ffc7c7", "#fff1c7", "#e3ffc7", "#c7ffd5", "#c7ffff", "#c7d5ff", "#e3c7ff", "#ffc7f1", "#ff8f8f", "#ffe38f", "#c7ff8f", "#8fffab", "#8fffff", "#8fabff", "#c78fff", "#ff8fe3", "#d97979", "#d9c179", "#a9d979", "#79d991", "#79d9d9", "#7991d9", "#a979d9", "#d979c1", "#d9a9a9", "#d9cda9", "#c1d9a9", "#a9d9b5", "#a9d9d9", "#a9b5d9", "#c1a9d9", "#d9a9cd", "#4c9c82", "#12d1ad", "#2d8e80", "#7485c3", "#a091c7", "#3185ab", "#6818b4", "#e6e76d", "#a42c64", "#f386e5", "#4ecc0c", "#c0c236", "#693224", "#b5de6a", "#9b88fd", "#358f9b", "#496d2f", "#e267fe", "#d23056", "#1a1a64", "#5aa335", "#d722bb", "#86dc6c", "#b5a714", "#955b6a", "#9f2985", "#4b81c8", "#3d6a5b", "#434e16", "#d16084", "#af6a0e", "#8c8bd8"],
+ "colorPalette": authorManager.getColorPalette(),
"clientIp": "127.0.0.1",
"userIsGuest": true,
"userColor": authorColorId,
diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js
index f385d4704..d9ba3df48 100644
--- a/src/node/utils/ExportHtml.js
+++ b/src/node/utils/ExportHtml.js
@@ -1,12 +1,12 @@
/**
* Copyright 2009 Google Inc.
- *
+ *
* 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.
@@ -92,7 +92,7 @@ function getPadHTML(pad, revNum, callback)
exports.getPadHTML = getPadHTML;
-exports.getHTMLFromAtext = function(pad, atext)
+exports.getHTMLFromAtext = function(pad, atext, authorColors)
{
var apool = pad.apool();
var textLines = atext.text.slice(0, -1).split('\n');
@@ -101,6 +101,42 @@ exports.getHTMLFromAtext = function(pad, atext)
var tags = ['h1', 'h2', 'strong', 'em', 'u', 's'];
var props = ['heading1', 'heading2', 'bold', 'italic', 'underline', 'strikethrough'];
var anumMap = {};
+ var css = "";
+
+ var stripDotFromAuthorID = function(id){
+ return id.replace(/\./g,'_');
+ };
+
+ if(authorColors){
+ css+="";
+ }
props.forEach(function (propName, i)
{
@@ -125,22 +161,53 @@ exports.getHTMLFromAtext = function(pad, atext)
// Just bold Bold and italics Just italics
var taker = Changeset.stringIterator(text);
var assem = Changeset.stringAssembler();
-
var openTags = [];
+
+ function getSpanClassFor(i){
+ //return if author colors are disabled
+ if (!authorColors) return false;
+
+ var property = props[i];
+
+ if(property.substr(0,6) === "author"){
+ return stripDotFromAuthorID(property);
+ }
+
+ if(property === "removed"){
+ return "removed";
+ }
+
+ return false;
+ }
+
function emitOpenTag(i)
{
openTags.unshift(i);
- assem.append('<');
- assem.append(tags[i]);
- assem.append('>');
+ var spanClass = getSpanClassFor(i);
+
+ if(spanClass){
+ assem.append('');
+ } else {
+ assem.append('<');
+ assem.append(tags[i]);
+ assem.append('>');
+ }
}
function emitCloseTag(i)
{
openTags.shift();
- assem.append('');
- assem.append(tags[i]);
- assem.append('>');
+ var spanClass = getSpanClassFor(i);
+
+ if(spanClass){
+ assem.append('');
+ } else {
+ assem.append('');
+ assem.append(tags[i]);
+ assem.append('>');
+ }
}
function orderdCloseTags(tags2close)
@@ -303,7 +370,7 @@ exports.getHTMLFromAtext = function(pad, atext)
return _processSpaces(assem.toString());
} // end getLineHTML
- var pieces = [];
+ var pieces = [css];
// Need to deal with constraints imposed on HTML lists; can
// only gain one level of nesting at once, can't change type
diff --git a/src/node/utils/padDiff.js b/src/node/utils/padDiff.js
index b1fa9277a..1b3cf58f5 100644
--- a/src/node/utils/padDiff.js
+++ b/src/node/utils/padDiff.js
@@ -244,17 +244,14 @@ PadDiff.prototype.getHtml = function(callback){
},
//get the authorColor table
function(callback){
- /*
- self._pad.getAllAuthorColors(function(err, _authorColors){ // TODO
+ self._pad.getAllAuthorColors(function(err, _authorColors){
if(err){
return callback(err);
}
authorColors = _authorColors;
+ callback();
});
- */
- authorColors = {};
- callback();
},
//convert the atext to html
function(callback){
@@ -265,7 +262,7 @@ PadDiff.prototype.getHtml = function(callback){
], function(err){
callback(err, html);
});
-}
+};
PadDiff.prototype.getAuthors = function(callback){
var self = this;