2020-12-20 08:15:58 +01:00
|
|
|
'use strict';
|
|
|
|
|
2011-12-04 16:33:56 +01:00
|
|
|
/**
|
2015-12-18 04:54:04 +01:00
|
|
|
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
2011-12-04 16:33:56 +01:00
|
|
|
* This helps other people to understand this code better and helps them to improve it.
|
|
|
|
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
|
|
|
*/
|
|
|
|
|
2011-03-26 14:10:41 +01:00
|
|
|
/**
|
|
|
|
* Copyright 2009 Google Inc.
|
2011-07-07 19:59:34 +02:00
|
|
|
*
|
2011-03-26 14:10:41 +01:00
|
|
|
* 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
|
2011-07-07 19:59:34 +02:00
|
|
|
*
|
2011-03-26 14:10:41 +01:00
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
2011-07-07 19:59:34 +02:00
|
|
|
*
|
2011-03-26 14:10:41 +01:00
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2020-12-20 08:15:58 +01:00
|
|
|
const padimpexp = (() => {
|
2020-10-06 04:22:44 +02:00
|
|
|
let pad;
|
2011-03-26 14:10:41 +01:00
|
|
|
|
2020-10-06 04:22:44 +02:00
|
|
|
// /// import
|
2020-12-20 08:15:58 +01:00
|
|
|
const addImportFrames = () => {
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#import .importframe').remove();
|
2020-12-20 08:15:58 +01:00
|
|
|
const iframe = $('<iframe>')
|
|
|
|
.css('display', 'none')
|
|
|
|
.attr('name', 'importiframe')
|
|
|
|
.addClass('importframe');
|
2011-07-21 21:13:58 +02:00
|
|
|
$('#import').append(iframe);
|
2020-12-20 08:15:58 +01:00
|
|
|
};
|
2011-07-07 19:59:34 +02:00
|
|
|
|
2020-12-20 08:15:58 +01:00
|
|
|
const fileInputUpdated = () => {
|
2014-11-18 19:09:29 +01:00
|
|
|
$('#importsubmitinput').addClass('throbbold');
|
2011-03-26 14:10:41 +01:00
|
|
|
$('#importformfilediv').addClass('importformenabled');
|
|
|
|
$('#importsubmitinput').removeAttr('disabled');
|
2014-11-18 19:09:29 +01:00
|
|
|
$('#importmessagefail').fadeOut('fast');
|
2020-12-20 08:15:58 +01:00
|
|
|
};
|
2011-07-07 19:59:34 +02:00
|
|
|
|
2021-02-18 09:42:56 +01:00
|
|
|
const fileInputSubmit = function (e) {
|
2020-10-06 04:22:44 +02:00
|
|
|
e.preventDefault();
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#importmessagefail').fadeOut('fast');
|
2020-10-06 04:22:44 +02:00
|
|
|
if (!window.confirm(html10n.get('pad.impexp.confirmimport'))) return;
|
2021-02-08 02:30:07 +01:00
|
|
|
$('#importsubmitinput').attr({disabled: true}).val(html10n.get('pad.impexp.importing'));
|
|
|
|
window.setTimeout(() => $('#importfileinput').attr({disabled: true}), 0);
|
2021-02-08 02:23:15 +01:00
|
|
|
$('#importarrow').stop(true, true).hide();
|
|
|
|
$('#importstatusball').show();
|
2020-10-06 04:22:44 +02:00
|
|
|
(async () => {
|
|
|
|
const {code, message, data: {directDatabaseAccess} = {}} = await $.ajax({
|
|
|
|
url: `${window.location.href.split('?')[0].split('#')[0]}/import`,
|
|
|
|
method: 'POST',
|
|
|
|
data: new FormData(this),
|
|
|
|
processData: false,
|
|
|
|
contentType: false,
|
|
|
|
dataType: 'json',
|
|
|
|
timeout: 25000,
|
|
|
|
}).catch((err) => {
|
|
|
|
if (err.responseJSON) return err.responseJSON;
|
|
|
|
return {code: 2, message: 'Unknown import error'};
|
|
|
|
});
|
|
|
|
if (code !== 0) {
|
|
|
|
importErrorMessage(message);
|
|
|
|
} else {
|
|
|
|
$('#import_export').removeClass('popup-show');
|
|
|
|
if (directDatabaseAccess) pad.switchToPad(clientVars.padId);
|
|
|
|
}
|
|
|
|
$('#importsubmitinput').removeAttr('disabled').val(html10n.get('pad.impexp.importbutton'));
|
|
|
|
window.setTimeout(() => $('#importfileinput').removeAttr('disabled'), 0);
|
|
|
|
$('#importstatusball').hide();
|
|
|
|
addImportFrames();
|
|
|
|
})();
|
2020-12-20 08:15:58 +01:00
|
|
|
};
|
2011-07-07 19:59:34 +02:00
|
|
|
|
2020-12-20 08:15:58 +01:00
|
|
|
const importErrorMessage = (status) => {
|
2021-02-08 02:51:26 +01:00
|
|
|
const known = [
|
|
|
|
'convertFailed',
|
|
|
|
'uploadFailed',
|
|
|
|
'padHasData',
|
|
|
|
'maxFileSize',
|
|
|
|
'permission',
|
|
|
|
];
|
|
|
|
const msg = html10n.get(`pad.impexp.${known.indexOf(status) !== -1 ? status : 'copypaste'}`);
|
2015-12-18 04:54:04 +01:00
|
|
|
|
2020-12-20 08:15:58 +01:00
|
|
|
const showError = (fade) => {
|
2021-02-08 02:52:28 +01:00
|
|
|
const popup = $('#importmessagefail').empty()
|
|
|
|
.append($('<strong>')
|
|
|
|
.css('color', 'red')
|
|
|
|
.text(`${html10n.get('pad.impexp.importfailed')}: `))
|
|
|
|
.append(document.createTextNode(msg));
|
|
|
|
popup[(fade ? 'fadeIn' : 'show')]();
|
2020-12-20 08:15:58 +01:00
|
|
|
};
|
2011-03-26 14:10:41 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
if ($('#importexport .importmessage').is(':visible')) {
|
|
|
|
$('#importmessagesuccess').fadeOut('fast');
|
2021-02-08 02:30:07 +01:00
|
|
|
$('#importmessagefail').fadeOut('fast', () => showError(true));
|
2020-11-23 19:24:19 +01:00
|
|
|
} else {
|
2011-03-26 14:10:41 +01:00
|
|
|
showError();
|
|
|
|
}
|
2020-12-20 08:15:58 +01:00
|
|
|
};
|
2011-07-07 19:59:34 +02:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// /// export
|
2011-03-26 14:10:41 +01:00
|
|
|
|
2020-11-21 19:37:57 +01:00
|
|
|
function cantExport() {
|
2020-11-23 19:24:19 +01:00
|
|
|
let type = $(this);
|
|
|
|
if (type.hasClass('exporthrefpdf')) {
|
|
|
|
type = 'PDF';
|
|
|
|
} else if (type.hasClass('exporthrefdoc')) {
|
|
|
|
type = 'Microsoft Word';
|
|
|
|
} else if (type.hasClass('exporthrefodt')) {
|
|
|
|
type = 'OpenDocument';
|
|
|
|
} else {
|
|
|
|
type = 'this file';
|
2011-03-26 14:10:41 +01:00
|
|
|
}
|
2020-11-23 19:24:19 +01:00
|
|
|
alert(html10n.get('pad.impexp.exportdisabled', {type}));
|
2011-03-26 14:10:41 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// ///
|
|
|
|
const self = {
|
2020-12-20 08:15:58 +01:00
|
|
|
init: (_pad) => {
|
2012-01-27 06:02:58 +01:00
|
|
|
pad = _pad;
|
2012-01-16 06:37:47 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// get /p/padname
|
2015-02-11 03:07:20 +01:00
|
|
|
// if /p/ isn't available due to a rewrite we use the clientVars padId
|
2020-12-20 08:15:58 +01:00
|
|
|
const padRootPath = /.*\/p\/[^/]+/.exec(document.location.pathname) || clientVars.padId;
|
2020-11-23 19:24:19 +01:00
|
|
|
|
|
|
|
// i10l buttom import
|
|
|
|
$('#importsubmitinput').val(html10n.get('pad.impexp.importbutton'));
|
|
|
|
html10n.bind('localized', () => {
|
|
|
|
$('#importsubmitinput').val(html10n.get('pad.impexp.importbutton'));
|
|
|
|
});
|
2012-12-07 05:24:40 +01:00
|
|
|
|
2011-07-22 15:07:13 +02:00
|
|
|
// build the export links
|
2020-12-20 08:15:58 +01:00
|
|
|
$('#exporthtmla').attr('href', `${padRootPath}/export/html`);
|
|
|
|
$('#exportetherpada').attr('href', `${padRootPath}/export/etherpad`);
|
|
|
|
$('#exportplaina').attr('href', `${padRootPath}/export/txt`);
|
2012-11-26 03:18:47 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// hide stuff thats not avaible if abiword/soffice is disabled
|
2020-12-20 08:15:58 +01:00
|
|
|
if (clientVars.exportAvailable === 'no') {
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#exportworda').remove();
|
|
|
|
$('#exportpdfa').remove();
|
|
|
|
$('#exportopena').remove();
|
|
|
|
|
|
|
|
$('#importmessageabiword').show();
|
2020-12-20 08:15:58 +01:00
|
|
|
} else if (clientVars.exportAvailable === 'withoutPDF') {
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#exportpdfa').remove();
|
|
|
|
|
2020-12-20 08:15:58 +01:00
|
|
|
$('#exportworda').attr('href', `${padRootPath}/export/doc`);
|
|
|
|
$('#exportopena').attr('href', `${padRootPath}/export/odt`);
|
2020-11-23 19:24:19 +01:00
|
|
|
|
|
|
|
$('#importexport').css({height: '142px'});
|
|
|
|
$('#importexportline').css({height: '142px'});
|
|
|
|
} else {
|
2020-12-20 08:15:58 +01:00
|
|
|
$('#exportworda').attr('href', `${padRootPath}/export/doc`);
|
|
|
|
$('#exportpdfa').attr('href', `${padRootPath}/export/pdf`);
|
|
|
|
$('#exportopena').attr('href', `${padRootPath}/export/odt`);
|
2011-07-26 19:54:42 +02:00
|
|
|
}
|
2015-12-18 04:54:04 +01:00
|
|
|
|
2011-03-26 14:10:41 +01:00
|
|
|
addImportFrames();
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#importfileinput').change(fileInputUpdated);
|
|
|
|
$('#importform').unbind('submit').submit(fileInputSubmit);
|
2011-03-26 14:10:41 +01:00
|
|
|
$('.disabledexport').click(cantExport);
|
|
|
|
},
|
2020-12-20 08:15:58 +01:00
|
|
|
disable: () => {
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#impexp-disabled-clickcatcher').show();
|
|
|
|
$('#import').css('opacity', 0.5);
|
|
|
|
$('#impexp-export').css('opacity', 0.5);
|
|
|
|
},
|
2020-12-20 08:15:58 +01:00
|
|
|
enable: () => {
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#impexp-disabled-clickcatcher').hide();
|
|
|
|
$('#import').css('opacity', 1);
|
|
|
|
$('#impexp-export').css('opacity', 1);
|
2011-03-26 14:10:41 +01:00
|
|
|
},
|
|
|
|
};
|
|
|
|
return self;
|
2020-12-20 08:15:58 +01:00
|
|
|
})();
|
2012-01-16 02:23:48 +01:00
|
|
|
|
|
|
|
exports.padimpexp = padimpexp;
|