From 255191c23c28ba558e2a95856429e6bb86773354 Mon Sep 17 00:00:00 2001 From: Bachir Soussi Chiadmi Date: Mon, 11 Jul 2016 00:35:31 +0200 Subject: [PATCH] updated sources to 1.6.0 --- sources/.gitignore | 3 + sources/.travis.yml | 2 +- sources/CHANGELOG.md | 53 ++ sources/CONTRIBUTING.md | 0 sources/LICENSE | 0 sources/Makefile | 0 sources/README.md | 2 +- sources/bin/buildForWindows.sh | 23 +- sources/bin/checkPad.js | 0 sources/bin/convert.js | 14 +- sources/bin/convertSettings.json.template | 0 sources/bin/deb-src/DEBIAN/control | 0 .../deb-src/sysroot/etc/init/etherpad.conf | 0 sources/bin/deletePad.js | 0 sources/bin/doc/LICENSE | 0 sources/bin/doc/README.md | 0 sources/bin/doc/generate.js | 0 sources/bin/doc/html.js | 0 sources/bin/doc/json.js | 0 sources/bin/doc/package.json | 0 sources/bin/extractPadData.js | 0 sources/bin/importSqlFile.js | 0 sources/bin/installDeps.sh | 14 +- sources/bin/installOnWindows.bat | 5 - sources/bin/migrateDirtyDBtoMySQL.js | 18 - sources/bin/migrateDirtyDBtoRealDB.js | 38 ++ sources/bin/rebuildPad.js | 3 + sources/bin/repairPad.js | 0 sources/bin/run.sh | 4 +- sources/doc/api/api.md | 0 sources/doc/api/changeset_library.md | 0 sources/doc/api/editbar.md | 0 sources/doc/api/editorInfo.md | 12 +- sources/doc/api/embed_parameters.md | 0 sources/doc/api/hooks_client-side.md | 41 +- sources/doc/api/hooks_overview.md | 0 sources/doc/api/hooks_server-side.md | 77 ++- sources/doc/api/http_api.md | 22 +- sources/doc/api/pluginfw.md | 0 sources/doc/api/toolbar.md | 0 sources/doc/assets/style.css | 0 sources/doc/custom_static.md | 0 sources/doc/database.md | 0 sources/doc/documentation.md | 0 sources/doc/easysync/README.md | 0 .../easysync/easysync-full-description.pdf | Bin .../easysync/easysync-full-description.tex | 0 sources/doc/easysync/easysync-notes.pdf | Bin sources/doc/easysync/easysync-notes.tex | 0 sources/doc/easysync/easysync-notes.txt | 0 sources/doc/index.md | 0 sources/doc/localization.md | 0 sources/doc/plugins.md | 0 sources/doc/stats.md | 0 sources/doc/template.html | 0 sources/settings.json.template | 63 +- sources/src/README.md | 0 sources/src/ep.json | 0 sources/src/etherpad_icon.svg | 0 sources/src/locales/af.json | 0 sources/src/locales/ar.json | 9 +- sources/src/locales/ast.json | 3 + sources/src/locales/awa.json | 0 sources/src/locales/az.json | 12 +- sources/src/locales/azb.json | 18 +- sources/src/locales/bcc.json | 0 sources/src/locales/be-tarask.json | 3 + sources/src/locales/bgn.json | 0 sources/src/locales/bn.json | 36 +- sources/src/locales/br.json | 5 +- sources/src/locales/ca.json | 9 +- sources/src/locales/cs.json | 9 +- sources/src/locales/da.json | 0 sources/src/locales/de.json | 82 +-- sources/src/locales/diq.json | 0 sources/src/locales/dsb.json | 0 sources/src/locales/dty.json | 64 ++ sources/src/locales/el.json | 3 + sources/src/locales/en-gb.json | 3 + sources/src/locales/en.json | 0 sources/src/locales/eo.json | 3 + sources/src/locales/es.json | 13 +- sources/src/locales/et.json | 0 sources/src/locales/eu.json | 25 +- sources/src/locales/fa.json | 5 +- sources/src/locales/fi.json | 9 +- sources/src/locales/fo.json | 0 sources/src/locales/fr.json | 46 +- sources/src/locales/gl.json | 3 + sources/src/locales/gu.json | 56 ++ sources/src/locales/he.json | 3 + sources/src/locales/hrx.json | 0 sources/src/locales/hsb.json | 0 sources/src/locales/hu.json | 0 sources/src/locales/ia.json | 5 + sources/src/locales/is.json | 6 +- sources/src/locales/it.json | 7 +- sources/src/locales/ja.json | 3 + sources/src/locales/km.json | 0 sources/src/locales/ko.json | 20 +- sources/src/locales/ksh.json | 27 +- sources/src/locales/ku-latn.json | 79 +++ sources/src/locales/lb.json | 0 sources/src/locales/lki.json | 100 +++- sources/src/locales/lrc.json | 0 sources/src/locales/lt.json | 30 +- sources/src/locales/lv.json | 5 +- sources/src/locales/map-bms.json | 0 sources/src/locales/mk.json | 3 + sources/src/locales/ml.json | 10 +- sources/src/locales/mn.json | 0 sources/src/locales/mr.json | 0 sources/src/locales/ms.json | 5 + sources/src/locales/nap.json | 4 +- sources/src/locales/nb.json | 56 +- sources/src/locales/nds.json | 0 sources/src/locales/ne.json | 21 +- sources/src/locales/nl.json | 11 +- sources/src/locales/nn.json | 0 sources/src/locales/oc.json | 5 +- sources/src/locales/olo.json | 54 ++ sources/src/locales/os.json | 0 sources/src/locales/pa.json | 23 +- sources/src/locales/pl.json | 21 +- sources/src/locales/ps.json | 12 +- sources/src/locales/pt-br.json | 7 +- sources/src/locales/pt.json | 5 +- sources/src/locales/ro.json | 98 +++ sources/src/locales/ru.json | 10 +- sources/src/locales/sco.json | 0 sources/src/locales/sd.json | 91 +++ sources/src/locales/shn.json | 126 ++++ sources/src/locales/sk.json | 12 +- sources/src/locales/sl.json | 0 sources/src/locales/sq.json | 49 +- sources/src/locales/sr-ec.json | 83 ++- sources/src/locales/sv.json | 3 + sources/src/locales/te.json | 0 sources/src/locales/tr.json | 7 +- sources/src/locales/uk.json | 8 +- sources/src/locales/vi.json | 0 sources/src/locales/zh-hans.json | 7 +- sources/src/locales/zh-hant.json | 6 +- sources/src/node/README.md | 0 sources/src/node/db/API.js | 58 +- sources/src/node/db/AuthorManager.js | 2 +- sources/src/node/db/DB.js | 2 +- sources/src/node/db/GroupManager.js | 0 sources/src/node/db/Pad.js | 33 +- sources/src/node/db/PadManager.js | 0 sources/src/node/db/ReadOnlyManager.js | 0 sources/src/node/db/SecurityManager.js | 0 sources/src/node/db/SessionManager.js | 0 sources/src/node/db/SessionStore.js | 0 sources/src/node/easysync_tests.js | 0 sources/src/node/eejs/examples/bar.ejs | 0 sources/src/node/eejs/examples/foo.ejs | 0 sources/src/node/eejs/index.js | 0 sources/src/node/handler/APIHandler.js | 53 +- sources/src/node/handler/ExportHandler.js | 165 ++---- sources/src/node/handler/ImportHandler.js | 3 - sources/src/node/handler/PadMessageHandler.js | 63 +- sources/src/node/handler/SocketIORouter.js | 0 sources/src/node/hooks/express.js | 0 sources/src/node/hooks/express/admin.js | 0 .../src/node/hooks/express/adminplugins.js | 0 .../src/node/hooks/express/adminsettings.js | 0 sources/src/node/hooks/express/apicalls.js | 0 .../src/node/hooks/express/errorhandling.js | 0 .../src/node/hooks/express/importexport.js | 4 +- sources/src/node/hooks/express/padreadonly.js | 0 .../src/node/hooks/express/padurlsanitize.js | 1 + sources/src/node/hooks/express/socketio.js | 0 .../src/node/hooks/express/specialpages.js | 19 +- sources/src/node/hooks/express/static.js | 0 sources/src/node/hooks/express/swagger.js | 0 sources/src/node/hooks/express/tests.js | 0 sources/src/node/hooks/express/webaccess.js | 0 sources/src/node/hooks/i18n.js | 0 sources/src/node/padaccess.js | 0 sources/src/node/server.js | 7 +- sources/src/node/stats.js | 0 sources/src/node/utils/Abiword.js | 0 sources/src/node/utils/Cli.js | 0 sources/src/node/utils/ExportEtherpad.js | 0 sources/src/node/utils/ExportHelper.js | 0 sources/src/node/utils/ExportHtml.js | 68 ++- sources/src/node/utils/ExportTxt.js | 0 sources/src/node/utils/ImportEtherpad.js | 0 sources/src/node/utils/ImportHtml.js | 0 sources/src/node/utils/LibreOffice.js | 93 +++ sources/src/node/utils/Minify.js | 0 sources/src/node/utils/RemoteAddress.js | 0 sources/src/node/utils/Settings.js | 114 +++- sources/src/node/utils/TidyHtml.js | 41 ++ sources/src/node/utils/caching_middleware.js | 0 sources/src/node/utils/customError.js | 0 sources/src/node/utils/padDiff.js | 0 sources/src/node/utils/randomstring.js | 0 sources/src/node/utils/tar.json | 0 sources/src/node/utils/toolbar.js | 24 +- sources/src/package.json | 7 +- sources/src/static/css/admin.css | 0 sources/src/static/css/iframe_editor.css | 2 + sources/src/static/css/pad.css | 42 +- sources/src/static/css/timeslider.css | 2 +- sources/src/static/custom/.gitignore | 0 sources/src/static/custom/css.template | 0 sources/src/static/custom/js.template | 0 sources/src/static/favicon.ico | Bin sources/src/static/font/config.json | 6 + .../src/static/font/fontawesome-etherpad.eot | Bin 18372 -> 18520 bytes .../src/static/font/fontawesome-etherpad.svg | 3 +- .../src/static/font/fontawesome-etherpad.ttf | Bin 18156 -> 18304 bytes .../src/static/font/fontawesome-etherpad.woff | Bin 10724 -> 10792 bytes sources/src/static/font/opendyslexic.otf | Bin sources/src/static/js/AttributeManager.js | 239 ++++++-- sources/src/static/js/AttributePool.js | 0 sources/src/static/js/Changeset.js | 10 +- sources/src/static/js/ChangesetUtils.js | 0 sources/src/static/js/ace.js | 18 +- sources/src/static/js/ace2_common.js | 0 sources/src/static/js/ace2_inner.js | 120 +++- .../src/static/js/admin/jquery.autosize.js | 0 sources/src/static/js/admin/minify.json.js | 0 sources/src/static/js/admin/plugins.js | 2 +- sources/src/static/js/admin/settings.js | 2 +- sources/src/static/js/broadcast.js | 0 sources/src/static/js/broadcast_revisions.js | 0 sources/src/static/js/broadcast_slider.js | 0 sources/src/static/js/browser.js | 100 +++- sources/src/static/js/changesettracker.js | 0 sources/src/static/js/chat.js | 0 sources/src/static/js/collab_client.js | 14 +- sources/src/static/js/colorutils.js | 0 sources/src/static/js/contentcollector.js | 2 +- sources/src/static/js/cssmanager.js | 0 sources/src/static/js/domline.js | 5 +- sources/src/static/js/excanvas.js | 0 sources/src/static/js/farbtastic.js | 0 sources/src/static/js/gritter.js | 0 sources/src/static/js/html10n.js | 4 + sources/src/static/js/json2.js | 0 sources/src/static/js/l10n.js | 0 sources/src/static/js/linestylefilter.js | 2 +- sources/src/static/js/pad.js | 27 +- sources/src/static/js/pad_connectionstatus.js | 0 sources/src/static/js/pad_cookie.js | 0 sources/src/static/js/pad_editbar.js | 30 +- sources/src/static/js/pad_editor.js | 28 +- sources/src/static/js/pad_impexp.js | 24 +- sources/src/static/js/pad_modals.js | 0 sources/src/static/js/pad_savedrevs.js | 0 sources/src/static/js/pad_userlist.js | 15 +- sources/src/static/js/pad_utils.js | 2 +- .../src/static/js/pluginfw/client_plugins.js | 0 sources/src/static/js/pluginfw/hooks.js | 0 sources/src/static/js/pluginfw/installer.js | 0 sources/src/static/js/pluginfw/plugins.js | 0 .../src/static/js/pluginfw/read-installed.js | 0 sources/src/static/js/pluginfw/shared.js | 0 sources/src/static/js/pluginfw/tsort.js | 0 sources/src/static/js/rjquery.js | 0 sources/src/static/js/security.js | 0 sources/src/static/js/skiplist.js | 0 sources/src/static/js/timeslider.js | 0 sources/src/static/js/underscore.js | 0 sources/src/static/js/undomodule.js | 0 sources/src/static/robots.txt | 0 sources/src/static/tests.html | 0 sources/src/templates/admin/index.html | 0 sources/src/templates/admin/plugins-info.html | 0 sources/src/templates/admin/plugins.html | 0 sources/src/templates/admin/settings.html | 0 sources/src/templates/index.html | 2 +- sources/src/templates/pad.html | 11 +- sources/src/templates/timeslider.html | 18 +- sources/src/web.config | 0 sources/start.bat | 0 sources/tests/README.md | 0 sources/tests/backend/loadSettings.js | 17 + sources/tests/backend/specs/api/chat.js | 3 +- sources/tests/backend/specs/api/pad.js | 66 ++- .../backend/specs/api/sessionsAndGroups.js | 3 +- sources/tests/backend/specs/api/tidy.js | 63 ++ sources/tests/frontend/helper.js | 0 sources/tests/frontend/index.html | 0 sources/tests/frontend/lib/expect.js | 0 sources/tests/frontend/lib/jquery.iframe.js | 0 sources/tests/frontend/lib/mocha.js | 0 sources/tests/frontend/lib/sendkeys.js | 0 sources/tests/frontend/lib/underscore.js | 0 sources/tests/frontend/runner.css | 0 sources/tests/frontend/runner.js | 6 - sources/tests/frontend/specs/alphabet.js | 0 sources/tests/frontend/specs/bold.js | 0 sources/tests/frontend/specs/caret.js | 0 .../tests/frontend/specs/change_user_name.js | 0 sources/tests/frontend/specs/chat.js | 0 .../frontend/specs/chat_load_messages.js | 0 .../frontend/specs/clear_authorship_colors.js | 0 sources/tests/frontend/specs/delete.js | 0 sources/tests/frontend/specs/embed_value.js | 0 sources/tests/frontend/specs/enter.js | 0 sources/tests/frontend/specs/font_type.js | 2 +- sources/tests/frontend/specs/helper.js | 0 sources/tests/frontend/specs/importexport.js | 0 sources/tests/frontend/specs/importindents.js | 0 sources/tests/frontend/specs/indentation.js | 106 +++- sources/tests/frontend/specs/italic.js | 0 sources/tests/frontend/specs/language.js | 0 sources/tests/frontend/specs/ordered_list.js | 0 sources/tests/frontend/specs/redo.js | 0 .../tests/frontend/specs/responsiveness.js | 0 sources/tests/frontend/specs/strikethrough.js | 0 sources/tests/frontend/specs/timeslider.js | 0 .../tests/frontend/specs/timeslider_labels.js | 0 .../frontend/specs/timeslider_revisions.js | 0 sources/tests/frontend/specs/undo.js | 0 .../tests/frontend/specs/unordered_list.js | 0 .../frontend/specs/urls_become_clickable.js | 0 sources/tests/frontend/travis/.gitignore | 0 .../tests/frontend/travis/remote_runner.js | 0 sources/tools/doc/LICENSE | 18 - sources/tools/doc/README.md | 76 --- sources/tools/doc/generate.js | 120 ---- sources/tools/doc/html.js | 173 ------ sources/tools/doc/json.js | 557 ------------------ sources/tools/doc/package.json | 15 - sources/var/.gitignore | 0 330 files changed, 2855 insertions(+), 1689 deletions(-) mode change 100755 => 100644 sources/CHANGELOG.md mode change 100755 => 100644 sources/CONTRIBUTING.md mode change 100755 => 100644 sources/LICENSE mode change 100755 => 100644 sources/Makefile mode change 100755 => 100644 sources/README.md mode change 100755 => 100644 sources/bin/checkPad.js mode change 100755 => 100644 sources/bin/convert.js mode change 100755 => 100644 sources/bin/convertSettings.json.template mode change 100755 => 100644 sources/bin/deb-src/DEBIAN/control mode change 100755 => 100644 sources/bin/deb-src/sysroot/etc/init/etherpad.conf mode change 100755 => 100644 sources/bin/deletePad.js mode change 100755 => 100644 sources/bin/doc/LICENSE mode change 100755 => 100644 sources/bin/doc/README.md mode change 100755 => 100644 sources/bin/doc/generate.js mode change 100755 => 100644 sources/bin/doc/html.js mode change 100755 => 100644 sources/bin/doc/json.js mode change 100755 => 100644 sources/bin/doc/package.json mode change 100755 => 100644 sources/bin/extractPadData.js mode change 100755 => 100644 sources/bin/importSqlFile.js mode change 100755 => 100644 sources/bin/installOnWindows.bat delete mode 100755 sources/bin/migrateDirtyDBtoMySQL.js create mode 100644 sources/bin/migrateDirtyDBtoRealDB.js mode change 100755 => 100644 sources/bin/rebuildPad.js mode change 100755 => 100644 sources/bin/repairPad.js mode change 100755 => 100644 sources/doc/api/api.md mode change 100755 => 100644 sources/doc/api/changeset_library.md mode change 100755 => 100644 sources/doc/api/editbar.md mode change 100755 => 100644 sources/doc/api/editorInfo.md mode change 100755 => 100644 sources/doc/api/embed_parameters.md mode change 100755 => 100644 sources/doc/api/hooks_client-side.md mode change 100755 => 100644 sources/doc/api/hooks_overview.md mode change 100755 => 100644 sources/doc/api/hooks_server-side.md mode change 100755 => 100644 sources/doc/api/http_api.md mode change 100755 => 100644 sources/doc/api/pluginfw.md mode change 100755 => 100644 sources/doc/api/toolbar.md mode change 100755 => 100644 sources/doc/assets/style.css mode change 100755 => 100644 sources/doc/custom_static.md mode change 100755 => 100644 sources/doc/database.md mode change 100755 => 100644 sources/doc/documentation.md mode change 100755 => 100644 sources/doc/easysync/README.md mode change 100755 => 100644 sources/doc/easysync/easysync-full-description.pdf mode change 100755 => 100644 sources/doc/easysync/easysync-full-description.tex mode change 100755 => 100644 sources/doc/easysync/easysync-notes.pdf mode change 100755 => 100644 sources/doc/easysync/easysync-notes.tex mode change 100755 => 100644 sources/doc/easysync/easysync-notes.txt mode change 100755 => 100644 sources/doc/index.md mode change 100755 => 100644 sources/doc/localization.md mode change 100755 => 100644 sources/doc/plugins.md mode change 100755 => 100644 sources/doc/stats.md mode change 100755 => 100644 sources/doc/template.html mode change 100755 => 100644 sources/settings.json.template mode change 100755 => 100644 sources/src/README.md mode change 100755 => 100644 sources/src/ep.json mode change 100755 => 100644 sources/src/etherpad_icon.svg mode change 100755 => 100644 sources/src/locales/af.json mode change 100755 => 100644 sources/src/locales/ar.json mode change 100755 => 100644 sources/src/locales/ast.json mode change 100755 => 100644 sources/src/locales/awa.json mode change 100755 => 100644 sources/src/locales/az.json mode change 100755 => 100644 sources/src/locales/azb.json mode change 100755 => 100644 sources/src/locales/bcc.json mode change 100755 => 100644 sources/src/locales/be-tarask.json mode change 100755 => 100644 sources/src/locales/bgn.json mode change 100755 => 100644 sources/src/locales/bn.json mode change 100755 => 100644 sources/src/locales/br.json mode change 100755 => 100644 sources/src/locales/ca.json mode change 100755 => 100644 sources/src/locales/cs.json mode change 100755 => 100644 sources/src/locales/da.json mode change 100755 => 100644 sources/src/locales/de.json mode change 100755 => 100644 sources/src/locales/diq.json mode change 100755 => 100644 sources/src/locales/dsb.json create mode 100644 sources/src/locales/dty.json mode change 100755 => 100644 sources/src/locales/el.json mode change 100755 => 100644 sources/src/locales/en-gb.json mode change 100755 => 100644 sources/src/locales/en.json mode change 100755 => 100644 sources/src/locales/eo.json mode change 100755 => 100644 sources/src/locales/es.json mode change 100755 => 100644 sources/src/locales/et.json mode change 100755 => 100644 sources/src/locales/eu.json mode change 100755 => 100644 sources/src/locales/fa.json mode change 100755 => 100644 sources/src/locales/fi.json mode change 100755 => 100644 sources/src/locales/fo.json mode change 100755 => 100644 sources/src/locales/fr.json mode change 100755 => 100644 sources/src/locales/gl.json create mode 100644 sources/src/locales/gu.json mode change 100755 => 100644 sources/src/locales/he.json mode change 100755 => 100644 sources/src/locales/hrx.json mode change 100755 => 100644 sources/src/locales/hsb.json mode change 100755 => 100644 sources/src/locales/hu.json mode change 100755 => 100644 sources/src/locales/ia.json mode change 100755 => 100644 sources/src/locales/is.json mode change 100755 => 100644 sources/src/locales/it.json mode change 100755 => 100644 sources/src/locales/ja.json mode change 100755 => 100644 sources/src/locales/km.json mode change 100755 => 100644 sources/src/locales/ko.json mode change 100755 => 100644 sources/src/locales/ksh.json create mode 100644 sources/src/locales/ku-latn.json mode change 100755 => 100644 sources/src/locales/lb.json mode change 100755 => 100644 sources/src/locales/lki.json mode change 100755 => 100644 sources/src/locales/lrc.json mode change 100755 => 100644 sources/src/locales/lt.json mode change 100755 => 100644 sources/src/locales/lv.json mode change 100755 => 100644 sources/src/locales/map-bms.json mode change 100755 => 100644 sources/src/locales/mk.json mode change 100755 => 100644 sources/src/locales/ml.json mode change 100755 => 100644 sources/src/locales/mn.json mode change 100755 => 100644 sources/src/locales/mr.json mode change 100755 => 100644 sources/src/locales/ms.json mode change 100755 => 100644 sources/src/locales/nap.json mode change 100755 => 100644 sources/src/locales/nb.json mode change 100755 => 100644 sources/src/locales/nds.json mode change 100755 => 100644 sources/src/locales/ne.json mode change 100755 => 100644 sources/src/locales/nl.json mode change 100755 => 100644 sources/src/locales/nn.json mode change 100755 => 100644 sources/src/locales/oc.json create mode 100644 sources/src/locales/olo.json mode change 100755 => 100644 sources/src/locales/os.json mode change 100755 => 100644 sources/src/locales/pa.json mode change 100755 => 100644 sources/src/locales/pl.json mode change 100755 => 100644 sources/src/locales/ps.json mode change 100755 => 100644 sources/src/locales/pt-br.json mode change 100755 => 100644 sources/src/locales/pt.json create mode 100644 sources/src/locales/ro.json mode change 100755 => 100644 sources/src/locales/ru.json mode change 100755 => 100644 sources/src/locales/sco.json create mode 100644 sources/src/locales/sd.json create mode 100644 sources/src/locales/shn.json mode change 100755 => 100644 sources/src/locales/sk.json mode change 100755 => 100644 sources/src/locales/sl.json mode change 100755 => 100644 sources/src/locales/sq.json mode change 100755 => 100644 sources/src/locales/sr-ec.json mode change 100755 => 100644 sources/src/locales/sv.json mode change 100755 => 100644 sources/src/locales/te.json mode change 100755 => 100644 sources/src/locales/tr.json mode change 100755 => 100644 sources/src/locales/uk.json mode change 100755 => 100644 sources/src/locales/vi.json mode change 100755 => 100644 sources/src/locales/zh-hans.json mode change 100755 => 100644 sources/src/locales/zh-hant.json mode change 100755 => 100644 sources/src/node/README.md mode change 100755 => 100644 sources/src/node/db/API.js mode change 100755 => 100644 sources/src/node/db/AuthorManager.js mode change 100755 => 100644 sources/src/node/db/DB.js mode change 100755 => 100644 sources/src/node/db/GroupManager.js mode change 100755 => 100644 sources/src/node/db/Pad.js mode change 100755 => 100644 sources/src/node/db/PadManager.js mode change 100755 => 100644 sources/src/node/db/ReadOnlyManager.js mode change 100755 => 100644 sources/src/node/db/SecurityManager.js mode change 100755 => 100644 sources/src/node/db/SessionManager.js mode change 100755 => 100644 sources/src/node/db/SessionStore.js mode change 100755 => 100644 sources/src/node/easysync_tests.js mode change 100755 => 100644 sources/src/node/eejs/examples/bar.ejs mode change 100755 => 100644 sources/src/node/eejs/examples/foo.ejs mode change 100755 => 100644 sources/src/node/eejs/index.js mode change 100755 => 100644 sources/src/node/handler/APIHandler.js mode change 100755 => 100644 sources/src/node/handler/ExportHandler.js mode change 100755 => 100644 sources/src/node/handler/ImportHandler.js mode change 100755 => 100644 sources/src/node/handler/PadMessageHandler.js mode change 100755 => 100644 sources/src/node/handler/SocketIORouter.js mode change 100755 => 100644 sources/src/node/hooks/express.js mode change 100755 => 100644 sources/src/node/hooks/express/admin.js mode change 100755 => 100644 sources/src/node/hooks/express/adminplugins.js mode change 100755 => 100644 sources/src/node/hooks/express/adminsettings.js mode change 100755 => 100644 sources/src/node/hooks/express/apicalls.js mode change 100755 => 100644 sources/src/node/hooks/express/errorhandling.js mode change 100755 => 100644 sources/src/node/hooks/express/importexport.js mode change 100755 => 100644 sources/src/node/hooks/express/padreadonly.js mode change 100755 => 100644 sources/src/node/hooks/express/padurlsanitize.js mode change 100755 => 100644 sources/src/node/hooks/express/socketio.js mode change 100755 => 100644 sources/src/node/hooks/express/specialpages.js mode change 100755 => 100644 sources/src/node/hooks/express/static.js mode change 100755 => 100644 sources/src/node/hooks/express/swagger.js mode change 100755 => 100644 sources/src/node/hooks/express/tests.js mode change 100755 => 100644 sources/src/node/hooks/express/webaccess.js mode change 100755 => 100644 sources/src/node/hooks/i18n.js mode change 100755 => 100644 sources/src/node/padaccess.js mode change 100755 => 100644 sources/src/node/stats.js mode change 100755 => 100644 sources/src/node/utils/Abiword.js mode change 100755 => 100644 sources/src/node/utils/Cli.js mode change 100755 => 100644 sources/src/node/utils/ExportEtherpad.js mode change 100755 => 100644 sources/src/node/utils/ExportHelper.js mode change 100755 => 100644 sources/src/node/utils/ExportHtml.js mode change 100755 => 100644 sources/src/node/utils/ExportTxt.js mode change 100755 => 100644 sources/src/node/utils/ImportEtherpad.js mode change 100755 => 100644 sources/src/node/utils/ImportHtml.js create mode 100644 sources/src/node/utils/LibreOffice.js mode change 100755 => 100644 sources/src/node/utils/Minify.js mode change 100755 => 100644 sources/src/node/utils/RemoteAddress.js mode change 100755 => 100644 sources/src/node/utils/Settings.js create mode 100644 sources/src/node/utils/TidyHtml.js mode change 100755 => 100644 sources/src/node/utils/caching_middleware.js mode change 100755 => 100644 sources/src/node/utils/customError.js mode change 100755 => 100644 sources/src/node/utils/padDiff.js mode change 100755 => 100644 sources/src/node/utils/randomstring.js mode change 100755 => 100644 sources/src/node/utils/tar.json mode change 100755 => 100644 sources/src/node/utils/toolbar.js mode change 100755 => 100644 sources/src/package.json mode change 100755 => 100644 sources/src/static/css/admin.css mode change 100755 => 100644 sources/src/static/css/iframe_editor.css mode change 100755 => 100644 sources/src/static/css/pad.css mode change 100755 => 100644 sources/src/static/css/timeslider.css mode change 100755 => 100644 sources/src/static/custom/.gitignore mode change 100755 => 100644 sources/src/static/custom/css.template mode change 100755 => 100644 sources/src/static/custom/js.template mode change 100755 => 100644 sources/src/static/favicon.ico mode change 100755 => 100644 sources/src/static/font/config.json mode change 100755 => 100644 sources/src/static/font/fontawesome-etherpad.eot mode change 100755 => 100644 sources/src/static/font/fontawesome-etherpad.svg mode change 100755 => 100644 sources/src/static/font/fontawesome-etherpad.ttf mode change 100755 => 100644 sources/src/static/font/fontawesome-etherpad.woff mode change 100755 => 100644 sources/src/static/font/opendyslexic.otf mode change 100755 => 100644 sources/src/static/js/AttributeManager.js mode change 100755 => 100644 sources/src/static/js/AttributePool.js mode change 100755 => 100644 sources/src/static/js/Changeset.js mode change 100755 => 100644 sources/src/static/js/ChangesetUtils.js mode change 100755 => 100644 sources/src/static/js/ace.js mode change 100755 => 100644 sources/src/static/js/ace2_common.js mode change 100755 => 100644 sources/src/static/js/ace2_inner.js mode change 100755 => 100644 sources/src/static/js/admin/jquery.autosize.js mode change 100755 => 100644 sources/src/static/js/admin/minify.json.js mode change 100755 => 100644 sources/src/static/js/admin/plugins.js mode change 100755 => 100644 sources/src/static/js/admin/settings.js mode change 100755 => 100644 sources/src/static/js/broadcast.js mode change 100755 => 100644 sources/src/static/js/broadcast_revisions.js mode change 100755 => 100644 sources/src/static/js/broadcast_slider.js mode change 100755 => 100644 sources/src/static/js/browser.js mode change 100755 => 100644 sources/src/static/js/changesettracker.js mode change 100755 => 100644 sources/src/static/js/chat.js mode change 100755 => 100644 sources/src/static/js/collab_client.js mode change 100755 => 100644 sources/src/static/js/colorutils.js mode change 100755 => 100644 sources/src/static/js/contentcollector.js mode change 100755 => 100644 sources/src/static/js/cssmanager.js mode change 100755 => 100644 sources/src/static/js/domline.js mode change 100755 => 100644 sources/src/static/js/excanvas.js mode change 100755 => 100644 sources/src/static/js/farbtastic.js mode change 100755 => 100644 sources/src/static/js/gritter.js mode change 100755 => 100644 sources/src/static/js/html10n.js mode change 100755 => 100644 sources/src/static/js/json2.js mode change 100755 => 100644 sources/src/static/js/l10n.js mode change 100755 => 100644 sources/src/static/js/linestylefilter.js mode change 100755 => 100644 sources/src/static/js/pad.js mode change 100755 => 100644 sources/src/static/js/pad_connectionstatus.js mode change 100755 => 100644 sources/src/static/js/pad_cookie.js mode change 100755 => 100644 sources/src/static/js/pad_editbar.js mode change 100755 => 100644 sources/src/static/js/pad_editor.js mode change 100755 => 100644 sources/src/static/js/pad_impexp.js mode change 100755 => 100644 sources/src/static/js/pad_modals.js mode change 100755 => 100644 sources/src/static/js/pad_savedrevs.js mode change 100755 => 100644 sources/src/static/js/pad_userlist.js mode change 100755 => 100644 sources/src/static/js/pad_utils.js mode change 100755 => 100644 sources/src/static/js/pluginfw/client_plugins.js mode change 100755 => 100644 sources/src/static/js/pluginfw/hooks.js mode change 100755 => 100644 sources/src/static/js/pluginfw/installer.js mode change 100755 => 100644 sources/src/static/js/pluginfw/plugins.js mode change 100755 => 100644 sources/src/static/js/pluginfw/read-installed.js mode change 100755 => 100644 sources/src/static/js/pluginfw/shared.js mode change 100755 => 100644 sources/src/static/js/pluginfw/tsort.js mode change 100755 => 100644 sources/src/static/js/rjquery.js mode change 100755 => 100644 sources/src/static/js/security.js mode change 100755 => 100644 sources/src/static/js/skiplist.js mode change 100755 => 100644 sources/src/static/js/timeslider.js mode change 100755 => 100644 sources/src/static/js/underscore.js mode change 100755 => 100644 sources/src/static/js/undomodule.js mode change 100755 => 100644 sources/src/static/robots.txt mode change 100755 => 100644 sources/src/static/tests.html mode change 100755 => 100644 sources/src/templates/admin/index.html mode change 100755 => 100644 sources/src/templates/admin/plugins-info.html mode change 100755 => 100644 sources/src/templates/admin/plugins.html mode change 100755 => 100644 sources/src/templates/admin/settings.html mode change 100755 => 100644 sources/src/templates/index.html mode change 100755 => 100644 sources/src/templates/pad.html mode change 100755 => 100644 sources/src/templates/timeslider.html mode change 100755 => 100644 sources/src/web.config mode change 100755 => 100644 sources/start.bat mode change 100755 => 100644 sources/tests/README.md create mode 100644 sources/tests/backend/loadSettings.js mode change 100755 => 100644 sources/tests/backend/specs/api/chat.js mode change 100755 => 100644 sources/tests/backend/specs/api/pad.js mode change 100755 => 100644 sources/tests/backend/specs/api/sessionsAndGroups.js create mode 100644 sources/tests/backend/specs/api/tidy.js mode change 100755 => 100644 sources/tests/frontend/helper.js mode change 100755 => 100644 sources/tests/frontend/index.html mode change 100755 => 100644 sources/tests/frontend/lib/expect.js mode change 100755 => 100644 sources/tests/frontend/lib/jquery.iframe.js mode change 100755 => 100644 sources/tests/frontend/lib/mocha.js mode change 100755 => 100644 sources/tests/frontend/lib/sendkeys.js mode change 100755 => 100644 sources/tests/frontend/lib/underscore.js mode change 100755 => 100644 sources/tests/frontend/runner.css mode change 100755 => 100644 sources/tests/frontend/runner.js mode change 100755 => 100644 sources/tests/frontend/specs/alphabet.js mode change 100755 => 100644 sources/tests/frontend/specs/bold.js mode change 100755 => 100644 sources/tests/frontend/specs/caret.js mode change 100755 => 100644 sources/tests/frontend/specs/change_user_name.js mode change 100755 => 100644 sources/tests/frontend/specs/chat.js mode change 100755 => 100644 sources/tests/frontend/specs/chat_load_messages.js mode change 100755 => 100644 sources/tests/frontend/specs/clear_authorship_colors.js mode change 100755 => 100644 sources/tests/frontend/specs/delete.js mode change 100755 => 100644 sources/tests/frontend/specs/embed_value.js mode change 100755 => 100644 sources/tests/frontend/specs/enter.js mode change 100755 => 100644 sources/tests/frontend/specs/font_type.js mode change 100755 => 100644 sources/tests/frontend/specs/helper.js mode change 100755 => 100644 sources/tests/frontend/specs/importexport.js mode change 100755 => 100644 sources/tests/frontend/specs/importindents.js mode change 100755 => 100644 sources/tests/frontend/specs/indentation.js mode change 100755 => 100644 sources/tests/frontend/specs/italic.js mode change 100755 => 100644 sources/tests/frontend/specs/language.js mode change 100755 => 100644 sources/tests/frontend/specs/ordered_list.js mode change 100755 => 100644 sources/tests/frontend/specs/redo.js mode change 100755 => 100644 sources/tests/frontend/specs/responsiveness.js mode change 100755 => 100644 sources/tests/frontend/specs/strikethrough.js mode change 100755 => 100644 sources/tests/frontend/specs/timeslider.js mode change 100755 => 100644 sources/tests/frontend/specs/timeslider_labels.js mode change 100755 => 100644 sources/tests/frontend/specs/timeslider_revisions.js mode change 100755 => 100644 sources/tests/frontend/specs/undo.js mode change 100755 => 100644 sources/tests/frontend/specs/unordered_list.js mode change 100755 => 100644 sources/tests/frontend/specs/urls_become_clickable.js mode change 100755 => 100644 sources/tests/frontend/travis/.gitignore mode change 100755 => 100644 sources/tests/frontend/travis/remote_runner.js delete mode 100644 sources/tools/doc/LICENSE delete mode 100644 sources/tools/doc/README.md delete mode 100644 sources/tools/doc/generate.js delete mode 100644 sources/tools/doc/html.js delete mode 100644 sources/tools/doc/json.js delete mode 100644 sources/tools/doc/package.json mode change 100755 => 100644 sources/var/.gitignore diff --git a/sources/.gitignore b/sources/.gitignore index a3dd9f3..4677345 100644 --- a/sources/.gitignore +++ b/sources/.gitignore @@ -2,6 +2,7 @@ node_modules settings.json !settings.json.template APIKEY.txt +SESSIONKEY.txt bin/abiword.exe bin/node.exe etherpad-lite-win.zip @@ -15,3 +16,5 @@ npm-debug.log .ep_initialized *.crt *.key +bin/etherpad-1.deb +credentials.json diff --git a/sources/.travis.yml b/sources/.travis.yml index 74f68f8..4cdf638 100644 --- a/sources/.travis.yml +++ b/sources/.travis.yml @@ -3,7 +3,7 @@ node_js: - "0.10" install: - "bin/installDeps.sh" - - "export GIT_HASH=$(cat .git/HEAD | head -c 7)" + - "export GIT_HASH=$(git rev-parse --verify --short HEAD)" before_script: - "tests/frontend/travis/sauce_tunnel.sh" script: diff --git a/sources/CHANGELOG.md b/sources/CHANGELOG.md old mode 100755 new mode 100644 index 84d8500..8ba311a --- a/sources/CHANGELOG.md +++ b/sources/CHANGELOG.md @@ -1,3 +1,56 @@ +# 1.6.0 + * SECURITY: Fix a possible xss attack in iframe link + * NEW: Add a aceSelectionChanged hook to allow plugins to react when the cursor location changes. + * NEW: Accepting Arrays on 'exportHtmlAdditionalTags' to handle attributes stored as ['key', 'value'] + * NEW: Allow admin to run on a sub-directory + * NEW: Support version 5 of node.js + * NEW: Update windows build to node version 4.4.3 + * NEW: Create setting to control if a new line will be indented or not + * NEW: Add an appendText API + * NEW: Allow LibreOffice to be used when exporting a pad + * NEW: Create hook exportHtmlAdditionalTagsWithData + * NEW: Improve DB migration performance + * NEW: allow settings to be applied from the filesystem + * NEW: remove applySettings hook and allow credentials.json to be part of core + * NEW: Use exec to switch to node process + * NEW: Validate incoming color codes + * Fix: Avoid space removal when pasting text from word processor. + * Fix: Removing style that makes editor scroll to the top on iOS without any action from the user + * Fix: Fix API call appendChatMessage to send new message to all connected clients + * Fix: Timeslider "Return to pad" button + * Fix: Generating pad HTML with tags like instead of + * Fix: Get git commit hash even if the repo only points to a bare repo. + * Fix: Fix decode error if pad name contains special characters and is sanitized + * Fix: Fix handleClientMessage_USER_* payloads not containing user info + * Fix: Set language cookie on initial load + * Fix: Timeslider Not Translated + * Other: set charset for mysql connection in settings.json + * Other: Dropped support for io.js + * Other: Add support to store credentials in credentials.json + * Other: Support node version 4 or higher + * Other: Update uberDB to version 0.3.0 + +# 1.5.7 + * NEW: Add support for intermediate CA certificates for ssl + * NEW: Provide a script to clean up before running etherpad + * NEW: Use ctrl+shift+1 to do a ordered list + * NEW: Show versions of plugins on startup + * NEW: Add author on padCreate and padUpdate hook + * Fix: switchToPad method + * Fix: Dead keys + * Fix: Preserve new lines in copy-pasted text + * Fix: Compatibility mode on IE + * Fix: Content Collector to get the class of the DOM-node + * Fix: Timeslider export links + * Fix: Double prompt on file upload + * Fix: setText() replaces the entire pad text + * Fix: Accessibility features on embedded pads + * Fix: Tidy HTML before abiword conversion + * Fix: Remove edit buttons in read-only view + * Fix: Disable user input in read-only view + * Fix: Pads end with a single newline, rather than two newlines + * Fix: Toolbar and chat for mobile devices + # 1.5.6 * Fix: Error on windows installations diff --git a/sources/CONTRIBUTING.md b/sources/CONTRIBUTING.md old mode 100755 new mode 100644 diff --git a/sources/LICENSE b/sources/LICENSE old mode 100755 new mode 100644 diff --git a/sources/Makefile b/sources/Makefile old mode 100755 new mode 100644 diff --git a/sources/README.md b/sources/README.md old mode 100755 new mode 100644 index 12ea399..cc90800 --- a/sources/README.md +++ b/sources/README.md @@ -4,7 +4,7 @@ # About Etherpad is a really-real time collaborative editor maintained by the Etherpad Community. -Etherpad is written in Javascript(99.9%) on both the server and client so it's easy for developers to maintain and add new features. Because of this Etherpad has tons of customizations that you can leverage. +Etherpad is written in JavaScript (99.9%) on both the server and client so it's easy for developers to maintain and add new features. Because of this Etherpad has tons of customizations that you can leverage. Etherpad is designed to be easily embeddable and provides a [HTTP API](https://github.com/ether/etherpad-lite/wiki/HTTP-API) that allows your web application to manage pads, users and groups. It is recommended to use the [available client implementations](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries) in order to interact with this API. diff --git a/sources/bin/buildForWindows.sh b/sources/bin/buildForWindows.sh index a508cc2..8e921d8 100755 --- a/sources/bin/buildForWindows.sh +++ b/sources/bin/buildForWindows.sh @@ -1,6 +1,6 @@ #!/bin/sh -NODE_VERSION="0.12.2" +NODE_VERSION="4.4.3" #Move to the folder where ep-lite is installed cd `dirname $0` @@ -29,11 +29,11 @@ hash unzip > /dev/null 2>&1 || { } START_FOLDER=$(pwd); +TMP_FOLDER=$(mktemp -d) -echo "create a clean environment in /tmp/etherpad-lite-win..." -rm -rf /tmp/etherpad-lite-win -cp -ar . /tmp/etherpad-lite-win -cd /tmp/etherpad-lite-win +echo "create a clean environment in $TMP_FOLDER..." +cp -ar . $TMP_FOLDER +cd $TMP_FOLDER rm -rf node_modules rm -f etherpad-lite-win.zip @@ -50,21 +50,20 @@ mv node_modules_resolved node_modules echo "download windows node..." cd bin -wget "http://nodejs.org/dist/v$NODE_VERSION/node.exe" -O ../node.exe +wget "https://nodejs.org/dist/v$NODE_VERSION/win-x86/node.exe" -O ../node.exe echo "remove git history to reduce folder size" rm -rf .git/objects echo "remove windows jsdom-nocontextify/test folder" -rm -rf /tmp/etherpad-lite-win/src/node_modules/wd/node_modules/request/node_modules/form-data/node_modules/combined-stream/test -rm -rf /tmp/etherpad-lite-win/src/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib/node_modules/encoding/node_modules/iconv-lite/encodings/tables +rm -rf $TMP_FOLDER/src/node_modules/wd/node_modules/request/node_modules/form-data/node_modules/combined-stream/test +rm -rf $TMP_FOLDER/src/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib/node_modules/encoding/node_modules/iconv-lite/encodings/tables echo "create the zip..." -cd /tmp -zip -9 -r etherpad-lite-win.zip etherpad-lite-win -mv etherpad-lite-win.zip $START_FOLDER +cd $TMP_FOLDER +zip -9 -r $START_FOLDER/etherpad-lite-win.zip ./* echo "clean up..." -rm -rf /tmp/etherpad-lite-win +rm -rf $TMP_FOLDER echo "Finished. You can find the zip in the Etherpad root folder, it's called etherpad-lite-win.zip" diff --git a/sources/bin/checkPad.js b/sources/bin/checkPad.js old mode 100755 new mode 100644 diff --git a/sources/bin/convert.js b/sources/bin/convert.js old mode 100755 new mode 100644 index 202ef04..88af1ad --- a/sources/bin/convert.js +++ b/sources/bin/convert.js @@ -34,13 +34,13 @@ var sql = "SET CHARACTER SET UTF8;\n" + fs.writeSync(sqlOutput, sql); log("done"); -//set setings for ep db -var etherpadDB= new mysql.Client(); -etherpadDB.host = settings.etherpadDB.host; -etherpadDB.port = settings.etherpadDB.port; -etherpadDB.database = settings.etherpadDB.database; -etherpadDB.user = settings.etherpadDB.user; -etherpadDB.password = settings.etherpadDB.password; +var etherpadDB = mysql.createConnection({ + host : settings.etherpadDB.host, + user : settings.etherpadDB.user, + password : settings.etherpadDB.password, + database : settings.etherpadDB.database, + port : settings.etherpadDB.port +}); //get the timestamp once var timestamp = new Date().getTime(); diff --git a/sources/bin/convertSettings.json.template b/sources/bin/convertSettings.json.template old mode 100755 new mode 100644 diff --git a/sources/bin/deb-src/DEBIAN/control b/sources/bin/deb-src/DEBIAN/control old mode 100755 new mode 100644 diff --git a/sources/bin/deb-src/sysroot/etc/init/etherpad.conf b/sources/bin/deb-src/sysroot/etc/init/etherpad.conf old mode 100755 new mode 100644 diff --git a/sources/bin/deletePad.js b/sources/bin/deletePad.js old mode 100755 new mode 100644 diff --git a/sources/bin/doc/LICENSE b/sources/bin/doc/LICENSE old mode 100755 new mode 100644 diff --git a/sources/bin/doc/README.md b/sources/bin/doc/README.md old mode 100755 new mode 100644 diff --git a/sources/bin/doc/generate.js b/sources/bin/doc/generate.js old mode 100755 new mode 100644 diff --git a/sources/bin/doc/html.js b/sources/bin/doc/html.js old mode 100755 new mode 100644 diff --git a/sources/bin/doc/json.js b/sources/bin/doc/json.js old mode 100755 new mode 100644 diff --git a/sources/bin/doc/package.json b/sources/bin/doc/package.json old mode 100755 new mode 100644 diff --git a/sources/bin/extractPadData.js b/sources/bin/extractPadData.js old mode 100755 new mode 100644 diff --git a/sources/bin/importSqlFile.js b/sources/bin/importSqlFile.js old mode 100755 new mode 100644 diff --git a/sources/bin/installDeps.sh b/sources/bin/installDeps.sh index f2a3aaf..ea6be38 100755 --- a/sources/bin/installDeps.sh +++ b/sources/bin/installDeps.sh @@ -46,15 +46,11 @@ fi #check node version NODE_VERSION=$(node --version) 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.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ]; then - if [ ! $IOJS_VERSION ]; then - echo "You're running a wrong version of node, or io.js is not installed. You're using $NODE_VERSION, we need v0.10.x, v0.11.x or v0.12.x" >&2 - exit 1 - fi +NODE_V_MAIN=$(echo $NODE_VERSION | cut -d "." -f 1) +NODE_V_MAIN=${NODE_V_MAIN#"v"} +if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ] && [ ! $NODE_V_MAIN -ge 4 ]; then + echo "You're running a wrong version of node. You're using $NODE_VERSION, we need node v0.10.x or higher" >&2 + exit 1 fi #Get the name of the settings file diff --git a/sources/bin/installOnWindows.bat b/sources/bin/installOnWindows.bat old mode 100755 new mode 100644 index 9b9a42e..89fa335 --- a/sources/bin/installOnWindows.bat +++ b/sources/bin/installOnWindows.bat @@ -6,11 +6,6 @@ cd /D "%~dp0\.." :: Is node installed? cmd /C node -e "" || ( echo "Please install node.js ( http://nodejs.org )" && exit /B 1 ) -echo _ -echo Checking node version... -set check_version="if(['10','11','12'].indexOf(process.version.split('.')[1]) === -1 && process.version.split('.')[0] !== '1') { console.log('You are running a wrong version of Node. Etherpad requires v0.10+'); process.exit(1) }" -cmd /C node -e %check_version% || exit /B 1 - echo _ echo Ensure that all dependencies are up to date... If this is the first time you have run Etherpad please be patient. cmd /C npm install src/ --loglevel warn || exit /B 1 diff --git a/sources/bin/migrateDirtyDBtoMySQL.js b/sources/bin/migrateDirtyDBtoMySQL.js deleted file mode 100755 index b4913e7..0000000 --- a/sources/bin/migrateDirtyDBtoMySQL.js +++ /dev/null @@ -1,18 +0,0 @@ -require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) { - - process.chdir(npm.root+'/..') - - var settings = require("ep_etherpad-lite/node/utils/Settings"); - var dirty = require("ep_etherpad-lite/node_modules/ueberDB/node_modules/dirty")('var/dirty.db'); - var db = require("ep_etherpad-lite/node/db/DB"); - - db.init(function() { - db = db.db; - dirty.on("load", function() { - dirty.forEach(function(key, value) { - db.set(key, value); - }); - }); - }); - -}); diff --git a/sources/bin/migrateDirtyDBtoRealDB.js b/sources/bin/migrateDirtyDBtoRealDB.js new file mode 100644 index 0000000..393c308 --- /dev/null +++ b/sources/bin/migrateDirtyDBtoRealDB.js @@ -0,0 +1,38 @@ +require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) { + + process.chdir(npm.root+'/..') + + // This script requires that you have modified your settings.json file + // to work with a real database. Please make a backup of your dirty.db + // file before using this script, just to be safe. + + var settings = require("ep_etherpad-lite/node/utils/Settings"); + var dirty = require("dirty")('var/dirty.db'); + var ueberDB = require("../src/node_modules/ueberDB"); + var log4js = require("../src/node_modules/log4js"); + var dbWrapperSettings = { + "cache": "0", // The cache slows things down when you're mostly writing. + }; + var db = new ueberDB.database(settings.dbType, settings.dbSettings, dbWrapperSettings, log4js.getLogger("ueberDB")); + + db.init(function() { + console.log("Waiting for dirtyDB to parse its file."); + dirty.on("load", function(length) { + console.log("Loaded " + length + " records, processing now."); + var remaining = length; + dirty.forEach(function(key, value) { + db.set(key, value, function(error) { + if (typeof error != 'undefined') { + console.log("Unexpected result handling: ", key, value, " was: ", error); + } + remaining -= 1; + var oldremaining = remaining; + if ((oldremaining % 100) == 0) { + console.log("Records not yet flushed to database: ", remaining); + } + }); + }); + console.log("Please wait for all records to flush to database, then kill this process."); + }); + }); +}); diff --git a/sources/bin/rebuildPad.js b/sources/bin/rebuildPad.js old mode 100755 new mode 100644 index c838334..60c5f4e --- a/sources/bin/rebuildPad.js +++ b/sources/bin/rebuildPad.js @@ -79,6 +79,9 @@ async.series([ newPad.pool.numToAttrib = oldPad.pool.numToAttrib; for(var curRevNum = 0; curRevNum <= newRevHead; curRevNum++) { db.db.get("pad:" + padId + ":revs:" + curRevNum, function(err, rev) { + if (rev.meta) { + throw "The specified revision number could not be found."; + } var newRevNum = ++newPad.head; var newRevId = "pad:" + newPad.id + ":revs:" + newRevNum; db.db.set(newRevId, rev); diff --git a/sources/bin/repairPad.js b/sources/bin/repairPad.js old mode 100755 new mode 100644 diff --git a/sources/bin/run.sh b/sources/bin/run.sh index f216231..08cd1da 100755 --- a/sources/bin/run.sh +++ b/sources/bin/run.sh @@ -21,7 +21,7 @@ if [ "$(id -u)" -eq 0 ] && [ $ignoreRoot -eq 0 ]; then echo "You shouldn't start Etherpad as root!" echo "Please type 'Etherpad rocks my socks' or supply the '--root' argument if you still want to start it as root" read rocks - if [ ! $rocks = "Etherpad rocks my socks" ] + if [ ! "$rocks" == "Etherpad rocks my socks" ] then echo "Your input was incorrect" exit 1 @@ -35,5 +35,5 @@ bin/installDeps.sh $* || exit 1 echo "Started Etherpad..." SCRIPTPATH=`pwd -P` -node $SCRIPTPATH/node_modules/ep_etherpad-lite/node/server.js $* +exec node $SCRIPTPATH/node_modules/ep_etherpad-lite/node/server.js $* diff --git a/sources/doc/api/api.md b/sources/doc/api/api.md old mode 100755 new mode 100644 diff --git a/sources/doc/api/changeset_library.md b/sources/doc/api/changeset_library.md old mode 100755 new mode 100644 diff --git a/sources/doc/api/editbar.md b/sources/doc/api/editbar.md old mode 100755 new mode 100644 diff --git a/sources/doc/api/editorInfo.md b/sources/doc/api/editorInfo.md old mode 100755 new mode 100644 index 31361a7..afb790b --- a/sources/doc/api/editorInfo.md +++ b/sources/doc/api/editorInfo.md @@ -37,13 +37,19 @@ Returns the `rep` object. ## editorInfo.ace_isCaret(?) ## editorInfo.ace_getLineAndCharForPoint(?) ## editorInfo.ace_performDocumentApplyAttributesToCharRange(?) -## editorInfo.ace_setAttributeOnSelection(?) +## editorInfo.ace_setAttributeOnSelection(attribute, enabled) +Sets an attribute on current range. +Example: `call.editorInfo.ace_setAttributeOnSelection("turkey::balls", true); // turkey is the attribute here, balls is the value +Notes: to remove the attribute pass enabled as false ## editorInfo.ace_toggleAttributeOnSelection(?) -## editorInfo.ace_getAttributeOnSelection(attribute) +## editorInfo.ace_getAttributeOnSelection(attribute, prevChar) Returns a boolean if an attribute exists on a selected range. +prevChar value should be true if you want to get the previous Character attribute instead of the current selection for example +if the caret is at position 0,1 (after first character) it's probable you want the attributes on the character at 0,0 The attribute should be the string name of the attribute applied to the selection IE subscript Example usage: Apply the activeButton Class to a button if an attribute is on a highlighted/selected caret position or range. -Example: `call.editorInfo.ace_getAttributeOnSelection("subscript");` // call here is the callstack from aceEditEvent. +Example `var isItThere = documentAttributeManager.getAttributeOnSelection("turkey::balls", true);` + See the ep_subscript plugin for an example of this function in action. Notes: Does not work on first or last character of a line. Suffers from a race condition if called with aceEditEvent. ## editorInfo.ace_performSelectionChange(?) diff --git a/sources/doc/api/embed_parameters.md b/sources/doc/api/embed_parameters.md old mode 100755 new mode 100644 diff --git a/sources/doc/api/hooks_client-side.md b/sources/doc/api/hooks_client-side.md old mode 100755 new mode 100644 index aa02733..b22db5d --- a/sources/doc/api/hooks_client-side.md +++ b/sources/doc/api/hooks_client-side.md @@ -111,7 +111,7 @@ Called from: src/static/js/ace.js Things in context: None -This hook is provided to allow custom CSS files to be loaded. The return value should be an array of paths relative to the plugins directory. +This hook is provided to allow custom CSS files to be loaded. The return value should be an array of resource urls or paths relative to the plugins directory. ## aceInitInnerdocbodyHead Called from: src/static/js/ace.js @@ -160,7 +160,19 @@ Things in context: 1. ace - the ace object that is applied to this editor. 2. pad - the pad object of the current pad. -There doesn't appear to be any example available of this particular hook being used, but it gets fired after the editor is all set up. +## postToolbarInit +Called from: src/static/js/pad_editbar.js + +Things in context: + +1. ace - the ace object that is applied to this editor. +2. toolbar - Editbar instance. See below for the Editbar documentation. + +Can be used to register custom actions to the toolbar. + +Usage examples: + +* [https://github.com/tiblu/ep_authorship_toggle]() ## postTimesliderInit Called from: src/static/js/timeslider.js @@ -203,10 +215,10 @@ Things in context: This hook is called before the content of a node is collected by the usual methods. The cc object can be used to do a bunch of things that modify the content of the pad. See, for example, the heading1 plugin for etherpad original. -E.g. if you need to apply an attribute to newly inserted characters, +E.g. if you need to apply an attribute to newly inserted characters, call cc.doAttrib(state, "attributeName") which results in an attribute attributeName=true. -If you want to specify also a value, call cc.doAttrib(state, "attributeName:value") +If you want to specify also a value, call cc.doAttrib(state, "attributeName::value") which results in an attribute attributeName=value. @@ -257,7 +269,7 @@ This hook gets called every time the client receives a message of type `name`. T `collab_client.js` has a pretty extensive list of message types, if you want to take a look. -##aceStartLineAndCharForPoint-aceEndLineAndCharForPoint +##aceStartLineAndCharForPoint-aceEndLineAndCharForPoint Called from: src/static/js/ace2_inner.js Things in context: @@ -272,7 +284,7 @@ Things in context: This hook is provided to allow a plugin to turn DOM node selection into [line,char] selection. The return value should be an array of [line,char] -##aceKeyEvent +##aceKeyEvent Called from: src/static/js/ace2_inner.js Things in context: @@ -286,7 +298,7 @@ Things in context: This hook is provided to allow a plugin to handle key events. The return value should be true if you have handled the event. -##collectContentLineText +##collectContentLineText Called from: src/static/js/contentcollector.js Things in context: @@ -299,7 +311,7 @@ Things in context: This hook allows you to validate/manipulate the text before it's sent to the server side. The return value should be the validated/manipulated text. -##collectContentLineBreak +##collectContentLineBreak Called from: src/static/js/contentcollector.js Things in context: @@ -311,7 +323,7 @@ Things in context: This hook is provided to allow whether the br tag should induce a new magic domline or not. The return value should be either true(break the line) or false. -##disableAuthorColorsForThisLine +##disableAuthorColorsForThisLine Called from: src/static/js/linestylefilter.js Things in context: @@ -339,3 +351,14 @@ Things in context: This hook is provided to allow author highlight style to be modified. Registered hooks should return 1 if the plugin handles highlighting. If no plugin returns 1, the core will use the default background-based highlighting. + +## aceSelectionChanged +Called from: src/static/js/ace2_inner.js + +Things in context: + +1. rep - information about where the user's cursor is +2. documentAttributeManager - information about attributes in the document + +This hook allows a plugin to react to a cursor or selection change, +perhaps to update a UI element based on the style at the cursor location. diff --git a/sources/doc/api/hooks_overview.md b/sources/doc/api/hooks_overview.md old mode 100755 new mode 100644 diff --git a/sources/doc/api/hooks_server-side.md b/sources/doc/api/hooks_server-side.md old mode 100755 new mode 100644 index 717abe7..5775c49 --- a/sources/doc/api/hooks_server-side.md +++ b/sources/doc/api/hooks_server-side.md @@ -81,7 +81,7 @@ Available blocks in `pad.html` are: * `modals` - Contains all connectivity messages * `embedPopup` - the embed dropdown * `scripts` - Add your script tags here, if you really have to (consider use client-side hooks instead) - + `timeslider.html` blocks: * `timesliderStyles` @@ -90,9 +90,9 @@ Available blocks in `pad.html` are: * `timesliderTop` * `timesliderEditbarRight` * `modals` - + `index.html` blocks: - + * `indexWrapper` - contains the form for creating new pads ## padInitToolbar @@ -104,12 +104,17 @@ Things in context: Here you can add custom toolbar items that will be available in the toolbar config in `settings.json`. For more about the toolbar controller see the API section. +Usage examples: + +* [https://github.com/tiblu/ep_authorship_toggle]() + ## padCreate Called from: src/node/db/Pad.js Things in context: 1. pad - the pad instance +2. author - the id of the author who created the pad This hook gets called when a new pad was created. @@ -128,6 +133,7 @@ Called from: src/node/db/Pad.js Things in context: 1. pad - the pad instance +2. author - the id of the author who updated the pad This hook gets called when an existing pad was updated. @@ -214,6 +220,32 @@ function handleMessage ( hook, context, callback ) { }; ``` +## handleMessageSecurity +Called from: src/node/handler/PadMessageHandler.js + +Things in context: + +1. message - the message being handled +2. client - the client object from socket.io + +This hook will be called once a message arrives. If a plugin calls `callback(true)` the message will be allowed to be processed. This is especially useful if you want read only pad visitors to update pad contents for whatever reason. + +**WARNING**: handleMessageSecurity will be called, even if the client is not authorized to send this message. It's up to the plugin to check permissions. + +Example: + +``` +function handleMessageSecurity ( hook, context, callback ) { + if ( context.message.boomerang == 'hipster' ) { + // If the message boomer is hipster, allow the request + callback(true); + }else{ + callback(); + } +}; +``` + + ## clientVars Called from: src/node/handler/PadMessageHandler.js @@ -306,7 +338,7 @@ exports.aceAttribClasses = function(hook_name, attr, cb){ ``` ## exportFileName -Called from src/node/handler/ExportHandler.js +Called from src/node/handler/ExportHandler.js Things in context: @@ -329,7 +361,7 @@ Things in context: 1. Pad object -This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array should be returned. +This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. If tags are stored as `['color', 'red']` on the attribute pool, use `exportHtmlAdditionalTagsWithData` instead. An Array should be returned. Example: ``` @@ -340,6 +372,24 @@ exports.exportHtmlAdditionalTags = function(hook, pad, cb){ }; ``` +## exportHtmlAdditionalTagsWithData +Called from src/node/utils/ExportHtml.js + +Things in context: + +1. Pad object + +Identical to `exportHtmlAdditionalTags`, but for tags that are stored with an specific value (not simply `true`) on the attribute pool. For example `['color', 'red']`, instead of `['bold', true]`. This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array of arrays should be returned. The exported HTML will contain tags like `` for the content where attributes are `['color', 'red']`. + +Example: +``` +// Add the props to be supported in export +exports.exportHtmlAdditionalTagsWithData = function(hook, pad, cb){ + var padId = pad.id; + cb([["color", "red"], ["color", "blue"]]); +}; +``` + ## userLeave Called from src/node/handler/PadMessageHandler.js @@ -356,3 +406,20 @@ exports.userLeave = function(hook, session, callback) { console.log('%s left pad %s', session.author, session.padId); }; ``` + +### clientReady +Called from src/node/handler/PadMessageHandler.js + +This in context: + +1. message + +This hook gets called when handling a CLIENT_READY which is the first message from the client to the server. + +Example: + +``` +exports.clientReady = function(hook, message) { + console.log('Client has entered the pad' + message.padId); +}; +``` diff --git a/sources/doc/api/http_api.md b/sources/doc/api/http_api.md old mode 100755 new mode 100644 index 59510a7..8d1b64f --- a/sources/doc/api/http_api.md +++ b/sources/doc/api/http_api.md @@ -61,7 +61,7 @@ Portal submits content into new blog post ## Usage ### API version -The latest version is `1.2.12` +The latest version is `1.2.13` The current version can be queried via /api. @@ -280,6 +280,16 @@ returns the text of a pad sets the text of a pad +*Example returns:* + * `{code: 0, message:"ok", data: null}` + * `{code: 1, message:"padID does not exist", data: null}` + * `{code: 1, message:"text too long", data: null}` + +#### appendText(padID, text) + * API >= 1.2.13 + +appends text to a pad + *Example returns:* * `{code: 0, message:"ok", data: null}` * `{code: 1, message:"padID does not exist", data: null}` @@ -380,6 +390,16 @@ returns the chatHead (last number of the last chat-message) of the pad * `{code: 0, message:"ok", data: {chatHead: 42}}` * `{code: 1, message:"padID does not exist", data: null}` +#### appendChatMessage(padID, text, authorID [, time]) + * API >= 1.2.12 + +creates a chat message, saves it to the database and sends it to all connected clients of this pad + + +*Example returns:* + +* `{code: 0, message:"ok", data: null}` +* `{code: 1, message:"text is no string", data: null}` ### Pad Group pads are normal pads, but with the name schema GROUPID$PADNAME. A security manager controls access of them and its forbidden for normal pads to include a $ in the name. diff --git a/sources/doc/api/pluginfw.md b/sources/doc/api/pluginfw.md old mode 100755 new mode 100644 diff --git a/sources/doc/api/toolbar.md b/sources/doc/api/toolbar.md old mode 100755 new mode 100644 diff --git a/sources/doc/assets/style.css b/sources/doc/assets/style.css old mode 100755 new mode 100644 diff --git a/sources/doc/custom_static.md b/sources/doc/custom_static.md old mode 100755 new mode 100644 diff --git a/sources/doc/database.md b/sources/doc/database.md old mode 100755 new mode 100644 diff --git a/sources/doc/documentation.md b/sources/doc/documentation.md old mode 100755 new mode 100644 diff --git a/sources/doc/easysync/README.md b/sources/doc/easysync/README.md old mode 100755 new mode 100644 diff --git a/sources/doc/easysync/easysync-full-description.pdf b/sources/doc/easysync/easysync-full-description.pdf old mode 100755 new mode 100644 diff --git a/sources/doc/easysync/easysync-full-description.tex b/sources/doc/easysync/easysync-full-description.tex old mode 100755 new mode 100644 diff --git a/sources/doc/easysync/easysync-notes.pdf b/sources/doc/easysync/easysync-notes.pdf old mode 100755 new mode 100644 diff --git a/sources/doc/easysync/easysync-notes.tex b/sources/doc/easysync/easysync-notes.tex old mode 100755 new mode 100644 diff --git a/sources/doc/easysync/easysync-notes.txt b/sources/doc/easysync/easysync-notes.txt old mode 100755 new mode 100644 diff --git a/sources/doc/index.md b/sources/doc/index.md old mode 100755 new mode 100644 diff --git a/sources/doc/localization.md b/sources/doc/localization.md old mode 100755 new mode 100644 diff --git a/sources/doc/plugins.md b/sources/doc/plugins.md old mode 100755 new mode 100644 diff --git a/sources/doc/stats.md b/sources/doc/stats.md old mode 100755 new mode 100644 diff --git a/sources/doc/template.html b/sources/doc/template.html old mode 100755 new mode 100644 diff --git a/sources/settings.json.template b/sources/settings.json.template old mode 100755 new mode 100644 index 7d9c62c..9eaec47 --- a/sources/settings.json.template +++ b/sources/settings.json.template @@ -2,6 +2,9 @@ This file must be valid JSON. But comments are allowed Please edit settings.json, not settings.json.template + + To still commit settings without credentials you can + store any credential settings in credentials.json */ { // Name your instance! @@ -10,12 +13,12 @@ // favicon default name // alternatively, set up a fully specified Url to your own favicon "favicon": "favicon.ico", - + //IP and port which etherpad should bind at "ip": "0.0.0.0", "port" : 9001, - /* + /* // Node native SSL support // this is disabled by default // @@ -24,7 +27,7 @@ "ssl" : { "key" : "/path-to-your/epl-server.key", - "cert" : "/path-to-your/epl-server.crt" + "cert" : "/path-to-your/epl-server.crt", "ca": ["/path-to-your/epl-intermediate-cert1.crt", "/path-to-your/epl-intermediate-cert2.crt"] }, @@ -37,17 +40,18 @@ "dbSettings" : { "filename" : "var/dirty.db" }, - + /* An Example of MySQL Configuration "dbType" : "mysql", "dbSettings" : { - "user" : "root", - "host" : "localhost", - "password": "", - "database": "store" + "user" : "root", + "host" : "localhost", + "password": "", + "database": "store", + "charset" : "utf8mb4" }, */ - + //the default text of a pad "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n", @@ -65,8 +69,8 @@ "chatAndUsers": false, "lang": "en-gb" }, - - /* Shoud we suppress errors from being visible in the default Pad Text? */ + + /* Should we suppress errors from being visible in the default Pad Text? */ "suppressErrorsInPadText" : false, /* Users must have a session to access pads. This effectively allows only group pads to be accessed. */ @@ -77,35 +81,43 @@ /* Users, who have a valid session, automatically get granted access to password protected pads */ "sessionNoPassword" : false, - - /* if true, all css & js will be minified before sending to the client. This will improve the loading performance massivly, + + /* if true, all css & js will be minified before sending to the client. This will improve the loading performance massivly, but makes it impossible to debug the javascript/css */ "minify" : true, /* How long may clients use served javascript code (in seconds)? Without versioning this may cause problems during deployment. Set to 0 to disable caching */ "maxAge" : 21600, // 60 * 60 * 6 = 6 hours - - /* This is the path to the Abiword executable. Setting it to null, disables abiword. - Abiword is needed to advanced import/export features of pads*/ + + /* This is the absolute path to the Abiword executable. Setting it to null, disables abiword. + Abiword is needed to advanced import/export features of pads*/ "abiword" : null, + /* This is the absolute path to the soffice executable. Setting it to null, disables LibreOffice exporting. + LibreOffice can be used in lieu of Abiword to export pads */ + "soffice" : null, + + /* This is the path to the Tidy executable. Setting it to null, disables Tidy. + Tidy is used to improve the quality of exported pads*/ + "tidyHtml" : null, + /* Allow import of file types other than the supported types: txt, doc, docx, rtf, odt, html & htm */ "allowUnknownFileEnds" : true, - + /* This setting is used if you require authentication of all users. Note: /admin always requires authentication. */ "requireAuthentication" : false, /* Require authorization by a module, or a user with is_admin set, see below. */ "requireAuthorization" : false, - + /*when you use NginX or another proxy/ load-balancer set this to true*/ "trustProxy" : false, - + /* Privacy: disable IP logging */ - "disableIPlogging" : false, - + "disableIPlogging" : false, + /* Users for basic authentication. is_admin = true gives access to /admin. If you do not uncomment this, /admin will not be available! */ /* @@ -126,7 +138,12 @@ // Allow Load Testing tools to hit the Etherpad Instance. Warning this will disable security on the instance. "loadTest": false, - + + // Disable indentation on new line when previous line ends with some special chars (':', '[', '(', '{') + /* + "indentationOnNewLine": false, + */ + /* The toolbar buttons configuration. "toolbar": { "left": [ @@ -148,7 +165,7 @@ /* The log level we are using, can be: DEBUG, INFO, WARN, ERROR */ "loglevel": "INFO", - + //Logging configuration. See log4js documentation for further information // https://github.com/nomiddlename/log4js-node // You can add as many appenders as you want here: diff --git a/sources/src/README.md b/sources/src/README.md old mode 100755 new mode 100644 diff --git a/sources/src/ep.json b/sources/src/ep.json old mode 100755 new mode 100644 diff --git a/sources/src/etherpad_icon.svg b/sources/src/etherpad_icon.svg old mode 100755 new mode 100644 diff --git a/sources/src/locales/af.json b/sources/src/locales/af.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/ar.json b/sources/src/locales/ar.json old mode 100755 new mode 100644 index 9d29b52..33c6beb --- a/sources/src/locales/ar.json +++ b/sources/src/locales/ar.json @@ -5,7 +5,9 @@ "Tux-tn", "Alami", "Meno25", - "Test Create account" + "Test Create account", + "محمد أحمد عبد الفتاح", + "Haytham morsy" ] }, "index.newPad": "باد جديد", @@ -37,6 +39,7 @@ "pad.settings.padSettings": "إعدادات الباد", "pad.settings.myView": "رؤيتي", "pad.settings.stickychat": "الدردشة دائما على الشاشة", + "pad.settings.chatandusers": "أظهر الدردشة والمستخدمين", "pad.settings.colorcheck": "ألوان التأليف", "pad.settings.linenocheck": "أرقام الأسطر", "pad.settings.rtlcheck": "قراءة المحتويات من اليمين إلى اليسار؟", @@ -95,6 +98,9 @@ "timeslider.exportCurrent": "تصدير النسخة الحالية ك:", "timeslider.version": "إصدار {{version}}", "timeslider.saved": "محفوظ {{month}} {{day}}, {{year}}", + "timeslider.playPause": "تشغيل / إيقاف مؤقت محتويات الباد", + "timeslider.backRevision": "عد إلى مراجعة في هذه الباد", + "timeslider.forwardRevision": "انطلق إلى مراجعة في هذه الباد", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "يناير", "timeslider.month.february": "فبراير", @@ -110,6 +116,7 @@ "timeslider.month.december": "ديسمبر", "timeslider.unnamedauthors": "بدون اسم {{num}} {[plural(num) واحد: كاتب، آخر: مؤلف]}", "pad.savedrevs.marked": "هذا التنقيح محدد الآن كمراجعة محفوظة", + "pad.savedrevs.timeslider": "يمكنك عرض المراجعات المحفوظة بزيارة متصفح التاريخ", "pad.userlist.entername": "أدخل اسمك", "pad.userlist.unnamed": "غير مسمى", "pad.userlist.guest": "ضيف", diff --git a/sources/src/locales/ast.json b/sources/src/locales/ast.json old mode 100755 new mode 100644 index 47c1ccc..e39bf6e --- a/sources/src/locales/ast.json +++ b/sources/src/locales/ast.json @@ -92,6 +92,9 @@ "timeslider.exportCurrent": "Esportar la versión actual como:", "timeslider.version": "Versión {{version}}", "timeslider.saved": "Guardáu el {{day}} de {{month}} de {{year}}", + "timeslider.playPause": "Reproducir/posar el conteníu del bloc", + "timeslider.backRevision": "Dir a la revisión anterior d'esti bloc", + "timeslider.forwardRevision": "Dir a la revisión siguiente d'esti bloc", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "de xineru", "timeslider.month.february": "de febreru", diff --git a/sources/src/locales/awa.json b/sources/src/locales/awa.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/az.json b/sources/src/locales/az.json old mode 100755 new mode 100644 index f5968ee..e27beaf --- a/sources/src/locales/az.json +++ b/sources/src/locales/az.json @@ -4,7 +4,8 @@ "AZISS", "Khan27", "Mushviq Abdulla", - "Wertuose" + "Wertuose", + "Mastizada" ] }, "index.newPad": "Yeni lövhə", @@ -19,22 +20,24 @@ "pad.toolbar.unindent.title": "Çıxıntı (Shift+TAB)", "pad.toolbar.undo.title": "Geri qaytar (Ctrl+Z)", "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ə (Ctrl+Shift+C)", "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.savedRevision.title": "Saxlanılan Düzəlişlər", + "pad.toolbar.savedRevision.title": "Düzəlişləri Saxla", "pad.toolbar.settings.title": "Tənzimləmələr", "pad.toolbar.embed.title": "Bu lövhəni paylaş və qur", "pad.toolbar.showusers.title": "Lövhədəki istifadəçiləri göstər", "pad.colorpicker.save": "Saxla", "pad.colorpicker.cancel": "İmtina", "pad.loading": "Yüklənir...", + "pad.noCookie": "Çərəz tapıla bilmədi. Lütfən səyyahınızda çərəzlərə icazə verinǃ", "pad.passwordRequired": "Bu lövhəyə daxil olmaq üçün parol lazımdır", "pad.permissionDenied": "Bu lövhəyə daxil olmaq üçün icazəniz yoxdur", "pad.wrongPassword": "Sizin parolunuz səhvdir", "pad.settings.padSettings": "Lövhə nizamlamaları", "pad.settings.myView": "Mənim Görüntüm", "pad.settings.stickychat": "Söhbət həmişə ekranda", + "pad.settings.chatandusers": "Gap və İstifadəçiləri Göstər", "pad.settings.colorcheck": "Müəlliflik rəngləri", "pad.settings.linenocheck": "Sətir nömrələri", "pad.settings.rtlcheck": "Mühtəviyyat sağdan sola doğru oxunsunmu?", @@ -77,7 +80,7 @@ "pad.modals.deleted.explanation": "Bu lövhə silindi.", "pad.modals.disconnected": "Əlaqə kəsilib.", "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 ola bilsin, əlçatmazdır. Əgər belə davam edərsə xidmət administratorunu xəbərdar edin.", "pad.share": "Bu lövhəni paylaş", "pad.share.readonly": "Yalnız oxuyun", "pad.share.link": "Keçid", @@ -93,6 +96,7 @@ "timeslider.exportCurrent": "Cari versiyanı ixrac etmək kimi:", "timeslider.version": "Versiya {{version}}", "timeslider.saved": "Saxlanıldı {{day}} {{month}}, {{year}}", + "timeslider.playPause": "Geri oxutma / Lövhə Məzmunlarını Dayandır", "timeslider.dateformat": "{{day}} {{month}}, {{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Yanvar", "timeslider.month.february": "Fevral", diff --git a/sources/src/locales/azb.json b/sources/src/locales/azb.json old mode 100755 new mode 100644 index 799c5b6..995e853 --- a/sources/src/locales/azb.json +++ b/sources/src/locales/azb.json @@ -3,7 +3,8 @@ "authors": [ "Amir a57", "Mousa", - "Koroğlu" + "Koroğlu", + "Alp Er Tunqa" ] }, "index.newPad": "یئنی یادداشت دفترچه سی", @@ -11,21 +12,21 @@ "pad.toolbar.bold.title": "بویوت", "pad.toolbar.italic.title": "مورب", "pad.toolbar.underline.title": "خطدین آلتی", - "pad.toolbar.strikethrough.title": "خط یئمیش", - "pad.toolbar.ol.title": "جوتدنمیش فهرست", - "pad.toolbar.ul.title": "جوتدنممیش فهرست", + "pad.toolbar.strikethrough.title": "خط یئمیش (Ctrl+5)", + "pad.toolbar.ol.title": "جوتدنمیش فهرست (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "جوتدنمه‌میش لیست (Ctrl+Shift+L)", "pad.toolbar.indent.title": "ایچری باتدیگی", - "pad.toolbar.unindent.title": "ائشیگه چیخدیگی", + "pad.toolbar.unindent.title": "ائشیگه چیخدیغی (Shift+TAB)", "pad.toolbar.undo.title": "باطل ائتمک", "pad.toolbar.redo.title": "یئنی دن", - "pad.toolbar.clearAuthorship.title": "یازیچی رنگ لری پوزماق", + "pad.toolbar.clearAuthorship.title": "یازیچی رنگ لری پوزماق (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "آیری قالیب لردن /ایچری توکمه / ائشیگه توکمه", "pad.toolbar.timeslider.title": "زمان اسلایدی", - "pad.toolbar.savedRevision.title": "ساخلانمیش نسخه لر", + "pad.toolbar.savedRevision.title": "نۆسخه‌نی ذخیره ائت", "pad.toolbar.settings.title": "تنظیملر", "pad.toolbar.embed.title": "بو یادداشت دفترچه سین یئرلتمک", "pad.toolbar.showusers.title": "بو دفترچه یادداشت دا اولان کاربرلری گوستر", - "pad.colorpicker.save": "قئید ائت", + "pad.colorpicker.save": "ذخیره ائت", "pad.colorpicker.cancel": "لغو ائت", "pad.loading": "یوکلنیر...", "pad.settings.padSettings": "یادداشت دفترچه سینین تنظیملر", @@ -69,6 +70,7 @@ "timeslider.toolbar.returnbutton": "یادداشت دفترچه سینه قاییت", "timeslider.toolbar.authors": "یازیچیلار", "timeslider.toolbar.authorsList": "یازیچی سیز", + "timeslider.toolbar.exportlink.title": "ائشیگه آپارماق", "timeslider.month.january": "ژانویه", "timeslider.month.february": "فوریه", "timeslider.month.march": "مارس", diff --git a/sources/src/locales/bcc.json b/sources/src/locales/bcc.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/be-tarask.json b/sources/src/locales/be-tarask.json old mode 100755 new mode 100644 index 3c78985..2d8c26e --- a/sources/src/locales/be-tarask.json +++ b/sources/src/locales/be-tarask.json @@ -94,6 +94,9 @@ "timeslider.exportCurrent": "Экспартаваць актуальную вэрсію як:", "timeslider.version": "Вэрсія {{version}}", "timeslider.saved": "Захавана {{day}}.{{month}}.{{year}}", + "timeslider.playPause": "Прайграць / спыніць зьмест дакумэнту", + "timeslider.backRevision": "Вярнуць рэдагаваньне гэтага дакумэнту", + "timeslider.forwardRevision": "Перайсьці да наступнага рэдагаваньня гэтага дакумэнту", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "студзень", "timeslider.month.february": "люты", diff --git a/sources/src/locales/bgn.json b/sources/src/locales/bgn.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/bn.json b/sources/src/locales/bn.json old mode 100755 new mode 100644 index e8bb7ac..0102720 --- a/sources/src/locales/bn.json +++ b/sources/src/locales/bn.json @@ -10,16 +10,18 @@ }, "index.newPad": "নতুন প্যাড", "index.createOpenPad": "অথবা নাম লিখে প্যাড খুলুন/তৈরী করুন:", - "pad.toolbar.bold.title": "গাড় করা (Ctrl-B)", - "pad.toolbar.italic.title": "বাঁকা করা (Ctrl-I)", - "pad.toolbar.underline.title": "আন্ডারলাইন (Ctrl-U)", - "pad.toolbar.strikethrough.title": "স্ট্রাইক্থ্রু", - "pad.toolbar.ol.title": "সারিবদ্ধ তালিকা", + "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": "সেটিং", @@ -27,24 +29,28 @@ "pad.toolbar.showusers.title": "এই প্যাডের ব্যবহারকারীদের দেখান", "pad.colorpicker.save": "সংরক্ষণ", "pad.colorpicker.cancel": "বাতিল", - "pad.loading": "লোডিং...", + "pad.loading": "লোড হচ্ছে...", + "pad.noCookie": "কুকি পাওয়া যায়নি। দয়া করে আপনার ব্রাউজারে কুকি অনুমতি দিন!", "pad.passwordRequired": "এই প্যাড-টি দেখার জন্য আপনাকে পাসওয়ার্ড ব্যবহার করতে হবে", "pad.permissionDenied": "দুঃখিত, এ প্যাড-টি দেখার অধিকার আপনার নেই", "pad.wrongPassword": "আপনার পাসওয়ার্ড সঠিক নয়", "pad.settings.padSettings": "প্যাডের স্থাপন", "pad.settings.myView": "আমার দৃশ্য", "pad.settings.stickychat": "চ্যাট সক্রীনে প্রদর্শন করা হবে", + "pad.settings.chatandusers": "চ্যাট এবং ব্যবহারকারী দেখান", "pad.settings.colorcheck": "লেখকদের নিজস্ব নির্বাচিত রং", "pad.settings.linenocheck": "লাইন নম্বর", - "pad.settings.fontType": "ফন্ট-এর প্রকার:", + "pad.settings.rtlcheck": "ডান থেকে বামে বিষয়বস্তু পড়বেন?", + "pad.settings.fontType": "ফন্টের প্রকার:", "pad.settings.fontType.normal": "সাধারণ", "pad.settings.fontType.monospaced": "Monospace", "pad.settings.globalView": "সর্বব্যাপী দৃশ্য", "pad.settings.language": "ভাষা:", "pad.importExport.import_export": "আমদানি/রপ্তানি", - "pad.importExport.import": "কোন টেক্সট ফাইল বা ডকুমেন্ট আপলোড করুন", + "pad.importExport.import": "কোন টেক্সট ফাইল বা নথি আপলোড করুন", "pad.importExport.importSuccessful": "সফল!", "pad.importExport.export": "এই প্যাডটি রপ্তানি করুন:", + "pad.importExport.exportetherpad": "ইথারপ্যাড", "pad.importExport.exporthtml": "এইচটিএমএল", "pad.importExport.exportplain": "সাধারণ লেখা", "pad.importExport.exportword": "মাইক্রোসফট ওয়ার্ড", @@ -55,9 +61,11 @@ "pad.modals.forcereconnect": "পুনরায় সংযোগস্থাপনের চেষ্টা", "pad.modals.userdup": "অন্য উইন্ডো-তে খোলা হয়েছে", "pad.modals.unauth": "আপনার অধিকার নেই", - "pad.modals.initsocketfail": "সার্ভার-এর সাথে যোগাযোগ করতে অসক্ষম।", + "pad.modals.initsocketfail": "সার্ভারে পৌঁছানো যাচ্ছে না।", + "pad.modals.slowcommit.explanation": "সার্ভার সাড়া দিচ্ছে না।", "pad.modals.deleted": "অপসারিত।", "pad.modals.deleted.explanation": "এই প্যাডটি অপসারণ করা হয়েছে।", + "pad.modals.disconnected": "আপনি সংযোগ বিচ্ছিন্ন হয়েছে গেছে।", "pad.modals.disconnected.explanation": "সার্ভারের সাথে যোগাযোগ করা যাচ্ছে না", "pad.share": "শেয়ার করুন", "pad.share.readonly": "শুধু পড়া", @@ -86,11 +94,17 @@ "timeslider.month.october": "অক্টোবর", "timeslider.month.november": "নভেম্বর", "timeslider.month.december": "ডিসেম্বর", - "pad.userlist.entername": "আপনার নাম", + "timeslider.unnamedauthors": "নামবিহীন {{num}} জন {[plural(num) one: লেখক, other: লেখক ]}", + "pad.userlist.entername": "আপনার নাম লিখুন", "pad.userlist.unnamed": "কোন নাম নির্বাচন করা হয়নি", "pad.userlist.guest": "অতিথি", + "pad.userlist.deny": "প্রত্যাখ্যান", "pad.userlist.approve": "অনুমোদিত", "pad.impexp.importbutton": "এখন আমদানি করুন", "pad.impexp.importing": "আমদানি হচ্ছে...", - "pad.impexp.importfailed": "আমদানি ব্যর্থ" + "pad.impexp.padHasData": "আমরা এই ফাইলটি আমদানি করতে সক্ষম হয়নি কারণ এই প্যাড ইতিমধ্যে পরিবর্তিত হয়েছে, দয়া করে একটি নতুন প্যাডে অামদানি করুন।", + "pad.impexp.uploadFailed": "আপলোড করতে ব্যর্থ, দয়া করে আবার চেষ্টা করুন", + "pad.impexp.importfailed": "আমদানি ব্যর্থ", + "pad.impexp.copypaste": "দয়া করে অনুলিপি প্রতিলেপন করুন", + "pad.impexp.exportdisabled": "{{type}} হিসেবে রপ্তানি করা নিষ্ক্রিয় আছে। বিস্তারিত জানার জন্য আপনার সিস্টেম প্রশাসকের সাথে যোগাযোগ করুন।" } diff --git a/sources/src/locales/br.json b/sources/src/locales/br.json old mode 100755 new mode 100644 index 310c97a..6a60fa3 --- a/sources/src/locales/br.json +++ b/sources/src/locales/br.json @@ -22,7 +22,7 @@ "pad.toolbar.clearAuthorship.title": "Diverkañ al livioù oc'h anaout an aozerien (Ktrl+Pennlizherenn+C)", "pad.toolbar.import_export.title": "Enporzhiañ/Ezporzhiañ eus/war-zu ur furmad restr disheñvel", "pad.toolbar.timeslider.title": "Istor dinamek", - "pad.toolbar.savedRevision.title": "Doareoù enrollet", + "pad.toolbar.savedRevision.title": "Enrollañ an adweladenn", "pad.toolbar.settings.title": "Arventennoù", "pad.toolbar.embed.title": "Rannañ hag enframmañ ar pad-mañ", "pad.toolbar.showusers.title": "Diskwelet implijerien ar Pad", @@ -95,6 +95,9 @@ "timeslider.exportCurrent": "Ezporzhiañ an doare bremañ evel :", "timeslider.version": "Stumm {{version}}", "timeslider.saved": "Enrollañ {{day}} {{month}} {{year}}", + "timeslider.playPause": "Lenn / Ehan endalc'hoù ar pad", + "timeslider.backRevision": "Kilit eus un adweladenn er pad-mañ", + "timeslider.forwardRevision": "Araogiñ un adweladenn er pad-mañ", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Genver", "timeslider.month.february": "C'hwevrer", diff --git a/sources/src/locales/ca.json b/sources/src/locales/ca.json old mode 100755 new mode 100644 index 638b645..40a833d --- a/sources/src/locales/ca.json +++ b/sources/src/locales/ca.json @@ -6,7 +6,9 @@ "Pitort", "Toniher", "Macofe", - "Joan manel" + "Joan manel", + "Eduardo Martinez", + "Jaumeortola" ] }, "index.newPad": "Nou pad", @@ -74,7 +76,7 @@ "pad.modals.slowcommit.explanation": "El servidor no respon.", "pad.modals.slowcommit.cause": "Això podria ser a causa de problemes amb la connectivitat de la xarxa.", "pad.modals.badChangeset.explanation": "El servidor de sincronització ha classificat com a il·legat una edició que heu fet.", - "pad.modals.badChangeset.cause": "Això pot ser degut a una configuració errònia del servidor o a algun altre comportament inesperat. Si us plau, si considereu que això és un error, contacteu amb l'administrador del servei. Intenteu reconnectar-vos per tal de continuar editant.", + "pad.modals.badChangeset.cause": "Això pot ser degut a una configuració errònia del servidor o a algun altre comportament inesperat. Si considereu que és un error, contacteu amb l'administrador del servei. Intenteu reconnectar-vos per a continuar editant.", "pad.modals.corruptPad.explanation": "El pad al qual esteu intentant accedir està corrupte.", "pad.modals.corruptPad.cause": "Això pot ser degut a una configuració errònia del servidor o a algun altre comportament inesperat. Si us plau, contacteu amb l'administrador del servei.", "pad.modals.deleted": "Suprimit.", @@ -97,6 +99,9 @@ "timeslider.exportCurrent": "Exporta la versió actual com a:", "timeslider.version": "Versió {{version}}", "timeslider.saved": "Desat {{month}} {{day}}, {{year}}", + "timeslider.playPause": "Reproducció / Pausa els continguts del pad", + "timeslider.backRevision": "Tornar una revisió enrere en aquest Pad", + "timeslider.forwardRevision": "Anar una revisió endavant en aquest Pad", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Gener", "timeslider.month.february": "Febrer", diff --git a/sources/src/locales/cs.json b/sources/src/locales/cs.json old mode 100755 new mode 100644 index 19552ff..cc537de --- a/sources/src/locales/cs.json +++ b/sources/src/locales/cs.json @@ -5,7 +5,9 @@ "Jezevec", "Juandev", "Leanes", - "Quinn" + "Quinn", + "Aktron", + "Mormegil" ] }, "index.newPad": "Založ nový Pad", @@ -96,6 +98,9 @@ "timeslider.exportCurrent": "Exportovat nynější verzi jako:", "timeslider.version": "Verze {{version}}", "timeslider.saved": "Uloženo {{day}} {{month}} {{year}}", + "timeslider.playPause": "Pustit / pozastavit obsah padu", + "timeslider.backRevision": "Jít v tomto padu o revizi zpět", + "timeslider.forwardRevision": "Jít v tomto padu o revizi vpřed", "timeslider.dateformat": "{{day}} {{month}} {{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "leden", "timeslider.month.february": "únor", @@ -109,7 +114,7 @@ "timeslider.month.october": "říjen", "timeslider.month.november": "listopad", "timeslider.month.december": "prosinec", - "timeslider.unnamedauthors": "{{num}} {[ plural(num) one: nejmenovaný Autor, few: nejmenovaní Autoři, other: nejmenovaných Autorů ]}", + "timeslider.unnamedauthors": "{{num}} {[plural(num) one: nejmenovaný autor, few: nejmenovaní autoři, other: nejmenovaných autorů ]}", "pad.savedrevs.marked": "Tato revize je nyní označena jako uložená", "pad.savedrevs.timeslider": "Návštěvou časové osy zobrazíte uložené revize", "pad.userlist.entername": "Zadejte své jméno", diff --git a/sources/src/locales/da.json b/sources/src/locales/da.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/de.json b/sources/src/locales/de.json old mode 100755 new mode 100644 index 2fd31c1..29387fd --- a/sources/src/locales/de.json +++ b/sources/src/locales/de.json @@ -5,11 +5,12 @@ "Mklehr", "Nipsky", "Wikinaut", - "Thargon" + "Thargon", + "Predatorix" ] }, "index.newPad": "Neues Pad", - "index.createOpenPad": "Pad mit folgendem Namen öffnen:", + "index.createOpenPad": "oder Pad mit folgendem Namen öffnen:", "pad.toolbar.bold.title": "Fett (Strg-B)", "pad.toolbar.italic.title": "Kursiv (Strg-I)", "pad.toolbar.underline.title": "Unterstrichen (Strg-U)", @@ -22,22 +23,22 @@ "pad.toolbar.redo.title": "Wiederholen (Strg-Y)", "pad.toolbar.clearAuthorship.title": "Autorenfarben zurücksetzen (Strg+Shift+C)", "pad.toolbar.import_export.title": "Import/Export von/zu verschiedenen Dateiformaten", - "pad.toolbar.timeslider.title": "Pad-Versionsgeschichte anzeigen", - "pad.toolbar.savedRevision.title": "Version markieren", + "pad.toolbar.timeslider.title": "Bearbeitungsverlauf", + "pad.toolbar.savedRevision.title": "Version speichern", "pad.toolbar.settings.title": "Einstellungen", - "pad.toolbar.embed.title": "Pad teilen oder einbetten", - "pad.toolbar.showusers.title": "Aktuell verbundene Benutzer anzeigen", + "pad.toolbar.embed.title": "Dieses Pad teilen oder einbetten", + "pad.toolbar.showusers.title": "Benutzer dieses Pads anzeigen", "pad.colorpicker.save": "Speichern", "pad.colorpicker.cancel": "Abbrechen", - "pad.loading": "Laden …", + "pad.loading": "Lade …", "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 Kennwort, um auf dieses Pad zuzugreifen", "pad.permissionDenied": "Sie haben keine Berechtigung, um auf dieses Pad zuzugreifen", - "pad.wrongPassword": "Ihr Passwort war falsch", - "pad.settings.padSettings": "Pad Einstellungen", + "pad.wrongPassword": "Ihr eingegebenes Kennwort war falsch", + "pad.settings.padSettings": "Pad-Einstellungen", "pad.settings.myView": "Eigene Ansicht", - "pad.settings.stickychat": "Chat immer anzeigen", - "pad.settings.chatandusers": "Chat und Benutzer anzeigen", + "pad.settings.stickychat": "Unterhaltung immer anzeigen", + "pad.settings.chatandusers": "Unterhaltung und Benutzer anzeigen", "pad.settings.colorcheck": "Autorenfarben anzeigen", "pad.settings.linenocheck": "Zeilennummern", "pad.settings.rtlcheck": "Inhalt von rechts nach links lesen?", @@ -56,46 +57,49 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "Sie können nur aus Klartext oder HTML-Formaten importieren. Für mehr erweiterte Importfunktionen installieren Sie bitte abiword.", + "pad.importExport.abiword.innerHTML": "Sie können nur aus reinen Text- oder HTML-Formaten importieren. Für umfangreichere Importfunktionen installieren Sie bitte abiword.", "pad.modals.connected": "Verbunden.", "pad.modals.reconnecting": "Wiederherstellen der Verbindung …", - "pad.modals.forcereconnect": "Erneut Verbinden", + "pad.modals.forcereconnect": "Erneutes Verbinden erzwingen", "pad.modals.userdup": "In einem anderen Fenster geöffnet", - "pad.modals.userdup.explanation": "Dieses Pad scheint in mehr als einem Browser-Fenster auf diesem Computer geöffnet zu sein.", - "pad.modals.userdup.advice": "Um dieses Fenster zu benutzen, verbinden Sie bitte erneut.", - "pad.modals.unauth": "Nicht authorisiert.", - "pad.modals.unauth.explanation": "Ihre Zugriffsberechtigung für dieses Pad hat sich zwischenzeitlich geändert. Sie können versuchen das Pad erneut aufzurufen.", - "pad.modals.looping.explanation": "Es gibt Probleme bei der Kommunikation mit dem Pad-Server.", - "pad.modals.looping.cause": "Möglicherweise sind Sie durch eine inkompatible Firewall oder über einen inkompatiblen Proxy mit dem Pad-Server verbunden.", - "pad.modals.initsocketfail": "Pad-Server nicht erreichbar.", - "pad.modals.initsocketfail.explanation": "Es konnte keine Verbindung zum Pad-Server hergestellt werden.", + "pad.modals.userdup.explanation": "Dieses Pad scheint in mehr als einem Browser-Fenster auf diesem Rechner geöffnet zu sein.", + "pad.modals.userdup.advice": "Um stattdessen dieses Fenster zu verwenden, verbinden Sie sich bitte erneut.", + "pad.modals.unauth": "Nicht berechtigt", + "pad.modals.unauth.explanation": "Ihre Zugriffsberechtigung für dieses Pad hat sich zwischenzeitlich geändert. Versuchen Sie sich erneut zu verbinden.", + "pad.modals.looping.explanation": "Es gibt Verbindungsprobleme mit dem Server.", + "pad.modals.looping.cause": "Möglicherweise sind Sie durch eine inkompatible Firewall oder über einen inkompatiblen Proxy mit dem Server verbunden.", + "pad.modals.initsocketfail": "Der Server ist nicht erreichbar.", + "pad.modals.initsocketfail.explanation": "Es konnte keine Verbindung zum Server hergestellt werden.", "pad.modals.initsocketfail.cause": "Dies könnte an Ihrem Browser oder Ihrer Internet-Verbindung liegen.", - "pad.modals.slowcommit.explanation": "Der Pad-Server reagiert nicht.", - "pad.modals.slowcommit.cause": "Dies könnte ein Netzwerkverbindungsproblem sein oder eine momentane Überlastung des Pad-Servers.", - "pad.modals.badChangeset.explanation": "Eine von Ihnen gemachte Änderung wurde vom Pad-Server als ungültig eingestuft.", + "pad.modals.slowcommit.explanation": "Der Server antwortet nicht.", + "pad.modals.slowcommit.cause": "Dies könnte ein Netzwerkverbindungsproblem sein oder eine momentane Überlastung des Servers.", + "pad.modals.badChangeset.explanation": "Eine von Ihnen gemachte Änderung wurde vom Server als ungültig eingestuft.", "pad.modals.badChangeset.cause": "Dies könnte aufgrund einer falschen Serverkonfiguration oder eines anderen unerwarteten Verhaltens passiert sein. Bitte kontaktiere den Diensteadministrator, falls du glaubst, dass es sich um einen Fehler handelt. Versuche dich erneut zu verbinden, um mit dem Bearbeiten fortzufahren.", - "pad.modals.corruptPad.explanation": "Das Pad, auf das du zugreifen willst, ist beschädigt.", - "pad.modals.corruptPad.cause": "Dies könnte an einer falschen Serverkonfiguration oder eines anderen unerwarteten Verhaltens liegen. Bitte kontaktiere den Diensteadministrator.", + "pad.modals.corruptPad.explanation": "Das Pad, auf das Sie versuchen zuzugreifen, ist beschädigt.", + "pad.modals.corruptPad.cause": "Dies könnte an einer falschen Serverkonfiguration oder eines anderen unerwarteten Verhaltens liegen. Bitte kontaktieren Sie den Administrator dieses Dienstes.", "pad.modals.deleted": "Gelöscht.", "pad.modals.deleted.explanation": "Dieses Pad wurde entfernt.", - "pad.modals.disconnected": "Deine Verbindung wurde getrennt.", - "pad.modals.disconnected.explanation": "Die Verbindung zum Pad-Server wurde unterbrochen.", - "pad.modals.disconnected.cause": "Möglicherweise ist der Pad-Server nicht erreichbar. Bitte benachrichtigen Sie den Dienstadministrator, falls dies weiterhin passiert.", + "pad.modals.disconnected": "Ihre Verbindung wurde getrennt.", + "pad.modals.disconnected.explanation": "Die Verbindung zum Server wurde unterbrochen.", + "pad.modals.disconnected.cause": "Möglicherweise ist der Server nicht erreichbar. Bitte benachrichtigen Sie den Dienstadministrator, falls dies weiterhin passiert.", "pad.share": "Dieses Pad teilen", "pad.share.readonly": "Eingeschränkter Nur-Lese-Zugriff", - "pad.share.link": "Link", + "pad.share.link": "Verknüpfung", "pad.share.emebdcode": "In Webseite einbetten", - "pad.chat": "Chat", - "pad.chat.title": "Den Chat dieses Pads öffnen", + "pad.chat": "Unterhaltung", + "pad.chat.title": "Den Chat für dieses Pad öffnen.", "pad.chat.loadmessages": "Weitere Nachrichten laden", - "timeslider.pageTitle": "{{appTitle}} Pad-Versionsgeschichte", + "timeslider.pageTitle": "{{appTitle}} Bearbeitungsverlauf", "timeslider.toolbar.returnbutton": "Zurück zum Pad", "timeslider.toolbar.authors": "Autoren:", "timeslider.toolbar.authorsList": "keine Autoren", "timeslider.toolbar.exportlink.title": "Diese Version exportieren", "timeslider.exportCurrent": "Exportiere diese Version als:", "timeslider.version": "Version {{version}}", - "timeslider.saved": "gespeichert am {{day}}. {{month}} {{year}}", + "timeslider.saved": "Gespeichert am {{day}}. {{month}} {{year}}", + "timeslider.playPause": "Padbearbeitung abspielen/pausieren", + "timeslider.backRevision": "Eine Version in diesem Pad zurück gehen", + "timeslider.forwardRevision": "Eine Version in diesem Pad vorwärts gehen", "timeslider.dateformat": "{{day}}.{{month}}.{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Januar", "timeslider.month.february": "Februar", @@ -111,7 +115,7 @@ "timeslider.month.december": "Dezember", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: unbenannter Autor, other: unbenannte Autoren ]}", "pad.savedrevs.marked": "Diese Version wurde jetzt als gespeicherte Version gekennzeichnet", - "pad.savedrevs.timeslider": "Du kannst gespeicherte Versionen durch das Besuchen der Pad-Versionsgeschichte ansehen", + "pad.savedrevs.timeslider": "Du kannst gespeicherte Versionen durch den Aufruf des Bearbeitungsverlaufes ansehen", "pad.userlist.entername": "Geben Sie Ihren Namen ein", "pad.userlist.unnamed": "unbenannt", "pad.userlist.guest": "Gast", @@ -121,9 +125,9 @@ "pad.impexp.importbutton": "Jetzt importieren", "pad.impexp.importing": "Importiere …", "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.padHasData": "Wir konnten diese Datei nicht importieren, da dieses Pad bereits Änderungen enthält. Bitte importiere sie in ein neues Pad.", - "pad.impexp.uploadFailed": "Der Upload ist fehlgeschlagen. Bitte versuchen Sie es erneut.", + "pad.impexp.convertFailed": "Diese Datei konnte nicht importiert werden. Bitte verwenden Sie ein anderes Dokumentformat oder übertragen Sie den Text manuell.", + "pad.impexp.padHasData": "Diese Datei konnte nicht importiert werden, da dieses Pad bereits Änderungen enthält. Bitte importieren Sie die Datei in ein neues Pad.", + "pad.impexp.uploadFailed": "Das Hochladen ist fehlgeschlagen. Bitte versuchen Sie es erneut.", "pad.impexp.importfailed": "Import fehlgeschlagen", "pad.impexp.copypaste": "Bitte kopieren und einfügen", "pad.impexp.exportdisabled": "Der Export im {{type}}-Format ist deaktiviert. Für Einzelheiten kontaktieren Sie bitte Ihren Systemadministrator." diff --git a/sources/src/locales/diq.json b/sources/src/locales/diq.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/dsb.json b/sources/src/locales/dsb.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/dty.json b/sources/src/locales/dty.json new file mode 100644 index 0000000..fde3651 --- /dev/null +++ b/sources/src/locales/dty.json @@ -0,0 +1,64 @@ +{ + "@metadata": { + "authors": [ + "रमेश सिंह बोहरा", + "राम प्रसाद जोशी" + ] + }, + "index.newPad": "नयाँ प्याड", + "index.createOpenPad": "नाम सहितको नयाँ प्याड सिर्जना गद्य्या / खोल्या :", + "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.timeslider.title": "टाइमस्लाइडर", + "pad.toolbar.savedRevision.title": "पुनरावलोकन संग्रहा गद्य्य", + "pad.toolbar.settings.title": "सेटिङ्गहरू", + "pad.toolbar.embed.title": "यै प्याडलाई बाड्न्या यात इम्बेड गद्य्या", + "pad.toolbar.showusers.title": "यै प्याडमि रयाका प्रयोगकर्ता देखाउन्या", + "pad.colorpicker.save": "सङ्ग्रह गद्या", + "pad.colorpicker.cancel": "खारेजी", + "pad.loading": "लोड हुन्नाछ....", + "pad.passwordRequired": "यो प्यड खोल्लाकी पासवर्ड चाहिन्छ", + "pad.permissionDenied": "तमलाईँ यै प्याड खोल्लाकी अनुमति नाइथिन", + "pad.wrongPassword": "तमरो पासवर्ड गलत थ्यो", + "pad.settings.padSettings": "प्याड सेटिङ्गहरू", + "pad.settings.myView": "मेरि हेराइ", + "pad.settings.stickychat": "पर्दामा जबलई कुरडी गद्य्या", + "pad.settings.chatandusers": "वार्ता और प्रयोगकर्ताहरू देखाउन्या", + "pad.settings.colorcheck": "लेखकीय रङ्ग", + "pad.settings.linenocheck": "हरफ संख्या", + "pad.settings.rtlcheck": "के सामग्री दाहिना बठे देब्रे पढ्न्या हो ?", + "pad.settings.fontType": "फन्ट प्रकार:", + "pad.settings.globalView": "विश्वव्यापी दृष्य", + "pad.settings.language": "भाषा: $1", + "pad.importExport.import_export": "आउन्या/झान्या", + "pad.importExport.import": "कोइलै पाठ रयाको फाइल और कागजात अपलोड गरिदिय", + "pad.importExport.importSuccessful": "सफल भयो!", + "pad.importExport.export": "निम्न रुपमि प्याड पठौन्या :", + "pad.importExport.exportetherpad": "इथरप्याड", + "pad.importExport.exporthtml": "हटमेल", + "pad.importExport.exportplain": "सानतिनो पाठ", + "pad.importExport.exportword": "माइक्रोसफ्ट वर्ड", + "pad.importExport.exportpdf": "पिडिएफ", + "pad.importExport.exportopen": "ओडिएफ(खुल्ला कागजात ढाँचा)", + "pad.modals.connected": "जोडीयाको", + "pad.modals.reconnecting": "तमरो प्याडमि आजि: जडान हुन्नाछ", + "pad.modals.initsocketfail": "सर्भरमा पहुँच पुर्‍याउन नाइसकियो ।", + "pad.modals.deleted": "मेटियाको", + "pad.modals.deleted.explanation": "यो प्याड हटाइसक्याको छ ।", + "pad.modals.disconnected": "तमरो जडान अवरुद्ध भयो ।", + "pad.modals.disconnected.explanation": "तमरो सर्भरसितको जडान अवरुद्ध भयो", + "pad.share": "यस प्यडलाई बाड्न्या", + "pad.share.readonly": "पड्या मात्तरै", + "pad.share.link": "लिङ्क", + "pad.share.emebdcode": "URL थप्प्या", + "pad.chat": "कुरणिकानी" +} diff --git a/sources/src/locales/el.json b/sources/src/locales/el.json old mode 100755 new mode 100644 index f18c71e..602b82b --- a/sources/src/locales/el.json +++ b/sources/src/locales/el.json @@ -96,6 +96,9 @@ "timeslider.exportCurrent": "Εξαγωγή τρέχουσας έκδοσης ως:", "timeslider.version": "Έκδοση {{version}}", "timeslider.saved": "Αποθηκεύτηκε στις {{day}} {{month}} {{year}}", + "timeslider.playPause": "Αναπαραγωγή / Παύση των περιεχομένων αυτού του Pad", + "timeslider.backRevision": "Επιστροφή σε μια έκδοση αυτού του Pad", + "timeslider.forwardRevision": "Μια έκδοση μπροστά αυτού του Pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Ιανουαρίου", "timeslider.month.february": "Φεβρουαρίου", diff --git a/sources/src/locales/en-gb.json b/sources/src/locales/en-gb.json old mode 100755 new mode 100644 index 258b433..0cae66e --- a/sources/src/locales/en-gb.json +++ b/sources/src/locales/en-gb.json @@ -93,6 +93,9 @@ "timeslider.exportCurrent": "Export current version as:", "timeslider.version": "Version {{version}}", "timeslider.saved": "Saved {{month}} {{day}}, {{year}}", + "timeslider.playPause": "Playback/Pause Pad Contents", + "timeslider.backRevision": "Go back a revision in this Pad", + "timeslider.forwardRevision": "Go forward a revision in this Pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "January", "timeslider.month.february": "February", diff --git a/sources/src/locales/en.json b/sources/src/locales/en.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/eo.json b/sources/src/locales/eo.json old mode 100755 new mode 100644 index fd7b7c1..c452672 --- a/sources/src/locales/eo.json +++ b/sources/src/locales/eo.json @@ -94,6 +94,9 @@ "timeslider.exportCurrent": "Elporti la nunan version kiel:", "timeslider.version": "Versio {{version}}", "timeslider.saved": "Konservita la {{day}}an de {{month}}, {{year}}", + "timeslider.playPause": "Ludi / paŭzi la enhavojn de la teksto", + "timeslider.backRevision": "Reiri unu version en ĉi tiu teksto", + "timeslider.forwardRevision": "Antaŭeniri unu version en ĉi tiu teksto", "timeslider.dateformat": "{{day}}-{{month}}-{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "januaro", "timeslider.month.february": "februaro", diff --git a/sources/src/locales/es.json b/sources/src/locales/es.json old mode 100755 new mode 100644 index 21eb60a..b265906 --- a/sources/src/locales/es.json +++ b/sources/src/locales/es.json @@ -36,7 +36,7 @@ "pad.colorpicker.save": "Guardar", "pad.colorpicker.cancel": "Cancelar", "pad.loading": "Cargando...", - "pad.noCookie": "La cookie no se pudo encontrar. ¡Por favor, habilita las cookies en tu navegador!", + "pad.noCookie": "La cookie no se pudo encontrar. ¡Habilita las cookies en tu navegador!", "pad.passwordRequired": "Necesitas una contraseña para acceder a este pad", "pad.permissionDenied": "No tienes permiso para acceder a este pad", "pad.wrongPassword": "La contraseña era incorrecta", @@ -75,7 +75,7 @@ "pad.modals.looping.cause": "Puede deberse a que te conectes a través de un proxy o un cortafuegos incompatible.", "pad.modals.initsocketfail": "Servidor incalcanzable.", "pad.modals.initsocketfail.explanation": "No se pudo conectar al servidor de sincronización.", - "pad.modals.initsocketfail.cause": "Probablemente debido a un problema en tu navegador o en tu conexión a internet.", + "pad.modals.initsocketfail.cause": "Probablemente debido a un problema en tu navegador o en tu conexión a Internet.", "pad.modals.slowcommit.explanation": "El servidor no responde.", "pad.modals.slowcommit.cause": "Puede deberse a problemas con tu conexión de red.", "pad.modals.badChangeset.explanation": "Has hecho una edición clasificada como ilegal por el servidor de sincronización.", @@ -102,6 +102,9 @@ "timeslider.exportCurrent": "Exportar la versión actual como:", "timeslider.version": "Versión {{version}}", "timeslider.saved": "Guardado el {{day}} de {{month}} de {{year}}", + "timeslider.playPause": "Reproducir/pausar los contenidos del pad", + "timeslider.backRevision": "Ir a la revisión anterior en este pad", + "timeslider.forwardRevision": "Ir a la revisión posterior en este pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "enero", "timeslider.month.february": "febrero", @@ -115,7 +118,7 @@ "timeslider.month.october": "octubre", "timeslider.month.november": "noviembre", "timeslider.month.december": "diciembre", - "timeslider.unnamedauthors": "{{num}} {[ plural(num) one: autor desconocido, other: autores desconocidos]}", + "timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor desconocido, other: autores desconocidos]}", "pad.savedrevs.marked": "Revisión guardada", "pad.savedrevs.timeslider": "Puedes ver revisiones guardadas visitando la línea de tiempo", "pad.userlist.entername": "Escribe tu nombre", @@ -128,8 +131,8 @@ "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.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.padHasData": "No hemos podido importar este archivo porque este pad ya ha tenido cambios. Importa a un nuevo pad.", + "pad.impexp.uploadFailed": "El envío falló. Inténtalo de nuevo.", "pad.impexp.importfailed": "Fallo al importar", "pad.impexp.copypaste": "Intenta copiar y pegar", "pad.impexp.exportdisabled": "La exportación al formato {{type}} está desactivada. Contacta a tu administrador de sistemas." diff --git a/sources/src/locales/et.json b/sources/src/locales/et.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/eu.json b/sources/src/locales/eu.json old mode 100755 new mode 100644 index 9cd0607..4ef4518 --- a/sources/src/locales/eu.json +++ b/sources/src/locales/eu.json @@ -2,7 +2,9 @@ "@metadata": { "authors": [ "Theklan", - "Subi" + "Subi", + "Xabier Armendaritz", + "An13sa" ] }, "index.newPad": "Pad berria", @@ -10,14 +12,14 @@ "pad.toolbar.bold.title": "Lodia (Ctrl-B)", "pad.toolbar.italic.title": "Etzana (Ctrl-I)", "pad.toolbar.underline.title": "Azpimarratua (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Ezabatua", - "pad.toolbar.ol.title": "Zerrenda ordenatua", - "pad.toolbar.ul.title": "Zerrenda ez-ordenatua", - "pad.toolbar.indent.title": "Koska", - "pad.toolbar.unindent.title": "Koska kendu", + "pad.toolbar.strikethrough.title": "Ezabatua (Ctrl+5)", + "pad.toolbar.ol.title": "Zerrenda ordenatua (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Zerrenda ez-ordenatua (Ctrl+Shift+L)", + "pad.toolbar.indent.title": "Koska (TAB)", + "pad.toolbar.unindent.title": "Koska kendu (Shift+TAB)", "pad.toolbar.undo.title": "Desegin (Ctrl-Z)", "pad.toolbar.redo.title": "Berregin (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "Ezabatu Egiletza Koloreak", + "pad.toolbar.clearAuthorship.title": "Ezabatu Egiletza Koloreak (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Inportatu/Esportatu fitxategi formatu ezberdinetara/ezberdinetatik", "pad.toolbar.timeslider.title": "Denbora lerroa", "pad.toolbar.savedRevision.title": "Gorde berrikuspena", @@ -27,12 +29,14 @@ "pad.colorpicker.save": "Gorde", "pad.colorpicker.cancel": "Utzi", "pad.loading": "Kargatzen...", + "pad.noCookie": "Cookiea ez da aurkitu. Mesedez, gaitu cookieak zure nabigatzailean!", "pad.passwordRequired": "Pasahitza behar duzu pad honetara sartzeko", "pad.permissionDenied": "Ez duzu bamienik pad honetara sartzeko", "pad.wrongPassword": "Zure pasahitza oker zegoen", "pad.settings.padSettings": "Pad hobespenak", "pad.settings.myView": "Nire ikusmoldea", "pad.settings.stickychat": "Txata beti pantailan", + "pad.settings.chatandusers": "Erakutsi txata eta erabiltzaileak", "pad.settings.colorcheck": "Egiletzaren koloreak", "pad.settings.linenocheck": "Lerro zenbakiak", "pad.settings.rtlcheck": "Edukia eskubitik ezkerrera irakurri?", @@ -67,11 +71,12 @@ "pad.modals.initsocketfail.cause": "Ziurrenik hau zure nabigatzailea edo internet konexioaren arazo bat dela eta izango da.", "pad.modals.slowcommit.explanation": "Zerbitzariak ez du erantzuten.", "pad.modals.slowcommit.cause": "Baliteke hau sarearen konexio arazoak direla eta izatea.", + "pad.modals.badChangeset.explanation": "Sinkronizazio zerbitzariak, zuk egindako aldaketa bat legez kanpokotzat jo du.", "pad.modals.deleted": "Ezabatua.", "pad.modals.deleted.explanation": "Pad hau ezabatua izan da.", "pad.modals.disconnected": "Deskonektatua izan zara.", "pad.modals.disconnected.explanation": "Zerbitzariaren konexioa galdu da", - "pad.modals.disconnected.cause": "Baliteke zerbitzaria irisgarria ez izatea. Mesedez, esaiguzu hau gertatzen jarraitzen badu.", + "pad.modals.disconnected.cause": "Baliteke zerbitzaria eskuragarri ez egotea. Mesedez, jakinarazi zerbitzuko administrariari honek gertatzen jarraitzen badu.", "pad.share": "Pad hau partekatu", "pad.share.readonly": "Irakurtzeko bakarrik", "pad.share.link": "Lotura", @@ -87,7 +92,7 @@ "timeslider.exportCurrent": "Gorde bertsio hau honela:", "timeslider.version": "Bertsioa {{version}}", "timeslider.saved": "{{year}}ko {{month}}ren {{day}}an gordeta", - "timeslider.dateformat": "{{year}}/{{month}}/{{day}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Urtarrila", "timeslider.month.february": "Otsaila", "timeslider.month.march": "Martxoa", @@ -100,7 +105,7 @@ "timeslider.month.october": "Urria", "timeslider.month.november": "Azaroa", "timeslider.month.december": "Abendua", - "timeslider.unnamedauthors": "{{num}} izenik gabeko egileak", + "timeslider.unnamedauthors": "{{num}} izenik gabeko {[plural(num) one: egilea, other: egileak]}", "pad.savedrevs.marked": "Berrikuspen hau markatua dago gordetako berrikuspen gisa", "pad.userlist.entername": "Sartu zure erabiltzaile izena", "pad.userlist.unnamed": "izenik gabe", diff --git a/sources/src/locales/fa.json b/sources/src/locales/fa.json old mode 100755 new mode 100644 index cd42c87..e1e8841 --- a/sources/src/locales/fa.json +++ b/sources/src/locales/fa.json @@ -74,7 +74,7 @@ "pad.modals.initsocketfail.cause": "شاید این به خاطر مشکلی در مرورگر یا اتصال اینترنتی شما باشد.", "pad.modals.slowcommit.explanation": "سرور پاسخ نمی‌دهد.", "pad.modals.slowcommit.cause": "این می‌تواند به خاطر مشکلاتی در اتصال به شبکه باشد.", - "pad.modals.badChangeset.explanation": "ویرایشی که شما انجام داده‌اید توسط سرور همگام‌سازی نادرست طیقه‌بندی شده‌است.", + "pad.modals.badChangeset.explanation": "ویرایشی که شما انجام داده‌اید توسط سرور همگام‌سازی نادرست طیقه‌بندی شده است.", "pad.modals.badChangeset.cause": "این می‌تواند به دلیل پیکربندی اشتباه یا سایر رفتارهای غیرمنتظره باشد. اگر فکر می‌کنید این یک خطا است لطفاً با مدیر خدمت تماس بگیرید. برای ادامهٔ ویرایش سعی کنید که دوباره متصل شوید.", "pad.modals.corruptPad.explanation": "پدی که شما سعی دارید دسترسی پیدا کنید خراب است.", "pad.modals.corruptPad.cause": "این احتمالاً به دلیل تنظیمات اشتباه کارساز یا سایر رفتارهای غیرمنتظره است. لطفاً با مدیر خدمت تماس حاصل کنید.", @@ -98,6 +98,9 @@ "timeslider.exportCurrent": "برون‌ریزی نگارش کنونی به عنوان:", "timeslider.version": "نگارش {{version}}", "timeslider.saved": "{{month}} {{day}}، {{year}} ذخیره شد", + "timeslider.playPause": "اجرای مجدد/متوقف کردن پخش", + "timeslider.backRevision": "رفتن به نسخهٔ پیشین در این دفترچه", + "timeslider.forwardRevision": "رفتن به نسخهٔ بعدی در این دفترچه", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "ژانویه", "timeslider.month.february": "فوریه", diff --git a/sources/src/locales/fi.json b/sources/src/locales/fi.json old mode 100755 new mode 100644 index 67efac9..8f4f583 --- a/sources/src/locales/fi.json +++ b/sources/src/locales/fi.json @@ -12,7 +12,8 @@ "VezonThunder", "Macofe", "MrTapsa", - "Silvonen" + "Silvonen", + "Espeox" ] }, "index.newPad": "Uusi muistio", @@ -44,6 +45,7 @@ "pad.settings.padSettings": "Muistion asetukset", "pad.settings.myView": "Oma näkymä", "pad.settings.stickychat": "Keskustelu aina näkyvissä", + "pad.settings.chatandusers": "Näytä keskustelu ja käyttäjät", "pad.settings.colorcheck": "Kirjoittajavärit", "pad.settings.linenocheck": "Rivinumerot", "pad.settings.rtlcheck": "Luetaanko sisältö oikealta vasemmalle?", @@ -102,6 +104,9 @@ "timeslider.exportCurrent": "Vie nykyinen versio muodossa:", "timeslider.version": "Versio {{version}}", "timeslider.saved": "Tallennettu {{day}}. {{month}}ta {{year}}", + "timeslider.playPause": "Toista / pysäytä muistion sisältö", + "timeslider.backRevision": "Palaa edelliseen muutokseen taaksepäin tässä muistiossa", + "timeslider.forwardRevision": "Siirry seuraavaan muutokseen tässä muistiossa", "timeslider.dateformat": "{{day}}.{{month}}.{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "tammikuu", "timeslider.month.february": "helmikuu", @@ -117,6 +122,7 @@ "timeslider.month.december": "joulukuu", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: nimetön tekijä, other: nimetöntä tekijää ]}", "pad.savedrevs.marked": "Tämä versio on nyt merkitty tallennetuksi versioksi", + "pad.savedrevs.timeslider": "Voit tarkastella tallennettuja versioita avaamalla aikajanan", "pad.userlist.entername": "Kirjoita nimesi", "pad.userlist.unnamed": "nimetön", "pad.userlist.guest": "Vieras", @@ -127,6 +133,7 @@ "pad.impexp.importing": "Tuodaan...", "pad.impexp.confirmimport": "Tiedoston tuonti korvaa kaiken muistiossa olevan tekstin. Haluatko varmasti jatkaa?", "pad.impexp.convertFailed": "TIedoston tuonti epäonnistui. Käytä eri tiedostomuotoa tai kopioi ja liitä käsin.", + "pad.impexp.padHasData": "Tiedostoa ei voitu lisätä lehtiöön, koska lehtiötä on jo muokattu – ole hyvä ja lisää tiedosto uuteen lehtiöön", "pad.impexp.uploadFailed": "Lähetys epäonnistui. Yritä uudelleen.", "pad.impexp.importfailed": "Tuonti epäonnistui", "pad.impexp.copypaste": "Kopioi ja liitä", diff --git a/sources/src/locales/fo.json b/sources/src/locales/fo.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/fr.json b/sources/src/locales/fr.json old mode 100755 new mode 100644 index ba289e3..2738235 --- a/sources/src/locales/fr.json +++ b/sources/src/locales/fr.json @@ -18,21 +18,24 @@ "Tux-tn", "Maxim21", "Boniface", - "Macofe" + "Macofe", + "Framafan", + "Fylip22", + "C13m3n7" ] }, "index.newPad": "Nouveau pad", "index.createOpenPad": "ou créer/ouvrir un pad intitulé :", - "pad.toolbar.bold.title": "Gras (Ctrl-B)", - "pad.toolbar.italic.title": "Italique (Ctrl-I)", - "pad.toolbar.underline.title": "Souligné (Ctrl-U)", + "pad.toolbar.bold.title": "Gras (Ctrl+B)", + "pad.toolbar.italic.title": "Italique (Ctrl+I)", + "pad.toolbar.underline.title": "Souligné (Ctrl+U)", "pad.toolbar.strikethrough.title": "Barré (Ctrl+5)", "pad.toolbar.ol.title": "Liste ordonnée (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Liste non ordonnée (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Indenter (TAB)", "pad.toolbar.unindent.title": "Désindenter (Maj+TAB)", - "pad.toolbar.undo.title": "Annuler (Ctrl-Z)", - "pad.toolbar.redo.title": "Rétablir (Ctrl-Y)", + "pad.toolbar.undo.title": "Annuler (Ctrl+Z)", + "pad.toolbar.redo.title": "Rétablir (Ctrl+Y)", "pad.toolbar.clearAuthorship.title": "Effacer les couleurs identifiant les auteurs (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Importer/Exporter de/vers un format de fichier différent", "pad.toolbar.timeslider.title": "Historique dynamique", @@ -45,11 +48,11 @@ "pad.loading": "Chargement…", "pad.noCookie": "Le cookie n’a 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.permissionDenied": "Il ne vous est pas permis d’accéder à ce pad", + "pad.permissionDenied": "Vous n'avez pas la permission d’accéder à ce pad", "pad.wrongPassword": "Votre mot de passe est incorrect", "pad.settings.padSettings": "Paramètres du pad", "pad.settings.myView": "Ma vue", - "pad.settings.stickychat": "Toujours afficher le chat", + "pad.settings.stickychat": "Toujours afficher le tchat", "pad.settings.chatandusers": "Afficher la discussion et les utilisateurs", "pad.settings.colorcheck": "Couleurs d’identification", "pad.settings.linenocheck": "Numéros de lignes", @@ -69,24 +72,24 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "Vous ne pouvez importer que des formats texte brut ou html. Pour des fonctionnalités d'importation plus évoluées, veuillez installer abiword.", + "pad.importExport.abiword.innerHTML": "Vous ne pouvez importer que des formats texte brut ou HTML. Pour des fonctionnalités d'importation plus évoluées, veuillez installer Abiword.", "pad.modals.connected": "Connecté.", "pad.modals.reconnecting": "Reconnexion vers votre pad...", "pad.modals.forcereconnect": "Forcer la reconnexion", "pad.modals.userdup": "Ouvert dans une autre fenêtre", - "pad.modals.userdup.explanation": "Ce pad semble être ouvert dans plus d'une fenêtre de navigateur sur cet ordinateur.", + "pad.modals.userdup.explanation": "Ce pad semble être ouvert dans plusieurs fenêtres sur cet ordinateur.", "pad.modals.userdup.advice": "Se reconnecter en utilisant cette fenêtre.", "pad.modals.unauth": "Non autorisé", "pad.modals.unauth.explanation": "Vos permissions ont été changées lors de l'affichage de cette page. Essayez de vous reconnecter.", "pad.modals.looping.explanation": "Nous éprouvons un problème de communication au serveur de synchronisation.", - "pad.modals.looping.cause": "Il est possible que votre connexion soit protégée par un pare-feu ou un serveur mandataire incompatible.", + "pad.modals.looping.cause": "Il est possible que vous soyez connecté avec un pare-feu ou un proxy incompatible.", "pad.modals.initsocketfail": "Le serveur est introuvable.", "pad.modals.initsocketfail.explanation": "Impossible de se connecter au serveur de synchronisation.", "pad.modals.initsocketfail.cause": "Ceci est probablement dû à un problème avec votre navigateur ou votre connexion internet.", "pad.modals.slowcommit.explanation": "Le serveur ne répond pas.", "pad.modals.slowcommit.cause": "Ce problème peut venir d'une mauvaise connectivité au réseau.", - "pad.modals.badChangeset.explanation": "Une modification que vous avez effectuée a été classée comme illégale par le serveur de synchronisation.", - "pad.modals.badChangeset.cause": "Cela peut être dû à une mauvaise configuration du serveur ou à un autre comportement inattendu. Veuillez contacter l’administrateur du service, si vous pensez que c’est une erreur. Essayez de vous reconnecter pour continuer à modifier.", + "pad.modals.badChangeset.explanation": "Une modification que vous avez effectuée a été classée comme impossible par le serveur de synchronisation.", + "pad.modals.badChangeset.cause": "Cela peut être dû à une mauvaise configuration du serveur ou à un autre comportement inattendu. Veuillez contacter l’administrateur du service si vous pensez que c’est une erreur. Essayez de vous reconnecter pour continuer à modifier.", "pad.modals.corruptPad.explanation": "Le pad auquel vous essayez d’accéder est corrompu.", "pad.modals.corruptPad.cause": "Cela peut être dû à une mauvaise configuration du serveur ou à un autre comportement inattendu. Veuillez contacter l’administrateur du service.", "pad.modals.deleted": "Supprimé.", @@ -99,7 +102,7 @@ "pad.share.link": "Lien", "pad.share.emebdcode": "Incorporer un lien", "pad.chat": "Chat", - "pad.chat.title": "Ouvrir le chat associé à ce pad.", + "pad.chat.title": "Ouvrir le chat de ce pad.", "pad.chat.loadmessages": "Charger davantage de messages", "timeslider.pageTitle": "Historique dynamique de {{appTitle}}", "timeslider.toolbar.returnbutton": "Retourner au pad", @@ -109,7 +112,10 @@ "timeslider.exportCurrent": "Exporter la version actuelle sous :", "timeslider.version": "Version {{version}}", "timeslider.saved": "Enregistré le {{day}} {{month}} {{year}}", - "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.playPause": "Lecture / Pause des contenus du pad", + "timeslider.backRevision": "Reculer d’une révision dans ce pad", + "timeslider.forwardRevision": "Avancer d’une révision dans ce pad", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{seconds}}:{{minutes}}:{{hours}}", "timeslider.month.january": "janvier", "timeslider.month.february": "février", "timeslider.month.march": "mars", @@ -124,18 +130,18 @@ "timeslider.month.december": "décembre", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: auteur anonyme, other: auteurs anonymes ]}", "pad.savedrevs.marked": "Cette révision est maintenant marquée comme révision enregistrée", - "pad.savedrevs.timeslider": "Vous pouvez voir les révisions enregistrées en visitant l’ascenseur temporel", + "pad.savedrevs.timeslider": "Vous pouvez voir les révisions enregistrées en ouvrant l'historique", "pad.userlist.entername": "Entrez votre nom", "pad.userlist.unnamed": "anonyme", "pad.userlist.guest": "Invité", "pad.userlist.deny": "Refuser", "pad.userlist.approve": "Approuver", - "pad.editbar.clearcolors": "Effacer les couleurs de paternité dans tout le document ?", + "pad.editbar.clearcolors": "Effacer les couleurs de paternité des auteurs dans tout le document ?", "pad.impexp.importbutton": "Importer maintenant", "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.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 n’avons pas pu importer ce fichier parce que ce bloc a déjà eu des modifications ; veuillez importer vers un nouveau bloc", + "pad.impexp.confirmimport": "Importer un fichier écrasera le contenu 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 manuellement un copier/coller du texte brut", + "pad.impexp.padHasData": "Nous n’avons pas pu importer ce fichier parce que ce pad a déjà eu des modifications ; veuillez donc en créer un nouveau", "pad.impexp.uploadFailed": "Le téléchargement a échoué, veuillez réessayer", "pad.impexp.importfailed": "Échec de l'importation", "pad.impexp.copypaste": "Veuillez copier/coller", diff --git a/sources/src/locales/gl.json b/sources/src/locales/gl.json old mode 100755 new mode 100644 index 381296a..ff1e930 --- a/sources/src/locales/gl.json +++ b/sources/src/locales/gl.json @@ -93,6 +93,9 @@ "timeslider.exportCurrent": "Exportar a versión actual en formato:", "timeslider.version": "Versión {{version}}", "timeslider.saved": "Gardado o {{day}} de {{month}} de {{year}}", + "timeslider.playPause": "Reproducir/pausar os contidos do pad", + "timeslider.backRevision": "Ir á revisión anterior neste pad", + "timeslider.forwardRevision": "Ir á revisión posterior neste pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "xaneiro", "timeslider.month.february": "febreiro", diff --git a/sources/src/locales/gu.json b/sources/src/locales/gu.json new file mode 100644 index 0000000..00a1a5f --- /dev/null +++ b/sources/src/locales/gu.json @@ -0,0 +1,56 @@ +{ + "@metadata": { + "authors": [ + "Bhatakati aatma", + "Harsh4101991", + "KartikMistry" + ] + }, + "index.newPad": "નવું પેડ", + "pad.toolbar.bold.title": "બોલ્ડ", + "pad.toolbar.settings.title": "ગોઠવણીઓ", + "pad.colorpicker.save": "સાચવો", + "pad.colorpicker.cancel": "રદ્દ કરો", + "pad.loading": "લાવે છે...", + "pad.noCookie": "કુકી મળી નહી. આપના બ્રાઉઝર સેટિંગમાં જઇ કુકી સક્રિય કરો!", + "pad.passwordRequired": "તમારે આ પેડના ઉપયોગ માટે ગુપ્તસંજ્ઞાની જરુર પડશે", + "pad.permissionDenied": "આ પેડના ઉપયોગની આપને પરવાનગી નથી", + "pad.wrongPassword": "આપની ગુપ્તસંજ્ઞા ખોટી છે", + "pad.settings.padSettings": "પેડ ગોઠવણીઓ", + "pad.settings.myView": "મારા મતે", + "pad.settings.fontType.normal": "સામાન્ય", + "pad.settings.fontType.monospaced": "મોનોસ્પેસ", + "pad.settings.language": "ભાષા:", + "pad.importExport.import_export": "આયાત/નિકાસ", + "pad.importExport.importSuccessful": "સફળ!", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "સાદું લખાણ", + "pad.importExport.exportword": "માઇક્રોસોફ્ટ વર્ડ", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (ઓપન ડોક્યુમેન્ટ ફોરમેટ)", + "pad.importExport.abiword.innerHTML": "આપ માત્ર સાદુ લખાણ અથવા HTML આયાત કરી શકો છો. વધુ અધ્યતન આયાત સુવિધા માટે abiword ઇન્સ્ટોલ કરો.", + "pad.modals.connected": "જોડાયેલું", + "pad.chat": "વાતચીત", + "pad.chat.title": "આ પેડ માટે વાતચીત ખોલો.", + "pad.chat.loadmessages": "વધુ સંદેશાઓ લાવો", + "timeslider.toolbar.authors": "લેખકો:", + "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": "ડિસેમ્બર", + "pad.userlist.entername": "તમારું નામ દાખલ કરો", + "pad.userlist.unnamed": "અનામી", + "pad.userlist.guest": "મહેમાન", + "pad.userlist.deny": "નકારો", + "pad.userlist.approve": "મંજૂર", + "pad.impexp.importbutton": "આયાત કરો", + "pad.impexp.importing": "આયાત કરે છે..." +} diff --git a/sources/src/locales/he.json b/sources/src/locales/he.json old mode 100755 new mode 100644 index 4222e15..3a6672b --- a/sources/src/locales/he.json +++ b/sources/src/locales/he.json @@ -95,6 +95,9 @@ "timeslider.exportCurrent": "ייצוא הגרסה הנוכחית בתור:", "timeslider.version": "גרסה {{version}}", "timeslider.saved": "נשמרה ב־{{day}} ב{{month}} {{year}}", + "timeslider.playPause": "לנגן / לעצור את תוכן הפנקס", + "timeslider.backRevision": "לחזור לגרסה של הפנקס הזה", + "timeslider.forwardRevision": "ללכת לגרסה חדשה יותר בפנקס הזה", "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "ינואר", "timeslider.month.february": "פברואר", diff --git a/sources/src/locales/hrx.json b/sources/src/locales/hrx.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/hsb.json b/sources/src/locales/hsb.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/hu.json b/sources/src/locales/hu.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/ia.json b/sources/src/locales/ia.json old mode 100755 new mode 100644 index e7f5cc2..64d3bf6 --- a/sources/src/locales/ia.json +++ b/sources/src/locales/ia.json @@ -33,6 +33,7 @@ "pad.settings.padSettings": "Configuration del pad", "pad.settings.myView": "Mi vista", "pad.settings.stickychat": "Chat sempre visibile", + "pad.settings.chatandusers": "Monstrar chat e usatores", "pad.settings.colorcheck": "Colores de autor", "pad.settings.linenocheck": "Numeros de linea", "pad.settings.rtlcheck": "Leger le contento de dextra a sinistra?", @@ -91,6 +92,9 @@ "timeslider.exportCurrent": "Exportar le version actual como:", "timeslider.version": "Version {{version}}", "timeslider.saved": "Salveguardate le {{day}} de {{month}} {{year}}", + "timeslider.playPause": "Reproducer/pausar le contento del pad", + "timeslider.backRevision": "Recular un version in iste pad", + "timeslider.forwardRevision": "Avantiar un version in iste pad", "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "januario", "timeslider.month.february": "februario", @@ -106,6 +110,7 @@ "timeslider.month.december": "decembre", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor, other: autores ]} sin nomine", "pad.savedrevs.marked": "Iste version es ora marcate como version salveguardate", + "pad.savedrevs.timeslider": "Tu pote vider versiones salveguardate con le chronologia glissante.", "pad.userlist.entername": "Entra tu nomine", "pad.userlist.unnamed": "sin nomine", "pad.userlist.guest": "Invitato", diff --git a/sources/src/locales/is.json b/sources/src/locales/is.json old mode 100755 new mode 100644 index dc3f3b3..61065cb --- a/sources/src/locales/is.json +++ b/sources/src/locales/is.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Sveinn í Felli" + "Sveinn í Felli", + "Sveinki" ] }, "index.newPad": "Ný skrifblokk", @@ -92,6 +93,9 @@ "timeslider.exportCurrent": "Flytja út núverandi útgáfu sem:", "timeslider.version": "Útgáfa {{version}}", "timeslider.saved": "Vistað {{day}}. {{month}}, {{year}}", + "timeslider.playPause": "Afspilun / Hlé á efni skrifblokkar", + "timeslider.backRevision": "Fara til baka um eina útgáfu í þessari skrifblokk", + "timeslider.forwardRevision": "Fara áfram um eina útgáfu í þessari skrifblokk", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janúar", "timeslider.month.february": "febrúar", diff --git a/sources/src/locales/it.json b/sources/src/locales/it.json old mode 100755 new mode 100644 index 082535f..aab7513 --- a/sources/src/locales/it.json +++ b/sources/src/locales/it.json @@ -53,7 +53,7 @@ "pad.importExport.export": "Esportare il Pad corrente come:", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", - "pad.importExport.exportplain": "Solo testo", + "pad.importExport.exportplain": "Testo normale", "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", @@ -93,10 +93,13 @@ "timeslider.toolbar.returnbutton": "Ritorna al Pad", "timeslider.toolbar.authors": "Autori:", "timeslider.toolbar.authorsList": "Nessun autore", - "timeslider.toolbar.exportlink.title": "esporta", + "timeslider.toolbar.exportlink.title": "Esporta", "timeslider.exportCurrent": "Esporta la versione corrente come:", "timeslider.version": "Versione {{version}}", "timeslider.saved": "Salvato {{day}} {{month}} {{year}}", + "timeslider.playPause": "Riproduzione / Pausa contenuti Pad", + "timeslider.backRevision": "Vai indietro di una versione in questo Pad", + "timeslider.forwardRevision": "Vai avanti di una versione in questo Pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "gennaio", "timeslider.month.february": "febbraio", diff --git a/sources/src/locales/ja.json b/sources/src/locales/ja.json old mode 100755 new mode 100644 index b6cc4e3..f223a8c --- a/sources/src/locales/ja.json +++ b/sources/src/locales/ja.json @@ -93,6 +93,9 @@ "timeslider.exportCurrent": "現在の版をエクスポートする形式:", "timeslider.version": "バージョン {{version}}", "timeslider.saved": "| {{year}}年{{month}}{{day}}日に保存", + "timeslider.playPause": "パッドの過去の内容を再生/一時停止", + "timeslider.backRevision": "前の版に戻る", + "timeslider.forwardRevision": "次の版に進む", "timeslider.dateformat": "{{year}}年{{month}}月{{day}}日 {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "1月", "timeslider.month.february": "2月", diff --git a/sources/src/locales/km.json b/sources/src/locales/km.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/ko.json b/sources/src/locales/ko.json old mode 100755 new mode 100644 index 4a71d8e..87f4eba --- a/sources/src/locales/ko.json +++ b/sources/src/locales/ko.json @@ -3,21 +3,23 @@ "authors": [ "Hym411", "아라", - "Revi" + "Revi", + "Kurousagi", + "SeoJeongHo" ] }, "index.newPad": "새 패드", "index.createOpenPad": "또는 다음 이름으로 패드 만들기/열기:", - "pad.toolbar.bold.title": "굵게 (Ctrl-B)", - "pad.toolbar.italic.title": "기울임 (Ctrl-I)", - "pad.toolbar.underline.title": "밑줄 (Ctrl-U)", + "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.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": "시간슬라이더", @@ -48,6 +50,7 @@ "pad.importExport.import": "텍스트 파일이나 문서 올리기", "pad.importExport.importSuccessful": "성공!", "pad.importExport.export": "다음으로 현재 패드 내보내기:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "일반 텍스트", "pad.importExport.exportword": "Microsoft Word", @@ -93,6 +96,9 @@ "timeslider.exportCurrent": "현재 버전으로 내보내기:", "timeslider.version": "버전 {{version}}", "timeslider.saved": "{{year}}년 {{month}} {{day}}일에 저장함", + "timeslider.playPause": "시작 / 패드 내용을 일시 중지", + "timeslider.backRevision": "패드의 수정판으로 다시 가기", + "timeslider.forwardRevision": "패드의 수정판을 앞으로 이동 시키기", "timeslider.dateformat": "{{year}}년/{{month}}/{{day}}일 {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "1월", "timeslider.month.february": "2월", @@ -108,6 +114,7 @@ "timeslider.month.december": "12월", "timeslider.unnamedauthors": "이름 없는 {[plural(num) one: 저자, other: 저자 ]} {{num}}명", "pad.savedrevs.marked": "이 판은 이제 저장한 판으로 표시합니다.", + "pad.savedrevs.timeslider": "당신은 타임슬라이더를 통해 저장된 버전을 볼 수 있습니다", "pad.userlist.entername": "이름을 입력하세요", "pad.userlist.unnamed": "이름없음", "pad.userlist.guest": "손님", @@ -118,6 +125,7 @@ "pad.impexp.importing": "가져오는 중...", "pad.impexp.confirmimport": "파일을 가져오면 패드의 현재 텍스트를 덮어쓰게 됩니다. 진행하시겠습니까?", "pad.impexp.convertFailed": "이 파일을 가져올 수 없습니다. 다른 문서 형식을 사용하거나 수동으로 복사하여 붙여넣으세요", + "pad.impexp.padHasData": "우리는 이 파일을 가져올수 없었습니다. 이 패드는 이미 수정되었으니, 새 패드를 가져와 주십시오", "pad.impexp.uploadFailed": "올리기를 실패했습니다. 다시 시도하세요", "pad.impexp.importfailed": "가져오기를 실패했습니다", "pad.impexp.copypaste": "복사하여 붙여넣으세요", diff --git a/sources/src/locales/ksh.json b/sources/src/locales/ksh.json old mode 100755 new mode 100644 index 5d5230d..f6d0c3b --- a/sources/src/locales/ksh.json +++ b/sources/src/locales/ksh.json @@ -5,7 +5,7 @@ ] }, "index.newPad": "Neu Pädd", - "index.createOpenPad": "udder maach e Pädd op med däm Naame:", + "index.createOpenPad": "udder maach e Pädd op med däm Nahme:", "pad.toolbar.bold.title": "Fättschreff (Strg-B)", "pad.toolbar.italic.title": "Scheive Schreff (Strg-I)", "pad.toolbar.underline.title": "Ongerstresche (Strg-U)", @@ -14,7 +14,7 @@ "pad.toolbar.ul.title": "Leß met Pongkte (Strg+Jruhß+L)", "pad.toolbar.indent.title": "Enjerök (TAB)", "pad.toolbar.unindent.title": "Ußjerök (Jruhßschreff+TAB)", - "pad.toolbar.undo.title": "Retuur nämme (Strg-Z)", + "pad.toolbar.undo.title": "Retuhr nämme (Strg+Z)", "pad.toolbar.redo.title": "Norrens (Strg-Y)", "pad.toolbar.clearAuthorship.title": "Donn dä Schriiver ier Färve fottnämme (Strg+Jruhß+C)", "pad.toolbar.import_export.title": "Ongerscheidlijje Dattei_Fommaate empotteere udder äxpotteere", @@ -24,7 +24,7 @@ "pad.toolbar.embed.title": "Donn dat Pädd öffentlesch maache un enbenge", "pad.toolbar.showusers.title": "Verbonge Metschriiver aanzeije", "pad.colorpicker.save": "Faßhallde", - "pad.colorpicker.cancel": "Ophüüre", + "pad.colorpicker.cancel": "Ophüre", "pad.loading": "Ben aam Lahde …", "pad.noCookie": "Dat Pläzje wood nit jevonge. Don dat en Dingem Brauser zohlohße!", "pad.passwordRequired": "Do bruchs e Paßwoot för heh dat Pädd.", @@ -34,11 +34,11 @@ "pad.settings.myView": "Aanseesch", "pad.settings.stickychat": "Donn der Klaaf emmer aanzeije", "pad.settings.chatandusers": "Dunn de Metmaacher un der Klaaf aanzeije", - "pad.settings.colorcheck": "Färve för de Schriiver", + "pad.settings.colorcheck": "Färve för de Schrihver", "pad.settings.linenocheck": "Nommere för de Reije", "pad.settings.rtlcheck": "Schreff vun Rääschß noh Lenks?", "pad.settings.fontType": "Zoot Schreff", - "pad.settings.fontType.normal": "Nomaal", + "pad.settings.fontType.normal": "Nommahl", "pad.settings.fontType.monospaced": "einheidlesch brejde Zeische", "pad.settings.globalView": "Et Ußsin för Alle", "pad.settings.language": "Schprohch:", @@ -54,7 +54,7 @@ "pad.importExport.exportopen": "ODF (Offe Dokemänte-Fommaat)", "pad.importExport.abiword.innerHTML": "Mer künne bloß eijfaache Täxte udder HTML_Fommaate empoteere. Opwändejere Müjjeleschkeite fö der Empoot jon och, doför bruch mer en Enschtallazjuhn met Abiword.", "pad.modals.connected": "Verbonge.", - "pad.modals.reconnecting": "Ben wider aam Verbenge …", + "pad.modals.reconnecting": "Ben wider aam Verbenge …", "pad.modals.forcereconnect": "Wider verbenge", "pad.modals.userdup": "En enem andere Finster en Ärbeid", "pad.modals.userdup.explanation": "Heh dat Padd schingk en mieh wi einem Finster vun enem Brauser op heh däm Rääschner op ze sin.", @@ -74,24 +74,27 @@ "pad.modals.corruptPad.cause": "Dat künnt sin wääje ener verkehte Enschtällong vum ẞööver udder öhnßjät, wat mer nit äwaadt hät. Donn Desch aan däm ßööver singe Bedriever wände.", "pad.modals.deleted": "Fottjeschmeße.", "pad.modals.deleted.explanation": "Dat Pädd es fottjeschmeße woode.", - "pad.modals.disconnected": "Do bes nit mieh verbonge.", + "pad.modals.disconnected": "Do bes nit mih verbonge.", "pad.modals.disconnected.explanation": "De Verbendong mem ẞööver es fott.", - "pad.modals.disconnected.cause": "Dä ẞööver künnt nit mieh loufe.\nSidd_esu jood und saad ons Bescheid, wann dadd esu bliiv.", + "pad.modals.disconnected.cause": "Dä ẞööver künnt nit mih loufe.\nSidd_esu jood und saad ons Bescheid, wann dadd esu bliiv.", "pad.share": "Maach heh dat Pädd öffentlesch", "pad.share.readonly": "Nor för ze Lässe", "pad.share.link": "Lengk", "pad.share.emebdcode": "Donn en URL enboue", "pad.chat": "Klaaf", "pad.chat.title": "Maach dä Klaaf för heh dat Pädd op", - "pad.chat.loadmessages": "Mieh Nohreeschte lahde...", + "pad.chat.loadmessages": "Mih Nohreeschte lahde …", "timeslider.pageTitle": "{{appTitle}} - Verjangeheid affschpelle", - "timeslider.toolbar.returnbutton": "Jangk retuur nohm Pädd", - "timeslider.toolbar.authors": "De Schriiver:", + "timeslider.toolbar.returnbutton": "Jangk retuhr nohm Pädd", + "timeslider.toolbar.authors": "De Schrihver:", "timeslider.toolbar.authorsList": "Kein Schriivere", "timeslider.toolbar.exportlink.title": "Äxpotteere", "timeslider.exportCurrent": "Donn de neußte Väsjohn äxpotteere alß:", "timeslider.version": "Väsjohn {{version}}", "timeslider.saved": "Faßjehallde aam {{day}}. {{month}} {{year}}", + "timeslider.playPause": "Donn der Enhalld vum Päd afschpelle udder aanhallde", + "timeslider.backRevision": "Jangk ein Väsjohn retuhr en dämm Pahdt", + "timeslider.forwardRevision": "Jangg en Väsjohn vörwääz en heh däm Pahdt.", "timeslider.dateformat": "aam {{day}}. {{month}} {{year}} öm {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Jannewaa", "timeslider.month.february": "Fääbrowaa", @@ -115,7 +118,7 @@ "pad.userlist.approve": "Johdheiße", "pad.editbar.clearcolors": "Sulle mer de Färve för de Schriiver uss_em janze Täx fott maache?", "pad.impexp.importbutton": "Jäz empoteere", - "pad.impexp.importing": "Ben aam Empotteere …", + "pad.impexp.importing": "Ben aam Empottehre …", "pad.impexp.confirmimport": "En Dattei ze empotteere määt der janze Täx em Pädd fott. Wells De dat verfaftesch hann?", "pad.impexp.convertFailed": "Mer kunnte di Dattei nit empoteere. Nemm en ander Dattei-Fommaat udder donn dä Täx vun Hand kopeere un ennföhje.", "pad.impexp.padHasData": "Mer kunnte di Dattei nit empottehre weil et Pädd alt Veränderonge metjemaht hät. Donn se en e neu Pädd empottehre.", diff --git a/sources/src/locales/ku-latn.json b/sources/src/locales/ku-latn.json new file mode 100644 index 0000000..2aa4fda --- /dev/null +++ b/sources/src/locales/ku-latn.json @@ -0,0 +1,79 @@ +{ + "@metadata": { + "authors": [ + "Bikarhêner", + "Dilyaramude", + "George Animal", + "Gomada", + "Mehk63" + ] + }, + "index.newPad": "Bloknota nû", + "index.createOpenPad": "Yan Padekê li gel navê biafirîne/veke:", + "pad.toolbar.bold.title": "Stûr (Ctrl-B)", + "pad.toolbar.italic.title": "Xwar (Ctrl-I)", + "pad.toolbar.underline.title": "Binxet (Ctrl-U)", + "pad.toolbar.strikethrough.title": "Serxêzkirî (Ctrl+5)", + "pad.toolbar.ol.title": "Lîsteya rêzkirî (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Lîsteya tevlîhev (Ctrl+Shift+L)", + "pad.toolbar.undo.title": "Vegerîne (Ctrl-Z)", + "pad.toolbar.redo.title": "Dîsa bike (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "Rengên nivîskariyê jê bibe (Ctrl+Shift+C)", + "pad.toolbar.savedRevision.title": "Sererastkirinê tomar bike", + "pad.toolbar.settings.title": "Eyar", + "pad.colorpicker.save": "Tomar bike", + "pad.colorpicker.cancel": "Beta bike", + "pad.loading": "Tê barkirin...", + "pad.settings.padSettings": "Eyarên bloknotê", + "pad.settings.myView": "Dîmena min", + "pad.settings.stickychat": "Di ekranê de hertim çet bike", + "pad.settings.chatandusers": "Çeta û Bikarhênera Nîşan bide", + "pad.settings.colorcheck": "Rengên nivîskarîye", + "pad.settings.linenocheck": "Hejmarên rêze", + "pad.settings.rtlcheck": "Bila naverok ji raste ber bi çepe be xwendin?", + "pad.settings.fontType": "Tîpa nivîsê:", + "pad.settings.language": "Ziman:", + "pad.importExport.importSuccessful": "Biserketî!", + "pad.importExport.exportetherpad": "Etherpad", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.modals.connected": "Hate girêdan.", + "pad.modals.reconnecting": "Ji bloknota te re dîsa tê girêdan...", + "pad.modals.userdup": "Di pencereyek din de vebû", + "pad.modals.userdup.advice": "Ji bo di vê pencereye de bikarbînîy dîsa giredanek çeke.", + "pad.modals.unauth": "Desthilatdar nîne", + "pad.modals.deleted": "Hate jêbirin.", + "pad.modals.deleted.explanation": "Ev bloknot hatiye rakirin.", + "pad.modals.disconnected": "Pêwendîya te qut bû.", + "pad.modals.disconnected.explanation": "Pêwendîya rajeker qut bû", + "pad.share": "Vê bloknotê parve bike", + "pad.share.link": "Girêdan", + "pad.chat": "Çet", + "pad.chat.title": "Ji bo vê bloknotê çet veke.", + "pad.chat.loadmessages": "Peyamên bêhtir barbike", + "timeslider.toolbar.returnbutton": "Vegere bloknotê", + "timeslider.toolbar.authors": "Nivîser:", + "timeslider.toolbar.authorsList": "Nivîser Tine", + "timeslider.version": "Guhertoya {{version}}", + "timeslider.saved": "Di dîroka {{day}} {{month}} {{year}} de hate tomarkirin", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}.{{minutes}}.{{seconds}}", + "timeslider.month.january": "rêbendan", + "timeslider.month.february": "reşemî", + "timeslider.month.march": "adar", + "timeslider.month.april": "avrêl", + "timeslider.month.may": "gulan", + "timeslider.month.june": "pûşper", + "timeslider.month.july": "tîrmeh", + "timeslider.month.august": "gelawêj", + "timeslider.month.september": "rezber", + "timeslider.month.october": "kewçêr", + "timeslider.month.november": "Mijdar", + "timeslider.month.december": "berfanbar", + "pad.userlist.entername": "Navê xwe têkeve", + "pad.userlist.unnamed": "nenavkirî", + "pad.userlist.guest": "Mêvan", + "pad.userlist.deny": "Red bike", + "pad.userlist.approve": "Bipejirîne", + "pad.impexp.copypaste": "Ji kerema xwe re jê bigre û pê ve deyne (Ctrl+c, Ctrl+v)" +} diff --git a/sources/src/locales/lb.json b/sources/src/locales/lb.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/lki.json b/sources/src/locales/lki.json old mode 100755 new mode 100644 index b743629..c8b8ecc --- a/sources/src/locales/lki.json +++ b/sources/src/locales/lki.json @@ -1,57 +1,103 @@ { "@metadata": { "authors": [ - "Hosseinblue" + "Hosseinblue", + "Arash71", + "Lakzon" ] }, "index.newPad": "تازۀpad", - "index.createOpenPad": ":ئۀ وسیلۀ نؤمpadسازین/وآز کردن یه گلۀ", + "index.createOpenPad": ":وە نۆم Pad یا سازین/واز کردن یإگلە", "pad.toolbar.bold.title": "پررنگ-تئژ(Ctrl-B)", "pad.toolbar.italic.title": "ایتالیک (Ctrl-I)", "pad.toolbar.underline.title": "ژئر خطی(Ctrl-U)", - "pad.toolbar.strikethrough.title": "خط هوواردئ", - "pad.toolbar.ol.title": "فئرست رزگی-مرتب", - "pad.toolbar.ul.title": "نۀچنریا-نامرتب", - "pad.toolbar.indent.title": "تورفتگی-ئه نؤم چئن (TAB)", + "pad.toolbar.strikethrough.title": "(Ctrl+5)خط هوواردێ", + "pad.toolbar.ol.title": " (Ctrl+5)لیست مرتب بی", + "pad.toolbar.ul.title": "(Ctrl+5)لیست شؤیا/نامرتب", + "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": "پاکاکردن رنگۀل تالیفی", - "pad.toolbar.import_export.title": "دربردن/ئه نؤم ئآووردن ئۀ/ئِِژ فرمتۀل گوناگون", + "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.savedRevision.title": "نسخە بِیل(ذخیره کە)", "pad.toolbar.settings.title": "تنظیمۀل", - "pad.toolbar.embed.title": "بۀشاکردن ؤ نیائن(اشتراک ونشاندن)ئۀ نؤم سایت", - "pad.toolbar.showusers.title": "نیشان دائن کاربر ئۀ نؤم ئئ\npad", - "pad.colorpicker.save": "ذخیرۀ", - "pad.colorpicker.cancel": "ئآهووسانن-لغو", + "pad.toolbar.embed.title": "بەشآکردن ؤ نیائن(اشتراک ونشاندن)وە نۆم سایت", + "pad.toolbar.showusers.title": "نیشان دائن کاربەر أنۆم اێ\nیادداشتە", + "pad.colorpicker.save": "هیشتن(ذخیره)", + "pad.colorpicker.cancel": "ئآهووسانن/لغو", "pad.loading": "...(loading)بارنیائن", + "pad.noCookie": "کوکی یافت نشد. لطفاً اجازهٔ اجرای کوکی در مروگرتان را بدهید!", "pad.passwordRequired": "هؤمۀ رمزتؤنه گرۀکۀ-لازمۀ ئۀرا اتصال ئئ \npad", + "pad.permissionDenied": "شما اجازه‌ی دسترسی به این دفترچه یادداشت را ندارید", "pad.wrongPassword": "رمزۀ تؤن دؤرس نیۀ", "pad.settings.padSettings": "pad تنظیمۀل", "pad.settings.myView": "نمایش-سئرکردن مه", - "pad.settings.stickychat": "چت همؤیشۀ ئۀ ولگۀ نمایش بوو", + "pad.settings.stickychat": "گەپ(قسە)هەمۆیشە وە وەڵگە نمایش بوو", + "pad.settings.chatandusers": "نمایش چت و کاربران", "pad.settings.colorcheck": "رنگۀل تالیفی", "pad.settings.linenocheck": "شؤمارۀل خطی", + "pad.settings.rtlcheck": "خواندن نۆم جِک(محتوا)أژ لآ ڕاس بە چەپ؟", "pad.settings.fontType": ":شئؤۀ فؤنت", "pad.settings.fontType.normal": "عادی", "pad.settings.fontType.monospaced": "پئنی-پهنا", - "pad.settings.globalView": "نمایش جئ هانی", + "pad.settings.globalView": "نمایش جەهانی", "pad.settings.language": ":زوون", - "pad.importExport.import_export": "در بردن/ئه نؤم ئآووردن", + "pad.importExport.import_export": "دەر بردن/إنۆم آووِردن", "pad.importExport.import": "بارنیائن هر جور نوشته یا سندئ", "pad.importExport.importSuccessful": "! موفق بی-پیرووز بی", + "pad.importExport.export": ":برون‌ریزی این دفترچه یادداشت با قالب", + "pad.importExport.exportetherpad": "اترپد", "pad.importExport.exporthtml": "html", "pad.importExport.exportplain": "متن پئن-درئژ", "pad.importExport.exportword": "مایکروسافت وورد", "pad.importExport.exportpdf": "پی دی اف", + "pad.importExport.exportopen": " (قالب سند باز)ODF", + "pad.importExport.abiword.innerHTML": "شما تنها می‌توانید از قالب متن ساده یا اچ‌تی‌ام‌ال درون‌ریزی کنید. برای بیشتر شدن ویژگی‌های درون‌ریزی پیشرفته AbiWord را نصب کنید.", "pad.modals.connected": "وصل بیۀ", + "pad.modals.reconnecting": "..در حال اتصال دوباره به دفترچه یادداشت شما", + "pad.modals.forcereconnect": "واداشتن به اتصال دوباره", + "pad.modals.userdup": "ئة پنجرإ تر واز بو", + "pad.modals.userdup.explanation": "گمان می‌رود این دفترچه یادداشت در بیش از یک پنجره‌ی مرورگر باز شده‌است.", + "pad.modals.userdup.advice": "برای استفاده از این پنجره دوباره وصل شوید.", + "pad.modals.unauth": "مجاز نیة", + "pad.modals.unauth.explanation": "دسترسی شما در حین مشاهده‌ی این برگه تغییر یافته‌است. دوباره متصل شوید.", + "pad.modals.looping.explanation": "مشکلاتی ارتباطی با سرور همگام‌سازی وجود دارد.", + "pad.modals.looping.cause": "شاید شما از طریق یک فایروال یا پروکسی ناسازگار متصل شده‌اید.", + "pad.modals.initsocketfail": "سرور در دسترس نیست.", + "pad.modals.initsocketfail.explanation": ".نمی‌توان به سرور همگام سازی وصل شد", + "pad.modals.initsocketfail.cause": ".شاید این به خاطر مشکلی در مرورگر یا اتصال اینترنتی شما باشد", + "pad.modals.slowcommit.explanation": ".سرور پاسخ نمی‌دهد", + "pad.modals.slowcommit.cause": ".این می‌تواند به خاطر مشکلاتی در اتصال به شبکه باشد", + "pad.modals.badChangeset.explanation": "ویرایشی که شما انجام داده‌اید توسط سرور همگام‌سازی نادرست طیقه‌بندی شده است.", + "pad.modals.badChangeset.cause": "این می‌تواند به دلیل پیکربندی اشتباه یا سایر رفتارهای غیرمنتظره باشد. اگر فکر می‌کنید این یک خطا است لطفاً با مدیر خدمت تماس بگیرید. برای ادامهٔ ویرایش سعی کنید که دوباره متصل شوید.", + "pad.modals.corruptPad.explanation": ".پدی که شما سعی دارید دسترسی پیدا کنید خراب است", + "pad.modals.corruptPad.cause": "این احتمالاً به دلیل تنظیمات اشتباه کارساز یا سایر رفتارهای غیرمنتظره است. لطفاً با مدیر خدمت تماس حاصل کنید.", "pad.modals.deleted": "پاک بیا-حذف بی", - "pad.share.readonly": "تنیا بخؤۀن", + "pad.modals.deleted.explanation": "این دفترچه یادداشت پاک شده‌است.", + "pad.modals.disconnected": "اتصال شما قطع شده‌است.", + "pad.modals.disconnected.explanation": ".اتصال وة سرور قطع بیة", + "pad.modals.disconnected.cause": "ممکن است سرور در دسترس نباشد. اگر این مشکل باز هم رخ داد مدیر حدمت را .آگاه کنید", + "pad.share": "به اشتراک‌گذاری این دفترچه یادداشت", + "pad.share.readonly": "تەنیا(فقط)خووەنن", "pad.share.link": "لینک", + "pad.share.emebdcode": "جاسازی نشانی", "pad.chat": "گپ", + "pad.chat.title": "بازکردن گفتگو برای این دفترچه یادداشت", "pad.chat.loadmessages": "پئامۀلئ تر باره سۀر", + "timeslider.pageTitle": "لغزندهٔ زمان {{appTitle}}", + "timeslider.toolbar.returnbutton": "بازگشت به دفترچه یادداشت", + "timeslider.toolbar.authors": "نویسندگان:", + "timeslider.toolbar.authorsList": "بدون نویسنده", "timeslider.toolbar.exportlink.title": "در بِردن", + "timeslider.exportCurrent": "برون‌ریزی نگارش کنونی به عنوان:", + "timeslider.version": "نگارش {{version}}", + "timeslider.saved": "{{month}} {{day}}، {{year}} ذخیره شد", + "timeslider.playPause": "اجرای مجدد/متوقف کردن پخش", + "timeslider.backRevision": "رفتن به نسخهٔ پیشین در این دفترچه", + "timeslider.forwardRevision": "رفتن به نسخهٔ بعدی در این دفترچه", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "دی)نورووژ)", "timeslider.month.february": "(خاکه لێه(بهمن", "timeslider.month.march": "(مانگ ئێد(اسفندگان", @@ -64,12 +110,22 @@ "timeslider.month.october": "(ماڵه ژێر دوماێنه(مهر", "timeslider.month.november": "آبان)تویل ته کن)", "timeslider.month.december": "(مانگه سێه(آذر", - "pad.userlist.entername": "نؤم تؤن وارد کۀن", - "pad.userlist.unnamed": "بئ نؤم", + "timeslider.unnamedauthors": " نویسندة بی‌ نام{{num}}", + "pad.savedrevs.marked": "این بازنویسی هم اکنون به عنوان ذخیره شده علامت‌گذاری شد", + "pad.savedrevs.timeslider": "شما می‌توانید نسخه‌های ذخیره شده را با دیدن نوار زمان ببنید", + "pad.userlist.entername": "نۆم ووژت وارد کە", + "pad.userlist.unnamed": "بێ نۆم", "pad.userlist.guest": "مئمان", "pad.userlist.deny": "رد کردن", "pad.userlist.approve": "راووا داشتن-تصویب کردن", - "pad.impexp.importbutton": "ایسۀ وارد کۀ", + "pad.editbar.clearcolors": "رنگ نویسندگی از همه‌ی سند پاک شود؟", + "pad.impexp.importbutton": "ایسگە وارد کە", "pad.impexp.importing": "...وارد مۀهه", - "pad.impexp.importfailed": "وارد نؤنئ-خطای واردکردن" + "pad.impexp.confirmimport": "با درون‌ریزی یک پرونده نوشتهٔ کنونی دفترچه پاک می‌شود. آیا می‌خواهید ادامه دهید؟", + "pad.impexp.convertFailed": "ما نمی‌توانیم این پرونده را درون‌ریزی کنیم. خواهشمندیم قالب دیگری برای سندتان انتخاب کرده یا بصورت دستی آنرا کپی کنید", + "pad.impexp.padHasData": "امکان درون‌ریز این پرونده نیست زیرا این پد تغییر کرده‌است. لطفاً در پد جدید درون‌ریزی کنید.", + "pad.impexp.uploadFailed": "آپلود انجام نشد، دوباره تلاش کنید", + "pad.impexp.importfailed": "وارد نؤنئ-خطای واردکردن", + "pad.impexp.copypaste": "کپی پیست کنید", + "pad.impexp.exportdisabled": "برون‌ریزی با قالب {{type}} از کار افتاده است. برای جزئیات بیشتر با مدیر سیستمتان تماس بگیرید." } diff --git a/sources/src/locales/lrc.json b/sources/src/locales/lrc.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/lt.json b/sources/src/locales/lt.json old mode 100755 new mode 100644 index 7b4e148..524146d --- a/sources/src/locales/lt.json +++ b/sources/src/locales/lt.json @@ -2,20 +2,40 @@ "@metadata": { "authors": [ "Eitvys200", - "Mantak111" + "Mantak111", + "I-svetaines" ] }, "pad.toolbar.bold.title": "Paryškintasis (Ctrl-B)", "pad.toolbar.italic.title": "Pasvirasis (Ctrl-I)", "pad.toolbar.underline.title": "Pabraukimas (Ctrl-U)", + "pad.toolbar.strikethrough.title": "Perbrauktasis (Ctrl+5)", + "pad.toolbar.ol.title": "Numeruotas sąrašas (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Nenumeruotas Sąrašas (Ctrl+Shift+L)", + "pad.toolbar.indent.title": "Įtrauka", "pad.toolbar.undo.title": "Anuliuoti (Ctrl-Z)", "pad.toolbar.redo.title": "Perdaryti (Ctrl-Y)", "pad.toolbar.clearAuthorship.title": "Tvarkyti autorystės spalvas", + "pad.toolbar.import_export.title": "Importuoti/Eksportuoti iš/į įvairius failų formatus", + "pad.toolbar.timeslider.title": "Laiko slankiklis", + "pad.toolbar.savedRevision.title": "Išsaugoti peržiūrą", "pad.toolbar.settings.title": "Nustatymai", + "pad.toolbar.embed.title": "Dalintis ir įterpti šį bloknotą", + "pad.toolbar.showusers.title": "Rodyti naudotojus šiame bloknote", "pad.colorpicker.save": "Išsaugoti", "pad.colorpicker.cancel": "Atšaukti", "pad.loading": "Įkraunama...", + "pad.noCookie": "Slapuko nepavyko rasti. Prašome leisti slapukus interneto naršyklėje!", + "pad.passwordRequired": "Jums reikia slaptažodžio kad galėtumėte matyti šį bloknotą", + "pad.permissionDenied": "Jūs neturite leidimo patekti į šį bloknotą", + "pad.wrongPassword": "Jūsų slaptažodis neteisingas", + "pad.settings.padSettings": "Bloknoto nustatymai", "pad.settings.myView": "Mano Vaizdas", + "pad.settings.stickychat": "Pokalbiai visada viršuje", + "pad.settings.chatandusers": "Rodyti Pokalbius ir Vartotojus", + "pad.settings.colorcheck": "Autorystės spalvos", + "pad.settings.linenocheck": "Eilučių numeriai", + "pad.settings.rtlcheck": "Skaityti turinį iš dešinės į kairę?", "pad.settings.fontType": "Šrifto tipas:", "pad.settings.fontType.normal": "Normalus", "pad.settings.globalView": "Bendras Vaizdas", @@ -23,13 +43,21 @@ "pad.importExport.import_export": "Importuoti/Eksportuoti", "pad.importExport.import": "Įkelkite bet kokį tekstinį failą arba dokumentą", "pad.importExport.importSuccessful": "Pavyko!", + "pad.importExport.export": "Eksportuoti dabartinį bloknotą kaip:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Paprastasis tekstas", "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Atvirasis dokumento formatas)", "pad.modals.connected": "Prisijungta.", + "pad.modals.reconnecting": "Iš naujo prisijungiama prie Jūsų bloknoto", + "pad.modals.forcereconnect": "Priversti prisijungti iš naujo", + "pad.modals.userdup": "Atidaryta kitame lange", + "pad.modals.userdup.explanation": "Šis bloknotas, atrodo yra atidarytas daugiau nei viename šio kompiuterio naršyklės lange.", "pad.modals.unauth": "Neleidžiama", + "pad.modals.unauth.explanation": "Jūsų teiisės pasikeitė kol žiūrėjote šį puslapį. Bandykite prisijungti iš naujo.", + "pad.modals.looping.explanation": "Yra komunikacijos problemų su sinchronizacijos serveriu.", "pad.modals.initsocketfail": "Serveris yra nepasiekiamas.", "pad.modals.slowcommit.explanation": "Serveris neatsako.", "pad.modals.deleted": "Ištrintas.", diff --git a/sources/src/locales/lv.json b/sources/src/locales/lv.json old mode 100755 new mode 100644 index ee402d3..b860055 --- a/sources/src/locales/lv.json +++ b/sources/src/locales/lv.json @@ -3,7 +3,8 @@ "authors": [ "Admresdeserv.", "Jmg.cmdi", - "Papuass" + "Papuass", + "Silraks" ] }, "pad.toolbar.bold.title": "Treknrakstā (CTRL + B)", @@ -60,6 +61,7 @@ "pad.share": "Koplietot šo pad", "pad.share.readonly": "Tikai lasāms", "pad.share.link": "Saite", + "pad.chat": "Čats", "timeslider.toolbar.authors": "Autori:", "timeslider.toolbar.authorsList": "Nav autoru", "timeslider.toolbar.exportlink.title": "Eksportēt", @@ -80,5 +82,6 @@ "pad.userlist.guest": "Viesis", "pad.impexp.importbutton": "Importēt tūlīt", "pad.impexp.importing": "Importē...", + "pad.impexp.uploadFailed": "Augšupielāde neizdevās, lūdzu, mēģiniet vēlreiz", "pad.impexp.importfailed": "Imports neizdevās" } diff --git a/sources/src/locales/map-bms.json b/sources/src/locales/map-bms.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/mk.json b/sources/src/locales/mk.json old mode 100755 new mode 100644 index a924875..e00d47d --- a/sources/src/locales/mk.json +++ b/sources/src/locales/mk.json @@ -93,6 +93,9 @@ "timeslider.exportCurrent": "Извези ја тековната верзија како:", "timeslider.version": "Верзија {{version}}", "timeslider.saved": "Зачувано на {{day}} {{month}} {{year}} г.", + "timeslider.playPause": "Пушти/запри содржина на тетратката", + "timeslider.backRevision": "Назад за една преработка на тетратката", + "timeslider.forwardRevision": "Напред за една преработка на тетратката", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "јануари", "timeslider.month.february": "февруари", diff --git a/sources/src/locales/ml.json b/sources/src/locales/ml.json old mode 100755 new mode 100644 index 680df0c..371e1ce --- a/sources/src/locales/ml.json +++ b/sources/src/locales/ml.json @@ -5,7 +5,8 @@ "Clockery", "Hrishikesh.kb", "Praveenp", - "Santhosh.thottingal" + "Santhosh.thottingal", + "Nesi" ] }, "index.newPad": "പുതിയ പാഡ്", @@ -30,12 +31,14 @@ "pad.colorpicker.save": "സേവ് ചെയ്യുക", "pad.colorpicker.cancel": "റദ്ദാക്കുക", "pad.loading": "ശേഖരിക്കുന്നു...", + "pad.noCookie": "കുക്കി കണ്ടെത്താനായില്ല. ദയവായി താങ്കളുടെ ബ്രൗസറിൽ കുക്കികൾ അനുവദിക്കുക!", "pad.passwordRequired": "ഈ പാഡ് ഉപയോഗിക്കുന്നതിനായി ഒരു രഹസ്യവാക്ക് നൽകേണ്ടതാണ്", "pad.permissionDenied": "ഈ പാഡ് കാണുവാൻ താങ്കൾക്ക് അനുമതിയില്ല", "pad.wrongPassword": "താങ്കൾ നല്കിയ രഹസ്യവാക്ക് തെറ്റായിരുന്നു", "pad.settings.padSettings": "പാഡ് സജ്ജീകരണങ്ങൾ", "pad.settings.myView": "എന്റെ കാഴ്ച", "pad.settings.stickychat": "തത്സമയസംവാദം എപ്പോഴും സ്ക്രീനിൽ കാണിക്കുക", + "pad.settings.chatandusers": "ഉപയോക്താക്കളേയും ചാറ്റും കാണിക്കുക", "pad.settings.colorcheck": "എഴുത്തുകാർക്കുള്ള നിറങ്ങൾ", "pad.settings.linenocheck": "വരികളുടെ ക്രമസംഖ്യ", "pad.settings.rtlcheck": "ഉള്ളടക്കം വലത്തുനിന്ന് ഇടത്തോട്ടാണോ വായിക്കേണ്ടത്?", @@ -48,6 +51,7 @@ "pad.importExport.import": "എന്തെങ്കിലും എഴുത്തു പ്രമാണമോ രേഖയോ അപ്‌ലോഡ് ചെയ്യുക", "pad.importExport.importSuccessful": "വിജയകരം!", "pad.importExport.export": "ഇപ്പോഴത്തെ പാഡ് ഇങ്ങനെ കയറ്റുമതി ചെയ്യുക:", + "pad.importExport.exportetherpad": "ഈതർപാഡ്", "pad.importExport.exporthtml": "എച്ച്.റ്റി.എം.എൽ.", "pad.importExport.exportplain": "വെറും എഴുത്ത്", "pad.importExport.exportword": "മൈക്രോസോഫ്റ്റ് വേഡ്", @@ -93,6 +97,8 @@ "timeslider.exportCurrent": "ഈ പതിപ്പ് ഇങ്ങനെ എടുക്കുക:", "timeslider.version": "പതിപ്പ് {{version}}", "timeslider.saved": "സേവ് ചെയ്തത് {{month}} {{day}}, {{year}}", + "timeslider.backRevision": "ഈ പാഡിലെ ഒരു നാൾപ്പതിപ്പിലേക്ക് മടങ്ങുക", + "timeslider.forwardRevision": "ഈ പാഡിലെ അടുത്ത മാറ്റത്തിലേക്ക് പോവുക", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "ജനുവരി", "timeslider.month.february": "ഫെബ്രുവരി", @@ -108,6 +114,7 @@ "timeslider.month.december": "ഡിസംബർ", "timeslider.unnamedauthors": "{{num}} പേരില്ലാത്ത {[plural(num) one: രചയിതാവ്, other: രചയിതാക്കൾ }}", "pad.savedrevs.marked": "ഈ നാൾപ്പതിപ്പ് സേവ് ചെയ്തിട്ടുള്ള നാൾപ്പതിപ്പായി അടയാളപ്പെടുത്തിയിരിക്കുന്നു", + "pad.savedrevs.timeslider": "സേവ് ചെയ്ത മറ്റു നാൾപ്പതിപ്പുകൾ സമയസൂചികയിൽ കാണാവുന്നതാണ്", "pad.userlist.entername": "താങ്കളുടെ പേര് നൽകുക", "pad.userlist.unnamed": "പേരില്ലാത്തവ", "pad.userlist.guest": "അതിഥി", @@ -118,6 +125,7 @@ "pad.impexp.importing": "ഇറക്കുമതി ചെയ്യുന്നു...", "pad.impexp.confirmimport": "ഒരു പ്രമാണം ഇറക്കുമതി ചെയ്യുന്നത് നിലവിലുള്ള എഴുത്തുകൾ നഷ്ടപ്പെടാനിടയാക്കും, തുടരണമെന്ന് ഉറപ്പാണോ?", "pad.impexp.convertFailed": "ഈ പ്രമാണം ഇറക്കുമതി ചെയ്യാൻ സാധിച്ചില്ല. ദയവായി മറ്റൊരു ഡോക്യുമെന്റ് ഫോർമാറ്റ് ഉപയോഗിക്കുകയോ, സ്വന്തമായി പകർത്തി ചേർക്കുകയോ ചെയ്യുക", + "pad.impexp.padHasData": "ഈ പാഡിൽ ഇതിനകം തന്നെ മാറ്റങ്ങൾ നടന്നിട്ടുള്ളതിനാൽ, നൽകിയ പ്രമാണം ഇതിലേക്ക് ചേർക്കാൻ സാധിച്ചില്ല. ദയവായി പുതിയ ഒരു പാഡിലേക്ക് ചേർക്കുക", "pad.impexp.uploadFailed": "അപ്‌‌ലോഡ് പരാജയപ്പെട്ടു. ദയവായി വീണ്ടും ശ്രമിക്കുക", "pad.impexp.importfailed": "ഇറക്കുമതി പരാജയപ്പെട്ടു", "pad.impexp.copypaste": "ദയവായി പകർത്തി ചേർക്കുക", diff --git a/sources/src/locales/mn.json b/sources/src/locales/mn.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/mr.json b/sources/src/locales/mr.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/ms.json b/sources/src/locales/ms.json old mode 100755 new mode 100644 index d099de0..93b421f --- a/sources/src/locales/ms.json +++ b/sources/src/locales/ms.json @@ -33,6 +33,7 @@ "pad.settings.padSettings": "Tetapan Pad", "pad.settings.myView": "Paparan Saya", "pad.settings.stickychat": "Sentiasa bersembang pada skrin", + "pad.settings.chatandusers": "Paparkan Ruang Sembang dan Pengguna-Pengguna", "pad.settings.colorcheck": "Warna pengarang", "pad.settings.linenocheck": "Nombor baris", "pad.settings.rtlcheck": "Membaca dari kanan ke kiri?", @@ -91,6 +92,9 @@ "timeslider.exportCurrent": "Eksport versi semasa sebagai:", "timeslider.version": "Versi {{version}}", "timeslider.saved": "Disimpan pada {{day}} {{month}} {{year}}", + "timeslider.playPause": "Mainkan / Pausekan Kandungan Pad", + "timeslider.backRevision": "Undur satu semakan di Pad ini", + "timeslider.forwardRevision": "Maju satu semakan dalam Pad ini", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Januari", "timeslider.month.february": "Februari", @@ -106,6 +110,7 @@ "timeslider.month.december": "Disember", "timeslider.unnamedauthors": "{{num}} orang {[plural(num) other: pengarang]} awanama", "pad.savedrevs.marked": "Semakan ini telah ditandai sebagai semakan tersimpan", + "pad.savedrevs.timeslider": "Anda boleh melihat semakan yang tersimpan dengan melawat gelangsar masa", "pad.userlist.entername": "Taipkan nama anda", "pad.userlist.unnamed": "tanpa nama", "pad.userlist.guest": "Tetamu", diff --git a/sources/src/locales/nap.json b/sources/src/locales/nap.json old mode 100755 new mode 100644 index 6cd1651..c31d525 --- a/sources/src/locales/nap.json +++ b/sources/src/locales/nap.json @@ -5,8 +5,8 @@ "C.R." ] }, - "index.newPad": "Novo Pad", - "index.createOpenPad": "o crià o apre nu Pad cu 'o nomme:", + "index.newPad": "Nuovo Pad", + "index.createOpenPad": "o crià o arape nu Pad cu 'o nomme:", "pad.toolbar.bold.title": "Grassetto (Ctrl-B)", "pad.toolbar.italic.title": "Cursivo (Ctrl-I)", "pad.toolbar.underline.title": "Sottolineato (Ctrl-U)", diff --git a/sources/src/locales/nb.json b/sources/src/locales/nb.json old mode 100755 new mode 100644 index a1b3a5c..5c46b7d --- a/sources/src/locales/nb.json +++ b/sources/src/locales/nb.json @@ -2,37 +2,41 @@ "@metadata": { "authors": [ "Laaknor", - "Cocu" + "Cocu", + "Chameleon222", + "SuperPotato" ] }, "index.newPad": "Ny Pad", "index.createOpenPad": "eller opprette/åpne en ny Pad med dette navnet:", - "pad.toolbar.bold.title": "Fet (Ctrl-B)", - "pad.toolbar.italic.title": "Kursiv (Ctrl-I)", - "pad.toolbar.underline.title": "Understreking (Ctrl-U)", + "pad.toolbar.bold.title": "Fet (Ctrl+B)", + "pad.toolbar.italic.title": "Kursiv (Ctrl+I)", + "pad.toolbar.underline.title": "Understreking (Ctrl+U)", "pad.toolbar.strikethrough.title": "Gjennomstreking (Ctrl+5)", "pad.toolbar.ol.title": "Nummerert liste (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Punktliste (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Innrykk (TAB)", "pad.toolbar.unindent.title": "Rykk ut (Shift+TAB)", - "pad.toolbar.undo.title": "Angre (Ctrl-Z)", - "pad.toolbar.redo.title": "Gjør omigjen (Ctrl-Y)", + "pad.toolbar.undo.title": "Angre (Ctrl+Z)", + "pad.toolbar.redo.title": "Gjør omigjen (Ctrl+Y)", "pad.toolbar.clearAuthorship.title": "Fjern forfatterfarger (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Importer/eksporter fra/til forskjellige filformater", "pad.toolbar.timeslider.title": "Tidslinje", "pad.toolbar.savedRevision.title": "Lagre revisjoner", "pad.toolbar.settings.title": "Innstillinger", - "pad.toolbar.embed.title": "Bygg inn denne padden", - "pad.toolbar.showusers.title": "Vis brukerne av denne padden", + "pad.toolbar.embed.title": "Del og sett inn denne Paden", + "pad.toolbar.showusers.title": "Vis brukerne av denne Paden", "pad.colorpicker.save": "Lagre", "pad.colorpicker.cancel": "Avbryt", - "pad.loading": "Laster inn...", - "pad.passwordRequired": "Du trenger et passord for å få tilgang til denne padden", - "pad.permissionDenied": "Du har ikke tilgang til denne padden", + "pad.loading": "Laster...", + "pad.noCookie": "Kunne ikke finne informasjonskapselen. Vennligst tillat informasjonskapsler (cookies) i din webleser!", + "pad.passwordRequired": "Du trenger et passord for å få tilgang til denne Paden", + "pad.permissionDenied": "Du har ikke tilgang til denne Paden", "pad.wrongPassword": "Feil passord", "pad.settings.padSettings": "Padinnstillinger", - "pad.settings.myView": "Min visning", + "pad.settings.myView": "Min Visning", "pad.settings.stickychat": "Chat alltid synlig", + "pad.settings.chatandusers": "Vis chat og brukere", "pad.settings.colorcheck": "Forfatterfarger", "pad.settings.linenocheck": "Linjenummer", "pad.settings.rtlcheck": "Les innhold fra høyre til venstre?", @@ -44,7 +48,8 @@ "pad.importExport.import_export": "Importer/eksporter", "pad.importExport.import": "Last opp tekstfil eller dokument", "pad.importExport.importSuccessful": "Vellykket!", - "pad.importExport.export": "Eksporter padden som:", + "pad.importExport.export": "Eksporter blokken som:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Ren tekst", "pad.importExport.exportword": "Microsoft Word", @@ -52,10 +57,10 @@ "pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.abiword.innerHTML": "Du kan bare importere fra ren tekst eller HTML-formater. For mer avanserte importfunksjoner, installer abiword.", "pad.modals.connected": "Tilkoblet.", - "pad.modals.reconnecting": "Kobler til din pad på nytt...", + "pad.modals.reconnecting": "Kobler til din blokk på nytt...", "pad.modals.forcereconnect": "Tving gjenoppkobling", "pad.modals.userdup": "Åpnet i nytt vindu", - "pad.modals.userdup.explanation": "Denne padden ser ut til å være åpnet i mer enn et nettleservindu på denne maskinen.", + "pad.modals.userdup.explanation": "Denne blokken ser ut til å være åpnet i mer enn et nettleservindu på denne maskinen.", "pad.modals.userdup.advice": "Koble til igjen for å bruke dette vinduet i stedenfor.", "pad.modals.unauth": "Ikke tillatt", "pad.modals.unauth.explanation": "Dine rettigheter har blitt endret mens du så på denne siden. Prøv å koble til på nytt", @@ -71,26 +76,29 @@ "pad.modals.corruptPad.explanation": "Blokken du forsøker å få tilgang til er skadet.", "pad.modals.corruptPad.cause": "Dette kan komme av feil serverkonfigurasjon eller en annen uventet adferd. Vennligst kontakt serviceadministratoren hvis du anser dette å være feil.", "pad.modals.deleted": "Slettet.", - "pad.modals.deleted.explanation": "Denne padden har blitt fjernet", + "pad.modals.deleted.explanation": "Denne blokken har blitt fjernet", "pad.modals.disconnected": "Du har blitt frakoblet.", "pad.modals.disconnected.explanation": "Mistet tilkobling til serveren.", - "pad.modals.disconnected.cause": "Serveren kan være utilgjengelig. Vennligst si i fra til oss hvis dette fortsetter å skje", - "pad.share": "Del denne padden", + "pad.modals.disconnected.cause": "Serveren kan være utilgjengelig. Vennligst si i fra til oss hvis dette fortsetter å skje.", + "pad.share": "Del denne blokken", "pad.share.readonly": "Skrivebeskyttet", "pad.share.link": "Lenke", "pad.share.emebdcode": "URL for innbygging", "pad.chat": "Chat", - "pad.chat.title": "Åpne chatten for denne padden.", + "pad.chat.title": "Åpne chatten for denne blokken.", "pad.chat.loadmessages": "Last flere beskjeder", "timeslider.pageTitle": "{{appTitle}} Tidslinje", - "timeslider.toolbar.returnbutton": "Gå tilbake til pad", + "timeslider.toolbar.returnbutton": "Gå tilbake til blokk", "timeslider.toolbar.authors": "Forfattere:", "timeslider.toolbar.authorsList": "Ingen forfattere", "timeslider.toolbar.exportlink.title": "Eksporter", "timeslider.exportCurrent": "Eksporter nåværende versjon som:", "timeslider.version": "Versjon {{version}}", - "timeslider.saved": "Lagret {{day}} {{month}} {{year}}", - "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.saved": "Lagret {{day}}. {{month}} {{year}}", + "timeslider.playPause": "Spill av/Pause blokkinnholdet", + "timeslider.backRevision": "Gå tilbake en revisjon i denne blokken", + "timeslider.forwardRevision": "Gå fremover en revisjon i denne blokken", + "timeslider.dateformat": "{{day}}. {{month}} {{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "januar", "timeslider.month.february": "februar", "timeslider.month.march": "mars", @@ -105,6 +113,7 @@ "timeslider.month.december": "desember", "timeslider.unnamedauthors": "{{num}} navnløse {[plural(num) one: forfatter, other: forfattere ]}", "pad.savedrevs.marked": "Denne revisjonen er nå markert som en lagret revisjon", + "pad.savedrevs.timeslider": "Du kan se lagrede revisjoner med tidslinjen", "pad.userlist.entername": "Skriv inn ditt navn", "pad.userlist.unnamed": "navnløs", "pad.userlist.guest": "Gjest", @@ -113,8 +122,9 @@ "pad.editbar.clearcolors": "Fjern forfatterfarger på hele dokumentet?", "pad.impexp.importbutton": "Importer nå", "pad.impexp.importing": "Importerer...", - "pad.impexp.confirmimport": "Importering av en fil vil overskrive den nåværende teksten på padden. Er du sikker på at du vil fortsette?", + "pad.impexp.confirmimport": "Importering av en fil vil overskrive den nåværende teksten på blokken. Er du sikker på at du vil fortsette?", "pad.impexp.convertFailed": "Vi greide ikke å importere denne filen. Bruk et annet dokumentformat eller kopier og lim inn teksten manuelt", + "pad.impexp.padHasData": "Vi kunne ikke importere denne filen fordi blokken allerede hadde endringer. Importer til en ny blokk.", "pad.impexp.uploadFailed": "Opplastning feilet. Prøv igjen", "pad.impexp.importfailed": "Import feilet", "pad.impexp.copypaste": "Vennligst kopier og lim inn", diff --git a/sources/src/locales/nds.json b/sources/src/locales/nds.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/ne.json b/sources/src/locales/ne.json old mode 100755 new mode 100644 index b380526..1179c93 --- a/sources/src/locales/ne.json +++ b/sources/src/locales/ne.json @@ -1,7 +1,9 @@ { "@metadata": { "authors": [ - "सरोज कुमार ढकाल" + "सरोज कुमार ढकाल", + "Nirjal stha", + "राम प्रसाद जोशी" ] }, "index.newPad": "नयाँ प्याड", @@ -9,20 +11,20 @@ "pad.toolbar.bold.title": "मोटो (Ctrl-B)", "pad.toolbar.italic.title": "ढल्के (Ctrl-I)", "pad.toolbar.underline.title": "निम्न रेखाङ्कन (Ctrl-U)", - "pad.toolbar.strikethrough.title": "बीचको धर्को", - "pad.toolbar.ol.title": "क्रमवद्ध सूची", - "pad.toolbar.ul.title": "अक्रमाङ्कित सूची", + "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": "लेखकीय रङ्ग हटाउने", + "pad.toolbar.clearAuthorship.title": "लेखकीय रङ्ग हटाउने (Ctrl+Shift+C)", "pad.toolbar.timeslider.title": "टाइमस्लाइडर", "pad.toolbar.savedRevision.title": "पुनरावलोकन संग्रहगर्ने", "pad.toolbar.settings.title": "सेटिङ्गहरू", "pad.toolbar.embed.title": "यस प्याडलाई बाड्ने या इम्बेड गर्ने", "pad.toolbar.showusers.title": "यस प्याडमा रहेका प्रयोगकर्ता देखाउने", - "pad.colorpicker.save": "संग्रह गर्ने", + "pad.colorpicker.save": "सङ्ग्रह गर्ने", "pad.colorpicker.cancel": "रद्द", "pad.loading": "लोड हुदैछ...", "pad.passwordRequired": "यो प्यड खोल्न पासवर्ड चाहिन्छ", @@ -31,6 +33,7 @@ "pad.settings.padSettings": "प्याड सेटिङ्गहरू", "pad.settings.myView": "मेरो दृष्य", "pad.settings.stickychat": "पर्दामा सधै च्याट गर्ने", + "pad.settings.chatandusers": "वार्ता तथा प्रयोगकर्ताहरू देखाउने", "pad.settings.colorcheck": "लेखकीय रङ्ग", "pad.settings.linenocheck": "हरफ संख्या", "pad.settings.rtlcheck": "के सामग्री दाहिने देखि देब्रे पढ्ने हो ?", @@ -43,6 +46,7 @@ "pad.importExport.import": "कुनै पनि पाठ रहेको फाइल या कागजात अपलोड गर्नुहोस्", "pad.importExport.importSuccessful": "सफल भयो!", "pad.importExport.export": "निम्न रुपमा प्याड निर्यात गर्ने :", + "pad.importExport.exportetherpad": "इथरप्याड", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "साधारण पाठ", "pad.importExport.exportword": "माइक्रोसफ्ट वर्ड", @@ -54,6 +58,7 @@ "pad.modals.userdup": "अर्को सन्झ्यालमा खोल्ने", "pad.modals.unauth": "अनुमती नदिइएको", "pad.modals.initsocketfail": "सर्भरमा पहुँच पुर्‍याउन सकिएन ।", + "pad.modals.slowcommit.explanation": "सर्भरसँग सम्पर्क हुने सकेन ।", "pad.modals.deleted": "मेटिएको ।", "pad.modals.deleted.explanation": "यो प्याड हटाइसकेको छ ।", "pad.modals.disconnected": "तपाईँको जडान अवरुद्ध भयो ।", @@ -73,6 +78,9 @@ "timeslider.exportCurrent": "हालको संस्करण निम्म रुपमा निर्यात गर्ने :", "timeslider.version": "संस्करण {{version}}", "timeslider.saved": "सङ्ग्रह गरिएको {{month}} {{day}}, {{year}}", + "timeslider.playPause": "प्याडको सामग्रीहरूलाई चालु/बन्द गर्नुहोस", + "timeslider.backRevision": "यो प्याडको एक संस्करण पहिले जानुहोस्", + "timeslider.forwardRevision": "यो प्याडको एक संस्करण पछि जानुहोस्", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "जनवरी", "timeslider.month.february": "फेब्रुअरी", @@ -95,6 +103,7 @@ "pad.userlist.approve": "स्वीकृत गर्ने", "pad.impexp.importbutton": "अहिले आयात गर्ने", "pad.impexp.importing": "आयात गर्ने...", + "pad.impexp.uploadFailed": "अपलोड असफल भयो , कृपया पुन: प्रयास गर्नुहोस् ।", "pad.impexp.importfailed": "आयात असफल भयो", "pad.impexp.copypaste": "कृपया कपी पेस्ट गर्नुहोस" } diff --git a/sources/src/locales/nl.json b/sources/src/locales/nl.json old mode 100755 new mode 100644 index 0aa63d8..b01df7a --- a/sources/src/locales/nl.json +++ b/sources/src/locales/nl.json @@ -3,11 +3,12 @@ "authors": [ "Siebrand", "Macofe", - "Robin0van0der0vliet" + "Robin0van0der0vliet", + "Robin van der Vliet" ] }, "index.newPad": "Nieuw pad", - "index.createOpenPad": "Maak of open pad met de naam:", + "index.createOpenPad": "Pad maken op openen met de naam:", "pad.toolbar.bold.title": "Vet (Ctrl-B)", "pad.toolbar.italic.title": "Cursief (Ctrl-I)", "pad.toolbar.underline.title": "Onderstrepen (Ctrl-U)", @@ -45,7 +46,7 @@ "pad.settings.globalView": "Globaal overzicht", "pad.settings.language": "Taal:", "pad.importExport.import_export": "Importeren/exporteren", - "pad.importExport.import": "Upload een tekstbestand of document", + "pad.importExport.import": "Tekstbestand of document uploaden", "pad.importExport.importSuccessful": "Afgerond", "pad.importExport.export": "Huidige pad exporteren als", "pad.importExport.exportetherpad": "Etherpad", @@ -54,7 +55,7 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "Pdf", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "U kunt alleen importeren vanuit platte tekst of een HTML-opmaak. Installeer abiword om meer geavanceerde importmogelijkheden te krijgen.", + "pad.importExport.abiword.innerHTML": "U kunt alleen importeren vanuit Tekst zonder opmaak of een HTML-opmaak. Installeer abiword om meer geavanceerde importmogelijkheden te krijgen.", "pad.modals.connected": "Verbonden.", "pad.modals.reconnecting": "Opnieuw verbinding maken met uw pad...", "pad.modals.forcereconnect": "Opnieuw verbinden", @@ -65,7 +66,7 @@ "pad.modals.unauth.explanation": "Uw rechten zijn gewijzigd terwijl u de pagina aan het bekijken was. Probeer opnieuw te verbinden.", "pad.modals.looping.explanation": "Er is een probleem opgetreden tijdens de communicatie met de synchronisatieserver.", "pad.modals.looping.cause": "Mogelijk gebruikt de server een niet compatibele firewall of proxy server.", - "pad.modals.initsocketfail": "Server is niet bereikbaar.", + "pad.modals.initsocketfail": "De server is niet bereikbaar.", "pad.modals.initsocketfail.explanation": "Het was niet mogelijk te verbinden met de synchronisatieserver.", "pad.modals.initsocketfail.cause": "Mogelijk komt dit door uw browser of internetverbinding.", "pad.modals.slowcommit.explanation": "De server reageert niet.", diff --git a/sources/src/locales/nn.json b/sources/src/locales/nn.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/oc.json b/sources/src/locales/oc.json old mode 100755 new mode 100644 index 62625ed..bc3a445 --- a/sources/src/locales/oc.json +++ b/sources/src/locales/oc.json @@ -57,7 +57,7 @@ "pad.modals.reconnecting": "Reconnexion cap a vòstre Pad...", "pad.modals.forcereconnect": "Forçar la reconnexion.", "pad.modals.userdup": "Dobèrt dins una autra fenèstra", - "pad.modals.userdup.explanation": "Sembla qu'aqueste Pad es dobèrt dins mai d'una fenèstra de vòstre navigador sus aqueste ordenador.", + "pad.modals.userdup.explanation": "Sembla qu'aqueste Pad es dobèrt dins mai d'una fenèstra de vòstre navigador sus aqueste ordinator.", "pad.modals.userdup.advice": "Se reconnectar en utilizant aquesta fenèstra.", "pad.modals.unauth": "Pas autorizat", "pad.modals.unauth.explanation": "Vòstras permissions son estadas cambiadas al moment de l'afichatge d'aquesta pagina. Ensajatz de vos reconnectar.", @@ -92,6 +92,9 @@ "timeslider.exportCurrent": "Exportar la version actuala en :", "timeslider.version": "Version {{version}}", "timeslider.saved": "Enregistrat lo {{day}} {{month}} {{year}}", + "timeslider.playPause": "Lectura / Pausa dels contenguts del pad", + "timeslider.backRevision": "Recular d’una revision dins aqueste pad", + "timeslider.forwardRevision": "Avançar d’una revision dins aqueste pad", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Genièr", "timeslider.month.february": "Febrièr", diff --git a/sources/src/locales/olo.json b/sources/src/locales/olo.json new file mode 100644 index 0000000..e8db16f --- /dev/null +++ b/sources/src/locales/olo.json @@ -0,0 +1,54 @@ +{ + "@metadata": { + "authors": [ + "Denö", + "Mashoi7", + "Ilja.mos" + ] + }, + "pad.toolbar.underline.title": "Alleviivua (Ctrl+U)", + "pad.toolbar.settings.title": "Azetukset", + "pad.colorpicker.save": "Tallenda", + "pad.colorpicker.cancel": "Hylgiä", + "pad.wrongPassword": "Peittosana oli viärin", + "pad.settings.linenocheck": "Riädynoumerot", + "pad.settings.rtlcheck": "Luve syväindö oigielpäi huruale?", + "pad.settings.language": "Kieli:", + "pad.importExport.import_export": "Tuo/Vie", + "pad.importExport.importSuccessful": "Ozavui!", + "pad.importExport.exportetherpad": "Etherpad", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.modals.userdup": "Avattu toizes ikkunas", + "pad.modals.unauth": "Ei lubua", + "pad.modals.initsocketfail": "Palvelin ei ole tavattavis.", + "pad.modals.initsocketfail.explanation": "Ei suadu yhtevytty sinhronisaciipalvelimeh.", + "pad.modals.slowcommit.explanation": "Palvelin ei vastua.", + "pad.modals.disconnected.explanation": "Yhtevys palvelimeh kavotettu", + "timeslider.toolbar.authors": "Luadijat:", + "timeslider.toolbar.authorsList": "Ei luadijoi", + "timeslider.toolbar.exportlink.title": "Vie", + "timeslider.exportCurrent": "Vie nygöine versii nimel:", + "timeslider.version": "Versii {{version}}", + "timeslider.saved": "Tallendettu {{month}} {{day}}, {{year}}", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "pakkaskuudu", + "timeslider.month.february": "tuhukuudu", + "timeslider.month.march": "kevätkuudu", + "timeslider.month.april": "sulakuudu", + "timeslider.month.may": "oraskuudu", + "timeslider.month.june": "kezäkuudu", + "timeslider.month.july": "heinykuudu", + "timeslider.month.august": "elokuudu", + "timeslider.month.september": "syvyskuudu", + "timeslider.month.october": "ligakuudu", + "timeslider.month.november": "kylmykuudu", + "timeslider.month.december": "talvikuudu", + "pad.userlist.entername": "Kirjuta sinun nimi", + "pad.userlist.unnamed": "nimetöi", + "pad.userlist.guest": "Gost'u", + "pad.impexp.importbutton": "Tuo nygöi", + "pad.impexp.importing": "Tuou..." +} diff --git a/sources/src/locales/os.json b/sources/src/locales/os.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/pa.json b/sources/src/locales/pa.json old mode 100755 new mode 100644 index 9e154e3..531e4ac --- a/sources/src/locales/pa.json +++ b/sources/src/locales/pa.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Aalam", - "Babanwalia" + "Babanwalia", + "ਪ੍ਰਚਾਰਕ" ] }, "index.newPad": "ਨਵਾਂ ਪੈਡ", @@ -10,29 +11,31 @@ "pad.toolbar.bold.title": "ਗੂੜ੍ਹਾ (Ctrl-B)", "pad.toolbar.italic.title": "ਤਿਰਛਾ (Ctrl-I)", "pad.toolbar.underline.title": "ਹੇਠਾਂ-ਰੇਖਾ (Ctrl-U)", - "pad.toolbar.strikethrough.title": "ਵਿੰਨ੍ਹੋ ਵਿਨੋ", - "pad.toolbar.ol.title": "ਲੜੀਵਾਰ ਲਿਸਟ", + "pad.toolbar.strikethrough.title": "ਵਿੰਨ੍ਹੋ (Ctrl+5)", + "pad.toolbar.ol.title": "ਲੜੀਵਾਰ ਸੂਚੀ", "pad.toolbar.ul.title": "ਬਿਨ-ਲੜੀਬੱਧ ਸੂਚੀ", "pad.toolbar.indent.title": "ਹਾਸ਼ੀਏ ਤੋਂ ਪਰ੍ਹੇ (ਟੈਬ)", "pad.toolbar.unindent.title": "ਹਾਸ਼ੀਏ ਵੱਲ (ਸ਼ਿਫ਼ਟ+ਟੈਬ)", "pad.toolbar.undo.title": "ਵਾਪਸ (Ctrl-Z)", "pad.toolbar.redo.title": "ਪਰਤਾਓ (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "ਪਰਮਾਣਕਿਤਾ ਰੰਗ ਸਾਫ਼ ਕਰੋ", + "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.toolbar.embed.title": "ਇਹ ਪੈਡ ਸਾਂਝਾ ਤੇ ਇੰਬੈੱਡ ਕਰੋ", "pad.toolbar.showusers.title": "ਇਹ ਪੈਡ ਉੱਤੇ ਯੂਜ਼ਰ ਵੇਖਾਓ", - "pad.colorpicker.save": "ਸਾਂਭੋ", + "pad.colorpicker.save": "ਸੰਭਾਲੋ", "pad.colorpicker.cancel": "ਰੱਦ ਕਰੋ", "pad.loading": "…ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ", + "pad.noCookie": "ਕੂਕੀਜ਼ ਨਹੀਂ ਲੱਭੀਅਾਂ। ਕਿਰਪਾ ਕਰਕੇ ਬ੍ਰਾੳੂਜ਼ਰ ਵਿੱਚ ਕੂਕੀਜ਼ ਲਾਗੂ ਕਰੋ।", "pad.passwordRequired": "ਇਹ ਪੈਡ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਪਾਸਵਰਡ ਚਾਹੀਦਾ ਹੈ", "pad.permissionDenied": "ਇਹ ਪੈਡ ਵਰਤਨ ਲਈ ਤੁਹਾਨੂੰ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ", "pad.wrongPassword": "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਗਲਤੀ ਸੀ", "pad.settings.padSettings": "ਪੈਡ ਸੈਟਿੰਗ", "pad.settings.myView": "ਮੇਰੀ ਝਲਕ", "pad.settings.stickychat": "ਹਮੇਸ਼ਾ ਸਕਰੀਨ ਉੱਤੇ ਗੱਲ ਕਰੋ", + "pad.settings.chatandusers": "ਗੱਲ-ਬਾਤ ਅਤੇ ਵਰਤੋਂਕਾਰ ਦਿਖਾਵੋ", "pad.settings.colorcheck": "ਲੇਖਕੀ ਰੰਗ", "pad.settings.linenocheck": "ਲਾਈਨ ਨੰਬਰ", "pad.settings.rtlcheck": "ਸਮੱਗਰੀ ਸੱਜੇ ਤੋਂ ਖੱਬੇ ਪੜ੍ਹਨੀ ਹੈ?", @@ -45,10 +48,11 @@ "pad.importExport.import": "ਕੋਈ ਵੀ ਟੈਕਸਟ ਫਾਇਲ ਜਾਂ ਦਸਤਾਵੇਜ਼ ਅੱਪਲੋਡ ਕਰੋ", "pad.importExport.importSuccessful": "ਸਫ਼ਲ!", "pad.importExport.export": "ਮੌਜੂਦਾ ਪੈਡ ਨੂੰ ਐਕਸਪੋਰਟ ਕਰੋ:", + "pad.importExport.exportetherpad": "ੲੈਥਰਪੈਡ", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "ਸਧਾਰਨ ਟੈਕਸਟ", "pad.importExport.exportword": "ਮਾਈਕਰੋਸਾਫਟ ਵਰਡ", - "pad.importExport.exportpdf": "ਪੀਡੀਐਫ", + "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (ਓਪਨ ਡੌਕੂਮੈਂਟ ਫਾਰਮੈਟ)", "pad.importExport.abiword.innerHTML": "ਤੁਸੀਂ ਸਿਰਫ਼ ਸਾਦੀਆਂ ਲਿਖਤੀ ਜਾਂ ਐੱਚ.ਟੀ.ਐੱਮ.ਐੱਲ. ਰੂਪ-ਰੇਖਾਵਾਂ ਤੋਂ ਦਰਾਮਦ ਕਰ ਸਕਦੇ ਹੋ। ਹੋਰ ਉੱਨਤ ਦਰਾਮਦੀ ਗੁਣਾਂ ਵਾਸਤੇ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਐਬੀਵਰਡ ਥਾਪੋ।", "pad.modals.connected": "ਕੁਨੈਕਟ ਹੈ।", @@ -88,8 +92,11 @@ "timeslider.toolbar.authorsList": "ਕੋਈ ਲੇਖਕ ਨਹੀਂ", "timeslider.toolbar.exportlink.title": "ਐਕਸਪੋਰਟ", "timeslider.exportCurrent": "ਮੌਜੂਦਾ ਵਰਜਨ ਇੰਝ ਐਕਸਪੋਰਟ ਕਰੋ:", - "timeslider.version": "ਵਰਜਨ {{version}}", + "timeslider.version": "ਵਰਜ਼ਨ {{version}}", "timeslider.saved": "{{day}} {{month}} {{year}} ਨੂੰ ਸੰਭਾਲਿਆ", + "timeslider.playPause": "ਪੈਡ ਸਮੱਗਰੀ ਚਲਾਓ / ਵਿਰਾਮ ਕਰੋ", + "timeslider.backRevision": "ਇਸ ਪੈਡ ਵਿੱਚ ਪਿਛਲੇ ਰੀਵਿਜ਼ਨ ਤੇ ਜਾਓ", + "timeslider.forwardRevision": "ਇਸ ਪੈਡ ਵਿੱਚ ਅਗਲੇ ਰੀਵਿਜ਼ਨ ਤੇ ਜਾਓ", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "ਜਨਵਰੀ", "timeslider.month.february": "ਫ਼ਰਵਰੀ", @@ -118,5 +125,5 @@ "pad.impexp.uploadFailed": "ਅੱਪਲੋਡ ਲਈ ਫੇਲ੍ਹ ਹੈ, ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।", "pad.impexp.importfailed": "ਇੰਪੋਰਟ ਫੇਲ੍ਹ ਹੈ", "pad.impexp.copypaste": "ਕਾਪੀ ਕਰੋ ਚੇਪੋ ਜੀ", - "pad.impexp.exportdisabled": "{{type}} ਰੂਪ-ਰੇਖਾ ਵਜੋਂ ਬਰਾਮਦ ਕਰਨਾ ਬੰਦ ਹੈ। ਵੇਰਵੇ ਵਾਸਤੇ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਆਪਣੇ ਸਿਸਟਮ ਦੇ ਪ੍ਰਬੰਧਕ ਨਾਲ਼ ਰਾਬਤਾ ਬਣਾਉ।" + "pad.impexp.exportdisabled": "{{type}} ਫਾਰਮੈਟ ਵਜੋਂ ਬਰਾਮਦ ਕਰਨਾ ਬੰਦ ਹੈ। ਵੇਰਵੇ ਵਾਸਤੇ ਆਪਣੇ ਸਿਸਟਮ ਦੇ ਪਰਬੰਧਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।" } diff --git a/sources/src/locales/pl.json b/sources/src/locales/pl.json old mode 100755 new mode 100644 index bcd7a0e..3d9170b --- a/sources/src/locales/pl.json +++ b/sources/src/locales/pl.json @@ -6,7 +6,8 @@ "WTM", "Woytecr", "Macofe", - "Pan Cube" + "Pan Cube", + "Mateon1" ] }, "index.newPad": "Nowy dokument", @@ -14,9 +15,9 @@ "pad.toolbar.bold.title": "Pogrubienie (Ctrl-B)", "pad.toolbar.italic.title": "Kursywa (Ctrl-I)", "pad.toolbar.underline.title": "Podkreślenie (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Przekreślenie", - "pad.toolbar.ol.title": "Lista uporządkowana", - "pad.toolbar.ul.title": "Lista nieuporządkowana", + "pad.toolbar.strikethrough.title": "Przekreślenie (Ctrl+5)", + "pad.toolbar.ol.title": "Lista uporządkowana (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Lista nieuporządkowana (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Wcięcie (TAB)", "pad.toolbar.unindent.title": "Wcięcie (Shift + TAB)", "pad.toolbar.undo.title": "Cofnij (Ctrl-Z)", @@ -31,12 +32,14 @@ "pad.colorpicker.save": "Zapisz", "pad.colorpicker.cancel": "Anuluj", "pad.loading": "Ładowanie...", + "pad.noCookie": "Nie znaleziono pliku cookie. Proszę zezwolić pliki cookie w przeglądarce!", "pad.passwordRequired": "Musisz podać hasło aby uzyskać dostęp do tego dokumentu", "pad.permissionDenied": "Nie masz uprawnień dostępu do tego dokumentu", "pad.wrongPassword": "Nieprawidłowe hasło", "pad.settings.padSettings": "Ustawienia dokumentu", "pad.settings.myView": "Mój widok", "pad.settings.stickychat": "Czat zawsze na ekranie", + "pad.settings.chatandusers": "Pokaż czat i użytkowników", "pad.settings.colorcheck": "Kolory autorstwa", "pad.settings.linenocheck": "Numery linii", "pad.settings.rtlcheck": "Czytasz treść od prawej do lewej?", @@ -68,7 +71,7 @@ "pad.modals.looping.cause": "Być może jesteś połączony przez niezgodną zaporę lub serwer proxy.", "pad.modals.initsocketfail": "Serwer jest nieosiągalny.", "pad.modals.initsocketfail.explanation": "Nie udało się połączyć z serwerem synchronizacji.", - "pad.modals.initsocketfail.cause": "Przyczyną są prawdopodobnie problemy z przeglądarka lub połączeniem z internetem.", + "pad.modals.initsocketfail.cause": "Prawdopodobnie jest to spowodowane problemami z przeglądarką lub połączeniem internetowym.", "pad.modals.slowcommit.explanation": "Serwer nie odpowiada.", "pad.modals.slowcommit.cause": "Może być to spowodowane problemami z Twoim połączeniem z siecią.", "pad.modals.badChangeset.explanation": "Edycja, którą wykonałeś, została niewłaściwie zakwalifikowana przez serwer synchronizacji.", @@ -95,6 +98,8 @@ "timeslider.exportCurrent": "Eksportuj bieżącą wersję jako:", "timeslider.version": "Wersja {{version}}", "timeslider.saved": "Zapisano {{day}} {{month}} {{year}}", + "timeslider.backRevision": "Przejdź do poprzedniej wersji dokumentu", + "timeslider.forwardRevision": "Przejdź do następnej wersji dokumentu", "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Styczeń", "timeslider.month.february": "Luty", @@ -108,18 +113,20 @@ "timeslider.month.october": "Październik", "timeslider.month.november": "Listopad", "timeslider.month.december": "Grudzień", - "timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor, other: autorów ]} bez nazw", + "timeslider.unnamedauthors": "{{num}} {[plural(num) one: nienazwany autor, other: nienazwanych autorów ]}", "pad.savedrevs.marked": "Ta wersja została właśnie oznaczona jako zapisana.", + "pad.savedrevs.timeslider": "Możesz zobaczyć zapisane wersje na osi czasu", "pad.userlist.entername": "Wprowadź swoją nazwę", "pad.userlist.unnamed": "bez nazwy", "pad.userlist.guest": "Gość", "pad.userlist.deny": "Zabroń", - "pad.userlist.approve": "Akceptuj", + "pad.userlist.approve": "Zezwól", "pad.editbar.clearcolors": "Wyczyścić kolory autorstwa w całym dokumencie?", "pad.impexp.importbutton": "Importuj teraz", "pad.impexp.importing": "Importowanie...", "pad.impexp.confirmimport": "Importowanie pliku spowoduje zastąpienie bieżącego tekstu. Czy na pewno chcesz kontynuować?", "pad.impexp.convertFailed": "Nie byliśmy w stanie zaimportować tego pliku. Proszę użyć innego formatu dokumentu lub skopiować i wkleić ręcznie", + "pad.impexp.padHasData": "Nie udało się zaimportować tego pliku, bo ten dokument ma już zmiany, proszę zaimportować do nowego dokumentu", "pad.impexp.uploadFailed": "Przesyłanie nie powiodło się, proszę spróbować jeszcze raz", "pad.impexp.importfailed": "Importowanie nie powiodło się", "pad.impexp.copypaste": "Proszę skopiować i wkleić", diff --git a/sources/src/locales/ps.json b/sources/src/locales/ps.json old mode 100755 new mode 100644 index 2c23d1c..8db3a89 --- a/sources/src/locales/ps.json +++ b/sources/src/locales/ps.json @@ -8,6 +8,10 @@ "index.createOpenPad": "يا په همدې نوم يوه نوې ليکچه جوړول/پرانيستل:", "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.undo.title": "ناکړل (Ctrl-Z)", "pad.toolbar.redo.title": "بياکړل (Ctrl-Y)", "pad.toolbar.clearAuthorship.title": "د ليکوالۍ رنگونه سپينول (Ctrl+Shift+C)", @@ -15,18 +19,22 @@ "pad.toolbar.settings.title": "امستنې", "pad.colorpicker.save": "خوندي کول", "pad.colorpicker.cancel": "ناگارل", - "pad.loading": "برسېرېدنې کې دی...", + "pad.loading": "رابرسېرېږي...", "pad.passwordRequired": "دې ليکچې ته د لاسرسي لپاره تاسې يو پټنوم ته اړتيا لرۍ", "pad.wrongPassword": "پټنوم مو سم نه و", "pad.settings.padSettings": "د ليکچې امستنې", "pad.settings.myView": "زما کتنه", + "pad.settings.stickychat": "تل په پردې بانډار کول", + "pad.settings.chatandusers": "کارنان او بانډار ښکاره کول", "pad.settings.colorcheck": "د ليکوالۍ رنگونه", + "pad.settings.linenocheck": "د کرښو شمېرې", "pad.settings.fontType": "ليکبڼې ډول:", "pad.settings.fontType.normal": "نورمال", "pad.settings.fontType.monospaced": "مونوسپېس", "pad.settings.globalView": "نړېواله ښکارېدنه", "pad.settings.language": "ژبه:", "pad.importExport.importSuccessful": "بريالی شو!", + "pad.importExport.exportetherpad": "اېترپډ", "pad.importExport.exporthtml": "اچ ټي ام اېل", "pad.importExport.exportplain": "ساده متن", "pad.importExport.exportword": "مايکروسافټ ورډ", @@ -66,5 +74,7 @@ "pad.userlist.guest": "مېلمه", "pad.userlist.deny": "ردول", "pad.userlist.approve": "منل", + "pad.impexp.importbutton": "اوس واردول", + "pad.impexp.importing": "په واردولو کې دی...", "pad.impexp.copypaste": "لطفاً لمېسل لېښل ترسره کړئ" } diff --git a/sources/src/locales/pt-br.json b/sources/src/locales/pt-br.json old mode 100755 new mode 100644 index 59d679c..e356041 --- a/sources/src/locales/pt-br.json +++ b/sources/src/locales/pt-br.json @@ -13,7 +13,9 @@ "Rodrigo codignoli", "Webysther", "Fasouzafreitas", - "Lpagliari" + "Lpagliari", + "Walesson", + "Cainamarques" ] }, "index.newPad": "Nova Nota", @@ -104,6 +106,9 @@ "timeslider.exportCurrent": "Exportar a versão atual em formato:", "timeslider.version": "Versão {{version}}", "timeslider.saved": "Salvo em {{day}} de {{month}} de {{year}}", + "timeslider.playPause": "Reproduzir / Pausar conteúdo no Pad", + "timeslider.backRevision": "Voltar a uma revisão anterior neste Pad", + "timeslider.forwardRevision": "Ir a uma revisão posterior neste Pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janeiro", "timeslider.month.february": "Fevereiro", diff --git a/sources/src/locales/pt.json b/sources/src/locales/pt.json old mode 100755 new mode 100644 index 473980f..b5cbe1d --- a/sources/src/locales/pt.json +++ b/sources/src/locales/pt.json @@ -7,7 +7,8 @@ "Waldir", "Imperadeiro98", "Macofe", - "Ti4goc" + "Ti4goc", + "Cainamarques" ] }, "index.newPad": "Nova Nota", @@ -106,7 +107,7 @@ "pad.impexp.importbutton": "Importar agora", "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.padHasData": "Não fomos capazes de importar este ficheiro porque esta Almofada já tinha alterações, consulte importar para um novo bloco", + "pad.impexp.padHasData": "Não fomos capazes de importar este arquivo porque este Pad já tinha alterações, por favor importe para um novo pad", "pad.impexp.uploadFailed": "O upload falhou. Por favor, tente novamente", "pad.impexp.importfailed": "A importação falhou", "pad.impexp.copypaste": "Por favor, copie e cole" diff --git a/sources/src/locales/ro.json b/sources/src/locales/ro.json new file mode 100644 index 0000000..a73bfaf --- /dev/null +++ b/sources/src/locales/ro.json @@ -0,0 +1,98 @@ +{ + "@metadata": { + "authors": [ + "Hedwig", + "ImGelu", + "Minisarm", + "Strainu", + "Wintereu" + ] + }, + "index.newPad": "Pad nou", + "index.createOpenPad": "sau creează/deschide un Pad cu numele:", + "pad.toolbar.bold.title": "Aldin (Ctrl + B)", + "pad.toolbar.italic.title": "Cursiv (Ctrl + I)", + "pad.toolbar.underline.title": "Subliniază (Ctrl+U)", + "pad.toolbar.strikethrough.title": "Taie (Ctrl+5)", + "pad.toolbar.ol.title": "Listă ordonată (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Listă neordonată (Ctrl+Shift+L)", + "pad.toolbar.undo.title": "Anulează (Ctrl+Z)", + "pad.toolbar.redo.title": "Refă (Ctrl+Y)", + "pad.toolbar.clearAuthorship.title": "Curăță culorile autorilor (Ctrl+Shift+C)", + "pad.toolbar.import_export.title": "Importă/Exportă din/în diferite formate", + "pad.toolbar.savedRevision.title": "Salvează revizia", + "pad.toolbar.settings.title": "Setări", + "pad.toolbar.showusers.title": "Arată utilizatorii de pe acest pad", + "pad.colorpicker.save": "Salvează", + "pad.colorpicker.cancel": "Anulează", + "pad.loading": "Se încarcă...", + "pad.passwordRequired": "Ai nevoie de o parolă pentru a accesa acest pad", + "pad.permissionDenied": "Nu ai permisiunea să accesezi acest pad", + "pad.wrongPassword": "Parola ta este greșită", + "pad.settings.padSettings": "Setări pentru Pad", + "pad.settings.stickychat": "Chat-ul întotdeauna pe ecran", + "pad.settings.chatandusers": "Afișează Chat-ul și Utilizatorii", + "pad.settings.colorcheck": "Culorile autorilor", + "pad.settings.linenocheck": "Numere de linie", + "pad.settings.fontType": "Tipul fontului:", + "pad.settings.globalView": "Vedere generală", + "pad.settings.language": "Limbă:", + "pad.importExport.import_export": "Import/Export", + "pad.importExport.import": "Încarcă orice fișier text sau document", + "pad.importExport.importSuccessful": "Succes!", + "pad.importExport.export": "Exportă pad-ul curent ca:", + "pad.importExport.exportetherpad": "Etherpad", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "Text brut", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.modals.connected": "Conectat.", + "pad.modals.reconnecting": "Se reconectează la pad-ul dumneavoastră..", + "pad.modals.forcereconnect": "Forțează reconectarea", + "pad.modals.userdup": "Deschis în altă fereastră", + "pad.modals.userdup.advice": "Reconectați-vă dacă doriți să utilizați această fereastră.", + "pad.modals.unauth": "Nu ești autorizat", + "pad.modals.initsocketfail": "Serverul nu este disponibil.", + "pad.modals.initsocketfail.explanation": "Nu s-a putut conecta la serverul de sincronizare.", + "pad.modals.slowcommit.explanation": "Serverul nu răspunde.", + "pad.modals.slowcommit.cause": "Aceasta poate fi cauzată de probleme cu conexiunea la rețea.", + "pad.modals.deleted": "Șters.", + "pad.modals.deleted.explanation": "Acest pad a fost șters.", + "pad.modals.disconnected": "Ai fost deconectat.", + "pad.share": "Distribuie acest pad", + "pad.share.readonly": "Doar în citire", + "pad.share.link": "Legătură", + "pad.share.emebdcode": "Adresa URL încorporată", + "pad.chat": "Chat", + "pad.chat.title": "Deschide chat-ul pentru acest pad.", + "pad.chat.loadmessages": "Încarcă mai multe mesaje", + "timeslider.toolbar.returnbutton": "Înapoi la pad", + "timeslider.toolbar.authors": "Autori:", + "timeslider.toolbar.authorsList": "Niciun autor", + "timeslider.toolbar.exportlink.title": "Exportă", + "timeslider.exportCurrent": "Exportă versiunea curentă ca:", + "timeslider.version": "Versiunea {{version}}", + "timeslider.saved": "Salvat pe {{day}} {{month}} {{year}}", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "ianuarie", + "timeslider.month.february": "februarie", + "timeslider.month.march": "martie", + "timeslider.month.april": "aprilie", + "timeslider.month.may": "mai", + "timeslider.month.june": "iunie", + "timeslider.month.july": "iulie", + "timeslider.month.august": "august", + "timeslider.month.september": "septembrie", + "timeslider.month.october": "octombrie", + "timeslider.month.november": "noiembrie", + "timeslider.month.december": "decembrie", + "pad.userlist.entername": "Introduceți numele dumneavoastră", + "pad.userlist.unnamed": "fără nume", + "pad.userlist.guest": "Oaspete", + "pad.userlist.deny": "Respinge", + "pad.userlist.approve": "Aprobă", + "pad.impexp.importbutton": "Importă acum", + "pad.impexp.importing": "Importare...", + "pad.impexp.importfailed": "Import eșuat" +} diff --git a/sources/src/locales/ru.json b/sources/src/locales/ru.json old mode 100755 new mode 100644 index 9a17dda..2d92b1b --- a/sources/src/locales/ru.json +++ b/sources/src/locales/ru.json @@ -5,7 +5,8 @@ "DCamer", "Eleferen", "Okras", - "Volkov" + "Volkov", + "Nzeemin" ] }, "index.newPad": "Создать", @@ -96,6 +97,9 @@ "timeslider.exportCurrent": "Экспортировать текущую версию как:", "timeslider.version": "Версия {{version}}", "timeslider.saved": "Сохранено {{day}}.{{month}}.{{year}}", + "timeslider.playPause": "Воспроизведение / Пауза содержимого документа", + "timeslider.backRevision": "Назад на одну версию документа", + "timeslider.forwardRevision": "Вперёд на одну версию документа", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "январь", "timeslider.month.february": "февраль", @@ -111,6 +115,7 @@ "timeslider.month.december": "декабрь", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: безымянный автор, few: безымянных автора, many: безымянных авторов, other: безымянных авторов]}", "pad.savedrevs.marked": "Эта версия теперь помечена как сохраненная", + "pad.savedrevs.timeslider": "Вы можете увидеть сохранённые версии на шкале времени", "pad.userlist.entername": "Введите ваше имя", "pad.userlist.unnamed": "безымянный", "pad.userlist.guest": "Гость", @@ -121,8 +126,9 @@ "pad.impexp.importing": "Импортирование…", "pad.impexp.confirmimport": "Импорт файла перезапишет текущий текст. Вы уверены, что вы хотите продолжить?", "pad.impexp.convertFailed": "Не удалось импортировать этот файл. Пожалуйста, используйте другой формат или скопируйте вручную", + "pad.impexp.padHasData": "Не получилось импортировать этот файл, потому что этот документ уже имеет изменения, пожалуйста, импортируйте в новый документ", "pad.impexp.uploadFailed": "Загрузка не удалась, пожалуйста, попробуйте ещё раз", - "pad.impexp.importfailed": "Ошибка при импортировании", + "pad.impexp.importfailed": "Ошибка при импорте", "pad.impexp.copypaste": "Пожалуйста, скопируйте", "pad.impexp.exportdisabled": "Экспорт в формате {{type}} отключен. Для подробной информации обратитесь к системному администратору." } diff --git a/sources/src/locales/sco.json b/sources/src/locales/sco.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/sd.json b/sources/src/locales/sd.json new file mode 100644 index 0000000..bf8a36e --- /dev/null +++ b/sources/src/locales/sd.json @@ -0,0 +1,91 @@ +{ + "@metadata": { + "authors": [ + "Mehtab ahmed" + ] + }, + "index.newPad": "نئين پٽي", + "index.createOpenPad": "يا نالي سان ڪا پٽي تخليق ڪريو\\کوليو:", + "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.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.chatandusers": "ڳالھ ٻولھ ۽ يوزر ڏيکاريو", + "pad.settings.linenocheck": "سٽ جا انگ", + "pad.settings.rtlcheck": "مواد ساڄي کان کاٻي طرف پڙهندئو؟", + "pad.settings.fontType": "اکرن جو قسم:", + "pad.settings.globalView": "عالمي نظارو", + "pad.settings.language": "ٻولي:", + "pad.importExport.import_export": "درآمد ڪريو\\برآمد ڪريو", + "pad.importExport.import": "ڪو به متن وارو فائيل يا دستاويز چاڙهيو", + "pad.importExport.importSuccessful": "ڪامياب!", + "pad.importExport.export": "هاڻوڪي پٽي برآمد ڪريو جي طور:", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "سادو متن", + "pad.importExport.exportword": "مائيڪرسافٽ ورڊ", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (کليل دستاويز فارميٽ)", + "pad.modals.connected": "ڳنڍيل.", + "pad.modals.reconnecting": "توهان جي پٽي سان ٻيهر ڳنڍي رهيو آهي...", + "pad.modals.forcereconnect": "جبري طور ٻيهر ڳنڍيو", + "pad.modals.userdup": "هڪ ٻي دري ۾ کليل", + "pad.modals.unauth": "اختيار نه آهي", + "pad.modals.initsocketfail": "سَروَرَ کي پڄي نٿو سگھجي.", + "pad.modals.slowcommit.explanation": "سَروَر جواب نٿو ڏي.", + "pad.modals.corruptPad.explanation": "جيڪا پٽي توهان حاصل ڪرڻ چاهيو ٿا اها بدعنوان آهي.", + "pad.modals.deleted": "ختم ڪيل.", + "pad.modals.deleted.explanation": "هي پٽي هٽائجي چڪي آهي.", + "pad.modals.disconnected": "توهان سان ڳانڍاپو ختم ڪيو ويو آهي.", + "pad.share": "هي پٽي ونڊيو", + "pad.share.readonly": "صرف پڙهو", + "pad.share.link": "ڳنڍڻو", + "pad.chat": "ڳالھ ٻولھ", + "pad.chat.title": "هن پٽي لاءِ ڳالھ ٻولھ کوليو.", + "pad.chat.loadmessages": "وڌيڪ پيغام لوڊ ڪريو", + "timeslider.pageTitle": "{{appTitle}} وقت ڦيرڻو", + "timeslider.toolbar.returnbutton": "پٽي ڏانهن ورو", + "timeslider.toolbar.authors": "ليکڪ:", + "timeslider.toolbar.authorsList": "ڪوبه ليکڪ ناهي", + "timeslider.toolbar.exportlink.title": "برآمد ڪريو", + "timeslider.version": "ورزن {{version}}", + "timeslider.saved": "شانڍيل {{مهينو}} {{ڏينهن}}, {{سال}}", + "timeslider.dateformat": "{{مهينو}}/{{ڏينهن}}/{{سال}} {{ڪلاڪ}}:{{منٽ}}:{{سيڪنڊ}}", + "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": "ڊسمبر", + "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.importfailed": "درآمد ناڪام", + "pad.impexp.copypaste": "براءِ مهرباني ڪاپي ڪري لڳايو" +} diff --git a/sources/src/locales/shn.json b/sources/src/locales/shn.json new file mode 100644 index 0000000..434ef49 --- /dev/null +++ b/sources/src/locales/shn.json @@ -0,0 +1,126 @@ +{ + "@metadata": { + "authors": [ + "Saosukham" + ] + }, + "index.newPad": "ၽႅတ်ႉမႂ်ႇ", + "index.createOpenPad": "ဢမ်ႇၼၼ် ၶူင်မႂ်ႇ/ပိုတ်ႇၽႅတ်ႉၵိုၵ်းၸိုဝ်ႈ", + "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.toolbar.embed.title": "ၽႄပၼ်ၽႅတ်ႉဢၼ်ၼႆႉသေ ၽိူမ်ႉပၼ်", + "pad.toolbar.showusers.title": "ၼႄပၼ်ၵေႃႉၸႂ်ႉ တီႈၼိူဝ်ၽႅတ်ႉၼႆႉ", + "pad.colorpicker.save": "ၵဵပ်းသိမ်း", + "pad.colorpicker.cancel": "ဢမ်ႇႁဵတ်း", + "pad.loading": "တိုၵ်ႉလူတ်ႇ", + "pad.noCookie": "ၶုၵ်းၶီး ဢမ်ႇႁၼ်လႆႈ။ ၶႅၼ်းတေႃႈ ၶႂၢင်းပၼ် ၶုၵ်းၶီး တီႈၼႂ်း ပရၢဝ်ႇသႃႇၸဝ်ႈၵဝ်ႇ", + "pad.passwordRequired": "တႃႇၶဝ်ႈတီႈၽႅတ်ႉၼႆႉ ၸဝ်ႈၵဝ်ႇ လူဝ်ႇမီး မၢႆလပ်ႉ", + "pad.permissionDenied": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးၶေႃႈၶႂၢင်ႉ တႃႇၶဝ်ႈၼႂ်းၽႅတ်ႉၼႆႉ", + "pad.wrongPassword": "မၢႆလပ်ႉၸဝ်ႈၵဝ်ႇ ၽိတ်း", + "pad.settings.padSettings": "ပိူင်သၢင်ႈၽႅတ်ႉ", + "pad.settings.myView": "ဝိဝ်းၵဝ်", + "pad.settings.stickychat": "ၶျၢတ်ႉၼိူဝ်ၼႃႈၽိဝ် တႃႇသေႇ", + "pad.settings.chatandusers": "ၼႄၶျၢတ်ႉဢိၵ်ႇၵေႃႉၸႂ်ႉ", + "pad.settings.colorcheck": "သီၸိူဝ်းမီးဝႆႉၵဝ်ႇၵဝ်ႇ", + "pad.settings.linenocheck": "တူဝ်လိၵ်ႈႁေႈႁၢႆး", + "pad.settings.rtlcheck": "လူၵႂၢမ်းၼၢမ်း တႄႇၶႂႃတေႃႇသၢႆႉ", + "pad.settings.fontType": "ၾွၼ်ႉတူဝ်လိၵ်ႈ", + "pad.settings.globalView": "ဝိဝ်းတင်းလူၵ်ႈ", + "pad.settings.language": "ၽႃႇသႃႇၵႂၢမ်း:", + "pad.importExport.import_export": "သူင်ႇၶဝ်/သူင်ႇဢွၵ်ႇ", + "pad.importExport.import": "လူတ်ႇၶိုၼ်ႈ ၾၢႆႇလိၵ်ႈၵမ်ႈၽွင်ႈ ဢမ်ႇၼၼ် ပွင်ႈလိၵ်ႈ", + "pad.importExport.importSuccessful": "ဢွင်ႇယဝ်ႉ!", + "pad.importExport.export": "ဢဝ်ဢွၵ်ႇၽႅတ်ႉဢၼ်ပိူၼ်ႈသူင် ၸိူင်ႉၼင်ႇ:", + "pad.importExport.exportetherpad": "ၽႅတ်ႉပဝ်ႇ", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "တူဝ်လိၵ်ႈပဝ်ႇ", + "pad.importExport.exportword": "မၢႆႇၶရူဝ်ႇသွပ်ႉဝၢတ်ႉ", + "pad.importExport.exportpdf": "ၽီႇတီႇဢႅပ်ႉၾ်", + "pad.importExport.exportopen": "ဢူဝ်တီႇဢႅပ်ႉၾ် (Open Document Format)", + "pad.importExport.abiword.innerHTML": "ၸဝ်ႈၵဝ်ႇၸၢင်ႈလုၵ်ႉတီႈ လိၵ်ႈပဝ်ႇသေ သူင်ႇၶဝ်ႈၵႂႃႇ ဢမ်ႇၼၼ် ပိူင်လၢႆႈ HTML. ပုၼ်ႈတႃႇ ၸိူဝ်းပိူင်မႂ်ႇ ဢၼ်သူင်ႇၶဝ်ႈမႃးၼၼ်ႉ ၶွပ်ႈၸႂ်သေ install abiword.", + "pad.modals.connected": "ၵွင်ႉသၢၼ်ယဝ်ႉ", + "pad.modals.reconnecting": "ၶိုၼ်းၵွင်ႉသၢၼ်ၸူး ၽႅတ်ႉၸဝ်ႈၵဝ်ႇယူႇ", + "pad.modals.forcereconnect": "တဵၵ်းၸႂ်ႉ ၶိုၼ်းၵွင်ႉသၢၼ်", + "pad.modals.userdup": "ပိုတ်ႇတမ်ႈတီႈ ၼႃႈတူမႂ်ႇ", + "pad.modals.userdup.explanation": "တမ်ႈတီႈၼႂ်းၶွမ်းတၢင်ႇဢၼ်ၼၼ်ႉ ၽႅတ်ႉဢၼ်ၼႆႉ လႅပ်ႉပိုတ်ႇဝႆႉ တမ်ႈတီႈ ပရၢဝ်ႇသႃႇတၢင်ႇတီႈယူႇ", + "pad.modals.userdup.advice": "ၶိုၼ်းၵွင်ႉသၢၼ်တၢင် တမ်ႈတီႈ ဝိၼ်းတူဝ်းၼႆႉ", + "pad.modals.unauth": "ဢမ်ႇမီးသုၼ်ႇႁဵတ်း", + "pad.modals.unauth.explanation": "ၽွင်းၼႄၼႃႈလိၵ်ႈၼႆႉယူႇၼၼ်ႉ ၶေႃႈၶႂၢင်းၸဝ်ႈၵဝ်ႇ လႅၵ်ႈလၢႆႉယဝ်ႉယဝ်ႉ။ ၶတ်းၸႂ် ၶိုၼ်းၵွင်ႉသၢၼ်တႅင်ႈ", + "pad.modals.looping.explanation": "ၸိူဝ်းၼႆႉ မီးဝႆႉပၼ်ႁႃ သၢႆတိတ်းတေႃႇ ၵိုၵ်းလူၺ်ႈ သႃႇဝႃႇ ဢၼ်ၸၼ်ထိင်းဝႆႉ", + "pad.modals.looping.cause": "သင်ပဵၼ်လႆႈ မႂ်းၶဝ်ႈၵွင်ႉသၢၼ် ၾၢႆးယႃးဝေႃး ဢမ်ႇၼၼ် ပရွၵ်ႉသီႇ ဢၼ်ဢမ်ႇငၢမ်ႇၵၼ်", + "pad.modals.initsocketfail": "သႃႇဝႃႇ ဢမ်ႇၵွင်ႉလႆႈ", + "pad.modals.initsocketfail.explanation": "ဢမ်ႇၵွင်ႉၸူးလႆႈ သႃႇဝႃႇဢၼ်ၸၼ်ထိင်းဝႆႉ", + "pad.modals.initsocketfail.cause": "ၼႆႉပဵၼ်ပၼ်ႁႃၶိုၵ်ႉလူင် ၵိုၵ်းလူၺ်ႈ ပရၢဝ်ႇသႃႇၸဝ်ႈၵဝ်ႇ ဢမ်ႇၼၼ် သၢႆၼႅင်ႈၸဝ်ႈၵဝ်ႇ", + "pad.modals.slowcommit.explanation": "သႃႇဝႃႇ ဢမ်ႇတွပ်ႇပၼ်", + "pad.modals.slowcommit.cause": "ၼႆႉပူပ်ႉၺႃး ပၼ်ႁႃ ၵိုၵ်းလူၺ်ႈ သၢႆၼႅင်ႈၵွင်ႉသၢၼ်", + "pad.modals.badChangeset.explanation": "ၶေႃႈထတ်း ဢၼ်ၸဝ်ႈၵဝ်ႇႁဵတ်းၼၼ်ႉ မၼ်းဢမ်ႇႁူမ်ႈၶဝ်ႈၶႂၢင်ႇ ၸွမ်းၼင်ႇ သႃႇဝႃႇဢၼ် ၸၼ်ထိင်းဝႆႉ", + "pad.modals.corruptPad.explanation": "ၽႅတ်ႉဢၼ်ၸဝ်ႈၵဝ်ႇပေႃႉၼၼ်ႉ ၶဝ်ႈၽိတ်းဝႆႉ", + "pad.modals.corruptPad.cause": "ဢၼ်ၼႆႉ သႃႇဝႃႇဢၼ်ၸၼ်ထိင်းမၼ်း ၽိတ်းဝႆႉ ဢမ်ႇၼၼ် ဢမ်ႇမုင်ႈမွင်းသေ ၽိတ်းပိူင်ႈဝႆႉယဝ်ႉ။ ၶႅၼ်းတေႃႈ ၵပ်းသိုပ်ႇတမ်ႈတီႈ ၽူႈၵုမ်းၵၢၼ်.", + "pad.modals.deleted": "ယႃႉ", + "pad.modals.deleted.explanation": "ၽႅတ်ႉဢၼ်ၼႆႉ ၶၢႆႉပႅတ်ႈယဝ်ႉ", + "pad.modals.disconnected": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇၵွင်ႉသၢၼ်ဝႆႉ", + "pad.modals.disconnected.explanation": "လွင်ႈၵွင်ႉသၢၼ် ၵႂႃႇၸူးသႃႇဝႃႇၼၼ်ႉ ႁၢႆဝႆႉ", + "pad.modals.disconnected.cause": "သႃႇဝႃႇတေဢမ်ႇၸၢင်ႈယိပ်းတိုဝ်း။ တႃႇႁႂ်ႈသိုပ်ႇပဵၼ်ၵၢၼ်ၵႂႃႇၼၼ်ႉ ၶႅၼ်းတေႃႈ ပွင်ႇၶၢဝ်ႇ တမ်ႈတီႈ ၽူႈၵုမ်းၵၢၼ်", + "pad.share": "ၽႄၽႅတ်ႉၼႆႉ", + "pad.share.readonly": "လူလၢႆလၢႆ", + "pad.share.link": "ၵွင်ႉ", + "pad.share.emebdcode": "သႂ်ႇ URL", + "pad.chat": "ၶျၢတ်ႉ", + "pad.chat.title": "ပိုတ်ႇၶျၢတ်ႉ တႃႇၽႅတ်ႉၼႆႉ", + "pad.chat.loadmessages": "လူတ်ႇၶေႃႈၶၢဝ်ႇ လိူဝ်", + "timeslider.pageTitle": "{{appTitle}} ၶၢဝ်းယၢမ်းထေႃပူၼ်ႉ", + "timeslider.toolbar.returnbutton": "ၶိုၼ်းၵႂႃႇၸူး ၽႅတ်ႉ", + "timeslider.toolbar.authors": "ၽူႈတႅမ်ႈလိၵ်ႈ", + "timeslider.toolbar.authorsList": "ဢမ်ႇၸႂ်ႈ ၽူႈတႅမ်ႈလိၵ်ႈ", + "timeslider.toolbar.exportlink.title": "သူင်ႇဢွၵ်ႇ", + "timeslider.exportCurrent": "သူင်ႇဢွၵ်ႇ လုၼ်ႈပၢၼ်မႂ်ႇ ၼင်ႇ:", + "timeslider.version": "လုၼ်ႈ {{version}}", + "timeslider.saved": "သိမ်းယဝ်ႉ{{month}} {{day}}, {{year}}", + "timeslider.playPause": "လဵၼ်ႈလင်/ၵိုတ်းသဝ်း ၵႂၢမ်းၼၢမ်း ၽႅတ်ႉ", + "timeslider.backRevision": "ႁူၼ်လင် ၶိုၼ်းမႄး ၽႅတ်ႉၼႆႉ", + "timeslider.forwardRevision": "ၵႂႃႇၼႃႈ ၶိုၼ်းမႄး ၽႅတ်ႉၼႆႉ", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "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": "တီႇသႅမ်ႇပႃႇ", + "timeslider.unnamedauthors": "{{num}} ဢမ်ႇသႂ်ႇၸိုဝ်ႈ {[plural(num) ၼိုင်ႈ: ၽူႈတႅမ်ႈလိၵ်ႈ, တၢင်ႇၸိူဝ်း: ၽူႈတႅမ်ႈလိၵ်ႈၶဝ် ]}", + "pad.savedrevs.marked": "ဢၼ်မႄးဝႆႉၼႆႉ ယၢမ်းလဵဝ် ၶိုၼ်းမႄး ၵဵပ်းသိမ်းဝႆႉ ၸိူင်ႉၼင်ႇဢၼ်ၼိုင်ႈ", + "pad.savedrevs.timeslider": "ၸဝ်ႈၵဝ်ႇတေတူၺ်းလႆႈ ဢၼ်ၶိုၼ်းမႄးသိမ်းဝႆႉၼၼ်ႉယူႇ ပေႃးၶဝ်ႈတူၺ်းတီႈ ၶၢဝ်းယၢမ်းထေႃပူၼ်ႉ", + "pad.userlist.entername": "ပေႃႇသႂ်ႇပၼ် ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း ၸဝ်ႈၵဝ်ႇ", + "pad.userlist.unnamed": "ဢမ်ႇသႂ်ႇၸိုဝ်ႈ", + "pad.userlist.guest": "ၶႅၵ်ႇ", + "pad.userlist.deny": "ထဵင်", + "pad.userlist.approve": "ၵမ်ႉထႅမ်", + "pad.editbar.clearcolors": "လၢင်ႉပႅတ်ႈသီၵဝ်ႇ တမ်ႈတီႈ ၼိူဝ်ၶေႃႈလိၵ်ႈတင်းသဵင်ႈ", + "pad.impexp.importbutton": "သူင်ႇၶဝ်ႈယၢမ်းလဵဝ်", + "pad.impexp.importing": "တိုၵ်ႉသူင်ႇၶဝ်ႈယူႇ", + "pad.impexp.confirmimport": "ဢဝ်ၾၢႆႇၶဝ်ႈမႃးၼႆႉ တေမႃး တဵင်သႂ်ႇ လိၵ်ႈဢၼ်မီးဝႆႉ တီႈၼႂ်းၽႅတ်ႉၼႆႉယဝ်ႉ။ ၸွင်ႇၸဝ်ႈၵဝ်ႇ လပ်ႉလွင်းဝႃႈ ၸဝ်ႈၵဝ်ႇ တေၶႂ်ႈ ငူပ်ႉငိႁိုဝ်?", + "pad.impexp.convertFailed": "ႁဝ်းဢမ်ႇၸၢင်းႁဵတ်းႁိုဝ် ဢဝ်ၾၢႆႇၼႆႉ သူင်ႇၶဝ်ႈၵႂႃႇ။ ၶႅၼ်းတေႃႈ ၸႂ်ႉတိုဝ်း ၶေႃႈလိၵ်ႈ ဢၼ်ပႅၵ်ႇပိူင်ႈၵၼ် ဢမ်ႇၼၼ် ၵူးထုတ်ႇဝႆႉလႄႈ", + "pad.impexp.padHasData": "ႁဝ်းဢမ်ႇၸၢင်းႁဵတ်းႁိုဝ် ဢဝ်ၾၢႆႇၼႆႉ သူင်ႇၶဝ်ႈၵႂႃႇ ၵွပ်ႈပိူဝ်ႈဝႃႈ ၽႅတ်ႉဢၼ်ၼႆႉ မၼ်းလႅၵ်ႈလၢႆႈၵႂႃႇယဝ်ႉယဝ်ႈ။ ၶွပ်ႈၸႂ် သူင်ႇၶႂ်ႈၼႂ်း ၽႅတ်ႉမႂ်ႇလႄႈ", + "pad.impexp.uploadFailed": "ဢၼ်လူတ်ႇၶိုၼ်ႈ ၶၢတ်ႇတူၵ်းယဝ်ႉ။ ၶႅၼ်းတေႃႈ ၶတ်းၸႂ်ထႅင်ႈ", + "pad.impexp.importfailed": "ဢၼ်သူင်ႇၶဝ်ႈ ၶၢတ်ႇတူၵ်းယဝ်ႉ", + "pad.impexp.copypaste": "ၶႅၼ်းတေႃႈ ၵူးသေ ဢဝ်ဝႆႉတ", + "pad.impexp.exportdisabled": "ၸိူင်ႉၼင်ႇ {{type}} သူင်ႇဢွၵ်ႇ ၾေႃးမဵတ်ႉ ၼၼ်ႉ ဢမ်ႇၸၢင်ႈ။ ၶႅၼ်းတေႃႈ ၵပ်းသိုပ်ႇ ၽူႈၵုမ်းၵၢၼ်ၸၢၵ်ႈ တႃႇႁူဝ်ယွႆႈမၼ်းတ" +} diff --git a/sources/src/locales/sk.json b/sources/src/locales/sk.json old mode 100755 new mode 100644 index 02c5c97..445adc0 --- a/sources/src/locales/sk.json +++ b/sources/src/locales/sk.json @@ -3,7 +3,8 @@ "authors": [ "Teslaton", "Kusavica", - "Rudko" + "Rudko", + "Mark" ] }, "index.newPad": "Nový Pad", @@ -11,14 +12,14 @@ "pad.toolbar.bold.title": "Tučné (Ctrl-B)", "pad.toolbar.italic.title": "Kurzíva (Ctrl-I)", "pad.toolbar.underline.title": "Podčiarknuté (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Prečiarknuté", - "pad.toolbar.ol.title": "Číslovaný zoznam", - "pad.toolbar.ul.title": "Odrážkový zoznam", + "pad.toolbar.strikethrough.title": "Prečiarknuté (Ctrl+5)", + "pad.toolbar.ol.title": "Usporiadaný zoznam (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Nezoradený zoznam (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Zväčšiť odsadenie (TAB)", "pad.toolbar.unindent.title": "Zmenšiť odsadenie (Shift+TAB)", "pad.toolbar.undo.title": "Späť (Ctrl-Z)", "pad.toolbar.redo.title": "Znova (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "Odstrániť farby autorstva", + "pad.toolbar.clearAuthorship.title": "Odstrániť farby autorstva (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Import/export z/do rôznych formátov súborov", "pad.toolbar.timeslider.title": "Časová os", "pad.toolbar.savedRevision.title": "Uložiť revíziu", @@ -46,6 +47,7 @@ "pad.importExport.import": "Nahrať ľubovoľný textový súbor alebo dokument", "pad.importExport.importSuccessful": "Import úspešný!", "pad.importExport.export": "Exportovať aktuálny Pad ako:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Čistý text", "pad.importExport.exportword": "Microsoft Word", diff --git a/sources/src/locales/sl.json b/sources/src/locales/sl.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/sq.json b/sources/src/locales/sq.json old mode 100755 new mode 100644 index 6374ea6..24494f7 --- a/sources/src/locales/sq.json +++ b/sources/src/locales/sq.json @@ -1,55 +1,59 @@ { "@metadata": { "authors": [ - "Besnik b" + "Besnik b", + "Kosovastar" ] }, - "index.newPad": "Bllok i Ri", - "index.createOpenPad": "ose krijoni/hapni një Bllok me emrin:", + "index.newPad": "Bllok i ri", + "index.createOpenPad": "ose krijoni/hapni një bllok me emrin:", "pad.toolbar.bold.title": "Të trasha (Ctrl-B)", "pad.toolbar.italic.title": "Të pjerrëta (Ctrl-I)", "pad.toolbar.underline.title": "Të nënvizuara (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Hequrvije (Ctrl+5)", + "pad.toolbar.strikethrough.title": "Mbivijëzuar (Ctrl+5)", "pad.toolbar.ol.title": "Listë e renditur (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Listë e parenditur (Ctrl+Shift+L)", - "pad.toolbar.indent.title": "Brendazi (TAB)", + "pad.toolbar.indent.title": "E dhëmbëzuar (TAB)", "pad.toolbar.unindent.title": "Jashtazi (Shift+TAB)", "pad.toolbar.undo.title": "Zhbëje (Ctrl-Z)", "pad.toolbar.redo.title": "Ribëje (Ctrl-Y)", "pad.toolbar.clearAuthorship.title": "Hiqju Ngjyra Autorësish (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Importoni/Eksportoni nga/në formate të tjera kartelash", "pad.toolbar.timeslider.title": "Rrjedha kohore", - "pad.toolbar.savedRevision.title": "Ruaje Rishikimin", + "pad.toolbar.savedRevision.title": "Ruaje rishikimin", "pad.toolbar.settings.title": "Rregullime", - "pad.toolbar.embed.title": "Ndajeni me të tjerët dhe Trupëzojeni këtë bllok", + "pad.toolbar.embed.title": "Ndajeni me të tjerët dhe trupëzojeni këtë bllok", "pad.toolbar.showusers.title": "Shfaq përdoruesit në këtë bllok", "pad.colorpicker.save": "Ruaje", "pad.colorpicker.cancel": "Anuloje", - "pad.loading": "Po ngarkohet...", + "pad.loading": "Po ngarkohet…", + "pad.noCookie": "S’u gjet dot cookie. Ju lutemi, lejoni cookie-t te shfletuesi juaj!", "pad.passwordRequired": "Ju duhet një fjalëkalim që të mund të përdorni këtë bllok", - "pad.permissionDenied": "Nuk keni leje të hyni në këtë bllok", + "pad.permissionDenied": "Ju nuk keni leje t'i qaseni këtij blloku", "pad.wrongPassword": "Fjalëkalimi juaj qe gabim", "pad.settings.padSettings": "Rregullime blloku", - "pad.settings.myView": "Pamja Ime", + "pad.settings.myView": "Pamja ime", "pad.settings.stickychat": "Fjalosje përherë në ekran", + "pad.settings.chatandusers": "Shfaq fjalosje dhe përdorues", "pad.settings.colorcheck": "Ngjyra autorësish", "pad.settings.linenocheck": "Numra rreshtash", "pad.settings.rtlcheck": "Të lexohet lënda nga e djathta në të majtë?", "pad.settings.fontType": "Lloj shkronjash:", "pad.settings.fontType.normal": "Normale", "pad.settings.fontType.monospaced": "Monospace", - "pad.settings.globalView": "Pamje Globale", - "pad.settings.language": "Gjuhë:", + "pad.settings.globalView": "Pamje e përgjithshme", + "pad.settings.language": "Gjuha:", "pad.importExport.import_export": "Import/Eksport", "pad.importExport.import": "Ngarkoni cilëndo kartelë teksti ose dokument", "pad.importExport.importSuccessful": "Me sukses!", "pad.importExport.export": "Eksportojeni bllokun e tanishëm si:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Tekst të thjeshtë", "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "Mund të importoni vetëm prej formati tekst i thjeshtë ose html. Për veçori më të përparuara importimi, ju lutemi, instaloni Abiword-in.", + "pad.importExport.abiword.innerHTML": "Mund të importoni vetëm prej formati tekst i thjeshtë ose html. Për veçori më të thelluara importimi, ju lutemi, instaloni Abiword-in.", "pad.modals.connected": "I lidhur.", "pad.modals.reconnecting": "Po rilidheni te blloku juaj..", "pad.modals.forcereconnect": "Rilidhje e detyruar", @@ -57,11 +61,11 @@ "pad.modals.userdup.explanation": "Ky bllok duket se gjendet i hapur në më shumë se një dritare shfletuesi në këtë kompjuter.", "pad.modals.userdup.advice": "Rilidhuni që të përdoret kjo dritare.", "pad.modals.unauth": "I paautorizuar", - "pad.modals.unauth.explanation": "Ndërkohë që shihnit këtë dritare, lejet tuaja kanë ndryshuar. Provoni të rilidheni.", + "pad.modals.unauth.explanation": "Lejet tuaja ndryshuan teksa shihnit këtë dritare. Provoni të rilidheni.", "pad.modals.looping.explanation": "Ka probleme komunikimi me shërbyesin e njëkohësimit.", "pad.modals.looping.cause": "Ndoshta jeni lidhur përmes një firewall-i ose ndërmjetësi të papërputhshëm.", - "pad.modals.initsocketfail": "Nuk kapet dot shërbyesi.", - "pad.modals.initsocketfail.explanation": "Nuk u lidh dot te shërbyesi i njëkohësimit.", + "pad.modals.initsocketfail": "Shërbyesi (serveri) është i pakapshëm.", + "pad.modals.initsocketfail.explanation": "Nuk u lidh dot te shërbyesi (serveri) i sinkronizimit.", "pad.modals.initsocketfail.cause": "Ka gjasa që kjo vjen për shkak të një problemi me shfletuesin tuaj ose lidhjen tuaj në internet.", "pad.modals.slowcommit.explanation": "Shërbyesi nuk po përgjigjet.", "pad.modals.slowcommit.cause": "Kjo mund të vijë për shkak problemesh lidhjeje me rrjetin.", @@ -84,11 +88,14 @@ "timeslider.pageTitle": "Rrjedhë kohore e {{appTitle}}", "timeslider.toolbar.returnbutton": "Rikthehuni te blloku", "timeslider.toolbar.authors": "Autorë:", - "timeslider.toolbar.authorsList": "Pa Autorë", + "timeslider.toolbar.authorsList": "Nuk ka autorë", "timeslider.toolbar.exportlink.title": "Eksportoni", "timeslider.exportCurrent": "Eksportojeni versionin e tanishëm si:", "timeslider.version": "Versioni {{version}}", "timeslider.saved": "Ruajtur më {{month}} {{day}}, {{year}}", + "timeslider.playPause": "Riluaj / Pusho përmbajtjet e bllokut", + "timeslider.backRevision": "Kalo një rishikim mbrapsht te ky bllok", + "timeslider.forwardRevision": "Kalo një rishikim përpara në këtë bllok", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janar", "timeslider.month.february": "Shkurt", @@ -104,16 +111,18 @@ "timeslider.month.december": "Dhjetor", "timeslider.unnamedauthors": "{{num}} i paemërt {[plural(num) një: autor, tjetër: autorë ]}", "pad.savedrevs.marked": "Ky rishikim tani është shënuar si rishikim i ruajtur", + "pad.savedrevs.timeslider": "Rishikimet e ruajtura mund t’i shihni duke vizituar rrjedhjen kohore", "pad.userlist.entername": "Jepni emrin tuaj", "pad.userlist.unnamed": "pa emër", "pad.userlist.guest": "Vizitor", - "pad.userlist.deny": "Hidheni Tej", + "pad.userlist.deny": "Refuzo", "pad.userlist.approve": "Miratoje", "pad.editbar.clearcolors": "Të hiqen ngjyra autorësish në krejt dokumentin?", - "pad.impexp.importbutton": "Importoje Tani", - "pad.impexp.importing": "Po importohet...", + "pad.impexp.importbutton": "Importoje tani", + "pad.impexp.importing": "Po importohet…", "pad.impexp.confirmimport": "Importimi i një kartele do të mbishkruajë tekstin e tanishëm të bllokut. Jeni i sigurt se doni të vazhdohet?", "pad.impexp.convertFailed": "Nuk qemë në gjendje ta importonim këtë kartelë. Ju lutemi, përdorni një format tjetër dokumentesh ose kopjojeni dhe hidheni dorazi", + "pad.impexp.padHasData": "Ne nuk ishim në gjendje për të importuar këtë skedë, sepse ky bllok tashmë ka pasur ndryshime, ju lutem importojeni tek një bllok i ri", "pad.impexp.uploadFailed": "Ngarkimi dështoi, ju lutemi, riprovoni", "pad.impexp.importfailed": "Importimi dështoi", "pad.impexp.copypaste": "Ju lutemi, kopjojeni dhe ngjiteni", diff --git a/sources/src/locales/sr-ec.json b/sources/src/locales/sr-ec.json old mode 100755 new mode 100644 index 9fd20b1..3d69d52 --- a/sources/src/locales/sr-ec.json +++ b/sources/src/locales/sr-ec.json @@ -3,24 +3,43 @@ "authors": [ "Aktron", "Milicevic01", - "Милан Јелисавчић" + "Милан Јелисавчић", + "Srdjan m" ] }, "index.newPad": "Нови Пад", + "index.createOpenPad": "или направите/отворите пад следећег назива:", "pad.toolbar.bold.title": "Подебљано (Ctrl-B)", "pad.toolbar.italic.title": "Искошено (Ctrl-I)", "pad.toolbar.underline.title": "Подвучено (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Прецртано", - "pad.toolbar.ol.title": "Уређен списак", - "pad.toolbar.ul.title": "Неуређен списак", + "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+Z)", + "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.toolbar.embed.title": "Сачувај и угради овај пад", + "pad.toolbar.showusers.title": "Прикажи кориснике на овом паду", "pad.colorpicker.save": "Сачувај", "pad.colorpicker.cancel": "Откажи", "pad.loading": "Учитавање...", + "pad.noCookie": "Колачић није пронађен. Молимо да укључите колачиће у вашем прегледавачу!", + "pad.passwordRequired": "Требате лозинку како бисте приступили овом паду", + "pad.permissionDenied": "Немате дозволу да приступите овом паду", "pad.wrongPassword": "Ваша лозинка није исправна", + "pad.settings.padSettings": "Подешавања пада", "pad.settings.myView": "Мој приказ", + "pad.settings.stickychat": "Ћаскање увек на екрану", + "pad.settings.chatandusers": "Прикажи ћаскање и кориснике", + "pad.settings.colorcheck": "Ауторске боје", + "pad.settings.linenocheck": "Бројеви редова", + "pad.settings.rtlcheck": "Читај садржај с десна на лево?", "pad.settings.fontType": "Врста фонта:", "pad.settings.fontType.normal": "Нормално", "pad.settings.fontType.monospaced": "Monospace", @@ -29,18 +48,57 @@ "pad.importExport.import_export": "Увоз/извоз", "pad.importExport.import": "Отпремите било коју текстуалну датотеку или документ", "pad.importExport.importSuccessful": "Успело!", + "pad.importExport.export": "Извези тренутни пад као:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "чист текст", + "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.importExport.abiword.innerHTML": "Једино можете увести са једноставног текстуалног формата или HTML формата. За компликованије функције о увозу, молимо да инсталирате AbiWord.", "pad.modals.connected": "Повезано.", + "pad.modals.reconnecting": "Поново се повезујем на ваш пад..", + "pad.modals.forcereconnect": "Присилно се поново повежи", + "pad.modals.userdup": "Отворено у другом прозору", + "pad.modals.userdup.explanation": "Изгледа да је овај пад отворен у два или више прозора на овом рачунару.", + "pad.modals.userdup.advice": "Поново се повежите на овој прозор.", + "pad.modals.unauth": "Нисте овлашћени", + "pad.modals.unauth.explanation": "Ваша допуштења се се променила док сте прегледавали страницу. Покушајте се поново повезати.", + "pad.modals.looping.explanation": "Постоје комуникацијски проблеми са синхронизационим сервером.", + "pad.modals.looping.cause": "Можда сте се повезали преко неподржаног заштитног зида или проксија.", + "pad.modals.initsocketfail": "Сервер је недоступан.", + "pad.modals.initsocketfail.explanation": "Не могу се повезати на синхронизациони сервер.", + "pad.modals.initsocketfail.cause": "Највероватније је дошло до проблем са вашим прегледачем или вашом интернетском везом.", "pad.modals.slowcommit.explanation": "Сервер не одговара.", + "pad.modals.slowcommit.cause": "Највероватније је дошло до проблема са мрежном повезаношћу.", + "pad.modals.badChangeset.explanation": "Синхронизациони сервер је уређивање које сте начили означио као неисправно.", + "pad.modals.badChangeset.cause": "Могуће да је дошло до погрешне конфигурације сервера или неког другог неочекиваног догађаја. Молимо вас да контактирате сервисног администратора ако мислите да је ово грешка. Покушајте се поново повезати како бисте наставили с уређивањем.", + "pad.modals.corruptPad.explanation": "Пад којем покушавате приступити је оштећен.", + "pad.modals.corruptPad.cause": "Могуће да је дошло до погрешне конфигурације сервера или неког другог неочекиваног догађаја. Молимо вас да контактирате сервисног администратора.", "pad.modals.deleted": "Обрисано.", + "pad.modals.deleted.explanation": "Овај пад је уклоњен.", + "pad.modals.disconnected": "Веза је прекинута.", + "pad.modals.disconnected.explanation": "Изгубљена је веза са сервером", + "pad.modals.disconnected.cause": "Сервер није доступан. Обавестите сервисног администратора ако се ово настави дешавати.", "pad.share": "Дели овај пад", "pad.share.readonly": "Само за читање", "pad.share.link": "Веза", + "pad.share.emebdcode": "Угради везу", "pad.chat": "Ћаскање", "pad.chat.title": "Отворите ћаскање за овај пад.", "pad.chat.loadmessages": "Учитајте више порука.", + "timeslider.pageTitle": "{{appTitle}} временска линија", + "timeslider.toolbar.returnbutton": "Врати се на пад", + "timeslider.toolbar.authors": "Аутори:", + "timeslider.toolbar.authorsList": "Нема аутора", + "timeslider.toolbar.exportlink.title": "Извези", + "timeslider.exportCurrent": "Извези тренутну верзију као:", + "timeslider.version": "Верзија {{version}}", + "timeslider.saved": "Сачувано на {{day}}. {{month}}. {{year}}", + "timeslider.playPause": "Пусти/паузирај садржај пада", + "timeslider.backRevision": "Иди на претходну верзију овог пада", + "timeslider.forwardRevision": "Иди на следећу верзију овог пада", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "јануар", "timeslider.month.february": "фебруар", "timeslider.month.march": "март", @@ -53,7 +111,22 @@ "timeslider.month.october": "октобар", "timeslider.month.november": "новембар", "timeslider.month.december": "децембар", + "timeslider.unnamedauthors": "{{num}} неименован(и) {[plural(num) one: аутор, other: аутори ]}", + "pad.savedrevs.marked": "Ова верзија је сада означена као сачувана", + "pad.savedrevs.timeslider": "Можете видети сачуване измене користећи се временском линијом", + "pad.userlist.entername": "Упишите своје име", + "pad.userlist.unnamed": "нема имена", + "pad.userlist.guest": "Гост", + "pad.userlist.deny": "Одбиј", "pad.userlist.approve": "одобрено", + "pad.editbar.clearcolors": "Очисти ауторске боје за цели документ?", "pad.impexp.importbutton": "Увези одмах", - "pad.impexp.importing": "Увожење..." + "pad.impexp.importing": "Увожење...", + "pad.impexp.confirmimport": "Увоз датотеке ће преписати тренутни текст пада. Да ли сте сигурни да желите наставити?", + "pad.impexp.convertFailed": "Не можемо увести ову датотеку. Молимо да користите други формат документа или да документ копирате ручно", + "pad.impexp.padHasData": "Не можемо да увеземо ову датотеку зато што је већ било промена на овом паду, молимо да увезете нови пад", + "pad.impexp.uploadFailed": "Отпремање није успело, молимо да покушате поново", + "pad.impexp.importfailed": "Увоз неуспешан", + "pad.impexp.copypaste": "Молимо да ручно копирате", + "pad.impexp.exportdisabled": "Извоз у формату {{type}} није дозвољен. Контактирајте системског администратора за детаље." } diff --git a/sources/src/locales/sv.json b/sources/src/locales/sv.json old mode 100755 new mode 100644 index ae9b1f9..44df450 --- a/sources/src/locales/sv.json +++ b/sources/src/locales/sv.json @@ -94,6 +94,9 @@ "timeslider.exportCurrent": "Exportera aktuell version som:", "timeslider.version": "Version {{version}}", "timeslider.saved": "Sparades den {{day}} {{month}} {{year}}", + "timeslider.playPause": "Spela upp/pausa blockets innehåll", + "timeslider.backRevision": "Gå tillbaka en version av detta block", + "timeslider.forwardRevision": "Gå framåt en version av detta block", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "januari", "timeslider.month.february": "februari", diff --git a/sources/src/locales/te.json b/sources/src/locales/te.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/tr.json b/sources/src/locales/tr.json old mode 100755 new mode 100644 index 80927b7..bed5c6e --- a/sources/src/locales/tr.json +++ b/sources/src/locales/tr.json @@ -5,7 +5,8 @@ "Erdemaslancan", "Joseph", "Meelo", - "Trockya" + "Trockya", + "McAang" ] }, "index.newPad": "Yeni Bloknot", @@ -96,6 +97,9 @@ "timeslider.exportCurrent": "Mevcut sürümü şu olarak dışa aktar:", "timeslider.version": "{{version}} sürümü", "timeslider.saved": "{{day}} {{month}} {{year}} tarihinde kaydedildi", + "timeslider.playPause": "Bloknot İçeriğini Oynat / Durdur", + "timeslider.backRevision": "Bu bloknottaki bir revizyona geri git", + "timeslider.forwardRevision": "Bu bloknatta sonraki revizyona git", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}.{{minutes}}.{{seconds}}", "timeslider.month.january": "Ocak", "timeslider.month.february": "Şubat", @@ -122,6 +126,7 @@ "pad.impexp.importing": "İçe aktarıyor...", "pad.impexp.confirmimport": "Bir dosya içe aktarılırken bloknotun mevcut metninin üzerine yazdırılır. Devam etmek istediğinizden emin misiniz?", "pad.impexp.convertFailed": "Bu dosyayı içe aktarmak mümkün değil. Lütfen farklı bir belge biçimi kullanın ya da elle kopyala yapıştır yapın", + "pad.impexp.padHasData": "Biz bu dosyayı içe aktaramadık çünkü bu Bloknot zaten değiştirilmiş, lütfen yeni bir bloknot içe aktarın.", "pad.impexp.uploadFailed": "Yükleme başarısız, lütfen tekrar deneyin", "pad.impexp.importfailed": "İçe aktarım başarısız oldu", "pad.impexp.copypaste": "Lütfen kopyala yapıştır yapın", diff --git a/sources/src/locales/uk.json b/sources/src/locales/uk.json old mode 100755 new mode 100644 index 9dcde98..d5384a5 --- a/sources/src/locales/uk.json +++ b/sources/src/locales/uk.json @@ -6,7 +6,8 @@ "Olvin", "Steve.rusyn", "SteveR", - "Lxlalexlxl" + "Lxlalexlxl", + "Григорій Пугач" ] }, "index.newPad": "Створити", @@ -97,6 +98,9 @@ "timeslider.exportCurrent": "Експортувати поточну версію як:", "timeslider.version": "Версія {{version}}", "timeslider.saved": "Збережено {{month}} {{day}}, {{year}}", + "timeslider.playPause": "Відтворення / Пауза Панель Зміст", + "timeslider.backRevision": "Переглянути попередню ревізію цієї панелі", + "timeslider.forwardRevision": "Переглянути наступну ревізію цієї панелі", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Січень", "timeslider.month.february": "Лютий", @@ -112,6 +116,7 @@ "timeslider.month.december": "Грудень", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: безіменний автор, few: безіменні автори, many: безіменних авторів, other: безіменних авторів]}", "pad.savedrevs.marked": "Цю версію помічено збереженою версією", + "pad.savedrevs.timeslider": "Ви можете побачити збережені ревізії, відвідавши \"Слайдер Змін Ревізій\"", "pad.userlist.entername": "Введіть Ваше ім'я", "pad.userlist.unnamed": "безіменний", "pad.userlist.guest": "Гість", @@ -122,6 +127,7 @@ "pad.impexp.importing": "Імпорт...", "pad.impexp.confirmimport": "Імпортування файлу перезапише поточний текст документу. Ви дійсно хочете продовжити?", "pad.impexp.convertFailed": "Ми не можемо імпортувати цей файл. Будь ласка, використайте інший формат документу, або прямо скопіюйте та вставте", + "pad.impexp.padHasData": "Ми були не в стані імпортувати цей файл, тому що ця панель, вже відредактована, будь ласка, імпортуйте на нову панель", "pad.impexp.uploadFailed": "Завантаження не вдалось, будь ласка, спробуйте знову", "pad.impexp.importfailed": "Помилка при імпортуванні", "pad.impexp.copypaste": "Будь ласка, скопіюйте та вставте", diff --git a/sources/src/locales/vi.json b/sources/src/locales/vi.json old mode 100755 new mode 100644 diff --git a/sources/src/locales/zh-hans.json b/sources/src/locales/zh-hans.json old mode 100755 new mode 100644 index 31b7f7f..15f1159 --- a/sources/src/locales/zh-hans.json +++ b/sources/src/locales/zh-hans.json @@ -82,9 +82,9 @@ "pad.modals.badChangeset.cause": "这可能是因为服务器配置的错误或者其他未预料到的行为。如果您认为这是错误,请联系服务管理员。要继续编辑,请尝试重新连接。", "pad.modals.corruptPad.explanation": "您试图连接的记事本已损坏。", "pad.modals.corruptPad.cause": "这可能是因为服务器配置的错误或者其他未预料到的行为。请联系服务管理员。", - "pad.modals.deleted": "已刪除。", + "pad.modals.deleted": "已删除。", "pad.modals.deleted.explanation": "此记事本已被移除。", - "pad.modals.disconnected": "你已断开连接。", + "pad.modals.disconnected": "您已断开连接。", "pad.modals.disconnected.explanation": "到服务器的连接已丢失", "pad.modals.disconnected.cause": "服务器可能无法使用。若此情况持续发生,请通知服务器管理员。", "pad.share": "分享此记事本", @@ -102,6 +102,9 @@ "timeslider.exportCurrent": "当前版本导出为:", "timeslider.version": "版本 {{version}}", "timeslider.saved": "在{{year}}年{{month}}{{day}}日保存", + "timeslider.playPause": "回放 / 暂停Pad内容", + "timeslider.backRevision": "返回此Pad的一次修订", + "timeslider.forwardRevision": "前往此Pad的一次修订", "timeslider.dateformat": "{{year}}年{{month}}月{{day}}日 {{hours}}{{minutes}}{{seconds}}", "timeslider.month.january": "1月", "timeslider.month.february": "2月", diff --git a/sources/src/locales/zh-hant.json b/sources/src/locales/zh-hant.json old mode 100755 new mode 100644 index 48dd577..01aa421 --- a/sources/src/locales/zh-hant.json +++ b/sources/src/locales/zh-hant.json @@ -21,14 +21,14 @@ "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.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.toolbar.embed.title": "分享和嵌入此pad", - "pad.toolbar.showusers.title": "顯示此pad的用戶", + "pad.toolbar.showusers.title": "顯示此 pad 的使用者", "pad.colorpicker.save": "儲存", "pad.colorpicker.cancel": "取消", "pad.loading": "載入中...", @@ -39,7 +39,7 @@ "pad.settings.padSettings": "Pad設定", "pad.settings.myView": "我的視窗", "pad.settings.stickychat": "永遠在屏幕上顯示聊天", - "pad.settings.chatandusers": "顯示聊天及用戶", + "pad.settings.chatandusers": "顯示聊天與使用者", "pad.settings.colorcheck": "協作者顏色", "pad.settings.linenocheck": "行號", "pad.settings.rtlcheck": "從右至左讀取內容?", diff --git a/sources/src/node/README.md b/sources/src/node/README.md old mode 100755 new mode 100644 diff --git a/sources/src/node/db/API.js b/sources/src/node/db/API.js old mode 100755 new mode 100644 index 97d5162..237bcb0 --- a/sources/src/node/db/API.js +++ b/sources/src/node/db/API.js @@ -307,6 +307,38 @@ exports.setText = function(padID, text, callback) }); } +/** +appendText(padID, text) appends text to a pad + +Example returns: + +{code: 0, message:"ok", data: null} +{code: 1, message:"padID does not exist", data: null} +{code: 1, message:"text too long", data: null} +*/ +exports.appendText = function(padID, text, callback) +{ + //text is required + if(typeof text != "string") + { + callback(new customError("text is no string","apierror")); + return; + } + + //get the pad + getPadSafe(padID, true, function(err, pad) + { + if(ERR(err, callback)) return; + + pad.appendText(text); + + //update the clients on the pad + padMessageHandler.updatePadClients(pad, callback); + }); +}; + + + /** getHTML(padID, [rev]) returns the html of a pad @@ -473,9 +505,9 @@ exports.getChatHistory = function(padID, start, end, callback) end = pad.chatHead; } - if(start >= chatHead && chatHead > 0) + if(start > chatHead) { - callback(new customError("start is higher or equal to the current chatHead","apierror")); + callback(new customError("start is higher than the current chatHead","apierror")); return; } if(end > chatHead) @@ -499,7 +531,7 @@ appendChatMessage(padID, text, authorID, time), creates a chat message for the p Example returns: -{code: 0, message:"ok", data: null +{code: 0, message:"ok", data: null} {code: 1, message:"padID does not exist", data: null} */ exports.appendChatMessage = function(padID, text, authorID, time, callback) @@ -510,15 +542,19 @@ exports.appendChatMessage = function(padID, text, authorID, time, callback) callback(new customError("text is no string","apierror")); return; } - - //get the pad - getPadSafe(padID, true, function(err, pad) + + // if time is not an integer value + if(time === undefined || !is_int(time)) { - if(ERR(err, callback)) return; - - pad.appendChatMessage(text, authorID, parseInt(time)); - callback(); - }); + // set time to current timestamp + time = new Date().getTime(); + } + + var padMessage = require("ep_etherpad-lite/node/handler/PadMessageHandler.js"); + // save chat message to database and send message to all connected clients + padMessage.sendChatMessageToPadClients(parseInt(time), authorID, text, padID); + + callback(); } /*****************/ diff --git a/sources/src/node/db/AuthorManager.js b/sources/src/node/db/AuthorManager.js old mode 100755 new mode 100644 index e0f569e..3e3b691 --- a/sources/src/node/db/AuthorManager.js +++ b/sources/src/node/db/AuthorManager.js @@ -127,7 +127,7 @@ exports.createAuthor = function(name, callback) var author = "a." + randomString(16); //create the globalAuthors db entry - var authorObj = {"colorId" : Math.floor(Math.random()*32), "name": name, "timestamp": new Date().getTime()}; + var authorObj = {"colorId" : Math.floor(Math.random()*(exports.getColorPalette().length)), "name": name, "timestamp": new Date().getTime()}; //set the global author db entry db.set("globalAuthor:" + author, authorObj); diff --git a/sources/src/node/db/DB.js b/sources/src/node/db/DB.js old mode 100755 new mode 100644 index 7273c83..3c65d5c --- a/sources/src/node/db/DB.js +++ b/sources/src/node/db/DB.js @@ -19,7 +19,7 @@ * limitations under the License. */ -var ueberDB = require("ueberDB"); +var ueberDB = require("ueberdb2"); var settings = require("../utils/Settings"); var log4js = require('log4js'); diff --git a/sources/src/node/db/GroupManager.js b/sources/src/node/db/GroupManager.js old mode 100755 new mode 100644 diff --git a/sources/src/node/db/Pad.js b/sources/src/node/db/Pad.js old mode 100755 new mode 100644 index e70628b..5d26f47 --- a/sources/src/node/db/Pad.js +++ b/sources/src/node/db/Pad.js @@ -105,9 +105,9 @@ Pad.prototype.appendRevision = function appendRevision(aChangeset, author) { authorManager.addPad(author, this.id); if (this.head == 0) { - hooks.callAll("padCreate", {'pad':this}); + hooks.callAll("padCreate", {'pad':this, 'author': author}); } else { - hooks.callAll("padUpdate", {'pad':this}); + hooks.callAll("padUpdate", {'pad':this, 'author': author}); } }; @@ -188,7 +188,12 @@ Pad.prototype.getInternalRevisionAText = function getInternalRevisionAText(targe db.getSub("pad:"+_this.id+":revs:"+keyRev, ["meta", "atext"], function(err, _atext) { if(ERR(err, callback)) return; - atext = Changeset.cloneAText(_atext); + try { + atext = Changeset.cloneAText(_atext); + } catch (e) { + return callback(e); + } + callback(); }); }, @@ -290,7 +295,27 @@ Pad.prototype.setText = function setText(newText) { var oldText = this.text(); //create the changeset - var changeset = Changeset.makeSplice(oldText, 0, oldText.length, newText); + // We want to ensure the pad still ends with a \n, but otherwise keep + // getText() and setText() consistent. + var changeset; + if (newText[newText.length - 1] == '\n') { + changeset = Changeset.makeSplice(oldText, 0, oldText.length, newText); + } else { + changeset = Changeset.makeSplice(oldText, 0, oldText.length-1, newText); + } + + //append the changeset + this.appendRevision(changeset); +}; + +Pad.prototype.appendText = function appendText(newText) { + //clean the new text + newText = exports.cleanText(newText); + + var oldText = this.text(); + + //create the changeset + var changeset = Changeset.makeSplice(oldText, oldText.length, 0, newText); //append the changeset this.appendRevision(changeset); diff --git a/sources/src/node/db/PadManager.js b/sources/src/node/db/PadManager.js old mode 100755 new mode 100644 diff --git a/sources/src/node/db/ReadOnlyManager.js b/sources/src/node/db/ReadOnlyManager.js old mode 100755 new mode 100644 diff --git a/sources/src/node/db/SecurityManager.js b/sources/src/node/db/SecurityManager.js old mode 100755 new mode 100644 diff --git a/sources/src/node/db/SessionManager.js b/sources/src/node/db/SessionManager.js old mode 100755 new mode 100644 diff --git a/sources/src/node/db/SessionStore.js b/sources/src/node/db/SessionStore.js old mode 100755 new mode 100644 diff --git a/sources/src/node/easysync_tests.js b/sources/src/node/easysync_tests.js old mode 100755 new mode 100644 diff --git a/sources/src/node/eejs/examples/bar.ejs b/sources/src/node/eejs/examples/bar.ejs old mode 100755 new mode 100644 diff --git a/sources/src/node/eejs/examples/foo.ejs b/sources/src/node/eejs/examples/foo.ejs old mode 100755 new mode 100644 diff --git a/sources/src/node/eejs/index.js b/sources/src/node/eejs/index.js old mode 100755 new mode 100644 diff --git a/sources/src/node/handler/APIHandler.js b/sources/src/node/handler/APIHandler.js old mode 100755 new mode 100644 index b4d2420..179c2b4 --- a/sources/src/node/handler/APIHandler.js +++ b/sources/src/node/handler/APIHandler.js @@ -444,10 +444,61 @@ var version = , "getChatHead" : ["padID"] , "restoreRevision" : ["padID", "rev"] } +, "1.2.13": + { "createGroup" : [] + , "createGroupIfNotExistsFor" : ["groupMapper"] + , "deleteGroup" : ["groupID"] + , "listPads" : ["groupID"] + , "listAllPads" : [] + , "createDiffHTML" : ["padID", "startRev", "endRev"] + , "createPad" : ["padID", "text"] + , "createGroupPad" : ["groupID", "padName", "text"] + , "createAuthor" : ["name"] + , "createAuthorIfNotExistsFor": ["authorMapper" , "name"] + , "listPadsOfAuthor" : ["authorID"] + , "createSession" : ["groupID", "authorID", "validUntil"] + , "deleteSession" : ["sessionID"] + , "getSessionInfo" : ["sessionID"] + , "listSessionsOfGroup" : ["groupID"] + , "listSessionsOfAuthor" : ["authorID"] + , "getText" : ["padID", "rev"] + , "setText" : ["padID", "text"] + , "getHTML" : ["padID", "rev"] + , "setHTML" : ["padID", "html"] + , "getAttributePool" : ["padID"] + , "getRevisionsCount" : ["padID"] + , "getSavedRevisionsCount" : ["padID"] + , "listSavedRevisions" : ["padID"] + , "saveRevision" : ["padID", "rev"] + , "getRevisionChangeset" : ["padID", "rev"] + , "getLastEdited" : ["padID"] + , "deletePad" : ["padID"] + , "copyPad" : ["sourceID", "destinationID", "force"] + , "movePad" : ["sourceID", "destinationID", "force"] + , "getReadOnlyID" : ["padID"] + , "getPadID" : ["roID"] + , "setPublicStatus" : ["padID", "publicStatus"] + , "getPublicStatus" : ["padID"] + , "setPassword" : ["padID", "password"] + , "isPasswordProtected" : ["padID"] + , "listAuthorsOfPad" : ["padID"] + , "padUsersCount" : ["padID"] + , "getAuthorName" : ["authorID"] + , "padUsers" : ["padID"] + , "sendClientsMessage" : ["padID", "msg"] + , "listAllGroups" : [] + , "checkToken" : [] + , "appendChatMessage" : ["padID", "text", "authorID", "time"] + , "getChatHistory" : ["padID"] + , "getChatHistory" : ["padID", "start", "end"] + , "getChatHead" : ["padID"] + , "restoreRevision" : ["padID", "rev"] + , "appendText" : ["padID", "text"] + } }; // set the latest available API version here -exports.latestApiVersion = '1.2.12'; +exports.latestApiVersion = '1.2.13'; // exports the versions so it can be used by the new Swagger endpoint exports.version = version; diff --git a/sources/src/node/handler/ExportHandler.js b/sources/src/node/handler/ExportHandler.js old mode 100755 new mode 100644 index f20e871..8f91ced --- a/sources/src/node/handler/ExportHandler.js +++ b/sources/src/node/handler/ExportHandler.js @@ -28,35 +28,42 @@ var fs = require("fs"); var settings = require('../utils/Settings'); var os = require('os'); var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks"); +var TidyHtml = require('../utils/TidyHtml'); + +var convertor = null; //load abiword only if its enabled if(settings.abiword != null) - var abiword = require("../utils/Abiword"); + convertor = require("../utils/Abiword"); + +// Use LibreOffice if an executable has been defined in the settings +if(settings.soffice != null) + convertor = require("../utils/LibreOffice"); var tempDirectory = "/tmp"; -//tempDirectory changes if the operating system is windows +//tempDirectory changes if the operating system is windows if(os.type().indexOf("Windows") > -1) { tempDirectory = process.env.TEMP; } - + /** * do a requested export - */ + */ exports.doExport = function(req, res, padId, type) { var fileName = padId; // allow fileName to be overwritten by a hook, the type type is kept static for security reasons - hooks.aCallFirst("exportFileName", padId, + hooks.aCallFirst("exportFileName", padId, function(err, hookFileName){ // if fileName is set then set it to the padId, note that fileName is returned as an array. if(hookFileName.length) fileName = hookFileName; //tell the browser that this is a downloadable file res.attachment(fileName + "." + type); - + //if this is a plain text export, we can do this directly // We have to over engineer this because tabs are stored as attributes and not plain text if(type == "etherpad"){ @@ -69,36 +76,75 @@ exports.doExport = function(req, res, padId, type) } else if(type == "txt") { - var txt; + exporttxt.getPadTXTDocument(padId, req.params.rev, false, function(err, txt) + { + if(ERR(err)) return; + res.send(txt); + }); + } + else + { + var html; var randNum; var srcFile, destFile; - + async.series([ - //render the txt document + //render the html document function(callback) { - exporttxt.getPadTXTDocument(padId, req.params.rev, false, function(err, _txt) + exporthtml.getPadHTMLDocument(padId, req.params.rev, false, function(err, _html) { if(ERR(err, callback)) return; - txt = _txt; + html = _html; callback(); }); }, - //decide what to do with the txt export + //decide what to do with the html export function(callback) { - //if this is a txt export, we can send this from here directly - res.send(txt); - callback("stop"); + //if this is a html export, we can send this from here directly + if(type == "html") + { + // do any final changes the plugin might want to make + 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 + { + randNum = Math.floor(Math.random()*0xFFFFFFFF); + srcFile = tempDirectory + "/etherpad_export_" + randNum + ".html"; + fs.writeFile(srcFile, html, callback); + } }, - //send the convert job to abiword + + // Tidy up the exported HTML function(callback) { //ensure html can be collected by the garbage collector - txt = null; - + html = null; + + TidyHtml.tidy(srcFile, callback); + }, + + //send the convert job to the convertor (abiword, libreoffice, ..) + function(callback) + { destFile = tempDirectory + "/etherpad_export_" + randNum + "." + type; - abiword.convertFile(srcFile, destFile, type, callback); + + // Allow plugins to overwrite the convert in export process + hooks.aCallAll("exportConvert", {srcFile: srcFile, destFile: destFile, req: req, res: res}, function(err, result){ + if(!err && result.length > 0){ + // console.log("export handled by plugin", destFile); + handledByPlugin = true; + callback(); + }else{ + convertor.convertFile(srcFile, destFile, type, callback); + } + }); + }, //send the file function(callback) @@ -135,87 +181,6 @@ exports.doExport = function(req, res, padId, type) if(err && err != "stop") ERR(err); }) } - else - { - var html; - var randNum; - var srcFile, destFile; - - async.series([ - //render the html document - function(callback) - { - exporthtml.getPadHTMLDocument(padId, req.params.rev, false, function(err, _html) - { - if(ERR(err, callback)) return; - html = _html; - callback(); - }); - }, - //decide what to do with the html export - function(callback) - { - //if this is a html export, we can send this from here directly - if(type == "html") - { - // do any final changes the plugin might want to make cake - 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 - { - randNum = Math.floor(Math.random()*0xFFFFFFFF); - srcFile = tempDirectory + "/etherpad_export_" + randNum + ".html"; - fs.writeFile(srcFile, html, callback); - } - }, - //send the convert job to abiword - function(callback) - { - //ensure html can be collected by the garbage collector - html = null; - - destFile = tempDirectory + "/etherpad_export_" + randNum + "." + type; - abiword.convertFile(srcFile, destFile, type, callback); - }, - //send the file - function(callback) - { - res.sendFile(destFile, null, callback); - }, - //clean up temporary files - function(callback) - { - async.parallel([ - function(callback) - { - fs.unlink(srcFile, callback); - }, - function(callback) - { - //100ms delay to accomidate for slow windows fs - if(os.type().indexOf("Windows") > -1) - { - setTimeout(function() - { - fs.unlink(destFile, callback); - }, 100); - } - else - { - fs.unlink(destFile, callback); - } - } - ], callback); - } - ], function(err) - { - if(err && err != "stop") ERR(err); - }) - } } ); }; diff --git a/sources/src/node/handler/ImportHandler.js b/sources/src/node/handler/ImportHandler.js old mode 100755 new mode 100644 index 026ce02..870c954 --- a/sources/src/node/handler/ImportHandler.js +++ b/sources/src/node/handler/ImportHandler.js @@ -291,9 +291,6 @@ exports.doImport = function(req, res, padId) \ " diff --git a/sources/src/node/handler/PadMessageHandler.js b/sources/src/node/handler/PadMessageHandler.js old mode 100755 new mode 100644 index e15af1a..f48be60 --- a/sources/src/node/handler/PadMessageHandler.js +++ b/sources/src/node/handler/PadMessageHandler.js @@ -190,6 +190,16 @@ exports.handleMessage = function(client, message) } var handleMessageHook = function(callback){ + // Allow plugins to bypass the readonly message blocker + hooks.aCallAll("handleMessageSecurity", { client: client, message: message }, function ( err, messages ) { + if(ERR(err, callback)) return; + _.each(messages, function(newMessage){ + if ( newMessage === true ) { + thisSession.readonly = false; + } + }); + }); + var dropMessage = false; // Call handleMessage hook. If a plugin returns null, the message will be dropped. Note that for all messages // handleMessage will be called, even if the client is not authorized @@ -204,6 +214,7 @@ exports.handleMessage = function(client, message) // If no plugins explicitly told us to drop the message, its ok to proceed if(!dropMessage){ callback() }; }); + } var finalHandler = function () { @@ -364,6 +375,17 @@ function handleChatMessage(client, message) var text = message.data.text; var padId = sessioninfos[client.id].padId; + exports.sendChatMessageToPadClients(time, userId, text, padId); +} + +/** + * Sends a chat message to all clients of this pad + * @param time the timestamp of the chat message + * @param userId the author id of the chat message + * @param text the text of the chat message + * @param padId the padId to send the chat message to + */ +exports.sendChatMessageToPadClients = function (time, userId, text, padId) { var pad; var userName; @@ -533,14 +555,29 @@ function handleUserInfoUpdate(client, message) return; } + // Check that we have a valid session and author to update. + var session = sessioninfos[client.id]; + if(!session || !session.author || !session.padId) + { + messageLogger.warn("Dropped message, USERINFO_UPDATE Session not ready." + message.data); + return; + } + //Find out the author name of this session - var author = sessioninfos[client.id].author; + var author = session.author; + + // Check colorId is a Hex color + var isColor = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(message.data.userInfo.colorId) // for #f00 (Thanks Smamatti) + if(!isColor){ + messageLogger.warn("Dropped message, USERINFO_UPDATE Color is malformed." + message.data); + return; + } //Tell the authorManager about the new attributes authorManager.setAuthorColorId(author, message.data.userInfo.colorId); authorManager.setAuthorName(author, message.data.userInfo.name); - var padId = sessioninfos[client.id].padId; + var padId = session.padId; var infoMsg = { type: "COLLABROOM", @@ -600,8 +637,8 @@ function handleUserChanges(data, cb) messageLogger.warn("Dropped message, USER_CHANGES Message has no changeset!"); return cb(); } - //TODO: this might happen with other messages too => find one place to copy the session - //and always use the copy. atm a message will be ignored if the session is gone even + //TODO: this might happen with other messages too => find one place to copy the session + //and always use the copy. atm a message will be ignored if the session is gone even //if the session was valid when the message arrived in the first place if(!sessioninfos[client.id]) { @@ -762,8 +799,9 @@ function handleUserChanges(data, cb) } // Make sure the pad always ends with an empty line. - if (pad.text().lastIndexOf("\n\n") != pad.text().length-2) { - var nlChangeset = Changeset.makeSplice(pad.text(), pad.text().length-1, 0, "\n"); + if (pad.text().lastIndexOf("\n") != pad.text().length-1) { + var nlChangeset = Changeset.makeSplice(pad.text(), pad.text().length-1, + 0, "\n"); pad.appendRevision(nlChangeset); } @@ -929,7 +967,7 @@ function handleSwitchToPad(client, message) roomClients[i].leave(padId); } } - + // start up the new pad createSessionInfo(client, message); handleClientReady(client, message); @@ -989,6 +1027,8 @@ function handleClientReady(client, message) var currentTime; var padIds; + hooks.callAll("clientReady", message); + async.series([ //Get ro/rw id:s function (callback) @@ -1194,10 +1234,13 @@ function handleClientReady(client, message) "serverTimestamp": new Date().getTime(), "userId": author, "abiwordAvailable": settings.abiwordAvailable(), + "sofficeAvailable": settings.sofficeAvailable(), + "exportAvailable": settings.exportAvailable(), "plugins": { "plugins": plugins.plugins, "parts": plugins.parts, }, + "indentationOnNewLine": settings.indentationOnNewLine, "initialChangesets": [] // FIXME: REMOVE THIS SHIT } @@ -1334,6 +1377,12 @@ function handleChangesetRequest(client, message) messageLogger.warn("Dropped message, changeset request has no granularity!"); return; } + //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger#Polyfill + if(Math.floor(message.data.granularity) !== message.data.granularity) + { + messageLogger.warn("Dropped message, changeset request granularity is not an integer!"); + return; + } if(message.data.start == null) { messageLogger.warn("Dropped message, changeset request has no start!"); diff --git a/sources/src/node/handler/SocketIORouter.js b/sources/src/node/handler/SocketIORouter.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express.js b/sources/src/node/hooks/express.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/admin.js b/sources/src/node/hooks/express/admin.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/adminplugins.js b/sources/src/node/hooks/express/adminplugins.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/adminsettings.js b/sources/src/node/hooks/express/adminsettings.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/apicalls.js b/sources/src/node/hooks/express/apicalls.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/errorhandling.js b/sources/src/node/hooks/express/errorhandling.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/importexport.js b/sources/src/node/hooks/express/importexport.js old mode 100755 new mode 100644 index f3f0516..5ebac1d --- a/sources/src/node/hooks/express/importexport.js +++ b/sources/src/node/hooks/express/importexport.js @@ -13,9 +13,9 @@ exports.expressCreateServer = function (hook_name, args, cb) { } //if abiword is disabled, and this is a format we only support with abiword, output a message - if (settings.abiword == null && + if (settings.exportAvailable() == "no" && ["odt", "pdf", "doc"].indexOf(req.params.type) !== -1) { - res.send("Abiword is not enabled at this Etherpad instance. Set the path to Abiword in settings.json to enable this feature"); + res.send("This export is not enabled at this Etherpad instance. Set the path to Abiword or SOffice in settings.json to enable this feature"); return; } diff --git a/sources/src/node/hooks/express/padreadonly.js b/sources/src/node/hooks/express/padreadonly.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/padurlsanitize.js b/sources/src/node/hooks/express/padurlsanitize.js old mode 100755 new mode 100644 index 94cbe36..a997222 --- a/sources/src/node/hooks/express/padurlsanitize.js +++ b/sources/src/node/hooks/express/padurlsanitize.js @@ -16,6 +16,7 @@ exports.expressCreateServer = function (hook_name, args, cb) { if(sanitizedPadId != padId) { var real_url = sanitizedPadId; + real_url = encodeURIComponent(real_url); var query = url.parse(req.url).query; if ( query ) real_url += '?' + query; res.header('Location', real_url); diff --git a/sources/src/node/hooks/express/socketio.js b/sources/src/node/hooks/express/socketio.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/specialpages.js b/sources/src/node/hooks/express/specialpages.js old mode 100755 new mode 100644 index 0370c4f..e8d7795 --- a/sources/src/node/hooks/express/specialpages.js +++ b/sources/src/node/hooks/express/specialpages.js @@ -2,6 +2,7 @@ var path = require('path'); var eejs = require('ep_etherpad-lite/node/eejs'); var toolbar = require("ep_etherpad-lite/node/utils/toolbar"); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); +var settings = require('../../utils/Settings'); exports.expressCreateServer = function (hook_name, args, cb) { // expose current stats @@ -33,13 +34,25 @@ exports.expressCreateServer = function (hook_name, args, cb) { //serve pad.html under /p args.app.get('/p/:pad', function(req, res, next) { + // Set language for pad editor for the first time + // Or if language cookie doesn't exist + if (req.cookies.language === undefined) + { + res.cookie('language', settings.padOptions.lang); + } + + // The below might break for pads being rewritten + var isReadOnly = req.url.indexOf("/p/r.") === 0; + hooks.callAll("padInitToolbar", { - toolbar: toolbar + toolbar: toolbar, + isReadOnly: isReadOnly }); res.send(eejs.require("ep_etherpad-lite/templates/pad.html", { req: req, - toolbar: toolbar + toolbar: toolbar, + isReadOnly: isReadOnly })); }); @@ -49,7 +62,7 @@ exports.expressCreateServer = function (hook_name, args, cb) { hooks.callAll("padInitToolbar", { toolbar: toolbar }); - + res.send(eejs.require("ep_etherpad-lite/templates/timeslider.html", { req: req, toolbar: toolbar diff --git a/sources/src/node/hooks/express/static.js b/sources/src/node/hooks/express/static.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/swagger.js b/sources/src/node/hooks/express/swagger.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/tests.js b/sources/src/node/hooks/express/tests.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/express/webaccess.js b/sources/src/node/hooks/express/webaccess.js old mode 100755 new mode 100644 diff --git a/sources/src/node/hooks/i18n.js b/sources/src/node/hooks/i18n.js old mode 100755 new mode 100644 diff --git a/sources/src/node/padaccess.js b/sources/src/node/padaccess.js old mode 100755 new mode 100644 diff --git a/sources/src/node/server.js b/sources/src/node/server.js index 2952da5..1907c29 100755 --- a/sources/src/node/server.js +++ b/sources/src/node/server.js @@ -45,7 +45,7 @@ async.waterfall([ callback(er) }) }, - + // load everything function(callback) { settings = require('./utils/Settings'); @@ -55,7 +55,7 @@ async.waterfall([ hooks.plugins = plugins; callback(); }, - + //initalize the database function (callback) { @@ -73,7 +73,6 @@ async.waterfall([ // Call loadSettings hook hooks.aCallAll("loadSettings", { settings: settings }); - callback(); }, @@ -81,6 +80,6 @@ async.waterfall([ function (callback) { hooks.callAll("createServer", {}); - callback(null); + callback(null); } ]); diff --git a/sources/src/node/stats.js b/sources/src/node/stats.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/Abiword.js b/sources/src/node/utils/Abiword.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/Cli.js b/sources/src/node/utils/Cli.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/ExportEtherpad.js b/sources/src/node/utils/ExportEtherpad.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/ExportHelper.js b/sources/src/node/utils/ExportHelper.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/ExportHtml.js b/sources/src/node/utils/ExportHtml.js old mode 100755 new mode 100644 index 9e1ba12..836165b --- a/sources/src/node/utils/ExportHtml.js +++ b/sources/src/node/utils/ExportHtml.js @@ -19,6 +19,7 @@ var async = require("async"); var Changeset = require("ep_etherpad-lite/static/js/Changeset"); var padManager = require("../db/PadManager"); var ERR = require("async-stacktrace"); +var _ = require('underscore'); var Security = require('ep_etherpad-lite/static/js/security'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); var _analyzeLine = require('./ExportHelper')._analyzeLine; @@ -77,12 +78,21 @@ function getHTMLFromAtext(pad, atext, authorColors) var tags = ['h1', 'h2', 'strong', 'em', 'u', 's']; var props = ['heading1', 'heading2', 'bold', 'italic', 'underline', 'strikethrough']; + // prepare tags stored as ['tag', true] to be exported hooks.aCallAll("exportHtmlAdditionalTags", pad, function(err, newProps){ newProps.forEach(function (propName, i){ tags.push(propName); props.push(propName); }); }); + // prepare tags stored as ['tag', 'value'] to be exported. This will generate HTML + // with tags like + hooks.aCallAll("exportHtmlAdditionalTagsWithData", pad, function(err, newProps){ + newProps.forEach(function (propName, i){ + tags.push('span data-' + propName[0] + '="' + propName[1] + '"'); + props.push(propName); + }); + }); // holds a map of used styling attributes (*1, *2, etc) in the apool // and maps them to an index in props @@ -115,8 +125,8 @@ function getHTMLFromAtext(pad, atext, authorColors) var newLength = props.push(propName); anumMap[a] = newLength -1; - css+=".removed {text-decoration: line-through; " + - "-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; "+ + css+=".removed {text-decoration: line-through; " + + "-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; "+ "filter: alpha(opacity=80); "+ "opacity: 0.8; "+ "}\n"; @@ -130,7 +140,13 @@ function getHTMLFromAtext(pad, atext, authorColors) // this pad, and if yes puts its attrib id->props value into anumMap props.forEach(function (propName, i) { - var propTrueNum = apool.putAttrib([propName, true], true); + var attrib = [propName, true]; + if (_.isArray(propName)) { + // propName can be in the form of ['color', 'red'], + // see hook exportHtmlAdditionalTagsWithData + attrib = propName; + } + var propTrueNum = apool.putAttrib(attrib, true); if (propTrueNum >= 0) { anumMap[propTrueNum] = i; @@ -154,6 +170,12 @@ function getHTMLFromAtext(pad, atext, authorColors) var property = props[i]; + // we are not insterested on properties in the form of ['color', 'red'], + // see hook exportHtmlAdditionalTagsWithData + if (_.isArray(property)) { + return false; + } + if(property.substr(0,6) === "author"){ return stripDotFromAuthorID(property); } @@ -165,6 +187,13 @@ function getHTMLFromAtext(pad, atext, authorColors) return false; } + // tags added by exportHtmlAdditionalTagsWithData will be exported as with + // data attributes + function isSpanWithData(i){ + var property = props[i]; + return _.isArray(property); + } + function emitOpenTag(i) { openTags.unshift(i); @@ -186,8 +215,9 @@ function getHTMLFromAtext(pad, atext, authorColors) { openTags.shift(); var spanClass = getSpanClassFor(i); + var spanWithData = isSpanWithData(i); - if(spanClass){ + if(spanClass || spanWithData){ assem.append(''); } else { assem.append('
'); } }*/ - else//means we are getting closer to the lowest level of indentation or are at the same level + else//means we are getting closer to the lowest level of indentation or are at the same level { var toClose = lists.length > 0 ? listLevels[listLevels.length - 2] - line.listLevel : 0 if( toClose > 0){ @@ -416,7 +446,8 @@ function getHTMLFromAtext(pad, atext, authorColors) lineContent: lineContent, apool: apool, attribLine: attribLines[i], - text: textLines[i] + text: textLines[i], + padId: pad.id } var lineContentFromHook = hooks.callAllStr("getLineHTMLForExport", context, " ", " ", ""); @@ -431,7 +462,7 @@ function getHTMLFromAtext(pad, atext, authorColors) } } } - + for (var k = lists.length - 1; k >= 0; k--) { if(lists[k][1] == "number") @@ -460,14 +491,17 @@ exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback) stylesForExportCSS += css; }); // Core inclusion of head etc. - var head = - (noDocType ? '' : '\n') + - '\n' + (noDocType ? '' : '\n' + + var head = + (noDocType ? '' : '\n') + + '\n' + (noDocType ? '' : '\n' + '' + Security.escapeHTML(padId) + '\n' + - '\n' + - '\n' + '\n') + + stylesForExportCSS + + '\n' + '\n') + ''; var foot = '\n\n'; diff --git a/sources/src/node/utils/ExportTxt.js b/sources/src/node/utils/ExportTxt.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/ImportEtherpad.js b/sources/src/node/utils/ImportEtherpad.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/ImportHtml.js b/sources/src/node/utils/ImportHtml.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/LibreOffice.js b/sources/src/node/utils/LibreOffice.js new file mode 100644 index 0000000..4157724 --- /dev/null +++ b/sources/src/node/utils/LibreOffice.js @@ -0,0 +1,93 @@ +/** + * Controls the communication with LibreOffice + */ + +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var async = require("async"); +var fs = require("fs"); +var os = require("os"); +var path = require("path"); +var settings = require("./Settings"); +var spawn = require("child_process").spawn; + +// Conversion tasks will be queued up, so we don't overload the system +var queue = async.queue(doConvertTask, 1); + +/** + * Convert a file from one type to another + * + * @param {String} srcFile The path on disk to convert + * @param {String} destFile The path on disk where the converted file should be stored + * @param {String} type The type to convert into + * @param {Function} callback Standard callback function + */ +exports.convertFile = function(srcFile, destFile, type, callback) { + queue.push({"srcFile": srcFile, "destFile": destFile, "type": type, "callback": callback}); +}; + +function doConvertTask(task, callback) { + var tmpDir = os.tmpdir(); + + async.series([ + // Generate a PDF file with LibreOffice + function(callback) { + var soffice = spawn(settings.soffice, [ + '--headless', + '--invisible', + '--nologo', + '--nolockcheck', + '--convert-to', task.type, + task.srcFile, + '--outdir', tmpDir + ]); + + var stdoutBuffer = ''; + + // Delegate the processing of stdout to another function + soffice.stdout.on('data', function(data) { + stdoutBuffer += data.toString(); + }); + + // Append error messages to the buffer + soffice.stderr.on('data', function(data) { + stdoutBuffer += data.toString(); + }); + + // Throw an exception if libreoffice failed + soffice.on('exit', function(code) { + if (code != 0) { + return callback("LibreOffice died with exit code " + code + " and message: " + stdoutBuffer); + } + + callback(); + }) + }, + + // Move the PDF file to the correct place + function(callback) { + var filename = path.basename(task.srcFile); + var pdfFilename = filename.substr(0, filename.lastIndexOf('.')) + '.' + task.type; + var pdfPath = path.join(tmpDir, pdfFilename); + fs.rename(pdfPath, task.destFile, callback); + } + ], function(err) { + // Invoke the callback for the local queue + callback(); + + // Invoke the callback for the task + task.callback(err); + }); +} diff --git a/sources/src/node/utils/Minify.js b/sources/src/node/utils/Minify.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/RemoteAddress.js b/sources/src/node/utils/RemoteAddress.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/Settings.js b/sources/src/node/utils/Settings.js old mode 100755 new mode 100644 index b7d1f0b..b765670 --- a/sources/src/node/utils/Settings.js +++ b/sources/src/node/utils/Settings.js @@ -83,7 +83,7 @@ exports.dbSettings = { "filename" : path.join(exports.root, "dirty.db") }; /** * The default Text of a new pad */ -exports.defaultPadText = "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nEtherpad on Github: http:\/\/j.mp/ep-lite\n"; +exports.defaultPadText = "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nEtherpad on Github: https:\/\/github.com\/ether\/etherpad-lite\n"; /** * The default Pad Settings for a user (Can be overridden by changing the setting @@ -152,6 +152,16 @@ exports.minify = true; */ exports.abiword = null; +/** + * The path of the libreoffice executable + */ +exports.soffice = null; + +/** + * The path of the tidy executable + */ +exports.tidyHtml = null; + /** * Should we support none natively supported file types on import? */ @@ -167,11 +177,16 @@ exports.loglevel = "INFO"; */ exports.disableIPlogging = false; -/** +/** * Disable Load Testing */ exports.loadTest = false; +/** + * Enable indentation on new lines + */ +exports.indentationOnNewLine = true; + /* * log4js appender configuration */ @@ -207,14 +222,41 @@ exports.abiwordAvailable = function() } }; +exports.sofficeAvailable = function () { + if(exports.soffice != null) { + return os.type().indexOf("Windows") != -1 ? "withoutPDF": "yes"; + } else { + return "no"; + } +}; + +exports.exportAvailable = function () { + var abiword = exports.abiwordAvailable(); + var soffice = exports.sofficeAvailable(); + + if(abiword == "no" && soffice == "no") { + return "no"; + } else if ((abiword == "withoutPDF" && soffice == "no") || (abiword == "no" && soffice == "withoutPDF")) { + return "withoutPDF"; + } else { + return "yes"; + } +}; + // Provide git version if available exports.getGitCommit = function() { var version = ""; try { var rootPath = path.resolve(npm.dir, '..'); - var ref = fs.readFileSync(rootPath + "/.git/HEAD", "utf-8"); - var refPath = rootPath + "/.git/" + ref.substring(5, ref.indexOf("\n")); + if (fs.lstatSync(rootPath + '/.git').isFile()) { + rootPath = fs.readFileSync(rootPath + '/.git', "utf8"); + rootPath = rootPath.split(' ').pop().trim(); + } else { + rootPath += '/.git'; + } + var ref = fs.readFileSync(rootPath + "/HEAD", "utf-8"); + var refPath = rootPath + "/" + ref.substring(5, ref.indexOf("\n")); version = fs.readFileSync(refPath, "utf-8"); version = version.substring(0, 7); } @@ -234,13 +276,20 @@ exports.reloadSettings = function reloadSettings() { // Discover where the settings file lives var settingsFilename = argv.settings || "settings.json"; + // Discover if a credential file exists + var credentialsFilename = argv.credentials || "credentials.json"; + if (path.resolve(settingsFilename)===settingsFilename) { settingsFilename = path.resolve(settingsFilename); } else { settingsFilename = path.resolve(path.join(exports.root, settingsFilename)); } - - var settingsStr; + + if (path.resolve(credentialsFilename)===credentialsFilename) { + credentialsFilename = path.resolve(credentialsFilename); + } + + var settingsStr, credentialsStr; try{ //read the settings sync settingsStr = fs.readFileSync(settingsFilename).toString(); @@ -248,8 +297,16 @@ exports.reloadSettings = function reloadSettings() { console.warn('No settings file found. Continuing using defaults!'); } + try{ + //read the credentials sync + credentialsStr = fs.readFileSync(credentialsFilename).toString(); + } catch(e){ + // Doesn't matter if no credentials file found.. + } + // try to parse the settings var settings; + var credentials; try { if(settingsStr) { settingsStr = jsonminify(settingsStr).replace(",]","]").replace(",}","}"); @@ -260,6 +317,11 @@ exports.reloadSettings = function reloadSettings() { process.exit(1); } + if(credentialsStr) { + credentialsStr = jsonminify(credentialsStr).replace(",]","]").replace(",}","}"); + credentials = JSON.parse(credentialsStr); + } + //loop trough the settings for(var i in settings) { @@ -286,6 +348,32 @@ exports.reloadSettings = function reloadSettings() { } } + //loop trough the settings + for(var i in credentials) + { + //test if the setting start with a low character + if(i.charAt(0).search("[a-z]") !== 0) + { + console.warn("Settings should start with a low character: '" + i + "'"); + } + + //we know this setting, so we overwrite it + //or it's a settings hash, specific to a plugin + if(exports[i] !== undefined || i.indexOf('ep_')==0) + { + if (_.isObject(credentials[i]) && !_.isArray(credentials[i])) { + exports[i] = _.defaults(credentials[i], exports[i]); + } else { + exports[i] = credentials[i]; + } + } + //this setting is unkown, output a warning and throw it away + else + { + console.warn("Unknown Setting: '" + i + "'. This setting doesn't exist or it was removed"); + } + } + log4js.configure(exports.logconfig);//Configure the logging appenders log4js.setGlobalLogLevel(exports.loglevel);//set loglevel process.env['DEBUG'] = 'socket.io:' + exports.loglevel; // Used by SocketIO for Debug @@ -308,6 +396,20 @@ exports.reloadSettings = function reloadSettings() { } } + if(exports.soffice) { + fs.exists(exports.soffice, function (exists) { + if(!exists) { + var sofficeError = "SOffice does not exist at this path, check your settings file"; + + if(!exports.suppressErrorsInPadText) { + exports.defaultPadText = exports.defaultPadText + "\nError: " + sofficeError + suppressDisableMsg; + } + console.error(sofficeError); + exports.soffice = null; + } + }); + } + if (!exports.sessionKey) { try { exports.sessionKey = fs.readFileSync("./SESSIONKEY.txt","utf8"); diff --git a/sources/src/node/utils/TidyHtml.js b/sources/src/node/utils/TidyHtml.js new file mode 100644 index 0000000..5d4e6ed --- /dev/null +++ b/sources/src/node/utils/TidyHtml.js @@ -0,0 +1,41 @@ +/** + * Tidy up the HTML in a given file + */ + +var log4js = require('log4js'); +var settings = require('./Settings'); +var spawn = require('child_process').spawn; + +exports.tidy = function(srcFile, callback) { + var logger = log4js.getLogger('TidyHtml'); + + // Don't do anything if Tidy hasn't been enabled + if (!settings.tidyHtml) { + logger.debug('tidyHtml has not been configured yet, ignoring tidy request'); + return callback(null); + } + + var errMessage = ''; + + // Spawn a new tidy instance that cleans up the file inline + logger.debug('Tidying ' + srcFile); + var tidy = spawn(settings.tidyHtml, ['-modify', srcFile]); + + // Keep track of any error messages + tidy.stderr.on('data', function (data) { + errMessage += data.toString(); + }); + + // Wait until Tidy is done + tidy.on('close', function(code) { + // Tidy returns a 0 when no errors occur and a 1 exit code when + // the file could be tidied but a few warnings were generated + if (code === 0 || code === 1) { + logger.debug('Tidied ' + srcFile + ' successfully'); + return callback(null); + } else { + logger.error('Failed to tidy ' + srcFile + '\n' + errMessage); + return callback('Tidy died with exit code ' + code); + } + }); +}; diff --git a/sources/src/node/utils/caching_middleware.js b/sources/src/node/utils/caching_middleware.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/customError.js b/sources/src/node/utils/customError.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/padDiff.js b/sources/src/node/utils/padDiff.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/randomstring.js b/sources/src/node/utils/randomstring.js old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/tar.json b/sources/src/node/utils/tar.json old mode 100755 new mode 100644 diff --git a/sources/src/node/utils/toolbar.js b/sources/src/node/utils/toolbar.js old mode 100755 new mode 100644 index 07b8649..eaa1d42 --- a/sources/src/node/utils/toolbar.js +++ b/sources/src/node/utils/toolbar.js @@ -7,7 +7,16 @@ var _ = require("underscore") , Button , ButtonsGroup , Separator - , defaultButtonAttributes; + , defaultButtonAttributes + , removeItem; + +removeItem = function(array,what) { + var ax; + while ((ax = array.indexOf(what)) !== -1) { + array.splice(ax, 1); + } + return array; +}; defaultButtonAttributes = function (name, overrides) { return { @@ -236,7 +245,18 @@ module.exports = { selectButton: function (attributes) { return new SelectButton(attributes); }, - menu: function (buttons) { + menu: function (buttons, isReadOnly) { + if(isReadOnly){ + // The best way to detect if it's the left editbar is to check for a bold button + if(buttons[0].indexOf("bold") !== -1){ + // Clear all formatting buttons + buttons = [] + }else{ + // Remove Save Revision from the right menu + removeItem(buttons[0],"savedrevision"); + } + } + var groups = _.map(buttons, function (group) { return ButtonsGroup.fromArray(group).render(); }); diff --git a/sources/src/package.json b/sources/src/package.json old mode 100755 new mode 100644 index bfd3f26..fe98e29 --- a/sources/src/package.json +++ b/sources/src/package.json @@ -16,8 +16,8 @@ "request" : "2.55.0", "etherpad-require-kernel" : "1.0.9", "resolve" : "1.1.6", - "socket.io" : "1.3.5", - "ueberDB" : "0.2.15", + "socket.io" : "1.3.7", + "ueberdb2" : "0.3.0", "express" : "4.12.3", "express-session" : "1.11.1", "cookie-parser" : "1.3.4", @@ -55,5 +55,6 @@ "repository" : { "type" : "git", "url" : "http://github.com/ether/etherpad-lite.git" }, - "version" : "1.5.6" + "version" : "1.6.0", + "license" : "Apache-2.0" } diff --git a/sources/src/static/css/admin.css b/sources/src/static/css/admin.css old mode 100755 new mode 100644 diff --git a/sources/src/static/css/iframe_editor.css b/sources/src/static/css/iframe_editor.css old mode 100755 new mode 100644 index 2824a10..451ce80 --- a/sources/src/static/css/iframe_editor.css +++ b/sources/src/static/css/iframe_editor.css @@ -95,6 +95,8 @@ body.grayedout { background-color: #eee !important } font-size: 12px; /* overridden by body.style */ font-family:Arial, sans-serif; /* overridden by body.style */ line-height: 16px; /* overridden by body.style */ + background-color: white; + color: black; } body.doesWrap { diff --git a/sources/src/static/css/pad.css b/sources/src/static/css/pad.css old mode 100755 new mode 100644 index 49a54fb..5764c5e --- a/sources/src/static/css/pad.css +++ b/sources/src/static/css/pad.css @@ -189,7 +189,7 @@ a img { left:0px; right:250px; } - + .toolbar ul.menu_right { right:0px; } @@ -216,6 +216,9 @@ li[data-key=showusers] > a #online_count { right: 0px; bottom: 0px; z-index: 1; + + /* Required to be able to scroll on iOS: */ + -webkit-overflow-scrolling: touch; } #editorcontainer iframe { height: 100%; @@ -1029,7 +1032,7 @@ input[type=checkbox] { left:0px; right:100px; } - + .toolbar ul.menu_right { right:0px; } @@ -1059,10 +1062,11 @@ input[type=checkbox] { #editorcontainer { margin-bottom: 33px } - .toolbar ul.menu_left { - right:0px; + /* cancel non-mobile border (will be defined on ".toolbar ul.menu_left" bellow) */ + .toolbar { + border-bottom: 0; } - .toolbar ul.menu_right { + .toolbar ul { background: #f7f7f7; background: -webkit-linear-gradient(#f7f7f7, #f1f1f1 80%); background: -moz-linear-gradient(#f7f7f7, #f1f1f1 80%); @@ -1070,8 +1074,18 @@ input[type=checkbox] { background: -ms-linear-gradient(#f7f7f7, #f1f1f1 80%); background: linear-gradient(#f7f7f7, #f1f1f1 80%); width: 100%; - right:0px !important; overflow: hidden; + } + .toolbar ul.menu_left { + right:0px; + position: fixed; + top: 0; + padding-top: 4px; + border-bottom: 1px solid #ccc; + z-index: 10; + } + .toolbar ul.menu_right { + right:0px !important; height: 32px; position: fixed; bottom: 0; @@ -1091,14 +1105,14 @@ input[type=checkbox] { background: none !important } li[data-key="showusers"] > a { - + margin-top:-10px; padding-top:2px !important; line-height:20px; vertical-align:top !important; } #chaticon { - position:absolute; + position:fixed; right:48px; } .popup { @@ -1127,7 +1141,7 @@ input[type=checkbox] { line-height: 24px } #chatbox{ - position:absolute; + position:fixed; bottom:33px !important; margin: 65px 0 0 0; } @@ -1248,11 +1262,11 @@ input[type=checkbox] { @font-face { font-family: "fontawesome-etherpad"; - src:url("../font/fontawesome-etherpad.eot"); - src:url("../font/fontawesome-etherpad.eot?#iefix") format("embedded-opentype"), - url("../font/fontawesome-etherpad.woff") format("woff"), - url("../font/fontawesome-etherpad.ttf") format("truetype"), - url("../font/fontawesome-etherpad.svg#fontawesome-etherpad") format("svg"); + src:url("../../static/font/fontawesome-etherpad.eot"); + src:url("../../static/font/fontawesome-etherpad.eot?#iefix") format("embedded-opentype"), + url("../../static/font/fontawesome-etherpad.woff") format("woff"), + url("../../static/font/fontawesome-etherpad.ttf") format("truetype"), + url("../../static/font/fontawesome-etherpad.svg#fontawesome-etherpad") format("svg"); font-weight: normal; font-style: normal; diff --git a/sources/src/static/css/timeslider.css b/sources/src/static/css/timeslider.css old mode 100755 new mode 100644 index 9f4e468..2756a00 --- a/sources/src/static/css/timeslider.css +++ b/sources/src/static/css/timeslider.css @@ -232,7 +232,7 @@ stepper:active{ .timeslider-bar #editbar { border-bottom: none; float: right; - width: 180px; + width: auto; } .timeslider-bar h1 { margin: 5px diff --git a/sources/src/static/custom/.gitignore b/sources/src/static/custom/.gitignore old mode 100755 new mode 100644 diff --git a/sources/src/static/custom/css.template b/sources/src/static/custom/css.template old mode 100755 new mode 100644 diff --git a/sources/src/static/custom/js.template b/sources/src/static/custom/js.template old mode 100755 new mode 100644 diff --git a/sources/src/static/favicon.ico b/sources/src/static/favicon.ico old mode 100755 new mode 100644 diff --git a/sources/src/static/font/config.json b/sources/src/static/font/config.json old mode 100755 new mode 100644 index 34231cc..f9c2c3d --- a/sources/src/static/font/config.json +++ b/sources/src/static/font/config.json @@ -66,6 +66,12 @@ "code": 59393, "src": "fontawesome" }, + { + "uid": "85528017f1e6053b2253785c31047f44", + "css": "comment", + "code": 59448, + "src": "fontawesome" + }, { "uid": "dcedf50ab1ede3283d7a6c70e2fe32f3", "css": "chat", diff --git a/sources/src/static/font/fontawesome-etherpad.eot b/sources/src/static/font/fontawesome-etherpad.eot old mode 100755 new mode 100644 index fb65168629fd9d9a4bc0e32665b1055db61af150..284149e2ba866f9df6568504b66556485c8ef225 GIT binary patch delta 504 zcmX@o&v;`3BU^+A14D!RL^d;)=qetgi4LplLm3zt-T-k}a&BV51y9NC3=E7eKv_0!k*UFnLt-{5} z%*4XP%)`Pf!Y(4f&L5G&7|^mOrQ=x}V_f2r1eQcK4i-ipE=DE}7G{1{J~0j%8DTA> zNg{$Mf5KW#DFh0Tf}lI4^xAgto1m>|$chXf?UUHs3PkWMnj*{KV`Tqv__;=BpTiD$6X3m>8`#zp%W{$ibeRpPQSS LSF-t_H8T$Yb3lL( delta 354 zcmcaHf$>N`Bij*o28K6o6WPpIW|p12HPK;peGmgs1c<|ua}x_Lct~z%U|@6sVz1<~ z5(S_*5LkTy5?pBo>A4*fCPXqYSOdA-1?h>!1we)XP#&b8BR!`w&G%TG6axd(1O^6! z9T};KDJ;1!pE58QdjRFlGJpc?_nA)t`3*q6N=9x;#VO7>Ad|s(36OY_lb@WJBA)+; zfx)B$$S=uFtSDf(&BG7m1H~8=@)C1XzdMwlWneIsVPIg6Eyyn}kw36u8Uuqx4balu zf}+%dyV=aG3=D1{hgCB$GIvit!D!EDKAD5bk66JXOiS26su?Udr-Fn`8qvN_yh6(ghN WWG1Vk&1F{C8JQRuHiz0U^8f&$?qcr% diff --git a/sources/src/static/font/fontawesome-etherpad.svg b/sources/src/static/font/fontawesome-etherpad.svg old mode 100755 new mode 100644 index 4033c4d..a64ba86 --- a/sources/src/static/font/fontawesome-etherpad.svg +++ b/sources/src/static/font/fontawesome-etherpad.svg @@ -1,7 +1,7 @@ -Copyright (C) 2014 by original authors @ fontello.com +Copyright (C) 2015 by original authors @ fontello.com @@ -62,6 +62,7 @@ + \ No newline at end of file diff --git a/sources/src/static/font/fontawesome-etherpad.ttf b/sources/src/static/font/fontawesome-etherpad.ttf old mode 100755 new mode 100644 index f2fe398ec9f8fe56f220792e119b7014e8f54bf9..f596b4fe672170314fa63ac5331415ad8eae5971 GIT binary patch delta 518 zcmXAlO=uHA6vyA2*=E;d%?1pjSftdtk%}M5X4f=oq991TC|JcJYL;Z1h}mRGLrklX z9BRzLVsyQDups21y{;faZyxMAk_c3%2Qe$nAUyfTu`j3eCnCaT-T^6oRu($?o<0Gvprugq)H& z=MayO?@*RXmHAm^?|#q< zlKUw5m0H2P{i5~+MgwD2)3$z}XuT)@41iy8YI6kT1h^SmD z;uFcdraSgsJpT;MBV#otRS6SPSqKv Uy~xxjl*B^KwykQz`<~|VeFfh6Ru~%|g zi2_g@2&}#U39ht)^xTdK6CxQHtbttag7n1V0w6;GC=b%lk)BhT=6ftoih+S?0t17= zj*QgA6qekVPZ=1DJ%I9N85ybdiR|~8PXPrQfC4HRxg`~+IDsq%<0U}iNlt!pVv2bF z9|i`K4j{iIH?g9C;WiIHkPj4NP{>QnP5tgrewKm3REB|pIkq6bxJ3TIhG`587BxUi za|?=63+`q!w=yuefgD!Nz{uRqIDvtcfrF`vX%A4OXW~CYM)S!AjE;=vn~NB487hFn z$O_6eJ`-KtaA14K)bjf2*Wl96BwUnz4e*@454@-u1uoZnS%|F?9dBj`C~f|GdN?>+ndnhBl^O>}wuq1_%ha-jfis`?S5C zlQReiHSrhB1pxtbOGrDGws$oBGJo&=GJhFByf&=BgWWTY4NNXg6J$ZDFl!AEUvh?! zhwvwBk*O!4ZP~=i^=}WjODa?C8|Q!6&wMmX%;_%H88#qf z3u4X=X_K23T`c!0Hr~J<-_zDwT&jhDM zE%1?^&yQDy*#s%51678>DkJCn;ee17D*QP^Dw=b~q{-?4h{T9oe>JFP&+kB!7}(Dq%MEQrQDs%mOiu2$X-*~u$7hosn5n$ zZL2brM6FboNwmfX@xV z4b2V8jS~wO5x@IvDZ{Sab>uNEy@Tob785dA?}GMkvPm&{TvPb@5;$<6+Z^Jh*i@z1 zq+W$l#|3SjNgXUU7GNnCm}{Y7WqK}G9iYoCS?8zHfD>dreoDK@Ak6MfHj^Co=b4`c zM6N}i;%c?2ja(KNBV3Vw9IUa)TrP($!grDCI~a)6MU%mo;)$alc==;ze+viJheG2U9e1{Hs3Gfj% z@hC#VvNdk2iHCiV&POcMMR8;k-(V3~)M$eUgmTib%i4}>0|A15Sg&QjvaTnXJ&Z4E zpt@2CSrtueuXqJUq2+q9$K?8tac%|!tX%)_YKqIriG}R;OmikH$`9YCw#EO|(%jYk zQ-mYgXyS=`nZ*7Tie7PO$-u~_X#}EfbAqb-Z#BmiQE}aH8%80d{lmxgGwQD-uR7|w zWv(jz`J0UE78SraTKr! zS@@Vz*vg0vHWlOuUnyVG4&|zshm)YC>zC+a)y6Ftvg39tN4C@r=<#FzR-{VyV_;93 zQlmY<*9JOyR*Kf=ViE4Z@n8pPldtflO;{80v+!(!M$G&*qTF4HNs1%T8qTzN;J+{C zMB(Amb+(=?$^8rbL-72#u|LD=)^E|(YIxx7Z^jZ{$JgW9`L`z_+QqHMK)e@=#SC{% z(#%Z4=$-8Spb{fmBFt0_-N;|Z?ksQt1YSZI;Y^WxUoMmT~7{x*q zZNT#ow~xum7cM8A8+E#E_**CeEdrl{f?*OA6-m7ab1Rw~ImlznjldKyapca9Ec!dh z`e|X`#7CAdU= zM}el?&By|PfPg0VkHlyCO@U+_+uS#4N_lQ{rg;%)MFjQQapWlKG-xPyJWjuANM{{6 z=}PuGFn%0ppI9$Sg~y7mTcv;L)DHyC%h^)MO-#U`*1; zM4A(0QHA34jAik8uwCj0c*5v*SaKHMHo%FOVIofAluij9RK7dSt`JvhHkO+z5hQ?- zT|t*QnV6SOxok3Sil|E$df()0H3JGb_YB>*Fi zWzEWRTc)HSGS+b2>J|-y(~8lUK*gwaT8)au`7%r8ZU(Z>Nit4nR3M}xkv2|JQjd^e zIx)OQk%~+wBor^I;WcLy(uNAd!;tVVc>)y$dn?lw%f7U$)oKzEsY3QHpM}P0X^sYS zN4>+qu@pOwsyO0>Oo(udW0Y{TBcLvmZ#$ejer;8z%_>Sd3#yeW3OeM_W{txPS08fSc+LJVQO)vhScxm^dfYBBg3sq{UThErv*FEJjJ;l;PIj=sn)%FjC=LUV+mXiljf|hrSi*$mr@g|2W1VE$ku?m+! z)9D<}zH8ZU!%8g*B5{*>@5!Szj~NghOF+XYWA%A$>|wRPH!M0u5m$l8t7CFDQX-AIsUF_cIX>R%bCz{h={EH`u7itKL?#C#eP12X*{vOgR@S69q2 zGKpSmUv5`QTxVBG^6Iz0Z90kOxM>DMW{#HJgrQCJX2%db+Y@C(uTmVB`mho78gVtF zWA=l>?cnn?xABK&CB+rAKYvC=M-1gR#YBtm)LRiHpcZR@6HC{?uq^2TGL}Xw9>xRvMO;6AOwo8^60vy%5hgn>uqpqMc1T&JLdt>Dsl+!gLT^y%}Dp zXWnPBa-4`dK?1g~1h4}heZ!vws-tM_D_VbgU+i`Z)5x|3KC4QAOQ# zxpKZ?8P0pCGM4D<8R?=_{ev&?8W4?0(Z>J4C^{$LKv>nN%cB z|9)1PMPtAnG%hl+qJBF+9^Huq{#Ha8J|GWWbiHvHIVRCK7LrU5!FcDlJ?MLHw(zxz zbU13rNFLlPW}t9(?1g2{H0or%}`j4B6U`qN*@ZKLu9e z?6Bd8XA5T3`GgYPwm1xokG3A55<4Ef!RamP)00`9b1%uJR7Jyy)2OrFZP^-UFNt^p zme_T88wb2O-Gq!MaS+)u(S}_ot4F2{TAnTs9H^gawzRdL`dIBXF(w!sz2+WBs?Zdm zgGzG5Oq-D4a&KcFM5F!7fpbh>ebe#^ih2^H0hZRBI)*_Dsoof>gE3!l%c4+<3jZ`Q zG9)@$ z1l$76`rF**tZy49#7?hg9!_XuW5(UiC?=4(ljltgM_H6aRx(`_TP~PT1AX^p7&46f z)_>I%byFa=E6FXH>J)_-LXuu$8}2ZN0ApI7=~X-Hu}3@jC<~r9Ft-5W% z)R=_88cT~)^$$OGv(xev$8TZ|xb<6B)I^F0#;J=x{H-UKx>dAVviA2LMc;k42i7#3 zsqEMePJbS&-wLc&G*N5Ns(>0e*i#Qt%W$`~$o!-a#iCU8SzIh+OpLdNFToBy^&V2v zUXVy+k+ktp)%iC?WP7(G0UKaGfi-N`?t2>dOZ}U026x@#3;4DB9zt&2w4*uQucoHa z(_C9jyPV(7SP@DuY4p4Tc5v~hi@=Bdhz8;2^GPi+tkJ)D-ky84)-#p%yuy$nL=}-4ah5E{sJk5Pt!TFAXNTq-u;zg3C6(8geXpE?wrj2 ztc2K$8rOlLv9>)GPZJ#G{2kN;oYCP1bwlZ+zuW661X^v8GQqgASd4T$nRn?3+ zRMr4!qO>cFbbgjeoN;+)I+IF7k1qF`C|fOavRJ;=5Br24$xfu+C+TJWu6Cs@N}xY^ zaGM5=W8}l20thPjyFxS`0RSCX6B zYDn}<+)k3dir>VHCswgEnc>~eP^V|<)jetgCZAeNruLf=$9gJs{(aS^EVA^Gm zI(xMQeL$B1h-JayotI#fB`ws|RaDg7e*|p(JTHaVT(ez`Y+!CJ+GEdFi*&Y*umnUC ziMh)SGHOsvVN&R1XnIM!Dsig5ErMaJDw!$1T?eakP4wxQVT1gju_94>$q*z8EM@_R z5$Ae!Xj!hkzX3y{cD(GAZ-2LnwR0`wy1F{(9(5U>_uU!h2ol3>&VE+ICVsrZ=Jeu$(!hvmzWe|0osAaUojI>bXNTMY&c5$&FR|(eQoj3~4 zgKV^#&81bpSI&Oot9I^fa(&SHi;&c+!no#iFj8);JKA8s@S!FRSU~$}h8#*dL8~U4 zCYj~WP6Ncek0K!vOY#XqwP$tC_d>Kci6Ly?f+I_Ii+eRknb>s*IUYO+07@KfI(j|@ z{kgv$7&W!hr=f5mKl=Hr)G-y^vV7i*L$KDkOmVF1uT|Jz>cD*U! zxVKi2#wEvj(x2^@?L&oSV?Sg9vSLhU?vabw_C;N}xZqN6e`lQU6%VM~rkjwzIS`t1 zW$L-;@YT{+ z$x;b^rjrZHg@xHx0J4-Rx+YJ}TW*h-u}|;(o9!*aC2FuZ-kALdthWLul00liEgC>U zCE05dUi2OTAwJoxd#ebu<{vD_EYcE1;O;$9ZHIW%pLl%4YfC_|!n-E@TZMD8lUMKp zY1KS#)%J66hRjKW-_;(%b=Sq(wyX4J9xN=$e|Mof@U{5&^JJq^ZDYfZfq{{!&-u1- z^t*4*tga4Ybro6P($bHoN=V9natS~yyB%?Q1oqe?UR-&Ea-v#|zI}>qdR6%Iew`lt zwb=9dt=Q^}ti|=(*FlDOcZRd3?es>6^54!H(Wb!DbvaCdkgvOX1MKj>|+2zypqrw zRndjozPB@@+c94;!(XVKKm1oS-o1--$S=i%M6VQvBM|+35_quBZ7zAd z-J%)~jG!cXvUcGNlt40%|_y-F~pA_+!J-SvMdo#NS|>#2u;I;kz)(XL@I z(|TBatg$P)z;-Ci!a+aj4q=L*=`aQrVqw zXhsz^qrr_ZGB#!!=r0UCio)SZuRa@8UmvCi`T1g%FJXr1iOlc8L`liG2LU^a`@}ij zhSc@Q(+&62-zCuM#T9T(P8NoV&C&ZQM>EL3Dns%2h>DIxXDqn_L+ni%VFT_Z&ygUH zfeGZm@59wHUxei<(HKf9xuT@aF`B^g(#s66`?YbXNDGG0c)(ZWH)#2`inH=Gd1C&U zl}&)A+O{|V$EWQoZi`@}uW|amr?dO=I!#bk_eaw(_jA%LjG17mM|D( z-#bc#pT*6=?sEPxtK*bjMBb^2j6qx#QTqlhWVwd?RQ_}#?^J2LKor_ z7bC)u3^|AvDLUBl3%_^L%s&CT6gqM|C< z9AAN;jw_El_iEs-SkO{VMawukw!9N*08(_W&_g5;G&vhL5;Q{ZZUMMt1J*nncj?aDs6WLFsw zUBu8UTgpv27|uOmp^;@cEjSYf`eO|7jn;XDh%U`!5&?*jkmrnWXTWlHweEO?8{5R= zUup)VVG0@%`jwj_jJ&#GeqR1<|AbgFUJmctIGjQ_UuV_mqGR!F#&^-+s8@;Ud7G^I z_Jj4G+mOC3H{eU7w?)6b;~b4SZy4WX*fEC4m#c)GsjLS%8Q#jdIF!kS%~5!n-lEcY z*ZHt`p#XBp6A6Zqhn>03{d$38GJREJq&RYgNux`^@o9%c5U#MwQoZOuOH z*aC%hj{u*mL#wxNCtin<1Ost;_iH;sQg^|+r#$}Jr#_$Sy&KW38#yDm4@#dcZnn!v z!mZa{aIdW07`#uWwv=@)P@9C;QNm@(Pwt0#V&F(zkQ(Ja(1InC-Y7ZX7OtvWs8{l% z1gRLWgCh9ZOKmv5?Re{mpba_aQTa)?v(0G=pORkEv_oi{}Ay|F;eIY-=LIF}i-)QmMkua?cMthXCcipzY>B|z%X`ACR! zY`Gz45a`yt@bRKxXS%#pP&KuCT9VG80@J}%upzRIe%_jTZK+nAbn4+qqBV>0`IOue z6jJFFyiS#T?(%-@^Zj}=7vYw3(%SnLgG)*vY;nA-TH@Zo|rp{&fKQpl^5)F%4{ie4%nf?If(U>k$XOpkKSnIIOhmtUc6Fjc;x@+Nw1`eLV z$$Y0^Q_~#RQL`Gxt&THFSqa5pY1HwdZ8C^kxFR0e*DFhD}YTWChnvHrJnj6g^FHD^i3Yr0kx0r95ko zx|!+mZ<8AKYgpA3MGf7XxkQ#+o+2af(IpKk{elGp0=u$eFRbvNJmAAke=yau&S*Ut z5{n37BFJsE-fro&@L-3Dh4zs70$jK-sTDO|)(69ild(G%z928WxS^)}z~PF;Q)Ehh zX2WP3+y&d}v9?|J1_!#~oRpuDJsNKeZp zW-;@y7gLmfjDw%v5Rh!fUk6jtTCH#o^iY~H_lalQK)sRbbdXYyQh$Y=MPAnGBtF8> z+YGdqMtK}h&vFR zlXLFKBDFhuUAxl=}@H}UI!bT zp8XZ?1=+zGuH>R_biMggw~9LpR_Kl-xY?_2>D&&oBRSRV8~0O-LR?t)f= ztiAZ)qh8u$t?&s{T`8Pz`WDs7`JLyuz^_VfE%e=9BX@;31?Divl|Di9!%LsrZms&0 ze>qzX2i4#JWA^i`+-}wuaMeae?$PYAddr9SkrDM|OWN=R9QfjUTz&mHAKQILz!(D} zk*&SA3FdR`eZR+wuCx8GM{nJ60a^%8GZ;S_+%9Aw|7_LgZOY4_1diR5P!%%6qaEM6 zTClkSSVsHAnnEz!ofgvRp1By-}rw)bN-*+>rdVYP;fQct z(hCdIn9|DiUXiQ4arz`%E8w2A-r^BSmGfZcKc?NLy)&J_wn08o3?4G?D!F=53NScp z1M&XIowj7_?2q1IuDU;V%DoTW5z613wnd3{&XZVNu%z$Q9D!tQ&p83$ufpeT(mp$F z;=XsC!Ge9EM>eOQd{>6+7M`|ytqy{0LvzIryM?TLal$nK1ClIr;+(E&J|+Wmb0Te8 z`uYhS>(1aLt-3-xo0CtmUcOCUJ}&_yi|KOF(l2A1iG}?+B(Jl%Wu9eqZUVK9#F(4j zwz3~pX%nMQB*E;g{0@NOuCBxEh3^%TC^ougKdE>m1Y!W9dZ|Oo(@4rtN>fBS ztKu!kI=+231#)`dtB}5)g-x7BLM9V((233pNQb~trc*!nX3y+z(0z<}8QjT>o)$l^ zM#5r&#mUkR?J;SV9KPpIZdue!1Ala!WKF{;1V{80qfl9{p#*Abeqf7hB3M1@JNsfL zcMUuv4efH%oN9ad<_{*#p9g5OZR9>YZWltEe_NSbRH<;sUxWk-jpcar?q6!kM`dQK zGUM01v}faFbe1c&6Pfp08al}b_9LEm)#h()4+VV;)QD87z_7+u9c*vgyS9HdV|N^M zFQ>b6)}3_ldz5qd-~)HsINFepr$XY#dd}2cj-4>?zQv8rA@f~}i^>k@$rH(9x^$`2 zZPvfg$EXNZhc41>a5UZZC5Tn%3-RUmYf(1WND||U#R{vavt()Asce>`lFOXD=~g0U zraO-le`H~fu+_Sxp)q$?qWDBQUA@j63XhcTYw}00961001fE01f~E002hpkrXQvQe$mlZ~y=ShyVZpIsgCx zO3+A=Qb~WI001z!O~zgtXk}q!001Qr0000r0000s1a0Z%XlP|&001RO0000W0000a z2j2tAXl-001Sh0001V0001VWEXGzZDDwD001T= z0000W0000W0NV@?ZeeX@001UL0004*000AB_dqds&2VpXbN~P+-~a#tng9R-Z6Cm} zmT+=qZ~y=)d;kCdWdHyGd);dTg?OA}U}WxQlS=_77BFWH`k%!R#T?AA5Gc$Dk^=zq zA`AnQhyfuPnE(F|Qt*NSL`yJ2)dK+|8^eeP0HFc~<+H*8)CGU|g)L*_Fvb|00PA>o z+725#jKdI|FoYot!{RJqaweH17)UZqW^>L4*o4f^aFWIBE}T7KW|o*RONJb>XUCD6 z{clxE77oT{_MAOxRoz$Jy8nOw$M^rYIG*F){}+0edO4kI=X$u+oNrhe?CVNJO_k>h zU73(6N{M7PS1Es2Yl)JTyP#gfda7BsoBg?Fy$|d3tfkHG)=jW9`nYbsVrdIir$%1V z%`afzpSgY8HS1MVUpV6S9n-8m<4)1J{%BeG#}k@mX?OwiKRH*OHE{g<@4x>PJ%w~o zPUS+}Dn>_dENFOn!XX`YqQd@C$?PgfK)DDSSao2lmr{RABw%li(b4C37vByskV1VW z>kPctP~pApR=n{i0^(}fBQiZy7^30jI zwY_nhZjx{$%p3l*k^(pfHmc&;?qPslD<0Oi7**?Jo#Sxj-240KcDj)ZauF`YDc?=B zhD=?eg)V1}#jdFP5sMAXik3vNha;s%?d;wQ8-1#X(@>L@6Xn z7F25*1Vy`AD`RhR739h}iUpjS%^+k`R$r-h398{6fwn|^qu(O~&~)om@~+)mO0uL; zkqFhIEI?a(*7V7;=vRG`A^?EY-gr0G)0ThLBLU@sV9UCxO(1%@qI%qb-P&+xt4uD< zP1t{+`T16#0VHGve2E8m5s0YS{Sg6|(zAMMU2$vFlGO+WYb>{;@vd)!Rf2cz5^oZV z;#)zL8=sHqf}B~^TW^;%1K9rX7wpfKOwMy@cR%>c+mB$VFW47EmRI_4;Wn20DydMP zB_J=JG;=B?e&CmM+1Cul;G~0L2{!p73O->)&S&+?ai|V=j&aY(mfAW9Q z95^;OIL9kYP-nzRcagZ2vQPn~3Q z*)9n6`D?6>x@bz`C8$01-SSkIo#}?oRBPdH%U>KBZS%J$1D8eLPLDdVW5iGf8!tWj zkP2=C=0UJpjR-?fy#dsS#+|^^D2z6o!=u%VJT(wfpp~ZizgI&rk z4cRa^u%R#vYx&NRL^eaov5ljR@YpQysu9l)B*b)aVs>3ihasiy9x*31) zxuf5{n;d@TP8h8hH>{j1&`c&Vmgm=wH~V+dvF`2{tO)o*#!O?!$jr=0tbe4xoVCKy z2(gTaLac1LeHTcXm%s72=4JyG)PrM z8hK8BHk;H4L5SfpqJoUDkrAajL4F97kyytqrvXON=tf=*#E>E(+dVZo*_)J-{rRY= zh|eG${O#Ynb!2pAW)xRg?N3HXI2Ohqu5X||1ZTD#b!g?NgAvY>A98;!s5j&2Uq^=u z=(EwkX8h<;B#m@Il8I9e1gwe{d2R9MQ6q2mOC$W3#L%WTU1D0->t7Yt2(6s#!89rV*h}g*R3fPG!naO_OUf z3)#nTm2xHW=$Ol+BbhSs7wTkW>+o=+ zaqhs=+oA20A}`D#n`H8&qy`t}T!uW!ZcV%LL*&U*oCobn9rg1nW>+?C7#*o5gR01( zUCA)$QLZt_QO6B`lt1USa+_a2+;Q8F)~?x^s$3iQ-f(|KYX7Ryfi=g!0M~mB*t1sE zNI>ZwGk%|k8ya&rlsq|6kvh}2Py0Iq#~xOy9#J$!5E=_JcSoTmvNIS=7k2NTRF2=U zXLxmbPdUiRjy~+5MchZfV|BZ^3i4>2VZC*0hWh(@I&;akuxWTjB0Gv&B)F|MswNsH zu)x(($5MYSwrEg7KY-0jU{P>2;{B-xp~HIfaJXfn1Z(F?_~V)65_PG=fej~Xyp zE;rtYq|@az$;0a%Y>FY$KjPZ<#!ZO4yW{bH3`BoPIB$tb?q3`Gtbz~5KCHex_NiSo z_Gzdrc!Bra(B~aip#dlIX*}Y@GO+h!M?T!grlWQVI%*$H2e259Ero?}z(P2Oj_q#G z5ocxOm~Q@mqvK++Xzin8QMl~d$E1Ym)&HSyEu-TK!~{2UpJsY>_)`b=?ASClI@H&d zZVi8`6!pqkXEXM!^)=;aDHd(YU9&#Ov~3w(j{U?sb6kthFYmW6h}rv^_0+QGPb%^O zW@ta^O1Ghz4LDYryd$aePhPwaKB9K(;zQW*^0HU_tXz!PJ@8jCI0=J5rX7+w^&B{_oBI1AdQndF$^gqnYmsdLmYMHdxF3{rT+^b!{ zy~Xio6kRwa;7?a*K#}K%oJG>-UD8iEH*(E~)Rv7T$;J<`f|D4+LR zYg~*gq7|QEbZ;0L=<7_j1{9vrjrK)!-EOHJ{+|hd9+#@)qS%sY`d>*od`3p96&Zil z$O_KW_@|FaxrjF7ztFeHFB~71z_?+6n`HQV-Rf#FpN@reuY{M{Zy8qbCcXf zD+tRw7R{k!HkO%7RzKsS75B%s{5<@a|6d>03d<|Q-NR()>LD`x>!w?Jd%3uCi;Xu* ziXyQKSm!C{TzdE8K2M`%VY0oG`y_vNgwcD)!5coYa>)Fvtr@F$jiI3~|#MLp)NBK^lzwG>nBS!UgmLdj`QzB_&E29)~XMzmPw# z)Vqh$?a{aq9@Ka(tSFweXYjd7Gzl;9(PZAD0bh&Rikv8MQ~yX9gu%*wpDXuYxdU$CL8M@MuyKBu3W|PVL7Ojv&dXF!oka} zA)Z*tw#h(magD#-50FSFyb{Q?#Z0bPF|eXN+^U!!m6v%!m0-AEhMt36qY5Q0RtJ?q zkf|!`p-n@puH1Qi)aUVNW3-M6_!GtoT9FlU24Dr@2?3Bh1Wg(__2_@vu0$|mC;`)G zk9SZ^PJ~VE zeQQ>9OeMW7hVP`+R$m#51|zMC>a%4@kmRA(tl0wjkSWCT;kJLVY){^3%GJNnZRCBl zS8GwOR;B{L;^0t(gOD6vXhScYW!raM!1FLrD##vsTt0ib6=z%ceg)(%)WA z#>2@#p-Invx*gs@dPb3+{>!9C2qk*pcgV3#ja~*hry6e%@5*l`h=xl{W*{5ST7@N@XXgkKH;c6RWy&EfAUT?yg<5}|ueCy-9dr%{P$t@rE8`J+P$IPMg@H7Xw(vqKRO{E40f#c z^cr5-JLTa4Aa#Gb^U)AlFNxI86M>SX9saF007l#!4-p{o&%_0j6iDQ^IQa7ov6~k~ zC2YVpcu;?Byw||eroIaWPdi9H-LYqcD6WHjY52&o{bhnfX2_jGh^~1 zu9v99j76f9)IeK5m782wiU%UablcWLkRP7Ay4-SY%it{#_^aUzN~A)>ZG*8Lp)x$g zYw6*h+&~hIZ1k44LQIP^XoYC9WLR2MNRu=QhDi7#C|a_6GS^m$B@NBIX>)C^KWp%S zzSe)qsXRpnQ62_4@#&HQg{~0urEH4>t1#AOPL^$O30quqt^>Ogorocn50Qxl?mXLj zNhx%i215A(U$R?Kg1wv5?XCT}8j=08ra%R>!}^#ffcx*+MIn+!ou5Hn@KqT%7fD~$+up|h1k}(rBUu55kUFfs}Rt$gp z(B1I7EXe*g)dE$E?CafavFBo*AV@mgqe&1{icw7q@9Ehc)-*GW5(q(0JQ@J?3Z4)9 z`~g|;j{bL5p!DZg_ypbvXklmhW0<(K1i{WgveHg8=yfh0lP((0B z^8+&@h>}o#i0xVhQF7RtLs7~i63dEc3UM^r6xX;g(C*lloU<8aCv3~IJxiiWVU7Oh zpyD0(#_?YX6bgZ*O0awWzL<1#%e7(X^GH+Ay8SCRho%LJA;4h*b5mh zTDwdF!LG;B(SxnTQyS6~6f&NQn*(DZ!_;hf*wp8A{F!8Ev9$0!c}ZvIRlLF`sUImA zG70yzT3JBdb@s6k`)^Oo<=gWCHSDo8832VdsRsdw*~I-heL$H00L|#!k^glm2zx zb&E+;lbMtRJ0HuS=^;vK$cOB3a27D-6*t=_OoylBHOWZ$<2=f6LQj9I2;>M^cmeq- z8u56*)HIq*#&iXrCWH8_N)?CQ_?E!xBi#L7N15_jsCG}v7>*P9I(W>lZ;>|G%Q(R`>QpQ^lF;7aY!J|#EEl7&qKYUKL3&? zt8kwnHa@$U53{t!XCjk&Rb9 zc4!24;dN}|dQs!21rRF(#i{*=_D>b_nQ5b7Y3IVhz{JY>*rCT9`~7~Sxwc+hTStPe zt(opw4NQbdjIw_`bse0K70~k}i=>WCmR+k_bh~MsvxENWjkgT!pX%lFo3E{p+}gqW z#VLV^L*KmSs>g4c;D>L2c*n+vS4|iN^22kQRWPQfn@bv~h#*Y!nm9QNxS((1y6Y<^ z0>MR`v;)_b=EhM+SLY3$;UqJp0b`sbx~QIQ5qd<%Kqr4FV)bB?fT}}*1LocIl@o>9 z33{t4l@AY1c%!&YxG3V8&hM#BekLc{f{Fo}hJ-n-8*ka*Hr|XOV*1T5U-<}o zC=6)o9(oQJ>vbNtqTcCDezLCg`&9T|vtin;i+pn+w-jG5KVRLz?O^fs+{X2*7SCA4 z%RFay%szkGAe*tk@d&kq#oz(6TC34+RUPS~=v0Hv4Wt_6E^%i00&fUWiSFHtRwOEF z!ckc!t7Q2ouSrofG0k>^zAniy4XT`S@6zQQz)LiQLEs;pz-dFg^fj-dc)unR0UN~= ze;~0&A~vqVN#SLjRUoR==*5DI8~>8G$a9Dr)7*bb#Es=#Jgg9g8&MW=%#Ol&ewaXA zE-Vu6arskbTygSpsNyDUi{gtL^P&j6VDM2a?nWG;iBUm# z?KMF_j?l|}3__}5<(H8Qi%gXqbFF)?`=Cs2sixW6&)KJ?n__%3_})(x)d z+u46vS_UORes+B|sSx*QE0tuQpRj~%C0njm5b;YjbT81-^;R@YU(#Q=Wenw!kYALKL7PP7)Ks0V98CbmsWf)bZCx zZ_R0zlJHVNRDj3|a>icanWUwj@;#GXow?h&rTC4}YICcQ)`6tgiFp`qHWAz+u_&mv z1NMvXK^EjH*=o{>cdr~Th@l#b4jd|+y5ineb1XGa-DxS z{ZVV0${KToRONjbHW-q=Z4cb@CKzwtLk{EO>jyic)lwlf6r#e+@rRGkH2(e*PweJD zk(C71gA5ULL9^s&G}u{sU^DjYe!|h+r)Xd)?>>mp==Dr@ubCPis;=ltwFbQ`HwI0Y zQCV_PA6*an6MhWi5aZSX`fxW>q9lJfHq75lr2A8g){aF#&cPtd!^hk-2)mp-U%cPR zB{*4yiH3^G3ojE{ZhY=sD=$1H^6<7ISIe13Z>9_tHtriaPq%g2>XvhVfgAYU#t&E{ z%a)l?LdT(<_%ov;btxbUmu*hrBCoki@#@Hb}ebn{&79FTt;qno%K z*N6MRqC4WqI?L;Y*ar)YNW?{hP(g*Quq-Nz{z}!HQ$~-kfnx<@K#o0e=SlXxo3HUF z&h6wKPl6S-;K9Fnh~WL?zK8b0z6bZikH-&x$2W;B_?z^7=kT~QdVJpl5A1V_KW_ZP zPxL*{J! zgEJ?z=~l!0f$9fdp)G$MC%HK@)JK-nUObhZ<$}Y;)X1v-a!*&b-7d694&PwfF6n z)WEpAKT(yv-PzPHRqpuzU2oCjjLbk7Q!sjt0mNCJ=&Om3?hk*zISu`|#)5?E$ z-RfW<5*_}I`2FE%Bw((-?y;4dLNP;zWBCE-?`Ry6^_YKSqun!JigL~(=PtCKZ6&XZ(^LZxADjsGPLkKT=(j$5WDPy z-r{fCPMrQk4c0L(#0$C)0C6}^`UzxPS5@=?Eg2!Ga>m8E@(H<%X%eby&Q(=8E?#2bfY)o8V^5Djsi#S3y?(dE4emlR>2tl1fN ztUMi#cx387jOba9TC;*KO_)4CsCo8E3hZ*f-MW9B^%}8IYYA~uXcmMapF9;c6zO`8 zIwXk0F+@&kNsqSb2s53rEs=OZQYCZN9jeQ+GgKI5fNt6u==z->(znP{To@xS`Po97 z-$NFU`Pn78bV%C<%%HmGm#bjuP_p8lWYV*WyuhLCNT&tiX?76HvC~vmTHxHHMo!VN z^RIu|0T25ZPYZ@{T2SNz3gl%Rsfq`jgCG21ySuk9(NlC7^}7?-mhnrD%}2dN{3_LK zc9zm1z$f zl%9`8UGUTVKEY<6*HiXMW6jB;5C;~+dy0ITL6jp7{yDqx-Y4&yC7VzD`8`|jI{0eh z*&p2`-ueCao;ymC=bEQ2&*R{~*>vw_GJF45?#Ge$ZuKd}ZKfegPC=xG*up9zxsk|Nr|xo<*NI7|7*dU;>E(0B{@( zx08V-9R>mbaZLoVlcXg-3HS*B*BKzR005KhC3FS=0RR91Ig@H89esd*QH2pz0-6#|kcjBVpa%`qaN}36iskLh#!j&&0_z129pT(1OC?XY_Fv)k% zy>qzt0yxAsJglAzo)vpIX0+l8c5&;tO8w4pjT|_xqk(6~JJeqs@8b-wjvF|_I~}~* z9-}Ef9eZecmyRnq@P9(bRqAucHS(L|I!?R~$2-)&9PeXPsXA`pwDK_2+0w*eWJPn> z68&!PTs$s?rWB_#5pr%LZE|rXCOWk$Nwh!Kvx4P9<$9*t%0|j$GPqaaJdtKoYLhln zCXaP0dVY6P`bMS7NUMUPoBS#4TRRaGqi5pU^&v8&r)q5d$bZ^w(CPf{4?}2VSi&Gi zhzJ$}O{y*a`{<&FbJ8O#1S?lnF;Yk*R3zrS5tW&o@fFX6QA$;@A|d-2^E+GX5)0f{(bTb7ZlAVj*dyC0zge2*_jhVdv9qJ9CsQk~#9^|8brqSYU}18CF)ehvHjT3W8 zb)uoH59C8S=Cl(^Z~mx?tQ6haDapO3HJzxmb-fNw8AEQky!;6j-y_Dx!M|9I*x#%g)!wI<$AZ2Im%o~msh+q{2PhE{>SI#LmO7Zpmc9B)H^ zm?^ET;q+j2wNe}p%T-Gv4i-!oT(&eG$tNCE#qEY|8CZB;MIcixr5qM=*b49M5XwlC zBhprs&Z!l=m$vIh$<#SM73@W5XI^$nrcR4f8rZtbiD+Neh(6kR@O^0WprebS6`nE{ n;TV?EHk%pv6|FE0<)e~$Q95EKwUx&t`3tt*v7rC}lfWrxBf9 no attribs in range + if(selStart[1] == selEnd[1] && selStart[0] == selEnd[0]) return false + + if(selStart[0] != selEnd[0]) { // -> More than one line selected + var hasAttrib = true + + // from selStart to the end of the first line + hasAttrib = hasAttrib && rangeHasAttrib(selStart, [selStart[0], rep.lines.atIndex(selStart[0]).text.length]) + + // for all lines in between + for(var n=selStart[0]+1; n < selEnd[0]; n++) { + hasAttrib = hasAttrib && rangeHasAttrib([n, 0], [n, rep.lines.atIndex(n).text.length]) + } + + // for the last, potentially partial, line + hasAttrib = hasAttrib && rangeHasAttrib([selEnd[0], 0], [selEnd[0], selEnd[1]]) + + return hasAttrib + } + + // Logic tells us we now have a range on a single line + + var lineNum = selStart[0] + , start = selStart[1] + , end = selEnd[1] + , hasAttrib = true + + // Iterate over attribs on this line + + var opIter = Changeset.opIterator(rep.alines[lineNum]) + , indexIntoLine = 0 + + while (opIter.hasNext()) { + var op = opIter.next(); + var opStartInLine = indexIntoLine; + var opEndInLine = opStartInLine + op.chars; + if (!hasIt(op.attribs)) { + // does op overlap selection? + if (!(opEndInLine <= start || opStartInLine >= end)) { + hasAttrib = false; // since it's overlapping but hasn't got the attrib -> range hasn't got it + break; + } + } + indexIntoLine = opEndInLine; + } + + return hasAttrib + } + }, + /* Gets all attributes at a position containing line number and column @param lineNumber starting with zero @param column starting with zero - returns a list of attributes in the format + returns a list of attributes in the format [ ["key","value"], ["key","value"], ... ] */ getAttributesOnPosition: function(lineNumber, column){ // get all attributes of the line var aline = this.rep.alines[lineNumber]; - + if (!aline) { return []; } // iterate through all operations of a line var opIter = Changeset.opIterator(aline); - + // we need to sum up how much characters each operations take until the wanted position var currentPointer = 0; - var attributes = []; + var attributes = []; var currentOperation; - + while (opIter.hasNext()) { currentOperation = opIter.next(); - currentPointer = currentPointer + currentOperation.chars; - + currentPointer = currentPointer + currentOperation.chars; + if (currentPointer > column) { // we got the operation of the wanted position, now collect all its attributes Changeset.eachAttribNumber(currentOperation.attribs, function (n) { @@ -156,44 +296,44 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ this.rep.apool.getAttribValue(n) ]); }.bind(this)); - + // skip the loop return attributes; } } return attributes; - + }, - + /* - Gets all attributes at caret position + Gets all attributes at caret position if the user selected a range, the start of the selection is taken - returns a list of attributes in the format + returns a list of attributes in the format [ ["key","value"], ["key","value"], ... ] */ getAttributesOnCaret: function(){ return this.getAttributesOnPosition(this.rep.selStart[0], this.rep.selStart[1]); }, - + /* Sets a specified attribute on a line @param lineNum: the number of the line to set the attribute for @param attributeKey: the name of the attribute to set, e.g. list @param attributeValue: an optional parameter to pass to the attribute (e.g. indention level) - + */ setAttributeOnLine: function(lineNum, attributeName, attributeValue){ var loc = [0,0]; var builder = Changeset.builder(this.rep.lines.totalWidth()); var hasMarker = this.lineHasMarker(lineNum); - + ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 0])); if(hasMarker){ ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 1]), [ [attributeName, attributeValue] ], this.rep.apool); - }else{ + }else{ // add a line marker builder.insert('*', [ ['author', this.author], @@ -202,10 +342,10 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ [attributeName, attributeValue] ], this.rep.apool); } - + return this.applyChangeset(builder); }, - + /** * Removes a specified attribute on a line * @param lineNum the number of the affected line @@ -221,6 +361,9 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ if (attrib[0] === attributeName && (!attributeValue || attrib[0] === attributeValue)){ found = true; return [attributeName, '']; + }else if (attrib[0] === 'author'){ + // update last author to make changes to line attributes on this line + return [attributeName, this.author]; } return attrib; }); @@ -243,7 +386,7 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ return this.applyChangeset(builder); }, - + /* Toggles a line attribute for the specified line number If a line attribute with the specified name exists with any value it will be removed @@ -256,7 +399,7 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ return this.getAttributeOnLine(lineNum, attributeName) ? this.removeAttributeOnLine(lineNum, attributeName) : this.setAttributeOnLine(lineNum, attributeName, attributeValue); - + } }); diff --git a/sources/src/static/js/AttributePool.js b/sources/src/static/js/AttributePool.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/Changeset.js b/sources/src/static/js/Changeset.js old mode 100755 new mode 100644 index 04a0551..6f6e7d0 --- a/sources/src/static/js/Changeset.js +++ b/sources/src/static/js/Changeset.js @@ -1628,10 +1628,12 @@ exports.applyToAText = function (cs, atext, pool) { * @param atext {AText} */ exports.cloneAText = function (atext) { - return { - text: atext.text, - attribs: atext.attribs - }; + if (atext) { + return { + text: atext.text, + attribs: atext.attribs + } + } else exports.error("atext is null"); }; /** diff --git a/sources/src/static/js/ChangesetUtils.js b/sources/src/static/js/ChangesetUtils.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/ace.js b/sources/src/static/js/ace.js old mode 100755 new mode 100644 index c446939..a5e365c --- a/sources/src/static/js/ace.js +++ b/sources/src/static/js/ace.js @@ -229,7 +229,12 @@ function Ace2Editor() $$INCLUDE_CSS("../static/css/pad.css"); $$INCLUDE_CSS("../static/custom/pad.css"); - var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ return '../static/plugins/' + path }); + var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ + if (path.match(/\/\//)) { // Allow urls to external CSS - http(s):// and //some/path.css + return path; + } + return '../static/plugins/' + path; + }); includedCSS = includedCSS.concat(additionalCSS); pushStyleTagsFor(iframeHTML, includedCSS); @@ -265,7 +270,7 @@ plugins.ensure(function () {\n\ iframeHTML: iframeHTML }); - iframeHTML.push(' '); + iframeHTML.push(' '); // Expose myself to global for my child frame. var thisFunctionsName = "ChildAccessibleAce2Editor"; @@ -308,14 +313,19 @@ window.onload = function () {\n\ $$INCLUDE_CSS("../static/custom/pad.css"); - var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ return '../static/plugins/' + path }); + var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ + if (path.match(/\/\//)) { // Allow urls to external CSS - http(s):// and //some/path.css + return path; + } + return '../static/plugins/' + path } + ); includedCSS = includedCSS.concat(additionalCSS); pushStyleTagsFor(outerHTML, includedCSS); // bizarrely, in FF2, a file with no "external" dependencies won't finish loading properly // (throbs busy while typing) - outerHTML.push('', '', scriptTag(outerScript), '
x
'); + outerHTML.push('', '', scriptTag(outerScript), '
x
'); var outerFrame = document.createElement("IFRAME"); outerFrame.name = "ace_outer"; diff --git a/sources/src/static/js/ace2_common.js b/sources/src/static/js/ace2_common.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/ace2_inner.js b/sources/src/static/js/ace2_inner.js old mode 100755 new mode 100644 index 5790782..f2c45f6 --- a/sources/src/static/js/ace2_inner.js +++ b/sources/src/static/js/ace2_inner.js @@ -21,7 +21,7 @@ */ var _, $, jQuery, plugins, Ace2Common; -var browser = require('./browser').browser; +var browser = require('./browser'); if(browser.msie){ // Honestly fuck IE royally. // Basically every hack we have since V11 causes a problem @@ -1894,7 +1894,11 @@ function Ace2Inner(){ var prevLine = rep.lines.prev(thisLine); var prevLineText = prevLine.text; var theIndent = /^ *(?:)/.exec(prevLineText)[0]; - if (/[\[\(\:\{]\s*$/.exec(prevLineText)) theIndent += THE_TAB; + var shouldIndent = parent.parent.clientVars.indentationOnNewLine; + if (shouldIndent && /[\[\(\:\{]\s*$/.exec(prevLineText)) + { + theIndent += THE_TAB; + } var cs = Changeset.builder(rep.lines.totalWidth()).keep( rep.lines.offsetOfIndex(lineNum), lineNum).insert( theIndent, [ @@ -2334,9 +2338,18 @@ function Ace2Inner(){ editorInfo.ace_setAttributeOnSelection = setAttributeOnSelection; - function getAttributeOnSelection(attributeName){ + function getAttributeOnSelection(attributeName, prevChar){ if (!(rep.selStart && rep.selEnd)) return - + var isNotSelection = (rep.selStart[0] == rep.selEnd[0] && rep.selEnd[1] === rep.selStart[1]); + if(isNotSelection){ + if(prevChar){ + // If it's not the start of the line + if(rep.selStart[1] !== 0){ + rep.selStart[1]--; + } + } + } + var withIt = Changeset.makeAttribsString('+', [ [attributeName, 'true'] ], rep.apool); @@ -2347,14 +2360,14 @@ function Ace2Inner(){ } return rangeHasAttrib(rep.selStart, rep.selEnd) - + function rangeHasAttrib(selStart, selEnd) { // if range is collapsed -> no attribs in range if(selStart[1] == selEnd[1] && selStart[0] == selEnd[0]) return false - + if(selStart[0] != selEnd[0]) { // -> More than one line selected var hasAttrib = true - + // from selStart to the end of the first line hasAttrib = hasAttrib && rangeHasAttrib(selStart, [selStart[0], rep.lines.atIndex(selStart[0]).text.length]) @@ -2365,22 +2378,22 @@ function Ace2Inner(){ // for the last, potentially partial, line hasAttrib = hasAttrib && rangeHasAttrib([selEnd[0], 0], [selEnd[0], selEnd[1]]) - + return hasAttrib } - + // Logic tells us we now have a range on a single line - + var lineNum = selStart[0] , start = selStart[1] , end = selEnd[1] , hasAttrib = true - + // Iterate over attribs on this line - + var opIter = Changeset.opIterator(rep.alines[lineNum]) , indexIntoLine = 0 - + while (opIter.hasNext()) { var op = opIter.next(); var opStartInLine = indexIntoLine; @@ -2394,11 +2407,11 @@ function Ace2Inner(){ } indexIntoLine = opEndInLine; } - + return hasAttrib } } - + editorInfo.ace_getAttributeOnSelection = getAttributeOnSelection; function toggleAttributeOnSelection(attributeName) @@ -2423,6 +2436,9 @@ function Ace2Inner(){ var opIter = Changeset.opIterator(rep.alines[n]); var indexIntoLine = 0; var selectionStartInLine = 0; + if (documentAttributeManager.lineHasMarker(n)) { + selectionStartInLine = 1; // ignore "*" used as line marker + } var selectionEndInLine = rep.lines.atIndex(n).text.length; // exclude newline if (n == selStartLine) { @@ -2894,6 +2910,12 @@ function Ace2Inner(){ rep.selFocusAtStart = newSelFocusAtStart; currentCallStack.repChanged = true; + hooks.callAll('aceSelectionChanged', { + rep: rep, + callstack: currentCallStack, + documentAttributeManager: documentAttributeManager, + }); + return true; //console.log("selStart: %o, selEnd: %o, focusAtStart: %s", rep.selStart, rep.selEnd, //String(!!rep.selFocusAtStart)); @@ -3384,7 +3406,7 @@ function Ace2Inner(){ renumberList(lineNum + 1);//trigger renumbering of list that may be right after } } - else if (lineNum + 1 < rep.lines.length()) + else if (lineNum + 1 <= rep.lines.length()) { performDocumentReplaceSelection('\n'); setLineListType(lineNum + 1, type+level); @@ -3629,16 +3651,10 @@ function Ace2Inner(){ var altKey = evt.altKey; var shiftKey = evt.shiftKey; - // prevent ESC key - if (keyCode == 27) - { - evt.preventDefault(); - return; - } // Is caret potentially hidden by the chat button? 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 - + if(myselection.focusNode.wholeText){ // Is there any content? If not lineHeight will report wrong.. var lineHeight = myselection.focusNode.parentNode.offsetHeight; // line height of populated links }else{ @@ -3703,20 +3719,25 @@ function Ace2Inner(){ documentAttributeManager: documentAttributeManager, evt:evt }); - specialHandled = (specialHandledInHook&&specialHandledInHook.length>0)?specialHandledInHook[0]:specialHandled; + + // if any hook returned true, set specialHandled with true + if (specialHandledInHook) { + specialHandled = _.contains(specialHandledInHook, true); + } + if ((!specialHandled) && altKey && isTypeForSpecialKey && keyCode == 120){ // Alt F9 focuses on the File Menu and/or editbar. // Note that while most editors use Alt F10 this is not desirable // As ubuntu cannot use Alt F10.... // Focus on the editbar. -- TODO: Move Focus back to previous state (we know it so we can use it) var firstEditbarElement = parent.parent.$('#editbar').children("ul").first().children().first().children().first().children().first(); - $(this).blur(); + $(this).blur(); firstEditbarElement.focus(); evt.preventDefault(); } if ((!specialHandled) && altKey && keyCode == 67 && type === "keydown"){ // Alt c focuses on the Chat window - $(this).blur(); + $(this).blur(); parent.parent.chat.show(); parent.parent.$("#chatinput").focus(); evt.preventDefault(); @@ -3827,6 +3848,15 @@ function Ace2Inner(){ }, 0); specialHandled = true; } + if ((!specialHandled) && isTypeForSpecialKey && keyCode == 27) + { + // prevent esc key; + // in mozilla versions 14-19 avoid reconnecting pad. + + fastIncorp(4); + evt.preventDefault(); + specialHandled = true; + } if ((!specialHandled) && isTypeForCmdKey && String.fromCharCode(which).toLowerCase() == "s" && (evt.metaKey || evt.ctrlKey) && !evt.altKey) /* Do a saved revision on ctrl S */ { evt.preventDefault(); @@ -4955,10 +4985,9 @@ function Ace2Inner(){ $(document).on("keypress", handleKeyEvent); $(document).on("keyup", handleKeyEvent); $(document).on("click", handleClick); - // Disabled: https://github.com/ether/etherpad-lite/issues/2546 // Will break OL re-numbering: https://github.com/ether/etherpad-lite/pull/2533 - // $(document).on("cut", handleCut); + // $(document).on("cut", handleCut); $(root).on("blur", handleBlur); if (browser.msie) @@ -4969,14 +4998,38 @@ function Ace2Inner(){ // Don't paste on middle click of links $(root).on("paste", function(e){ - // TODO: this breaks pasting strings into URLS when using + // TODO: this breaks pasting strings into URLS when using // Control C and Control V -- the Event is never available // here.. :( if(e.target.a || e.target.localName === "a"){ e.preventDefault(); } + + // Call paste hook + hooks.callAll('acePaste', { + editorInfo: editorInfo, + rep: rep, + documentAttributeManager: documentAttributeManager, + e: e + }); }) + // We reference document here, this is because if we don't this will expose a bug + // in Google Chrome. This bug will cause the last character on the last line to + // not fire an event when dropped into.. + $(document).on("drop", function(e){ + if(e.target.a || e.target.localName === "a"){ + e.preventDefault(); + } + // Call drop hook + hooks.callAll('aceDrop', { + editorInfo: editorInfo, + rep: rep, + documentAttributeManager: documentAttributeManager, + e: e + }); + }); + // CompositionEvent is not implemented below IE version 8 if ( !(browser.msie && parseInt(browser.version <= 9)) && document.documentElement) { @@ -5321,6 +5374,12 @@ function Ace2Inner(){ level = Number(listType[2]); } var t = getLineListType(n); + + // if already a list, deindent + if (allLinesAreList && level != 1) { level = level - 1; } + // if already indented, then add a level of indentation to the list + else if (t && !allLinesAreList) { level = level + 1; } + mods.push([n, allLinesAreList ? 'indent' + level : (t ? type + level : type + '1')]); } @@ -5344,8 +5403,9 @@ function Ace2Inner(){ function initLineNumbers() { lineNumbersShown = 1; - sideDiv.innerHTML = '
1
'; + sideDiv.innerHTML = '
1
'; sideDivInner = outerWin.document.getElementById("sidedivinner"); + $(sideDiv).addClass("sidediv"); } function updateLineNumbers() diff --git a/sources/src/static/js/admin/jquery.autosize.js b/sources/src/static/js/admin/jquery.autosize.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/admin/minify.json.js b/sources/src/static/js/admin/minify.json.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/admin/plugins.js b/sources/src/static/js/admin/plugins.js old mode 100755 new mode 100644 index d337da0..48d1ab7 --- a/sources/src/static/js/admin/plugins.js +++ b/sources/src/static/js/admin/plugins.js @@ -11,7 +11,7 @@ $(document).ready(function () { //connect var room = url + "pluginfw/installer"; - socket = io.connect(room, {resource : resource}); + socket = io.connect(room, {path: baseURL + "socket.io", resource : resource}); function search(searchTerm, limit) { if(search.searchTerm != searchTerm) { diff --git a/sources/src/static/js/admin/settings.js b/sources/src/static/js/admin/settings.js old mode 100755 new mode 100644 index 8a4473d..42b038d --- a/sources/src/static/js/admin/settings.js +++ b/sources/src/static/js/admin/settings.js @@ -10,7 +10,7 @@ $(document).ready(function () { //connect var room = url + "settings"; - socket = io.connect(room, {resource : resource}); + socket = io.connect(room, {path: baseURL + "socket.io", resource : resource}); socket.on('settings', function (settings) { diff --git a/sources/src/static/js/broadcast.js b/sources/src/static/js/broadcast.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/broadcast_revisions.js b/sources/src/static/js/broadcast_revisions.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/broadcast_slider.js b/sources/src/static/js/broadcast_slider.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/browser.js b/sources/src/static/js/browser.js old mode 100755 new mode 100644 index f763963..5d5f741 --- a/sources/src/static/js/browser.js +++ b/sources/src/static/js/browser.js @@ -1,11 +1,11 @@ /*! * Bowser - a browser detector * https://github.com/ded/bowser - * MIT License | (c) Dustin Diaz 2014 + * MIT License | (c) Dustin Diaz 2015 */ !function (name, definition) { - if (typeof module != 'undefined' && module.exports) module.exports['browser'] = definition() + if (typeof module != 'undefined' && module.exports) module.exports = definition() else if (typeof define == 'function' && define.amd) define(definition) else this[name] = definition() }('bowser', function () { @@ -22,9 +22,24 @@ return (match && match.length > 1 && match[1]) || ''; } + function getSecondMatch(regex) { + var match = ua.match(regex); + return (match && match.length > 1 && match[2]) || ''; + } + var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase() , likeAndroid = /like android/i.test(ua) , android = !likeAndroid && /android/i.test(ua) + , chromeos = /CrOS/.test(ua) + , silk = /silk/i.test(ua) + , sailfish = /sailfish/i.test(ua) + , tizen = /tizen/i.test(ua) + , webos = /(web|hpw)os/i.test(ua) + , windowsphone = /windows phone/i.test(ua) + , windows = !windowsphone && /windows/i.test(ua) + , mac = !iosdevice && !silk && /macintosh/i.test(ua) + , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua) + , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i) , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i) , tablet = /tablet/i.test(ua) , mobile = !tablet && /[^-]mobi/i.test(ua) @@ -37,12 +52,25 @@ , version: versionIdentifier || getFirstMatch(/(?:opera|opr)[\s\/](\d+(\.\d+)?)/i) } } - else if (/windows phone/i.test(ua)) { + else if (/yabrowser/i.test(ua)) { + result = { + name: 'Yandex Browser' + , yandexbrowser: t + , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i) + } + } + else if (windowsphone) { result = { name: 'Windows Phone' , windowsphone: t - , msie: t - , version: getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i) + } + if (edgeVersion) { + result.msedge = t + result.version = edgeVersion + } + else { + result.msie = t + result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i) } } else if (/msie|trident/i.test(ua)) { @@ -51,6 +79,20 @@ , msie: t , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i) } + } else if (chromeos) { + result = { + name: 'Chrome' + , chromeos: t + , chromeBook: t + , chrome: t + , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) + } + } else if (/chrome.+? edge/i.test(ua)) { + result = { + name: 'Microsoft Edge' + , msedge: t + , version: edgeVersion + } } else if (/chrome|crios|crmo/i.test(ua)) { result = { @@ -68,7 +110,7 @@ result.version = versionIdentifier } } - else if (/sailfish/i.test(ua)) { + else if (sailfish) { result = { name: 'Sailfish' , sailfish: t @@ -92,7 +134,7 @@ result.firefoxos = t } } - else if (/silk/i.test(ua)) { + else if (silk) { result = { name: 'Amazon Silk' , silk: t @@ -119,7 +161,7 @@ , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i) } } - else if (/(web|hpw)os/i.test(ua)) { + else if (webos) { result = { name: 'WebOS' , webos: t @@ -134,7 +176,7 @@ , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i) }; } - else if (/tizen/i.test(ua)) { + else if (tizen) { result = { name: 'Tizen' , tizen: t @@ -148,10 +190,15 @@ , version: versionIdentifier } } - else result = {} + else { + result = { + name: getFirstMatch(/^(.*)\/(.*) /), + version: getSecondMatch(/^(.*)\/(.*) /) + }; + } // set webkit or gecko flag for browsers based on these engines - if (/(apple)?webkit/i.test(ua)) { + if (!result.msedge && /(apple)?webkit/i.test(ua)) { result.name = result.name || "Webkit" result.webkit = t if (!result.version && versionIdentifier) { @@ -164,22 +211,28 @@ } // set OS flags for platforms that have multiple browsers - if (android || result.silk) { + if (!result.msedge && (android || result.silk)) { result.android = t } else if (iosdevice) { result[iosdevice] = t result.ios = t + } else if (windows) { + result.windows = t + } else if (mac) { + result.mac = t + } else if (linux) { + result.linux = t } // OS version extraction var osVersion = ''; - if (iosdevice) { + if (result.windowsphone) { + osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i); + } else if (iosdevice) { osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i); osVersion = osVersion.replace(/[_\s]/g, '.'); } else if (android) { osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i); - } else if (result.windowsphone) { - osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i); } else if (result.webos) { osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i); } else if (result.blackberry) { @@ -203,7 +256,9 @@ // Graded Browser Support // http://developer.yahoo.com/yui/articles/gbs - if ((result.msie && result.version >= 10) || + if (result.msedge || + (result.msie && result.version >= 10) || + (result.yandexbrowser && result.version >= 15) || (result.chrome && result.version >= 20) || (result.firefox && result.version >= 20.0) || (result.safari && result.version >= 6) || @@ -228,6 +283,17 @@ var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '') + bowser.test = function (browserList) { + for (var i = 0; i < browserList.length; ++i) { + var browserItem = browserList[i]; + if (typeof browserItem=== 'string') { + if (browserItem in bowser) { + return true; + } + } + } + return false; + } /* * Set our detect method to the main bowser object so we can @@ -237,4 +303,4 @@ bowser._detect = detect; return bowser -}); +}); \ No newline at end of file diff --git a/sources/src/static/js/changesettracker.js b/sources/src/static/js/changesettracker.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/chat.js b/sources/src/static/js/chat.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/collab_client.js b/sources/src/static/js/collab_client.js old mode 100755 new mode 100644 index ad49352..fd0d9d4 --- a/sources/src/static/js/collab_client.js +++ b/sources/src/static/js/collab_client.js @@ -1,5 +1,5 @@ /** - * This code is mostly from the old Etherpad. Please help us to comment this code. + * This code is mostly from the old Etherpad. Please help us to comment this code. * This helps other people to understand this code better and helps them to improve it. * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED */ @@ -351,7 +351,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) msg.userInfo.colorId = initialUserInfo.globalUserColor; } - + if (userSet[id]) { userSet[id] = userInfo; @@ -405,7 +405,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) $("#chatloadmessagesball").css("display", "none"); // there are less than 100 messages or we reached the top - if(chat.historyPointer <= 0) + if(chat.historyPointer <= 0) $("#chatloadmessagesbutton").css("display", "none"); else // there are still more messages, re-show the load-button $("#chatloadmessagesbutton").css("display", "block"); @@ -414,6 +414,12 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) { callbacks.onServerMessage(msg.payload); } + + //HACKISH: User messages do not have "payload" but "userInfo", so that all "handleClientMessage_USER_" hooks would work, populate payload + //FIXME: USER_* messages to have "payload" property instead of "userInfo", seems like a quite a big work + if(msg.type.indexOf("USER_") > -1) { + msg.payload = msg.userInfo; + } hooks.callAll('handleClientMessage_' + msg.type, {payload: msg.payload}); } @@ -441,7 +447,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) { colorId = clientVars.colorPalette[colorId]; } - + var cssColor = colorId; if (inactive) { diff --git a/sources/src/static/js/colorutils.js b/sources/src/static/js/colorutils.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/contentcollector.js b/sources/src/static/js/contentcollector.js old mode 100755 new mode 100644 index 5c1e8ef..6820da0 --- a/sources/src/static/js/contentcollector.js +++ b/sources/src/static/js/contentcollector.js @@ -100,7 +100,7 @@ function makeContentCollector(collectStyles, abrowser, apool, domInterface, clas function textify(str) { return sanitizeUnicode( - str.replace(/\n/g, '').replace(/[\n\r ]/g, ' ').replace(/\xa0/g, ' ').replace(/\t/g, ' ')); + str.replace(/(\n | \n)/g, ' ').replace(/[\n\r ]/g, ' ').replace(/\xa0/g, ' ').replace(/\t/g, ' ')); } function getAssoc(node, name) diff --git a/sources/src/static/js/cssmanager.js b/sources/src/static/js/cssmanager.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/domline.js b/sources/src/static/js/domline.js old mode 100755 new mode 100644 index 03f1b9c..447c149 --- a/sources/src/static/js/domline.js +++ b/sources/src/static/js/domline.js @@ -80,7 +80,7 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument) } var html = []; - var preHtml = '', + var preHtml = '', postHtml = ''; var curHTML = null; @@ -193,7 +193,8 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument) { if (href) { - if(!~href.indexOf("://") && !~href.indexOf("mailto:")) // if the url doesn't include a protocol prefix, assume http + urn_schemes = new RegExp("^(about|geo|mailto|tel):"); + if(!~href.indexOf("://") && !urn_schemes.test(href)) // if the url doesn't include a protocol prefix, assume http { href = "http://"+href; } diff --git a/sources/src/static/js/excanvas.js b/sources/src/static/js/excanvas.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/farbtastic.js b/sources/src/static/js/farbtastic.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/gritter.js b/sources/src/static/js/gritter.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/html10n.js b/sources/src/static/js/html10n.js old mode 100755 new mode 100644 index 44abd7a..eecbaa0 --- a/sources/src/static/js/html10n.js +++ b/sources/src/static/js/html10n.js @@ -851,6 +851,7 @@ window.html10n = (function(window, document, undefined) { , "innerHTML": 1 , "alt": 1 , "textContent": 1 + , "value": 1 } if (index > 0 && str.id.substr(index + 1) in attrList) { // an attribute has been specified prop = str.id.substr(index + 1) @@ -861,6 +862,9 @@ window.html10n = (function(window, document, undefined) { // Apply translation if (node.children.length === 0 || prop != 'textContent') { node[prop] = str.str + node.setAttribute("aria-label", str.str); // Sets the aria-label + // The idea of the above is that we always have an aria value + // This might be a bit of an abrupt solution but let's see how it goes } else { var children = node.childNodes, found = false diff --git a/sources/src/static/js/json2.js b/sources/src/static/js/json2.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/l10n.js b/sources/src/static/js/l10n.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/linestylefilter.js b/sources/src/static/js/linestylefilter.js old mode 100755 new mode 100644 index 17ab993..9368051 --- a/sources/src/static/js/linestylefilter.js +++ b/sources/src/static/js/linestylefilter.js @@ -266,7 +266,7 @@ linestylefilter.getRegexpFilter = function(regExp, tag) linestylefilter.REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; linestylefilter.REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/\\?=&#!;()\[\]$]/.source + '|' + linestylefilter.REGEX_WORDCHAR.source + ')'); -linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|mailto:|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g'); +linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|(about|geo|mailto|tel):|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g'); linestylefilter.getURLFilter = linestylefilter.getRegexpFilter( linestylefilter.REGEX_URL, 'url'); diff --git a/sources/src/static/js/pad.js b/sources/src/static/js/pad.js old mode 100755 new mode 100644 index e395140..25b1a24 --- a/sources/src/static/js/pad.js +++ b/sources/src/static/js/pad.js @@ -115,13 +115,13 @@ var getParameters = [ { name: "showLineNumbers", checkVal: "false", callback: function(val) { settings.LineNumbersDisabled = true; } }, { name: "useMonospaceFont", checkVal: "true", callback: function(val) { settings.useMonospaceFontGlobal = true; } }, // If the username is set as a parameter we should set a global value that we can call once we have initiated the pad. - { name: "userName", checkVal: null, callback: function(val) { settings.globalUserName = decodeURIComponent(val); } }, + { name: "userName", checkVal: null, callback: function(val) { settings.globalUserName = decodeURIComponent(val); clientVars.userName = decodeURIComponent(val); } }, // If the userColor is set as a parameter, set a global value to use once we have initiated the pad. - { name: "userColor", checkVal: null, callback: function(val) { settings.globalUserColor = decodeURIComponent(val); } }, + { name: "userColor", checkVal: null, callback: function(val) { settings.globalUserColor = decodeURIComponent(val); clientVars.userColor = decodeURIComponent(val); } }, { name: "rtl", checkVal: "true", callback: function(val) { settings.rtlIsTrue = true } }, { 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']); createCookie('language', val); } } ]; function getParams() @@ -322,6 +322,15 @@ function handshake() pad._afterHandshake(); initalized = true; + if(clientVars.readonly){ + chat.hide(); + $('#myusernameedit').attr("disabled", true); + $('#chatinput').attr("disabled", true); + $('#chaticon').hide(); + $('#options-chatandusers').parent().hide(); + $('#options-stickychat').parent().hide(); + } + $("body").addClass(clientVars.readonly ? "readonly" : "readwrite") padeditor.ace.callWithAce(function (ace) { @@ -456,9 +465,9 @@ var pad = { }, switchToPad: function(padId) { - var newHref = new RegExp(/.*\/p\/[^\/]+/).exec(document.location.pathname) || clientVars.padId; - newHref = newHref[0]; - if (options != null){ + var options = document.location.href.split('?')[1]; + var newHref = padId; + if (typeof options != "undefined" && options != null){ newHref = newHref + '?' + options; } @@ -504,7 +513,6 @@ var pad = { _afterHandshake: function() { pad.clientTimeOffset = new Date().getTime() - clientVars.serverTimestamp; - //initialize the chat chat.init(this); getParams(); @@ -513,11 +521,6 @@ var pad = { pad.initTime = +(new Date()); pad.padOptions = clientVars.initialOptions; - if ((!browser.msie) && (!(browser.firefox && browser.version.indexOf("1.8.") == 0))) - { - document.domain = document.domain; // for comet - } - // for IE if (browser.msie) { diff --git a/sources/src/static/js/pad_connectionstatus.js b/sources/src/static/js/pad_connectionstatus.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pad_cookie.js b/sources/src/static/js/pad_cookie.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pad_editbar.js b/sources/src/static/js/pad_editbar.js old mode 100755 new mode 100644 index e418969..d44e5d6 --- a/sources/src/static/js/pad_editbar.js +++ b/sources/src/static/js/pad_editbar.js @@ -185,9 +185,31 @@ var padeditbar = (function() this.commands[cmd] = callback; return this; }, + calculateEditbarHeight: function() { + // if we're on timeslider, there is nothing on editbar, so we just use zero + var onTimeslider = $('.menu_left').length === 0; + if (onTimeslider) return 0; + + // if editbar has both menu left and right, its height must be + // the max between the height of these two parts + var leftMenuPosition = $('.menu_left').offset().top; + var rightMenuPosition = $('.menu_right').offset().top; + var editbarHasMenuLeftAndRight = (leftMenuPosition === rightMenuPosition); + + var height; + if (editbarHasMenuLeftAndRight) { + height = Math.max($('.menu_left').height(), $('.menu_right').height()); + } + else { + height = $('.menu_left').height(); + } + + return height; + }, redrawHeight: function(){ - var editbarHeight = $('.menu_left').height() + 1 + "px"; - var containerTop = $('.menu_left').height() + 6 + "px"; + var minimunEditbarHeight = self.calculateEditbarHeight(); + var editbarHeight = minimunEditbarHeight + 1 + "px"; + var containerTop = minimunEditbarHeight + 6 + "px"; $('#editbar').css("height", editbarHeight); $('#editorcontainer').css("top", containerTop); @@ -293,13 +315,13 @@ var padeditbar = (function() { var basePath = document.location.href.substring(0, document.location.href.indexOf("/p/")); var readonlyLink = basePath + "/p/" + clientVars.readOnlyId; - $('#embedinput').val(""); + $('#embedinput').val(''); $('#linkinput').val(readonlyLink); } else { var padurl = window.location.href.split("?")[0]; - $('#embedinput').val(""); + $('#embedinput').val(''); $('#linkinput').val(padurl); } } diff --git a/sources/src/static/js/pad_editor.js b/sources/src/static/js/pad_editor.js old mode 100755 new mode 100644 index 2514cd1..6616ebe --- a/sources/src/static/js/pad_editor.js +++ b/sources/src/static/js/pad_editor.js @@ -160,23 +160,23 @@ var padeditor = (function() font = font.replace("use",""); font = font.replace("Font",""); font = font.toLowerCase(); - if(font === "monospace") self.ace.setProperty("textface", "Courier new"); + if(font === "monospace") self.ace.setProperty("textface", "monospace"); if(font === "opendyslexic") self.ace.setProperty("textface", "OpenDyslexic"); - if(font === "comicsans") self.ace.setProperty("textface", "Comic Sans MS"); - if(font === "georgia") self.ace.setProperty("textface", "Georgia"); - if(font === "impact") self.ace.setProperty("textface", "Impact"); - if(font === "lucida") self.ace.setProperty("textface", "Lucida"); - if(font === "lucidasans") self.ace.setProperty("textface", "Lucida Sans Unicode"); - if(font === "palatino") self.ace.setProperty("textface", "Palatino Linotype"); - if(font === "tahoma") self.ace.setProperty("textface", "Tahoma"); - if(font === "timesnewroman") self.ace.setProperty("textface", "Times New Roman"); - if(font === "trebuchet") self.ace.setProperty("textface", "Trebuchet MS"); - if(font === "verdana") self.ace.setProperty("textface", "Verdana"); + if(font === "comicsans") self.ace.setProperty("textface", "'Comic Sans MS','Comic Sans',cursive"); + if(font === "georgia") self.ace.setProperty("textface", "Georgia,'Bitstream Charter',serif"); + if(font === "impact") self.ace.setProperty("textface", "Impact,Haettenschweiler,'Arial Black',sans-serif"); + if(font === "lucida") self.ace.setProperty("textface", "Lucida,'Lucida Serif','Lucida Bright',serif"); + if(font === "lucidasans") self.ace.setProperty("textface", "'Lucida Sans','Lucida Grande','Lucida Sans Unicode','Luxi Sans',sans-serif"); + if(font === "palatino") self.ace.setProperty("textface", "Palatino,'Palatino Linotype','URW Palladio L',Georgia,serif"); + if(font === "tahoma") self.ace.setProperty("textface", "Tahoma,sans-serif"); + if(font === "timesnewroman") self.ace.setProperty("textface", "'Times New Roman',Times,serif"); + if(font === "trebuchet") self.ace.setProperty("textface", "'Trebuchet MS',sans-serif"); + if(font === "verdana") self.ace.setProperty("textface", "Verdana,'DejaVu Sans',sans-serif"); if(font === "symbol") self.ace.setProperty("textface", "Symbol"); if(font === "webdings") self.ace.setProperty("textface", "Webdings"); if(font === "wingdings") self.ace.setProperty("textface", "Wingdings"); - if(font === "sansserif") self.ace.setProperty("textface", "MS Sans Serif"); - if(font === "serif") self.ace.setProperty("textface", "MS Serif"); + if(font === "sansserif") self.ace.setProperty("textface", "sans-serif"); + if(font === "serif") self.ace.setProperty("textface", "serif"); // $("#viewfontmenu").val(font); normalFont = false; @@ -185,7 +185,7 @@ var padeditor = (function() // No font has been previously selected so use the Normal font if(normalFont){ - self.ace.setProperty("textface", "Arial, sans-serif"); + self.ace.setProperty("textface", "'Helvetica Neue',Arial, sans-serif"); // $("#viewfontmenu").val("normal"); } diff --git a/sources/src/static/js/pad_impexp.js b/sources/src/static/js/pad_impexp.js old mode 100755 new mode 100644 index 1648f34..70220f8 --- a/sources/src/static/js/pad_impexp.js +++ b/sources/src/static/js/pad_impexp.js @@ -1,5 +1,5 @@ /** - * This code is mostly from the old Etherpad. Please help us to comment this code. + * This code is mostly from the old Etherpad. Please help us to comment this code. * This helps other people to understand this code better and helps them to improve it. * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED */ @@ -46,7 +46,7 @@ var padimpexp = (function() $('#importmessagefail').fadeOut("fast"); var ret = window.confirm(html10n.get("pad.impexp.confirmimport")); if (ret) - { + { currentImportTimer = window.setTimeout(function() { if (!currentImportTimer) @@ -61,7 +61,7 @@ var padimpexp = (function() { disabled: true }).val(html10n.get("pad.impexp.importing")); - + window.setTimeout(function() { $('#importfileinput').attr( @@ -104,7 +104,7 @@ var padimpexp = (function() function importErrorMessage(status) { var msg=""; - + if(status === "convertFailed"){ msg = html10n.get("pad.impexp.convertFailed"); } else if(status === "uploadFailed"){ @@ -112,7 +112,7 @@ var padimpexp = (function() } else if(status === "padHasData"){ msg = html10n.get("pad.impexp.padHasData"); } - + function showError(fade) { $('#importmessagefail').html(''+html10n.get('pad.impexp.importfailed')+': ' + (msg || html10n.get('pad.impexp.copypaste','')))[(fade ? "fadeIn" : "show")](); @@ -206,9 +206,9 @@ var padimpexp = (function() // activate action to import in the form $("#importform").attr('action', pad_root_url + "/import"); - - //hide stuff thats not avaible if abiword is disabled - if(clientVars.abiwordAvailable == "no") + + //hide stuff thats not avaible if abiword/soffice is disabled + if(clientVars.exportAvailable == "no") { $("#exportworda").remove(); $("#exportpdfa").remove(); @@ -216,13 +216,13 @@ var padimpexp = (function() $("#importmessageabiword").show(); } - else if(clientVars.abiwordAvailable == "withoutPDF") + else if(clientVars.exportAvailable == "withoutPDF") { $("#exportpdfa").remove(); - + $("#exportworda").attr("href", pad_root_path + "/export/doc"); $("#exportopena").attr("href", pad_root_path + "/export/odt"); - + $("#importexport").css({"height":"142px"}); $("#importexportline").css({"height":"142px"}); } @@ -232,7 +232,7 @@ var padimpexp = (function() $("#exportpdfa").attr("href", pad_root_path + "/export/pdf"); $("#exportopena").attr("href", pad_root_path + "/export/odt"); } - + addImportFrames(); $("#importfileinput").change(fileInputUpdated); $('#importform').unbind("submit").submit(fileInputSubmit); diff --git a/sources/src/static/js/pad_modals.js b/sources/src/static/js/pad_modals.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pad_savedrevs.js b/sources/src/static/js/pad_savedrevs.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pad_userlist.js b/sources/src/static/js/pad_userlist.js old mode 100755 new mode 100644 index 22dab40..7ac960d --- a/sources/src/static/js/pad_userlist.js +++ b/sources/src/static/js/pad_userlist.js @@ -508,12 +508,18 @@ var paduserlist = (function() }); // }, - users: function(){ - // Returns an object of users who have been on this pad - // Firstly we have to get live data.. - var userList = otherUsersInfo; + usersOnline: function() + { + // Returns an object of users who are currently online on this pad + var userList = [].concat(otherUsersInfo); // Make a copy of the otherUsersInfo, otherwise every call to users modifies the referenced array // Now we need to add ourselves.. userList.push(myUserInfo); + return userList; + }, + users: function(){ + // Returns an object of users who have been on this pad + var userList = self.usersOnline(); + // Now we add historical authors var historical = clientVars.collab_client_vars.historicalAuthorData; for (var key in historical){ @@ -528,7 +534,6 @@ var paduserlist = (function() if(exists === false){ userList.push(historical[key]); } - } return userList; }, diff --git a/sources/src/static/js/pad_utils.js b/sources/src/static/js/pad_utils.js old mode 100755 new mode 100644 index ff60ca7..5a7700c --- a/sources/src/static/js/pad_utils.js +++ b/sources/src/static/js/pad_utils.js @@ -176,7 +176,7 @@ var padutils = { // copied from ACE var _REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; var _REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/?=&#;()$]/.source + '|' + _REGEX_WORDCHAR.source + ')'); - var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|mailto:)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g'); + var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|(about|geo|mailto|tel):)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g'); // returns null if no URLs, or [[startIndex1, url1], [startIndex2, url2], ...] diff --git a/sources/src/static/js/pluginfw/client_plugins.js b/sources/src/static/js/pluginfw/client_plugins.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pluginfw/hooks.js b/sources/src/static/js/pluginfw/hooks.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pluginfw/installer.js b/sources/src/static/js/pluginfw/installer.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pluginfw/plugins.js b/sources/src/static/js/pluginfw/plugins.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pluginfw/read-installed.js b/sources/src/static/js/pluginfw/read-installed.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pluginfw/shared.js b/sources/src/static/js/pluginfw/shared.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/pluginfw/tsort.js b/sources/src/static/js/pluginfw/tsort.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/rjquery.js b/sources/src/static/js/rjquery.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/security.js b/sources/src/static/js/security.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/skiplist.js b/sources/src/static/js/skiplist.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/timeslider.js b/sources/src/static/js/timeslider.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/underscore.js b/sources/src/static/js/underscore.js old mode 100755 new mode 100644 diff --git a/sources/src/static/js/undomodule.js b/sources/src/static/js/undomodule.js old mode 100755 new mode 100644 diff --git a/sources/src/static/robots.txt b/sources/src/static/robots.txt old mode 100755 new mode 100644 diff --git a/sources/src/static/tests.html b/sources/src/static/tests.html old mode 100755 new mode 100644 diff --git a/sources/src/templates/admin/index.html b/sources/src/templates/admin/index.html old mode 100755 new mode 100644 diff --git a/sources/src/templates/admin/plugins-info.html b/sources/src/templates/admin/plugins-info.html old mode 100755 new mode 100644 diff --git a/sources/src/templates/admin/plugins.html b/sources/src/templates/admin/plugins.html old mode 100755 new mode 100644 diff --git a/sources/src/templates/admin/settings.html b/sources/src/templates/admin/settings.html old mode 100755 new mode 100644 diff --git a/sources/src/templates/index.html b/sources/src/templates/index.html old mode 100755 new mode 100644 index 626630e..0b0be79 --- a/sources/src/templates/index.html +++ b/sources/src/templates/index.html @@ -163,7 +163,7 @@
- +
diff --git a/sources/src/templates/pad.html b/sources/src/templates/pad.html old mode 100755 new mode 100644 index dd26041..767c1ec --- a/sources/src/templates/pad.html +++ b/sources/src/templates/pad.html @@ -63,12 +63,12 @@ @@ -100,7 +100,7 @@
-
+

You need a password to access this pad

@@ -390,10 +390,7 @@ require.setGlobalKeyPath("require"); $ = jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery; // Expose jQuery #HACK - browser = require('ep_etherpad-lite/static/js/browser').browser; - if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) { - document.domain = document.domain; // for comet - } + browser = require('ep_etherpad-lite/static/js/browser'); var plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); diff --git a/sources/src/templates/timeslider.html b/sources/src/templates/timeslider.html old mode 100755 new mode 100644 index 6ec27c0..f52c0c5 --- a/sources/src/templates/timeslider.html +++ b/sources/src/templates/timeslider.html @@ -68,7 +68,7 @@
- +
@@ -231,30 +231,26 @@