Release version 1.8.3

This commit is contained in:
muxator 2020-04-27 03:31:35 +02:00
commit 62101147a0
308 changed files with 10997 additions and 9900 deletions

View file

@ -1,3 +1,22 @@
.hg
# Remove the git objects, logs, etc. to make final image smaller.
# Some files still need to be in the .git directory, because Etherpad at
# startup uses them to discover its version number.
.git/branches
.git/COMMIT_EDITMSG
.git/config
.git/description
.git/FETCH_HEAD
.git/hooks
.git/index
.git/info
.git/logs
.git/objects
.git/ORIG_HEAD
.git/packed-refs
.git/refs/remotes/
.gitignore
settings.json
src/node_modules

46
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,46 @@
* * *
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees:
* * *
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- Etherpad Version: (e.g. 1.8.0)
- Deployment (manual install, docker, ...)
**Desktop (please complete the following information):**
- OS: (e.g. iOS)
- Browser (e.g. chrome, safari)
- Version (e.g. 22)
**Smartphone (please complete the following information):**
- Device: (e.g. iPhone6)
- OS: (e.g. iOS8.1)
- Browser (e.g. stock browser, safari)
- Version (e.g. 22)
**Additional context**
Add any other context about the problem here.

View file

@ -0,0 +1,21 @@
* * *
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees:
* * *
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when (...)
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

29
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View file

@ -0,0 +1,29 @@
<!--
Some key notes before you open a PR:
1. Select which branch should this PR be merged in? By default, you should always merge to the develop branch.
2. PR name follows [convention](http://karma-runner.github.io/4.0/dev/git-commit-msg.html)
3. All tests pass locally, UI and Unit tests
4. All business logic and validations must be on the server-side
5. Update necessary Documentation
6. Put `closes #XXXX` in your comment to auto-close the issue that your PR fixes
Also, if you're new here
- Contribution Guide => https://github.com/ether/etherpad-lite/blob/master/CONTRIBUTING.md
-->
> Please provide enough information so that others can review your pull request:
<!-- You can skip this if you're fixing a typo or updating existing documentation -->
> Explain the **details** for making this change. What existing problem does the pull request solve?
<!-- Example: When "Adding a function to do X", explain why it is necessary to have a way to do X. -->
> Screenshots/GIFs
<!-- Add images/recordings to better visualize the change: expected/current behviour -->

3
.gitignore vendored
View file

@ -19,3 +19,6 @@ npm-debug.log
bin/etherpad-1.deb
credentials.json
out/
.nyc_output
./package-lock.json
.idea

View file

@ -1,18 +1,49 @@
language: node_js
node_js:
- "lts/*"
services:
- docker
install:
- "bin/installDeps.sh"
- "export GIT_HASH=$(git rev-parse --verify --short HEAD)"
- "npm install ep_test_line_attrib"
before_script:
- "tests/frontend/travis/sauce_tunnel.sh"
script:
- "tests/frontend/travis/runner.sh"
env:
global:
- secure: "WMGxFkOeTTlhWB+ChMucRtIqVmMbwzYdNHuHQjKCcj8HBEPdZLfCuK/kf4rG\nVLcLQiIsyllqzNhBGVHG1nyqWr0/LTm8JRqSCDDVIhpyzp9KpCJQQJG2Uwjk\n6/HIJJh/wbxsEdLNV2crYU/EiVO3A4Bq0YTHUlbhUqG3mSCr5Ec="
- secure: "gejXUAHYscbR6Bodw35XexpToqWkv2ifeECsbeEmjaLkYzXmUUNWJGknKSu7\nEUsSfQV8w+hxApr1Z+jNqk9aX3K1I4btL3cwk2trnNI8XRAvu1c1Iv60eerI\nkE82Rsd5lwUaMEh+/HoL8ztFCZamVndoNgX7HWp5J/NRZZMmh4g="
jdk:
- oraclejdk6
jobs:
include:
- name: "Run the Backend tests"
install:
- "cd src && npm install && cd -"
script:
- "tests/frontend/travis/runnerBackend.sh"
- name: "Test the Frontend"
install:
- "bin/installDeps.sh"
- "export GIT_HASH=$(git rev-parse --verify --short HEAD)"
- "npm install ep_test_line_attrib"
script:
- "tests/frontend/travis/runner.sh"
- name: "Test the Dockerfile"
install:
- "cd src && npm install && cd -"
script:
- "docker build -t etherpad:test ."
- "docker run -d -p 9001:9001 etherpad:test && sleep 3"
- "cd src && npm run test-container"
notifications:
irc:
channels:

View file

@ -1,3 +1,29 @@
# 1.8.3
* FEATURE: colibris is now the default skin for new installs
* FEATURE: improved colibris visuals, and migrated to Flexbox layout
* FEATURE: skin variants: colibris skin colors can be easily customized. Visit http://127.0.0.1:9001/p/test#skinvariantsbuilder
* REQUIREMENTS: minimum required Node version is **10.13.0 LTS**.
* MINOR: stability fixes for the async migration in 1.8.0 (fixed many UnhandledPromiseRejectionWarning and the few remaining crashes)
* MINOR: improved stability of import/export functionality
* MINOR: fixed many small UI quirks (timeslider, import/export, chat)
* MINOR: Docker images are now built & run in production mode by default
* MINOR: reduced the size of the Docker images
* MINOR: better documented cookies and configuration parameters of the Docker image
* MINOR: better database support (especially MySQL)
* MINOR: additional test coverage
* MINOR: restored compatibility with ep_hash_auth
* MINOR: migrate from swagger-node-express to openapi-backend
* MINOR: honor the Accept-Language HTTP headers sent by browsers, eventually serving language variants
* PERFORMANCE: correctly send HTTP/304 for minified files
* SECURITY: bumped many dependencies. At the time of the release, this version has 0 reported vulnerabilities by npm audit
* SECURITY: never send referrer when opening a link
* SECURITY: rate limit imports and exports
* SECURITY: do not allow pad import if a user never contributed to that pad
* SECURITY: expose configuration parameter for limiting max import size
*BREAKING CHANGE*: undoing the "clear authorship colors" command is no longer supported (see https://github.com/ether/etherpad-lite/issues/2802)
*BREAKING CHANGE*: the visuals and CSS structure of the page was updated. Plugins may need a CSS rehaul
# 1.8
* SECURITY: change referrer policy so that Etherpad addresses aren't leaked when links are clicked (discussion: https://github.com/ether/etherpad-lite/pull/3636)
* SECURITY: set the "secure" flag for the session cookies when served over SSL. From now on it will not be possible to serve the same instance both in cleartext and over SSL

View file

@ -15,9 +15,10 @@ LABEL maintainer="Etherpad team, https://github.com/ether/etherpad-lite"
# ETHERPAD_PLUGINS="ep_codepad ep_author_neat"
ARG ETHERPAD_PLUGINS=
# Set the following to production to avoid installing devDeps
# this can be done with build args (and is mandatory to build ARM version)
ENV NODE_ENV=development
# By default, Etherpad container is built and run in "production" mode. This is
# leaner (development dependencies are not installed) and runs faster (among
# other things, assets are minified & compressed).
ENV NODE_ENV=production
# Follow the principle of least privilege: run as unprivileged user.
#
@ -25,13 +26,13 @@ ENV NODE_ENV=development
# that do not allow images running as root.
RUN useradd --uid 5001 --create-home etherpad
RUN mkdir /opt/etherpad-lite && chown etherpad:etherpad /opt/etherpad-lite
RUN mkdir /opt/etherpad-lite && chown etherpad:0 /opt/etherpad-lite
USER etherpad:etherpad
USER etherpad
WORKDIR /opt/etherpad-lite
COPY --chown=etherpad:etherpad ./ ./
COPY --chown=etherpad:0 ./ ./
# install node dependencies for Etherpad
RUN bin/installDeps.sh && \
@ -44,7 +45,10 @@ RUN bin/installDeps.sh && \
RUN for PLUGIN_NAME in ${ETHERPAD_PLUGINS}; do npm install "${PLUGIN_NAME}"; done
# Copy the configuration file.
COPY --chown=etherpad:etherpad ./settings.json.docker /opt/etherpad-lite/settings.json
COPY --chown=etherpad:0 ./settings.json.docker /opt/etherpad-lite/settings.json
# Fix permissions for root group
RUN chmod -R g=u .
EXPOSE 9001
CMD ["node", "node_modules/ep_etherpad-lite/node/server.js"]

View file

@ -6,7 +6,14 @@ docassets = $(addprefix out/,$(wildcard doc/assets/*))
VERSION = $(shell node -e "console.log( require('./src/package.json').version )")
UNAME := $(shell uname -s)
docs: $(outdoc_files) $(docassets)
ensure_marked_is_installed:
set -eu; \
hash npm; \
if [ $(shell npm list --prefix bin/doc >/dev/null 2>/dev/null; echo $$?) -ne "0" ]; then \
npm ci --prefix=bin/doc; \
fi
docs: ensure_marked_is_installed $(outdoc_files) $(docassets)
out/doc/assets/%: doc/assets/%
mkdir -p $(@D)

View file

@ -1,16 +1,17 @@
# A real-time collaborative editor for the web
<a href="https://hub.docker.com/r/etherpad/etherpad"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/etherpad/etherpad"></a>
![Demo Etherpad Animated Jif](https://i.imgur.com/zYrGkg3.gif "Etherpad in action")
[![Travis (.org)](https://img.shields.io/travis/ether/etherpad-lite)](https://travis-ci.org/github/ether/etherpad-lite)
![Demo Etherpad Animated Jif](doc/images/etherpad_demo.gif "Etherpad in action")
# About
Etherpad is a real-time collaborative editor scalable to thousands of simultaneous real time users. It provides full data export capabilities, and runs on _your_ server, under _your_ control.
**[Try it out](https://beta.etherpad.org)**
**[Try it out](https://video.etherpad.com)**
# Installation
## Requirements
- `nodejs` >= **8.9.0** (preferred: `nodejs` >= **10.13.0**). Please note that starting Jan 1st, 2020, nodejs 8.x is deprecated.
- `nodejs` >= **10.13.0**.
## GNU/Linux and other UNIX-like systems
@ -22,7 +23,7 @@ git clone --branch master https://github.com/ether/etherpad-lite.git && cd ether
```
### Manual install
You'll need git and [node.js](https://nodejs.org) installed (minimum required Node version: **8.9.0**, preferred: >= **10.13.0**).
You'll need git and [node.js](https://nodejs.org) installed (minimum required Node version: **10.13.0**).
**As any user (we recommend creating a separate user called etherpad):**
@ -50,7 +51,7 @@ You'll need [node.js](https://nodejs.org) and (optionally, though recommended) g
1. Grab the source, either
- download <https://github.com/ether/etherpad-lite/zipball/master>
- or `git clone --branch master https://github.com/ether/etherpad-lite.git`
2. start `bin\installOnWindows.bat`
2. With a "Run as administrator" command prompt execute `bin\installOnWindows.bat`
Now, run `start.bat` and open <http://localhost:9001> in your browser.
@ -83,10 +84,20 @@ If you have enabled authentication in `users` section in `settings.json`, it is
Please install [ep_hash_auth plugin](https://www.npmjs.com/package/ep_hash_auth) and configure it.
If you prefer, `ep_hash_auth` also gives you the option of storing the users in a custom directory in the file system, without having to edit `settings.json` and restart Etherpad each time.
## Plugins and themes
## Customize functionalities with plugins
![Basic install](doc/images/etherpad_basic.png "Basic Installation")
![Full Features](doc/images/etherpad_full_features.png "You can add a lot of plugins !")
Etherpad is very customizable through plugins. Instructions for installing themes and plugins can be found in [the plugin wiki article](https://github.com/ether/etherpad-lite/wiki/Available-Plugins).
## Customize the style with skin variants
Open <http://127.0.0.1:9001/p/test#skinvariantsbuilder> in your browser and start playing !
![Skin Variant](doc/images/etherpad_skin_variants.gif "Skin variants")
## Helpful resources
The [wiki](https://github.com/ether/etherpad-lite/wiki) is your one-stop resource for Tutorials and How-to's.
@ -97,6 +108,8 @@ Documentation can be found in `doc/`.
## Things you should know
You can debug Etherpad using `bin/debugRun.sh`.
You can run Etherpad quickly launching `bin/fastRun.sh`. It's convenient for developers and advanced users. Be aware that it will skip the dependencies update, so remember to run `bin/installDeps.sh` after installing a new dependency or upgrading version.
If you want to find out how Etherpad's `Easysync` works (the library that makes it really realtime), start with this [PDF](https://github.com/ether/etherpad-lite/raw/master/doc/easysync/easysync-full-description.pdf) (complex, but worth reading).
## Contributing
@ -111,6 +124,8 @@ For **responsible disclosure of vulnerabilities**, please write a mail to the ma
Etherpad is designed to be easily embeddable and provides a [HTTP API](https://github.com/ether/etherpad-lite/wiki/HTTP-API)
that allows your web application to manage pads, users and groups. It is recommended to use the [available client implementations](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries) in order to interact with this API.
OpenAPI (previously swagger) definitions for the API are exposed under `/api/openapi.json`.
# jQuery plugin
There is a [jQuery plugin](https://github.com/ether/etherpad-lite-jquery-plugin) that helps you to embed Pads into your website.

View file

@ -24,7 +24,7 @@ find ${SRC}/ -type d -exec chmod 0755 {} \;
find ${SRC}/ -type f -exec chmod go-w {} \;
chown -R root:root ${SRC}/
let SIZE=`du -s ${SYSROOT} | sed s'/\s\+.*//'`+8
let SIZE=$(du -s ${SYSROOT} | sed s'/\s\+.*//')+8
pushd ${SYSROOT}/
tar czf ${DIST}/data.tar.gz [a-z]*
popd

View file

@ -1,9 +1,9 @@
#!/bin/sh
NODE_VERSION="10.16.3"
NODE_VERSION="10.20.1"
#Move to the folder where ep-lite is installed
cd `dirname $0`
cd $(dirname $0)
#Was this script started in the bin folder? if yes move out
if [ -d "../bin" ]; then

120
bin/checkPadDeltas.js Normal file
View file

@ -0,0 +1,120 @@
/*
* This is a debug tool. It checks all revisions for data corruption
*/
if (process.argv.length != 3) {
console.error("Use: node bin/checkPadDeltas.js $PADID");
process.exit(1);
}
// get the padID
const padId = process.argv[2];
// load and initialize NPM;
var expect = require('expect.js')
var diff = require('diff')
var async = require('async')
let npm = require('../src/node_modules/npm');
var async = require("ep_etherpad-lite/node_modules/async");
var Changeset = require("ep_etherpad-lite/static/js/Changeset");
npm.load({}, async function() {
try {
// initialize database
let settings = require('../src/node/utils/Settings');
let db = require('../src/node/db/DB');
await db.init();
// load modules
let Changeset = require('ep_etherpad-lite/static/js/Changeset');
let padManager = require('../src/node/db/PadManager');
let exists = await padManager.doesPadExists(padId);
if (!exists) {
console.error("Pad does not exist");
process.exit(1);
}
// get the pad
let pad = await padManager.getPad(padId);
//create an array with key revisions
//key revisions always save the full pad atext
var head = pad.getHeadRevisionNumber();
var keyRevisions = [];
for(var i=0;i<head;i+=100)
{
keyRevisions.push(i);
}
//create an array with all revisions
var revisions = [];
for(var i=0;i<=head;i++)
{
revisions.push(i);
}
var atext = Changeset.makeAText("\n")
//run trough all revisions
async.forEachSeries(revisions, function(revNum, callback)
{
//console.log('Fetching', revNum)
db.db.get("pad:"+padId+":revs:" + revNum, function(err, revision)
{
if(err) return callback(err);
//check if there is a atext in the keyRevisions
if(~keyRevisions.indexOf(revNum) && (revision === undefined || revision.meta === undefined || revision.meta.atext === undefined)) {
console.error("No atext in key revision " + revNum);
callback();
return;
}
try {
//console.log("check revision ", revNum);
var cs = revision.changeset;
atext = Changeset.applyToAText(cs, atext, pad.pool);
}
catch(e) {
console.error("Bad changeset at revision " + revNum + " - " + e.message);
callback();
return;
}
if(~keyRevisions.indexOf(revNum)) {
try {
expect(revision.meta.atext.text).to.eql(atext.text)
expect(revision.meta.atext.attribs).to.eql(atext.attribs)
}catch(e) {
console.error("Atext in key revision "+revNum+" doesn't match computed one.")
console.log(diff.diffChars(atext.text, revision.meta.atext.text).map(function(op) {if(!op.added && !op.removed) op.value = op.value.length; return op}))
//console.error(e)
//console.log('KeyRev. :', revision.meta.atext)
//console.log('Computed:', atext)
callback()
return
}
}
setImmediate(callback)
});
}, function(er) {
if(pad.atext.text == atext.text) console.log('ok')
else {
console.error('Pad AText doesn\'t match computed one! (Computed ',atext.text.length, ', db', pad.atext.text.length,')')
console.log(diff.diffChars(atext.text, pad.atext.text).map(function(op) {if(!op.added && !op.removed) op.value = op.value.length; return op}))
}
callback(er)
});
process.exit(0);
} catch (e) {
console.trace(e);
process.exit(1);
}
});

View file

@ -1,7 +1,7 @@
#!/bin/sh
#Move to the folder where ep-lite is installed
cd `dirname $0`
cd $(dirname $0)
#Was this script started in the bin folder? if yes move out
if [ -d "../bin" ]; then
@ -37,5 +37,5 @@ bin/installDeps.sh "$@" || exit 1
#Move to the node folder and start
echo "Started Etherpad..."
SCRIPTPATH=`pwd -P`
SCRIPTPATH=$(pwd -P)
node "${SCRIPTPATH}/node_modules/ep_etherpad-lite/node/server.js" "$@"

View file

@ -1,7 +1,7 @@
#!/bin/sh
#Move to the folder where ep-lite is installed
cd `dirname $0`
cd $(dirname $0)
#Was this script started in the bin folder? if yes move out
if [ -d "../bin" ]; then

View file

@ -3,6 +3,12 @@
* to fix a window.
*/
const request = require('../src/node_modules/request');
const settings = require(__dirname+'/../tests/backend/loadSettings').loadSettings();
const supertest = require(__dirname+'/../src/node_modules/supertest');
const api = supertest('http://'+settings.ip+":"+settings.port);
const path = require('path');
const fs = require('fs');
if (process.argv.length != 3) {
console.error("Use: node deletePad.js $PADID");
process.exit(1);
@ -11,31 +17,34 @@ if (process.argv.length != 3) {
// get the padID
let padId = process.argv[2];
let npm = require('../src/node_modules/npm');
// get the API Key
var filePath = path.join(__dirname, '../APIKEY.txt');
var apikey = fs.readFileSync(filePath, {encoding: 'utf-8'});
npm.load({}, async function(er) {
if (er) {
console.error("Could not load NPM: " + er)
process.exit(1);
}
// Set apiVersion to base value, we change this later.
var apiVersion = 1;
try {
let settings = require('../src/node/utils/Settings');
let db = require('../src/node/db/DB');
await db.init();
// Update the apiVersion
api.get('/api/')
.expect(function(res){
apiVersion = res.body.currentVersion;
if (!res.body.currentVersion) throw new Error("No version set in API");
return;
})
.end(function(err, res){
padManager = require('../src/node/db/PadManager');
await padManager.removePad(padId);
// Now we know the latest API version, let's delete pad
var uri = '/api/'+apiVersion+'/deletePad?apikey='+apikey+'&padID='+padId;
api.post(uri)
.expect(function(res){
if (res.body.code === 1){
console.error("Error deleting pad", res.body);
}else{
console.log("Deleted pad", res.body);
}
return;
})
.end(function(){})
});
// end
console.log("Finished deleting padId: " + padId);
process.exit(0);
} catch (e) {
if (err.name === "apierror") {
console.error(e);
} else {
console.trace(e);
}
process.exit(1);
}
});

1
bin/doc/node_modules/.bin/marked generated vendored
View file

@ -1 +0,0 @@
../marked/bin/marked

View file

@ -1,2 +0,0 @@
.git*
test/

19
bin/doc/node_modules/marked/LICENSE generated vendored
View file

@ -1,19 +0,0 @@
Copyright (c) 2011-2012, Christopher Jeffrey (https://github.com/chjj/)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -1,9 +0,0 @@
all:
@cp lib/marked.js marked.js
@uglifyjs -o marked.min.js marked.js
clean:
@rm marked.js
@rm marked.min.js
.PHONY: clean all

135
bin/doc/node_modules/marked/README.md generated vendored
View file

@ -1,135 +0,0 @@
# marked
A full-featured markdown parser and compiler.
Built for speed.
## Benchmarks
node v0.4.x
``` bash
$ node test --bench
marked completed in 12071ms.
showdown (reuse converter) completed in 27387ms.
showdown (new converter) completed in 75617ms.
markdown-js completed in 70069ms.
```
node v0.6.x
``` bash
$ node test --bench
marked completed in 6485ms.
marked (with gfm) completed in 7466ms.
discount completed in 7169ms.
showdown (reuse converter) completed in 15937ms.
showdown (new converter) completed in 18279ms.
markdown-js completed in 23572ms.
```
__Marked is now faster than Discount, which is written in C.__
For those feeling skeptical: These benchmarks run the entire markdown test suite
1000 times. The test suite tests every feature. It doesn't cater to specific
aspects.
Benchmarks for other engines to come (?).
## Install
``` bash
$ npm install marked
```
## Another javascript markdown parser
The point of marked was to create a markdown compiler where it was possible to
frequently parse huge chunks of markdown without having to worry about
caching the compiled output somehow...or blocking for an unnecesarily long time.
marked is very concise and still implements all markdown features. It is also
now fully compatible with the client-side.
marked more or less passes the official markdown test suite in its
entirety. This is important because a surprising number of markdown compilers
cannot pass more than a few tests. It was very difficult to get marked as
compliant as it is. It could have cut corners in several areas for the sake
of performance, but did not in order to be exactly what you expect in terms
of a markdown rendering. In fact, this is why marked could be considered at a
disadvantage in the benchmarks above.
Along with implementing every markdown feature, marked also implements
[GFM features](http://github.github.com/github-flavored-markdown/).
## Usage
``` js
var marked = require('marked');
console.log(marked('i am using __markdown__.'));
```
You also have direct access to the lexer and parser if you so desire.
``` js
var tokens = marked.lexer(str);
console.log(marked.parser(tokens));
```
``` bash
$ node
> require('marked').lexer('> i am using marked.')
[ { type: 'blockquote_start' },
{ type: 'text', text: ' i am using marked.' },
{ type: 'blockquote_end' },
links: {} ]
```
## CLI
``` bash
$ marked -o hello.html
hello world
^D
$ cat hello.html
<p>hello world</p>
```
## Syntax Highlighting
Marked has an interface that allows for a syntax highlighter to highlight code
blocks before they're output.
Example implementation:
``` js
var highlight = require('my-syntax-highlighter')
, marked_ = require('marked');
var marked = function(text) {
var tokens = marked_.lexer(text)
, l = tokens.length
, i = 0
, token;
for (; i < l; i++) {
token = tokens[i];
if (token.type === 'code') {
token.text = highlight(token.text, token.lang);
// marked should not escape this
token.escaped = true;
}
}
text = marked_.parser(tokens);
return text;
};
module.exports = marked;
```
## License
Copyright (c) 2011-2012, Christopher Jeffrey. (MIT License)
See LICENSE for more info.

View file

@ -1,115 +0,0 @@
#!/usr/bin/env node
/**
* Marked CLI
* Copyright (c) 2011-2012, Christopher Jeffrey (MIT License)
*/
var fs = require('fs')
, util = require('util')
, marked = require('../');
/**
* Man Page
*/
var help = function() {
var spawn = require('child_process').spawn;
var options = {
cwd: process.cwd(),
env: process.env,
setsid: false,
customFds: [0, 1, 2]
};
spawn('man',
[__dirname + '/../man/marked.1'],
options);
};
/**
* Main
*/
var main = function(argv) {
var files = []
, data = ''
, input
, output
, arg
, tokens;
var getarg = function() {
var arg = argv.shift();
arg = arg.split('=');
if (arg.length > 1) {
argv.unshift(arg.slice(1).join('='));
}
return arg[0];
};
while (argv.length) {
arg = getarg();
switch (arg) {
case '-o':
case '--output':
output = argv.shift();
break;
case '-i':
case '--input':
input = argv.shift();
break;
case '-t':
case '--tokens':
tokens = true;
break;
case '-h':
case '--help':
return help();
default:
files.push(arg);
break;
}
}
if (!input) {
if (files.length <= 2) {
var stdin = process.stdin;
stdin.setEncoding('utf8');
stdin.resume();
stdin.on('data', function(text) {
data += text;
});
stdin.on('end', write);
return;
}
input = files.pop();
}
data = fs.readFileSync(input, 'utf8');
write();
function write() {
data = tokens
? JSON.stringify(marked.lexer(data), null, 2)
: marked(data);
if (!output) {
process.stdout.write(data + '\n');
} else {
fs.writeFileSync(output, data);
}
}
};
if (!module.parent) {
process.title = 'marked';
main(process.argv.slice());
} else {
module.exports = main;
}

View file

@ -1 +0,0 @@
module.exports = require('./lib/marked');

View file

@ -1,662 +0,0 @@
/**
* marked - A markdown parser (https://github.com/chjj/marked)
* Copyright (c) 2011-2012, Christopher Jeffrey. (MIT Licensed)
*/
;(function() {
/**
* Block-Level Grammar
*/
var block = {
newline: /^\n+/,
code: /^ {4,}[^\n]*(?:\n {4,}[^\n]*|\n)*(?:\n+|$)/,
gfm_code: /^ *``` *(\w+)? *\n([^\0]+?)\s*``` *(?:\n+|$)/,
hr: /^( *[\-*_]){3,} *(?:\n+|$)/,
heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
lheading: /^([^\n]+)\n *(=|-){3,} *\n*/,
blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/,
list: /^( *)([*+-]|\d+\.) [^\0]+?(?:\n{2,}(?! )|\s*$)(?!\1bullet)\n*/,
html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,
def: /^ *\[([^\]]+)\]: *([^\s]+)(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
paragraph: /^([^\n]+\n?(?!body))+\n*/,
text: /^[^\n]+/
};
block.list = (function() {
var list = block.list.source;
list = list
.replace('bullet', /(?:[*+-](?!(?: *[-*]){2,})|\d+\.)/.source);
return new RegExp(list);
})();
block.html = (function() {
var html = block.html.source;
html = html
.replace('comment', /<!--[^\0]*?-->/.source)
.replace('closed', /<(tag)[^\0]+?<\/\1>/.source)
.replace('closing', /<tag(?!:\/|@)\b(?:"[^"]*"|'[^']*'|[^'">])*?>/.source)
.replace(/tag/g, tag());
return new RegExp(html);
})();
block.paragraph = (function() {
var paragraph = block.paragraph.source
, body = [];
(function push(rule) {
rule = block[rule] ? block[rule].source : rule;
body.push(rule.replace(/(^|[^\[])\^/g, '$1'));
return push;
})
('gfm_code')
('hr')
('heading')
('lheading')
('blockquote')
('<' + tag())
('def');
return new
RegExp(paragraph.replace('body', body.join('|')));
})();
/**
* Block Lexer
*/
block.lexer = function(src) {
var tokens = [];
tokens.links = {};
src = src
.replace(/\r\n|\r/g, '\n')
.replace(/\t/g, ' ');
return block.token(src, tokens, true);
};
block.token = function(src, tokens, top) {
var src = src.replace(/^ +$/gm, '')
, next
, loose
, cap
, item
, space
, i
, l;
while (src) {
// newline
if (cap = block.newline.exec(src)) {
src = src.substring(cap[0].length);
if (cap[0].length > 1) {
tokens.push({
type: 'space'
});
}
}
// code
if (cap = block.code.exec(src)) {
src = src.substring(cap[0].length);
cap = cap[0].replace(/^ {4}/gm, '');
tokens.push({
type: 'code',
text: cap.replace(/\n+$/, '')
});
continue;
}
// gfm_code
if (cap = block.gfm_code.exec(src)) {
src = src.substring(cap[0].length);
tokens.push({
type: 'code',
lang: cap[1],
text: cap[2]
});
continue;
}
// heading
if (cap = block.heading.exec(src)) {
src = src.substring(cap[0].length);
tokens.push({
type: 'heading',
depth: cap[1].length,
text: cap[2]
});
continue;
}
// lheading
if (cap = block.lheading.exec(src)) {
src = src.substring(cap[0].length);
tokens.push({
type: 'heading',
depth: cap[2] === '=' ? 1 : 2,
text: cap[1]
});
continue;
}
// hr
if (cap = block.hr.exec(src)) {
src = src.substring(cap[0].length);
tokens.push({
type: 'hr'
});
continue;
}
// blockquote
if (cap = block.blockquote.exec(src)) {
src = src.substring(cap[0].length);
tokens.push({
type: 'blockquote_start'
});
cap = cap[0].replace(/^ *> ?/gm, '');
// Pass `top` to keep the current
// "toplevel" state. This is exactly
// how markdown.pl works.
block.token(cap, tokens, top);
tokens.push({
type: 'blockquote_end'
});
continue;
}
// list
if (cap = block.list.exec(src)) {
src = src.substring(cap[0].length);
tokens.push({
type: 'list_start',
ordered: isFinite(cap[2])
});
// Get each top-level item.
cap = cap[0].match(
/^( *)([*+-]|\d+\.)[^\n]*(?:\n(?!\1(?:[*+-]|\d+\.))[^\n]*)*/gm
);
next = false;
l = cap.length;
i = 0;
for (; i < l; i++) {
item = cap[i];
// Remove the list item's bullet
// so it is seen as the next token.
space = item.length;
item = item.replace(/^ *([*+-]|\d+\.) */, '');
// Outdent whatever the
// list item contains. Hacky.
if (~item.indexOf('\n ')) {
space -= item.length;
item = item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '');
}
// Determine whether item is loose or not.
// Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
// for discount behavior.
loose = next || /\n\n(?!\s*$)/.test(item);
if (i !== l - 1) {
next = item[item.length-1] === '\n';
if (!loose) loose = next;
}
tokens.push({
type: loose
? 'loose_item_start'
: 'list_item_start'
});
// Recurse.
block.token(item, tokens);
tokens.push({
type: 'list_item_end'
});
}
tokens.push({
type: 'list_end'
});
continue;
}
// html
if (cap = block.html.exec(src)) {
src = src.substring(cap[0].length);
tokens.push({
type: 'html',
text: cap[0]
});
continue;
}
// def
if (top && (cap = block.def.exec(src))) {
src = src.substring(cap[0].length);
tokens.links[cap[1].toLowerCase()] = {
href: cap[2],
title: cap[3]
};
continue;
}
// top-level paragraph
if (top && (cap = block.paragraph.exec(src))) {
src = src.substring(cap[0].length);
tokens.push({
type: 'paragraph',
text: cap[0]
});
continue;
}
// text
if (cap = block.text.exec(src)) {
// Top-level should never reach here.
src = src.substring(cap[0].length);
tokens.push({
type: 'text',
text: cap[0]
});
continue;
}
}
return tokens;
};
/**
* Inline Processing
*/
var inline = {
escape: /^\\([\\`*{}\[\]()#+\-.!_>])/,
autolink: /^<([^ >]+(@|:\/)[^ >]+)>/,
gfm_autolink: /^(\w+:\/\/[^\s]+[^.,:;"')\]\s])/,
tag: /^<!--[^\0]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
link: /^!?\[((?:\[[^\]]*\]|[^\[\]]|\[|\](?=[^[\]]*\]))*)\]\(([^\)]*)\)/,
reflink: /^!?\[((?:\[[^\]]*\]|[^\[\]]|\[|\](?=[^[\]]*\]))*)\]\s*\[([^\]]*)\]/,
nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
strong: /^__([^\0]+?)__(?!_)|^\*\*([^\0]+?)\*\*(?!\*)/,
em: /^\b_([^\0]+?)_\b|^\*((?:\*\*|[^\0])+?)\*(?!\*)/,
code: /^(`+)([^\0]*?[^`])\1(?!`)/,
br: /^ {2,}\n(?!\s*$)/,
text: /^[^\0]+?(?=[\\<!\[_*`]|\w+:\/\/| {2,}\n|$)/
};
/**
* Inline Lexer
*/
inline.lexer = function(src) {
var out = ''
, links = tokens.links
, link
, text
, href
, cap;
while (src) {
// escape
if (cap = inline.escape.exec(src)) {
src = src.substring(cap[0].length);
out += cap[1];
continue;
}
// autolink
if (cap = inline.autolink.exec(src)) {
src = src.substring(cap[0].length);
if (cap[2] === '@') {
text = cap[1][6] === ':'
? mangle(cap[1].substring(7))
: mangle(cap[1]);
href = mangle('mailto:') + text;
} else {
text = escape(cap[1]);
href = text;
}
out += '<a href="'
+ href
+ '">'
+ text
+ '</a>';
continue;
}
// gfm_autolink
if (cap = inline.gfm_autolink.exec(src)) {
src = src.substring(cap[0].length);
text = escape(cap[1]);
href = text;
out += '<a href="'
+ href
+ '">'
+ text
+ '</a>';
continue;
}
// tag
if (cap = inline.tag.exec(src)) {
src = src.substring(cap[0].length);
out += cap[0];
continue;
}
// link
if (cap = inline.link.exec(src)) {
src = src.substring(cap[0].length);
text = /^\s*<?([^\s]*?)>?(?:\s+"([^\n]+)")?\s*$/.exec(cap[2]);
if (!text) {
out += cap[0][0];
src = cap[0].substring(1) + src;
continue;
}
out += outputLink(cap, {
href: text[1],
title: text[2]
});
continue;
}
// reflink, nolink
if ((cap = inline.reflink.exec(src))
|| (cap = inline.nolink.exec(src))) {
src = src.substring(cap[0].length);
link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
link = links[link.toLowerCase()];
if (!link || !link.href) {
out += cap[0][0];
src = cap[0].substring(1) + src;
continue;
}
out += outputLink(cap, link);
continue;
}
// strong
if (cap = inline.strong.exec(src)) {
src = src.substring(cap[0].length);
out += '<strong>'
+ inline.lexer(cap[2] || cap[1])
+ '</strong>';
continue;
}
// em
if (cap = inline.em.exec(src)) {
src = src.substring(cap[0].length);
out += '<em>'
+ inline.lexer(cap[2] || cap[1])
+ '</em>';
continue;
}
// code
if (cap = inline.code.exec(src)) {
src = src.substring(cap[0].length);
out += '<code>'
+ escape(cap[2], true)
+ '</code>';
continue;
}
// br
if (cap = inline.br.exec(src)) {
src = src.substring(cap[0].length);
out += '<br>';
continue;
}
// text
if (cap = inline.text.exec(src)) {
src = src.substring(cap[0].length);
out += escape(cap[0]);
continue;
}
}
return out;
};
var outputLink = function(cap, link) {
if (cap[0][0] !== '!') {
return '<a href="'
+ escape(link.href)
+ '"'
+ (link.title
? ' title="'
+ escape(link.title)
+ '"'
: '')
+ '>'
+ inline.lexer(cap[1])
+ '</a>';
} else {
return '<img src="'
+ escape(link.href)
+ '" alt="'
+ escape(cap[1])
+ '"'
+ (link.title
? ' title="'
+ escape(link.title)
+ '"'
: '')
+ '>';
}
};
/**
* Parsing
*/
var tokens
, token;
var next = function() {
return token = tokens.pop();
};
var tok = function() {
switch (token.type) {
case 'space': {
return '';
}
case 'hr': {
return '<hr>\n';
}
case 'heading': {
return '<h'
+ token.depth
+ '>'
+ inline.lexer(token.text)
+ '</h'
+ token.depth
+ '>\n';
}
case 'code': {
return '<pre><code'
+ (token.lang
? ' class="'
+ token.lang
+ '"'
: '')
+ '>'
+ (token.escaped
? token.text
: escape(token.text, true))
+ '</code></pre>\n';
}
case 'blockquote_start': {
var body = '';
while (next().type !== 'blockquote_end') {
body += tok();
}
return '<blockquote>\n'
+ body
+ '</blockquote>\n';
}
case 'list_start': {
var type = token.ordered ? 'ol' : 'ul'
, body = '';
while (next().type !== 'list_end') {
body += tok();
}
return '<'
+ type
+ '>\n'
+ body
+ '</'
+ type
+ '>\n';
}
case 'list_item_start': {
var body = '';
while (next().type !== 'list_item_end') {
body += token.type === 'text'
? parseText()
: tok();
}
return '<li>'
+ body
+ '</li>\n';
}
case 'loose_item_start': {
var body = '';
while (next().type !== 'list_item_end') {
body += tok();
}
return '<li>'
+ body
+ '</li>\n';
}
case 'html': {
return inline.lexer(token.text);
}
case 'paragraph': {
return '<p>'
+ inline.lexer(token.text)
+ '</p>\n';
}
case 'text': {
return '<p>'
+ parseText()
+ '</p>\n';
}
}
};
var parseText = function() {
var body = token.text
, top;
while ((top = tokens[tokens.length-1])
&& top.type === 'text') {
body += '\n' + next().text;
}
return inline.lexer(body);
};
var parse = function(src) {
tokens = src.reverse();
var out = '';
while (next()) {
out += tok();
}
tokens = null;
token = null;
return out;
};
/**
* Helpers
*/
var escape = function(html, encode) {
return html
.replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&apos;');
};
var mangle = function(text) {
var out = ''
, l = text.length
, i = 0
, ch;
for (; i < l; i++) {
ch = text.charCodeAt(i);
if (Math.random() > 0.5) {
ch = 'x' + ch.toString(16);
}
out += '&#' + ch + ';';
}
return out;
};
function tag() {
var tag = '(?!(?:'
+ 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
+ '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
+ '|span|br|wbr|ins|del|img)\\b)\\w+';
return tag;
}
/**
* Expose
*/
var marked = function(src) {
return parse(block.lexer(src));
};
marked.parser = parse;
marked.lexer = block.lexer;
marked.parse = marked;
if (typeof module !== 'undefined') {
module.exports = marked;
} else {
this.marked = marked;
}
}).call(this);

View file

@ -1,39 +0,0 @@
.ds q \N'34'
.TH marked 1
.SH NAME
marked \- a javascript markdown parser
.SH SYNOPSIS
.nf
.B marked [\-o output] [\-i input] [\-th]
.fi
.SH DESCRIPTION
.B marked
is a full-featured javascript markdown parser, built for speed. It also includes
multiple GFM features.
.SH OPTIONS
.TP
.BI \-o,\ \-\-output\ [output]
Specify file output. If none is specified, write to stdout.
.TP
.BI \-i,\ \-\-input\ [input]
Specify file input, otherwise use last argument as input file. If no input file
is specified, read from stdin.
.TP
.BI \-t,\ \-\-tokens
Output a token stream instead of html.
.TP
.BI \-h,\ \-\-help
Display help information.
.SH EXAMPLES
.TP
cat in.md | marked > out.html
.TP
echo "hello *world*" | marked
.TP
marked -o out.html in.md
.TP
marked --output="hello world.html" -i in.md
.SH BUGS
Please report any bugs to https://github.com/chjj/marked.
.SH LICENSE
Copyright (c) 2011-2012, Christopher Jeffrey (MIT License)

View file

@ -1,15 +0,0 @@
{
"name": "marked",
"description": "A markdown parser built for speed",
"author": "Christopher Jeffrey",
"version": "0.1.9",
"main": "./lib/marked.js",
"bin": "./bin/marked",
"man": "./man/marked.1",
"preferGlobal": false,
"repository": "git://github.com/chjj/marked.git",
"homepage": "https://github.com/chjj/marked",
"bugs": "http://github.com/chjj/marked/issues",
"keywords": [ "markdown", "markup", "html" ],
"tags": [ "markdown", "markup", "html" ]
}

13
bin/doc/package-lock.json generated Normal file
View file

@ -0,0 +1,13 @@
{
"name": "node-doc-generator",
"version": "0.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"marked": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz",
"integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw=="
}
}
}

View file

@ -7,7 +7,7 @@
"node": ">=0.6.10"
},
"dependencies": {
"marked": ">=0.3.6"
"marked": "0.8.2"
},
"devDependencies": {},
"optionalDependencies": {},

22
bin/fastRun.sh Executable file
View file

@ -0,0 +1,22 @@
#!/bin/bash
#
# Run Etherpad directly, assuming all the dependencies are already installed.
#
# Useful for developers, or users that know what they are doing. If you just
# upgraded Etherpad version, installed a new dependency, or are simply unsure
# of what to do, please execute bin/installDeps.sh once before running this
# script.
set -eu
# source: https://stackoverflow.com/questions/59895/how-to-get-the-source-directory-of-a-bash-script-from-within-the-script-itself#246128
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
echo "Running directly, without checking/installing dependencies"
# move to the base Etherpad directory. This will be necessary until Etherpad
# learns to run from arbitrary CWDs.
cd "${DIR}/.."
# run Etherpad main class
node "${DIR}/../node_modules/ep_etherpad-lite/node/server.js" "${@}"

View file

@ -1,8 +1,8 @@
#!/bin/sh
# minimum required node version
REQUIRED_NODE_MAJOR=8
REQUIRED_NODE_MINOR=9
REQUIRED_NODE_MAJOR=10
REQUIRED_NODE_MINOR=13
# minimum required npm version
REQUIRED_NPM_MAJOR=5
@ -49,7 +49,7 @@ require_minimal_version() {
}
#Move to the folder where ep-lite is installed
cd `dirname $0`
cd $(dirname $0)
#Was this script started in the bin folder? if yes move out
if [ -d "../bin" ]; then

View file

@ -1,7 +1,7 @@
#!/bin/sh
#Move to the folder where ep-lite is installed
cd `dirname $0`
cd $(dirname $0)
#Was this script started in the bin folder? if yes move out
if [ -d "../bin" ]; then
@ -34,6 +34,6 @@ bin/installDeps.sh "$@" || exit 1
#Move to the node folder and start
echo "Started Etherpad..."
SCRIPTPATH=`pwd -P`
SCRIPTPATH=$(pwd -P)
exec node "$SCRIPTPATH/node_modules/ep_etherpad-lite/node/server.js" "$@"

View file

@ -19,7 +19,7 @@ LAST_EMAIL_SEND=0
LOG="$1"
#Move to the folder where ep-lite is installed
cd `dirname $0`
cd $(dirname $0)
#Was this script started in the bin folder? if yes move out
if [ -d "../bin" ]; then

View file

@ -1,7 +1,7 @@
#!/bin/sh
#Move to the folder where ep-lite is installed
cd `dirname $0`
cd $(dirname $0)
#Was this script started in the bin folder? if yes move out
if [ -d "../bin" ]; then
@ -9,7 +9,7 @@ if [ -d "../bin" ]; then
fi
# npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
OUTDATED=`npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}'`
OUTDATED=$(npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}')
# echo $OUTDATED
if test -n "$OUTDATED"; then
echo "Plugins require update, doing this now..."

19
doc/api/hooks_client-side.md Normal file → Executable file
View file

@ -193,6 +193,16 @@ Called from: src/static/js/timeslider.js
There doesn't appear to be any example available of this particular hook being used, but it gets fired after the timeslider is all set up.
## goToRevisionEvent
Called from: src/static/js/broadcast.js
Things in context:
1. rev - The newRevision
This hook gets fired both on timeslider load (as timeslider shows a new revision) and when the new revision is showed to a user.
There doesn't appear to be any example available of this particular hook being used.
## userJoinOrUpdate
Called from: src/static/js/pad_userlist.js
@ -209,10 +219,11 @@ Things in context:
1. authorName - The user that wrote this message
2. author - The authorID of the user that wrote the message
2. text - the message text
3. sticky (boolean) - if you want the gritter notification bubble to fade out on its own or just sit there
3. timestamp - the timestamp of the chat message
4. timeStr - the timestamp as a formatted string
3. text - the message text
4. sticky (boolean) - if you want the gritter notification bubble to fade out on its own or just sit there
5. timestamp - the timestamp of the chat message
6. timeStr - the timestamp as a formatted string
7. duration - for how long in milliseconds should the gritter notification appear (0 to disable)
This hook is called on the client side whenever a chat message is received from the server. It can be used to create different notifications for chat messages.

View file

@ -11,6 +11,10 @@ The API is designed in a way, so you can reuse your existing user system with th
Take a look at [HTTP API client libraries](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries) to check if a library in your favorite programming language is available.
### OpenAPI
OpenAPI (formerly swagger) definitions are exposed under `/api/openapi.json` (latest) and `/api/{version}/openapi.json`. You can use official tools like [Swagger Editor](https://editor.swagger.io/) to view and explore them.
## Examples
### Example 1
@ -61,7 +65,7 @@ Portal submits content into new blog post
## Usage
### API version
The latest version is `1.2.13`
The latest version is `1.2.14`
The current version can be queried via /api.
@ -630,3 +634,14 @@ lists all pads on this epl instance
*Example returns:*
* `{code: 0, message:"ok", data: {padIDs: ["testPad", "thePadsOfTheOthers"]}}`
### Global
#### getStats()
* API >= 1.2.14
get stats of the etherpad instance
*Example returns*
* `{"code":0,"message":"ok","data":{"totalPads":3,"totalSessions": 2,"totalActivePads": 1}}`

18
doc/cookies.md Normal file
View file

@ -0,0 +1,18 @@
# Cookies
Cookies used by Etherpad.
| Name | Sample value | Domain | Path | Expires/max-age | Http-only| Secure | Usage description |
|-----------------|------------------------------------|-------------|------|-----------------|----------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|express_sid | s%3A7yCNjRmTW8ylGQ53I2IhOwYF9... | example.org | / | Session | true | true | Session ID of the [Express web framework](https://expressjs.com). When Etherpad is behind a reverse proxy, and an administrator wants to use session stickiness, he may use this cookie. If you are behind a reverse proxy, please remember to set `trustProxy: true` in `settings.json`. Set in [webaccess.js#L131](https://github.com/ether/etherpad-lite/blob/01497aa399690e44393e91c19917d11d025df71b/src/node/hooks/express/webaccess.js#L131). |
|language | en | example.org | / | Session | false | true | The language of the UI (e.g.: `en-GB`, `it`). Set in [pad_editor.js#L111](https://github.com/ether/etherpad-lite/blob/01497aa399690e44393e91c19917d11d025df71b/src/static/js/pad_editor.js#L111). |
|prefs / prefsHttp| %7B%22epThemesExtTheme%22... | example.org | /p | year 3000 | false | true | Client-side preferences (e.g.: font family, chat always visible, show authorship colors, ...). Set in [pad_cookie.js#L49](https://github.com/ether/etherpad-lite/blob/01497aa399690e44393e91c19917d11d025df71b/src/static/js/pad_cookie.js#L49). `prefs` is used if Etherpad is accessed over HTTPS, `prefsHttp` if accessed over HTTP. For more info see https://github.com/ether/etherpad-lite/issues/3179. |
|token | t.tFzkihhhBf4xKEpCK3PU | example.org | / | 60 days | false | true | A random token representing the author, of the form `t.randomstring_of_lenght_20`. The random string is generated by the client, at ([pad.js#L55-L66](https://github.com/ether/etherpad-lite/blob/01497aa399690e44393e91c19917d11d025df71b/src/static/js/pad.js#L55-L66)). This cookie is always set by the client (at [pad.js#L153-L158](https://github.com/ether/etherpad-lite/blob/01497aa399690e44393e91c19917d11d025df71b/src/static/js/pad.js#L153-L158)) without any solicitation from the server. It is used for all the pads accessed via the web UI (not used for the HTTP API). On the server side, its value is accessed at [SecurityManager.js#L33](https://github.com/ether/etherpad-lite/blob/01497aa399690e44393e91c19917d11d025df71b/src/node/db/SecurityManager.js#L33).|
For more info, visit the related discussion at https://github.com/ether/etherpad-lite/issues/3563.
Etherpad HTTP API clients may make use (if they choose so) to send another cookie:
| Name | Sample value | Domain | Usage description |
|-----------------|------------------------------------|-------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|sessionID | s.1c70968b333b25476a2c7bdd0e0bed17 | example.org | Sessions can be created between a group and an author. This allows an author to access more than one group. The sessionID will be set as a cookie to the client and is valid until a certain date. The session cookie can also contain multiple comma-separated sessionIDs, allowing a user to edit pads in different groups at the same time. More info - https://github.com/ether/etherpad-lite/blob/develop/doc/api/http_api.md#session |

View file

@ -16,6 +16,7 @@ docker pull etherpad/etherpad:1.8.0
If you want to use a personalized settings file, **you will have to rebuild your image**.
All of the following instructions are as a member of the `docker` group.
By default, the Etherpad Docker image is built and run in `production` mode: no development dependencies are installed, and asset bundling speeds up page load time.
### Rebuilding with custom settings
Edit `<BASEDIR>/settings.json.docker` at your will. When rebuilding the image, this file will be copied inside your image and renamed to `setting.json`.
@ -51,28 +52,143 @@ And point your browser to `http://<YOUR_IP>:<DESIRED_PORT>`
## Options available by default
The `settings.json.docker` available by default enables some configuration to be set from the environment.
The `settings.json.docker` available by default allows to control almost every setting via environment variables.
Available options:
### General
| Variable | Description | Default |
| ------------------ | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TITLE` | The name of the instance | `Etherpad` |
| `FAVICON` | favicon default name, or a fully specified URL to your own favicon | `favicon.ico` |
| `DEFAULT_PAD_TEXT` | The default text of a pad | `Welcome to Etherpad! This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents! Get involved with Etherpad at https://etherpad.org` |
| `IP` | IP which etherpad should bind at. Change to `::` for IPv6 | `0.0.0.0` |
| `PORT` | port which etherpad should bind at | `9001` |
| `ADMIN_PASSWORD` | the password for the `admin` user (leave unspecified if you do not want to create it) | |
| `USER_PASSWORD` | the password for the first user `user` (leave unspecified if you do not want to create it) | |
### Database
| Variable | Description | Default |
| ------------- | -------------------------------------------------------------- | --------------------------------------------------------------------- |
| `DB_TYPE` | a database supported by https://www.npmjs.com/package/ueberdb2 | not set, thus will fall back to `DirtyDB` (please choose one instead) |
| `DB_HOST` | the host of the database | |
| `DB_PORT` | the port of the database | |
| `DB_NAME` | the database name | |
| `DB_USER` | a database user with sufficient permissions to create tables | |
| `DB_PASS` | the password for the database username | |
| `DB_CHARSET` | the character set for the tables (only required for MySQL) | |
| `DB_FILENAME` | in case `DB_TYPE` is `DirtyDB`, the database filename. | `var/dirty.db` |
If your database needs additional settings, you will have to use a personalized `settings.json.docker` and rebuild the container (or otherwise put the updated `settings.json` inside your image).
### Pad Options
| Variable | Description | Default |
| -------------------------------- | ----------- | ------- |
| `PAD_OPTIONS_NO_COLORS` | | `false` |
| `PAD_OPTIONS_SHOW_CONTROLS` | | `true` |
| `PAD_OPTIONS_SHOW_CHAT` | | `true` |
| `PAD_OPTIONS_SHOW_LINE_NUMBERS` | | `true` |
| `PAD_OPTIONS_USE_MONOSPACE_FONT` | | `false` |
| `PAD_OPTIONS_USER_NAME` | | `false` |
| `PAD_OPTIONS_USER_COLOR` | | `false` |
| `PAD_OPTIONS_RTL` | | `false` |
| `PAD_OPTIONS_ALWAYS_SHOW_CHAT` | | `false` |
| `PAD_OPTIONS_CHAT_AND_USERS` | | `false` |
| `PAD_OPTIONS_LANG` | | `en-gb` |
### Shortcuts
| Variable | Description | Default |
| ----------------------------------- | ------------------------------------------------ | ------- |
| `PAD_SHORTCUTS_ENABLED_ALT_F9` | focus on the File Menu and/or editbar | `true` |
| `PAD_SHORTCUTS_ENABLED_ALT_C` | focus on the Chat window | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_S` | save a revision | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_Z` | undo/redo | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_Y` | redo | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_I` | italic | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_B` | bold | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_U` | underline | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_H` | backspace | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_5` | strike through | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_1` | ordered list | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_2` | shows a gritter popup showing a line author | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_L` | unordered list | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_N` | ordered list | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_C` | clear authorship | `true` |
| `PAD_SHORTCUTS_ENABLED_DELETE` | | `true` |
| `PAD_SHORTCUTS_ENABLED_RETURN` | | `true` |
| `PAD_SHORTCUTS_ENABLED_ESC` | in mozilla versions 14-19 avoid reconnecting pad | `true` |
| `PAD_SHORTCUTS_ENABLED_TAB` | indent | `true` |
| `PAD_SHORTCUTS_ENABLED_CTRL_HOME` | scroll to top of pad | `true` |
| `PAD_SHORTCUTS_ENABLED_PAGE_UP` | | `true` |
| `PAD_SHORTCUTS_ENABLED_PAGE_DOWN` | | `true` |
### Skins
You can use the UI skin variants builder at `/p/test#skinvariantsbuilder`
For the colibris skin only, you can choose how to render the three main containers:
* toolbar (top menu with icons)
* editor (containing the text of the pad)
* background (area outside of editor, mostly visible when using page style)
For each of the 3 containers you can choose 4 color combinations:
* super-light
* light
* dark
* super-dark
For the editor container, you can also make it full width by adding `full-width-editor` variant (by default editor is rendered as a page, with a max-width of 900px).
| Variable | Description | Default |
| --------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------- |
| `SKIN_NAME` | either `no-skin`, `colibris` or an existing directory under `src/static/skins` | `colibris` |
| `SKIN_VARIANTS` | multiple skin variants separated by spaces | `super-light-toolbar super-light-editor light-background` |
### Logging
| Variable | Description | Default |
| -------------------- | ---------------------------------------------------- | ------- |
| `LOGLEVEL` | valid values are `DEBUG`, `INFO`, `WARN` and `ERROR` | `INFO` |
| `DISABLE_IP_LOGGING` | Privacy: disable IP logging | `false` |
### Advanced
| Variable | Description | Default |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ |
| `SHOW_SETTINGS_IN_ADMIN_PAGE` | hide/show the settings.json in admin page | `true` |
| `TRUST_PROXY` | set to `true` if you are using a reverse proxy in front of Etherpad (for example: Traefik for SSL termination via Let's Encrypt). This will affect security and correctness of the logs if not done | `false` |
| `IMPORT_MAX_FILE_SIZE` | maximum allowed file size when importing a pad, in bytes. | `52428800` (50 MB) |
| `IMPORT_EXPORT_MAX_REQ_PER_IP` | maximum number of import/export calls per IP. | `10` |
| `IMPORT_EXPORT_RATE_LIMIT_WINDOW` | the call rate for import/export requests will be estimated in this time window (in milliseconds) | `90000` |
| `SUPPRESS_ERRORS_IN_PAD_TEXT` | Should we suppress errors from being visible in the default Pad Text? | `false` |
| `REQUIRE_SESSION` | If this option is enabled, a user must have a session to access pads. This effectively allows only group pads to be accessed. | `false` |
| `EDIT_ONLY` | Users may edit pads but not create new ones. Pad creation is only via the API. This applies both to group pads and regular pads. | `false` |
| `SESSION_NO_PASSWORD` | If set to true, those users who have a valid session will automatically be granted access to password protected pads. | `false` |
| `MINIFY` | If true, all css & js will be minified before sending to the client. This will improve the loading performance massively, but makes it difficult to debug the javascript/css | `true` |
| `MAX_AGE` | How long may clients use served javascript code (in seconds)? Not setting this may cause problems during deployment. Set to 0 to disable caching. | `21600` (6 hours) |
| `ABIWORD` | Absolute path to the Abiword executable. Abiword is needed to get advanced import/export features of pads. Setting it to null disables Abiword and will only allow plain text and HTML import/exports. | `null` |
| `SOFFICE` | This is the absolute path to the soffice executable. LibreOffice can be used in lieu of Abiword to export pads. Setting it to null disables LibreOffice exporting. | `null` |
| `TIDY_HTML` | Path to the Tidy executable. Tidy is used to improve the quality of exported pads. Setting it to null disables Tidy. | `null` |
| `ALLOW_UNKNOWN_FILE_ENDS` | Allow import of file types other than the supported ones: txt, doc, docx, rtf, odt, html & htm | `true` |
| `REQUIRE_AUTHENTICATION` | This setting is used if you require authentication of all users. Note: "/admin" always requires authentication. | `false` |
| `REQUIRE_AUTHORIZATION` | Require authorization by a module, or a user with is_admin set, see below. | `false` |
| `AUTOMATIC_RECONNECTION_TIMEOUT` | Time (in seconds) to automatically reconnect pad when a "Force reconnect" message is shown to user. Set to 0 to disable automatic reconnection. | `0` |
| `FOCUS_LINE_PERCENTAGE_ABOVE` | Percentage of viewport height to be additionally scrolled. e.g. 0.5, to place caret line in the middle of viewport, when user edits a line above of the viewport. Set to 0 to disable extra scrolling | `0` |
| `FOCUS_LINE_PERCENTAGE_BELOW` | Percentage of viewport height to be additionally scrolled. e.g. 0.5, to place caret line in the middle of viewport, when user edits a line below of the viewport. Set to 0 to disable extra scrolling | `0` |
| `FOCUS_LINE_PERCENTAGE_ARROW_UP` | Percentage of viewport height to be additionally scrolled when user presses arrow up in the line of the top of the viewport. Set to 0 to let the scroll to be handled as default by Etherpad | `0` |
| `FOCUS_LINE_DURATION` | Time (in milliseconds) used to animate the scroll transition. Set to 0 to disable animation | `0` |
| `FOCUS_LINE_CARET_SCROLL` | Flag to control if it should scroll when user places the caret in the last line of the viewport | `false` |
| `LOAD_TEST` | Allow Load Testing tools to hit the Etherpad Instance. WARNING: this will disable security on the instance. | `false` |
| `EXPOSE_VERSION` | Expose Etherpad version in the web interface and in the Server http header. Do not enable on production machines. | `false` |
* `TITLE`: The name of the instance
* `FAVICON`: favicon default name, or a fully specified URL to your own favicon
* `SKIN_NAME`: either `no-skin`, `colibris` or an existing directory under `src/static/skins`.
* `IP`: IP which etherpad should bind at. Change to `::` for IPv6
* `PORT`: port which etherpad should bind at
* `SHOW_SETTINGS_IN_ADMIN_PAGE`: hide/show the settings.json in admin page
* `DB_TYPE`: a database supported by https://www.npmjs.com/package/ueberdb2
* `DB_HOST`: the host of the database
* `DB_PORT`: the port of the database
* `DB_NAME`: the database name
* `DB_USER`: a database user with sufficient permissions to create tables
* `DB_PASS`: the password for the database username
* `DB_CHARSET`: the character set for the tables (only required for MySQL)
* `DB_FILENAME`: in case `DB_TYPE` is `DirtyDB`, the database filename. Default: `var/dirty.db`
* `ADMIN_PASSWORD`: the password for the `admin` user (leave unspecified if you do not want to create it)
* `USER_PASSWORD`: the password for the first user `user` (leave unspecified if you do not want to create it)
* `TRUST_PROXY`: set to `true` if you are using a reverse proxy in front of Etherpad (for example: Traefik for SSL termination via Let's Encrypt). This will affect security and correctness of the logs if not done
* `LOGLEVEL`: valid values are `DEBUG`, `INFO`, `WARN` and `ERROR`
### Examples
@ -100,3 +216,12 @@ docker run -d \
-e 'ADMIN_PASSWORD=supersecret' \
etherpad/etherpad
```
Run a test instance running DirtyDB on a persistent volume:
```
docker run -d \
-v etherpad_data:/opt/etherpad-lite/var \
-p 9001:9001 \
etherpad/etherpad
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 KiB

View file

@ -5,4 +5,5 @@
@include skins
@include api/api
@include plugins
@include cookies
@include database

View file

@ -115,7 +115,7 @@ Your plugin must also contain a [package definition file](https://docs.npmjs.com
"author": "USERNAME (REAL NAME) <MAIL@EXAMPLE.COM>",
"contributors": [],
"dependencies": {"MODULE": "0.3.20"},
"engines": { "node": ">= 8.9.0"}
"engines": { "node": ">= 10.13.0"}
}
```

View file

@ -65,6 +65,13 @@
* "password": "${PASSW}" // if PASSW is not defined would result in password === null
* "password": "${PASSW:}" // if PASSW is not defined would result in password === ''
*
* If you want to use an empty value (null) as default value for a variable,
* simply do not set it, without putting any colons: "${ABIWORD}".
*
* 3) if you want to use newlines in the default value of a string parameter,
* use "\n" as usual.
*
* "defaultPadText" : "${DEFAULT_PAD_TEXT}Line 1\nLine 2"
*/
{
/*
@ -92,7 +99,40 @@
"skinName": "${SKIN_NAME:colibris}",
/*
* IP and port which etherpad should bind at
* Skin Variants
*
* Use the UI skin variants builder at /p/test#skinvariantsbuilder
*
* For the colibris skin only, you can choose how to render the three main
* containers:
* - toolbar (top menu with icons)
* - editor (containing the text of the pad)
* - background (area outside of editor, mostly visible when using page style)
*
* For each of the 3 containers you can choose 4 color combinations:
* super-light, light, dark, super-dark.
*
* For example, to make the toolbar dark, you will include "dark-toolbar" into
* skinVariants.
*
* You can provide multiple skin variants separated by spaces. Default
* skinVariant is "super-light-toolbar super-light-editor light-background".
*
* For the editor container, you can also make it full width by adding
* "full-width-editor" variant (by default editor is rendered as a page, with
* a max-width of 900px).
*/
"skinVariants": "${SKIN_VARIANTS:super-light-toolbar super-light-editor light-background}",
/*
* IP and port which Etherpad should bind at.
*
* Binding to a Unix socket is also supported: just use an empty string for
* the ip, and put the full path to the socket in the port parameter.
*
* EXAMPLE USING UNIX SOCKET:
* "ip": "", // <-- has to be an empty string
* "port" : "/somepath/etherpad.socket", // <-- path to a Unix socket
*/
"ip": "${IP:0.0.0.0}",
"port": "${PORT:9001}",
@ -152,7 +192,7 @@
/*
* The default text of a pad
*/
"defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n",
"defaultPadText" : "${DEFAULT_PAD_TEXT:Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at https:\/\/etherpad.org\n}",
/*
* Default Pad behavior.
@ -160,57 +200,57 @@
* Change them if you want to override.
*/
"padOptions": {
"noColors": false,
"showControls": true,
"showChat": true,
"showLineNumbers": true,
"useMonospaceFont": false,
"userName": false,
"userColor": false,
"rtl": false,
"alwaysShowChat": false,
"chatAndUsers": false,
"lang": "en-gb"
"noColors": "${PAD_OPTIONS_NO_COLORS:false}",
"showControls": "${PAD_OPTIONS_SHOW_CONTROLS:true}",
"showChat": "${PAD_OPTIONS_SHOW_CHAT:true}",
"showLineNumbers": "${PAD_OPTIONS_SHOW_LINE_NUMBERS:true}",
"useMonospaceFont": "${PAD_OPTIONS_USE_MONOSPACE_FONT:false}",
"userName": "${PAD_OPTIONS_USER_NAME:false}",
"userColor": "${PAD_OPTIONS_USER_COLOR:false}",
"rtl": "${PAD_OPTIONS_RTL:false}",
"alwaysShowChat": "${PAD_OPTIONS_ALWAYS_SHOW_CHAT:false}",
"chatAndUsers": "${PAD_OPTIONS_CHAT_AND_USERS:false}",
"lang": "${PAD_OPTIONS_LANG:en-gb}"
},
/*
* Pad Shortcut Keys
*/
"padShortcutEnabled" : {
"altF9": true, /* focus on the File Menu and/or editbar */
"altC": true, /* focus on the Chat window */
"cmdShift2": true, /* shows a gritter popup showing a line author */
"delete": true,
"return": true,
"esc": true, /* in mozilla versions 14-19 avoid reconnecting pad */
"cmdS": true, /* save a revision */
"tab": true, /* indent */
"cmdZ": true, /* undo/redo */
"cmdY": true, /* redo */
"cmdI": true, /* italic */
"cmdB": true, /* bold */
"cmdU": true, /* underline */
"cmd5": true, /* strike through */
"cmdShiftL": true, /* unordered list */
"cmdShiftN": true, /* ordered list */
"cmdShift1": true, /* ordered list */
"cmdShiftC": true, /* clear authorship */
"cmdH": true, /* backspace */
"ctrlHome": true, /* scroll to top of pad */
"pageUp": true,
"pageDown": true
"altF9": "${PAD_SHORTCUTS_ENABLED_ALT_F9:true}", /* focus on the File Menu and/or editbar */
"altC": "${PAD_SHORTCUTS_ENABLED_ALT_C:true}", /* focus on the Chat window */
"cmdShift2": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_2:true}", /* shows a gritter popup showing a line author */
"delete": "${PAD_SHORTCUTS_ENABLED_DELETE:true}",
"return": "${PAD_SHORTCUTS_ENABLED_RETURN:true}",
"esc": "${PAD_SHORTCUTS_ENABLED_ESC:true}", /* in mozilla versions 14-19 avoid reconnecting pad */
"cmdS": "${PAD_SHORTCUTS_ENABLED_CMD_S:true}", /* save a revision */
"tab": "${PAD_SHORTCUTS_ENABLED_TAB:true}", /* indent */
"cmdZ": "${PAD_SHORTCUTS_ENABLED_CMD_Z:true}", /* undo/redo */
"cmdY": "${PAD_SHORTCUTS_ENABLED_CMD_Y:true}", /* redo */
"cmdI": "${PAD_SHORTCUTS_ENABLED_CMD_I:true}", /* italic */
"cmdB": "${PAD_SHORTCUTS_ENABLED_CMD_B:true}", /* bold */
"cmdU": "${PAD_SHORTCUTS_ENABLED_CMD_U:true}", /* underline */
"cmd5": "${PAD_SHORTCUTS_ENABLED_CMD_5:true}", /* strike through */
"cmdShiftL": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_L:true}", /* unordered list */
"cmdShiftN": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_N:true}", /* ordered list */
"cmdShift1": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_1:true}", /* ordered list */
"cmdShiftC": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_C:true}", /* clear authorship */
"cmdH": "${PAD_SHORTCUTS_ENABLED_CMD_H:true}", /* backspace */
"ctrlHome": "${PAD_SHORTCUTS_ENABLED_CTRL_HOME:true}", /* scroll to top of pad */
"pageUp": "${PAD_SHORTCUTS_ENABLED_PAGE_UP:true}",
"pageDown": "${PAD_SHORTCUTS_ENABLED_PAGE_DOWN:true}"
},
/*
* Should we suppress errors from being visible in the default Pad Text?
*/
"suppressErrorsInPadText": false,
"suppressErrorsInPadText": "${SUPPRESS_ERRORS_IN_PAD_TEXT:false}",
/*
* If this option is enabled, a user must have a session to access pads.
* This effectively allows only group pads to be accessed.
*/
"requireSession": false,
"requireSession": "${REQUIRE_SESSION:false}",
/*
* Users may edit pads but not create new ones.
@ -218,13 +258,13 @@
* Pad creation is only via the API.
* This applies both to group pads and regular pads.
*/
"editOnly": false,
"editOnly": "${EDIT_ONLY:false}",
/*
* If set to true, those users who have a valid session will automatically be
* granted access to password protected pads.
*/
"sessionNoPassword": false,
"sessionNoPassword": "${SESSION_NO_PASSWORD:false}",
/*
* If true, all css & js will be minified before sending to the client.
@ -232,7 +272,7 @@
* This will improve the loading performance massively, but makes it difficult
* to debug the javascript/css
*/
"minify": true,
"minify": "${MINIFY:true}",
/*
* How long may clients use served javascript code (in seconds)?
@ -240,7 +280,7 @@
* Not setting this may cause problems during deployment.
* Set to 0 to disable caching.
*/
"maxAge": 21600, // 60 * 60 * 6 = 6 hours
"maxAge": "${MAX_AGE:21600}", // 60 * 60 * 6 = 6 hours
/*
* Absolute path to the Abiword executable.
@ -249,7 +289,7 @@
* it to null disables Abiword and will only allow plain text and HTML
* import/exports.
*/
"abiword": null,
"abiword": "${ABIWORD}",
/*
* This is the absolute path to the soffice executable.
@ -257,7 +297,7 @@
* LibreOffice can be used in lieu of Abiword to export pads.
* Setting it to null disables LibreOffice exporting.
*/
"soffice": null,
"soffice": "${SOFFICE}",
/*
* Path to the Tidy executable.
@ -265,25 +305,25 @@
* Tidy is used to improve the quality of exported pads.
* Setting it to null disables Tidy.
*/
"tidyHtml": null,
"tidyHtml": "${TIDY_HTML}",
/*
* Allow import of file types other than the supported ones:
* txt, doc, docx, rtf, odt, html & htm
*/
"allowUnknownFileEnds": true,
"allowUnknownFileEnds": "${ALLOW_UNKNOWN_FILE_ENDS:true}",
/*
* This setting is used if you require authentication of all users.
*
* Note: "/admin" always requires authentication.
*/
"requireAuthentication": false,
"requireAuthentication": "${REQUIRE_AUTHENTICATION:false}",
/*
* Require authorization by a module, or a user with is_admin set, see below.
*/
"requireAuthorization": false,
"requireAuthorization": "${REQUIRE_AUTHORIZATION:false}",
/*
* When you use NGINX or another proxy/load-balancer set this to true.
@ -299,7 +339,7 @@
/*
* Privacy: disable IP logging
*/
"disableIPlogging": false,
"disableIPlogging": "${DISABLE_IP_LOGGING:false}",
/*
* Time (in seconds) to automatically reconnect pad when a "Force reconnect"
@ -307,7 +347,7 @@
*
* Set to 0 to disable automatic reconnection.
*/
"automaticReconnectionTimeout": 0,
"automaticReconnectionTimeout": "${AUTOMATIC_RECONNECTION_TIMEOUT:0}",
/*
* By default, when caret is moved out of viewport, it scrolls the minimum
@ -325,21 +365,21 @@
* Set to 0 to disable extra scrolling
*/
"percentage": {
"editionAboveViewport": 0,
"editionBelowViewport": 0
"editionAboveViewport": "${FOCUS_LINE_PERCENTAGE_ABOVE:0}",
"editionBelowViewport": "${FOCUS_LINE_PERCENTAGE_BELOW:0}"
},
/*
* Time (in milliseconds) used to animate the scroll transition.
* Set to 0 to disable animation
*/
"duration": 0,
"duration": "${FOCUS_LINE_DURATION:0}",
/*
* Flag to control if it should scroll when user places the caret in the
* last line of the viewport
*/
"scrollWhenCaretIsInTheLastLineOfViewport": false,
"scrollWhenCaretIsInTheLastLineOfViewport": "${FOCUS_LINE_CARET_SCROLL:false}",
/*
* Percentage of viewport height to be additionally scrolled when user
@ -347,7 +387,7 @@
*
* Set to 0 to let the scroll to be handled as default by Etherpad
*/
"percentageToScrollWhenUserPressesArrowUp": 0
"percentageToScrollWhenUserPressesArrowUp": "${FOCUS_LINE_PERCENTAGE_ARROW_UP:0}"
},
/*
@ -386,7 +426,7 @@
*
* WARNING: this will disable security on the instance.
*/
"loadTest": false,
"loadTest": "${LOAD_TEST:false}",
/*
* Disable indentation on new line when previous line ends with some special
@ -397,6 +437,31 @@
"indentationOnNewLine": false,
*/
/*
* From Etherpad 1.8.3 onwards, import and export of pads is always rate
* limited.
*
* The default is to allow at most 10 requests per IP in a 90 seconds window.
* After that the import/export request is rejected.
*
* See https://github.com/nfriedly/express-rate-limit for more options
*/
"importExportRateLimiting": {
// duration of the rate limit window (milliseconds)
"windowMs": "${IMPORT_EXPORT_RATE_LIMIT_WINDOW:90000}",
// maximum number of requests per IP to allow during the rate limit window
"max": "${IMPORT_EXPORT_MAX_REQ_PER_IP:10}"
},
/*
* From Etherpad 1.8.3 onwards, the maximum allowed size for a single imported
* file is always bounded.
*
* File size is specified in bytes. Default is 50 MB.
*/
"importMaxFileSize": "${IMPORT_MAX_FILE_SIZE:52428800}", // 50 * 1024 * 1024
/*
* Toolbar buttons configuration.
*
@ -427,7 +492,7 @@
*
* Do not enable on production machines.
*/
"exposeVersion": false,
"exposeVersion": "${EXPOSE_VERSION:false}",
/*
* The log level we are using.

View file

@ -56,6 +56,13 @@
* "password": "${PASSW}" // if PASSW is not defined would result in password === null
* "password": "${PASSW:}" // if PASSW is not defined would result in password === ''
*
* If you want to use an empty value (null) as default value for a variable,
* simply do not set it, without putting any colons: "${ABIWORD}".
*
* 3) if you want to use newlines in the default value of a string parameter,
* use "\n" as usual.
*
* "defaultPadText" : "${DEFAULT_PAD_TEXT}Line 1\nLine 2"
*/
{
/*
@ -80,10 +87,43 @@
* - "colibris": the new experimental skin (since Etherpad 1.8), candidate to
* become the default in Etherpad 2.0
*/
"skinName": "no-skin",
"skinName": "colibris",
/*
* IP and port which etherpad should bind at
* Skin Variants
*
* Use the UI skin variants builder at /p/test#skinvariantsbuilder
*
* For the colibris skin only, you can choose how to render the three main
* containers:
* - toolbar (top menu with icons)
* - editor (containing the text of the pad)
* - background (area outside of editor, mostly visible when using page style)
*
* For each of the 3 containers you can choose 4 color combinations:
* super-light, light, dark, super-dark.
*
* For example, to make the toolbar dark, you will include "dark-toolbar" into
* skinVariants.
*
* You can provide multiple skin variants separated by spaces. Default
* skinVariant is "super-light-toolbar super-light-editor light-background".
*
* For the editor container, you can also make it full width by adding
* "full-width-editor" variant (by default editor is rendered as a page, with
* a max-width of 900px).
*/
"skinVariants": "super-light-toolbar super-light-editor light-background",
/*
* IP and port which Etherpad should bind at.
*
* Binding to a Unix socket is also supported: just use an empty string for
* the ip, and put the full path to the socket in the port parameter.
*
* EXAMPLE USING UNIX SOCKET:
* "ip": "", // <-- has to be an empty string
* "port" : "/somepath/etherpad.socket", // <-- path to a Unix socket
*/
"ip": "0.0.0.0",
"port": 9001,
@ -155,7 +195,7 @@
/*
* The default text of a pad
*/
"defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n",
"defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at https:\/\/etherpad.org\n",
/*
* Default Pad behavior.
@ -402,6 +442,31 @@
"indentationOnNewLine": false,
*/
/*
* From Etherpad 1.8.3 onwards, import and export of pads is always rate
* limited.
*
* The default is to allow at most 10 requests per IP in a 90 seconds window.
* After that the import/export request is rejected.
*
* See https://github.com/nfriedly/express-rate-limit for more options
*/
"importExportRateLimiting": {
// duration of the rate limit window (milliseconds)
"windowMs": 90000,
// maximum number of requests per IP to allow during the rate limit window
"max": 10
},
/*
* From Etherpad 1.8.3 onwards, the maximum allowed size for a single imported
* file is always bounded.
*
* File size is specified in bytes. Default is 50 MB.
*/
"importMaxFileSize": 52428800, // 50 * 1024 * 1024
/*
* Toolbar buttons configuration.
*

View file

@ -24,6 +24,6 @@
"expressCreateServer": "ep_etherpad-lite/node/hooks/express/adminsettings:expressCreateServer",
"socketio": "ep_etherpad-lite/node/hooks/express/adminsettings:socketio" }
},
{ "name": "swagger", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/swagger:expressCreateServer" } }
{ "name": "openapi", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/openapi:expressCreateServer" } }
]
}

View file

@ -7,10 +7,38 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="16"
height="16"
id="svg2987">
id="svg2987"
sodipodi:docname="etherpad_icon.svg"
inkscape:version="0.92.1 r15371"
inkscape:export-filename="/home/websites/etherpad-lite/src/static/favicon.ico.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1043"
id="namedview21"
showgrid="false"
inkscape:zoom="5.6568543"
inkscape:cx="71.511303"
inkscape:cy="6.5274382"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1-3"
inkscape:snap-object-midpoints="true" />
<defs
id="defs2989" />
<metadata
@ -28,65 +56,88 @@
<g
transform="translate(0,-1036.3618)"
id="layer1">
<path
d="m 5.0621446,1039.5621 c 5.6960494,0 6.2053964,0 6.2053964,0 l -0.0238,-0.8981 -3.131226,-0.018 -3.1312269,-0.018 z"
id="path3806"
style="fill:#464646;fill-opacity:1;stroke:#464646;stroke-width:0.68021488;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 12.4892,1052.3561 0,-2.1733 2.173211,0 0,2.1733 z"
id="path3770-7-0-9"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
<path
d="m 1.6231475,1052.3561 0,-2.1733 2.1732107,0 0,2.1733 z"
id="path3770-7-0"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
<path
d="m 2.7097528,1041.49 2.1732106,-1.0866 0,-2.1251"
id="path3775"
style="fill:none;stroke:#aeaeae;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 13.575806,1041.49 -2.17321,-1.0866 0.0065,-2.0833"
id="path3777"
style="fill:none;stroke:#aeaeae;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 1.6231475,1041.49 c 0.014561,3.8432 -0.019342,6.178 0,7.6063 0.030207,2.23 0,2.1732 0,2.1732 1.1853886,0 1.1853886,0 1.1853886,1.0866 l 10.6684869,0 c 0,-1.0866 0,-1.0866 1.185388,-1.0866 0,-3.26 0,-6.5198 0,-9.7795 z"
id="path3019"
style="fill:#464646;fill-opacity:1;stroke:none" />
<path
d="m 3.7963582,1050.1828 c 6.3865768,0 8.6928418,0 8.6928418,0"
id="path3023"
style="fill:none;stroke:#09c900;stroke-width:1.07546031;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 3.7963582,1048.0095 8.6928418,0"
id="path3025"
style="fill:none;stroke:#fcc200;stroke-width:1.1616298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 3.7963582,1045.8365 8.6928418,0"
id="path3027"
style="fill:none;stroke:#00a3fb;stroke-width:1.1616298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 3.7963582,1043.6632 8.6928418,0"
id="path3029"
style="fill:none;stroke:#ff4091;stroke-width:1.1616298;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 1.6231475,1042.5766 0,-4.3464 1.0866053,0 0,4.3464 z"
id="path3770"
style="fill:#464646;fill-opacity:1;stroke:none" />
<path
d="m 13.575806,1042.5766 0,-4.3464 1.086605,0 0,4.3464 z"
id="path3770-1"
style="fill:#464646;fill-opacity:1;stroke:none" />
<path
d="m 1.6231475,1038.2302 0,-1.0867 1.0866053,0 0,1.0867 z"
id="path3770-7"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
<path
d="m 13.575806,1038.2302 0,-1.0867 1.086605,0 0,1.0867 z"
id="path3770-4"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
<path
d="m 5.3413804,1038.5358 c 2.6160566,-2.5761 3.1649988,-2.3796 5.6028086,0.018"
id="path3767"
style="fill:none;stroke:#464646;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<g
id="layer1-3"
transform="translate(16.860288,-0.33232922)">
<path
style="fill:#374256;fill-opacity:1;stroke:#374256;stroke-width:0.68021488;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-dasharray:none;stroke-opacity:1"
id="path3806-2-6"
d="m -11.806127,1039.8755 c 5.6960491,0 6.2053961,0 6.2053961,0 l -0.0238,-0.8981 -3.1312265,-0.018 -3.1312256,-0.018 z"
inkscape:connector-curvature="0" />
<path
style="fill:#b1b1b1;fill-opacity:1;stroke:none"
id="path3770-7-0-9-5"
d="m -4.3790729,1052.6695 v -2.1733 h 2.173211 v 2.1733 z"
inkscape:connector-curvature="0" />
<path
style="fill:#b1b1b1;fill-opacity:1;stroke:none"
id="path3770-7-0-6"
d="m -15.245124,1052.6695 v -2.1733 h 2.173211 v 2.1733 z"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#aeaeae;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-dasharray:none;stroke-opacity:1"
id="path3775-0-9"
d="m -14.158519,1041.8034 2.173211,-1.0866 v -2.1251"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#aeaeae;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-dasharray:none;stroke-opacity:1"
id="path3777-6-3"
d="m -3.2924669,1041.8034 -2.173209,-1.0866 0.0065,-2.0833"
inkscape:connector-curvature="0" />
<path
style="fill:#374256;fill-opacity:1;stroke:none"
id="path3019-7"
d="m -15.245124,1041.8034 c 0.01456,3.8432 -0.01934,6.178 0,7.6063 0.03021,2.23 0,2.1732 0,2.1732 1.185389,0 1.185389,0 1.185389,1.0866 h 10.6684851 c 0,-1.0866 0,-1.0866 1.185388,-1.0866 0,-3.26 0,-6.5198 0,-9.7795 z"
inkscape:connector-curvature="0" />
<path
style="fill:#374256;fill-opacity:1;stroke:none"
id="path3770-45"
d="m -15.245124,1042.89 v -4.3464 h 1.086605 v 4.3464 z"
inkscape:connector-curvature="0" />
<path
style="fill:#374256;fill-opacity:1;stroke:none"
id="path3770-1-2"
d="m -3.2924669,1042.89 v -4.3464 h 1.086605 v 4.3464 z"
inkscape:connector-curvature="0" />
<path
style="fill:#b1b1b1;fill-opacity:1;stroke:none"
id="path3770-7-5"
d="m -15.245124,1038.5436 v -1.0867 h 1.086605 v 1.0867 z"
inkscape:connector-curvature="0" />
<path
style="fill:#b1b1b1;fill-opacity:1;stroke:none"
id="path3770-4-4"
d="m -3.2924669,1038.5436 v -1.0867 h 1.086605 v 1.0867 z"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#374256;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-dasharray:none;stroke-opacity:1"
id="path3767-1-7"
d="m -11.526891,1038.8492 c 2.6160556,-2.5761 3.1649979,-2.3796 5.6028081,0.018"
inkscape:connector-curvature="0" />
<rect
style="fill:#80ecb6;fill-opacity:1;stroke:#80ecb6;stroke-width:0.52320504;stroke-miterlimit:3.5999999;stroke-dasharray:none;stroke-opacity:1"
id="rect4500-6-1-5-4"
width="9.8688822"
height="1.120591"
x="-13.611683"
y="1043.6783"
ry="0.037091393" />
<rect
style="fill:#ff9800;fill-opacity:1;stroke:#ff9800;stroke-width:0.47360843;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-dasharray:none;stroke-opacity:1"
id="rect4500-6-1-0-54-4"
width="8.859334"
height="1.0228429"
x="-13.54795"
y="1049.3197"
ry="0.033847291" />
<rect
style="fill:#f2f2f4;fill-opacity:1;stroke:#f2f2f4;stroke-width:0.41670763;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-dasharray:none;stroke-opacity:1"
id="rect4500-6-1-0-3-7-3"
width="6.1434402"
height="1.1418853"
x="-13.581941"
y="1046.5419"
ry="0.037786558" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -1,8 +1,8 @@
{
"@metadata": {
"authors": [
"Naudefj",
"Fwolff"
"Fwolff",
"Naudefj"
]
},
"index.newPad": "Nuwe pad",
@ -25,7 +25,6 @@
"pad.loading": "Laai...",
"pad.settings.myView": "My oorsig",
"pad.settings.fontType.normal": "Normaal",
"pad.settings.fontType.monospaced": "Monospasie",
"pad.settings.language": "Taal:",
"pad.importExport.import_export": "Voer in/uit",
"pad.importExport.import": "Laai enige tekslêer of dokument op",

View file

@ -1,16 +1,17 @@
{
"@metadata": {
"authors": [
"Ali1",
"Tux-tn",
"Alami",
"Meno25",
"Test Create account",
"محمد أحمد عبد الفتاح",
"Ali1",
"Haytham morsy",
"ديفيد",
"Meno25",
"Mido",
"Shbib Al-Subaie"
"Shbib Al-Subaie",
"Tala Ali",
"Test Create account",
"Tux-tn",
"ديفيد",
"محمد أحمد عبد الفتاح"
]
},
"index.newPad": "باد جديد",
@ -48,8 +49,6 @@
"pad.settings.rtlcheck": "قراءة المحتويات من اليمين إلى اليسار؟",
"pad.settings.fontType": "نوع الخط:",
"pad.settings.fontType.normal": "عادي",
"pad.settings.fontType.monospaced": "ثابت العرض",
"pad.settings.globalView": "الرؤية الشاملة",
"pad.settings.language": "اللغة:",
"pad.importExport.import_export": "استيراد/تصدير",
"pad.importExport.import": "تحميل أي ملف نصي أو وثيقة",
@ -129,7 +128,7 @@
"pad.userlist.guest": "ضيف",
"pad.userlist.deny": "رفض",
"pad.userlist.approve": "موافقة",
"pad.editbar.clearcolors": "مسح ألوان التأليف أو المستند بأكمله؟",
"pad.editbar.clearcolors": "مسح ألوان التأليف أو المستند بأكمله؟ هذا لا يمكن التراجع عنه",
"pad.impexp.importbutton": "الاستيراد الآن",
"pad.impexp.importing": "الاستيراد...",
"pad.impexp.confirmimport": "استيراد ملف سيؤدي للكتابة فوق النص الحالي بالباد. هل أنت متأكد من أنك تريد المتابعة؟",

View file

@ -39,8 +39,6 @@
"pad.settings.rtlcheck": "¿Lleer el conteníu de drecha a izquierda?",
"pad.settings.fontType": "Tipografía:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monoespaciada",
"pad.settings.globalView": "Vista global",
"pad.settings.language": "Llingua:",
"pad.importExport.import_export": "Importar/Esportar",
"pad.importExport.import": "Xubir cualquier ficheru o documentu de testu",
@ -120,7 +118,7 @@
"pad.userlist.guest": "Invitáu",
"pad.userlist.deny": "Refugar",
"pad.userlist.approve": "Aprobar",
"pad.editbar.clearcolors": "¿Llimpiar los colores d'autoría nel documentu ensembre?",
"pad.editbar.clearcolors": "¿Llimpiar los colores d'autoría nel documentu ensembre? Esto nun pue desfacese",
"pad.impexp.importbutton": "Importar agora",
"pad.impexp.importing": "Importando...",
"pad.impexp.confirmimport": "La importación d'un ficheru sustituirá'l testu actual del bloc. ¿Seguro que quies siguir?",

View file

@ -25,8 +25,6 @@
"pad.settings.linenocheck": "हरफ संख्या",
"pad.settings.fontType": "फन्ट प्रकार:",
"pad.settings.fontType.normal": "साधारण",
"pad.settings.fontType.monospaced": "मोनोस्पेस",
"pad.settings.globalView": "विश्वव्यापी दृष्य",
"pad.settings.language": "भाषा",
"pad.importExport.import_export": "आयात/निर्यात",
"pad.importExport.importSuccessful": "सफल!",

View file

@ -2,12 +2,12 @@
"@metadata": {
"authors": [
"AZISS",
"Khan27",
"Mushviq Abdulla",
"Wertuose",
"Mastizada",
"Archaeodontosaurus",
"Neriman2003"
"Khan27",
"Mastizada",
"Mushviq Abdulla",
"Neriman2003",
"Wertuose"
]
},
"index.newPad": "Yeni lövhə",
@ -45,8 +45,6 @@
"pad.settings.rtlcheck": "Mühtəviyyat sağdan sola doğru oxunsunmu?",
"pad.settings.fontType": "Şriftin tipi:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monoboşluq",
"pad.settings.globalView": "Ümumi görünüş",
"pad.settings.language": "Dil:",
"pad.importExport.import_export": "İdxal/İxrac",
"pad.importExport.import": "Hər hansı bir mətn faylı və ya sənəd yüklə",
@ -92,6 +90,8 @@
"pad.chat": "Söhbət",
"pad.chat.title": "Bu lövhə üçün çat açın.",
"pad.chat.loadmessages": "Daha çox mesaj yüklə",
"pad.chat.stick.title": "Yazışmanı ekrana kilidlə",
"pad.chat.writeMessage.placeholder": "Mesajını bura yaz",
"timeslider.pageTitle": "{{appTitle}} Vaxt cədvəli",
"timeslider.toolbar.returnbutton": "Lövhəyə qayıt",
"timeslider.toolbar.authors": "Müəlliflər:",

View file

@ -1,11 +1,11 @@
{
"@metadata": {
"authors": [
"Amir a57",
"Mousa",
"Koroğlu",
"Alp Er Tunqa",
"Ilğım"
"Amir a57",
"Ilğım",
"Koroğlu",
"Mousa"
]
},
"index.newPad": "یئنی یادداشت دفترچه سی",
@ -43,8 +43,6 @@
"pad.settings.rtlcheck": "ایچینده کیلری ساغدان یوخسا سولدان اوخوسون؟",
"pad.settings.fontType": "قلم نوعی",
"pad.settings.fontType.normal": "نورمال",
"pad.settings.fontType.monospaced": "مونو اسپئیس",
"pad.settings.globalView": "سراسر گورونتو",
"pad.settings.language": "دیل:",
"pad.importExport.import_export": "ایچری توکمه /ائشیگه توکمه",
"pad.importExport.import": "سند یا دا متنی پرونده یوکله",

View file

@ -38,8 +38,6 @@
"pad.settings.rtlcheck": "خواندن محتوا از راست به چپ؟",
"pad.settings.fontType": "نوع قلم:",
"pad.settings.fontType.normal": "نرمال",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "نمای سراسری",
"pad.settings.language": "زبان:",
"pad.importExport.import_export": "درون‌ریزی/برون‌ریزی",
"pad.importExport.import": "بارگذاری پرونده‌ی متنی یا سند",

View file

@ -2,8 +2,8 @@
"@metadata": {
"authors": [
"Jim-by",
"Wizardist",
"Red Winged Duck"
"Red Winged Duck",
"Wizardist"
]
},
"index.newPad": "Стварыць",
@ -41,8 +41,6 @@
"pad.settings.rtlcheck": "Тэкст справа-налева",
"pad.settings.fontType": "Тып шрыфту:",
"pad.settings.fontType.normal": "Звычайны",
"pad.settings.fontType.monospaced": "Монашырынны",
"pad.settings.globalView": "Агульны выгляд",
"pad.settings.language": "Мова:",
"pad.importExport.import_export": "Імпарт/Экспарт",
"pad.importExport.import": "Загрузіжайце любыя тэкставыя файлы або дакумэнты",

View file

@ -1,9 +1,9 @@
{
"@metadata": {
"authors": [
"Vodnokon4e",
"StanProg",
"Vlad5250"
"Vlad5250",
"Vodnokon4e"
]
},
"index.newPad": "Нов пад",

View file

@ -33,8 +33,6 @@
"pad.settings.rtlcheck": "محتوایی وانتین شه راست بی چپا؟",
"pad.settings.fontType": "قلم رکم:",
"pad.settings.fontType.normal": "ساددگ",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "سراسرین دیست یا نما",
"pad.settings.language": "زبان:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "ساده گین متن",

View file

@ -1,11 +1,11 @@
{
"@metadata": {
"authors": [
"Aftab1995",
"Aftabuzzaman",
"Bellayet",
"Nasir8891",
"Sankarshan",
"Aftab1995",
"Aftabuzzaman",
"আফতাবুজ্জামান"
]
},
@ -44,8 +44,6 @@
"pad.settings.rtlcheck": "ডান থেকে বামে বিষয়বস্তু পড়বেন?",
"pad.settings.fontType": "ফন্টের প্রকার:",
"pad.settings.fontType.normal": "সাধারণ",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "সর্বব্যাপী দৃশ্য",
"pad.settings.language": "ভাষা:",
"pad.importExport.import_export": "আমদানি/রপ্তানি",
"pad.importExport.import": "কোন টেক্সট ফাইল বা নথি আপলোড করুন",

View file

@ -42,8 +42,6 @@
"pad.settings.rtlcheck": "Lenn an danvez a-zehou da gleiz ?",
"pad.settings.fontType": "Seurt font :",
"pad.settings.fontType.normal": "Reizh",
"pad.settings.fontType.monospaced": "Monospas",
"pad.settings.globalView": "Gwel dre vras",
"pad.settings.language": "Yezh :",
"pad.importExport.import_export": "Enporzhiañ/Ezporzhiañ",
"pad.importExport.import": "Enkargañ un destenn pe ur restr",
@ -123,7 +121,7 @@
"pad.userlist.guest": "Den pedet",
"pad.userlist.deny": "Nac'h",
"pad.userlist.approve": "Aprouiñ",
"pad.editbar.clearcolors": "Diverkañ al livioù stag ouzh an aozerien en teul a-bezh ?",
"pad.editbar.clearcolors": "Diverkañ al livioù stag ouzh an aozerien en teul a-bezh ? Ne c'hallo ket bezañ disc'hraet",
"pad.impexp.importbutton": "Enporzhiañ bremañ",
"pad.impexp.importing": "Oc'h enporzhiañ...",
"pad.impexp.confirmimport": "Ma vez enporzhiet ur restr e vo diverket ar pezh zo en teul a-vremañ. Ha sur oc'h e fell deoc'h mont betek penn ?",

View file

@ -2,8 +2,8 @@
"@metadata": {
"authors": [
"Edinwiki",
"Srdjan m",
"Semina x"
"Semina x",
"Srdjan m"
]
},
"index.newPad": "Novi Pad",
@ -40,7 +40,6 @@
"pad.settings.rtlcheck": "Da prikažem sadržaj zdesna ulijevo?",
"pad.settings.fontType": "Vrsta fonta:",
"pad.settings.fontType.normal": "Normalno",
"pad.settings.globalView": "Globalni prikaz",
"pad.settings.language": "Jezik:",
"pad.importExport.import_export": "Uvoz/Izvoz",
"pad.importExport.import": "Postavite bilo koju tekstualnu datoteku ili dokument",

View file

@ -2,14 +2,14 @@
"@metadata": {
"authors": [
"Alvaro Vidal-Abarca",
"Pginer",
"Pitort",
"Toniher",
"Macofe",
"Joan manel",
"Eduardo Martinez",
"Jaumeortola",
"Ssola"
"Joan manel",
"Macofe",
"Pginer",
"Pitort",
"Ssola",
"Toniher"
]
},
"index.newPad": "Nou pad",
@ -47,8 +47,6 @@
"pad.settings.rtlcheck": "Llegir el contingut de dreta a esquerra?",
"pad.settings.fontType": "Tipus de lletra:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "D'amplada fixa",
"pad.settings.globalView": "Vista global",
"pad.settings.language": "Llengua:",
"pad.importExport.import_export": "Importació/exportació",
"pad.importExport.import": "Puja qualsevol fitxer de text o document",

View file

@ -1,15 +1,16 @@
{
"@metadata": {
"authors": [
"Aktron",
"Clon",
"Dvorapa",
"Jakubt",
"Jezevec",
"Juandev",
"Leanes",
"Quinn",
"Aktron",
"Mormegil",
"Dvorapa",
"Clon"
"Peldrjan",
"Quinn"
]
},
"index.newPad": "Založ nový Pad",
@ -47,8 +48,6 @@
"pad.settings.rtlcheck": "Číst obsah zprava doleva?",
"pad.settings.fontType": "Typ písma:",
"pad.settings.fontType.normal": "Normální",
"pad.settings.fontType.monospaced": "Neproporční",
"pad.settings.globalView": "Globální pohled",
"pad.settings.language": "Jazyk:",
"pad.importExport.import_export": "Import/Export",
"pad.importExport.import": "Nahrát libovolný textový soubor nebo dokument",
@ -64,7 +63,7 @@
"pad.modals.connected": "Připojeno.",
"pad.modals.reconnecting": "Znovupřipojování k Padu…",
"pad.modals.forcereconnect": "Vynutit znovupřipojení",
"pad.modals.reconnecttimer": "Zkouším to znovu připojit",
"pad.modals.reconnecttimer": "Zkouším se znovu připojit",
"pad.modals.cancel": "Zrušit",
"pad.modals.userdup": "Otevřeno v jiném okně",
"pad.modals.userdup.explanation": "Zdá se, že tento Pad je na tomto počítači otevřen ve více než jednom okně.",
@ -94,6 +93,8 @@
"pad.chat": "Chat",
"pad.chat.title": "Otevřít chat tohoto Padu.",
"pad.chat.loadmessages": "Načíst více zpráv",
"pad.chat.stick.title": "Přichytit chat k obrazovce",
"pad.chat.writeMessage.placeholder": "Zde napište zprávu",
"timeslider.pageTitle": "Časová osa {{appTitle}}",
"timeslider.toolbar.returnbutton": "Návrat do Padu",
"timeslider.toolbar.authors": "Autoři:",
@ -126,7 +127,7 @@
"pad.userlist.guest": "Host",
"pad.userlist.deny": "Zakázat",
"pad.userlist.approve": "Povolit",
"pad.editbar.clearcolors": "Odstranit barvy autorů z celého dokumentu?",
"pad.editbar.clearcolors": "Odstranit barvy autorů z celého dokumentu? Tuto změnu nelze vrátit!",
"pad.impexp.importbutton": "Importovat",
"pad.impexp.importing": "Importování…",
"pad.impexp.confirmimport": "Import souboru přepíše aktuální text v padu. Opravdu chcete tuto akci provést?",

View file

@ -2,10 +2,10 @@
"@metadata": {
"authors": [
"Christian List",
"Peter Alberti",
"Steenth",
"Joedalton",
"Saederup92"
"Peter Alberti",
"Saederup92",
"Steenth"
]
},
"index.newPad": "Ny Pad",
@ -43,9 +43,6 @@
"pad.settings.rtlcheck": "Læse indhold fra højre mod venstre?",
"pad.settings.fontType": "Skrifttype:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Fastbredde",
"pad.settings.fontType.trebuchet": "Blide",
"pad.settings.globalView": "Global visning",
"pad.settings.language": "Sprog:",
"pad.importExport.import_export": "Import/Eksport",
"pad.importExport.import": "Uploade en tekstfil eller dokument",

View file

@ -4,10 +4,10 @@
"Metalhead64",
"Mklehr",
"Nipsky",
"Wikinaut",
"Thargon",
"Predatorix",
"Sebastian Wallroth"
"Sebastian Wallroth",
"Thargon",
"Wikinaut"
]
},
"index.newPad": "Neues Pad",
@ -45,8 +45,6 @@
"pad.settings.rtlcheck": "Inhalt von rechts nach links lesen?",
"pad.settings.fontType": "Schriftart:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Gemeinsame Ansicht",
"pad.settings.language": "Sprache:",
"pad.importExport.import_export": "Import/Export",
"pad.importExport.import": "Text-Datei oder Dokument hochladen",

View file

@ -1,12 +1,12 @@
{
"@metadata": {
"authors": [
"1917 Ekim Devrimi",
"Erdemaslancan",
"Gorizon",
"Mirzali",
"Kumkumuk",
"1917 Ekim Devrimi",
"Gırd",
"Kumkumuk",
"Mirzali",
"Orbot707"
]
},
@ -45,8 +45,6 @@
"pad.settings.rtlcheck": "Zerrek heto raşt ra be heto çep bıwaniyo?",
"pad.settings.fontType": "Babeta nuşti:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Yewca",
"pad.settings.globalView": "Asayışo Global",
"pad.settings.language": "Zıwan:",
"pad.importExport.import_export": "Zerredayış/Teberdayış",
"pad.importExport.import": "Dosya ya zi dokumanê meqaleyê de tesadufi bar ke",
@ -126,7 +124,7 @@
"pad.userlist.guest": "Meyman",
"pad.userlist.deny": "Red ke",
"pad.userlist.approve": "Tesdiq ke",
"pad.editbar.clearcolors": "Wesiqa de renge nuştoğey bıesterneye?",
"pad.editbar.clearcolors": "Wesiqa de renge nuştoğey bıesternê yê? No kar peyser nêgêrêno",
"pad.impexp.importbutton": "Nıka miyan ke",
"pad.impexp.importing": "Deyeno azere...",
"pad.impexp.confirmimport": "Yu dosya azere kerdış de mewcud bloknoti sero nuşiye no. Şıma qayılê dewam bıkerê?",

View file

@ -37,8 +37,6 @@
"pad.settings.rtlcheck": "Wopśimjeśe wótpšawa nalěwo cytaś?",
"pad.settings.fontType": "Pismowa družyna:",
"pad.settings.fontType.normal": "Normalny",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Globalny naglěd",
"pad.settings.language": "Rěc:",
"pad.importExport.import_export": "Import/Eksport",
"pad.importExport.import": "Tekstowu dataju abo dokument nagraś",

View file

@ -1,9 +1,9 @@
{
"@metadata": {
"authors": [
"Nirajan pant",
"रमेश सिंह बोहरा",
"राम प्रसाद जोशी",
"Nirajan pant"
"राम प्रसाद जोशी"
]
},
"index.newPad": "नौलो प्याड",
@ -40,7 +40,6 @@
"pad.settings.linenocheck": "हरफ संख्या",
"pad.settings.rtlcheck": "सामग्री दाहिना बठे देब्रे पढ्न्या हो कि?",
"pad.settings.fontType": "फन्ट प्रकार:",
"pad.settings.globalView": "विश्वव्यापी दृष्य",
"pad.settings.language": "भाषा:",
"pad.importExport.import_export": "आयात/निर्यात",
"pad.importExport.import": "कोइलै पाठ फाइल और कागजात अपलोड अरऽ",

View file

@ -43,8 +43,6 @@
"pad.settings.rtlcheck": "Διαβάζεται το περιεχόμενο από δεξιά προς τα αριστερά;",
"pad.settings.fontType": "Τύπος γραμματοσειράς:",
"pad.settings.fontType.normal": "Κανονική",
"pad.settings.fontType.monospaced": "Καθορισμένου πλάτους",
"pad.settings.globalView": "Καθολική Προβολή",
"pad.settings.language": "Γλώσσα:",
"pad.importExport.import_export": "Εισαγωγή/Εξαγωγή",
"pad.importExport.import": "Αποστολή οποιουδήποτε αρχείου κειμένου ή εγγράφου",

View file

@ -1,11 +1,11 @@
{
"@metadata": {
"authors": [
"Chase me ladies, I'm the Cavalry",
"Shirayuki",
"Andibing",
"Cblair91",
"Chase me ladies, I'm the Cavalry",
"HairyFotr",
"Cblair91"
"Shirayuki"
]
},
"index.newPad": "New Pad",
@ -43,8 +43,6 @@
"pad.settings.rtlcheck": "Read content from right to left?",
"pad.settings.fontType": "Font type:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Global View",
"pad.settings.language": "Language:",
"pad.importExport.import_export": "Import/Export",
"pad.importExport.import": "Upload any text file or document",

View file

@ -38,27 +38,6 @@
"pad.settings.rtlcheck": "Read content from right to left?",
"pad.settings.fontType": "Font type:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.opendyslexic": "Open Dyslexic",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.fontType.montserrat": "Montserrat",
"pad.settings.fontType.comicsans": "Comic Sans",
"pad.settings.fontType.couriernew": "Courier New",
"pad.settings.fontType.georgia": "Georgia",
"pad.settings.fontType.impact": "Impact",
"pad.settings.fontType.lucida": "Lucida",
"pad.settings.fontType.lucidasans": "Lucida Sans",
"pad.settings.fontType.palatino": "Palatino",
"pad.settings.fontType.robotomono": "RobotoMono",
"pad.settings.fontType.tahoma": "Tahoma",
"pad.settings.fontType.timesnewroman": "Times New Roman",
"pad.settings.fontType.trebuchet": "Trebuchet",
"pad.settings.fontType.verdana": "Verdana",
"pad.settings.fontType.symbol": "Symbol",
"pad.settings.fontType.webdings": "Webdings",
"pad.settings.fontType.wingdings": "Wingdings",
"pad.settings.fontType.sansserif": "Sans Serif",
"pad.settings.fontType.serif": "Serif",
"pad.settings.globalView": "Global View",
"pad.settings.language": "Language:",
"pad.importExport.import_export": "Import/Export",
@ -71,7 +50,7 @@
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "You only can import from plain text or HTML formats. For more advanced import features please <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">install AbiWord</a>.",
"pad.importExport.abiword.innerHTML": "You only can import from plain text or HTML formats. For more advanced import features please <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-with-AbiWord\">install AbiWord or LibreOffice</a>.",
"pad.modals.connected": "Connected.",
"pad.modals.reconnecting": "Reconnecting to your pad..",
@ -154,7 +133,7 @@
"pad.userlist.guest": "Guest",
"pad.userlist.deny": "Deny",
"pad.userlist.approve": "Approve",
"pad.editbar.clearcolors": "Clear authorship colors on entire document?",
"pad.editbar.clearcolors": "Clear authorship colors on entire document? This cannot be undone",
"pad.impexp.importbutton": "Import Now",
"pad.impexp.importing": "Importing...",
@ -164,5 +143,7 @@
"pad.impexp.uploadFailed": "The upload failed, please try again",
"pad.impexp.importfailed": "Import failed",
"pad.impexp.copypaste": "Please copy paste",
"pad.impexp.exportdisabled": "Exporting as {{type}} format is disabled. Please contact your system administrator for details."
"pad.impexp.exportdisabled": "Exporting as {{type}} format is disabled. Please contact your system administrator for details.",
"pad.impexp.maxFileSize": "File too big. Contact your site administrator to increase the allowed file size for import",
"pad.impexp.permission": "Import is disabled because you never contributed to this pad. Please contribute at least once before importing"
}

View file

@ -2,10 +2,10 @@
"@metadata": {
"authors": [
"Eliovir",
"Mirin",
"Mschmitt",
"Objectivesea",
"Robin van der Vliet",
"Mirin"
"Robin van der Vliet"
]
},
"index.newPad": "Nova Teksto",
@ -43,8 +43,6 @@
"pad.settings.rtlcheck": "Legi dekstre-maldekstren?",
"pad.settings.fontType": "Tiparo:",
"pad.settings.fontType.normal": "Normala",
"pad.settings.fontType.monospaced": "Egallarĝa",
"pad.settings.globalView": "Ĉiea Vido",
"pad.settings.language": "Lingvo:",
"pad.importExport.import_export": "Enporti/Elporti",
"pad.importExport.import": "Alŝuti ajnan dosieron aŭ dokumenton",

View file

@ -2,19 +2,20 @@
"@metadata": {
"authors": [
"Armando-Martin",
"Dgstranz",
"Fitoschido",
"Jacobo",
"Joker",
"Larjona",
"Luzcaru",
"Macofe",
"MartaEgea",
"Mklehr",
"Rubenwap",
"Tiberius1701",
"VegaDark",
"Vivaelcelta",
"Xuacu",
"Macofe",
"Fitoschido",
"Dgstranz",
"Luzcaru",
"Tiberius1701"
"Xuacu"
]
},
"index.newPad": "Nuevo pad",
@ -52,8 +53,6 @@
"pad.settings.rtlcheck": "¿Leer contenido de derecha a izquierda?",
"pad.settings.fontType": "Tipografía:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monoespacio",
"pad.settings.globalView": "Preferencias globales",
"pad.settings.language": "Idioma:",
"pad.importExport.import_export": "Importar/Exportar",
"pad.importExport.import": "Subir cualquier texto o documento",
@ -133,7 +132,7 @@
"pad.userlist.guest": "Invitado",
"pad.userlist.deny": "Denegar",
"pad.userlist.approve": "Aprobar",
"pad.editbar.clearcolors": "¿Quieres borrar los colores de autoría en todo el documento?",
"pad.editbar.clearcolors": "¿Desea borrar los colores de autoría en todo el documento? Esto no se puede deshacer",
"pad.impexp.importbutton": "Importar ahora",
"pad.impexp.importing": "Importando...",
"pad.impexp.confirmimport": "Al importar un archivo se borrará el contenido actual del pad. ¿Estás seguro de que quieres continuar?",

View file

@ -38,8 +38,6 @@
"pad.settings.rtlcheck": "Näita sisu paremalt vasakule?",
"pad.settings.fontType": "Šrifti tüüp:",
"pad.settings.fontType.normal": "Normaalne",
"pad.settings.fontType.monospaced": "Ühelaiuste märkidega",
"pad.settings.globalView": "Koguvaade",
"pad.settings.language": "Keel:",
"pad.importExport.import_export": "Import-eksport",
"pad.importExport.import": "Laadi üles mistahes tekstifail või dokument",

View file

@ -1,12 +1,12 @@
{
"@metadata": {
"authors": [
"Theklan",
"Subi",
"Xabier Armendaritz",
"An13sa",
"HairyFotr",
"Mikel Ibaiba",
"HairyFotr"
"Subi",
"Theklan",
"Xabier Armendaritz"
]
},
"index.newPad": "Pad berria",
@ -44,8 +44,6 @@
"pad.settings.rtlcheck": "Edukia eskubitik ezkerrera irakurri?",
"pad.settings.fontType": "Tipografia:",
"pad.settings.fontType.normal": "Arrunta",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Ikuspegi Globala",
"pad.settings.language": "Hizkuntza:",
"pad.importExport.import_export": "Inportatu/Esportatu",
"pad.importExport.import": "Igo edozein testu fitxategi edo dokumentu",

View file

@ -4,11 +4,11 @@
"BMRG14",
"Dalba",
"Ebraminio",
"FarsiNevis",
"Omid.koli",
"Reza1615",
"ZxxZxxZ",
"الناز",
"Omid.koli",
"FarsiNevis"
"الناز"
]
},
"index.newPad": "دفترچه یادداشت تازه",
@ -46,8 +46,6 @@
"pad.settings.rtlcheck": "خواندن محتوا از راست به چپ؟",
"pad.settings.fontType": "نوع قلم:",
"pad.settings.fontType.normal": "ساده",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "نمای سراسری",
"pad.settings.language": "زبان:",
"pad.importExport.import_export": "درون‌ریزی/برون‌ریزی",
"pad.importExport.import": "بارگذاری پرونده‌ی متنی یا سند",

View file

@ -2,19 +2,19 @@
"@metadata": {
"authors": [
"Artnay",
"Espeox",
"Jl",
"Lliehu",
"Macofe",
"MrTapsa",
"Nedergard",
"Nike",
"Pyscowicz",
"Silvonen",
"Stryn",
"Tomi Toivio",
"Veikk0.ma",
"VezonThunder",
"Macofe",
"MrTapsa",
"Silvonen",
"Espeox",
"Pyscowicz"
"VezonThunder"
]
},
"index.newPad": "Uusi muistio",
@ -52,8 +52,6 @@
"pad.settings.rtlcheck": "Luetaanko sisältö oikealta vasemmalle?",
"pad.settings.fontType": "Fonttityyppi:",
"pad.settings.fontType.normal": "normaali",
"pad.settings.fontType.monospaced": "tasalevyinen",
"pad.settings.globalView": "Yleisnäkymä",
"pad.settings.language": "Kieli:",
"pad.importExport.import_export": "Tuonti/vienti",
"pad.importExport.import": "Lähetä mikä tahansa tekstitiedosto tai asiakirja",
@ -99,6 +97,8 @@
"pad.chat": "Keskustelu",
"pad.chat.title": "Avaa keskustelu nykyisestä muistiosta.",
"pad.chat.loadmessages": "Lataa lisää viestejä",
"pad.chat.stick.title": "Liimaa chatti ruutuun",
"pad.chat.writeMessage.placeholder": "Kirjoita viestisi tähän",
"timeslider.pageTitle": "{{appTitle}} -aikajana",
"timeslider.toolbar.returnbutton": "Palaa muistioon",
"timeslider.toolbar.authors": "Tekijät:",

View file

@ -31,8 +31,6 @@
"pad.settings.rtlcheck": "Vil tú lesa innihaldið frá høgru til vinstu?",
"pad.settings.fontType": "Skriftslag:",
"pad.settings.fontType.normal": "Vanligt",
"pad.settings.fontType.monospaced": "Føst breidd",
"pad.settings.globalView": "Global sýning",
"pad.settings.language": "Mál:",
"pad.importExport.import_export": "Innflyt/Útflyt",
"pad.importExport.import": "Legg út onkra tekstfílu ella dokument",

View file

@ -1,13 +1,20 @@
{
"@metadata": {
"authors": [
"Boniface",
"C13m3n7",
"Cquoi",
"Crochet.david",
"Envlh",
"Framafan",
"Fylip22",
"Gomoko",
"Goofy",
"Goofy-bz",
"Jean-Frédéric",
"Leviathan",
"Macofe",
"Maxim21",
"McDutchie",
"Metroitendo",
"Od1n",
@ -16,16 +23,9 @@
"Rastus Vernon",
"Stephane Cottin",
"Tux-tn",
"Maxim21",
"Boniface",
"Macofe",
"Framafan",
"Fylip22",
"C13m3n7",
"Wladek92",
"Urhixidur",
"Envlh",
"Verdy p"
"Verdy p",
"Wladek92"
]
},
"index.newPad": "Nouveau bloc-notes",
@ -63,8 +63,6 @@
"pad.settings.rtlcheck": "Le contenu doit-il être lu de droite à gauche?",
"pad.settings.fontType": "Police:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Vue densemble",
"pad.settings.language": "Langue:",
"pad.importExport.import_export": "Importer/Exporter",
"pad.importExport.import": "Charger un texte ou un document",
@ -144,7 +142,7 @@
"pad.userlist.guest": "Invité",
"pad.userlist.deny": "Refuser",
"pad.userlist.approve": "Approuver",
"pad.editbar.clearcolors": "Effacer le surlignage par auteur dans tout le document?",
"pad.editbar.clearcolors": "Effacer le surlignage par auteur dans tout le document? Cette action ne peut être annulée.",
"pad.impexp.importbutton": "Importer maintenant",
"pad.impexp.importing": "Import en cours...",
"pad.impexp.confirmimport": "Importer un fichier écrasera le contenu actuel du bloc-notes. Êtes-vous sûr de vouloir le faire?",

View file

@ -11,7 +11,6 @@
"pad.colorpicker.save": "Bewarje",
"pad.colorpicker.cancel": "Annulearje",
"pad.settings.fontType.normal": "Normaal",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.language": "Taal:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportword": "Microsoft Word",

View file

@ -1,8 +1,8 @@
{
"@metadata": {
"authors": [
"Toliño",
"Elisardojm"
"Elisardojm",
"Toliño"
]
},
"index.newPad": "Novo documento",
@ -40,8 +40,6 @@
"pad.settings.rtlcheck": "Quere ler o contido da dereita á esquerda?",
"pad.settings.fontType": "Tipo de letra:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monoespazada",
"pad.settings.globalView": "Vista global",
"pad.settings.language": "Lingua:",
"pad.importExport.import_export": "Importar/Exportar",
"pad.importExport.import": "Cargar un ficheiro de texto ou documento",

View file

@ -19,7 +19,6 @@
"pad.settings.padSettings": "પેડ ગોઠવણીઓ",
"pad.settings.myView": "મારા મતે",
"pad.settings.fontType.normal": "સામાન્ય",
"pad.settings.fontType.monospaced": "મોનોસ્પેસ",
"pad.settings.language": "ભાષા:",
"pad.importExport.import_export": "આયાત/નિકાસ",
"pad.importExport.importSuccessful": "સફળ!",

View file

@ -42,8 +42,6 @@
"pad.settings.rtlcheck": "לקרוא את התוכן מימין לשמאל?",
"pad.settings.fontType": "סוג גופן:",
"pad.settings.fontType.normal": "רגיל",
"pad.settings.fontType.monospaced": "ברוחב קבוע",
"pad.settings.globalView": "תצוגה לכל המשתמשים",
"pad.settings.language": "שפה:",
"pad.importExport.import_export": "ייבוא/ייצוא",
"pad.importExport.import": "העלאת כל קובץ טקסט או מסמך",

View file

@ -39,7 +39,6 @@
"pad.settings.linenocheck": "Brojevi redaka",
"pad.settings.rtlcheck": "Želite li prikaz sadržaja s desna na lijevo?",
"pad.settings.fontType": "Vrsta fonta:",
"pad.settings.globalView": "Globalni prikaz",
"pad.settings.language": "Jezik:",
"pad.importExport.import_export": "Uvoz/Izvoz",
"pad.importExport.import": "Postavite bilo koju tekstualnu datoteku ili dokument",
@ -119,7 +118,7 @@
"pad.userlist.guest": "Gost",
"pad.userlist.deny": "Odbij",
"pad.userlist.approve": "Odobri",
"pad.editbar.clearcolors": "Ukloniti boje autorstva u cijelom blokiću?",
"pad.editbar.clearcolors": "Ukloniti boje autorstva u cijelom blokiću? Radnju nije moguće poništiti jednom kad je izvršena.",
"pad.impexp.importbutton": "Uvezi odmah",
"pad.impexp.importing": "Uvoženje...",
"pad.impexp.confirmimport": "Uvoženje datoteke presnimit će trenutačni sadržaj blokića.\nJeste li sigurni da želite nastaviti?",

View file

@ -37,8 +37,6 @@
"pad.settings.rtlcheck": "Inhalt von rechts bis links lese?",
"pad.settings.fontType": "Schriftoort:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Gemeinsame Oonsicht",
"pad.settings.language": "Sproch:",
"pad.importExport.import_export": "Import/Export",
"pad.importExport.import": "Text-Datei orrer Dokument hochloode",

View file

@ -39,8 +39,6 @@
"pad.settings.rtlcheck": "Wobsah wotprawa nalěwo čitać?",
"pad.settings.fontType": "Pismowa družina:",
"pad.settings.fontType.normal": "Normalny",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Globalny napohlad",
"pad.settings.language": "Rěč:",
"pad.importExport.import_export": "Import/Eksport",
"pad.importExport.import": "Tekstowu dataju abo dokument nahrać",

View file

@ -1,14 +1,14 @@
{
"@metadata": {
"authors": [
"BanKris",
"Bencemac",
"Csega",
"Dj",
"Misibacsi",
"R-Joe",
"Tgr",
"Csega",
"BanKris",
"Notramo",
"Bencemac"
"R-Joe",
"Tgr"
]
},
"index.newPad": "Új notesz",
@ -46,8 +46,6 @@
"pad.settings.rtlcheck": "Tartalom olvasása balról jobbra?",
"pad.settings.fontType": "Betűtípus:",
"pad.settings.fontType.normal": "Szokásos",
"pad.settings.fontType.monospaced": "Írógépes",
"pad.settings.globalView": "Globális nézet",
"pad.settings.language": "Nyelv:",
"pad.importExport.import_export": "Import/export",
"pad.importExport.import": "Tetszőleges szövegfájl vagy dokumentum feltöltése",

View file

@ -19,7 +19,6 @@
"pad.settings.myView": "Իմ տեսարան",
"pad.settings.rtlcheck": "Կարդալ բովանդակությունը աջից ձախ",
"pad.settings.fontType": "Տառատեսակի տեսակը",
"pad.settings.globalView": "Ընդհանուր տեսքը",
"pad.settings.language": "Լեզու",
"pad.importExport.import_export": "Ներմուծում/արտահանում",
"pad.importExport.import": "Բեռնել ցանկացած տեքստային ֆայլը կամ փաստաթուղթ",

View file

@ -39,8 +39,6 @@
"pad.settings.rtlcheck": "Leger le contento de dextra a sinistra?",
"pad.settings.fontType": "Typo de litteras:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospatial",
"pad.settings.globalView": "Vista global",
"pad.settings.language": "Lingua:",
"pad.importExport.import_export": "Importar/Exportar",
"pad.importExport.import": "Incargar qualcunque file de texto o documento",
@ -118,7 +116,7 @@
"pad.userlist.guest": "Invitato",
"pad.userlist.deny": "Refusar",
"pad.userlist.approve": "Approbar",
"pad.editbar.clearcolors": "Rader le colores de autor in tote le documento?",
"pad.editbar.clearcolors": "Rader le colores de autor in tote le documento? Isto non pote esser disfacite",
"pad.impexp.importbutton": "Importar ora",
"pad.impexp.importing": "Importation in curso…",
"pad.impexp.confirmimport": "Le importation de un file superscribera le texto actual del pad. Es tu secur de voler continuar?",

View file

@ -40,7 +40,6 @@
"pad.settings.linenocheck": "Nomor baris",
"pad.settings.rtlcheck": "Membaca dari kanan ke kiri?",
"pad.settings.fontType": "Jenis fonta:",
"pad.settings.globalView": "Tampilan Global",
"pad.settings.language": "Bahasa:",
"pad.importExport.import_export": "Impor/Ekspor",
"pad.importExport.import": "Unggah setiap berkas teks atau dokumen",

View file

@ -1,8 +1,8 @@
{
"@metadata": {
"authors": [
"Sveinn í Felli",
"Sveinki"
"Sveinki",
"Sveinn í Felli"
]
},
"index.newPad": "Ný skrifblokk",
@ -40,8 +40,6 @@
"pad.settings.rtlcheck": "Lesa innihaldið frá hægri til vinstri?",
"pad.settings.fontType": "Leturgerð:",
"pad.settings.fontType.normal": "Venjulegt",
"pad.settings.fontType.monospaced": "Jafnbreitt",
"pad.settings.globalView": "Yfirlitssýn",
"pad.settings.language": "Tungumál:",
"pad.importExport.import_export": "Flytja inn/út",
"pad.importExport.import": "Settu inn hverskyns texta eða skjal",

View file

@ -3,10 +3,10 @@
"authors": [
"Beta16",
"Gianfranco",
"Muxator",
"Vituzzu",
"Macofe",
"Nivit"
"Muxator",
"Nivit",
"Vituzzu"
]
},
"index.newPad": "Nuovo Pad",
@ -44,8 +44,6 @@
"pad.settings.rtlcheck": "Leggere il contenuto da destra a sinistra?",
"pad.settings.fontType": "Tipo di carattere:",
"pad.settings.fontType.normal": "Normale",
"pad.settings.fontType.monospaced": "A larghezza fissa",
"pad.settings.globalView": "Visualizzazione globale",
"pad.settings.language": "Lingua:",
"pad.importExport.import_export": "Importazione/esportazione",
"pad.importExport.import": "Carica un file di testo o un documento",
@ -125,7 +123,7 @@
"pad.userlist.guest": "Ospite",
"pad.userlist.deny": "Nega",
"pad.userlist.approve": "Approva",
"pad.editbar.clearcolors": "Eliminare i colori degli autori sull'intero documento?",
"pad.editbar.clearcolors": "Eliminare i colori degli autori sull'intero documento? Questa azione non può essere annullata",
"pad.impexp.importbutton": "Importa ora",
"pad.impexp.importing": "Importazione in corso...",
"pad.impexp.confirmimport": "L'importazione del file sovrascriverà il testo attuale del Pad. Sei sicuro di voler procedere?",

View file

@ -1,11 +1,11 @@
{
"@metadata": {
"authors": [
"Shirayuki",
"Torinky",
"Omotecho",
"Aefgh39622",
"Afaz"
"Afaz",
"Omotecho",
"Shirayuki",
"Torinky"
]
},
"index.newPad": "新規作成",
@ -43,8 +43,6 @@
"pad.settings.rtlcheck": "右横書きにする",
"pad.settings.fontType": "フォントの種類:",
"pad.settings.fontType.normal": "通常",
"pad.settings.fontType.monospaced": "固定幅",
"pad.settings.globalView": "グローバル設定",
"pad.settings.language": "言語:",
"pad.importExport.import_export": "インポート/エクスポート",
"pad.importExport.import": "あらゆるテキストファイルや文書をアップロードできます",

View file

@ -38,7 +38,6 @@
"pad.settings.linenocheck": "Uṭṭunen n izirigen",
"pad.settings.rtlcheck": "Ɣeṛ agbur seg uyeffus s azelmaḍ?",
"pad.settings.fontType": "Anaw n tsefsit:",
"pad.settings.globalView": "Timeẓri tamatut:",
"pad.settings.language": "Tutlayt:",
"pad.importExport.import_export": "Kter/Sifeḍ",
"pad.importExport.import": "Sali aḍris neɣ isemli",

View file

@ -1,8 +1,8 @@
{
"@metadata": {
"authors": [
"វ័ណថារិទ្ធ",
"Sovichet"
"Sovichet",
"វ័ណថារិទ្ធ"
]
},
"index.newPad": "ផេតថ្មី",
@ -35,8 +35,6 @@
"pad.settings.rtlcheck": "អាន​ពី​ស្ដាំ​ទៅ​ឆ្វេង?",
"pad.settings.fontType": "ប្រភេទពុម្ពអក្សរ៖",
"pad.settings.fontType.normal": "ធម្មតា",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "គំហើញសកល",
"pad.settings.language": "ភាសា៖",
"pad.importExport.import_export": "នាំចូល/នាំចេញ",
"pad.importExport.import": "ផ្ទុក​ឡើង​ឯកសារ​អត្ថបទ​ណាមួយ",

View file

@ -1,13 +1,13 @@
{
"@metadata": {
"authors": [
"CYAN",
"Hym411",
"아라",
"Revi",
"Kurousagi",
"Revi",
"SeoJeongHo",
"Ykhwong",
"CYAN"
"아라"
]
},
"index.newPad": "새 패드",
@ -45,8 +45,6 @@
"pad.settings.rtlcheck": "우횡서(오른쪽에서 왼쪽으로)입니까?",
"pad.settings.fontType": "글꼴 종류:",
"pad.settings.fontType.normal": "보통",
"pad.settings.fontType.monospaced": "고정 폭",
"pad.settings.globalView": "전역 보기",
"pad.settings.language": "언어:",
"pad.importExport.import_export": "가져오기/내보내기",
"pad.importExport.import": "텍스트 파일이나 문서 올리기",
@ -126,7 +124,7 @@
"pad.userlist.guest": "손님",
"pad.userlist.deny": "거부",
"pad.userlist.approve": "승인",
"pad.editbar.clearcolors": "전체 문서의 저자 색을 지우시겠습니까?",
"pad.editbar.clearcolors": "전체 문서의 저자 색을 지우시겠습니까? 이 작업은 취소할 수 없습니다",
"pad.impexp.importbutton": "지금 가져오기",
"pad.impexp.importing": "가져오는 중...",
"pad.impexp.confirmimport": "파일을 가져오면 패드의 현재 텍스트를 덮어쓰게 됩니다. 진행하시겠습니까?",

View file

@ -8,8 +8,6 @@
"pad.colorpicker.save": "Сакъла",
"pad.loading": "Джюклениу...",
"pad.settings.fontType.normal": "Нормал",
"pad.settings.fontType.monospaced": "Монокенгликли",
"pad.settings.globalView": "Глобал кёрюнюу",
"pad.settings.language": "Тил:",
"pad.importExport.import_export": "Импорт/экспорт",
"pad.importExport.importSuccessful": "Тыйыншлы!",

View file

@ -39,8 +39,6 @@
"pad.settings.rtlcheck": "Schreff vun Rääschß noh Lenks?",
"pad.settings.fontType": "Zoot Schreff",
"pad.settings.fontType.normal": "Nommahl",
"pad.settings.fontType.monospaced": "einheidlesch brejde Zeische",
"pad.settings.globalView": "Et Ußsin för Alle",
"pad.settings.language": "Schprohch:",
"pad.importExport.import_export": "Empoot/Äxpoot",
"pad.importExport.import": "Donn jeede Täx udder jeede Zoot Dokemänt huhlaade",

View file

@ -4,9 +4,9 @@
"Bikarhêner",
"Dilyaramude",
"George Animal",
"Ghybu",
"Gomada",
"Mehk63",
"Ghybu",
"MikaelF"
]
},

View file

@ -1,9 +1,9 @@
{
"@metadata": {
"authors": [
"Gromper",
"Robby",
"Soued031",
"Gromper"
"Soued031"
]
},
"index.newPad": "Neie Pad",
@ -24,7 +24,7 @@
"pad.colorpicker.save": "Späicheren",
"pad.colorpicker.cancel": "Ofbriechen",
"pad.loading": "Lueden...",
"pad.noCookie": "Cookie gouf net fonnt. Erlaabt w.e.g. Cookien an Ärem Browser!",
"pad.noCookie": "Cookie gouf net fonnt. Erlaabt wgl. Cookien an Ärem Browser!",
"pad.passwordRequired": "Dir braucht ee Passwuert fir dëse Pad opzemaachen",
"pad.permissionDenied": "Dir hutt net déi néideg Rechter fir dëse Pad opzemaachen",
"pad.wrongPassword": "Äert Passwuert ass falsch",
@ -33,7 +33,6 @@
"pad.settings.rtlcheck": "Inhalt vu riets no lénks liesen?",
"pad.settings.fontType": "Schrëftart:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.globalView": "Global Vue",
"pad.settings.language": "Sprooch:",
"pad.importExport.import_export": "Import/Export",
"pad.importExport.import": "Text-Fichier oder Dokument eroplueden",
@ -87,6 +86,6 @@
"pad.userlist.approve": "Zoustëmmen",
"pad.impexp.importbutton": "Elo importéieren",
"pad.impexp.importing": "Importéieren...",
"pad.impexp.uploadFailed": "D'Eroplueden huet net funktionéiert, probéiert w.e.g. nach eng Kéier",
"pad.impexp.uploadFailed": "D'Eroplueden huet net funktionéiert, probéiert wgl. nach eng Kéier",
"pad.impexp.importfailed": "Den Import huet net funktionéiert"
}

View file

@ -1,8 +1,8 @@
{
"@metadata": {
"authors": [
"Hosseinblue",
"Arash71",
"Hosseinblue",
"Lakzon"
]
},
@ -41,8 +41,6 @@
"pad.settings.rtlcheck": "خواندن نۆم جِک(محتوا)أژ لآ ڕاس بە چەپ؟",
"pad.settings.fontType": ":شئؤۀ فؤنت",
"pad.settings.fontType.normal": "عادی",
"pad.settings.fontType.monospaced": "پئنی-پهنا",
"pad.settings.globalView": "نمایش جەهانی",
"pad.settings.language": ":زوون",
"pad.importExport.import_export": "دەر بردن/إنۆم آووِردن",
"pad.importExport.import": "بارنیائن هر جور نوشته یا سندئ",

Some files were not shown because too many files have changed in this diff Show more