Merge pull request #2495 from ether/release/1.5.1

Release/1.5.1
This commit is contained in:
John McLear 2015-01-25 21:17:44 +00:00
commit fb980031ba
71 changed files with 733 additions and 231 deletions

View File

@ -1,3 +1,28 @@
# 1.5.1
* NEW: High resolution Icon
* NEW: Use HTTPS for plugins.json download
* NEW: Add 'last update' column
* NEW: Show users and chat at the same time
* NEW: Support io.js
* Fix: removeAttributeOnLine now works properly
* Fix: Plugin search and list
* Fix: Issue where unauthed request could cause error
* Fix: Privacy issue with .etherpad export
* Fix: Freeze deps to improve bisectability
* Fix: IE, everything. IE is so broken.
* Fix: Timeslider proxy
* Fix: All backend tests pass
* Fix: Better support for Export into HTML
* Fix: Timeslider stars
* Fix: Translation update
* Fix: Check filesystem if Abiword exists
* Fix: Docs formatting
* Fix: Move Save Revision notification to a gritter message
* Fix: UeberDB MySQL Timeout issue
* Fix: Indented +9 list items
* Fix: Don't paste on middle click of link
* SECURITY Fix: Issue where a malformed URL could cause EP to disclose installation location
# 1.5.0 # 1.5.0
* NEW: Lots of performance improvements for page load times * NEW: Lots of performance improvements for page load times
* NEW: Hook for adding CSS to Exports * NEW: Hook for adding CSS to Exports

View File

@ -1,6 +1,31 @@
# Developer Guidelines # Developer Guidelines
(Please talk to people on the mailing list before you change this page, see our section on [how to get in touch](https://github.com/ether/etherpad-lite#get-in-touch)) (Please talk to people on the mailing list before you change this page, see our section on [how to get in touch](https://github.com/ether/etherpad-lite#get-in-touch))
## How to write a bug report
* Please be polite, we all are humans and problems can occur.
* Please add as much information as possible, for example
* client os(s) and version(s)
* browser(s) and version(s), is the problem reproduceable on different clients
* special environments like firewalls or antivirus
* host os and version
* npm and nodejs version
* Logfiles if available
* steps to reproduce
* what you expected to happen
* what actually happened
* Please format logfiles and code examples with markdown see github Markdown help below the issue textarea for more information.
If you send logfiles, please set the loglevel switch DEBUG in your settings.json file:
```
/* The log level we are using, can be: DEBUG, INFO, WARN, ERROR */
"loglevel": "DEBUG",
```
The logfile location is defined in startup script or the log is directly shown in the commandline after you have started etherpad.
## Important note for pull requests ## Important note for pull requests
**Pull requests should be issued against the develop branch**. We never pull directly into master. **Pull requests should be issued against the develop branch**. We never pull directly into master.

View File

@ -10,28 +10,29 @@ fi
#Is gnu-grep (ggrep) installed on SunOS (Solaris) #Is gnu-grep (ggrep) installed on SunOS (Solaris)
if [ $(uname) = "SunOS" ]; then if [ $(uname) = "SunOS" ]; then
hash ggrep > /dev/null 2>&1 || { hash ggrep > /dev/null 2>&1 || {
echo "Please install ggrep (pkg install gnu-grep)" >&2 echo "Please install ggrep (pkg install gnu-grep)" >&2
exit 1 exit 1
} }
fi fi
#Is curl installed? #Is curl installed?
hash curl > /dev/null 2>&1 || { hash curl > /dev/null 2>&1 || {
echo "Please install curl" >&2 echo "Please install curl" >&2
exit 1 exit 1
} }
#Is node installed? #Is node installed?
hash node > /dev/null 2>&1 || { #not checking io.js, default installation creates a symbolic link to node
hash node > /dev/null 2>&1 || {
echo "Please install node.js ( http://nodejs.org )" >&2 echo "Please install node.js ( http://nodejs.org )" >&2
exit 1 exit 1
} }
#Is npm installed? #Is npm installed?
hash npm > /dev/null 2>&1 || { hash npm > /dev/null 2>&1 || {
echo "Please install npm ( http://npmjs.org )" >&2 echo "Please install npm ( http://npmjs.org )" >&2
exit 1 exit 1
} }
#check npm version #check npm version
@ -39,15 +40,21 @@ NPM_VERSION=$(npm --version)
NPM_MAIN_VERSION=$(echo $NPM_VERSION | cut -d "." -f 1) NPM_MAIN_VERSION=$(echo $NPM_VERSION | cut -d "." -f 1)
if [ $(echo $NPM_MAIN_VERSION) = "0" ]; then if [ $(echo $NPM_MAIN_VERSION) = "0" ]; then
echo "You're running a wrong version of npm, you're using $NPM_VERSION, we need 1.x or higher" >&2 echo "You're running a wrong version of npm, you're using $NPM_VERSION, we need 1.x or higher" >&2
exit 1 exit 1
fi fi
#check node version #check node version
NODE_VERSION=$(node --version) NODE_VERSION=$(node --version)
NODE_V_MINOR=$(echo $NODE_VERSION | cut -d "." -f 1-2) NODE_V_MINOR=$(echo $NODE_VERSION | cut -d "." -f 1-2)
#iojs version checking added
if hash iojs 2>/dev/null; then
IOJS_VERSION=$(iojs --version)
fi
if [ ! $NODE_V_MINOR = "v0.8" ] && [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ]; then if [ ! $NODE_V_MINOR = "v0.8" ] && [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ]; then
echo "You're running a wrong version of node, you're using $NODE_VERSION, we need v0.8.x, v0.10.x or v0.11.x" >&2 if [ ! $IOJS_VERSION ]; then
exit 1 echo "You're running a wrong version of node, or io.js is not installed. You're using $NODE_VERSION, we need v0.8.x, v0.10.x or v0.11.x" >&2
exit 1
fi
fi fi
#Get the name of the settings file #Get the name of the settings file
@ -71,9 +78,9 @@ echo "Ensure that all dependencies are up to date... If this is the first time
[ -e ep_etherpad-lite ] || ln -s ../src ep_etherpad-lite [ -e ep_etherpad-lite ] || ln -s ../src ep_etherpad-lite
cd ep_etherpad-lite cd ep_etherpad-lite
npm install --loglevel warn npm install --loglevel warn
) || { ) || {
rm -rf node_modules rm -rf node_modules
exit 1 exit 1
} }
echo "Ensure jQuery is downloaded and up to date..." echo "Ensure jQuery is downloaded and up to date..."
@ -81,9 +88,9 @@ DOWNLOAD_JQUERY="true"
NEEDED_VERSION="1.9.1" NEEDED_VERSION="1.9.1"
if [ -f "src/static/js/jquery.js" ]; then if [ -f "src/static/js/jquery.js" ]; then
if [ $(uname) = "SunOS" ]; then if [ $(uname) = "SunOS" ]; then
VERSION=$(cat src/static/js/jquery.js | head -n 3 | ggrep -o "v[0-9]\.[0-9]\(\.[0-9]\)\?"); VERSION=$(head -n 3 src/static/js/jquery.js | ggrep -o "v[0-9]\.[0-9]\(\.[0-9]\)\?")
else else
VERSION=$(cat src/static/js/jquery.js | head -n 3 | grep -o "v[0-9]\.[0-9]\(\.[0-9]\)\?"); VERSION=$(head -n 3 src/static/js/jquery.js | grep -o "v[0-9]\.[0-9]\(\.[0-9]\)\?")
fi fi
if [ ${VERSION#v} = $NEEDED_VERSION ]; then if [ ${VERSION#v} = $NEEDED_VERSION ]; then
@ -106,7 +113,7 @@ do
if [ ! -f "src/static/custom/$f.js" ]; then if [ ! -f "src/static/custom/$f.js" ]; then
cp "src/static/custom/js.template" "src/static/custom/$f.js" || exit 1 cp "src/static/custom/js.template" "src/static/custom/$f.js" || exit 1
fi fi
if [ ! -f "src/static/custom/$f.css" ]; then if [ ! -f "src/static/custom/$f.css" ]; then
cp "src/static/custom/css.template" "src/static/custom/$f.css" || exit 1 cp "src/static/custom/css.template" "src/static/custom/$f.css" || exit 1
fi fi

View File

@ -247,6 +247,30 @@ Things in context:
This hook will allow a plug-in developer to re-write each line when exporting to HTML. This hook will allow a plug-in developer to re-write each line when exporting to HTML.
Example:
```
var Changeset = require("ep_etherpad-lite/static/js/Changeset");
exports.getLineHTMLForExport = function (hook, context) {
var header = _analyzeLine(context.attribLine, context.apool);
if (header) {
return "<" + header + ">" + context.lineContents + "</" + header + ">";
}
}
function _analyzeLine(alineAttrs, apool) {
var header = null;
if (alineAttrs) {
var opIter = Changeset.opIterator(alineAttrs);
if (opIter.hasNext()) {
var op = opIter.next();
header = Changeset.opAttributeValue(op, 'heading', apool);
}
}
return header;
}
```
## stylesForExport ## stylesForExport
Called from: src/node/utils/ExportHtml.js Called from: src/node/utils/ExportHtml.js
@ -314,7 +338,7 @@ exports.exportHtmlAdditionalTags = function(hook, pad, cb){
var padId = pad.id; var padId = pad.id;
cb(["massive","jugs"]); cb(["massive","jugs"]);
}; };
```
## userLeave ## userLeave
Called from src/node/handler/PadMessageHandler.js Called from src/node/handler/PadMessageHandler.js

92
src/etherpad_icon.svg Normal file
View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
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"
version="1.1"
width="16"
height="16"
id="svg2987">
<defs
id="defs2989" />
<metadata
id="metadata2992">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(0,-1036.3618)"
id="layer1">
<path
d="m 5.0621446,1039.5621 c 5.6960494,0 6.2053964,0 6.2053964,0 l -0.0238,-0.8981 -3.131226,-0.018 -3.1312269,-0.018 z"
id="path3806"
style="fill:#464646;fill-opacity:1;stroke:#464646;stroke-width:0.68021488;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 12.4892,1052.3561 0,-2.1733 2.173211,0 0,2.1733 z"
id="path3770-7-0-9"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
<path
d="m 1.6231475,1052.3561 0,-2.1733 2.1732107,0 0,2.1733 z"
id="path3770-7-0"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
<path
d="m 2.7097528,1041.49 2.1732106,-1.0866 0,-2.1251"
id="path3775"
style="fill:none;stroke:#aeaeae;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 13.575806,1041.49 -2.17321,-1.0866 0.0065,-2.0833"
id="path3777"
style="fill:none;stroke:#aeaeae;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 1.6231475,1041.49 c 0.014561,3.8432 -0.019342,6.178 0,7.6063 0.030207,2.23 0,2.1732 0,2.1732 1.1853886,0 1.1853886,0 1.1853886,1.0866 l 10.6684869,0 c 0,-1.0866 0,-1.0866 1.185388,-1.0866 0,-3.26 0,-6.5198 0,-9.7795 z"
id="path3019"
style="fill:#464646;fill-opacity:1;stroke:none" />
<path
d="m 3.7963582,1050.1828 c 6.3865768,0 8.6928418,0 8.6928418,0"
id="path3023"
style="fill:none;stroke:#09c900;stroke-width:1.07546031;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 3.7963582,1048.0095 8.6928418,0"
id="path3025"
style="fill:none;stroke:#fcc200;stroke-width:1.1616298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 3.7963582,1045.8365 8.6928418,0"
id="path3027"
style="fill:none;stroke:#00a3fb;stroke-width:1.1616298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 3.7963582,1043.6632 8.6928418,0"
id="path3029"
style="fill:none;stroke:#ff4091;stroke-width:1.1616298;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m 1.6231475,1042.5766 0,-4.3464 1.0866053,0 0,4.3464 z"
id="path3770"
style="fill:#464646;fill-opacity:1;stroke:none" />
<path
d="m 13.575806,1042.5766 0,-4.3464 1.086605,0 0,4.3464 z"
id="path3770-1"
style="fill:#464646;fill-opacity:1;stroke:none" />
<path
d="m 1.6231475,1038.2302 0,-1.0867 1.0866053,0 0,1.0867 z"
id="path3770-7"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
<path
d="m 13.575806,1038.2302 0,-1.0867 1.086605,0 0,1.0867 z"
id="path3770-4"
style="fill:#b1b1b1;fill-opacity:1;stroke:none" />
<path
d="m 5.3413804,1038.5358 c 2.6160566,-2.5761 3.1649988,-2.3796 5.6028086,0.018"
id="path3767"
style="fill:none;stroke:#464646;stroke-width:0.54330266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.5999999;stroke-opacity:1;stroke-dasharray:none" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -3,7 +3,8 @@
"authors": [ "authors": [
"Ali1", "Ali1",
"Tux-tn", "Tux-tn",
"Alami" "Alami",
"Meno25"
] ]
}, },
"index.newPad": "باد جديد", "index.newPad": "باد جديد",
@ -11,14 +12,14 @@
"pad.toolbar.bold.title": "سميك (Ctrl-B)", "pad.toolbar.bold.title": "سميك (Ctrl-B)",
"pad.toolbar.italic.title": "مائل (Ctrl-I)", "pad.toolbar.italic.title": "مائل (Ctrl-I)",
"pad.toolbar.underline.title": "تسطير (Ctrl-U)", "pad.toolbar.underline.title": "تسطير (Ctrl-U)",
"pad.toolbar.strikethrough.title": "شطب", "pad.toolbar.strikethrough.title": "شطب (Ctrl+5)",
"pad.toolbar.ol.title": "قائمة مرتبة", "pad.toolbar.ol.title": "قائمة مرتبة (Ctrl+Shift+N)",
"pad.toolbar.ul.title": "قائمة غير مرتبة", "pad.toolbar.ul.title": "قائمة غير مرتبة (Ctrl+Shift+L)",
"pad.toolbar.indent.title": "إزاحة", "pad.toolbar.indent.title": "إزاحة",
"pad.toolbar.unindent.title": "حذف الإزاحة", "pad.toolbar.unindent.title": "حذف الإزاحة",
"pad.toolbar.undo.title": "فك (Ctrl-Z)", "pad.toolbar.undo.title": "فك (Ctrl-Z)",
"pad.toolbar.redo.title": "تكرار (Ctrl-Y)", "pad.toolbar.redo.title": "تكرار (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "مسح ألوان التأليف", "pad.toolbar.clearAuthorship.title": "مسح ألوان التأليف (Ctrl+Shift+C)",
"pad.toolbar.import_export.title": "استيراد/تصدير من/إلى تنسيقات ملفات مختلفة", "pad.toolbar.import_export.title": "استيراد/تصدير من/إلى تنسيقات ملفات مختلفة",
"pad.toolbar.timeslider.title": "متصفح التاريخ", "pad.toolbar.timeslider.title": "متصفح التاريخ",
"pad.toolbar.savedRevision.title": "حفظ المراجعة", "pad.toolbar.savedRevision.title": "حفظ المراجعة",
@ -46,6 +47,7 @@
"pad.importExport.import": "تحميل أي ملف نصي أو وثيقة", "pad.importExport.import": "تحميل أي ملف نصي أو وثيقة",
"pad.importExport.importSuccessful": "ناجح!", "pad.importExport.importSuccessful": "ناجح!",
"pad.importExport.export": "تصدير الباد الحالي بصفة:", "pad.importExport.export": "تصدير الباد الحالي بصفة:",
"pad.importExport.exportetherpad": "إيثرباد",
"pad.importExport.exporthtml": "إتش تي إم إل", "pad.importExport.exporthtml": "إتش تي إم إل",
"pad.importExport.exportplain": "نص عادي", "pad.importExport.exportplain": "نص عادي",
"pad.importExport.exportword": "مايكروسوفت وورد", "pad.importExport.exportword": "مايكروسوفت وورد",

View File

@ -3,35 +3,36 @@
"authors": [ "authors": [
"AZISS", "AZISS",
"Khan27", "Khan27",
"Mushviq Abdulla" "Mushviq Abdulla",
"Wertuose"
] ]
}, },
"index.newPad": "Yeni Pad", "index.newPad": "Yeni lövhə",
"index.createOpenPad": "və ya Pad-ı adı ilə yarat/aç:", "index.createOpenPad": "və ya lövhəni bu adla yarat/aç:",
"pad.toolbar.bold.title": "Qalın (Ctrl-B)", "pad.toolbar.bold.title": "Qalın (Ctrl-B)",
"pad.toolbar.italic.title": "Kursiv (Ctrl-I)", "pad.toolbar.italic.title": "Kursiv (Ctrl-I)",
"pad.toolbar.underline.title": "Altından xətt çəkmə (Ctrl-U)", "pad.toolbar.underline.title": "Altından xətt çəkmə (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Pozulma", "pad.toolbar.strikethrough.title": "Üstdən xətləmək (Ctrl+5)",
"pad.toolbar.ol.title": "Qaydaya salınmış siyahı", "pad.toolbar.ol.title": "Sıralanmış siyahı (Ctrl+Shift+N)",
"pad.toolbar.ul.title": "Qaydaya salınmamış siyahı", "pad.toolbar.ul.title": "Sırasız siyahı (Ctrl+Shift+L)",
"pad.toolbar.indent.title": "Abzas", "pad.toolbar.indent.title": "Abzas (TAB)",
"pad.toolbar.unindent.title": ıxıntı", "pad.toolbar.unindent.title": ıxıntı (Shift+TAB)",
"pad.toolbar.undo.title": "Geri Al (Ctrl-Z)", "pad.toolbar.undo.title": "Geri qaytar (Ctrl+Z)",
"pad.toolbar.redo.title": "Qaytarmaq (Ctrl-Y)", "pad.toolbar.redo.title": "Qaytar (Ctrl+Y)",
"pad.toolbar.clearAuthorship.title": "Müəlliflik Rənglərini Təmizlə", "pad.toolbar.clearAuthorship.title": "Müəlliflik Rənglərini Təmizlə",
"pad.toolbar.import_export.title": "Müxtəlif fayl formatların(a/dan) idxal/ixrac", "pad.toolbar.import_export.title": "Müxtəlif fayl formatların(a/dan) idxal/ixrac",
"pad.toolbar.timeslider.title": "Vaxt cədvəli", "pad.toolbar.timeslider.title": "Vaxt cədvəli",
"pad.toolbar.savedRevision.title": "Saxlanılan Düzəlişlər", "pad.toolbar.savedRevision.title": "Saxlanılan Düzəlişlər",
"pad.toolbar.settings.title": "Tənzimləmələr", "pad.toolbar.settings.title": "Tənzimləmələr",
"pad.toolbar.embed.title": "Bu pad-ı yayımla", "pad.toolbar.embed.title": "Bu lövhəni paylaş və qur",
"pad.toolbar.showusers.title": "Pad-da istifadəçiləri göstər", "pad.toolbar.showusers.title": "Lövhədəki istifadəçiləri göstər",
"pad.colorpicker.save": "Saxla", "pad.colorpicker.save": "Saxla",
"pad.colorpicker.cancel": "İmtina", "pad.colorpicker.cancel": "İmtina",
"pad.loading": "Yüklənir...", "pad.loading": "Yüklənir...",
"pad.passwordRequired": "Bu pad-a daxil olmaq üçün parol lazımdır", "pad.passwordRequired": "Bu lövhəyə daxil olmaq üçün parol lazımdır",
"pad.permissionDenied": "Bu pad-a daxil olmaq üçün icazəniz yoxdur", "pad.permissionDenied": "Bu lövhəyə daxil olmaq üçün icazəniz yoxdur",
"pad.wrongPassword": "Sizin parolunuz səhvdir", "pad.wrongPassword": "Sizin parolunuz səhvdir",
"pad.settings.padSettings": "Pad Tənzimləmələri", "pad.settings.padSettings": "Lövhə nizamlamaları",
"pad.settings.myView": "Mənim Görüntüm", "pad.settings.myView": "Mənim Görüntüm",
"pad.settings.stickychat": "Söhbət həmişə ekranda", "pad.settings.stickychat": "Söhbət həmişə ekranda",
"pad.settings.colorcheck": "Müəlliflik rəngləri", "pad.settings.colorcheck": "Müəlliflik rəngləri",
@ -45,18 +46,19 @@
"pad.importExport.import_export": "İdxal/İxrac", "pad.importExport.import_export": "İdxal/İxrac",
"pad.importExport.import": "Hər hansı bir mətn faylı və ya sənəd yüklə", "pad.importExport.import": "Hər hansı bir mətn faylı və ya sənəd yüklə",
"pad.importExport.importSuccessful": "Uğurlu!", "pad.importExport.importSuccessful": "Uğurlu!",
"pad.importExport.export": "Hazırki pad-ı ixrac etmək kimi:", "pad.importExport.export": "Hazırkı lövhəni bu şəkildə ixrac et:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Adi mətn", "pad.importExport.exportplain": "Adi mətn",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF", "pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (ıq Sənəd Formatı)", "pad.importExport.exportopen": "ODF (ıq sənəd formatı)",
"pad.importExport.abiword.innerHTML": "Siz yalnız adi mətndən və ya HTML-dən idxal edə bilərsiniz. İdxalın daha mürəkkəb funksiyaları üçün, zəhmət olmasa, <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"> AbiWord-i quraşdırın</a>.", "pad.importExport.abiword.innerHTML": "Siz yalnız adi mətndən və ya HTML-dən idxal edə bilərsiniz. İdxalın daha mürəkkəb funksiyaları üçün, zəhmət olmasa, <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"> AbiWord-i quraşdırın</a>.",
"pad.modals.connected": "Bağlandı.", "pad.modals.connected": "Bağlandı.",
"pad.modals.reconnecting": "Sizin pad yenidən qoşulur..", "pad.modals.reconnecting": "Sizin lövhə yenidən qoşulur..",
"pad.modals.forcereconnect": "Məcbur təkrarən bağlan", "pad.modals.forcereconnect": "Məcbur təkrarən bağlan",
"pad.modals.userdup": "Başqa pəncərədə artıq açıqdır", "pad.modals.userdup": "Başqa pəncərədə artıq açıqdır",
"pad.modals.userdup.explanation": "Sənəd, ola bilsin ki, bu kompyuterdə, brauzerin bir neçə pəncərəsində açılmışdır.", "pad.modals.userdup.explanation": "Bu lövhə, ola bilsin ki, bu kompüterdəki brauzerin bir neçə pəncərəsində açılmışdır.",
"pad.modals.userdup.advice": "Bu pəncərədən istifadəylə yenidən qoşulun.", "pad.modals.userdup.advice": "Bu pəncərədən istifadəylə yenidən qoşulun.",
"pad.modals.unauth": "İcazəli deyil", "pad.modals.unauth": "İcazəli deyil",
"pad.modals.unauth.explanation": "Bu səhifəyə baxdığınız vaxt sizin icazəniz dəyişilib. Bərpa etmək üşün yenidən cəhd edin.", "pad.modals.unauth.explanation": "Bu səhifəyə baxdığınız vaxt sizin icazəniz dəyişilib. Bərpa etmək üşün yenidən cəhd edin.",
@ -69,22 +71,22 @@
"pad.modals.slowcommit.cause": "Bu şəbəkə bağlantısında problemlər yarana bilər.", "pad.modals.slowcommit.cause": "Bu şəbəkə bağlantısında problemlər yarana bilər.",
"pad.modals.badChangeset.explanation": "Etdiyiniz bir redaktə sinxronizasiya serveri tərəfindən qeyri-leqal/qanundan kənar olaraq təsbit edildi.", "pad.modals.badChangeset.explanation": "Etdiyiniz bir redaktə sinxronizasiya serveri tərəfindən qeyri-leqal/qanundan kənar olaraq təsbit edildi.",
"pad.modals.badChangeset.cause": "Bu, yanlış server tərtibatı ya da başqa bir gözlənilməyən davranışlar nəticəsində ola bilər. Bu sizə bir xəta imiş kimi görünürsə lütfən servis nəzarətçisi ilə əlaqə yaradın. Redaktəyə davam etmək üçün yenidən qoşulmanı yoxlayın.", "pad.modals.badChangeset.cause": "Bu, yanlış server tərtibatı ya da başqa bir gözlənilməyən davranışlar nəticəsində ola bilər. Bu sizə bir xəta imiş kimi görünürsə lütfən servis nəzarətçisi ilə əlaqə yaradın. Redaktəyə davam etmək üçün yenidən qoşulmanı yoxlayın.",
"pad.modals.corruptPad.explanation": "Əldə etməyə çalışdığınız sənəd zədəlidir.", "pad.modals.corruptPad.explanation": "Daxil olmağa çalışdığınız lövhə zədəlidir.",
"pad.modals.corruptPad.cause": "Bu, yanlış server tərtibatı ya da başqa bir gözlənilməyən davranışlardan əmələ gələ bilər. Lütfən servis nəzarətçisi ilə əlaqə yaradın.", "pad.modals.corruptPad.cause": "Bu, yanlış server tərtibatı ya da başqa bir gözlənilməyən davranışlardan əmələ gələ bilər. Lütfən servis nəzarətçisi ilə əlaqə yaradın.",
"pad.modals.deleted": "Silindi.", "pad.modals.deleted": "Silindi.",
"pad.modals.deleted.explanation": "Bu pad silindi.", "pad.modals.deleted.explanation": "Bu lövhə silindi.",
"pad.modals.disconnected": "Əlaqə kəsilib.", "pad.modals.disconnected": "Əlaqə kəsilib.",
"pad.modals.disconnected.explanation": "Serverə qoşulma itirilib", "pad.modals.disconnected.explanation": "Serverə qoşulma itirilib",
"pad.modals.disconnected.cause": "Server istifadə olunmur. Əgər problem təkrarlanacaqsa, bizə bildirin.", "pad.modals.disconnected.cause": "Server istifadə olunmur. Əgər problem təkrarlanacaqsa, bizə bildirin.",
"pad.share": "Bu pad-ı yayımla", "pad.share": "Bu lövhəni paylaş",
"pad.share.readonly": "Yalnız oxuyun", "pad.share.readonly": "Yalnız oxuyun",
"pad.share.link": "Keçid", "pad.share.link": "Keçid",
"pad.share.emebdcode": "URL-ni yayımla", "pad.share.emebdcode": "URL-ni yayımla",
"pad.chat": "Söhbət", "pad.chat": "Söhbət",
"pad.chat.title": "Bu pad üçün chat açın.", "pad.chat.title": "Bu lövhə üçün çat açın.",
"pad.chat.loadmessages": "Daha çox mesaj yüklə", "pad.chat.loadmessages": "Daha çox mesaj yüklə",
"timeslider.pageTitle": "{{appTitle}} Vaxt cədvəli", "timeslider.pageTitle": "{{appTitle}} Vaxt cədvəli",
"timeslider.toolbar.returnbutton": "Pad-a qayıt", "timeslider.toolbar.returnbutton": "Lövhəyə qayıt",
"timeslider.toolbar.authors": "Müəlliflər:", "timeslider.toolbar.authors": "Müəlliflər:",
"timeslider.toolbar.authorsList": "Müəllif yoxdur", "timeslider.toolbar.authorsList": "Müəllif yoxdur",
"timeslider.toolbar.exportlink.title": "İxrac", "timeslider.toolbar.exportlink.title": "İxrac",
@ -104,18 +106,19 @@
"timeslider.month.october": "Oktyabr", "timeslider.month.october": "Oktyabr",
"timeslider.month.november": "Noyabr", "timeslider.month.november": "Noyabr",
"timeslider.month.december": "Dekabr", "timeslider.month.december": "Dekabr",
"timeslider.unnamedauthors": "{{num}} adsız müəlliflər", "timeslider.unnamedauthors": "{{num}} adsız {[plural(num) one: müəllif, other: müəllif]}",
"pad.savedrevs.marked": "Bu versiya indi yaddaşa saxlanmış kimi nişanlandı", "pad.savedrevs.marked": "Bu versiya indi yaddaşa saxlanmış kimi nişanlandı",
"pad.userlist.entername": "Adınızı daxil et", "pad.userlist.entername": "Adınızı daxil edin",
"pad.userlist.unnamed": "adsız", "pad.userlist.unnamed": "adsız",
"pad.userlist.guest": "Qonaq", "pad.userlist.guest": "Qonaq",
"pad.userlist.deny": "İnkar etmək", "pad.userlist.deny": "İnkar etmək",
"pad.userlist.approve": "Təsdiqləmək", "pad.userlist.approve": "Təsdiqləmək",
"pad.editbar.clearcolors": "Bütün sənədlərdə müəlliflik rənglərini təmizlə?", "pad.editbar.clearcolors": "Bütün sənədlərdə müəllif rəngləri təmizlənsin?",
"pad.impexp.importbutton": "İndi idxal edin", "pad.impexp.importbutton": "İndi idxal et",
"pad.impexp.importing": "İdxal...", "pad.impexp.importing": "İdxal...",
"pad.impexp.confirmimport": "Faylın idxalı cari mətni yeniləyəcək. Siz əminsinizmi ki, davam etmək istəyirsiniz?", "pad.impexp.confirmimport": "Faylın idxalı lövhədəki cari mətni yeniləyəcək. Davam etmək istədiyinizə əminsinizmi?",
"pad.impexp.convertFailed": "Biz bu fayl idxal etmək mümkün deyil idi. Xahiş olunur müxtəlif sənəddən istifadə edin və ya kopyalayıb yapışdırmaq yolundan istifadə edin", "pad.impexp.convertFailed": "Biz bu fayl idxal etmək mümkün deyil idi. Xahiş olunur müxtəlif sənəddən istifadə edin və ya kopyalayıb yapışdırmaq yolundan istifadə edin",
"pad.impexp.padHasData": "Biz bu faylı idxal edə bilmədik, çünki bu lövhədə düzəlişlər edilib, lütfən yeni lövhə idxal edin",
"pad.impexp.uploadFailed": "Yükləmədə səhv, xahiş olunur yenə cəhd edin", "pad.impexp.uploadFailed": "Yükləmədə səhv, xahiş olunur yenə cəhd edin",
"pad.impexp.importfailed": "İdxal zamanı səhv", "pad.impexp.importfailed": "İdxal zamanı səhv",
"pad.impexp.copypaste": "Xahiş edirik kopyalayıb yapışdırın", "pad.impexp.copypaste": "Xahiş edirik kopyalayıb yapışdırın",

View File

@ -28,6 +28,7 @@
"pad.colorpicker.save": "Захаваць", "pad.colorpicker.save": "Захаваць",
"pad.colorpicker.cancel": "Скасаваць", "pad.colorpicker.cancel": "Скасаваць",
"pad.loading": "Загрузка...", "pad.loading": "Загрузка...",
"pad.noCookie": "Кукі ня знойдзеныя. Калі ласка, дазвольце кукі ў вашым браўзэры!",
"pad.passwordRequired": "Для доступу да гэтага дакумэнта патрэбны пароль", "pad.passwordRequired": "Для доступу да гэтага дакумэнта патрэбны пароль",
"pad.permissionDenied": "Вы ня маеце дазволу на доступ да гэтага дакумэнта", "pad.permissionDenied": "Вы ня маеце дазволу на доступ да гэтага дакумэнта",
"pad.wrongPassword": "Вы ўвялі няслушны пароль", "pad.wrongPassword": "Вы ўвялі няслушны пароль",
@ -46,6 +47,7 @@
"pad.importExport.import": "Загрузіжайце любыя тэкставыя файлы або дакумэнты", "pad.importExport.import": "Загрузіжайце любыя тэкставыя файлы або дакумэнты",
"pad.importExport.importSuccessful": "Пасьпяхова!", "pad.importExport.importSuccessful": "Пасьпяхова!",
"pad.importExport.export": "Экспартаваць бягучы дакумэнт як:", "pad.importExport.export": "Экспартаваць бягучы дакумэнт як:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Просты тэкст", "pad.importExport.exportplain": "Просты тэкст",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -116,6 +118,7 @@
"pad.impexp.importing": "Імпартаваньне…", "pad.impexp.importing": "Імпартаваньне…",
"pad.impexp.confirmimport": "Імпарт файла перазапіша цяперашні тэкст дакумэнту. Вы ўпэўненыя, што хочаце працягваць?", "pad.impexp.confirmimport": "Імпарт файла перазапіша цяперашні тэкст дакумэнту. Вы ўпэўненыя, што хочаце працягваць?",
"pad.impexp.convertFailed": "Не атрымалася імпартаваць гэты файл. Калі ласка, выкарыстайце іншы фармат дакумэнту або скапіюйце ўручную.", "pad.impexp.convertFailed": "Не атрымалася імпартаваць гэты файл. Калі ласка, выкарыстайце іншы фармат дакумэнту або скапіюйце ўручную.",
"pad.impexp.padHasData": "Мы не змаглі імпартаваць гэты файл, бо дакумэнт ужо мае зьмены, калі ласка, імпартуйце ў новы дакумэнт",
"pad.impexp.uploadFailed": "Загрузка не атрымалася, калі ласка, паспрабуйце яшчэ раз", "pad.impexp.uploadFailed": "Загрузка не атрымалася, калі ласка, паспрабуйце яшчэ раз",
"pad.impexp.importfailed": "Памылка імпарту", "pad.impexp.importfailed": "Памылка імпарту",
"pad.impexp.copypaste": "Калі ласка, скапіюйце і ўстаўце", "pad.impexp.copypaste": "Калі ласка, скапіюйце і ўстаўце",

75
src/locales/bgn.json Normal file
View File

@ -0,0 +1,75 @@
{
"@metadata": {
"authors": [
"Baloch Afghanistan"
]
},
"index.newPad": "یاداشتی نوکین کتابچه",
"index.createOpenPad": "یا جوڑ\t کورتین/پاچ کورتین یک کتابچه ئی یاداشتی بی نام:",
"pad.toolbar.bold.title": "پررنگ (Ctrl-B)",
"pad.toolbar.italic.title": "چوّٹ (Ctrl-I)",
"pad.toolbar.underline.title": "جهلگ خط (Ctrl-U)",
"pad.toolbar.strikethrough.title": "خط وارته (Ctrl+5)",
"pad.toolbar.ol.title": "ترتیب بوتگین لر لیست (Ctrl+Shift+N)",
"pad.toolbar.ul.title": "ترتیب نه بوتگین لر لیست (Ctrl+Shift+L)",
"pad.toolbar.indent.title": "بیئتئ بوتگین (TAB)",
"pad.toolbar.unindent.title": "در آتگی (Shift+TAB)",
"pad.toolbar.undo.title": "باطل‌کورتین (Ctrl-Z)",
"pad.toolbar.redo.title": "شه نوک (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "نویسوکئ رنگانی پاک کورتین (Ctrl+Shift+C)",
"pad.toolbar.import_export.title": "بی تئ کورتین/دَر کورتین شه/بی رکم رکمین قالیبان",
"pad.toolbar.timeslider.title": "وختئ لَگوشوک",
"pad.toolbar.savedRevision.title": "نسخه ئی ذخیره کورتین",
"pad.toolbar.settings.title": "تنظیمات",
"pad.colorpicker.save": "ذخیره",
"pad.colorpicker.cancel": "کنسیل",
"pad.loading": "لودینگ...",
"pad.wrongPassword": "شمی پاسورد جووان نه اینت",
"pad.settings.padSettings": "یاداشتئ دفترچه ئی تنظیمات",
"pad.settings.myView": "نئ دیست",
"pad.settings.stickychat": "هبر موچین وختا بی دیستئ تاکدیمئ سرا بیئت",
"pad.settings.colorcheck": "نویسوکی رنگ ئان",
"pad.settings.linenocheck": "خط ئانی نمبر",
"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": "ساده گین متن",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (پاچین سندئ قالب)",
"pad.importExport.abiword.innerHTML": "شما تا توانیت که شه ساده گین متنی ئین قالب یا اچ‌تی‌ام‌ال بی تئ کنیت . په گیشتیرین کارا ئییان پیشرفته ئین بی تئ کورتینا <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">AbiWord</a> نصب کنیت.",
"pad.modals.connected": "وصل بوت.",
"pad.modals.userdup": "نوکین دروازه گئ پاچ کورتین",
"pad.modals.unauth": "مجاز نه اینت",
"pad.modals.deleted.explanation": "ای یاداشتی دفترچه پاک بوته.",
"pad.share.readonly": "فقط وانتین",
"pad.share.link": "لینک",
"pad.chat": "چت وهبر",
"timeslider.toolbar.exportlink.title": "دَر کورتین",
"timeslider.month.january": "جنوری",
"timeslider.month.february": "فیبروری",
"timeslider.month.march": "مارچ",
"timeslider.month.april": "اپریل",
"timeslider.month.may": "می",
"timeslider.month.june": "جون",
"timeslider.month.july": "جولای",
"timeslider.month.august": "اگوست",
"timeslider.month.september": "سیپٹمبر",
"timeslider.month.october": "اکتوبر",
"timeslider.month.november": "نوامبر",
"timeslider.month.december": "ڈ\tسمبر",
"timeslider.unnamedauthors": "{{num}} بی نامین نویسوک",
"pad.userlist.entername": "وتئ ناما نیویشته بکنیت",
"pad.userlist.unnamed": "بی نام",
"pad.userlist.guest": "مهمان",
"pad.userlist.deny": "رد کورتین",
"pad.userlist.approve": "قبول کورتین",
"pad.impexp.importbutton": "انون بی تئ کن",
"pad.impexp.importing": "بی بی تئ کورتینی حالا...",
"pad.impexp.uploadFailed": "آپلود انجام نه بوت، پدا کوشش کن",
"pad.impexp.copypaste": "کپی پیست کَنیت"
}

View File

@ -13,9 +13,9 @@
"pad.toolbar.bold.title": "Negreta (Ctrl-B)", "pad.toolbar.bold.title": "Negreta (Ctrl-B)",
"pad.toolbar.italic.title": "Cursiva (Ctrl-I)", "pad.toolbar.italic.title": "Cursiva (Ctrl-I)",
"pad.toolbar.underline.title": "Subratllat (Ctrl-U)", "pad.toolbar.underline.title": "Subratllat (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Ratllat", "pad.toolbar.strikethrough.title": "Ratllat (Ctrl+5)",
"pad.toolbar.ol.title": "Llista ordenada", "pad.toolbar.ol.title": "Llista ordenada (Ctrl+Shift+N)",
"pad.toolbar.ul.title": "Llista sense ordenar", "pad.toolbar.ul.title": "Llista sense ordenar (Ctrl+Shift+L)",
"pad.toolbar.indent.title": "Sagnat (TAB)", "pad.toolbar.indent.title": "Sagnat (TAB)",
"pad.toolbar.unindent.title": "Sagnat invers (Majúsc+TAB)", "pad.toolbar.unindent.title": "Sagnat invers (Majúsc+TAB)",
"pad.toolbar.undo.title": "Desfés (Ctrl-Z)", "pad.toolbar.undo.title": "Desfés (Ctrl-Z)",
@ -30,6 +30,7 @@
"pad.colorpicker.save": "Desa", "pad.colorpicker.save": "Desa",
"pad.colorpicker.cancel": "Cancel·la", "pad.colorpicker.cancel": "Cancel·la",
"pad.loading": "S'està carregant...", "pad.loading": "S'està carregant...",
"pad.noCookie": "No s'ha trobat la galeta. Permeteu les galetes en el navegador!",
"pad.passwordRequired": "Us cal una contrasenya per a accedir a aquest pad", "pad.passwordRequired": "Us cal una contrasenya per a accedir a aquest pad",
"pad.permissionDenied": "No teniu permisos per a accedir a aquest pad", "pad.permissionDenied": "No teniu permisos per a accedir a aquest pad",
"pad.wrongPassword": "La contrasenya és incorrecta", "pad.wrongPassword": "La contrasenya és incorrecta",
@ -48,6 +49,7 @@
"pad.importExport.import": "Puja qualsevol fitxer de text o document", "pad.importExport.import": "Puja qualsevol fitxer de text o document",
"pad.importExport.importSuccessful": "Hi ha hagut èxit!", "pad.importExport.importSuccessful": "Hi ha hagut èxit!",
"pad.importExport.export": "Exporta el pad actual com a:", "pad.importExport.export": "Exporta el pad actual com a:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Text net", "pad.importExport.exportplain": "Text net",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -118,6 +120,7 @@
"pad.impexp.importing": "Important...", "pad.impexp.importing": "Important...",
"pad.impexp.confirmimport": "En importar un fitxer se sobreescriurà el text actual del pad. Esteu segur que voleu continuar?", "pad.impexp.confirmimport": "En importar un fitxer se sobreescriurà el text actual del pad. Esteu segur que voleu continuar?",
"pad.impexp.convertFailed": "No és possible d'importar aquest fitxer. Si us plau, podeu provar d'utilitzar un format diferent o copiar i enganxar manualment.", "pad.impexp.convertFailed": "No és possible d'importar aquest fitxer. Si us plau, podeu provar d'utilitzar un format diferent o copiar i enganxar manualment.",
"pad.impexp.padHasData": "No vam poder importar el fitxer perquè el pad ja tenia canvis. Importeu-lo a un nou pad",
"pad.impexp.uploadFailed": "Ha fallat la càrrega. Torneu-ho a provar", "pad.impexp.uploadFailed": "Ha fallat la càrrega. Torneu-ho a provar",
"pad.impexp.importfailed": "Ha fallat la importació", "pad.impexp.importfailed": "Ha fallat la importació",
"pad.impexp.copypaste": "Si us plau, copieu i enganxeu", "pad.impexp.copypaste": "Si us plau, copieu i enganxeu",

View File

@ -48,6 +48,7 @@
"pad.importExport.import": "Nahrát libovolný textový soubor nebo dokument", "pad.importExport.import": "Nahrát libovolný textový soubor nebo dokument",
"pad.importExport.importSuccessful": "Úspěšně!", "pad.importExport.importSuccessful": "Úspěšně!",
"pad.importExport.export": "Exportovat stávající Pad jako:", "pad.importExport.export": "Exportovat stávající Pad jako:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Prostý text", "pad.importExport.exportplain": "Prostý text",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",

View File

@ -29,6 +29,7 @@
"pad.colorpicker.save": "Speichern", "pad.colorpicker.save": "Speichern",
"pad.colorpicker.cancel": "Abbrechen", "pad.colorpicker.cancel": "Abbrechen",
"pad.loading": "Laden …", "pad.loading": "Laden …",
"pad.noCookie": "Das Cookie konnte nicht gefunden werden. Bitte erlaube Cookies in deinem Browser!",
"pad.passwordRequired": "Sie benötigen ein Passwort, um auf dieses Pad zuzugreifen", "pad.passwordRequired": "Sie benötigen ein Passwort, um auf dieses Pad zuzugreifen",
"pad.permissionDenied": "Sie haben keine Berechtigung, um auf dieses Pad zuzugreifen", "pad.permissionDenied": "Sie haben keine Berechtigung, um auf dieses Pad zuzugreifen",
"pad.wrongPassword": "Ihr Passwort war falsch", "pad.wrongPassword": "Ihr Passwort war falsch",
@ -47,6 +48,7 @@
"pad.importExport.import": "Text-Datei oder Dokument hochladen", "pad.importExport.import": "Text-Datei oder Dokument hochladen",
"pad.importExport.importSuccessful": "Erfolgreich!", "pad.importExport.importSuccessful": "Erfolgreich!",
"pad.importExport.export": "Aktuelles Pad exportieren als:", "pad.importExport.export": "Aktuelles Pad exportieren als:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Textdatei", "pad.importExport.exportplain": "Textdatei",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -117,6 +119,7 @@
"pad.impexp.importing": "Importiere …", "pad.impexp.importing": "Importiere …",
"pad.impexp.confirmimport": "Das Importieren einer Datei überschreibt den aktuellen Text des Pads. Wollen Sie wirklich fortfahren?", "pad.impexp.confirmimport": "Das Importieren einer Datei überschreibt den aktuellen Text des Pads. Wollen Sie wirklich fortfahren?",
"pad.impexp.convertFailed": "Wir können diese Datei nicht importieren. Bitte verwenden Sie ein anderes Dokumentformat oder übertragen Sie den Text manuell.", "pad.impexp.convertFailed": "Wir können diese Datei nicht importieren. Bitte verwenden Sie ein anderes Dokumentformat oder übertragen Sie den Text manuell.",
"pad.impexp.padHasData": "Wir konnten diese Datei nicht importieren, da dieses Pad bereits Änderungen hat. Bitte importiere zu einem neuen Pad.",
"pad.impexp.uploadFailed": "Der Upload ist fehlgeschlagen. Bitte versuchen Sie es erneut.", "pad.impexp.uploadFailed": "Der Upload ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
"pad.impexp.importfailed": "Import fehlgeschlagen", "pad.impexp.importfailed": "Import fehlgeschlagen",
"pad.impexp.copypaste": "Bitte kopieren und einfügen", "pad.impexp.copypaste": "Bitte kopieren und einfügen",

View File

@ -48,6 +48,7 @@
"pad.modals.userdup": "Zewbina pençere de bi a", "pad.modals.userdup": "Zewbina pençere de bi a",
"pad.modals.unauth": "Selahiyetdar niyo", "pad.modals.unauth": "Selahiyetdar niyo",
"pad.modals.initsocketfail": "Nêresneyêno ciyageyroği.", "pad.modals.initsocketfail": "Nêresneyêno ciyageyroği.",
"pad.modals.slowcommit.explanation": "Server cewab nêdano.",
"pad.modals.deleted": "Esteriya.", "pad.modals.deleted": "Esteriya.",
"pad.modals.deleted.explanation": "Ena ped wedariye", "pad.modals.deleted.explanation": "Ena ped wedariye",
"pad.share": "Na ped vıla ke", "pad.share": "Na ped vıla ke",

View File

@ -30,6 +30,7 @@
"pad.colorpicker.save": "Αποθήκευση", "pad.colorpicker.save": "Αποθήκευση",
"pad.colorpicker.cancel": "Άκυρο", "pad.colorpicker.cancel": "Άκυρο",
"pad.loading": "Φόρτωση...", "pad.loading": "Φόρτωση...",
"pad.noCookie": "Το cookie δεν βρέθηκε. Παρακαλώ επιτρέψτε τα cookies στον περιηγητή σας!",
"pad.passwordRequired": "Χρειάζεστε κωδικό πρόσβασης για πρόσβαση σε αυτό το pad", "pad.passwordRequired": "Χρειάζεστε κωδικό πρόσβασης για πρόσβαση σε αυτό το pad",
"pad.permissionDenied": "Δεν έχετε δικαίωμα πρόσβασης σε αυτό το pad", "pad.permissionDenied": "Δεν έχετε δικαίωμα πρόσβασης σε αυτό το pad",
"pad.wrongPassword": "Ο κωδικός σας ήταν λανθασμένος", "pad.wrongPassword": "Ο κωδικός σας ήταν λανθασμένος",
@ -48,6 +49,7 @@
"pad.importExport.import": "Αποστολή οποιουδήποτε αρχείου κειμένου ή εγγράφου", "pad.importExport.import": "Αποστολή οποιουδήποτε αρχείου κειμένου ή εγγράφου",
"pad.importExport.importSuccessful": "Επιτυχής!", "pad.importExport.importSuccessful": "Επιτυχής!",
"pad.importExport.export": "Εξαγωγή τρέχοντος pad ως:", "pad.importExport.export": "Εξαγωγή τρέχοντος pad ως:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Απλό κείμενο", "pad.importExport.exportplain": "Απλό κείμενο",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -118,6 +120,7 @@
"pad.impexp.importing": "Εισάγεται...", "pad.impexp.importing": "Εισάγεται...",
"pad.impexp.confirmimport": "Η εισαγωγή ενός αρχείου θα αντικαταστήσει το κείμενο του pad. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;", "pad.impexp.confirmimport": "Η εισαγωγή ενός αρχείου θα αντικαταστήσει το κείμενο του pad. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;",
"pad.impexp.convertFailed": "Δεν καταφέραμε να εισάγουμε αυτό το αρχείο. Παρακαλώ χρησιμοποιήστε διαφορετικό τύπο αρχείου ή αντιγράψτε και επικολλήστε χειροκίνητα", "pad.impexp.convertFailed": "Δεν καταφέραμε να εισάγουμε αυτό το αρχείο. Παρακαλώ χρησιμοποιήστε διαφορετικό τύπο αρχείου ή αντιγράψτε και επικολλήστε χειροκίνητα",
"pad.impexp.padHasData": "Δεν μπορέσαμε να εισάγουμε το αρχείο επειδή το Pad είχε ήδη αλλαγές. Παρακαλούμε εισαγάγετε το αρχείο σε νέο pad",
"pad.impexp.uploadFailed": "Η αποστολή απέτυχε, παρακαλώ προσπαθήστε ξανά", "pad.impexp.uploadFailed": "Η αποστολή απέτυχε, παρακαλώ προσπαθήστε ξανά",
"pad.impexp.importfailed": "Η εισαγωγή απέτυχε", "pad.impexp.importfailed": "Η εισαγωγή απέτυχε",
"pad.impexp.copypaste": "Παρακαλώ αντιγράψτε και επικολλήστε", "pad.impexp.copypaste": "Παρακαλώ αντιγράψτε και επικολλήστε",

View File

@ -32,6 +32,7 @@
"pad.settings.padSettings": "Pad Settings", "pad.settings.padSettings": "Pad Settings",
"pad.settings.myView": "My View", "pad.settings.myView": "My View",
"pad.settings.stickychat": "Chat always on screen", "pad.settings.stickychat": "Chat always on screen",
"pad.settings.chatandusers": "Show Chat and Users",
"pad.settings.colorcheck": "Authorship colors", "pad.settings.colorcheck": "Authorship colors",
"pad.settings.linenocheck": "Line numbers", "pad.settings.linenocheck": "Line numbers",
"pad.settings.rtlcheck": "Read content from right to left?", "pad.settings.rtlcheck": "Read content from right to left?",
@ -120,6 +121,7 @@
"timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) one: author, other: authors ]}", "timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) one: author, other: authors ]}",
"pad.savedrevs.marked": "This revision is now marked as a saved revision", "pad.savedrevs.marked": "This revision is now marked as a saved revision",
"pad.savedrevs.timeslider": "You can see saved revisions by visiting the timeslider",
"pad.userlist.entername": "Enter your name", "pad.userlist.entername": "Enter your name",
"pad.userlist.unnamed": "unnamed", "pad.userlist.unnamed": "unnamed",
"pad.userlist.guest": "Guest", "pad.userlist.guest": "Guest",

View File

@ -35,6 +35,7 @@
"pad.colorpicker.save": "Guardar", "pad.colorpicker.save": "Guardar",
"pad.colorpicker.cancel": "Cancelar", "pad.colorpicker.cancel": "Cancelar",
"pad.loading": "Cargando...", "pad.loading": "Cargando...",
"pad.noCookie": "La cookie no se pudo encontrar. ¡Por favor, habilita las cookies en tu navegador!",
"pad.passwordRequired": "Necesitas una contraseña para acceder a este pad", "pad.passwordRequired": "Necesitas una contraseña para acceder a este pad",
"pad.permissionDenied": "No tienes permiso para acceder a este pad", "pad.permissionDenied": "No tienes permiso para acceder a este pad",
"pad.wrongPassword": "La contraseña era incorrecta", "pad.wrongPassword": "La contraseña era incorrecta",
@ -53,6 +54,7 @@
"pad.importExport.import": "Subir cualquier texto o documento", "pad.importExport.import": "Subir cualquier texto o documento",
"pad.importExport.importSuccessful": "¡Éxito!", "pad.importExport.importSuccessful": "¡Éxito!",
"pad.importExport.export": "Exporta el pad actual como:", "pad.importExport.export": "Exporta el pad actual como:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Texto plano", "pad.importExport.exportplain": "Texto plano",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -123,6 +125,7 @@
"pad.impexp.importing": "Importando...", "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?", "pad.impexp.confirmimport": "Al importar un archivo se borrará el contenido actual del pad. ¿Estás seguro de que quieres continuar?",
"pad.impexp.convertFailed": "No pudimos importar este archivo. Inténtalo con un formato diferente o copia y pega manualmente.", "pad.impexp.convertFailed": "No pudimos importar este archivo. Inténtalo con un formato diferente o copia y pega manualmente.",
"pad.impexp.padHasData": "No hemos podido importar este archivo porque esta almohadilla ya ha tenido cambios, por favor, importa a una nueva almohadilla",
"pad.impexp.uploadFailed": "El envío falló. Intentalo de nuevo.", "pad.impexp.uploadFailed": "El envío falló. Intentalo de nuevo.",
"pad.impexp.importfailed": "Fallo al importar", "pad.impexp.importfailed": "Fallo al importar",
"pad.impexp.copypaste": "Intenta copiar y pegar", "pad.impexp.copypaste": "Intenta copiar y pegar",

View File

@ -31,6 +31,7 @@
"pad.colorpicker.save": "ذخیره", "pad.colorpicker.save": "ذخیره",
"pad.colorpicker.cancel": "لغو", "pad.colorpicker.cancel": "لغو",
"pad.loading": "در حال بارگذاری...", "pad.loading": "در حال بارگذاری...",
"pad.noCookie": "کوکی یافت نشد. لطفاً اجازهٔ اجرای کوکی در مروگرتان را بدهید!",
"pad.passwordRequired": "برای دسترسی به این دفترچه یادداشت نیاز به یک گذرواژه دارید", "pad.passwordRequired": "برای دسترسی به این دفترچه یادداشت نیاز به یک گذرواژه دارید",
"pad.permissionDenied": "شما اجازه‌ی دسترسی به این دفترچه یادداشت را ندارید", "pad.permissionDenied": "شما اجازه‌ی دسترسی به این دفترچه یادداشت را ندارید",
"pad.wrongPassword": "گذرواژه‌ی شما درست نیست", "pad.wrongPassword": "گذرواژه‌ی شما درست نیست",
@ -49,6 +50,7 @@
"pad.importExport.import": "بارگذاری پرونده‌ی متنی یا سند", "pad.importExport.import": "بارگذاری پرونده‌ی متنی یا سند",
"pad.importExport.importSuccessful": "موفقیت آمیز بود!", "pad.importExport.importSuccessful": "موفقیت آمیز بود!",
"pad.importExport.export": "برون‌ریزی این دفترچه یادداشت با قالب:", "pad.importExport.export": "برون‌ریزی این دفترچه یادداشت با قالب:",
"pad.importExport.exportetherpad": "اترپد",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "متن ساده", "pad.importExport.exportplain": "متن ساده",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -119,6 +121,7 @@
"pad.impexp.importing": "در حال درون‌ریزی...", "pad.impexp.importing": "در حال درون‌ریزی...",
"pad.impexp.confirmimport": "با درون‌ریزی یک پرونده نوشتهٔ کنونی دفترچه پاک می‌شود. آیا می‌خواهید ادامه دهید؟", "pad.impexp.confirmimport": "با درون‌ریزی یک پرونده نوشتهٔ کنونی دفترچه پاک می‌شود. آیا می‌خواهید ادامه دهید؟",
"pad.impexp.convertFailed": "ما نمی‌توانیم این پرونده را درون‌ریزی کنیم. خواهشمندیم قالب دیگری برای سندتان انتخاب کرده یا بصورت دستی آنرا کپی کنید", "pad.impexp.convertFailed": "ما نمی‌توانیم این پرونده را درون‌ریزی کنیم. خواهشمندیم قالب دیگری برای سندتان انتخاب کرده یا بصورت دستی آنرا کپی کنید",
"pad.impexp.padHasData": "امکان درون‌ریز این پرونده نیست زیرا این پد تغییر کرده‌است. لطفاً در پد جدید درون‌ریزی کنید.",
"pad.impexp.uploadFailed": "آپلود انجام نشد، دوباره تلاش کنید", "pad.impexp.uploadFailed": "آپلود انجام نشد، دوباره تلاش کنید",
"pad.impexp.importfailed": "درون‌ریزی انجام نشد", "pad.impexp.importfailed": "درون‌ریزی انجام نشد",
"pad.impexp.copypaste": "کپی پیست کنید", "pad.impexp.copypaste": "کپی پیست کنید",

View File

@ -10,7 +10,8 @@
"Tomi Toivio", "Tomi Toivio",
"Veikk0.ma", "Veikk0.ma",
"VezonThunder", "VezonThunder",
"Macofe" "Macofe",
"MrTapsa"
] ]
}, },
"index.newPad": "Uusi muistio", "index.newPad": "Uusi muistio",
@ -35,6 +36,7 @@
"pad.colorpicker.save": "Tallenna", "pad.colorpicker.save": "Tallenna",
"pad.colorpicker.cancel": "Peru", "pad.colorpicker.cancel": "Peru",
"pad.loading": "Ladataan…", "pad.loading": "Ladataan…",
"pad.noCookie": "Evästettä ei löytynyt. Ole hyvä, ja salli evästeet selaimessasi!",
"pad.passwordRequired": "Tämä muistio on suojattu salasanalla.", "pad.passwordRequired": "Tämä muistio on suojattu salasanalla.",
"pad.permissionDenied": "Käyttöoikeutesi eivät riitä tämän muistion käyttämiseen.", "pad.permissionDenied": "Käyttöoikeutesi eivät riitä tämän muistion käyttämiseen.",
"pad.wrongPassword": "Väärä salasana", "pad.wrongPassword": "Väärä salasana",

View File

@ -43,6 +43,7 @@
"pad.colorpicker.save": "Enregistrer", "pad.colorpicker.save": "Enregistrer",
"pad.colorpicker.cancel": "Annuler", "pad.colorpicker.cancel": "Annuler",
"pad.loading": "Chargement…", "pad.loading": "Chargement…",
"pad.noCookie": "Le cookie na pas pu être trouvé. Veuillez autoriser les cookies dans votre navigateur!",
"pad.passwordRequired": "Vous avez besoin d'un mot de passe pour accéder à ce pad", "pad.passwordRequired": "Vous avez besoin d'un mot de passe pour accéder à ce pad",
"pad.permissionDenied": "Il ne vous est pas permis daccéder à ce pad", "pad.permissionDenied": "Il ne vous est pas permis daccéder à ce pad",
"pad.wrongPassword": "Votre mot de passe est incorrect", "pad.wrongPassword": "Votre mot de passe est incorrect",
@ -61,6 +62,7 @@
"pad.importExport.import": "Charger un texte ou un document", "pad.importExport.import": "Charger un texte ou un document",
"pad.importExport.importSuccessful": "Réussi !", "pad.importExport.importSuccessful": "Réussi !",
"pad.importExport.export": "Exporter le pad actuel comme :", "pad.importExport.export": "Exporter le pad actuel comme :",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Texte brut", "pad.importExport.exportplain": "Texte brut",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -131,6 +133,7 @@
"pad.impexp.importing": "Import en cours...", "pad.impexp.importing": "Import en cours...",
"pad.impexp.confirmimport": "Importer un fichier écrasera le texte actuel du pad. Êtes-vous sûr de vouloir le faire ?", "pad.impexp.confirmimport": "Importer un fichier écrasera le texte actuel du pad. Êtes-vous sûr de vouloir le faire ?",
"pad.impexp.convertFailed": "Nous ne pouvons pas importer ce fichier. Veuillez utiliser un autre format de document ou faire un copier/coller manuel", "pad.impexp.convertFailed": "Nous ne pouvons pas importer ce fichier. Veuillez utiliser un autre format de document ou faire un copier/coller manuel",
"pad.impexp.padHasData": "Nous navons pas pu importer ce fichier parce que ce bloc a déjà eu des modifications; veuillez importer vers un nouveau bloc",
"pad.impexp.uploadFailed": "Le téléchargement a échoué, veuillez réessayer", "pad.impexp.uploadFailed": "Le téléchargement a échoué, veuillez réessayer",
"pad.impexp.importfailed": "Échec de l'importation", "pad.impexp.importfailed": "Échec de l'importation",
"pad.impexp.copypaste": "Veuillez copier/coller", "pad.impexp.copypaste": "Veuillez copier/coller",

View File

@ -27,6 +27,7 @@
"pad.colorpicker.save": "Gardar", "pad.colorpicker.save": "Gardar",
"pad.colorpicker.cancel": "Cancelar", "pad.colorpicker.cancel": "Cancelar",
"pad.loading": "Cargando...", "pad.loading": "Cargando...",
"pad.noCookie": "A cookie non se puido atopar. Por favor, habilite as cookies no seu navegador!",
"pad.passwordRequired": "Cómpre un contrasinal para acceder a este documento", "pad.passwordRequired": "Cómpre un contrasinal para acceder a este documento",
"pad.permissionDenied": "Non ten permiso para acceder a este documento", "pad.permissionDenied": "Non ten permiso para acceder a este documento",
"pad.wrongPassword": "O contrasinal era incorrecto", "pad.wrongPassword": "O contrasinal era incorrecto",
@ -45,6 +46,7 @@
"pad.importExport.import": "Cargar un ficheiro de texto ou documento", "pad.importExport.import": "Cargar un ficheiro de texto ou documento",
"pad.importExport.importSuccessful": "Correcto!", "pad.importExport.importSuccessful": "Correcto!",
"pad.importExport.export": "Exportar o documento actual en formato:", "pad.importExport.export": "Exportar o documento actual en formato:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Texto simple", "pad.importExport.exportplain": "Texto simple",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -115,6 +117,7 @@
"pad.impexp.importing": "Importando...", "pad.impexp.importing": "Importando...",
"pad.impexp.confirmimport": "A importación dun ficheiro ha sobrescribir o texto actual do documento. Está seguro de querer continuar?", "pad.impexp.confirmimport": "A importación dun ficheiro ha sobrescribir o texto actual do documento. Está seguro de querer continuar?",
"pad.impexp.convertFailed": "Non somos capaces de importar o ficheiro. Utilice un formato de documento diferente ou copie e pegue manualmente", "pad.impexp.convertFailed": "Non somos capaces de importar o ficheiro. Utilice un formato de documento diferente ou copie e pegue manualmente",
"pad.impexp.padHasData": "Non puidemos importar este ficheiro porque este Pad xa tivo cambios, por favor, importe a un novo pad.",
"pad.impexp.uploadFailed": "Houbo un erro ao cargar o ficheiro; inténteo de novo", "pad.impexp.uploadFailed": "Houbo un erro ao cargar o ficheiro; inténteo de novo",
"pad.impexp.importfailed": "Fallou a importación", "pad.impexp.importfailed": "Fallou a importación",
"pad.impexp.copypaste": "Copie e pegue", "pad.impexp.copypaste": "Copie e pegue",

View File

@ -118,6 +118,7 @@
"pad.impexp.importing": "Importálás…", "pad.impexp.importing": "Importálás…",
"pad.impexp.confirmimport": "Egy fájl importálása felülírja a jelenlegi szöveget a noteszben. Biztos hogy folytatod?", "pad.impexp.confirmimport": "Egy fájl importálása felülírja a jelenlegi szöveget a noteszben. Biztos hogy folytatod?",
"pad.impexp.convertFailed": "Nem tudtuk importálni ezt a fájlt. Kérjük, használj másik dokumentum formátumot, vagy kézzel másold és illeszd be a tartalmat", "pad.impexp.convertFailed": "Nem tudtuk importálni ezt a fájlt. Kérjük, használj másik dokumentum formátumot, vagy kézzel másold és illeszd be a tartalmat",
"pad.impexp.padHasData": "Nem tudjuk importálni ezt a fájlt, mert ez a Pad már megváltozott, kérjük, importálj egy új padra",
"pad.impexp.uploadFailed": "A feltöltés sikertelen, próbáld meg újra", "pad.impexp.uploadFailed": "A feltöltés sikertelen, próbáld meg újra",
"pad.impexp.importfailed": "Az importálás nem sikerült", "pad.impexp.importfailed": "Az importálás nem sikerült",
"pad.impexp.copypaste": "Kérjük másold be", "pad.impexp.copypaste": "Kérjük másold be",

View File

@ -26,6 +26,7 @@
"pad.colorpicker.save": "Salveguardar", "pad.colorpicker.save": "Salveguardar",
"pad.colorpicker.cancel": "Cancellar", "pad.colorpicker.cancel": "Cancellar",
"pad.loading": "Cargamento…", "pad.loading": "Cargamento…",
"pad.noCookie": "Le cookie non pote esser trovate. Per favor permitte le cookies in tu navigator!",
"pad.passwordRequired": "Un contrasigno es necessari pro acceder a iste pad", "pad.passwordRequired": "Un contrasigno es necessari pro acceder a iste pad",
"pad.permissionDenied": "Tu non ha le permission de acceder a iste pad", "pad.permissionDenied": "Tu non ha le permission de acceder a iste pad",
"pad.wrongPassword": "Le contrasigno es incorrecte", "pad.wrongPassword": "Le contrasigno es incorrecte",
@ -44,6 +45,7 @@
"pad.importExport.import": "Incargar qualcunque file de texto o documento", "pad.importExport.import": "Incargar qualcunque file de texto o documento",
"pad.importExport.importSuccessful": "Succedite!", "pad.importExport.importSuccessful": "Succedite!",
"pad.importExport.export": "Exportar le pad actual como:", "pad.importExport.export": "Exportar le pad actual como:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Texto simple", "pad.importExport.exportplain": "Texto simple",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -114,6 +116,7 @@
"pad.impexp.importing": "Importation in curso…", "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?", "pad.impexp.confirmimport": "Le importation de un file superscribera le texto actual del pad. Es tu secur de voler continuar?",
"pad.impexp.convertFailed": "Nos non ha potite importar iste file. Per favor usa un altere formato de documento o copia e colla le texto manualmente.", "pad.impexp.convertFailed": "Nos non ha potite importar iste file. Per favor usa un altere formato de documento o copia e colla le texto manualmente.",
"pad.impexp.padHasData": "Nos non ha potite importar iste file perque iste Pad ha jam habite cambiamentos. Per favor importa lo a un nove pad.",
"pad.impexp.uploadFailed": "Le incargamento ha fallite. Per favor reproba.", "pad.impexp.uploadFailed": "Le incargamento ha fallite. Per favor reproba.",
"pad.impexp.importfailed": "Importation fallite", "pad.impexp.importfailed": "Importation fallite",
"pad.impexp.copypaste": "Per favor copia e colla", "pad.impexp.copypaste": "Per favor copia e colla",

View File

@ -15,6 +15,7 @@
"pad.colorpicker.save": "Späicheren", "pad.colorpicker.save": "Späicheren",
"pad.colorpicker.cancel": "Ofbriechen", "pad.colorpicker.cancel": "Ofbriechen",
"pad.loading": "Lueden...", "pad.loading": "Lueden...",
"pad.noCookie": "Cookie gouf net fonnt. Erlaabt w.e.g. Cookien an Ärem Browser!",
"pad.wrongPassword": "Äert Passwuert ass falsch", "pad.wrongPassword": "Äert Passwuert ass falsch",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Sprooch:", "pad.settings.language": "Sprooch:",

View File

@ -27,6 +27,7 @@
"pad.colorpicker.save": "Зачувај", "pad.colorpicker.save": "Зачувај",
"pad.colorpicker.cancel": "Откажи", "pad.colorpicker.cancel": "Откажи",
"pad.loading": "Вчитувам...", "pad.loading": "Вчитувам...",
"pad.noCookie": "Не можев да го најдам колачето. Овозможете колачиња во вашиот прелистувач!",
"pad.passwordRequired": "Потребна е лозинка за пристап", "pad.passwordRequired": "Потребна е лозинка за пристап",
"pad.permissionDenied": "За овде не е потребна дозвола за пристап", "pad.permissionDenied": "За овде не е потребна дозвола за пристап",
"pad.wrongPassword": "Погрешна лозинка", "pad.wrongPassword": "Погрешна лозинка",
@ -45,6 +46,7 @@
"pad.importExport.import": "Подигање на било каква текстуална податотека или документ", "pad.importExport.import": "Подигање на било каква текстуална податотека или документ",
"pad.importExport.importSuccessful": "Успешно!", "pad.importExport.importSuccessful": "Успешно!",
"pad.importExport.export": "Извези ја тековната тетратка како", "pad.importExport.export": "Извези ја тековната тетратка како",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Прост текст", "pad.importExport.exportplain": "Прост текст",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -115,6 +117,7 @@
"pad.impexp.importing": "Увезувам...", "pad.impexp.importing": "Увезувам...",
"pad.impexp.confirmimport": "Увезувајќи ја податотеката ќе го замените целиот досегашен текст во тетратката. Дали сте сигурни дека сакате да продолжите?", "pad.impexp.confirmimport": "Увезувајќи ја податотеката ќе го замените целиот досегашен текст во тетратката. Дали сте сигурни дека сакате да продолжите?",
"pad.impexp.convertFailed": "Не можев да ја увезам податотеката. Послужете се со поинаков формат или прекопирајте го текстот рачно.", "pad.impexp.convertFailed": "Не можев да ја увезам податотеката. Послужете се со поинаков формат или прекопирајте го текстот рачно.",
"pad.impexp.padHasData": "Не можевме да ја увеземе оваа податотека бидејќи оваа тетратка веќе има промени. Увезете ја во нова тетратка.",
"pad.impexp.uploadFailed": "Подигањето не успеа. Обидете се повторно.", "pad.impexp.uploadFailed": "Подигањето не успеа. Обидете се повторно.",
"pad.impexp.importfailed": "Увозот не успеа", "pad.impexp.importfailed": "Увозот не успеа",
"pad.impexp.copypaste": "Прекопирајте", "pad.impexp.copypaste": "Прекопирајте",

View File

@ -26,6 +26,7 @@
"pad.colorpicker.save": "Simpan", "pad.colorpicker.save": "Simpan",
"pad.colorpicker.cancel": "Batalkan", "pad.colorpicker.cancel": "Batalkan",
"pad.loading": "Sedang dimuatkan...", "pad.loading": "Sedang dimuatkan...",
"pad.noCookie": "Cookie tidak dapat dijumpai. Tolong benarkan cookie dalam pelayar anda!",
"pad.passwordRequired": "Anda memerlukan kata laluan untuk mengakses pad ini", "pad.passwordRequired": "Anda memerlukan kata laluan untuk mengakses pad ini",
"pad.permissionDenied": "Anda tiada kebenaran untuk mengakses pad ini", "pad.permissionDenied": "Anda tiada kebenaran untuk mengakses pad ini",
"pad.wrongPassword": "Kata laluan anda salah", "pad.wrongPassword": "Kata laluan anda salah",
@ -44,6 +45,7 @@
"pad.importExport.import": "Muat naik sebarang fail teks atau dokumen", "pad.importExport.import": "Muat naik sebarang fail teks atau dokumen",
"pad.importExport.importSuccessful": "Berjaya!", "pad.importExport.importSuccessful": "Berjaya!",
"pad.importExport.export": "Eksport pad semasa sebagai:", "pad.importExport.export": "Eksport pad semasa sebagai:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Teks biasa", "pad.importExport.exportplain": "Teks biasa",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -114,6 +116,7 @@
"pad.impexp.importing": "Sedang mengimport...", "pad.impexp.importing": "Sedang mengimport...",
"pad.impexp.confirmimport": "Mengimport fail akan menulis ganti teks semasa pada pad ini. Adakah anda benar-benar ingin teruskan?", "pad.impexp.confirmimport": "Mengimport fail akan menulis ganti teks semasa pada pad ini. Adakah anda benar-benar ingin teruskan?",
"pad.impexp.convertFailed": "Fail tidak dapat diimport. Sila gunakan format dokumen yang lain atau salin tampal secara manual", "pad.impexp.convertFailed": "Fail tidak dapat diimport. Sila gunakan format dokumen yang lain atau salin tampal secara manual",
"pad.impexp.padHasData": "Kami tidak dapat mengimport fail ini kerana Pad ini sudah mengalami perubahan. Sila import ke pad yang baru",
"pad.impexp.uploadFailed": "Muat naik gagal, sila cuba lagi", "pad.impexp.uploadFailed": "Muat naik gagal, sila cuba lagi",
"pad.impexp.importfailed": "Import gagal", "pad.impexp.importfailed": "Import gagal",
"pad.impexp.copypaste": "Sila salin tampal", "pad.impexp.copypaste": "Sila salin tampal",

View File

@ -1,7 +1,8 @@
{ {
"@metadata": { "@metadata": {
"authors": [ "authors": [
"Chelin" "Chelin",
"C.R."
] ]
}, },
"index.newPad": "Novo Pad", "index.newPad": "Novo Pad",
@ -21,23 +22,58 @@
"pad.toolbar.timeslider.title": "Presentazzione cronologgia", "pad.toolbar.timeslider.title": "Presentazzione cronologgia",
"pad.toolbar.savedRevision.title": "Sarva revisione", "pad.toolbar.savedRevision.title": "Sarva revisione",
"pad.toolbar.settings.title": "Mpustaziune", "pad.toolbar.settings.title": "Mpustaziune",
"pad.toolbar.embed.title": "Sparte e nzerta stu Pad",
"pad.toolbar.showusers.title": "Mmusta ll'utente ncopp'a stu Pad",
"pad.colorpicker.save": "Sarva", "pad.colorpicker.save": "Sarva",
"pad.colorpicker.cancel": "Canciella", "pad.colorpicker.cancel": "Canciella",
"pad.loading": "Carecamiento 'n curso…", "pad.loading": "Carecamiento 'n curso…",
"pad.noCookie": "Cookie nun truvata. Pe' piacere premmettete 'e cookies dint' 'o navigatóre vuosto!",
"pad.passwordRequired": "Pe' accede a chisto Pad è necessaria 'na password", "pad.passwordRequired": "Pe' accede a chisto Pad è necessaria 'na password",
"pad.permissionDenied": "Nun se dispunne d\"e permisse necessare pe' accede a chisto Pad", "pad.permissionDenied": "Nun se dispunne d\"e permisse necessare pe' accede a chisto Pad",
"pad.wrongPassword": "'A password è sbagliata", "pad.wrongPassword": "'A password è sbagliata",
"pad.settings.padSettings": "Mpostazzione d\"o pad", "pad.settings.padSettings": "Mpostazzione d\"o pad",
"pad.settings.myView": "Mia Veruta",
"pad.settings.stickychat": "Chat sempe ncopp' 'o schermo",
"pad.settings.colorcheck": "Auturevolezza pe' culure",
"pad.settings.linenocheck": "Nummere 'e riga",
"pad.settings.rtlcheck": "Lieggere 'e cuntenute 'a destra a smerza?",
"pad.settings.fontType": "Tipo 'e funte:",
"pad.settings.fontType.normal": "Nurmale", "pad.settings.fontType.normal": "Nurmale",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Visualizzazione globbale",
"pad.settings.language": "Llengua:",
"pad.importExport.import_export": "Mpurtaziune/sportaziune",
"pad.importExport.import": "Carreca coccherunto testo o documento",
"pad.importExport.importSuccessful": "Ngarrata!",
"pad.importExport.export": "Sportà stu Pad comme:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Testo nurmale",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF", "pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.abiword.innerHTML": "Putite surtanto mpurtà testo chiano o furmatte HTML. Pe n'avé sisteme cchiù annanze 'e mpurtazione pe' piacere <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">installate Abiword</a>.",
"pad.modals.connected": "Cunnesso.", "pad.modals.connected": "Cunnesso.",
"pad.modals.reconnecting": "Ricunnessione ô pad 'n curso...", "pad.modals.reconnecting": "Ricunnessione ô pad 'n curso...",
"pad.modals.forcereconnect": "Forza 'a ricunnessione", "pad.modals.forcereconnect": "Forza 'a ricunnessione",
"pad.modals.userdup": "Aprito 'n n'ata fenesta", "pad.modals.userdup": "Aprito 'n n'ata fenesta",
"pad.modals.userdup.explanation": "Stu Pad pare fosse araputo dint'a cchiù 'e na fenesta 'e navigatore dint'a stu computer.",
"pad.modals.userdup.advice": "Riconnettateve pe' putè ausà mmece sta fenesta.",
"pad.modals.unauth": "Nun autorizzato", "pad.modals.unauth": "Nun autorizzato",
"pad.modals.unauth.explanation": "'E premmesse vuoste so' cagnate pe' tramente ca se vereva sta paggena. Tentate 'e ve riconnettà.",
"pad.modals.looping.explanation": "Ce stanno probbleme 'e comunicazione c' 'o server 'e sincronizzaziona.",
"pad.modals.looping.cause": "Può darse ca ve site cullegato pe' mmiez' 'e nu firewall incompatibbele o proxy.",
"pad.modals.initsocketfail": "Nun se può arrevà 'o server.",
"pad.modals.initsocketfail.explanation": "Nun se può cunnettà 'o server e sincronizzaziona.",
"pad.modals.initsocketfail.cause": "Stu fatto è succiesso, probabbilmente pe' bbìa 'e nu probblema c' 'o navigatóre 'o ll'internet.",
"pad.modals.slowcommit.explanation": "'O server nun risponne.",
"pad.modals.slowcommit.cause": "Stu fatto può darse ca è causato pe' bbìa 'e prubbleme 'e connettività 'e rezza.",
"pad.modals.badChangeset.explanation": "Nu cagnamento ca stavate facenno è stato classeficato comme illegale p' 'o server 'e sincronizzaziona.",
"pad.modals.badChangeset.cause": "Chistu fatto può darse ca è causato pe' bbìa 'e na mpustazione errata d' 'o server o cocch'atu comportamento nun preveduto. Pe' piacere cuntattate l'ammenistratore d' 'o servizio, si se pienza ca chist'è n'errore. Tentate a ve riconnettà pe' cuntinuà 'a edità.",
"pad.modals.corruptPad.explanation": "'O pad addò vulevate trasì è scassato.",
"pad.modals.deleted": "Canciellato.", "pad.modals.deleted": "Canciellato.",
"pad.share.link": "Jonta",
"pad.chat": "Chiàcchiera",
"timeslider.pageTitle": "Cronologgia {{appTitle}}", "timeslider.pageTitle": "Cronologgia {{appTitle}}",
"timeslider.toolbar.returnbutton": "Ritorna ô Pad", "timeslider.toolbar.returnbutton": "Ritorna ô Pad",
"timeslider.toolbar.authors": "Auture:", "timeslider.toolbar.authors": "Auture:",

View File

@ -5,7 +5,8 @@
"Ty221", "Ty221",
"WTM", "WTM",
"Woytecr", "Woytecr",
"Macofe" "Macofe",
"Pan Cube"
] ]
}, },
"index.newPad": "Nowy dokument", "index.newPad": "Nowy dokument",
@ -48,6 +49,7 @@
"pad.importExport.import": "Prześlij dowolny plik tekstowy lub dokument", "pad.importExport.import": "Prześlij dowolny plik tekstowy lub dokument",
"pad.importExport.importSuccessful": "Sukces!", "pad.importExport.importSuccessful": "Sukces!",
"pad.importExport.export": "Eksportuj bieżący dokument jako:", "pad.importExport.export": "Eksportuj bieżący dokument jako:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Zwykły tekst", "pad.importExport.exportplain": "Zwykły tekst",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",

View File

@ -10,7 +10,8 @@
"Rafaelff", "Rafaelff",
"Dianakc", "Dianakc",
"Macofe", "Macofe",
"Rodrigo codignoli" "Rodrigo codignoli",
"Webysther"
] ]
}, },
"index.newPad": "Nova Nota", "index.newPad": "Nova Nota",
@ -35,6 +36,7 @@
"pad.colorpicker.save": "Salvar", "pad.colorpicker.save": "Salvar",
"pad.colorpicker.cancel": "Cancelar", "pad.colorpicker.cancel": "Cancelar",
"pad.loading": "Carregando...", "pad.loading": "Carregando...",
"pad.noCookie": "Cookie não foi encontrado. Por favor, habilite cookies no seu navegador!",
"pad.passwordRequired": "Você precisa de uma senha para acessar esta Nota", "pad.passwordRequired": "Você precisa de uma senha para acessar esta Nota",
"pad.permissionDenied": "Você não tem permissão para acessar esta Nota", "pad.permissionDenied": "Você não tem permissão para acessar esta Nota",
"pad.wrongPassword": "Senha incorreta", "pad.wrongPassword": "Senha incorreta",
@ -53,6 +55,7 @@
"pad.importExport.import": "Enviar um arquivo texto ou documento", "pad.importExport.import": "Enviar um arquivo texto ou documento",
"pad.importExport.importSuccessful": "Completo!", "pad.importExport.importSuccessful": "Completo!",
"pad.importExport.export": "Exportar a presente nota como:", "pad.importExport.export": "Exportar a presente nota como:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Texto puro", "pad.importExport.exportplain": "Texto puro",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -123,6 +126,7 @@
"pad.impexp.importing": "Importando...", "pad.impexp.importing": "Importando...",
"pad.impexp.confirmimport": "Importar um arquivo sobrescreverá o atual texto da nota. Tem certeza de que deseja prosseguir?", "pad.impexp.confirmimport": "Importar um arquivo sobrescreverá o atual texto da nota. Tem certeza de que deseja prosseguir?",
"pad.impexp.convertFailed": "Não foi possível importar este arquivo. Use outro formato ou copie e cole manualmente", "pad.impexp.convertFailed": "Não foi possível importar este arquivo. Use outro formato ou copie e cole manualmente",
"pad.impexp.padHasData": "Não foi possível importar este arquivo porque este bloco de notas já tinha alterações, consulte como importar para um novo bloco de notas",
"pad.impexp.uploadFailed": "O envio falhou. Tente outra vez", "pad.impexp.uploadFailed": "O envio falhou. Tente outra vez",
"pad.impexp.importfailed": "A importação falhou", "pad.impexp.importfailed": "A importação falhou",
"pad.impexp.copypaste": "Copie e cole", "pad.impexp.copypaste": "Copie e cole",

View File

@ -6,7 +6,8 @@
"Tuliouel", "Tuliouel",
"Waldir", "Waldir",
"Imperadeiro98", "Imperadeiro98",
"Macofe" "Macofe",
"Ti4goc"
] ]
}, },
"index.newPad": "Nova Nota", "index.newPad": "Nova Nota",
@ -105,6 +106,7 @@
"pad.impexp.importbutton": "Importar agora", "pad.impexp.importbutton": "Importar agora",
"pad.impexp.importing": "Importando...", "pad.impexp.importing": "Importando...",
"pad.impexp.confirmimport": "A importação de um ficheiro irá substituir o texto atual do pad. Tem certeza que deseja continuar?", "pad.impexp.confirmimport": "A importação de um ficheiro irá substituir o texto atual do pad. Tem certeza que deseja continuar?",
"pad.impexp.padHasData": "Não fomos capazes de importar este ficheiro porque esta Almofada já tinha alterações, consulte importar para um novo bloco",
"pad.impexp.uploadFailed": "O upload falhou. Por favor, tente novamente", "pad.impexp.uploadFailed": "O upload falhou. Por favor, tente novamente",
"pad.impexp.importfailed": "A importação falhou", "pad.impexp.importfailed": "A importação falhou",
"pad.impexp.copypaste": "Por favor, copie e cole" "pad.impexp.copypaste": "Por favor, copie e cole"

View File

@ -28,6 +28,7 @@
"pad.colorpicker.save": "Spara", "pad.colorpicker.save": "Spara",
"pad.colorpicker.cancel": "Avbryt", "pad.colorpicker.cancel": "Avbryt",
"pad.loading": "Läser in...", "pad.loading": "Läser in...",
"pad.noCookie": "Kunde inte hitta några kakor. Var god tillåt kakor i din webbläsare!",
"pad.passwordRequired": "Du behöver ett lösenord för att få tillgång till detta block", "pad.passwordRequired": "Du behöver ett lösenord för att få tillgång till detta block",
"pad.permissionDenied": "Du har inte åtkomstbehörighet för detta block", "pad.permissionDenied": "Du har inte åtkomstbehörighet för detta block",
"pad.wrongPassword": "Ditt lösenord var fel", "pad.wrongPassword": "Ditt lösenord var fel",
@ -46,6 +47,7 @@
"pad.importExport.import": "Ladda upp textfiler eller dokument", "pad.importExport.import": "Ladda upp textfiler eller dokument",
"pad.importExport.importSuccessful": "Åtgärden slutfördes!", "pad.importExport.importSuccessful": "Åtgärden slutfördes!",
"pad.importExport.export": "Export aktuellt block som:", "pad.importExport.export": "Export aktuellt block som:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Oformaterad text", "pad.importExport.exportplain": "Oformaterad text",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -116,6 +118,7 @@
"pad.impexp.importing": "Importerar...", "pad.impexp.importing": "Importerar...",
"pad.impexp.confirmimport": "Att importera en fil kommer att skriva över den aktuella texten i blocket. Är du säker på att du vill fortsätta?", "pad.impexp.confirmimport": "Att importera en fil kommer att skriva över den aktuella texten i blocket. Är du säker på att du vill fortsätta?",
"pad.impexp.convertFailed": "Vi kunde inte importera denna fil. Var god använd ett annat dokumentformat eller kopiera och klistra in den manuellt", "pad.impexp.convertFailed": "Vi kunde inte importera denna fil. Var god använd ett annat dokumentformat eller kopiera och klistra in den manuellt",
"pad.impexp.padHasData": "Vi kunde inte importera denna fil eftersom detta block redan har redigerats. Importera den till ett nytt block.",
"pad.impexp.uploadFailed": "Uppladdningen misslyckades, var god försök igen", "pad.impexp.uploadFailed": "Uppladdningen misslyckades, var god försök igen",
"pad.impexp.importfailed": "Importering misslyckades", "pad.impexp.importfailed": "Importering misslyckades",
"pad.impexp.copypaste": "Var god kopiera och klistra in", "pad.impexp.copypaste": "Var god kopiera och klistra in",

View File

@ -24,7 +24,7 @@
"pad.toolbar.indent.title": "增加缩进TAB", "pad.toolbar.indent.title": "增加缩进TAB",
"pad.toolbar.unindent.title": "减少缩进Shift+TAB", "pad.toolbar.unindent.title": "减少缩进Shift+TAB",
"pad.toolbar.undo.title": "撤消 (Ctrl-Z)", "pad.toolbar.undo.title": "撤消 (Ctrl-Z)",
"pad.toolbar.redo.title": "重做 (Ctrl-Y)", "pad.toolbar.redo.title": "重做Ctrl+Y",
"pad.toolbar.clearAuthorship.title": "清除作者颜色Ctrl+Shift+C", "pad.toolbar.clearAuthorship.title": "清除作者颜色Ctrl+Shift+C",
"pad.toolbar.import_export.title": "从不同的文件格式导入/导出", "pad.toolbar.import_export.title": "从不同的文件格式导入/导出",
"pad.toolbar.timeslider.title": "时间轴", "pad.toolbar.timeslider.title": "时间轴",
@ -35,6 +35,7 @@
"pad.colorpicker.save": "保存", "pad.colorpicker.save": "保存",
"pad.colorpicker.cancel": "取消", "pad.colorpicker.cancel": "取消",
"pad.loading": "载入中……", "pad.loading": "载入中……",
"pad.noCookie": "无法找到Cookie。请在您的浏览器中允许Cookie",
"pad.passwordRequired": "您需要密码才能访问这个记事本", "pad.passwordRequired": "您需要密码才能访问这个记事本",
"pad.permissionDenied": "您没有访问这个记事本的权限", "pad.permissionDenied": "您没有访问这个记事本的权限",
"pad.wrongPassword": "您的密码错了", "pad.wrongPassword": "您的密码错了",
@ -53,6 +54,7 @@
"pad.importExport.import": "上载任何文本文件或档案", "pad.importExport.import": "上载任何文本文件或档案",
"pad.importExport.importSuccessful": "成功!", "pad.importExport.importSuccessful": "成功!",
"pad.importExport.export": "当前记事本导出为:", "pad.importExport.export": "当前记事本导出为:",
"pad.importExport.exportetherpad": "Etherpad",
"pad.importExport.exporthtml": "HTML", "pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "纯文本", "pad.importExport.exportplain": "纯文本",
"pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportword": "Microsoft Word",
@ -123,6 +125,7 @@
"pad.impexp.importing": "正在导入...", "pad.impexp.importing": "正在导入...",
"pad.impexp.confirmimport": "导入的文件将覆盖记事本的当前文本。你确定要继续吗?", "pad.impexp.confirmimport": "导入的文件将覆盖记事本的当前文本。你确定要继续吗?",
"pad.impexp.convertFailed": "我们无法导入此文档。请使用他文档格式或手动复制贴上。", "pad.impexp.convertFailed": "我们无法导入此文档。请使用他文档格式或手动复制贴上。",
"pad.impexp.padHasData": "我们无法导入此文件,因为此记事本已经变更,请导入到一个新的记事本",
"pad.impexp.uploadFailed": "上载失败,请重试", "pad.impexp.uploadFailed": "上载失败,请重试",
"pad.impexp.importfailed": "导入失败", "pad.impexp.importfailed": "导入失败",
"pad.impexp.copypaste": "请复制粘贴", "pad.impexp.copypaste": "请复制粘贴",

View File

@ -96,13 +96,13 @@
"timeslider.saved": "{{year}}年{{month}}{{day}}日儲存", "timeslider.saved": "{{year}}年{{month}}{{day}}日儲存",
"timeslider.dateformat": "{{year}}年{{month}}月{{day}}日 {{hours}}:{{minutes}}:{{seconds}}", "timeslider.dateformat": "{{year}}年{{month}}月{{day}}日 {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "1月", "timeslider.month.january": "1月",
"timeslider.month.february": "2月", "timeslider.month.february": "月",
"timeslider.month.march": "3月", "timeslider.month.march": "3月",
"timeslider.month.april": "4月", "timeslider.month.april": "4月",
"timeslider.month.may": "5月", "timeslider.month.may": "5月",
"timeslider.month.june": "6月", "timeslider.month.june": "6月",
"timeslider.month.july": "7月", "timeslider.month.july": "7月",
"timeslider.month.august": "8月", "timeslider.month.august": "月",
"timeslider.month.september": "9月", "timeslider.month.september": "9月",
"timeslider.month.october": "10月", "timeslider.month.october": "10月",
"timeslider.month.november": "11月", "timeslider.month.november": "11月",

View File

@ -410,11 +410,16 @@ exports.setHTML = function(padID, html, callback)
if(ERR(err, callback)) return; if(ERR(err, callback)) return;
// add a new changeset with the new html to the pad // add a new changeset with the new html to the pad
importHtml.setPadHTML(pad, cleanText(html), callback); importHtml.setPadHTML(pad, cleanText(html), function(e){
if(e){
//update the clients on the pad callback(new customError("HTML is malformed","apierror"));
padMessageHandler.updatePadClients(pad, callback); return;
}else{
//update the clients on the pad
padMessageHandler.updatePadClients(pad, callback);
return;
}
});
}); });
} }

View File

@ -158,8 +158,12 @@ exports.doExport = function(req, res, padId, type)
//if this is a html export, we can send this from here directly //if this is a html export, we can send this from here directly
if(type == "html") if(type == "html")
{ {
res.send(html); // do any final changes the plugin might want to make cake
callback("stop"); hooks.aCallFirst("exportHTMLSend", html, function(err, newHTML){
if(newHTML.length) html = newHTML;
res.send(html);
callback("stop");
});
} }
else //write the html export to a file else //write the html export to a file
{ {

View File

@ -232,11 +232,9 @@ exports.doImport = function(req, res, padId)
if(!directDatabaseAccess){ if(!directDatabaseAccess){
var fileEnding = path.extname(srcFile).toLowerCase(); var fileEnding = path.extname(srcFile).toLowerCase();
if (abiword || fileEnding == ".htm" || fileEnding == ".html") { if (abiword || fileEnding == ".htm" || fileEnding == ".html") {
try{ importHtml.setPadHTML(pad, text, function(e){
importHtml.setPadHTML(pad, text); if(e) apiLogger.warn("Error importing, possibly caused by malformed HTML");
}catch(e){ });
apiLogger.warn("Error importing, possibly caused by malformed HTML");
}
} else { } else {
pad.setText(text); pad.setText(text);
} }

View File

@ -257,11 +257,10 @@ exports.handleMessage = function(client, message)
// FIXME: Use a hook instead // FIXME: Use a hook instead
// FIXME: Allow to override readwrite access with readonly // FIXME: Allow to override readwrite access with readonly
// FIXME: A message might arrive but wont have an auth object, this is obviously bad so we should deny it
// Simulate using the load testing tool // Simulate using the load testing tool
if(!sessioninfos[client.id].auth){ if(!sessioninfos[client.id].auth){
console.error("Auth was never applied to a session. If you are using the stress-test tool then restart Etherpad and the Stress test tool.") console.error("Auth was never applied to a session. If you are using the stress-test tool then restart Etherpad and the Stress test tool.")
callback(); return;
}else{ }else{
var auth = sessioninfos[client.id].auth; var auth = sessioninfos[client.id].auth;
var checkAccessCallback = function(err, statusObject) var checkAccessCallback = function(err, statusObject)

View File

@ -83,7 +83,7 @@ exports.socketio = function (hook_name, args, cb) {
socket.on("install", function (plugin_name) { socket.on("install", function (plugin_name) {
installer.install(plugin_name, function (er) { installer.install(plugin_name, function (er) {
if(er) console.warn(er) if(er) console.warn(er)
socket.emit("finished:install", {plugin: plugin_name, error: er? er.message : null}); socket.emit("finished:install", {plugin: plugin_name, code: er? er.code : null, error: er? er.message : null});
}); });
}); });

View File

@ -2,7 +2,7 @@ var minify = require('../../utils/Minify');
var plugins = require("ep_etherpad-lite/static/js/pluginfw/plugins"); var plugins = require("ep_etherpad-lite/static/js/pluginfw/plugins");
var CachingMiddleware = require('../../utils/caching_middleware'); var CachingMiddleware = require('../../utils/caching_middleware');
var settings = require("../../utils/Settings"); var settings = require("../../utils/Settings");
var Yajsml = require('yajsml'); var Yajsml = require('etherpad-yajsml');
var _ = require("underscore"); var _ = require("underscore");
exports.expressCreateServer = function (hook_name, args, cb) { exports.expressCreateServer = function (hook_name, args, cb) {

View File

@ -48,6 +48,7 @@ exports.getPadRaw = function(padId, callback){
// Get the author info // Get the author info
db.get("globalAuthor:"+authorId, function(e, authorEntry){ db.get("globalAuthor:"+authorId, function(e, authorEntry){
authorEntry.padIDs = padId;
if(!e) data["globalAuthor:"+authorId] = authorEntry; if(!e) data["globalAuthor:"+authorId] = authorEntry;
}); });

View File

@ -55,7 +55,7 @@ exports._analyzeLine = function(text, aline, apool){
var listType = Changeset.opAttributeValue(opIter.next(), 'list', apool); var listType = Changeset.opAttributeValue(opIter.next(), 'list', apool);
if (listType){ if (listType){
lineMarker = 1; lineMarker = 1;
listType = /([a-z]+)([12345678])/.exec(listType); listType = /([a-z]+)([0-9]+)/.exec(listType);
if (listType){ if (listType){
line.listTypeName = listType[1]; line.listTypeName = listType[1];
line.listLevel = Number(listType[2]); line.listLevel = Number(listType[2]);

View File

@ -30,8 +30,6 @@ function getPadHTML(pad, revNum, callback)
var html; var html;
async.waterfall([ async.waterfall([
// fetch revision atext // fetch revision atext
function (callback) function (callback)
{ {
if (revNum != undefined) if (revNum != undefined)
@ -413,13 +411,16 @@ function getHTMLFromAtext(pad, atext, authorColors)
} }
lists = [] lists = []
var lineContentFromHook = hooks.callAllStr("getLineHTMLForExport", var context = {
{
line: line, line: line,
lineContent: lineContent,
apool: apool, apool: apool,
attribLine: attribLines[i], attribLine: attribLines[i],
text: textLines[i] text: textLines[i]
}, " ", " ", ""); }
var lineContentFromHook = hooks.callAllStr("getLineHTMLForExport", context, " ", " ", "");
if (lineContentFromHook) if (lineContentFromHook)
{ {
pieces.push(lineContentFromHook, ''); pieces.push(lineContentFromHook, '');
@ -470,7 +471,7 @@ exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback)
'ul.indent { list-style-type: none; }' + 'ul.indent { list-style-type: none; }' +
'ol { list-style-type: none; padding-left:0;}' + 'ol { list-style-type: none; padding-left:0;}' +
'body > ol { counter-reset: first second; }' + 'body > ol { counter-reset: first second third fourth fifth sixth seventh eigth ninth tenth eleventh twelth thirteenth fourteenth fifteenth sixteenth; }' +
'ol > li:before {' + 'ol > li:before {' +
'content: counter(first) ". " ;'+ 'content: counter(first) ". " ;'+
'counter-increment: first;}' + 'counter-increment: first;}' +
@ -504,15 +505,15 @@ exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback)
'counter-increment: eigth;}' + 'counter-increment: eigth;}' +
'ol > ol > ol > ol > ol > ol > ol > ol > ol > li:before {' + 'ol > ol > ol > ol > ol > ol > ol > ol > ol > li:before {' +
'content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eight) "." counter(ninth) ". ";'+ 'content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eigth) "." counter(ninth) ". ";'+
'counter-increment: ninth;}' + 'counter-increment: ninth;}' +
'ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > li:before {' + 'ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > li:before {' +
'content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) ". ";'+ 'content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eigth) "." counter(ninth) "." counter(tenth) ". ";'+
'counter-increment: tenth;}' + 'counter-increment: tenth;}' +
'ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > li:before {' + 'ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > li:before {' +
'content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) ". ";'+ 'content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eigth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) ". ";'+
'counter-increment: eleventh;}' + 'counter-increment: eleventh;}' +
'ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > li:before {' + 'ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > li:before {' +

View File

@ -24,12 +24,25 @@ exports.setPadRaw = function(padId, records, callback){
async.eachSeries(Object.keys(records), function(key, cb){ async.eachSeries(Object.keys(records), function(key, cb){
var value = records[key] var value = records[key]
// we know its an author // Author data
if(value.padIDs){ if(value.padIDs){
// rewrite author pad ids // rewrite author pad ids
value.padIDs[padId] = 1; value.padIDs[padId] = 1;
var newKey = key; var newKey = key;
// Does this author already exist?
db.get(key, function(err, author){
if(author){
// Yes, add the padID to the author..
author.padIDs.push(padId);
value = author;
}else{
// No, create a new array with the author info in
value.padIDs = [padId];
}
});
// Not author data, probably pad data
}else{ }else{
// we can split it to look to see if its pad data // we can split it to look to see if its pad data
var oldPadId = key.split(":"); var oldPadId = key.split(":");

View File

@ -40,7 +40,7 @@ function setPadHTML(pad, html, callback)
cc.collectContent(doc); cc.collectContent(doc);
}catch(e){ }catch(e){
apiLogger.warn("HTML was not properly formed", e); apiLogger.warn("HTML was not properly formed", e);
return; // We don't process the HTML because it was bad.. return callback(e); // We don't process the HTML because it was bad..
} }
var result = cc.finish(); var result = cc.finish();
@ -91,6 +91,7 @@ function setPadHTML(pad, html, callback)
apiLogger.debug('The changeset: ' + theChangeset); apiLogger.debug('The changeset: ' + theChangeset);
pad.setText(""); pad.setText("");
pad.appendRevision(theChangeset); pad.appendRevision(theChangeset);
callback(null);
} }
exports.setPadHTML = setPadHTML; exports.setPadHTML = setPadHTML;

View File

@ -236,6 +236,19 @@ exports.reloadSettings = function reloadSettings() {
process.env['DEBUG'] = 'socket.io:' + exports.loglevel; // Used by SocketIO for Debug process.env['DEBUG'] = 'socket.io:' + exports.loglevel; // Used by SocketIO for Debug
log4js.replaceConsole(); log4js.replaceConsole();
if(exports.abiword){
// Check abiword actually exists
if(exports.abiword != null)
{
fs.exists(exports.abiword, function(exists) {
if (!exists) {
console.error("Abiword does not exist at this path, check your settings file");
exports.abiword = null;
}
});
}
}
if(!exports.sessionKey){ // If the secretKey isn't set we also create yet another unique value here if(!exports.sessionKey){ // If the secretKey isn't set we also create yet another unique value here
exports.sessionKey = randomString(32); exports.sessionKey = randomString(32);
console.warn("You need to set a sessionKey value in settings.json, this will allow your users to reconnect to your Etherpad Instance if your instance restarts"); console.warn("You need to set a sessionKey value in settings.json, this will allow your users to reconnect to your Etherpad Instance if your instance restarts");

View File

@ -1,48 +1,49 @@
{ {
"name" : "ep_etherpad-lite", "name" : "ep_etherpad-lite",
"description" : "A Etherpad based on node.js", "description" : "A Etherpad based on node.js",
"homepage" : "https://github.com/ether/etherpad-lite", "homepage" : "http://etherpad.org",
"keywords" : ["etherpad", "realtime", "collaborative", "editor"], "keywords" : ["etherpad", "realtime", "collaborative", "editor"],
"author" : "Peter 'Pita' Martischka <petermartischka@googlemail.com> - Primary Technology Ltd", "author" : "Etherpad Foundation",
"contributors" : [ "contributors" : [
{ "name": "John McLear" }, { "name": "John McLear" },
{ "name": "Hans Pinckaers" }, { "name": "Hans Pinckaers" },
{ "name": "Robin Buse" }, { "name": "Robin Buse" },
{ "name": "Marcel Klehr" } { "name": "Marcel Klehr" },
{ "name": "Peter Martischka" }
], ],
"dependencies" : { "dependencies" : {
"yajsml" : "1.1.6", "etherpad-yajsml" : "0.0.2",
"request" : ">=2.48.0", "request" : "2.51.0",
"etherpad-require-kernel" : ">=1.0.7", "etherpad-require-kernel" : "1.0.7",
"resolve" : ">=1.0.0", "resolve" : "1.0.0",
"socket.io" : ">=1.2.0", "socket.io" : "1.3.2",
"ueberDB" : ">=0.2.9", "ueberDB" : "0.2.11",
"express" : ">3.1.0 <3.9.0", "express" : "3.8.1",
"async" : ">=0.9.0", "async" : "0.9.0",
"connect" : "2.7.x", "connect" : "2.7.11",
"clean-css" : "0.3.2", "clean-css" : "0.3.2",
"uglify-js" : ">=2.4.15", "uglify-js" : "2.4.16",
"formidable" : ">=1.0.15", "formidable" : "1.0.16",
"log4js" : ">=0.6.21", "log4js" : "0.6.22",
"nodemailer" : "0.3.x", "nodemailer" : "0.3.44",
"cheerio" : ">=0.18.0", "cheerio" : "0.18.0",
"async-stacktrace" : ">=0.0.2", "async-stacktrace" : "0.0.2",
"npm" : ">=2.1.x", "npm" : "2.2.0",
"ejs" : ">=1.0.0", "ejs" : "1.0.0",
"graceful-fs" : ">=3.0.4", "graceful-fs" : "3.0.5",
"slide" : ">=1.1.6", "slide" : "1.1.6",
"semver" : ">=2.3.0", "semver" : "4.2.0",
"security" : "1.0.0", "security" : "1.0.0",
"tinycon" : ">=0.0.1", "tinycon" : "0.0.1",
"underscore" : "1.5.1", "underscore" : "1.5.1",
"unorm" : ">=1.3.3", "unorm" : "1.3.3",
"languages4translatewiki" : ">=0.1.3", "languages4translatewiki" : "0.1.3",
"swagger-node-express" : ">=2.1.0", "swagger-node-express" : "2.1.3",
"channels" : "0.0.x", "channels" : "0.0.4",
"jsonminify" : ">=0.2.3", "jsonminify" : "0.2.3",
"measured" : ">=0.1.6", "measured" : "0.1.6",
"mocha" : ">=2.0.1", "mocha" : "2.1.0",
"supertest" : ">=0.15.0" "supertest" : "0.15.0"
}, },
"bin": { "etherpad-lite": "./node/server.js" }, "bin": { "etherpad-lite": "./node/server.js" },
"devDependencies": { "devDependencies": {
@ -54,5 +55,5 @@
"repository" : { "type" : "git", "repository" : { "type" : "git",
"url" : "http://github.com/ether/etherpad-lite.git" "url" : "http://github.com/ether/etherpad-lite.git"
}, },
"version" : "1.5.0" "version" : "1.5.1"
} }

View File

@ -914,6 +914,36 @@ input[type=checkbox] {
border-left: 1px solid #ccc !important; border-left: 1px solid #ccc !important;
width: 185px !important; width: 185px !important;
} }
.chatAndUsers{
display:block !important;
right:0px !important;
border-radius:0px !important;
width:182px !important;
margin:2px 0 0 0 !important;
border: none !important;
border-bottom: 1px solid #ccc !important;
height:155px !important;
border-left: 1px solid #ccc !important;
}
.chatAndUsers > #otherusers{
max-height: 100px;
overflow-y: auto;
}
.chatAndUsersChat > div > #titlecross{
display:none;
}
.chatAndUsersChat{
bottom:0px !important;
padding:0 !important;
margin:0 !important;
right:0 !important;
top: 200px !important;
width:182px !important;
border: none !important;
padding:5px !important;
border-left: 1px solid #ccc !important;
}
@media screen and (max-width: 600px) { @media screen and (max-width: 600px) {
.toolbar ul li.separator { .toolbar ul li.separator {
display: none; display: none;

View File

@ -154,11 +154,17 @@ stepper:active{
top: 20px; top: 20px;
width: 25px; width: 25px;
} }
.star:before{
font-family: fontawesome-etherpad;
content: "\e835";
vertical-align:middle;
font-size:16px;
}
#timeslider .star { #timeslider .star {
cursor: pointer; cursor: pointer;
height: 16px; height: 16px;
position: absolute; position: absolute;
top: 40px; top: 25px;
width: 15px; width: 15px;
} }
#timeslider #timer { #timeslider #timer {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -164,12 +164,20 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({
var builder = Changeset.builder(this.rep.lines.totalWidth()); var builder = Changeset.builder(this.rep.lines.totalWidth());
var hasMarker = this.lineHasMarker(lineNum); var hasMarker = this.lineHasMarker(lineNum);
var attribs var attribs
var foundAttrib = false
attribs = this.getAttributesOnLine(lineNum).map(function(attrib) { attribs = this.getAttributesOnLine(lineNum).map(function(attrib) {
if(attrib[0] === attributeName) return [attributeName, null] if(attrib[0] === attributeName) {
foundAttrib = true
return [attributeName, null] // remove this attrib from the linemarker
}
return attrib return attrib
}) })
if(!foundAttrib) {
return
}
if(hasMarker){ if(hasMarker){
ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 0])); ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 0]));
// If length == 4, there's [author, lmkr, insertorder, + the attrib being removed] thus we can remove the marker entirely // If length == 4, there's [author, lmkr, insertorder, + the attrib being removed] thus we can remove the marker entirely

View File

@ -21,6 +21,17 @@
*/ */
var _, $, jQuery, plugins, Ace2Common; var _, $, jQuery, plugins, Ace2Common;
var browser = require('./browser').browser;
if(browser.msie){
// Honestly fuck IE royally.
// Basically every hack we have since V11 causes a problem
if(parseInt(browser.version) >= 11){
delete browser.msie;
browser.chrome = true;
browser.modernIE = true;
}
}
Ace2Common = require('./ace2_common'); Ace2Common = require('./ace2_common');
plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins'); plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins');
@ -34,8 +45,7 @@ var isNodeText = Ace2Common.isNodeText,
binarySearchInfinite = Ace2Common.binarySearchInfinite, binarySearchInfinite = Ace2Common.binarySearchInfinite,
htmlPrettyEscape = Ace2Common.htmlPrettyEscape, htmlPrettyEscape = Ace2Common.htmlPrettyEscape,
noop = Ace2Common.noop; noop = Ace2Common.noop;
var hooks = require('./pluginfw/hooks'); var hooks = require('./pluginfw/hooks');
var browser = require('./browser').browser;
function Ace2Inner(){ function Ace2Inner(){
@ -1353,7 +1363,7 @@ function Ace2Inner(){
// (from how it looks in our representation) and record them in a way // (from how it looks in our representation) and record them in a way
// that can be used to "normalize" the document (apply the changes to our // that can be used to "normalize" the document (apply the changes to our
// representation, and put the DOM in a canonical form). // representation, and put the DOM in a canonical form).
//top.console.log("observeChangesAroundNode(%o)", node); // top.console.log("observeChangesAroundNode(%o)", node);
var cleanNode; var cleanNode;
var hasAdjacentDirtyness; var hasAdjacentDirtyness;
if (!isNodeDirty(node)) if (!isNodeDirty(node))
@ -1605,7 +1615,7 @@ function Ace2Inner(){
if (linesWrapped > 0) if (linesWrapped > 0)
{ {
if(!browser.ie){ if(!browser.msie){
// chrome decides in it's infinite wisdom that its okay to put the browsers visisble window in the middle of the span // chrome decides in it's infinite wisdom that its okay to put the browsers visisble window in the middle of the span
// an outcome of this is that the first chars of the string are no longer visible to the user.. Yay chrome.. // an outcome of this is that the first chars of the string are no longer visible to the user.. Yay chrome..
// Move the browsers visible area to the left hand side of the span // Move the browsers visible area to the left hand side of the span
@ -1910,6 +1920,7 @@ function Ace2Inner(){
if (charsLeft === 0) if (charsLeft === 0)
{ {
var index = 0; var index = 0;
browser.msie = false; // Temp fix to resolve enter and backspace issues..
if (browser.msie && line == (rep.lines.length() - 1) && lineNode.childNodes.length === 0) if (browser.msie && line == (rep.lines.length() - 1) && lineNode.childNodes.length === 0)
{ {
// best to stay at end of last empty div in IE // best to stay at end of last empty div in IE
@ -2959,7 +2970,6 @@ function Ace2Inner(){
{ {
return ""; return "";
}; };
return result; return result;
} }
else else
@ -3583,7 +3593,7 @@ function Ace2Inner(){
// On Mac and Linux, move right moves to end of word and move left moves to start; // On Mac and Linux, move right moves to end of word and move left moves to start;
// on Windows, always move to start of word. // on Windows, always move to start of word.
// On Windows, Firefox and IE disagree on whether to stop for punctuation (FF says no). // On Windows, Firefox and IE disagree on whether to stop for punctuation (FF says no).
if (browser.windows && forwardNotBack) if (browser.msie && forwardNotBack)
{ {
while ((!isDone()) && isWordChar(nextChar())) while ((!isDone()) && isWordChar(nextChar()))
{ {
@ -3624,7 +3634,6 @@ function Ace2Inner(){
evt.preventDefault(); evt.preventDefault();
return; return;
} }
// Is caret potentially hidden by the chat button? // Is caret potentially hidden by the chat button?
var myselection = document.getSelection(); // get the current caret selection var myselection = document.getSelection(); // get the current caret selection
var caretOffsetTop = myselection.focusNode.parentNode.offsetTop | myselection.focusNode.offsetTop; // get the carets selection offset in px IE 214 var caretOffsetTop = myselection.focusNode.parentNode.offsetTop | myselection.focusNode.offsetTop; // get the carets selection offset in px IE 214
@ -3662,7 +3671,6 @@ function Ace2Inner(){
var specialHandled = false; var specialHandled = false;
var isTypeForSpecialKey = ((browser.msie || browser.safari || browser.chrome) ? (type == "keydown") : (type == "keypress")); var isTypeForSpecialKey = ((browser.msie || browser.safari || browser.chrome) ? (type == "keydown") : (type == "keypress"));
var isTypeForCmdKey = ((browser.msie || browser.safari || browser.chrome) ? (type == "keydown") : (type == "keypress")); var isTypeForCmdKey = ((browser.msie || browser.safari || browser.chrome) ? (type == "keydown") : (type == "keypress"));
var stopped = false; var stopped = false;
inCallStackIfNecessary("handleKeyEvent", function() inCallStackIfNecessary("handleKeyEvent", function()
@ -3867,7 +3875,10 @@ function Ace2Inner(){
updateBrowserSelectionFromRep(); updateBrowserSelectionFromRep();
var myselection = document.getSelection(); // get the current caret selection, can't use rep. here because that only gives us the start position not the current var myselection = document.getSelection(); // get the current caret selection, can't use rep. here because that only gives us the start position not the current
var caretOffsetTop = myselection.focusNode.parentNode.offsetTop || myselection.focusNode.offsetTop; // get the carets selection offset in px IE 214 var caretOffsetTop = myselection.focusNode.parentNode.offsetTop || myselection.focusNode.offsetTop; // get the carets selection offset in px IE 214
// top.console.log(caretOffsetTop);
// sometimes the first selection is -1 which causes problems (Especially with ep_page_view)
// so use focusNode.offsetTop value.
if(caretOffsetTop === -1) caretOffsetTop = myselection.focusNode.offsetTop;
setScrollY(caretOffsetTop); // set the scrollY offset of the viewport on the document setScrollY(caretOffsetTop); // set the scrollY offset of the viewport on the document
}, 200); }, 200);
@ -3909,10 +3920,10 @@ function Ace2Inner(){
// only move the viewport if we're at the bottom of the viewport, if we hit down any other time the viewport shouldn't change // only move the viewport if we're at the bottom of the viewport, if we hit down any other time the viewport shouldn't change
// NOTE: This behavior only fires if Chrome decides to break the page layout after a paste, it's annoying but nothing I can do // NOTE: This behavior only fires if Chrome decides to break the page layout after a paste, it's annoying but nothing I can do
var selection = getSelection(); var selection = getSelection();
top.console.log("line #", rep.selStart[0]); // the line our caret is on // top.console.log("line #", rep.selStart[0]); // the line our caret is on
top.console.log("firstvisible", visibleLineRange[0]); // the first visiblel ine // top.console.log("firstvisible", visibleLineRange[0]); // the first visiblel ine
top.console.log("lastVisible", visibleLineRange[1]); // the last visible line // top.console.log("lastVisible", visibleLineRange[1]); // the last visible line
top.console.log(rep.selStart[0], visibleLineRange[1], rep.selStart[0], visibleLineRange[0]); // top.console.log(rep.selStart[0], visibleLineRange[1], rep.selStart[0], visibleLineRange[0]);
var newY = viewport.top + lineHeight; var newY = viewport.top + lineHeight;
} }
if(newY){ if(newY){
@ -3946,7 +3957,7 @@ function Ace2Inner(){
} }
// Is part of multi-keystroke international character on Firefox Mac // Is part of multi-keystroke international character on Firefox Mac
var isFirefoxHalfCharacter = (browser.mozilla && evt.altKey && charCode === 0 && keyCode === 0); var isFirefoxHalfCharacter = (browser.firefox && evt.altKey && charCode === 0 && keyCode === 0);
// Is part of multi-keystroke international character on Safari Mac // Is part of multi-keystroke international character on Safari Mac
var isSafariHalfCharacter = (browser.safari && evt.altKey && keyCode == 229); var isSafariHalfCharacter = (browser.safari && evt.altKey && keyCode == 229);
@ -4261,12 +4272,6 @@ function Ace2Inner(){
end.collapse(false); end.collapse(false);
selection.startPoint = pointFromCollapsedRange(start); selection.startPoint = pointFromCollapsedRange(start);
selection.endPoint = pointFromCollapsedRange(end); selection.endPoint = pointFromCollapsedRange(end);
/*if ((!selection.startPoint.node.isText) && (!selection.endPoint.node.isText)) {
console.log(selection.startPoint.node.uniqueId()+","+
selection.startPoint.index+" / "+
selection.endPoint.node.uniqueId()+","+
selection.endPoint.index);
}*/
} }
return selection; return selection;
} }
@ -4678,7 +4683,7 @@ function Ace2Inner(){
setIfNecessary(iframe.style, "width", newWidth + "px"); setIfNecessary(iframe.style, "width", newWidth + "px");
setIfNecessary(sideDiv.style, "height", newHeight + "px"); setIfNecessary(sideDiv.style, "height", newHeight + "px");
} }
if (browser.mozilla) if (browser.firefox)
{ {
if (!doesWrap) if (!doesWrap)
{ {
@ -4855,8 +4860,16 @@ function Ace2Inner(){
$(document).on("click", handleIEOuterClick); $(document).on("click", handleIEOuterClick);
} }
if (browser.msie) $(root).on("paste", handleIEPaste); if (browser.msie) $(root).on("paste", handleIEPaste);
// Don't paste on middle click of links
$(root).on("paste", function(e){
if(e.target.a){
e.preventDefault();
}
})
// CompositionEvent is not implemented below IE version 8 // CompositionEvent is not implemented below IE version 8
if ( !(browser.msie && browser.version < 9) && document.documentElement) if ( !(browser.msie && parseInt(browser.version <= 9)) && document.documentElement)
{ {
$(document.documentElement).on("compositionstart", handleCompositionEvent); $(document.documentElement).on("compositionstart", handleCompositionEvent);
$(document.documentElement).on("compositionend", handleCompositionEvent); $(document.documentElement).on("compositionend", handleCompositionEvent);
@ -5095,7 +5108,7 @@ function Ace2Inner(){
{ {
return null; return null;
} }
type = /([a-z]+)[0-9+]/.exec(type); type = /([a-z]+)[0-9]+/.exec(type);
if(type[1] == "indent") if(type[1] == "indent")
{ {
return null; return null;
@ -5104,7 +5117,7 @@ function Ace2Inner(){
//2-find the first line of the list //2-find the first line of the list
while(lineNum-1 >= 0 && (type=getLineListType(lineNum-1))) while(lineNum-1 >= 0 && (type=getLineListType(lineNum-1)))
{ {
type = /([a-z]+)[0-9+]/.exec(type); type = /([a-z]+)[0-9]+/.exec(type);
if(type[1] == "indent") if(type[1] == "indent")
break; break;
lineNum--; lineNum--;
@ -5124,7 +5137,7 @@ function Ace2Inner(){
while(listType = getLineListType(line)) while(listType = getLineListType(line))
{ {
//apply new num //apply new num
listType = /([a-z]+)([0-9+])/.exec(listType); listType = /([a-z]+)([0-9]+)/.exec(listType);
curLevel = Number(listType[2]); curLevel = Number(listType[2]);
if(isNaN(curLevel) || listType[0] == "indent") if(isNaN(curLevel) || listType[0] == "indent")
{ {
@ -5319,20 +5332,9 @@ function Ace2Inner(){
{ {
var body = doc.getElementById("innerdocbody"); var body = doc.getElementById("innerdocbody");
root = body; // defined as a var in scope outside root = body; // defined as a var in scope outside
if (browser.mozilla) $(root).addClass("mozilla"); if (browser.firefox) $(root).addClass("mozilla");
if (browser.safari) $(root).addClass("safari"); if (browser.safari) $(root).addClass("safari");
if (browser.msie) $(root).addClass("msie"); if (browser.msie) $(root).addClass("msie");
if (browser.msie)
{
// cache CSS background images
try
{
doc.execCommand("BackgroundImageCache", false, true);
}
catch (e)
{ /* throws an error in some IE 6 but not others! */
}
}
setClassPresence(root, "authorColors", true); setClassPresence(root, "authorColors", true);
setClassPresence(root, "doesWrap", doesWrap); setClassPresence(root, "doesWrap", doesWrap);

View File

@ -26,12 +26,11 @@ $(document).ready(function () {
$('#search-progress').show() $('#search-progress').show()
search.messages.show('fetching') search.messages.show('fetching')
storeScrollPosition()
search.searching = true search.searching = true
} }
search.searching = false; search.searching = false;
search.offset = 0; search.offset = 0;
search.limit = 25; search.limit = 999;
search.results = []; search.results = [];
search.sortBy = 'name'; search.sortBy = 'name';
search.sortDir = /*DESC?*/true; search.sortDir = /*DESC?*/true;
@ -43,7 +42,7 @@ $(document).ready(function () {
$('.search-results .messages .'+msg+' *').show() $('.search-results .messages .'+msg+' *').show()
}, },
hide: function(msg) { hide: function(msg) {
//$('.search-results .messages').hide() $('.search-results .messages').hide()
$('.search-results .messages .'+msg+'').hide() $('.search-results .messages .'+msg+'').hide()
$('.search-results .messages .'+msg+' *').hide() $('.search-results .messages .'+msg+' *').hide()
} }
@ -104,33 +103,16 @@ $(document).ready(function () {
}) })
} }
// Infinite scroll
var scrollPosition
function storeScrollPosition() {
scrollPosition = $(window).scrollTop()
}
function restoreScrollPosition() {
setTimeout(function() {
$(window).scrollTop(scrollPosition)
}, 0)
}
$(window).scroll(checkInfiniteScroll)
function checkInfiniteScroll() {
if(search.end || search.searching) return;// don't keep requesting if there are no more results
setTimeout(function() {
try{
var top = $('.results>tr:last').offset().top
if($(window).scrollTop()+$(window).height() > top) search(search.searchTerm)
}catch(e){}
}, 1)
}
function updateHandlers() { function updateHandlers() {
// Search // Search
$("#search-query").unbind('keyup').keyup(function () { $("#search-query").unbind('keyup').keyup(function () {
search($("#search-query").val()); search($("#search-query").val());
}); });
// Prevent form submit
$('#search-query').parent().bind('submit', function() {
return false;
});
// update & install // update & install
$(".do-install, .do-update").unbind('click').click(function (e) { $(".do-install, .do-update").unbind('click').click(function (e) {
@ -159,14 +141,14 @@ $(document).ready(function () {
// Sort // Sort
$('.sort.up').unbind('click').click(function() { $('.sort.up').unbind('click').click(function() {
search.sortBy = $(this).text().toLowerCase(); search.sortBy = $(this).attr('data-label').toLowerCase();
search.sortDir = false; search.sortDir = false;
search.offset = 0; search.offset = 0;
search(search.searchTerm, search.results.length); search(search.searchTerm, search.results.length);
search.results = []; search.results = [];
}) })
$('.sort.down, .sort.none').unbind('click').click(function() { $('.sort.down, .sort.none').unbind('click').click(function() {
search.sortBy = $(this).text().toLowerCase(); search.sortBy = $(this).attr('data-label').toLowerCase();
search.sortDir = true; search.sortDir = true;
search.offset = 0; search.offset = 0;
search(search.searchTerm, search.results.length); search(search.searchTerm, search.results.length);
@ -176,6 +158,7 @@ $(document).ready(function () {
socket.on('results:search', function (data) { socket.on('results:search', function (data) {
if(!data.results.length) search.end = true; if(!data.results.length) search.end = true;
if(data.query.offset == 0) search.results = [];
search.messages.hide('nothing-found') search.messages.hide('nothing-found')
search.messages.hide('fetching') search.messages.hide('fetching')
$("#search-query").removeAttr('disabled') $("#search-query").removeAttr('disabled')
@ -203,8 +186,6 @@ $(document).ready(function () {
} }
search.messages.hide('fetching') search.messages.hide('fetching')
$('#search-progress').hide() $('#search-progress').hide()
restoreScrollPosition()
checkInfiniteScroll()
search.searching = false search.searching = false
}); });
@ -244,6 +225,9 @@ $(document).ready(function () {
socket.on('finished:install', function(data) { socket.on('finished:install', function(data) {
if(data.error) { if(data.error) {
if(data.code === "EPEERINVALID"){
alert("This plugin requires that you update Etherpad so it can operate in it's true glory");
}
alert('An error occured while installing '+data.plugin+' \n'+data.error) alert('An error occured while installing '+data.plugin+' \n'+data.error)
$('#installed-plugins .'+data.plugin).remove() $('#installed-plugins .'+data.plugin).remove()
} }

View File

@ -66,18 +66,6 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro
} }
} }
// for IE
if (browser.msie)
{
try
{
document.execCommand("BackgroundImageCache", false, true);
}
catch (e)
{}
}
//var socket; //var socket;
var channelState = "DISCONNECTED"; var channelState = "DISCONNECTED";

View File

@ -22,6 +22,7 @@ var hooks = require('./pluginfw/hooks');
var chat = (function() var chat = (function()
{ {
var isStuck = false; var isStuck = false;
var userAndChat = false;
var gotInitialMessages = false; var gotInitialMessages = false;
var historyPointer = 0; var historyPointer = 0;
var chatMentions = 0; var chatMentions = 0;
@ -54,6 +55,23 @@ var chat = (function()
isStuck = false; isStuck = false;
} }
}, },
chatAndUsers: function(fromInitialCall)
{
if(!userAndChat || fromInitialCall){
padcookie.setPref("chatAndUsers", true);
chat.stickToScreen(true);
$('#options-stickychat').prop('checked', true)
$('#options-stickychat').prop("disabled", "disabled");
$('#users').addClass("chatAndUsers");
$("#chatbox").addClass("chatAndUsersChat");
userAndChat = true;
}else{
padcookie.setPref("chatAndUsers", false);
$('#options-stickychat').prop("disabled", false);
$('#users').removeClass("chatAndUsers");
$("#chatbox").removeClass("chatAndUsersChat");
}
},
hide: function () hide: function ()
{ {
// decide on hide logic based on chat window being maximized or not // decide on hide logic based on chat window being maximized or not

View File

@ -81,8 +81,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
onServerMessage: function() onServerMessage: function()
{} {}
}; };
if (browser.firefox)
if (browser.mozilla)
{ {
// Prevent "escape" from taking effect and canceling a comet connection; // Prevent "escape" from taking effect and canceling a comet connection;
// doesn't work if focus is on an iframe. // doesn't work if focus is on an iframe.

View File

@ -23,7 +23,7 @@
* limitations under the License. * limitations under the License.
*/ */
var _MAX_LIST_LEVEL = 8; var _MAX_LIST_LEVEL = 16;
var UNorm = require('unorm'); var UNorm = require('unorm');
var Changeset = require('./Changeset'); var Changeset = require('./Changeset');
@ -35,9 +35,10 @@ function sanitizeUnicode(s)
return UNorm.nfc(s); return UNorm.nfc(s);
} }
function makeContentCollector(collectStyles, browser, apool, domInterface, className2Author) function makeContentCollector(collectStyles, abrowser, apool, domInterface, className2Author)
{ {
browser = browser || {}; abrowser = abrowser || {};
// I don't like the above.
var dom = domInterface || { var dom = domInterface || {
isNodeText: function(n) isNodeText: function(n)
@ -484,7 +485,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
var cls = dom.nodeProp(node, "className"); var cls = dom.nodeProp(node, "className");
var isPre = (tname == "pre"); var isPre = (tname == "pre");
if ((!isPre) && browser.safari) if ((!isPre) && abrowser.safari)
{ {
isPre = (styl && /\bwhite-space:\s*pre\b/i.exec(styl)); isPre = (styl && /\bwhite-space:\s*pre\b/i.exec(styl));
} }
@ -523,7 +524,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
}else{ }else{
var type = null; var type = null;
} }
var rr = cls && /(?:^| )list-([a-z]+[12345678])\b/.exec(cls); var rr = cls && /(?:^| )list-([a-z]+[0-9]+)\b/.exec(cls);
// lists do not need to have a type, so before we make a wrong guess, check if we find a better hint within the node's children // lists do not need to have a type, so before we make a wrong guess, check if we find a better hint within the node's children
if(!rr && !type){ if(!rr && !type){
for (var i in node.children){ for (var i in node.children){
@ -538,7 +539,16 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
if(rr && rr[1]){ if(rr && rr[1]){
type = rr[1] type = rr[1]
} else { } else {
type = (tname == "ul" ? (type.match("indent") || node.attribs.class && node.attribs.class.match("indent") ? "indent" : "bullet") : "number") + String(Math.min(_MAX_LIST_LEVEL, (state.listNesting || 0) + 1)); if(tname == "ul"){
if((type && type.match("indent")) || (node.attribs && node.attribs.class && node.attribs.class.match("indent"))){
type = "indent"
} else {
type = "bullet"
}
} else {
type = "number"
}
type = type + String(Math.min(_MAX_LIST_LEVEL, (state.listNesting || 0) + 1));
} }
oldListTypeOrNull = (_enterList(state, type) || 'none'); oldListTypeOrNull = (_enterList(state, type) || 'none');
} }
@ -601,7 +611,7 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
} }
} }
} }
if (!browser.msie) if (!abrowser.msie)
{ {
_reachBlockPoint(node, 1, state); _reachBlockPoint(node, 1, state);
} }
@ -616,13 +626,11 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
_ensureColumnZero(state); _ensureColumnZero(state);
} }
} }
if (abrowser.msie)
if (browser.msie)
{ {
// in IE, a point immediately after a DIV appears on the next line // in IE, a point immediately after a DIV appears on the next line
_reachBlockPoint(node, 1, state); _reachBlockPoint(node, 1, state);
} }
state.localAttribs = localAttribs; state.localAttribs = localAttribs;
}; };
// can pass a falsy value for end of doc // can pass a falsy value for end of doc

View File

@ -65,7 +65,6 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
lineMarker: 0 lineMarker: 0
}; };
var browser = (optBrowser || {});
var document = optDocument; var document = optDocument;
if (document) if (document)
@ -93,8 +92,10 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
var perTextNodeProcess = (doesWrap ? _.identity : processSpaces); var perTextNodeProcess = (doesWrap ? _.identity : processSpaces);
var perHtmlLineProcess = (doesWrap ? processSpaces : _.identity); var perHtmlLineProcess = (doesWrap ? processSpaces : _.identity);
var lineClass = 'ace-line'; var lineClass = 'ace-line';
result.appendSpan = function(txt, cls) result.appendSpan = function(txt, cls)
{ {
var processedMarker = false; var processedMarker = false;
// Handle lineAttributeMarker, if present // Handle lineAttributeMarker, if present
if (cls.indexOf(lineAttributeMarker) >= 0) if (cls.indexOf(lineAttributeMarker) >= 0)
@ -225,7 +226,7 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument)
{ {
newHTML += '&nbsp;'; newHTML += '&nbsp;';
} }
else if (!browser.msie) else if (!optBrowser.msie)
{ {
newHTML += '<br/>'; newHTML += '<br/>';
} }

View File

@ -318,20 +318,20 @@ linestylefilter.textAndClassFuncSplitter = function(func, splitPointsOpt)
return spanHandler; return spanHandler;
}; };
linestylefilter.getFilterStack = function(lineText, textAndClassFunc, browser) linestylefilter.getFilterStack = function(lineText, textAndClassFunc, abrowser)
{ {
var func = linestylefilter.getURLFilter(lineText, textAndClassFunc); var func = linestylefilter.getURLFilter(lineText, textAndClassFunc);
var hookFilters = hooks.callAll("aceGetFilterStack", { var hookFilters = hooks.callAll("aceGetFilterStack", {
linestylefilter: linestylefilter, linestylefilter: linestylefilter,
browser: browser browser: abrowser
}); });
_.map(hookFilters ,function(hookFilter) _.map(hookFilters ,function(hookFilter)
{ {
func = hookFilter(lineText, func); func = hookFilter(lineText, func);
}); });
if (browser !== undefined && browser.msie) if (abrowser !== undefined && abrowser.msie)
{ {
// IE7+ will take an e-mail address like <foo@bar.com> and linkify it to foo@bar.com. // IE7+ will take an e-mail address like <foo@bar.com> and linkify it to foo@bar.com.
// We then normalize it back to text with no angle brackets. It's weird. So always // We then normalize it back to text with no angle brackets. It's weird. So always

View File

@ -120,6 +120,7 @@ var getParameters = [
{ name: "userColor", checkVal: null, callback: function(val) { settings.globalUserColor = decodeURIComponent(val); } }, { name: "userColor", checkVal: null, callback: function(val) { settings.globalUserColor = decodeURIComponent(val); } },
{ name: "rtl", checkVal: "true", callback: function(val) { settings.rtlIsTrue = true } }, { name: "rtl", checkVal: "true", callback: function(val) { settings.rtlIsTrue = true } },
{ name: "alwaysShowChat", checkVal: "true", callback: function(val) { chat.stickToScreen(); } }, { name: "alwaysShowChat", checkVal: "true", callback: function(val) { chat.stickToScreen(); } },
{ name: "chatAndUsers", checkVal: "true", callback: function(val) { chat.chatAndUsers(); } },
{ name: "lang", checkVal: null, callback: function(val) { window.html10n.localize([val, 'en']); } } { name: "lang", checkVal: null, callback: function(val) { window.html10n.localize([val, 'en']); } }
]; ];
@ -494,7 +495,7 @@ var pad = {
pad.initTime = +(new Date()); pad.initTime = +(new Date());
pad.padOptions = clientVars.initialOptions; pad.padOptions = clientVars.initialOptions;
if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) if ((!browser.msie) && (!(browser.firefox && browser.version.indexOf("1.8.") == 0)))
{ {
document.domain = document.domain; // for comet document.domain = document.domain; // for comet
} }
@ -562,6 +563,10 @@ var pad = {
chat.stickToScreen(true); // stick it to the screen chat.stickToScreen(true); // stick it to the screen
$('#options-stickychat').prop("checked", true); // set the checkbox to on $('#options-stickychat').prop("checked", true); // set the checkbox to on
} }
if(padcookie.getPref("chatAndUsers")){ // if we have a cookie for always showing chat then show it
chat.chatAndUsers(true); // stick it to the screen
$('#options-chatandusers').prop("checked", true); // set the checkbox to on
}
if(padcookie.getPref("showAuthorshipColors") == false){ if(padcookie.getPref("showAuthorshipColors") == false){
pad.changeViewOption('showAuthorColors', false); pad.changeViewOption('showAuthorColors', false);
} }
@ -779,6 +784,7 @@ var pad = {
handleIsFullyConnected: function(isConnected, isInitialConnect) handleIsFullyConnected: function(isConnected, isInitialConnect)
{ {
pad.determineChatVisibility(isConnected && !isInitialConnect); pad.determineChatVisibility(isConnected && !isInitialConnect);
pad.determineChatAndUsersVisibility(isConnected && !isInitialConnect);
pad.determineAuthorshipColorsVisibility(); pad.determineAuthorshipColorsVisibility();
}, },
determineChatVisibility: function(asNowConnectedFeedback){ determineChatVisibility: function(asNowConnectedFeedback){
@ -791,6 +797,16 @@ var pad = {
$('#options-stickychat').prop("checked", false); // set the checkbox for off $('#options-stickychat').prop("checked", false); // set the checkbox for off
} }
}, },
determineChatAndUsersVisibility: function(asNowConnectedFeedback){
var chatAUVisCookie = padcookie.getPref('chatAndUsersVisible');
if(chatAUVisCookie){ // if the cookie is set for chat always visible
chat.chatAndUsers(true); // stick it to the screen
$('#options-chatandusers').prop("checked", true); // set the checkbox to on
}
else{
$('#options-chatandusers').prop("checked", false); // set the checkbox for off
}
},
determineAuthorshipColorsVisibility: function(){ determineAuthorshipColorsVisibility: function(){
var authColCookie = padcookie.getPref('showAuthorshipColors'); var authColCookie = padcookie.getPref('showAuthorshipColors');
if (authColCookie){ if (authColCookie){

View File

@ -18,7 +18,16 @@ var pad;
exports.saveNow = function(){ exports.saveNow = function(){
pad.collabClient.sendMessage({"type": "SAVE_REVISION"}); pad.collabClient.sendMessage({"type": "SAVE_REVISION"});
alert(_("pad.savedrevs.marked")); $.gritter.add({
// (string | mandatory) the heading of the notification
title: _("pad.savedrevs.marked"),
// (string | mandatory) the text inside the notification
text: _("pad.savedrevs.timeslider") || "You can view saved revisions in the timeslider",
// (bool | optional) if you want it to fade out on its own or just sit there
sticky: false,
// (int | optional) the time you want it to be alive for before fading out
time: '2000'
});
} }
exports.init = function(_pad){ exports.init = function(_pad){

View File

@ -61,7 +61,7 @@ exports.availablePlugins = null;
var cacheTimestamp = 0; var cacheTimestamp = 0;
exports.getAvailablePlugins = function(maxCacheAge, cb) { exports.getAvailablePlugins = function(maxCacheAge, cb) {
request("http://etherpad.org/plugins.json", function(er, response, plugins){ request("https://static.etherpad.org/plugins.json", function(er, response, plugins){
if (er) return cb && cb(er); if (er) return cb && cb(er);
if(exports.availablePlugins && maxCacheAge && Math.round(+new Date/1000)-cacheTimestamp <= maxCacheAge) { if(exports.availablePlugins && maxCacheAge && Math.round(+new Date/1000)-cacheTimestamp <= maxCacheAge) {
return cb && cb(null, exports.availablePlugins) return cb && cb(null, exports.availablePlugins)

View File

@ -62,8 +62,8 @@ function init() {
var resource = exports.baseURL.substring(1) + 'socket.io'; var resource = exports.baseURL.substring(1) + 'socket.io';
//build up the socket io connection //build up the socket io connection
socket = io.connect(url, {resource: resource}); socket = io.connect(url, {path: exports.baseURL + 'socket.io', resource: resource});
//send the ready message once we're connected //send the ready message once we're connected
socket.on('connect', function() socket.on('connect', function()
{ {

View File

@ -78,6 +78,7 @@
<th class="sort up" data-label="name">Name</th> <th class="sort up" data-label="name">Name</th>
<th class="sort none" data-label="description">Description</th> <th class="sort none" data-label="description">Description</th>
<th class="sort none" data-label="version">Version</th> <th class="sort none" data-label="version">Version</th>
<th class="sort none" data-label="time">Last update</th>
<td></td> <td></td>
</tr> </tr>
</thead> </thead>
@ -86,6 +87,7 @@
<td class="name" data-label="Name"></td> <td class="name" data-label="Name"></td>
<td class="description" data-label="Description"></td> <td class="description" data-label="Description"></td>
<td class="version" data-label="Version"></td> <td class="version" data-label="Version"></td>
<td class="time" data-label="Time"></td>
<td> <td>
<div class="actions"> <div class="actions">
<input type="button" value="Install" class="do-install"> <input type="button" value="Install" class="do-install">

View File

@ -133,6 +133,10 @@
<input type="checkbox" id="options-stickychat" onClick="chat.stickToScreen();"> <input type="checkbox" id="options-stickychat" onClick="chat.stickToScreen();">
<label for="options-stickychat" data-l10n-id="pad.settings.stickychat"></label> <label for="options-stickychat" data-l10n-id="pad.settings.stickychat"></label>
</p> </p>
<p>
<input type="checkbox" id="options-chatandusers" onClick="chat.chatAndUsers();">
<label for="options-chatandusers" data-l10n-id="pad.settings.chatandusers"></label>
</p>
<p> <p>
<input type="checkbox" id="options-colorscheck"> <input type="checkbox" id="options-colorscheck">
<label for="options-colorscheck" data-l10n-id="pad.settings.colorcheck"></label> <label for="options-colorscheck" data-l10n-id="pad.settings.colorcheck"></label>

View File

@ -12,6 +12,7 @@ var apiVersion = 1;
var testPadId = makeid(); var testPadId = makeid();
var lastEdited = ""; var lastEdited = "";
var text = generateLongText(); var text = generateLongText();
var ULhtml = '<!DOCTYPE html><html><body><ul class="bullet"><li>one</li><li>2</li></ul><br><ul><ul class="bullet"><li>UL2</li></ul></ul></body></html>';
describe('Connectivity', function(){ describe('Connectivity', function(){
it('errors if can not connect', function(done) { it('errors if can not connect', function(done) {
@ -71,6 +72,9 @@ describe('Permission', function(){
-> movePad(newPadID, originalPadId) -- Should provide consistant pad data -> movePad(newPadID, originalPadId) -- Should provide consistant pad data
-> getText(originalPadId) -- Should be "hello world" -> getText(originalPadId) -- Should be "hello world"
-> getLastEdited(padID) -- Should not be 0 -> getLastEdited(padID) -- Should not be 0
-> setHTML(padID) -- Should fail on invalid HTML
-> setHTML(padID) *3 -- Should fail on invalid HTML
-> getHTML(padID) -- Should return HTML close to posted HTML
*/ */
@ -390,6 +394,44 @@ describe('getLastEdited', function(){
}); });
}) })
describe('setHTML', function(){
it('Sets the HTML of a Pad attempting to pass ugly HTML', function(done) {
var html = "<div><b>Hello HTML</title></head></div>";
api.get(endPoint('setHTML')+"&padID="+testPadId+"&html="+html)
.expect(function(res){
console.log(res.body.code);
if(res.body.code !== 1) throw new Error("Allowing crappy HTML to be imported")
})
.expect('Content-Type', /json/)
.expect(200, done)
});
})
describe('setHTML', function(){
it('Sets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) {
api.get(endPoint('setHTML')+"&padID="+testPadId+"&html="+ULhtml)
.expect(function(res){
if(res.body.code !== 0) throw new Error("List HTML cant be imported")
})
.expect('Content-Type', /json/)
.expect(200, done)
});
})
describe('getHTML', function(){
it('Gets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) {
api.get(endPoint('getHTML')+"&padID="+testPadId)
.expect(function(res){
var ehtml = res.body.data.html.replace("<br></body>", "</body>").toLowerCase();
var uhtml = ULhtml.toLowerCase();
if(ehtml !== uhtml) throw new Error("Imported HTML does not match served HTML")
})
.expect('Content-Type', /json/)
.expect(200, done)
});
})
/* /*
-> movePadForce Test -> movePadForce Test

View File

@ -43,9 +43,8 @@ describe("bold button", function(){
//select this text element //select this text element
$firstTextElement.sendkeys('{selectall}'); $firstTextElement.sendkeys('{selectall}');
console.log(inner$(window)[0].bowser);
if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
var evtType = "keypress"; var evtType = "keypress";
}else{ }else{
var evtType = "keydown"; var evtType = "keydown";

View File

@ -297,7 +297,7 @@ function prepareDocument(n, target){ // generates a random document with random
} }
function keyEvent(target, charCode, ctrl, shift){ // sends a charCode to the window function keyEvent(target, charCode, ctrl, shift){ // sends a charCode to the window
if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
var evtType = "keypress"; var evtType = "keypress";
}else{ }else{
var evtType = "keydown"; var evtType = "keydown";

View File

@ -6,6 +6,9 @@ describe("import functionality", function(){
function getinnertext(){ function getinnertext(){
var inner = helper.padInner$ var inner = helper.padInner$
if(!inner){
return ""
}
var newtext = "" var newtext = ""
inner("div").each(function(line,el){ inner("div").each(function(line,el){
newtext += el.innerHTML+"\n" newtext += el.innerHTML+"\n"

View File

@ -15,7 +15,7 @@ describe("indentation button", function(){
//select this text element //select this text element
$firstTextElement.sendkeys('{selectall}'); $firstTextElement.sendkeys('{selectall}');
if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
var evtType = "keypress"; var evtType = "keypress";
}else{ }else{
var evtType = "keydown"; var evtType = "keydown";

View File

@ -44,7 +44,7 @@ describe("italic some text", function(){
//select this text element //select this text element
$firstTextElement.sendkeys('{selectall}'); $firstTextElement.sendkeys('{selectall}');
if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
var evtType = "keypress"; var evtType = "keypress";
}else{ }else{
var evtType = "keydown"; var evtType = "keydown";

View File

@ -47,7 +47,7 @@ describe("undo button then redo button", function(){
var modifiedValue = $firstTextElement.text(); // get the modified value var modifiedValue = $firstTextElement.text(); // get the modified value
expect(modifiedValue).not.to.be(originalValue); // expect the value to change expect(modifiedValue).not.to.be(originalValue); // expect the value to change
if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE
var evtType = "keypress"; var evtType = "keypress";
}else{ }else{
var evtType = "keydown"; var evtType = "keydown";

View File

@ -19,6 +19,7 @@ describe("timeslider", function(){
inner$("div").first().sendkeys('a'); inner$("div").first().sendkeys('a');
}, timePerRev*i); }, timePerRev*i);
} }
chrome$('.buttonicon-savedRevision').click();
setTimeout(function() { setTimeout(function() {
// go to timeslider // go to timeslider
@ -51,6 +52,8 @@ describe("timeslider", function(){
setTimeout(function() { setTimeout(function() {
//make sure the text has changed //make sure the text has changed
expect( timeslider$('#padcontent').text() ).not.to.eql( latestContents ); expect( timeslider$('#padcontent').text() ).not.to.eql( latestContents );
var starIsVisible = timeslider$('.star').is(":visible");
expect( starIsVisible ).to.eql( true );
done(); done();
}, 1000); }, 1000);