cobiss-obrazec/js/editor.js

181 lines
88 KiB
JavaScript
Raw Normal View History

2022-04-19 13:20:36 +00:00
/**
* jsPDFEditor
* @return {[type]} [description]
*/
var jsPDFEditor = function() {
var editor,demos = {
'images.js': 'Images',
'font-faces.js': 'Font faces, text alignment and rotation',
'from-html.js': 'HTML Renderer (Early stages)',
'two-page.js': 'Two page Hello World',
'circles.js': 'Circles',
'font-size.js': 'Font sizes',
//'kitchen-sink.js': 'Kitchen Sink', // @TODO
'landscape.js': 'Landscape',
'lines.js': 'Lines',
'rectangles.js': 'Rectangles',
'string-splitting.js': 'String Splitting',
'text-colors.js': 'Text colors',
'triangles.js': 'Triangles',
'user-input.js': 'User input',
//'html2canvas.js': '** NEW: addHTML()',
'acroForm.js': 'AcroForms',
'autoprint.js': 'Auto print'
};
var aceEditor = function() {
editor = ace.edit("editor");
// editor.setTheme("ace/theme/twilight");
//editor.setTheme("ace/theme/ambiance");
editor.setTheme("ace/theme/github");
editor.getSession().setMode("ace/mode/javascript");
editor.getSession().setUseWorker(false); // prevent "SecurityError: DOM Exception 18"
var timeout;
editor.getSession().on('change', function() {
// Hacky workaround to disable auto refresh on user input
if ($('#auto-refresh').is(':checked') && $('#template').val() != 'user-input.js') {
if(timeout) clearTimeout(timeout);
timeout = setTimeout(function() {
jsPDFEditor.update();
}, 200);
}
});
};
var populateDropdown = function() {
var options = '';
for (var demo in demos) {
options += '<option value="' + demo + '">' + demos[demo] + '</option>';
}
$('#template').html(options).on('change', loadSelectedFile);
};
var loadSelectedFile = function() {
if ($('#template').val() == 'user-input.js') {
$('.controls .checkbox').hide();
$('.controls .alert').show();
jsPDFEditor.update(true);
} else {
$('.controls .checkbox').show();
$('.controls .alert').hide();
}
$.get('examples/js/' + $('#template').val(), function(response) {
editor.setValue(response);
editor.gotoLine(0);
// If autorefresh isn't on, then force it when we change examples
if (! $('#auto-refresh').is(':checked')) {
jsPDFEditor.update();
}
}, 'text').error(function() {
$('.template-picker').html('<p class="source">More examples in <b>examples/js/</b>. We can\'t load them in automatically because of local filesystem security precautions.</p>');
// Fallback source code
var source = "// You'll need to make your image into a Data URL\n";
source += "// Use http://dataurl.net/#dataurlmaker\n";
source += "var imgData = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QCqRXhpZgAATU0AKgAAAAgABgESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAAExAAIAAAAeAAAAZodpAAQAAAABAAAAhAAAAAAAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2gAAAKgAgAEAAAAAQAAA4CgAwAEAAAAAQAAA4AAAAAA/9sAQwADAgICAgIDAgICAwMDAwQHBAQEBAQIBgYFBwoJCgoKCQoJCwwQDQsMDwwJCg4TDg8QERISEgsNExUTERUQERIR/9sAQwEDAwMEBAQIBAQIEQsKCxERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER/8AAEQgDgAOAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/VOiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+MP+CnH7X2p/s1/Cm08KeANTFp478b+ZBZXKEGTTbRMCa5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
source += "\n";
source += "var doc = new jsPDF();\n";
source += "\n";
source += "doc.setFontSize(40);\n";
source += "doc.text(40, 30, \"Octocat loves jsPDF\", 4);\n";
source += "doc.addImage(imgData, 10, 40, 180, 180);\n";
editor.setValue(source);
editor.gotoLine(0);
});
};
var initAutoRefresh = function() {
$('#auto-refresh').on('change', function() {
if ($('#auto-refresh').is(':checked')) {
$('.run-code').hide();
jsPDFEditor.update();
} else {
$('.run-code').show();
}
});
$('.run-code').click(function() {
jsPDFEditor.update();
return false;
});
};
var initDownloadPDF = function() {
$('.download-pdf').click(function(){
eval('try{' + editor.getValue() + '} catch(e) { console.error(e.message,e.stack,e); }');
var file = demos[$('#template').val()];
if (file === undefined) {
file = 'demo';
}
if (typeof doc !== 'undefined') {
doc.save(file + '.pdf');
} else if (typeof pdf !== 'undefined') {
setTimeout(function() {
pdf.save(file + '.pdf');
}, 2000);
} else {
alert('Error 0xE001BADF');
}
});
return false;
};
return {
/**
* Start the editor demo
* @return {void}
*/
init: function() {
// Init the ACE editor
aceEditor();
populateDropdown();
loadSelectedFile();
// Do the first update on init
jsPDFEditor.update();
initAutoRefresh();
initDownloadPDF();
},
/**
* Update the iframe with current PDF.
*
* @param {boolean} skipEval If true, will skip evaluation of the code
* @return
*/
update: function(skipEval) {
setTimeout(function() {
if (! skipEval) {
eval('try{' + editor.getValue() + '} catch(e) { console.error(e.message,e.stack,e); }');
}
if (typeof doc !== 'undefined') try {
if (navigator.msSaveBlob) {
// var string = doc.output('datauristring');
string = 'http://microsoft.com/thisdoesnotexists';
console.error('Sorry, we cannot show live PDFs in MSIE')
} else {
var string = doc.output('bloburi');
}
$('.preview-pane').attr('src', string);
} catch(e) {
alert('Error ' + e);
}
}, 0);
}
};
}();
$(document).ready(function() {
jsPDFEditor.init();
});