2012-01-19 06:39:38 +01:00
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2012-01-29 00:26:39 +01:00
|
|
|
// These jQuery things should create local references, but for now `require()`
|
|
|
|
// assigns to the global `$` and augments it with plugins.
|
2012-03-07 02:27:03 +01:00
|
|
|
require('./jquery');
|
2012-01-29 00:26:39 +01:00
|
|
|
|
2020-10-03 00:43:12 +02:00
|
|
|
const Cookies = require('./pad_utils').Cookies;
|
2020-11-23 19:24:19 +01:00
|
|
|
const randomString = require('./pad_utils').randomString;
|
|
|
|
const hooks = require('./pluginfw/hooks');
|
2012-01-19 06:39:38 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
let token, padId, export_links;
|
2012-01-19 06:39:38 +01:00
|
|
|
|
|
|
|
function init() {
|
2020-11-23 19:24:19 +01:00
|
|
|
$(document).ready(() => {
|
2012-02-05 00:22:25 +01:00
|
|
|
// start the custom js
|
2020-11-23 19:24:19 +01:00
|
|
|
if (typeof customStart === 'function') customStart();
|
2012-01-19 06:39:38 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// get the padId out of the url
|
|
|
|
const urlParts = document.location.pathname.split('/');
|
|
|
|
padId = decodeURIComponent(urlParts[urlParts.length - 2]);
|
2012-01-19 06:39:38 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// set the title
|
|
|
|
document.title = `${padId.replace(/_+/g, ' ')} | ${document.title}`;
|
2012-01-19 06:39:38 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// ensure we have a token
|
2020-10-03 00:43:12 +02:00
|
|
|
token = Cookies.get('token');
|
2020-11-23 19:24:19 +01:00
|
|
|
if (token == null) {
|
|
|
|
token = `t.${randomString()}`;
|
2020-10-03 00:43:12 +02:00
|
|
|
Cookies.set('token', token, {expires: 60});
|
2012-01-19 06:39:38 +01:00
|
|
|
}
|
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
const loc = document.location;
|
|
|
|
// get the correct port
|
|
|
|
const port = loc.port == '' ? (loc.protocol == 'https:' ? 443 : 80) : loc.port;
|
|
|
|
// create the url
|
|
|
|
const url = `${loc.protocol}//${loc.hostname}:${port}/`;
|
|
|
|
// find out in which subfolder we are
|
|
|
|
const resource = `${exports.baseURL.substring(1)}socket.io`;
|
2019-04-16 00:34:29 +02:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// build up the socket io connection
|
|
|
|
socket = io.connect(url, {path: `${exports.baseURL}socket.io`, resource});
|
2019-04-16 00:34:29 +02:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// send the ready message once we're connected
|
|
|
|
socket.on('connect', () => {
|
|
|
|
sendSocketMsg('CLIENT_READY', {});
|
2012-01-19 06:39:38 +01:00
|
|
|
});
|
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
socket.on('disconnect', () => {
|
2012-04-23 14:47:07 +02:00
|
|
|
BroadcastSlider.showReconnectUI();
|
|
|
|
});
|
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// route the incoming messages
|
|
|
|
socket.on('message', (message) => {
|
|
|
|
if (message.type == 'CLIENT_VARS') {
|
2012-01-19 06:39:38 +01:00
|
|
|
handleClientVars(message);
|
2020-11-23 19:24:19 +01:00
|
|
|
} else if (message.accessStatus) {
|
|
|
|
$('body').html('<h2>You have no permission to access this pad</h2>');
|
|
|
|
} else if (message.type === 'CHANGESET_REQ') { changesetLoader.handleMessageFromServer(message); }
|
2012-01-19 06:39:38 +01:00
|
|
|
});
|
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// get all the export links
|
|
|
|
export_links = $('#export > .exportlink');
|
2012-01-19 06:39:38 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
$('button#forcereconnect').click(() => {
|
2012-04-23 14:47:07 +02:00
|
|
|
window.location.reload();
|
|
|
|
});
|
|
|
|
|
2013-02-18 22:03:52 +01:00
|
|
|
exports.socket = socket; // make the socket available
|
2013-04-09 16:55:14 +02:00
|
|
|
exports.BroadcastSlider = BroadcastSlider; // Make the slider available
|
2013-02-18 22:03:52 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
hooks.aCallAll('postTimesliderInit');
|
2012-01-19 06:39:38 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// sends a message over the socket
|
2020-11-21 19:37:57 +01:00
|
|
|
function sendSocketMsg(type, data) {
|
2020-10-03 00:43:12 +02:00
|
|
|
socket.json.send({
|
|
|
|
component: 'pad', // FIXME: Remove this stupidity!
|
|
|
|
type,
|
|
|
|
data,
|
|
|
|
padId,
|
|
|
|
token,
|
|
|
|
sessionID: Cookies.get('sessionID'),
|
|
|
|
protocolVersion: 2,
|
|
|
|
});
|
2012-01-19 06:39:38 +01:00
|
|
|
}
|
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
const fireWhenAllScriptsAreLoaded = [];
|
2019-04-16 00:34:29 +02:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
let changesetLoader;
|
2020-11-21 19:37:57 +01:00
|
|
|
function handleClientVars(message) {
|
2020-11-23 19:24:19 +01:00
|
|
|
// save the client Vars
|
2012-01-19 06:39:38 +01:00
|
|
|
clientVars = message.data;
|
2019-04-16 00:34:29 +02:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// load all script that doesn't work without the clientVars
|
2012-03-07 02:27:03 +01:00
|
|
|
BroadcastSlider = require('./broadcast_slider').loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded);
|
|
|
|
require('./broadcast_revisions').loadBroadcastRevisionsJS();
|
|
|
|
changesetLoader = require('./broadcast').loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, BroadcastSlider);
|
2012-01-19 06:39:38 +01:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// initialize export ui
|
2012-03-07 02:27:03 +01:00
|
|
|
require('./pad_impexp').padimpexp.init();
|
2012-01-19 06:39:38 +01:00
|
|
|
|
2020-06-05 23:50:55 +02:00
|
|
|
// Create a base URI used for timeslider exports
|
2020-11-23 19:24:19 +01:00
|
|
|
const baseURI = document.location.pathname;
|
2020-06-05 23:50:55 +02:00
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// change export urls when the slider moves
|
|
|
|
BroadcastSlider.onSlider((revno) => {
|
2012-03-24 19:01:04 +01:00
|
|
|
// export_links is a jQuery Array, so .each is allowed.
|
2020-11-23 19:24:19 +01:00
|
|
|
export_links.each(function () {
|
2020-06-05 23:50:55 +02:00
|
|
|
// Modified from regular expression to fix:
|
|
|
|
// https://github.com/ether/etherpad-lite/issues/4071
|
|
|
|
// Where a padId that was numeric would create the wrong export link
|
2020-11-23 19:24:19 +01:00
|
|
|
if (this.href) {
|
|
|
|
const type = this.href.split('export/')[1];
|
|
|
|
let href = baseURI.split('timeslider')[0];
|
|
|
|
href += `${revno}/export/${type}`;
|
2020-06-05 23:50:55 +02:00
|
|
|
this.setAttribute('href', href);
|
|
|
|
}
|
2012-01-19 06:39:38 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2020-11-23 19:24:19 +01:00
|
|
|
// fire all start functions of these scripts, formerly fired with window.load
|
|
|
|
for (let i = 0; i < fireWhenAllScriptsAreLoaded.length; i++) {
|
2012-01-19 06:39:38 +01:00
|
|
|
fireWhenAllScriptsAreLoaded[i]();
|
|
|
|
}
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#ui-slider-handle').css('left', $('#ui-slider-bar').width() - 2);
|
2015-04-02 01:03:34 +02:00
|
|
|
|
|
|
|
// Translate some strings where we only want to set the title not the actual values
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#playpause_button_icon').attr('title', html10n.get('timeslider.playPause'));
|
|
|
|
$('#leftstep').attr('title', html10n.get('timeslider.backRevision'));
|
|
|
|
$('#rightstep').attr('title', html10n.get('timeslider.forwardRevision'));
|
2015-04-02 01:03:34 +02:00
|
|
|
|
2015-04-05 16:18:36 +02:00
|
|
|
// font family change
|
2020-11-23 19:24:19 +01:00
|
|
|
$('#viewfontmenu').change(function () {
|
|
|
|
$('#innerdocbody').css('font-family', $(this).val() || '');
|
2015-04-05 16:18:36 +02:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2012-04-25 10:23:58 +02:00
|
|
|
exports.baseURL = '';
|
2012-01-19 06:39:38 +01:00
|
|
|
exports.init = init;
|