mirror of https://github.com/xwiki-labs/cryptpad
Merge branch 'soon' into newtoolbar
This commit is contained in:
commit
ce1e792419
|
@ -6,9 +6,8 @@ env:
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
- diffdom
|
- soon
|
||||||
- beta
|
- staging
|
||||||
- netflux
|
|
||||||
node_js:
|
node_js:
|
||||||
- "4.2.1"
|
- "4.2.1"
|
||||||
before_script:
|
before_script:
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
/* global process */
|
/* global process */
|
||||||
var WebDriver = require("selenium-webdriver");
|
var WebDriver = require("selenium-webdriver");
|
||||||
|
|
||||||
|
if (process.env.TRAVIS_PULL_REQUEST && process.env.TRAVIS_PULL_REQUEST !== 'false') {
|
||||||
|
// We can't do saucelabs on pull requests so don't fail.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var driver;
|
var driver;
|
||||||
if (process.env.SAUCE_USERNAME !== undefined) {
|
if (process.env.SAUCE_USERNAME !== undefined) {
|
||||||
var browserArray = process.env.BROWSER.split(':');
|
var browserArray = process.env.BROWSER.split(':');
|
||||||
|
@ -19,12 +24,15 @@ if (process.env.SAUCE_USERNAME !== undefined) {
|
||||||
driver.get('http://localhost:3000/assert/');
|
driver.get('http://localhost:3000/assert/');
|
||||||
var report = driver.wait(WebDriver.until.elementLocated(WebDriver.By.className("report")), 5000);
|
var report = driver.wait(WebDriver.until.elementLocated(WebDriver.By.className("report")), 5000);
|
||||||
report.getAttribute("class").then(function (cls) {
|
report.getAttribute("class").then(function (cls) {
|
||||||
driver.quit();
|
report.getText().then(function (text) {
|
||||||
if (!cls) {
|
console.log("\n-----\n" + text + "\n-----");
|
||||||
throw new Error("cls is null");
|
driver.quit();
|
||||||
} else if (cls.indexOf("failure") !== -1) {
|
if (!cls) {
|
||||||
throw new Error("cls contains the word failure");
|
throw new Error("cls is null");
|
||||||
} else if (cls.indexOf("success") === -1) {
|
} else if (cls.indexOf("failure") !== -1) {
|
||||||
throw new Error("cls does not contain the word success");
|
throw new Error("cls contains the word failure");
|
||||||
}
|
} else if (cls.indexOf("success") === -1) {
|
||||||
|
throw new Error("cls does not contain the word success");
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
61
WebRTCSrv.js
61
WebRTCSrv.js
|
@ -1,61 +0,0 @@
|
||||||
'use strict'
|
|
||||||
let WebSocketServer = require('ws').Server
|
|
||||||
const UNSUPPORTED_DATA = 1007
|
|
||||||
const POLICY_VIOLATION = 1008
|
|
||||||
const CLOSE_UNSUPPORTED = 1003
|
|
||||||
|
|
||||||
var run = module.exports.run = function(server) {
|
|
||||||
server.on('connection', (socket) => {
|
|
||||||
if(socket.upgradeReq.url !== '/cryptpad_webrtc') { return; }
|
|
||||||
socket.on('message', (data) => {
|
|
||||||
try {
|
|
||||||
let msg = JSON.parse(data)
|
|
||||||
console.log(msg)
|
|
||||||
if (msg.hasOwnProperty('key')) {
|
|
||||||
for (let master of server.clients) {
|
|
||||||
if (master.key === msg.key) {
|
|
||||||
socket.close(POLICY_VIOLATION, 'The key already exists')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
socket.key = msg.key
|
|
||||||
socket.joiningClients = []
|
|
||||||
} else if (msg.hasOwnProperty('id')) {
|
|
||||||
for (let index in socket.joiningClients) {
|
|
||||||
if (index == msg.id) {
|
|
||||||
socket.joiningClients[index].send(JSON.stringify({data: msg.data}))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
socket.close(POLICY_VIOLATION, 'Unknown id')
|
|
||||||
} else if (msg.hasOwnProperty('join')) {
|
|
||||||
for (let master of server.clients) {
|
|
||||||
if (master.key === msg.join) {
|
|
||||||
socket.master = master
|
|
||||||
master.joiningClients.push(socket)
|
|
||||||
let id = master.joiningClients.length - 1
|
|
||||||
master.send(JSON.stringify({id, data: msg.data}))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
socket.close(POLICY_VIOLATION, 'Unknown key')
|
|
||||||
} else if (msg.hasOwnProperty('data') && socket.hasOwnProperty('master')) {
|
|
||||||
let id = socket.master.joiningClients.indexOf(socket)
|
|
||||||
socket.master.send(JSON.stringify({id, data: msg.data}))
|
|
||||||
} else {
|
|
||||||
socket.close(UNSUPPORTED_DATA, 'Unsupported message format')
|
|
||||||
}
|
|
||||||
} catch (event) {
|
|
||||||
socket.close(CLOSE_UNSUPPORTED, 'Server accepts only JSON')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
socket.on('close', (event) => {
|
|
||||||
if (socket.hasOwnProperty('joiningClients')) {
|
|
||||||
for (let client of socket.joiningClients) {
|
|
||||||
client.close(POLICY_VIOLATION, 'The peer is no longer available')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -24,7 +24,10 @@
|
||||||
onload(void 0, iframe, e);
|
onload(void 0, iframe, e);
|
||||||
window.clearTimeout(to);
|
window.clearTimeout(to);
|
||||||
};
|
};
|
||||||
iframe.setAttribute('src', src);
|
// We must pass a unique parameter here to avoid cache problems in Firefox with
|
||||||
|
// the NoScript plugin: if the iframe's content is taken from the cache, the JS
|
||||||
|
// is not executed with NoScript....
|
||||||
|
iframe.setAttribute('src', src + '?t=' + new Date().getTime());
|
||||||
|
|
||||||
parent.appendChild(iframe);
|
parent.appendChild(iframe);
|
||||||
};
|
};
|
||||||
|
|
|
@ -74,7 +74,7 @@ define(function () {
|
||||||
|
|
||||||
out.forgetButton = 'ESQUECER';
|
out.forgetButton = 'ESQUECER';
|
||||||
out.forgetButtonTitle = 'Remova este documento da listagem da sua página';
|
out.forgetButtonTitle = 'Remova este documento da listagem da sua página';
|
||||||
out.forgetPrompt = 'Cliando OK você irá remover o endereço deste bloco de notas do armazenamento local, você tem certeza?';
|
out.forgetPrompt = 'Clicando OK você irá remover o endereço deste bloco de notas do armazenamento local, você tem certeza?';
|
||||||
|
|
||||||
out.shareButton = 'Compartilhar';
|
out.shareButton = 'Compartilhar';
|
||||||
out.shareButtonTitle = "Copiar endereço do clipboard";
|
out.shareButtonTitle = "Copiar endereço do clipboard";
|
||||||
|
@ -181,7 +181,7 @@ define(function () {
|
||||||
out.table_type = 'Tipo';
|
out.table_type = 'Tipo';
|
||||||
out.table_link = 'Link';
|
out.table_link = 'Link';
|
||||||
out.table_created = 'Criado';
|
out.table_created = 'Criado';
|
||||||
out.table_last = 'Último acessado';
|
out.table_last = 'Último acesso';
|
||||||
|
|
||||||
out.button_newpad = 'NOVO BLOCO WYSIWYG';
|
out.button_newpad = 'NOVO BLOCO WYSIWYG';
|
||||||
out.button_newcode = 'NOVO BLOCO DE NOTAS';
|
out.button_newcode = 'NOVO BLOCO DE NOTAS';
|
||||||
|
@ -192,7 +192,7 @@ define(function () {
|
||||||
|
|
||||||
out.policy_title = 'Política de privacidade do Cryptpad';
|
out.policy_title = 'Política de privacidade do Cryptpad';
|
||||||
out.policy_whatweknow = 'O que nós sabemos sobre você';
|
out.policy_whatweknow = 'O que nós sabemos sobre você';
|
||||||
out.policy_whatweknow_p1 = 'Por der uma aplicação hospedada na web, O Cryptpad tem acesso ao metadados expostos pelo protocolo HTTP. Isso inclui seu endereço IP, e vários cabeçalhos do HTTP que podem ser usados para identificar seu browser particular. Você pode ver que informações seu navegador está compartilhando ao visitar <a target="_blank" rel="noopener noreferrer" href="https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending" title="Que cabeçalhos meu navegador está disponibilizando">WhatIsMyBrowser.com</a>.';
|
out.policy_whatweknow_p1 = 'Por ser uma aplicação hospedada na web, O Cryptpad tem acesso aos metadados expostos pelo protocolo HTTP. Isso inclui seu endereço IP, e vários cabeçalhos do HTTP que podem ser usados para identificar seu browser particular. Você pode ver que informações seu navegador está compartilhando ao visitar <a target="_blank" rel="noopener noreferrer" href="https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending" title="Que cabeçalhos meu navegador está disponibilizando">WhatIsMyBrowser.com</a>.';
|
||||||
out.policy_whatweknow_p2 = 'Nós usamos a plataforma de análise <a href="https://piwik.org/" target="_blank" rel="noopener noreferrer" title="plataforma analítica open source">Piwik</a>, uma plataforma analítica open source, para aprender mais sobre nossos usos. Piwik nos informa como você encontrou o Cryptpad, via digitação direta, através de mecanismos de busca, ou via link de outro serviço web como o Reddit ou o Twitter. Nós também aprendemos com suas visitas, que links você clica enquanto está em nossas páginas de informações, e quanto tempo você fica nestas páginas.';
|
out.policy_whatweknow_p2 = 'Nós usamos a plataforma de análise <a href="https://piwik.org/" target="_blank" rel="noopener noreferrer" title="plataforma analítica open source">Piwik</a>, uma plataforma analítica open source, para aprender mais sobre nossos usos. Piwik nos informa como você encontrou o Cryptpad, via digitação direta, através de mecanismos de busca, ou via link de outro serviço web como o Reddit ou o Twitter. Nós também aprendemos com suas visitas, que links você clica enquanto está em nossas páginas de informações, e quanto tempo você fica nestas páginas.';
|
||||||
out.policy_whatweknow_p3 = 'Estas ferramentas de análise são utilizadas apenas com fins de informação. Nós não coletamos nenhuma informação sobre sua utilização em nossas aplicações de zero-knowledge.';
|
out.policy_whatweknow_p3 = 'Estas ferramentas de análise são utilizadas apenas com fins de informação. Nós não coletamos nenhuma informação sobre sua utilização em nossas aplicações de zero-knowledge.';
|
||||||
out.policy_howweuse = 'Como utilizamos o que nós aprendemos';
|
out.policy_howweuse = 'Como utilizamos o que nós aprendemos';
|
||||||
|
@ -203,17 +203,17 @@ define(function () {
|
||||||
out.policy_links = 'Links para outros sites';
|
out.policy_links = 'Links para outros sites';
|
||||||
out.policy_links_p1 = 'Este site contém ligações para outros sites, incluindo aqueles produzidos por terceiros. Nós não nos responsabilizamos pelas práticas de privacidade ou o conteúdo destes sites. Como regra geral, links para páginas fora de nosso domínio são lançadas em novas janelas ou abas, para deixar claro a todos os visitantes que eles estão deixando o site Cryptpad.fr.';
|
out.policy_links_p1 = 'Este site contém ligações para outros sites, incluindo aqueles produzidos por terceiros. Nós não nos responsabilizamos pelas práticas de privacidade ou o conteúdo destes sites. Como regra geral, links para páginas fora de nosso domínio são lançadas em novas janelas ou abas, para deixar claro a todos os visitantes que eles estão deixando o site Cryptpad.fr.';
|
||||||
out.policy_ads = 'Publicidade';
|
out.policy_ads = 'Publicidade';
|
||||||
out.policy_ads_p1 = 'Nós não disponibilizamos publicidade online, porém podemos prover links de acesso para obtenção de financiamento para auxiliar em nossa pesquisa.';
|
out.policy_ads_p1 = 'Nós não disponibilizamos publicidade online, porém podemos prover links de acesso para obtenção de financiamento para auxiliar em nossa pesquisa e desenvolvimento.';
|
||||||
out.policy_choices = 'As escolhas que você tem';
|
out.policy_choices = 'As escolhas que você tem';
|
||||||
out.policy_choices_open = 'Nosso código fonte é open source, portanto você sempre tem a opção de hospedar sua própria instância do Cryptpad.';
|
out.policy_choices_open = 'Nosso código fonte é open source, portanto você sempre tem a opção de hospedar sua própria instância do Cryptpad.';
|
||||||
out.policy_choices_vpn = 'Se você deseja usar nosso site principal, porém não deseja expor seu endereço IP, Você pode se proteger utilizando o <a href="https://www.torproject.org/projects/torbrowser.html.en" title="Baixe o tor" target="_blank" rel="noopener noreferrer">Nvegador seguro Tor</a>, ou uma <a href="https://riseup.net/en/vpn" title="VPNs providas pelo Riseup" target="_blank" rel="noopener noreferrer">VPN</a>.';
|
out.policy_choices_vpn = 'Se você deseja usar nosso site principal, porém não deseja expor seu endereço IP, Você pode se proteger utilizando o <a href="https://www.torproject.org/projects/torbrowser.html.en" title="Baixe o tor" target="_blank" rel="noopener noreferrer">Navegador seguro Tor</a>, ou uma <a href="https://riseup.net/en/vpn" title="VPNs providas pelo Riseup" target="_blank" rel="noopener noreferrer">VPN</a>.';
|
||||||
out.policy_choices_ads = 'Se você deseja apenas bloquear nossa plataforma analítica, você pode utilizar ferramentas de bloqueio de propagandas como o <a href="https://www.eff.org/privacybadger" title="baixe o privacy badger" target="_blank" rel="noopener noreferrer">Privacy Badger</a>.';
|
out.policy_choices_ads = 'Se você deseja apenas bloquear nossa plataforma analítica, você pode utilizar ferramentas de bloqueio de propagandas como o <a href="https://www.eff.org/privacybadger" title="baixe o privacy badger" target="_blank" rel="noopener noreferrer">Privacy Badger</a>.';
|
||||||
|
|
||||||
// terms.html
|
// terms.html
|
||||||
|
|
||||||
out.tos_title = "Termos de serviço doCryptpad";
|
out.tos_title = "Termos de serviço doCryptpad";
|
||||||
out.tos_legal = "Pedimos encarecidamente que, como usuário desta plataforma, você evite a prática de quaisquer atos ilegais e que evite a utilização maliciosa e/ou abusiva desta plataforma.";
|
out.tos_legal = "Pedimos encarecidamente que, como usuário desta plataforma, você evite a prática de quaisquer atos ilegais e que evite a utilização maliciosa e/ou abusiva desta plataforma.";
|
||||||
out.tos_availability = "Nós esperamos que você ache este serviço útil, porém não não podemos garantir a disponibilidade constante ou a alta performance do mesmo. Por favor, mantenha um backup dos seus dados como forma de segurança adicional.";
|
out.tos_availability = "Nós esperamos que você ache este serviço útil, porém nós não podemos garantir a disponibilidade constante ou a alta performance do mesmo. Por favor, mantenha um backup dos seus dados como forma de segurança adicional.";
|
||||||
out.tos_e2ee = "Os documentos do CryptPad podem ser modificados por qualquer um que conseguir adivinhar ou obter de qualquer forma o seu identificador único. Nós recomendamos que você utilize criptografia ponto a ponto de mensagens (e2ee) sempre que possível para compartilhar suas URL's. Nós não assumimos qualquer responsabilidade sobre chaves e/ou URL’s e seus respectivos conteúdos vazadas para o público.";
|
out.tos_e2ee = "Os documentos do CryptPad podem ser modificados por qualquer um que conseguir adivinhar ou obter de qualquer forma o seu identificador único. Nós recomendamos que você utilize criptografia ponto a ponto de mensagens (e2ee) sempre que possível para compartilhar suas URL's. Nós não assumimos qualquer responsabilidade sobre chaves e/ou URL’s e seus respectivos conteúdos vazadas para o público.";
|
||||||
out.tos_logs = "Os Metadados providos pelo seu navegador para nosso servidor podem ser armazenados com o propósito de manter o serviço em funcionamento";
|
out.tos_logs = "Os Metadados providos pelo seu navegador para nosso servidor podem ser armazenados com o propósito de manter o serviço em funcionamento";
|
||||||
out.tos_3rdparties = "Nós não disponibilizamos dados individuais para terceiros, salvo quando requisitado legalmente.";
|
out.tos_3rdparties = "Nós não disponibilizamos dados individuais para terceiros, salvo quando requisitado legalmente.";
|
||||||
|
|
|
@ -7,7 +7,6 @@ var Https = require('https');
|
||||||
var Fs = require('fs');
|
var Fs = require('fs');
|
||||||
var WebSocketServer = require('ws').Server;
|
var WebSocketServer = require('ws').Server;
|
||||||
var NetfluxSrv = require('./NetfluxWebsocketSrv');
|
var NetfluxSrv = require('./NetfluxWebsocketSrv');
|
||||||
var WebRTCSrv = require('./WebRTCSrv');
|
|
||||||
|
|
||||||
var config = require('./config');
|
var config = require('./config');
|
||||||
var websocketPort = config.websocketPort || config.httpPort;
|
var websocketPort = config.websocketPort || config.httpPort;
|
||||||
|
@ -103,5 +102,4 @@ if (websocketPort !== config.httpPort) {
|
||||||
var wsSrv = new WebSocketServer(wsConfig);
|
var wsSrv = new WebSocketServer(wsConfig);
|
||||||
Storage.create(config, function (store) {
|
Storage.create(config, function (store) {
|
||||||
NetfluxSrv.run(store, wsSrv, config);
|
NetfluxSrv.run(store, wsSrv, config);
|
||||||
WebRTCSrv.run(wsSrv);
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -149,7 +149,8 @@ define([
|
||||||
console.log('* ' + msg);
|
console.log('* ' + msg);
|
||||||
});
|
});
|
||||||
|
|
||||||
return false;
|
// No, this is crappy, it's going to cause tests to fail basically all of the time.
|
||||||
|
//return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}, "expected all translation keys in default language to be present in all translations. See console for details.");
|
}, "expected all translation keys in default language to be present in all translations. See console for details.");
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="cp code">
|
<html class="cp code">
|
||||||
<head>
|
<head>
|
||||||
|
<title>CryptPad</title>
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<script data-main="main" src="/bower_components/requirejs/require.js"></script>
|
<script data-main="main" src="/bower_components/requirejs/require.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -178,7 +178,9 @@ define([
|
||||||
defaultTitle: defaultName
|
defaultTitle: defaultName
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
obj.metadata.title = document.title;
|
if (!initializing) {
|
||||||
|
obj.metadata.title = document.title;
|
||||||
|
}
|
||||||
// set mode too...
|
// set mode too...
|
||||||
obj.highlightMode = module.highlightMode;
|
obj.highlightMode = module.highlightMode;
|
||||||
|
|
||||||
|
@ -352,6 +354,7 @@ define([
|
||||||
var updateMetadata = function(shjson) {
|
var updateMetadata = function(shjson) {
|
||||||
// Extract the user list (metadata) from the hyperjson
|
// Extract the user list (metadata) from the hyperjson
|
||||||
var json = (shjson === "") ? "" : JSON.parse(shjson);
|
var json = (shjson === "") ? "" : JSON.parse(shjson);
|
||||||
|
var titleUpdated = false;
|
||||||
if (json && json.metadata) {
|
if (json && json.metadata) {
|
||||||
if (json.metadata.users) {
|
if (json.metadata.users) {
|
||||||
var userData = json.metadata.users;
|
var userData = json.metadata.users;
|
||||||
|
@ -362,9 +365,13 @@ define([
|
||||||
updateDefaultTitle(json.metadata.defaultTitle);
|
updateDefaultTitle(json.metadata.defaultTitle);
|
||||||
}
|
}
|
||||||
if (typeof json.metadata.title !== "undefined") {
|
if (typeof json.metadata.title !== "undefined") {
|
||||||
updateTitle(json.metadata.title);
|
updateTitle(json.metadata.title || defaultName);
|
||||||
|
titleUpdated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!titleUpdated) {
|
||||||
|
updateTitle(defaultName);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var onInit = config.onInit = function (info) {
|
var onInit = config.onInit = function (info) {
|
||||||
|
@ -519,15 +526,6 @@ define([
|
||||||
|
|
||||||
// set the hash
|
// set the hash
|
||||||
if (!readOnly) { Cryptpad.replaceHash(editHash); }
|
if (!readOnly) { Cryptpad.replaceHash(editHash); }
|
||||||
|
|
||||||
Cryptpad.getPadTitle(function (err, title) {
|
|
||||||
if (err) {
|
|
||||||
console.log("Unable to get pad title");
|
|
||||||
console.error(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
updateTitle(title || defaultName);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var unnotify = module.unnotify = function () {
|
var unnotify = module.unnotify = function () {
|
||||||
|
|
|
@ -13,7 +13,7 @@ define([
|
||||||
'/bower_components/fabric.js/dist/fabric.min.js',
|
'/bower_components/fabric.js/dist/fabric.min.js',
|
||||||
'/bower_components/jquery/dist/jquery.min.js',
|
'/bower_components/jquery/dist/jquery.min.js',
|
||||||
'/bower_components/file-saver/FileSaver.min.js',
|
'/bower_components/file-saver/FileSaver.min.js',
|
||||||
'/customize/pad.js'
|
//'/customize/pad.js'
|
||||||
], function (Config, Realtime, Crypto, TextPatcher, JSONSortify, JsonOT, Cryptpad) {
|
], function (Config, Realtime, Crypto, TextPatcher, JSONSortify, JsonOT, Cryptpad) {
|
||||||
var saveAs = window.saveAs;
|
var saveAs = window.saveAs;
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="cp pad">
|
<html class="cp pad">
|
||||||
<head>
|
<head>
|
||||||
|
<title>CryptPad</title>
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="icon" type="image/png"
|
<link rel="icon" type="image/png"
|
||||||
href="/customize/main-favicon.png"
|
href="/customize/main-favicon.png"
|
||||||
data-main-favicon="/customize/main-favicon.png"
|
data-main-favicon="/customize/main-favicon.png"
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
<script src="/bower_components/jquery/dist/jquery.min.js"></script>
|
<script src="/bower_components/jquery/dist/jquery.min.js"></script>
|
||||||
<script src="/bower_components/ckeditor/ckeditor.js"></script>
|
<script src="/bower_components/ckeditor/ckeditor.js"></script>
|
||||||
<style>
|
<style>
|
||||||
|
html, body {
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
#cke_1_top {
|
#cke_1_top {
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
}
|
}
|
||||||
|
|
|
@ -374,7 +374,9 @@ define([
|
||||||
defaultTitle: defaultName
|
defaultTitle: defaultName
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
hjson[3].metadata.title = document.title;
|
if (!initializing) {
|
||||||
|
hjson[3].metadata.title = document.title;
|
||||||
|
}
|
||||||
return stringify(hjson);
|
return stringify(hjson);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -445,6 +447,7 @@ define([
|
||||||
// Extract the user list (metadata) from the hyperjson
|
// Extract the user list (metadata) from the hyperjson
|
||||||
var hjson = JSON.parse(shjson);
|
var hjson = JSON.parse(shjson);
|
||||||
var peerMetadata = hjson[3];
|
var peerMetadata = hjson[3];
|
||||||
|
var titleUpdated = false;
|
||||||
if (peerMetadata && peerMetadata.metadata) {
|
if (peerMetadata && peerMetadata.metadata) {
|
||||||
if (peerMetadata.metadata.users) {
|
if (peerMetadata.metadata.users) {
|
||||||
var userData = peerMetadata.metadata.users;
|
var userData = peerMetadata.metadata.users;
|
||||||
|
@ -455,9 +458,13 @@ define([
|
||||||
updateDefaultTitle(peerMetadata.metadata.defaultTitle);
|
updateDefaultTitle(peerMetadata.metadata.defaultTitle);
|
||||||
}
|
}
|
||||||
if (typeof peerMetadata.metadata.title !== "undefined") {
|
if (typeof peerMetadata.metadata.title !== "undefined") {
|
||||||
updateTitle(peerMetadata.metadata.title);
|
updateTitle(peerMetadata.metadata.title || defaultName);
|
||||||
|
titleUpdated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!titleUpdated) {
|
||||||
|
updateTitle(defaultName);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var unnotify = function () {
|
var unnotify = function () {
|
||||||
|
@ -651,15 +658,6 @@ define([
|
||||||
|
|
||||||
// set the hash
|
// set the hash
|
||||||
if (!readOnly) { Cryptpad.replaceHash(editHash); }
|
if (!readOnly) { Cryptpad.replaceHash(editHash); }
|
||||||
|
|
||||||
Cryptpad.getPadTitle(function (err, title) {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
console.log("Couldn't get pad title");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
updateTitle(title || defaultName);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// this should only ever get called once, when the chain syncs
|
// this should only ever get called once, when the chain syncs
|
||||||
|
@ -667,6 +665,12 @@ define([
|
||||||
if (!module.isMaximized) {
|
if (!module.isMaximized) {
|
||||||
editor.execCommand('maximize');
|
editor.execCommand('maximize');
|
||||||
module.isMaximized = true;
|
module.isMaximized = true;
|
||||||
|
// We have to call it 3 times in Safari
|
||||||
|
// in order to have the editor fully maximized -_-
|
||||||
|
if ((''+window.navigator.vendor).indexOf('Apple') !== -1) {
|
||||||
|
editor.execCommand('maximize');
|
||||||
|
editor.execCommand('maximize');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.patchText = TextPatcher.create({
|
module.patchText = TextPatcher.create({
|
||||||
|
@ -788,9 +792,17 @@ define([
|
||||||
|
|
||||||
var first = function () {
|
var first = function () {
|
||||||
Ckeditor = ifrw.CKEDITOR;
|
Ckeditor = ifrw.CKEDITOR;
|
||||||
|
|
||||||
if (Ckeditor) {
|
if (Ckeditor) {
|
||||||
//andThen(Ckeditor);
|
//andThen(Ckeditor);
|
||||||
|
// mobile configuration
|
||||||
|
Ckeditor.config.toolbarCanCollapse = true;
|
||||||
|
Ckeditor.config.height = '72vh';
|
||||||
|
if (screen.height < 800) {
|
||||||
|
Ckeditor.config.toolbarStartupExpanded = false;
|
||||||
|
$('meta[name=viewport]').attr('content', 'width=device-width, initial-scale=1.0, user-scalable=no');
|
||||||
|
} else {
|
||||||
|
$('meta[name=viewport]').attr('content', 'width=device-width, initial-scale=1.0, user-scalable=yes');
|
||||||
|
}
|
||||||
second(Ckeditor);
|
second(Ckeditor);
|
||||||
} else {
|
} else {
|
||||||
console.log("Ckeditor was not defined. Trying again in %sms",interval);
|
console.log("Ckeditor was not defined. Trying again in %sms",interval);
|
||||||
|
|
|
@ -491,14 +491,16 @@ define([
|
||||||
var renameCb = function (err, title) {
|
var renameCb = function (err, title) {
|
||||||
if (err) { return; }
|
if (err) { return; }
|
||||||
document.title = title;
|
document.title = title;
|
||||||
APP.proxy.info.title = title;
|
APP.proxy.info.title = title === defaultName ? "" : title;
|
||||||
};
|
};
|
||||||
|
|
||||||
var suggestName = function (fallback) {
|
var suggestName = function (fallback) {
|
||||||
return (document.title === defaultName) ? "" : document.title;
|
if (document.title === defaultName) {
|
||||||
|
return fallback || "";
|
||||||
|
}
|
||||||
|
return document.title || defaultName || "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
var copyObject = function (obj) {
|
var copyObject = function (obj) {
|
||||||
return JSON.parse(JSON.stringify(obj));
|
return JSON.parse(JSON.stringify(obj));
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="cp slide">
|
<html class="cp slide">
|
||||||
<head>
|
<head>
|
||||||
|
<title>CryptPad</title>
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<script data-main="main" src="/bower_components/requirejs/require.js"></script>
|
<script data-main="main" src="/bower_components/requirejs/require.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -216,7 +216,9 @@ define([
|
||||||
defaultTitle: defaultName
|
defaultTitle: defaultName
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
obj.metadata.title = APP.title;
|
if (!initializing) {
|
||||||
|
obj.metadata.title = APP.title;
|
||||||
|
}
|
||||||
if (textColor) {
|
if (textColor) {
|
||||||
obj.metadata.color = textColor;
|
obj.metadata.color = textColor;
|
||||||
}
|
}
|
||||||
|
@ -384,6 +386,7 @@ define([
|
||||||
var updateMetadata = function(shjson) {
|
var updateMetadata = function(shjson) {
|
||||||
// Extract the user list (metadata) from the hyperjson
|
// Extract the user list (metadata) from the hyperjson
|
||||||
var json = (shjson === "") ? "" : JSON.parse(shjson);
|
var json = (shjson === "") ? "" : JSON.parse(shjson);
|
||||||
|
var titleUpdated = false;
|
||||||
if (json && json.metadata) {
|
if (json && json.metadata) {
|
||||||
if (json.metadata.users) {
|
if (json.metadata.users) {
|
||||||
var userData = json.metadata.users;
|
var userData = json.metadata.users;
|
||||||
|
@ -394,10 +397,14 @@ define([
|
||||||
updateDefaultTitle(json.metadata.defaultTitle);
|
updateDefaultTitle(json.metadata.defaultTitle);
|
||||||
}
|
}
|
||||||
if (typeof json.metadata.title !== "undefined") {
|
if (typeof json.metadata.title !== "undefined") {
|
||||||
updateTitle(json.metadata.title);
|
updateTitle(json.metadata.title || defaultName);
|
||||||
|
titleUpdated = true;
|
||||||
}
|
}
|
||||||
updateColors(json.metadata.color, json.metadata.backColor);
|
updateColors(json.metadata.color, json.metadata.backColor);
|
||||||
}
|
}
|
||||||
|
if (!titleUpdated) {
|
||||||
|
updateTitle(defaultName);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var renameCb = function (err, title) {
|
var renameCb = function (err, title) {
|
||||||
|
@ -591,15 +598,6 @@ define([
|
||||||
if (!window.location.hash || window.location.hash === '#') {
|
if (!window.location.hash || window.location.hash === '#') {
|
||||||
Cryptpad.replaceHash(editHash);
|
Cryptpad.replaceHash(editHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
Cryptpad.getPadTitle(function (err, title) {
|
|
||||||
if (err) {
|
|
||||||
console.log("Unable to get pad title");
|
|
||||||
console.error(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
updateTitle(title || defaultName);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var unnotify = module.unnotify = function () {
|
var unnotify = module.unnotify = function () {
|
||||||
|
|
Loading…
Reference in New Issue