mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-01-21 06:52:46 +01:00
Release version 1.8.3
This commit is contained in:
commit
62101147a0
308 changed files with 10997 additions and 9900 deletions
|
@ -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
46
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal 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.
|
21
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
21
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal 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
29
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal 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
3
.gitignore
vendored
|
@ -19,3 +19,6 @@ npm-debug.log
|
|||
bin/etherpad-1.deb
|
||||
credentials.json
|
||||
out/
|
||||
.nyc_output
|
||||
./package-lock.json
|
||||
.idea
|
||||
|
|
35
.travis.yml
35
.travis.yml
|
@ -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:
|
||||
|
|
26
CHANGELOG.md
26
CHANGELOG.md
|
@ -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
|
||||
|
|
18
Dockerfile
18
Dockerfile
|
@ -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"]
|
||||
|
|
9
Makefile
9
Makefile
|
@ -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)
|
||||
|
|
27
README.md
27
README.md
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
120
bin/checkPadDeltas.js
Normal 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);
|
||||
}
|
||||
|
||||
});
|
|
@ -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" "$@"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
// 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){
|
||||
|
||||
// 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
|
||||
|
||||
try {
|
||||
let settings = require('../src/node/utils/Settings');
|
||||
let db = require('../src/node/db/DB');
|
||||
await db.init();
|
||||
|
||||
padManager = require('../src/node/db/PadManager');
|
||||
await padManager.removePad(padId);
|
||||
|
||||
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
1
bin/doc/node_modules/.bin/marked
generated
vendored
|
@ -1 +0,0 @@
|
|||
../marked/bin/marked
|
2
bin/doc/node_modules/marked/.npmignore
generated
vendored
2
bin/doc/node_modules/marked/.npmignore
generated
vendored
|
@ -1,2 +0,0 @@
|
|||
.git*
|
||||
test/
|
19
bin/doc/node_modules/marked/LICENSE
generated
vendored
19
bin/doc/node_modules/marked/LICENSE
generated
vendored
|
@ -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.
|
9
bin/doc/node_modules/marked/Makefile
generated
vendored
9
bin/doc/node_modules/marked/Makefile
generated
vendored
|
@ -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
135
bin/doc/node_modules/marked/README.md
generated
vendored
|
@ -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.
|
115
bin/doc/node_modules/marked/bin/marked
generated
vendored
115
bin/doc/node_modules/marked/bin/marked
generated
vendored
|
@ -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;
|
||||
}
|
1
bin/doc/node_modules/marked/index.js
generated
vendored
1
bin/doc/node_modules/marked/index.js
generated
vendored
|
@ -1 +0,0 @@
|
|||
module.exports = require('./lib/marked');
|
662
bin/doc/node_modules/marked/lib/marked.js
generated
vendored
662
bin/doc/node_modules/marked/lib/marked.js
generated
vendored
|
@ -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, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''');
|
||||
};
|
||||
|
||||
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);
|
39
bin/doc/node_modules/marked/man/marked.1
generated
vendored
39
bin/doc/node_modules/marked/man/marked.1
generated
vendored
|
@ -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)
|
15
bin/doc/node_modules/marked/package.json
generated
vendored
15
bin/doc/node_modules/marked/package.json
generated
vendored
|
@ -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
13
bin/doc/package-lock.json
generated
Normal 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=="
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
22
bin/fastRun.sh
Executable 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" "${@}"
|
|
@ -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
|
||||
|
|
|
@ -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" "$@"
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
19
doc/api/hooks_client-side.md
Normal file → Executable 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.
|
||||
|
||||
|
|
|
@ -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
18
doc/cookies.md
Normal 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 |
|
165
doc/docker.md
165
doc/docker.md
|
@ -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
|
||||
```
|
||||
|
|
BIN
doc/images/etherpad_basic.png
Normal file
BIN
doc/images/etherpad_basic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
BIN
doc/images/etherpad_demo.gif
Normal file
BIN
doc/images/etherpad_demo.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 874 KiB |
BIN
doc/images/etherpad_full_features.png
Normal file
BIN
doc/images/etherpad_full_features.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 90 KiB |
BIN
doc/images/etherpad_skin_variants.gif
Normal file
BIN
doc/images/etherpad_skin_variants.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 533 KiB |
|
@ -5,4 +5,5 @@
|
|||
@include skins
|
||||
@include api/api
|
||||
@include plugins
|
||||
@include cookies
|
||||
@include database
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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" } }
|
||||
]
|
||||
}
|
||||
|
|
|
@ -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">
|
||||
<g
|
||||
id="layer1-3"
|
||||
transform="translate(16.860288,-0.33232922)">
|
||||
<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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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
|
||||
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" />
|
||||
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 |
|
@ -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",
|
||||
|
|
|
@ -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": "استيراد ملف سيؤدي للكتابة فوق النص الحالي بالباد. هل أنت متأكد من أنك تريد المتابعة؟",
|
||||
|
|
|
@ -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?",
|
||||
|
|
|
@ -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": "सफल!",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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": "سند یا دا متنی پرونده یوکله",
|
||||
|
|
|
@ -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": "بارگذاری پروندهی متنی یا سند",
|
||||
|
|
|
@ -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": "Загрузіжайце любыя тэкставыя файлы або дакумэнты",
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"Vodnokon4e",
|
||||
"StanProg",
|
||||
"Vlad5250"
|
||||
"Vlad5250",
|
||||
"Vodnokon4e"
|
||||
]
|
||||
},
|
||||
"index.newPad": "Нов пад",
|
||||
|
|
|
@ -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": "ساده گین متن",
|
||||
|
|
|
@ -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": "কোন টেক্সট ফাইল বা নথি আপলোড করুন",
|
||||
|
|
|
@ -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 ?",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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?",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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ê?",
|
||||
|
|
|
@ -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ś",
|
||||
|
|
|
@ -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": "कोइलै पाठ फाइल और कागजात अपलोड अरऽ",
|
||||
|
|
|
@ -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": "Αποστολή οποιουδήποτε αρχείου κειμένου ή εγγράφου",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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?",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "بارگذاری پروندهی متنی یا سند",
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 d’ensemble",
|
||||
"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 ?",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "સફળ!",
|
||||
|
|
|
@ -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": "העלאת כל קובץ טקסט או מסמך",
|
||||
|
|
|
@ -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?",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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ć",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "Բեռնել ցանկացած տեքստային ֆայլը կամ փաստաթուղթ",
|
||||
|
|
|
@ -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?",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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?",
|
||||
|
|
|
@ -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": "あらゆるテキストファイルや文書をアップロードできます",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "ផ្ទុកឡើងឯកសារអត្ថបទណាមួយ",
|
||||
|
|
|
@ -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": "파일을 가져오면 패드의 현재 텍스트를 덮어쓰게 됩니다. 진행하시겠습니까?",
|
||||
|
|
|
@ -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": "Тыйыншлы!",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
"Bikarhêner",
|
||||
"Dilyaramude",
|
||||
"George Animal",
|
||||
"Ghybu",
|
||||
"Gomada",
|
||||
"Mehk63",
|
||||
"Ghybu",
|
||||
"MikaelF"
|
||||
]
|
||||
},
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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
Loading…
Reference in a new issue