Skip to content

Fixed diagram rendering #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 76 additions & 54 deletions src/etherpad-editor.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
import jQuery from 'jquery';
import { collabuml } from './config';

export const getText = (callback) => {
jQuery.ajax({
'url': collabuml.host + '/api/1/getText?apikey=' + collabuml.apikey + '&padID=' + collabuml.padId + '&jsonp=?',
'type': 'GET',
'dataType': "jsonp",
'success': function (response) {
callback(response.data.text);
}
});
};
const plantumlEncoder = require('plantuml-encoder')

export const renderPad = (selector, padId) => {
jQuery(selector).pad({ 'padId': padId, 'showChat': 'false' });
};

export const getText = (selector, padId, getContents, callback) => {
jQuery(selector).pad({ 'padId': padId, 'getContents': getContents, 'callback': callback});
};

(function (jQuery) {
jQuery.fn.pad = function (options) {
var settings = {
@@ -47,60 +41,88 @@ export const renderPad = (selector, padId) => {
var useValue = $self[0].tagName.toLowerCase() == 'textarea';
var selfId = $self.attr('id');
var epframeId = 'epframe' + selfId;
// This writes a new frame if required
if (options) {
jQuery.extend(settings, options);
}

var pluginParams = '';
for (var option in settings.plugins) {
pluginParams += '&' + option + '=' + settings.plugins[option]
}
if (!options.getContents){
if (options) {
jQuery.extend(settings, options);
}

var iFrameLink = '<iframe id="' + epframeId;
iFrameLink = iFrameLink + '" name="' + epframeId;
iFrameLink = iFrameLink + '" src="' + settings.host + settings.baseUrl + settings.padId;
iFrameLink = iFrameLink + '?showControls=' + settings.showControls;
iFrameLink = iFrameLink + '&showChat=' + settings.showChat;
iFrameLink = iFrameLink + '&showLineNumbers=' + settings.showLineNumbers;
iFrameLink = iFrameLink + '&useMonospaceFont=' + settings.useMonospaceFont;
iFrameLink = iFrameLink + '&userName=' + settings.userName;
if (settings.lang) {
iFrameLink = iFrameLink + '&lang=' + settings.lang;
}
iFrameLink = iFrameLink + '&noColors=' + settings.noColors;
iFrameLink = iFrameLink + '&userColor=' + settings.userColor;
iFrameLink = iFrameLink + '&hideQRCode=' + settings.hideQRCode;
iFrameLink = iFrameLink + '&alwaysShowChat=' + settings.alwaysShowChat;
iFrameLink = iFrameLink + '&rtl=' + settings.rtl;
iFrameLink = iFrameLink + pluginParams;
iFrameLink = iFrameLink + '" style="border:' + settings.border;
iFrameLink = iFrameLink + '; border-style:' + settings.borderStyle;
iFrameLink = iFrameLink + ';" width="' + '100%';//settings.width;
iFrameLink = iFrameLink + '" height="' + settings.height;
iFrameLink = iFrameLink + '"></iframe>';
var pluginParams = '';
for (var option in settings.plugins) {
pluginParams += '&' + option + '=' + settings.plugins[option]
}

var iFrameLink = '<iframe id="' + epframeId;
iFrameLink = iFrameLink + '" name="' + epframeId;
iFrameLink = iFrameLink + '" src="' + settings.host + settings.baseUrl + settings.padId;
iFrameLink = iFrameLink + '?showControls=' + settings.showControls;
iFrameLink = iFrameLink + '&showChat=' + settings.showChat;
iFrameLink = iFrameLink + '&showLineNumbers=' + settings.showLineNumbers;
iFrameLink = iFrameLink + '&useMonospaceFont=' + settings.useMonospaceFont;
iFrameLink = iFrameLink + '&userName=' + settings.userName;
if (settings.lang) {
iFrameLink = iFrameLink + '&lang=' + settings.lang;
}
iFrameLink = iFrameLink + '&noColors=' + settings.noColors;
iFrameLink = iFrameLink + '&userColor=' + settings.userColor;
iFrameLink = iFrameLink + '&hideQRCode=' + settings.hideQRCode;
iFrameLink = iFrameLink + '&alwaysShowChat=' + settings.alwaysShowChat;
iFrameLink = iFrameLink + '&rtl=' + settings.rtl;
iFrameLink = iFrameLink + pluginParams;
iFrameLink = iFrameLink + '" style="border:' + settings.border;
iFrameLink = iFrameLink + '; border-style:' + settings.borderStyle;
iFrameLink = iFrameLink + ';" width="' + '100%';//settings.width;
iFrameLink = iFrameLink + '" height="' + settings.height;
iFrameLink = iFrameLink + '"></iframe>';

var $iFrameLink = jQuery(iFrameLink);
var $iFrameLink = jQuery(iFrameLink);

if (useValue) {
var $toggleLink = jQuery('<a href="#' + selfId + '">' + settings.toggleTextOn + '</a>').click(function () {
if (useValue) {
var $toggleLink = jQuery('<a href="#' + selfId + '">' + settings.toggleTextOn + '</a>').click(function () {
var $this = jQuery(this);
$this.toggleClass('active');
if ($this.hasClass('active')) $this.text(settings.toggleTextOff);
$self.pad({ getContents: true });
return false;
});
$self
.hide()
.after($toggleLink)
.after($iFrameLink)
;
$self.pad({ getContents: true });
return false;
});
$self
.hide()
.after($toggleLink)
.after($iFrameLink);
}
else {
$self.html(iFrameLink);
}
}
else {
$self.html(iFrameLink);
}
var frameUrl = jQuery('#'+ epframeId).attr('src').split('?')[0];
var contentsUrl = frameUrl + "/export/html";
var target = jQuery(options.getContents);

jQuery.get(contentsUrl, function(data) {
var bodyContentRegex = /<body[^>]*>([\s\S]+)<\/body>/i;
var bodyContentMatch = data.match(bodyContentRegex);
var bodyContent = bodyContentMatch ? bodyContentMatch[1] : '';

const toText = function (text) {
var br = /<br>/g;
text = text.replace(br, '\n');
var gt = /&gt;/g;
text = text.replace(gt, '>');
var lt = /&lt;/g;
text = text.replace(lt, '<');
var amp = /&amp;/g;
text = text.replace(amp, '&');
var quot = /&quot;/g;
text = text.replace(quot, '"');
var nbsp = /&nbsp;/g;
text = text.replace(nbsp, '');
return text;
}
var text = toText(bodyContent)
options.callback(text)
});
}
return $self;
};
})(jQuery);
3 changes: 2 additions & 1 deletion src/plantuml-rendered.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import jQuery from 'jquery';
import { collabuml } from './config';

const plantumlEncoder = require('plantuml-encoder')

function renderDiagram(ms, getText) {
scheduledRendering(ms, getText);
getText(function (text) {
getText('#etherpad-input', collabuml.padId, '#diagram-view', function (text) {
var encoded = plantumlEncoder.encode(text);
var div = jQuery('#diagram-view')
var sourceUrl = "https://www.plantuml.com/plantuml/img/" + encoded;