mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-02-01 11:22:41 +01:00
30dbdf29f4
This fixes a bug introduced in commit
b711ff6acf
. Some time between when that
commit was originally written and when it was merged a round of
linting had converted the function from a regular function to an arrow
function because `this` was never in the body of the function. When I
rebased the commit, which introduced `this` to the body, I didn't
catch the error.
183 lines
6 KiB
JavaScript
183 lines
6 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* This code is mostly from the old Etherpad. Please help us to comment this code.
|
|
* This helps other people to understand this code better and helps them to improve it.
|
|
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
|
|
*/
|
|
|
|
/**
|
|
* 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.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
const padimpexp = (() => {
|
|
let pad;
|
|
|
|
// /// import
|
|
const addImportFrames = () => {
|
|
$('#import .importframe').remove();
|
|
const iframe = $('<iframe>')
|
|
.css('display', 'none')
|
|
.attr('name', 'importiframe')
|
|
.addClass('importframe');
|
|
$('#import').append(iframe);
|
|
};
|
|
|
|
const fileInputUpdated = () => {
|
|
$('#importsubmitinput').addClass('throbbold');
|
|
$('#importformfilediv').addClass('importformenabled');
|
|
$('#importsubmitinput').removeAttr('disabled');
|
|
$('#importmessagefail').fadeOut('fast');
|
|
};
|
|
|
|
const fileInputSubmit = function (e) {
|
|
e.preventDefault();
|
|
$('#importmessagefail').fadeOut('fast');
|
|
if (!window.confirm(html10n.get('pad.impexp.confirmimport'))) return;
|
|
$('#importsubmitinput').attr({disabled: true}).val(html10n.get('pad.impexp.importing'));
|
|
window.setTimeout(() => $('#importfileinput').attr({disabled: true}), 0);
|
|
$('#importarrow').stop(true, true).hide();
|
|
$('#importstatusball').show();
|
|
(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();
|
|
})();
|
|
};
|
|
|
|
const importErrorMessage = (status) => {
|
|
const known = [
|
|
'convertFailed',
|
|
'uploadFailed',
|
|
'padHasData',
|
|
'maxFileSize',
|
|
'permission',
|
|
];
|
|
const msg = html10n.get(`pad.impexp.${known.indexOf(status) !== -1 ? status : 'copypaste'}`);
|
|
|
|
const showError = (fade) => {
|
|
const popup = $('#importmessagefail').empty()
|
|
.append($('<strong>')
|
|
.css('color', 'red')
|
|
.text(`${html10n.get('pad.impexp.importfailed')}: `))
|
|
.append(document.createTextNode(msg));
|
|
popup[(fade ? 'fadeIn' : 'show')]();
|
|
};
|
|
|
|
if ($('#importexport .importmessage').is(':visible')) {
|
|
$('#importmessagesuccess').fadeOut('fast');
|
|
$('#importmessagefail').fadeOut('fast', () => showError(true));
|
|
} else {
|
|
showError();
|
|
}
|
|
};
|
|
|
|
// /// export
|
|
|
|
function cantExport() {
|
|
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';
|
|
}
|
|
alert(html10n.get('pad.impexp.exportdisabled', {type}));
|
|
return false;
|
|
}
|
|
|
|
// ///
|
|
const self = {
|
|
init: (_pad) => {
|
|
pad = _pad;
|
|
|
|
// get /p/padname
|
|
// if /p/ isn't available due to a rewrite we use the clientVars padId
|
|
const padRootPath = /.*\/p\/[^/]+/.exec(document.location.pathname) || clientVars.padId;
|
|
|
|
// i10l buttom import
|
|
$('#importsubmitinput').val(html10n.get('pad.impexp.importbutton'));
|
|
html10n.bind('localized', () => {
|
|
$('#importsubmitinput').val(html10n.get('pad.impexp.importbutton'));
|
|
});
|
|
|
|
// build the export links
|
|
$('#exporthtmla').attr('href', `${padRootPath}/export/html`);
|
|
$('#exportetherpada').attr('href', `${padRootPath}/export/etherpad`);
|
|
$('#exportplaina').attr('href', `${padRootPath}/export/txt`);
|
|
|
|
// hide stuff thats not avaible if abiword/soffice is disabled
|
|
if (clientVars.exportAvailable === 'no') {
|
|
$('#exportworda').remove();
|
|
$('#exportpdfa').remove();
|
|
$('#exportopena').remove();
|
|
|
|
$('#importmessageabiword').show();
|
|
} else if (clientVars.exportAvailable === 'withoutPDF') {
|
|
$('#exportpdfa').remove();
|
|
|
|
$('#exportworda').attr('href', `${padRootPath}/export/doc`);
|
|
$('#exportopena').attr('href', `${padRootPath}/export/odt`);
|
|
|
|
$('#importexport').css({height: '142px'});
|
|
$('#importexportline').css({height: '142px'});
|
|
} else {
|
|
$('#exportworda').attr('href', `${padRootPath}/export/doc`);
|
|
$('#exportpdfa').attr('href', `${padRootPath}/export/pdf`);
|
|
$('#exportopena').attr('href', `${padRootPath}/export/odt`);
|
|
}
|
|
|
|
addImportFrames();
|
|
$('#importfileinput').change(fileInputUpdated);
|
|
$('#importform').unbind('submit').submit(fileInputSubmit);
|
|
$('.disabledexport').click(cantExport);
|
|
},
|
|
disable: () => {
|
|
$('#impexp-disabled-clickcatcher').show();
|
|
$('#import').css('opacity', 0.5);
|
|
$('#impexp-export').css('opacity', 0.5);
|
|
},
|
|
enable: () => {
|
|
$('#impexp-disabled-clickcatcher').hide();
|
|
$('#import').css('opacity', 1);
|
|
$('#impexp-export').css('opacity', 1);
|
|
},
|
|
};
|
|
return self;
|
|
})();
|
|
|
|
exports.padimpexp = padimpexp;
|