From fd3472589bc2527a89356fa55b2b61425adba4c6 Mon Sep 17 00:00:00 2001 From: Johan Friis Date: Tue, 11 Sep 2012 17:37:40 +0200 Subject: [PATCH] Add preview as HTML functionality Add a toolbar button that opens a new window and shows the content of the pad as text/html. Used the 'eye' icon from the Iconic set at http://somerandomdude.com/work/iconic/ --- src/ep.json | 1 + src/node/handler/PreviewHandler.js | 68 +++++++++++++++++++++++++++++ src/node/hooks/express/preview.js | 19 ++++++++ src/static/css/pad.css | 3 ++ src/static/img/preview.png | Bin 0 -> 328 bytes src/static/js/pad_editbar.js | 6 +++ src/templates/pad.html | 7 ++- 7 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/node/handler/PreviewHandler.js create mode 100644 src/node/hooks/express/preview.js create mode 100644 src/static/img/preview.png diff --git a/src/ep.json b/src/ep.json index ce6d3a00f..d3dd47b6b 100644 --- a/src/ep.json +++ b/src/ep.json @@ -11,6 +11,7 @@ { "name": "webaccess", "hooks": { "expressConfigure": "ep_etherpad-lite/node/hooks/express/webaccess:expressConfigure" } }, { "name": "apicalls", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/apicalls:expressCreateServer" } }, { "name": "importexport", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/importexport:expressCreateServer" } }, + { "name": "preview", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/preview:expressCreateServer" } }, { "name": "errorhandling", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/errorhandling:expressCreateServer" } }, { "name": "socketio", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/socketio:expressCreateServer" } }, { "name": "adminplugins", "hooks": { diff --git a/src/node/handler/PreviewHandler.js b/src/node/handler/PreviewHandler.js new file mode 100644 index 000000000..68f4782d3 --- /dev/null +++ b/src/node/handler/PreviewHandler.js @@ -0,0 +1,68 @@ +/** + * Handles the preview 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 ERR = require("async-stacktrace"); +var padManager = require("../db/PadManager"); + +/** + * do a requested preview + */ + +function _cleanText(text) +{ + if (!text) + return null; + + var atext = text.split('\n'); + var clean = Array(); + for (n in atext) + { + var line = atext[n]; + + if (line[0] === "*") + line = line.substring(1); + + clean.push(line); + } + return clean.join('\n'); +} + +exports.doPreview = function(req, res, padId, type) +{ + padManager.getPad(padId, function(err, pad) + { + ERR(err); + if(type == "html") + { + res.header("Content-Type","text/html; charset=utf-8"); + if(req.params.rev){ + pad.getInternalRevisionAText(req.params.rev, function(junk, text) + { + res.write(_cleanText(text.text)); + }); + } + else + { + res.write(_cleanText(pad.text())); + } + res.end(); + } + }); +}; diff --git a/src/node/hooks/express/preview.js b/src/node/hooks/express/preview.js new file mode 100644 index 000000000..821a9a7a7 --- /dev/null +++ b/src/node/hooks/express/preview.js @@ -0,0 +1,19 @@ +var hasPadAccess = require("../../padaccess"); +var previewHandler = require('../../handler/PreviewHandler'); + +exports.expressCreateServer = function (hook_name, args, cb) { + args.app.get('/p/:pad/:rev?/preview/:type', function(req, res, next) { + var types = ['html']; + //send a 404 if we don't support this filetype + if (types.indexOf(req.params.type) == -1) { + next(); + return; + } + + res.header("Access-Control-Allow-Origin", "*"); + + hasPadAccess(req, res, function() { + previewHandler.doPreview(req, res, req.params.pad, req.params.type); + }); + }); +} diff --git a/src/static/css/pad.css b/src/static/css/pad.css index 19180adee..454f36700 100644 --- a/src/static/css/pad.css +++ b/src/static/css/pad.css @@ -815,6 +815,9 @@ table#otheruserstable { .buttonicon-savedRevision { background-position: 0px -493px } +.buttonicon-preview { + background-image: url('../../static/img/preview.png'); +} #focusprotector { z-index: 100; position: absolute; diff --git a/src/static/img/preview.png b/src/static/img/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..008d229cc22643b2c4cef8e857aa3bbaa2bc7e73 GIT binary patch literal 328 zcmV-O0k{5%P)Tlf7-jFc5`5ol~eJGKoj9H!v44bjScfCa^U@kO6`- z+^Cc{NH$1D$OHx#kd#8ALCc5=E3YE&=iLtgUfT{>w8)%o0+>AmtrUa4qFS2
  • +
  • + + + +
  • - +