From d2c38a1950c338b1c56a58626f0c377aac727fd3 Mon Sep 17 00:00:00 2001 From: affan98 Date: Mon, 13 May 2019 19:15:45 -0400 Subject: [PATCH] initial commit --- .babelrc.js | 14 + .editorconfig | 25 + .eslintrc.js | 67 ++ .gitignore | 22 + .l10nignore | 2 + .scrutinizer.yml | 17 + .travis.yml | 58 ++ .tx/config | 9 + CHANGELOG.md | 210 ++++++ COPYING | 661 ++++++++++++++++ ISSUE_TEMPLATE.md | 85 +++ Makefile | 115 +++ README.md | 74 ++ _config.yml | 1 + appinfo/app.php | 25 + appinfo/info.xml | 36 + appinfo/routes.php | 52 ++ composer.json | 22 + css/colors.scss | 31 + css/flex.scss | 19 + css/main.scss | 47 ++ css/public.scss | 9 + css/sidebar.scss | 213 ++++++ css/vote.scss | 30 + img/app.png | Bin 0 -> 195 bytes img/app.svg | 38 + img/expired-unvoted-vote.svg | 14 + img/expired-voted-vote.svg | 11 + img/favicon-mask.svg | 22 + img/favicon-touch.png | Bin 0 -> 1277 bytes img/favicon-touch.svg | 46 ++ img/favicon.ico | Bin 0 -> 3262 bytes img/favicon.png | Bin 0 -> 349 bytes img/favicon.svg | 46 ++ img/maybe-toggle.svg | 14 + img/maybe-vote-bordered.svg | 12 + img/maybe-vote-variant.svg | 83 ++ img/maybe-vote.svg | 30 + img/no-comment.svg | 5 + img/no-toggle.svg | 14 + img/no-vote-bordered.svg | 12 + img/no-vote.svg | 6 + img/open-unvoted-vote.svg | 14 + img/open-voted-vote.svg | 11 + img/questionmark.svg | 30 + img/save.svg | 35 + img/share.svg | 6 + img/toggle.svg | 86 +++ img/unvoted-vote-bordered.svg | 9 + img/yes-comment.svg | 5 + img/yes-toggle.svg | 14 + img/yes-vote-bordered.svg | 12 + img/yes-vote.svg | 6 + js/.jshintrc | 46 ++ js/app.js | 14 + js/survey.jquery.min.js | 6 + js/vote.js | 57 ++ l10n/.gitkeep | 0 l10n/ca.js | 61 ++ l10n/ca.json | 59 ++ l10n/cs.js | 113 +++ l10n/cs.json | 111 +++ l10n/da.js | 78 ++ l10n/da.json | 76 ++ l10n/de.js | 113 +++ l10n/de.json | 111 +++ l10n/de_DE.js | 113 +++ l10n/de_DE.json | 111 +++ l10n/el.js | 40 + l10n/el.json | 38 + l10n/en_GB.js | 53 ++ l10n/en_GB.json | 51 ++ l10n/eo.js | 113 +++ l10n/eo.json | 111 +++ l10n/es.js | 113 +++ l10n/es.json | 111 +++ l10n/es_CL.js | 51 ++ l10n/es_CL.json | 49 ++ l10n/es_CO.js | 51 ++ l10n/es_CO.json | 49 ++ l10n/es_CR.js | 51 ++ l10n/es_CR.json | 49 ++ l10n/es_DO.js | 51 ++ l10n/es_DO.json | 49 ++ l10n/es_EC.js | 51 ++ l10n/es_EC.json | 49 ++ l10n/es_GT.js | 51 ++ l10n/es_GT.json | 49 ++ l10n/es_MX.js | 53 ++ l10n/es_MX.json | 51 ++ l10n/es_SV.js | 51 ++ l10n/es_SV.json | 49 ++ l10n/et_EE.js | 51 ++ l10n/et_EE.json | 49 ++ l10n/eu.js | 45 ++ l10n/eu.json | 43 ++ l10n/fi.js | 96 +++ l10n/fi.json | 94 +++ l10n/fr.js | 113 +++ l10n/fr.json | 111 +++ l10n/gl.js | 113 +++ l10n/gl.json | 111 +++ l10n/he.js | 53 ++ l10n/he.json | 51 ++ l10n/hu.js | 83 ++ l10n/hu.json | 81 ++ l10n/is.js | 86 +++ l10n/is.json | 84 +++ l10n/it.js | 113 +++ l10n/it.json | 111 +++ l10n/ja.js | 84 +++ l10n/ja.json | 82 ++ l10n/ka_GE.js | 51 ++ l10n/ka_GE.json | 49 ++ l10n/ko.js | 51 ++ l10n/ko.json | 49 ++ l10n/lt_LT.js | 32 + l10n/lt_LT.json | 30 + l10n/nb.js | 52 ++ l10n/nb.json | 50 ++ l10n/nl.js | 113 +++ l10n/nl.json | 111 +++ l10n/pl.js | 113 +++ l10n/pl.json | 111 +++ l10n/pt_BR.js | 113 +++ l10n/pt_BR.json | 111 +++ l10n/ru.js | 70 ++ l10n/ru.json | 68 ++ l10n/sk.js | 41 + l10n/sk.json | 39 + l10n/sr.js | 113 +++ l10n/sr.json | 111 +++ l10n/sv.js | 63 ++ l10n/sv.json | 61 ++ l10n/tr.js | 113 +++ l10n/tr.json | 111 +++ l10n/zh_CN.js | 52 ++ l10n/zh_CN.json | 50 ++ lib/AppInfo/Application.php | 63 ++ lib/Controller/ApiController.php | 558 ++++++++++++++ lib/Controller/PageController.php | 603 +++++++++++++++ lib/Controller/SystemController.php | 137 ++++ lib/Db/Answer.php | 63 ++ lib/Db/AnswerMapper.php | 96 +++ lib/Db/Comment.php | 62 ++ lib/Db/CommentMapper.php | 72 ++ lib/Db/Event.php | 103 +++ lib/Db/EventMapper.php | 90 +++ lib/Db/Model.php | 39 + lib/Db/Notification.php | 45 ++ lib/Db/NotificationMapper.php | 93 +++ lib/Db/Option.php | 58 ++ lib/Db/OptionMapper.php | 72 ++ lib/Db/Question.php | 66 ++ lib/Db/QuestionMapper.php | 73 ++ lib/Db/Vote.php | 67 ++ lib/Db/VoteMapper.php | 107 +++ .../Version0009Date20190000000005.php | 206 +++++ package.json | 128 ++++ phpunit.integration.xml | 7 + phpunit.xml | 12 + screenshots/edit-form.png | Bin 0 -> 56681 bytes screenshots/overview.png | Bin 0 -> 71261 bytes screenshots/vote-mobile-landscape.png | Bin 0 -> 38458 bytes screenshots/vote-mobile-portrait.png | Bin 0 -> 30685 bytes screenshots/vote.png | Bin 0 -> 164357 bytes src/js/App.vue | 45 ++ src/js/components/_base-CloudDiv.vue | 73 ++ src/js/components/_base-Controls.vue | 106 +++ src/js/components/_base-LoadingOverlay.vue | 31 + src/js/components/_base-SideBar.vue | 39 + src/js/components/_base-UserDiv.vue | 129 ++++ src/js/components/dateFormItem.vue | 52 ++ src/js/components/formListItem.vue | 503 +++++++++++++ src/js/components/quizFormItem.vue | 86 +++ src/js/components/resultItem.vue | 360 +++++++++ src/js/components/shareDiv.vue | 173 +++++ src/js/components/sideBarClose.vue | 45 ++ src/js/components/textFormItem.vue | 43 ++ src/js/main.js | 78 ++ src/js/plugins/modalDialog.vue | 96 +++ src/js/plugins/plugin.js | 30 + src/js/router.js | 89 +++ src/js/views/Create.vue | 708 ++++++++++++++++++ src/js/views/List.vue | 160 ++++ src/js/views/Results.vue | 135 ++++ src/js/views/Vote.vue | 176 +++++ src/js/views/img/app.svg | 38 + src/js/views/img/expired-unvoted-vote.svg | 14 + src/js/views/img/expired-voted-vote.svg | 11 + src/js/views/img/open-unvoted-vote.svg | 14 + src/js/views/img/open-voted-vote.svg | 11 + templates/expired.tmpl.php | 35 + templates/forms.tmpl.php | 28 + templates/no.acc.tmpl.php | 35 + templates/no.create.tmpl.php | 35 + templates/no.delete.tmpl.php | 35 + templates/vote.tmpl.php | 47 ++ tests/Integration/AppTest.php | 43 ++ tests/Unit/Controller/PageControllerTest.php | 120 +++ tests/Unit/Db/CommentMapperTest.php | 97 +++ tests/Unit/Db/EventMapperTest.php | 87 +++ tests/Unit/Db/NotificationMapperTest.php | 97 +++ tests/Unit/Db/OptionMapperTest.php | 97 +++ tests/Unit/Db/VoteMapperTest.php | 99 +++ tests/Unit/Factories/CommentFactory.php | 36 + tests/Unit/Factories/EventFactory.php | 46 ++ tests/Unit/Factories/NotificationFactory.php | 31 + tests/Unit/Factories/OptionFactory.php | 31 + tests/Unit/Factories/VoteFactory.php | 33 + tests/Unit/UnitTestCase.php | 42 ++ tests/bootstrap.php | 38 + webpack.common.js | 56 ++ webpack.dev.js | 13 + webpack.prod.js | 7 + 215 files changed, 15763 insertions(+) create mode 100644 .babelrc.js create mode 100644 .editorconfig create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .l10nignore create mode 100644 .scrutinizer.yml create mode 100644 .travis.yml create mode 100644 .tx/config create mode 100644 CHANGELOG.md create mode 100644 COPYING create mode 100644 ISSUE_TEMPLATE.md create mode 100644 Makefile create mode 100644 README.md create mode 100644 _config.yml create mode 100644 appinfo/app.php create mode 100644 appinfo/info.xml create mode 100644 appinfo/routes.php create mode 100644 composer.json create mode 100644 css/colors.scss create mode 100644 css/flex.scss create mode 100644 css/main.scss create mode 100644 css/public.scss create mode 100644 css/sidebar.scss create mode 100644 css/vote.scss create mode 100644 img/app.png create mode 100644 img/app.svg create mode 100644 img/expired-unvoted-vote.svg create mode 100644 img/expired-voted-vote.svg create mode 100644 img/favicon-mask.svg create mode 100644 img/favicon-touch.png create mode 100644 img/favicon-touch.svg create mode 100644 img/favicon.ico create mode 100644 img/favicon.png create mode 100644 img/favicon.svg create mode 100644 img/maybe-toggle.svg create mode 100644 img/maybe-vote-bordered.svg create mode 100644 img/maybe-vote-variant.svg create mode 100644 img/maybe-vote.svg create mode 100644 img/no-comment.svg create mode 100644 img/no-toggle.svg create mode 100644 img/no-vote-bordered.svg create mode 100644 img/no-vote.svg create mode 100644 img/open-unvoted-vote.svg create mode 100644 img/open-voted-vote.svg create mode 100644 img/questionmark.svg create mode 100644 img/save.svg create mode 100644 img/share.svg create mode 100644 img/toggle.svg create mode 100644 img/unvoted-vote-bordered.svg create mode 100644 img/yes-comment.svg create mode 100644 img/yes-toggle.svg create mode 100644 img/yes-vote-bordered.svg create mode 100644 img/yes-vote.svg create mode 100644 js/.jshintrc create mode 100644 js/app.js create mode 100644 js/survey.jquery.min.js create mode 100644 js/vote.js create mode 100644 l10n/.gitkeep create mode 100644 l10n/ca.js create mode 100644 l10n/ca.json create mode 100644 l10n/cs.js create mode 100644 l10n/cs.json create mode 100644 l10n/da.js create mode 100644 l10n/da.json create mode 100644 l10n/de.js create mode 100644 l10n/de.json create mode 100644 l10n/de_DE.js create mode 100644 l10n/de_DE.json create mode 100644 l10n/el.js create mode 100644 l10n/el.json create mode 100644 l10n/en_GB.js create mode 100644 l10n/en_GB.json create mode 100644 l10n/eo.js create mode 100644 l10n/eo.json create mode 100644 l10n/es.js create mode 100644 l10n/es.json create mode 100644 l10n/es_CL.js create mode 100644 l10n/es_CL.json create mode 100644 l10n/es_CO.js create mode 100644 l10n/es_CO.json create mode 100644 l10n/es_CR.js create mode 100644 l10n/es_CR.json create mode 100644 l10n/es_DO.js create mode 100644 l10n/es_DO.json create mode 100644 l10n/es_EC.js create mode 100644 l10n/es_EC.json create mode 100644 l10n/es_GT.js create mode 100644 l10n/es_GT.json create mode 100644 l10n/es_MX.js create mode 100644 l10n/es_MX.json create mode 100644 l10n/es_SV.js create mode 100644 l10n/es_SV.json create mode 100644 l10n/et_EE.js create mode 100644 l10n/et_EE.json create mode 100644 l10n/eu.js create mode 100644 l10n/eu.json create mode 100644 l10n/fi.js create mode 100644 l10n/fi.json create mode 100644 l10n/fr.js create mode 100644 l10n/fr.json create mode 100644 l10n/gl.js create mode 100644 l10n/gl.json create mode 100644 l10n/he.js create mode 100644 l10n/he.json create mode 100644 l10n/hu.js create mode 100644 l10n/hu.json create mode 100644 l10n/is.js create mode 100644 l10n/is.json create mode 100644 l10n/it.js create mode 100644 l10n/it.json create mode 100644 l10n/ja.js create mode 100644 l10n/ja.json create mode 100644 l10n/ka_GE.js create mode 100644 l10n/ka_GE.json create mode 100644 l10n/ko.js create mode 100644 l10n/ko.json create mode 100644 l10n/lt_LT.js create mode 100644 l10n/lt_LT.json create mode 100644 l10n/nb.js create mode 100644 l10n/nb.json create mode 100644 l10n/nl.js create mode 100644 l10n/nl.json create mode 100644 l10n/pl.js create mode 100644 l10n/pl.json create mode 100644 l10n/pt_BR.js create mode 100644 l10n/pt_BR.json create mode 100644 l10n/ru.js create mode 100644 l10n/ru.json create mode 100644 l10n/sk.js create mode 100644 l10n/sk.json create mode 100644 l10n/sr.js create mode 100644 l10n/sr.json create mode 100644 l10n/sv.js create mode 100644 l10n/sv.json create mode 100644 l10n/tr.js create mode 100644 l10n/tr.json create mode 100644 l10n/zh_CN.js create mode 100644 l10n/zh_CN.json create mode 100644 lib/AppInfo/Application.php create mode 100644 lib/Controller/ApiController.php create mode 100644 lib/Controller/PageController.php create mode 100644 lib/Controller/SystemController.php create mode 100644 lib/Db/Answer.php create mode 100644 lib/Db/AnswerMapper.php create mode 100644 lib/Db/Comment.php create mode 100644 lib/Db/CommentMapper.php create mode 100644 lib/Db/Event.php create mode 100644 lib/Db/EventMapper.php create mode 100644 lib/Db/Model.php create mode 100644 lib/Db/Notification.php create mode 100644 lib/Db/NotificationMapper.php create mode 100644 lib/Db/Option.php create mode 100644 lib/Db/OptionMapper.php create mode 100644 lib/Db/Question.php create mode 100644 lib/Db/QuestionMapper.php create mode 100644 lib/Db/Vote.php create mode 100644 lib/Db/VoteMapper.php create mode 100644 lib/Migration/Version0009Date20190000000005.php create mode 100644 package.json create mode 100644 phpunit.integration.xml create mode 100644 phpunit.xml create mode 100644 screenshots/edit-form.png create mode 100644 screenshots/overview.png create mode 100644 screenshots/vote-mobile-landscape.png create mode 100644 screenshots/vote-mobile-portrait.png create mode 100644 screenshots/vote.png create mode 100644 src/js/App.vue create mode 100644 src/js/components/_base-CloudDiv.vue create mode 100644 src/js/components/_base-Controls.vue create mode 100644 src/js/components/_base-LoadingOverlay.vue create mode 100644 src/js/components/_base-SideBar.vue create mode 100644 src/js/components/_base-UserDiv.vue create mode 100644 src/js/components/dateFormItem.vue create mode 100644 src/js/components/formListItem.vue create mode 100644 src/js/components/quizFormItem.vue create mode 100644 src/js/components/resultItem.vue create mode 100644 src/js/components/shareDiv.vue create mode 100644 src/js/components/sideBarClose.vue create mode 100644 src/js/components/textFormItem.vue create mode 100644 src/js/main.js create mode 100644 src/js/plugins/modalDialog.vue create mode 100644 src/js/plugins/plugin.js create mode 100644 src/js/router.js create mode 100644 src/js/views/Create.vue create mode 100644 src/js/views/List.vue create mode 100644 src/js/views/Results.vue create mode 100644 src/js/views/Vote.vue create mode 100644 src/js/views/img/app.svg create mode 100644 src/js/views/img/expired-unvoted-vote.svg create mode 100644 src/js/views/img/expired-voted-vote.svg create mode 100644 src/js/views/img/open-unvoted-vote.svg create mode 100644 src/js/views/img/open-voted-vote.svg create mode 100644 templates/expired.tmpl.php create mode 100644 templates/forms.tmpl.php create mode 100644 templates/no.acc.tmpl.php create mode 100644 templates/no.create.tmpl.php create mode 100644 templates/no.delete.tmpl.php create mode 100644 templates/vote.tmpl.php create mode 100644 tests/Integration/AppTest.php create mode 100644 tests/Unit/Controller/PageControllerTest.php create mode 100644 tests/Unit/Db/CommentMapperTest.php create mode 100644 tests/Unit/Db/EventMapperTest.php create mode 100644 tests/Unit/Db/NotificationMapperTest.php create mode 100644 tests/Unit/Db/OptionMapperTest.php create mode 100644 tests/Unit/Db/VoteMapperTest.php create mode 100644 tests/Unit/Factories/CommentFactory.php create mode 100644 tests/Unit/Factories/EventFactory.php create mode 100644 tests/Unit/Factories/NotificationFactory.php create mode 100644 tests/Unit/Factories/OptionFactory.php create mode 100644 tests/Unit/Factories/VoteFactory.php create mode 100644 tests/Unit/UnitTestCase.php create mode 100644 tests/bootstrap.php create mode 100644 webpack.common.js create mode 100644 webpack.dev.js create mode 100644 webpack.prod.js diff --git a/.babelrc.js b/.babelrc.js new file mode 100644 index 0000000..475cfbd --- /dev/null +++ b/.babelrc.js @@ -0,0 +1,14 @@ +module.exports = { + plugins: ['@babel/plugin-syntax-dynamic-import'], + presets: [ + [ + '@babel/preset-env', + { + targets: { + browsers: ['last 2 versions', 'ie >= 11'] + } + } + ] + ] +} + diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..059cd56 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,25 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true + +# Set default charset +charset = utf-8 + +# 4 space tab indentation +indent_style = tab +indent_size = 4 + +# Line length form NC coding guidelines +trim_trailing_whitespace = true +max_line_length = 80 + +# 2 space indentation for .yml files +[.*.yml] +indent_style = space +indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..340cc1c --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,67 @@ +module.exports = { + root: true, + env: { + browser: true, + es6: true, + node: true, + jest: true + }, + globals: { + t: true, + n: true, + OC: true, + OCA: true, + Vue: true, + VueRouter: true + }, + parserOptions: { + parser: 'babel-eslint', + ecmaVersion: 6 + }, + extends: [ + 'eslint:recommended', + 'plugin:node/recommended', + 'plugin:vue/essential', + 'plugin:vue/recommended', + 'standard' + ], + plugins: ['vue', 'node'], + rules: { + // space before function () + 'space-before-function-paren': ['error', 'never'], + // curly braces always space + 'object-curly-spacing': ['error', 'always'], + // stay consistent with array brackets + 'array-bracket-newline': ['error', 'consistent'], + // 1tbs brace style + 'brace-style': 'error', + // tabs only + indent: ['error', 'tab'], + 'no-tabs': 0, + 'vue/html-indent': ['error', 'tab'], + // only debug console + 'no-console': ['error', { allow: ['error', 'warn', 'debug'] }], + // classes blocks + 'padded-blocks': ['error', { classes: 'always' }], + // always have the operator in front + 'operator-linebreak': ['error', 'before'], + // ternary on multiline + 'multiline-ternary': ['error', 'always-multiline'], + // es6 import/export and require + 'node/no-unpublished-require': ['off'], + 'node/no-unsupported-features/es-syntax': ['off'], + // space before self-closing elements + 'vue/html-closing-bracket-spacing': 'error', + // code spacing with attributes + 'vue/max-attributes-per-line': [ + 'error', + { + singleline: 3, + multiline: { + max: 3, + allowFirstLine: true + } + } + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8a2862a --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +.DS_Store +.sass-cache/ +.project/ +.idea/ +build/ +css/*.map +js/*forms.* +js/*.svg +nbproject/ +node_modules/ +npm-debug.log +package-lock.json +Thumbs.db +yarn-error.log +*.cmd +*.lock +*.iml +*.ntvs* +*.njsproj +*.sln +*.suo +.svn \ No newline at end of file diff --git a/.l10nignore b/.l10nignore new file mode 100644 index 0000000..a87f091 --- /dev/null +++ b/.l10nignore @@ -0,0 +1,2 @@ +# compiled vue templates +js/create-form.js diff --git a/.scrutinizer.yml b/.scrutinizer.yml new file mode 100644 index 0000000..4d5f84a --- /dev/null +++ b/.scrutinizer.yml @@ -0,0 +1,17 @@ +filter: + excluded_paths: + - 'l10n/*' + - 'js/vendor/*' + +imports: + - javascript + - php + +tools: + external_code_coverage: + timeout: 1000 + +build: + tests: + override: + - jshint-run --config js/.jshintrc diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..03193a5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,58 @@ +sudo: false +dist: trusty +language: php + +services: + - mysql + - postgresql + +php: + - 7.0 + - 7.1 + - 7.2 + +addons: + apt: + packages: + - libxml2-utils + +env: + global: + - CORE_BRANCH=stable14 + - APP_NAME=forms + matrix: + - DB=mysql + - DB=pgsql + - DB=sqlite + +cache: + directories: + - $HOME/.composer/cache + +before_install: + # Install NC and app + - wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh; + - bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB + - cd ../server; + - ./occ app:enable $APP_NAME + +before_script: + - cd apps/$APP_NAME + +script: + # Check info.xml schema validity + - wget https://apps.nextcloud.com/schema/apps/info.xsd + - xmllint appinfo/info.xml --schema info.xsd --noout + - rm info.xsd + # Check PHP syntax errors + - find . -name \*.php -exec php -l "{}" \; + # Execute tests + - make test + +after_success: + # Generate Code Coverage + - wget https://scrutinizer-ci.com/ocular.phar + - php ocular.phar code-coverage:upload --format=php-clover clover.xml + +after_failure: + - cat ../../data/nextcloud.log diff --git a/.tx/config b/.tx/config new file mode 100644 index 0000000..89d0518 --- /dev/null +++ b/.tx/config @@ -0,0 +1,9 @@ +[main] +host = https://www.transifex.com +lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja + +[nextcloud.forms] +file_filter = translationfiles//forms.po +source_file = translationfiles/templates/forms.pot +source_lang = en +type = PO diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..fafd594 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,210 @@ +# Changelog +All notable changes to this project will be documented in this file. + +## [0.10.2] - 2019-03-13 + + - #532 - cannot share form (only share option) + +## [0.10.1] - 2019-03-02 + +### Fixed + + - #528 - pull down on three-dot menu hidden for first participant + +## [0.10.0] - 2019-02-24 + +### Added + + - main list page + - rewrite as a vue app + - improved UI + - ability to clone any form and shift date options (#323, #245) + - design updates to vote page + - some more UI enhancements + - Maybe option for a form is configurable + +### Fixed + + - #82 - "user_" / "group_" prefix + - #206 - User name is prefixed with user_, + incorrect translation + - #461 - Forms with expire date could not be created/edited + - #478 - Send comment bug + - #479 - Not possible to vote for none of the options + - #498 - "Create Form" button disabled after failed validation + - #507 - Fix query params in eventmapper + - #511 - No difference between hidden and open form + +## [0.9.5] - 2018-12-22 + +### Fixed + + - #457 - update to 0.9.4 failed for postgres database + - #454 - Update to 0.9.3 failed for postgresql database + +## [0.9.4] - 2018-12-18 + +### Fixed + + - #453 - Forms upgrade leads to NotNullConstraintViolationException + - #454 - Update to 0.9.3 failed for postgresql database + - #455 - Fix color variable name in list.scss + +## [0.9.3] - 2018-12-18 + +### Fixed + - Fix minor problem with migration + +## [0.9.1] - 2018-12-11 + +### Added + - create/edit page + - rewrite as a vue app + - improved UI + - introduced new NC date time picker from vue-nextcloud + - introduced multiselect from vue-nextcloud + - added option to allow "maybe" vote + + - vote page + - made forms table scrollable + - show new vote options after voting + - open sidebar by default on wide screens + - Users in the admin group should be able to edit forms (#386) + +### Changed + - Compatibility to NC 14 and 15 + - Introduced vue + - Changing database theme + - Forms is a Nextcloud only app now. If you wish to proceed developing the ownCloud version, make a fork from the `stable-0.8` branch. + +### Fixed + - 'Edit form' did not work from form's details view (#294) + - Bug which makes voting impossible after edit + - Write escapes option texts to db (#341) + - display user's display name instead of user name (#402) + - support for asynchronus operations (#371) + - ... a lot more minor bugs + +See https://github.com/nextcloud/forms/milestone/9?closed=1 for all changes and additions. + +## [0.8.3] - 2018-08-30 + +### Added + +### Changed + +### Fixed + - Display own participation in forms in list view + +## [0.8.2] - 2018-08-25 + +### Added + - Compatibility to NC 14 #360 + +### Changed + +### Fixed + - 'Edit form' did not work from form's details view #294 + - Reload of public forms with ownCloud 10 #344 #340 #283 #96 + +## [0.8.1] - 2018-01-19 + +### Added + - Unit tests + - App favicon + - More languages + +### Changed + - New vote page design (responsive) + - New comment design + - A lot of clean up + - removing header elements for public forms + +### Fixed + - Linebreak bug + - Time picker bug (update to version 2.5.14, https://github.com/xdan/datetimepicker) + - Server error, if form does not exist + - Several CSS fixes for NC 11 and oC 10 + +## [0.8.0] - 2017-10-13 + +### Changed + - Big UI overhaul + - Removed oC branding from email strings + - Removed unnecessary files + - A lot of code rework + +### Fixed + - Fix date display in IE and Safari (NaN) + - Translations + +## [0.7.3] - 2017-07-16 + +### Added +- French translations +- Nextcloud 12 compatibility + +### Changed +- Removed some deprecated methods +- Hide usernames in extended anonymous forms + +## [0.7.2] - 2016-10-27 + +### Added +- Search for users / groups in "Select..." access type (similar to sharing dialog) (thanks @scroom) +- Bump OC version to 9.1 +- Anonymous comments / forms +- Allow comments for unregistered / not logged in users + +### Fixed +- Correctly store text votes (thanks @jaeger-sb @joergmschulz) +- Preselection on edit form page +- Current selected access type is now clickable +- Remove unused share manager + +## [0.7.1] - 2016-06-05 + +### Added +- New UI (thanks @mcorteel) +- Search for users / groups (thanks @bodo1987) + +### Fixed +- Several bug fixes +- Use correct timezone for date forms +- Link to form +- Only display users / groups the user is member of (except admin) (thanks @bodo1987) + +## [0.7.0] - 2016-03-18 + +### Added +- Show user avatars +- Toggle all switch +- Show login screen before error + +### Fixed +- Not set expire would lead to 2.1.1970 as expire date +- Invalid characters in url hash +- Empty description in edit +- Many text form fixes +- Notification checkbox fixes +- Blank page fixes on empty votes + +## [0.6.9.1] - 2016-02-21 + +### Fixed +- Replaced placeholder images +- Minor fixes, including external votes + +## [0.6.9] - 2016-02-20 + +### Added +- Edit forms + +### Changed +- New minimal version set to 8.1 + +### Fixed +- Replaced deprecated methods +- Switched from raw php to controller +- Fixed several bugs + - Edit form access + - Vote page layout diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..dba13ed --- /dev/null +++ b/COPYING @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..f07416a --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,85 @@ +**Which Forms version are you running?** (see apps page) + +**Nextcloud or ownCloud?:** + +**Nextcloud/ownCloud version:** (see Nextcloud admin page) + +### Steps to reproduce +1. +2. +3. + +### Actual behaviour +Tell us what happens + +### Expected behaviour +Tell us what should happen instead + +**In case of a bug, please answer the following questions** + +### Server configuration + + +**Where did you install Nextcloud from:** + +**Operating system**: + +**Web server:** + +**Database:** + +**PHP version:** + +**Signing status:** + +``` +Login as admin user into your Nextcloud and access +http://example.com/index.php/settings/integrity/failed +paste the results here. +``` + +**List of activated apps:** + +``` +If you have access to your command line run e.g.: +sudo -u www-data php occ app:list +from within your Nextcloud installation folder +``` + +**Nextcloud configuration:** + +``` +If you have access to your command line run e.g.: +sudo -u www-data php occ config:list system +from within your Nextcloud installation folder + +or + +Insert your config.php content here +Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …) +``` + +**Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/... + +### Client configuration +**Browser:** + +**Operating system:** + +### Logs + +#### Nextcloud log (data/nextcloud.log) +``` +Insert your Nextcloud log here +``` + +#### Browser log +``` +Insert your browser log here, this could for example include: + +a) The javascript console log +b) The network log +c) ... +``` diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..34dbb7f --- /dev/null +++ b/Makefile @@ -0,0 +1,115 @@ +# This file is licensed under the Affero General Public License version 3 or +# later. See the COPYING file. +# @author Bernhard Posselt +# @copyright Bernhard Posselt 2016 + +# Dependencies: +# * make +# * which +# * npm +# * curl: used if phpunit and composer are not installed to fetch them from the web +# * tar: for building the archive + +app_name=forms + +project_dir=$(CURDIR) +build_dir=$(CURDIR)/build +build_tools_dir=$(build_dir)/tools +build_source_dir=$(build_dir)/source +appstore_build_dir=$(build_dir)/artifacts/appstore +appstore_package_name=$(appstore_build_dir)/$(app_name) +nc_cert_dir=$(HOME)/.nextcloud/certificates +composer=$(shell which composer 2> /dev/null) + +all: dev-setup appstore + +# Dev environment setup +dev-setup: clean-dev npm-init composer + +npm-init: + npm install + +# a copy is fetched from the web +.PHONY: composer +composer: +ifeq (,$(composer)) + @echo "No composer command available, downloading a copy from the web" + mkdir -p $(build_tools_dir) + curl -sS https://getcomposer.org/installer | php + mv composer.phar $(build_tools_dir) + php $(build_tools_dir)/composer.phar install --prefer-dist + php $(build_tools_dir)/composer.phar update --prefer-dist +else + composer install --prefer-dist + composer update --prefer-dist +endif + +# Lint +lint: + npm run lint + +lint-fix: + npm run lint:fix + +# Removes the appstore build and compiled js files +.PHONY: clean +clean: + rm -rf $(build_dir) + rm -f js/forms.js + rm -f js/forms.js.map + +clean-dev: clean + rm -rf node_modules + rm -rf ./vendor + +# Build js +# Installs and updates the composer dependencies. If composer is not installed +build-js-production: + npm run build + +# Builds the source package for the app store, ignores php and js tests +.PHONY: appstore +appstore: clean lint build-js-production + mkdir -p $(build_source_dir) + mkdir -p $(appstore_build_dir) + rsync -a \ + --exclude="ISSUE_TEMPLATE.md" \ + --exclude="*.log" \ + --exclude=".*" \ + --exclude="_*" \ + --exclude="build" \ + --exclude="bower.json" \ + --exclude="composer.*" \ + --exclude="js/.*" \ + --exclude="js/*.log" \ + --exclude="js/bower.json" \ + --exclude="js/karma.*" \ + --exclude="js/node_modules" \ + --exclude="js/package.json" \ + --exclude="js/protractor.*" \ + --exclude="js/test" \ + --exclude="js/tests" \ + --exclude="karma.*" \ + --exclude="l10n/no-php" \ + --exclude="Makefile" \ + --exclude="node_modules" \ + --exclude="package*" \ + --exclude="phpunit*xml" \ + --exclude="protractor.*" \ + --exclude="screenshots" \ + --exclude="src" \ + --exclude="tests" \ + --exclude="vendor" \ + --exclude="webpack.*" \ + $(project_dir)/ $(build_source_dir)/$(app_name) + tar -czf $(appstore_package_name).tar.gz \ + --directory="$(build_source_dir)" $(app_name) + @if [ -f $(nc_cert_dir)/$(app_name).key ]; then \ + echo "Signing package..."; \ + openssl dgst -sha512 -sign $(nc_cert_dir)/$(app_name).key $(appstore_build_dir)/$(app_name).tar.gz | openssl base64; \ + fi + +.PHONY: test +test: composer + $(CURDIR)/vendor/phpunit/phpunit/phpunit --coverage-clover clover.xml -c phpunit.xml + $(CURDIR)/vendor/phpunit/phpunit/phpunit -c phpunit.integration.xml diff --git a/README.md b/README.md new file mode 100644 index 0000000..ecb6efc --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +# Forms + +Forms allows the creation of shareable forms, with multiple question types and privacy settings. +**Note**: This app is tested with Apache2 webserver, MySQL database, and apt-get package manager. To use alternatives, replace the relevant commands with those of your technology. + +## Installation +### Download the Forms Codebase +(Placeholder, not sure if we decided we wanted this in this version since the app is not yet on git) +```sh +$ cd /var/www/html/nextcloud/apps +$ svn co https://vis.cs.umd.edu/svn/projects/forms/forms +``` + +### Install NPM +```sh +$ apt-get npm +``` +### Build the App +```sh +$ cd /var/www/html/nextcloud/apps/forms +$ make all +``` + +### Start Webserver / Database +```sh +$ service apache2 start +$ service mysql start +``` + +### Enable the App +- Open NextCloud in your browser of choice (Chrome) +- Click on the user icon in the top right of the screen, and select Apps from the drop down menu +- Find the Forms app in the list and click enable +- The app will now be fully functional! The forms icon will appear on the top toolbar of NextCloud after it has been enabled + + +### To Rebuild +``` +$ cd /var/www/html/nextcloud/apps/forms +$ npm run build +$ service Apache2 restart +$ service mysql restart +``` +Refresh the page in your browser to reflect the changes. + +## Code Overview +The following are the most important code files for development of the Forms App. +**Note**: all paths are relative to nextcloud/apps/forms/ + +- **lib/Controller/apiController.php**: The main API of the application. The functions defined in this file are called from http requests, and interface with the database + +- **lib/Controller/pageController.php**: Passes objects between screens + +- **lib/Db/**: All the files where database entities are defined and SQL queries are written. Mapper files define functions that retrieve data from the database + +- **src/js/** + - **Main.js**: where Vue app is created + - **App.vue**: The root component for the vue app + - **Router.js**: Defines URLs that can be navigated to from the Vue app + +- **src/js/components/** + - **formsListItem.vue**: Defines the list items (created surveys) within the forms app home page + - **quizFormItem.vue**: Questions (for any survey) are defined as a quizFormItem here + +- **src/js/views/** + - **Create.vue**: File where survey creation page is handled + - **Vote.vue**: File where voting page (responding to the survey) is handled + - **List.vue**: File where list of created surveys is handled (located on the forms app home page) + - **Results.vue**: File where page that displays survey results is handled + + - **appinfo/routes.php**: Defines server endpoints that can be accessed by the client + + + diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..c741881 --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file diff --git a/appinfo/app.php b/appinfo/app.php new file mode 100644 index 0000000..f9c8815 --- /dev/null +++ b/appinfo/app.php @@ -0,0 +1,25 @@ + + * + * @author Vinzenz Rosenkranz + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +$app = new \OCA\Forms\AppInfo\Application(); +$app->registerNavigationEntry(); diff --git a/appinfo/info.xml b/appinfo/info.xml new file mode 100644 index 0000000..1fffa15 --- /dev/null +++ b/appinfo/info.xml @@ -0,0 +1,36 @@ + + + forms + Forms + A forms app, similar to Google Forms. + A forms app, similar to Google Forms with the possibility to restrict access (members, certain groups/users, and public). + 1.0.3 + agpl + Vinzenz Rosenkranz + René Gieling + Kai Schröer + Natalie Gilbert + Nick Gallo + Inigo Jiron + Affan Hussain + Ajfar Huq + Tim Sattizahn + Stephan Link + Kameron Sheppard + + https://github.com/nextcloud/forms/blob/master/README.md + + tools + social + organization + https://github.com/nextcloud/forms + https://github.com/nextcloud/forms/issues + https://github.com/nextcloud/forms.git + https://raw.githubusercontent.com/nextcloud/forms/master/screenshots/overview.png + https://raw.githubusercontent.com/nextcloud/forms/master/screenshots/vote.png + https://raw.githubusercontent.com/nextcloud/forms/master/screenshots/edit-form.png + + + + diff --git a/appinfo/routes.php b/appinfo/routes.php new file mode 100644 index 0000000..da113a5 --- /dev/null +++ b/appinfo/routes.php @@ -0,0 +1,52 @@ + + * + * @author Vinzenz Rosenkranz + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option] any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +return [ + 'routes' => [ + ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], + ['name' => 'page#goto_form', 'url' => '/form/{hash}', 'verb' => 'GET'], + + ['name' => 'page#create_form', 'url' => '/new', 'verb' => 'GET'], + ['name' => 'page#edit_form', 'url' => '/edit/{hash}', 'verb' => 'GET'], + ['name' => 'page#clone_form', 'url' => '/clone/{hash}', 'verb' => 'GET'], + + ['name' => 'page#delete_form', 'url' => '/delete', 'verb' => 'POST'], + ['name' => 'page#insert_vote', 'url' => '/insert/vote', 'verb' => 'POST'], + ['name' => 'page#insert_comment', 'url' => '/insert/comment', 'verb' => 'POST'], + ['name' => 'page#search', 'url' => '/search', 'verb' => 'POST'], + ['name' => 'page#get_display_name', 'url' => '/get/displayname', 'verb' => 'POST'], + + ['name' => 'api#write_form', 'url' => '/write/form', 'verb' => 'POST'], + ['name' => 'api#get_form', 'url' => '/get/form/{formIdOrHash}', 'verb' => 'GET'], + ['name' => 'api#get_options', 'url' => '/get/options/{formId}', 'verb' => 'GET'], + ['name' => 'api#get_votes', 'url' => '/get/votes/{formId}', 'verb' => 'GET'], + ['name' => 'api#get_comments', 'url' => '/get/comments/{formId}', 'verb' => 'GET'], + ['name' => 'api#get_shares', 'url' => '/get/shares/{formId}', 'verb' => 'GET'], + ['name' => 'api#get_event', 'url' => '/get/event/{formId}', 'verb' => 'GET'], + ['name' => 'api#remove_form', 'url' => '/remove/form', 'verb' => 'POST'], + ['name' => 'api#get_forms', 'url' => '/get/forms', 'verb' => 'GET'], + + ['name' => 'system#get_site_users_and_groups', 'url' => '/get/siteusers', 'verb' => 'POST'], + ['name' => 'system#get_system', 'url' => '/get/system', 'verb' => 'GET'] + ] +]; diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..dfba726 --- /dev/null +++ b/composer.json @@ -0,0 +1,22 @@ +{ + "name": "nextcloud/forms", + "type": "project", + "license": "AGPLv3", + "authors": [ + { + "name": "Vinzenz Rosenkranz" + }, + { + "name": "Kai Schröer" + }, + { + "name": "René Gieling" + } + ], + "require-dev": { + "christophwurst/nextcloud": "^15.0", + "phpunit/phpunit": "^5.4", + "league/factory-muffin": "^3.0", + "league/factory-muffin-faker": "^2.0" + } +} diff --git a/css/colors.scss b/css/colors.scss new file mode 100644 index 0000000..ee23ede --- /dev/null +++ b/css/colors.scss @@ -0,0 +1,31 @@ +$bg-no: #ffede9; +$bg-maybe: #fcf7e1; +$bg-unvoted: #fff4c8; +$bg-yes: #ebf5d6; +$bg-information: #b19c3e; + +$fg-no: #f45573; +$fg-maybe: #f0db98; +$fg-unvoted: #f0db98; +$fg-yes: #49bc49; + +// Icon definitions +@mixin icon-color($icon, $dir, $color, $version: 1, $core: false) +.icon-app { + @include icon-color('app','forms',$color-text-maxcontrast) +} +.icon-yes { + @include icon-color('checkmark','actions',$fg-yes,1,true) +} +.icon-comment-yes { + @include icon-color('comment','actions',$fg-yes,1,true) +} +.icon-comment-no { + @include icon-color('comment','actions',$fg-no,1,true) +} +.icon-no { + @include icon-color('close','actions',$fg-no,1,true) +} +.icon-maybe { + @include icon-color('maybe-vote-variant','forms',$fg-maybe) +} diff --git a/css/flex.scss b/css/flex.scss new file mode 100644 index 0000000..4c4d731 --- /dev/null +++ b/css/flex.scss @@ -0,0 +1,19 @@ +.flex-row { + display: flex; + flex-direction: row; + flex-grow: 1; + /* align-items: center; */ + &.align-centered { + align-items: center; + } +} + +.flex-column { + display: flex; + flex-direction: column; + flex-grow: 0; + flex-shrink: 0; + &.align-centered { + align-items: center; + } +} diff --git a/css/main.scss b/css/main.scss new file mode 100644 index 0000000..fa86fb7 --- /dev/null +++ b/css/main.scss @@ -0,0 +1,47 @@ +h1 { + font-size: 1.8em; + margin-bottom: 5px; +} + +.icon-forms { + background-image: var(--icon-forms); +} + +/* allow horizontal scrollbar + otherwise user management is not usable on mobile */ +@media only screen and (max-width: 768px) { + #app-content { + overflow-x: auto !important; + } +} + +#controls { + // adopted from NC13 for compatibily with OC10 and NC11-NC12 + width: 100%; + position: relative; + top: 4px; + h2 { + margin-top: 12px; + } + .breadcrumb { + flex-grow: 1; + overflow: hidden; + + div.crumb { + overflow: hidden; + white-space: nowrap; + flex-shrink: 0; + } + } + +} + +input[type="text"] { + display: block; + width: 100%; +} + +/* OC10 and NC11 fixes*/ +.symbol { + display: inline-block; +} diff --git a/css/public.scss b/css/public.scss new file mode 100644 index 0000000..68b4e4b --- /dev/null +++ b/css/public.scss @@ -0,0 +1,9 @@ +#header { + #appmenu,.header-right, nav { + display:none; + } +} + +div.crumb { + background-image: none; +} diff --git a/css/sidebar.scss b/css/sidebar.scss new file mode 100644 index 0000000..40da4f0 --- /dev/null +++ b/css/sidebar.scss @@ -0,0 +1,213 @@ +@import 'colors.scss'; + +$border_current_user: 2px solid; +$border_user: 1px solid var(--color-border-dark); +$user-column-width: 265px; + +#forms-sidebar { + width: 520px; + flex-grow: 0; + flex-shrink: 1; + min-width: 300px; + border-left: 1px solid var(--color-border); + transition: margin-right 300ms; + z-index: 500; + > div, > ul { + padding: 8px; + } +} + + + .authorRow { + align-items: center; + .author { + margin-left: 8px; + opacity: .5; + flex-grow: 1; + &.external { + margin-right: 33px; + opacity: 1; + > input { + width: 100% + } + } + } + } + + .detailsView { + z-index: 1000 !important; + .close.flex-row { + justify-content: flex-end; + margin: 8px 8px 0 0; + } + + .header.flex-row { + flex-direction: row; + flex-grow: 0; + align-items: flex-start; + margin-left: 0; + margin-top: 0; + padding: 0 17px; + } + + .formInformation { + width: 220px; + flex-grow: 1; + flex-shrink: 1; + padding-right: 15px; + + .authorRow { + .leftLabel { + margin-right: 4px; + } + } + + .cloud { + margin: 4px 0; + + > span { + color: var(--color-primary-text); + margin: 2px; + padding: 2px 4px; + border-radius: var(--border-radius); + float: left; + text-shadow: 1px 1px var(--color-box-shadow); + background-color: var(--color-loading-light); + + } + .open { + background-color: $fg-yes; + } + .expired { + background-color: $fg-no; + } + .information { + background-color: $bg-information; + } + } + } + #expired_info { + margin: 0 15px; + } + + .formActions { + display: flex; + flex-direction: column; + margin-right: 15px; + + .close { + margin: 15px; + background-position: right top; + height: 30px; + } + + > ul > li { + &:focus, &:hover, &.active, a.selected { + &, > a { + opacity: 1; + box-shadow: inset 4px 0 var(--color-primary); + } + } + + > a[class*="icon-"], + > ul > li > a[class*="icon-"], + > a[style*="background-image"], + > ul > li > a[style*="background-image"] { + padding-left: 44px; + } + + > a, + > ul > li > a { + background-size: 16px 16px; + background-position: 14px center; + background-repeat: no-repeat; + display: block; + justify-content: space-between; + line-height: 44px; + min-height: 44px; + padding: 0 12px; + overflow: hidden; + box-sizing: border-box; + white-space: nowrap; + text-overflow: ellipsis; + color: var(--color-main-text); + opacity: 0.57; + flex: 1 1 0; + z-index: 100; + } + a, + .app-navigation-entry-deleted { + padding-left: 44px !important; + } + } + } + #configurationsTabView { + .configBox { + padding: 8px 8px; + + > .title { + font-weight: bold; + margin-bottom: 4px; + } + + > div { + padding-left: 4px; + } + + input.hasDatepicker { + margin-left:17px; + } + &.oneline { + width: 100%; + } + } + } + #commentsTabView { + + .newCommentForm div.message:empty:before { + content: attr(data-placeholder); + color: grey; + } + #commentBox { + border: 1px solid var(--color-border-dark); + border-radius: var(--border-radius); + padding: 7px 6px; + margin: 3px 3px 3px 40px; + cursor: text; + } + .comment { + margin-bottom: 30px; + + .date { + right: 0; + top: 5px; + opacity: .5; + } + } + + .message { + margin-left: 40px; + flex-grow: 1; + flex-shrink: 1; + } + + + .new-comment { + .submitComment { + align-self: last baseline; + width: 30px; + margin: 0; + padding: 7px 9px; + background-color: transparent; + border: none; + opacity: .3; + } + + .icon-loading-small { + float: left; + margin-top: 10px; + display: none; + } + } + } + } diff --git a/css/vote.scss b/css/vote.scss new file mode 100644 index 0000000..407b811 --- /dev/null +++ b/css/vote.scss @@ -0,0 +1,30 @@ +.app-forms { + margin: auto; + width: 50%; + margin-top: 20px; +} + +.sv_qstn .sq-root { + border: 1px solid gray; + border-left: 4px solid #18a689; + border-radius: 5px; + padding: 20px; + margin-bottom: 30px; + font-size: 18px; +} + +.sq-title { + font-size: 22px; + margin-left: 20px; +} + +.sq-title-required { + color: black; +} + +.sq-label { + margin-left: 30px; +} +.sq-item:nth-child(1) { + margin-bottom: 5px; +} diff --git a/img/app.png b/img/app.png new file mode 100644 index 0000000000000000000000000000000000000000..84a879bbc4db8357fa566ebb90686d1c460cd41a GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoQ!3HFqYQLWaQY^(zo*^7SP{WbZ0pxQQctjR6 zFz_7#VaBQ2e9}Nc$r9IylHmNblJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@~pS96Vhd zLp(Z@|NQ^|zn)E|VdBJzg41O*8#<-hdZLWJ=p-(j=J+G%4m)78&qol`;+0ClT8dH?_b literal 0 HcmV?d00001 diff --git a/img/app.svg b/img/app.svg new file mode 100644 index 0000000..cbf6139 --- /dev/null +++ b/img/app.svg @@ -0,0 +1,38 @@ + +image/svg+xml \ No newline at end of file diff --git a/img/expired-unvoted-vote.svg b/img/expired-unvoted-vote.svg new file mode 100644 index 0000000..ca46c72 --- /dev/null +++ b/img/expired-unvoted-vote.svg @@ -0,0 +1,14 @@ + + + + diff --git a/img/expired-voted-vote.svg b/img/expired-voted-vote.svg new file mode 100644 index 0000000..a58f41b --- /dev/null +++ b/img/expired-voted-vote.svg @@ -0,0 +1,11 @@ + + + + diff --git a/img/favicon-mask.svg b/img/favicon-mask.svg new file mode 100644 index 0000000..a29f9e9 --- /dev/null +++ b/img/favicon-mask.svg @@ -0,0 +1,22 @@ + +image/svg+xml \ No newline at end of file diff --git a/img/favicon-touch.png b/img/favicon-touch.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5b513827b74aa53fa1600e0e3cc348522db140 GIT binary patch literal 1277 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSEX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m+AU64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq<{uhdAc}; zRLpsM%im*3sm$?@-`|@XuWRG3%-rtsN{FjkAg7qsUpsKQYKK75?N?&DNhK3b>7++* zFV@w4*cNzG%tN4LRqF?l6}RQ47rj=Ry*pry_ll4{7g#4-c76VH<^A*0>SvW{ ze-3^AHnZ}d#kS-mrK4Zl`veaaI=x`H&UT02glT4O?XnPUb{$4@#WPL2xqL2}nLFp_ z*R7U+wr$JT6W{rRPJD5+@GNXUz3yQi)BMN9?~Sk6hJW3?>ej0}R}??JlYJoai~s)H zq66w8VfPho|Gk|ioiBG_=F8`Wd${lHW|AXj`<5^a7RGu2~e)TuJurFrcq41npd&AoIKlgt7 zr}k;#zdx_D&;74iP~)1)05qmTsdJ@DpzWWH1q=Ti-Mycw%l?O*UzSp*Ld)}O{|#ce z7gVhJu6#ixSxvxGcZgjBG|BSM ztHV5{=a({ST=1W2ZNKMcNI1 z<<97{?NiaUIpDABZmTHMZ`fou}DK9*8vOGggHzGeqdqm<8lf6Z)TtO zdBuSc#Gw|O@b>5PIqzhjfAH4KiV2T3*tFty6fIP@(-3N|zRNs$L=w^T3o*U zqq3p#TPjztdP9Gf?aV8)cAr>yg_G^pbn}?qFMpr+nR{sG_l9M2<$SZU8Xx>Rz5ny+ z+FVdQ&MBb@0Q)I3;{X5v literal 0 HcmV?d00001 diff --git a/img/favicon-touch.svg b/img/favicon-touch.svg new file mode 100644 index 0000000..e0f7ca7 --- /dev/null +++ b/img/favicon-touch.svg @@ -0,0 +1,46 @@ + +image/svg+xml \ No newline at end of file diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9090c1394b75eee3c3e72a76d1b93444db45b8f7 GIT binary patch literal 3262 zcmeHKOA5k341MC(wYcoc&l#jBh@L}TiQoxzA>KiI1y7;fdMbUxXc}Q0?UcHjv{N3F z)p~GP7CBa+zwSwk{st4c8db*X;n^V zSF4FBk@jmLw-tF8*`h{%3MHD~U1r;GdG23b47hBI=EF!lS+)VWdLqMI!fZhpi6<-a zQ-P?DUxcVn)W?1(et#2eeA%qXFA8V@1&db$@qPk2SgO=u<5X=vX`rBFiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0wwJY5_^ zB3j>0x8*wIAkex$^39dYKkipD9$lP~m?-GX+Njw)0xO5vM!W6$;wY0Vk$Kf0&?jA41n pvr#+2q4;(X+meW+KNlq*u-aZQRXF6LaTDlE22WQ%mvv4FO#r!sh%W#D literal 0 HcmV?d00001 diff --git a/img/favicon.svg b/img/favicon.svg new file mode 100644 index 0000000..3f6d8b1 --- /dev/null +++ b/img/favicon.svg @@ -0,0 +1,46 @@ + +image/svg+xml \ No newline at end of file diff --git a/img/maybe-toggle.svg b/img/maybe-toggle.svg new file mode 100644 index 0000000..b8583fa --- /dev/null +++ b/img/maybe-toggle.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/img/maybe-vote-bordered.svg b/img/maybe-vote-bordered.svg new file mode 100644 index 0000000..737da61 --- /dev/null +++ b/img/maybe-vote-bordered.svg @@ -0,0 +1,12 @@ + + + + diff --git a/img/maybe-vote-variant.svg b/img/maybe-vote-variant.svg new file mode 100644 index 0000000..1be11a4 --- /dev/null +++ b/img/maybe-vote-variant.svg @@ -0,0 +1,83 @@ + + + + + + + + + image/svg+xml + + + + + + + ( + ) + + diff --git a/img/maybe-vote.svg b/img/maybe-vote.svg new file mode 100644 index 0000000..0ee1017 --- /dev/null +++ b/img/maybe-vote.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/img/no-comment.svg b/img/no-comment.svg new file mode 100644 index 0000000..1ac7b55 --- /dev/null +++ b/img/no-comment.svg @@ -0,0 +1,5 @@ + + + diff --git a/img/no-toggle.svg b/img/no-toggle.svg new file mode 100644 index 0000000..2cd454d --- /dev/null +++ b/img/no-toggle.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/img/no-vote-bordered.svg b/img/no-vote-bordered.svg new file mode 100644 index 0000000..fd99205 --- /dev/null +++ b/img/no-vote-bordered.svg @@ -0,0 +1,12 @@ + + + + diff --git a/img/no-vote.svg b/img/no-vote.svg new file mode 100644 index 0000000..bea9647 --- /dev/null +++ b/img/no-vote.svg @@ -0,0 +1,6 @@ + + + diff --git a/img/open-unvoted-vote.svg b/img/open-unvoted-vote.svg new file mode 100644 index 0000000..4376c06 --- /dev/null +++ b/img/open-unvoted-vote.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/img/open-voted-vote.svg b/img/open-voted-vote.svg new file mode 100644 index 0000000..58e5764 --- /dev/null +++ b/img/open-voted-vote.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/img/questionmark.svg b/img/questionmark.svg new file mode 100644 index 0000000..f2e369d --- /dev/null +++ b/img/questionmark.svg @@ -0,0 +1,30 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/img/save.svg b/img/save.svg new file mode 100644 index 0000000..f8fbaae --- /dev/null +++ b/img/save.svg @@ -0,0 +1,35 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/img/share.svg b/img/share.svg new file mode 100644 index 0000000..d67d35c --- /dev/null +++ b/img/share.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/img/toggle.svg b/img/toggle.svg new file mode 100644 index 0000000..71d260f --- /dev/null +++ b/img/toggle.svg @@ -0,0 +1,86 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/img/unvoted-vote-bordered.svg b/img/unvoted-vote-bordered.svg new file mode 100644 index 0000000..3bbd71d --- /dev/null +++ b/img/unvoted-vote-bordered.svg @@ -0,0 +1,9 @@ + + + diff --git a/img/yes-comment.svg b/img/yes-comment.svg new file mode 100644 index 0000000..57d21f2 --- /dev/null +++ b/img/yes-comment.svg @@ -0,0 +1,5 @@ + + + diff --git a/img/yes-toggle.svg b/img/yes-toggle.svg new file mode 100644 index 0000000..690628b --- /dev/null +++ b/img/yes-toggle.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/img/yes-vote-bordered.svg b/img/yes-vote-bordered.svg new file mode 100644 index 0000000..59f2215 --- /dev/null +++ b/img/yes-vote-bordered.svg @@ -0,0 +1,12 @@ + + + + diff --git a/img/yes-vote.svg b/img/yes-vote.svg new file mode 100644 index 0000000..32e6aaf --- /dev/null +++ b/img/yes-vote.svg @@ -0,0 +1,6 @@ + + + diff --git a/js/.jshintrc b/js/.jshintrc new file mode 100644 index 0000000..374bc06 --- /dev/null +++ b/js/.jshintrc @@ -0,0 +1,46 @@ +{ + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 4, + "latedef": true, + "noarg": true, + "noempty": true, + "nonew": true, + "plusplus": false, + "node": true, + "undef": true, + "unused": false, + "strict": false, + "maxparams": false, + "maxdepth": 4, + "esversion": 6, + "browser": true, + "devel": true, + "jquery": true, + "jasmine": true, + "laxbreak": true, + "globals": { + "jQuery": true, + "ICAL": true, + "jstz": true, + "moment": true, + "angular": true, + "app": true, + "OC": true, + "oc_current_user":true, + "oc_requesttoken": true, + "requestToken": true, + "inject": true, + "module": true, + "t": true, + "it": true, + "exports": true, + "escapeHTML": true, + "possible": true, + "dav": true, + "hslToRgb": true, + "autosize": true, + "_": true + } +} diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000..d23b0b3 --- /dev/null +++ b/js/app.js @@ -0,0 +1,14 @@ +function deleteForm($formEl) { + var str = t('forms', 'Do you really want to delete this new form?') + '\n\n' + $($formEl).attr('data-value'); + if (confirm(str)) { + var form = document.form_delete_form; + var hiddenId = document.createElement("input"); + hiddenId.setAttribute("name", "formId"); + hiddenId.setAttribute("type", "hidden"); + form.appendChild(hiddenId); + form.elements.formId.value = $formEl.id.split('_')[2]; + form.submit(); + } +} + + diff --git a/js/survey.jquery.min.js b/js/survey.jquery.min.js new file mode 100644 index 0000000..eaca09b --- /dev/null +++ b/js/survey.jquery.min.js @@ -0,0 +1,6 @@ +/*! + * surveyjs - Survey JavaScript library v1.0.1 + * Copyright (c) 2015-2017 Devsoft Baltic OÜ - http://surveyjs.io/ + * License: MIT (http://www.opensource.org/licenses/mit-license.php) + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("jquery")):"function"==typeof define&&define.amd?define("Survey",["jquery"],t):"object"==typeof exports?exports.Survey=t(require("jquery")):e.Survey=t(e.jQuery)}(this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=109)}([function(e,t,r){"use strict";function n(e,t){function r(){this.constructor=e}for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}r.d(t,"a",function(){return i}),t.b=n,r.d(t,"c",function(){return o});var i=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,r,a):i(t,r))||a);return o>3&&a&&Object.defineProperty(t,r,a),a}},function(e,t,r){"use strict";r.d(t,"a",function(){return n}),r.d(t,"b",function(){return i});var n={currentLocale:"",defaultLocale:"en",locales:{},supportedLocales:[],getString:function(e){var t=this.currentLocale?this.locales[this.currentLocale]:this.locales[this.defaultLocale];return t&&t[e]||(t=this.locales[this.defaultLocale]),t[e]},getLocales:function(){var e=[];if(e.push(""),this.supportedLocales&&this.supportedLocales.length>0)for(var t=0;t2?i-2:0),a=2;a-1&&(n=r.substring(a+1),r=r.substring(0,a));var s=this.getIsPropertyNameRequired(r);r=this.getPropertyName(r);var u=new o(r,s);if(n&&(u.type=n),"object"==typeof t){if(t.type&&(u.type=t.type),i.a.isValueEmpty(t.default)||(u.defaultValue=t.default),i.a.isValueEmpty(t.isSerializable)||(u.isSerializable=t.isSerializable),!1===t.visible&&(u.visible=!1),t.isRequired&&this.makePropertyRequired(u.name),t.choices){var l="function"==typeof t.choices?t.choices:null,c="function"!=typeof t.choices?t.choices:null;u.setChoices(c,l)}if(t.onGetValue&&(u.onGetValue=t.onGetValue),t.onSetValue&&(u.onSetValue=t.onSetValue),t.serializationProperty){u.serializationProperty=t.serializationProperty;u.serializationProperty&&0==u.serializationProperty.indexOf("loc")&&(u.isLocalizable=!0)}t.isLocalizable&&(u.isLocalizable=t.isLocalizable),t.className&&(u.className=t.className),t.baseClassName&&(u.baseClassName=t.baseClassName),t.classNamePart&&(u.classNamePart=t.classNamePart),t.alternativeName&&(u.alternativeName=t.alternativeName)}return u}},e.prototype.getIsPropertyNameRequired=function(t){return t.length>0&&t[0]==e.requiredSymbol},e.prototype.getPropertyName=function(e){return this.getIsPropertyNameRequired(e)?(e=e.slice(1),this.makePropertyRequired(e),e):e},e.prototype.makePropertyRequired=function(e){this.requiredProperties||(this.requiredProperties=new Array),this.requiredProperties.push(e)},e.requiredSymbol="!",e.typeSymbol=":",e}(),u=function(){function e(){this.classes={},this.childrenClasses={},this.classProperties={},this.classRequiredProperties={}}return e.prototype.addClass=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=new s(e,t,r,n);if(this.classes[e]=i,n){this.childrenClasses[n]||(this.childrenClasses[n]=[]),this.childrenClasses[n].push(i)}return i},e.prototype.overrideClassCreatore=function(e,t){var r=this.findClass(e);r&&(r.creator=t)},e.prototype.getProperties=function(e){var t=this.classProperties[e];return t||(t=new Array,this.fillProperties(e,t),this.classProperties[e]=t),t},e.prototype.findProperty=function(e,t){for(var r=this.getProperties(e),n=0;n=0&&e.requiredProperties.splice(r,1))},e.prototype.emptyClassPropertiesHash=function(e){this.classProperties[e.name]=null;for(var t=this.getChildrenClasses(e.name),r=0;r0&&(n.description+=", "),n.description+=i[o].name;n.description+="."}return n}return n.b(t,e),t}(l),p=function(e){function t(t,r,n){var i=e.call(this,r,n)||this;i.baseClassName=t,i.type=r,i.message=n,i.description="The following types are available: ";for(var o=g.metaData.getChildrenClasses(t,!0),a=0;a0&&(i.description+=", "),i.description+="'"+o[a].name+"'";return i.description+=".",i}return n.b(t,e),t}(l),h=function(e){function t(t,r){var n=e.call(this,r,"missingtypeproperty","The property type is missing in the object. Please take a look at property: '"+t+"'.")||this;return n.propertyName=t,n.baseClassName=r,n}return n.b(t,e),t}(p),d=function(e){function t(t,r){var n=e.call(this,r,"incorrecttypeproperty","The property type is incorrect in the object. Please take a look at property: '"+t+"'.")||this;return n.propertyName=t,n.baseClassName=r,n}return n.b(t,e),t}(p),f=function(e){function t(t,r){var n=e.call(this,"requiredproperty","The property '"+t+"' is required in class '"+r+"'.")||this;return n.propertyName=t,n.className=r,n}return n.b(t,e),t}(l),g=function(){function e(){this.errors=new Array}return Object.defineProperty(e,"metaData",{get:function(){return e.metaDataValue},enumerable:!0,configurable:!0}),e.prototype.toJsonObject=function(e){return this.toJsonObjectCore(e,null)},e.prototype.toObject=function(t,r){if(t){var n=null;if(r.getType&&(n=e.metaData.getProperties(r.getType())),n){r.startLoadingFromJson&&r.startLoadingFromJson();for(var i in t)if(i!=e.typePropertyName)if(i!=e.positionPropertyName){var o=this.findProperty(n,i);o?this.valueToObj(t[i],r,i,o):this.addNewError(new c(i.toString(),r.getType()),t)}else r[i]=t[i];r.endLoadingFromJson&&r.endLoadingFromJson()}}},e.prototype.toJsonObjectCore=function(t,r){if(!t.getType)return t;var n={};null==r||r.className||(n[e.typePropertyName]=r.getObjType(t.getType()));for(var i=e.metaData.getProperties(t.getType()),o=0;o0?i:null}else n=this.toJsonObjectCore(n,r);r.isDefaultValue(n)||(t[r.name]=n)}}},e.prototype.valueToObj=function(e,t,r,n){if(null!=e){if(null!=n&&n.hasToUseSetValue)return void n.setValue(t,e,this);if(this.isValueArray(e))return void this.valueToArray(e,t,n.name,n);var i=this.createNewObj(e,n);i.newObj&&(this.toObject(e,i.newObj),e=i.newObj),i.error||(null!=n?n.setValue(t,e,this):t[n.name]=e)}},e.prototype.isValueArray=function(e){return e&&Array.isArray(e)},e.prototype.createNewObj=function(t,r){var n={newObj:null,error:null},i=t[e.typePropertyName];return!i&&null!=r&&r.className&&(i=r.className),i=r.getClassName(i),n.newObj=i?e.metaData.createClass(i):null,n.error=this.checkNewObjectOnErrors(n.newObj,t,r,i),n},e.prototype.checkNewObjectOnErrors=function(t,r,n,i){var o=null;if(t){var a=e.metaData.getRequiredProperties(i);if(a)for(var s=0;s0&&t[r].splice(0,t[r].length),t[r]||(t[r]=[]);for(var i=0;i-1&&this.fireCallback(this.titleChangedCallback)}},Object.defineProperty(t.prototype,"no",{get:function(){if(this.visibleIndex<0)return"";var e=1,t=!0,r="";return this.survey&&this.survey.questionStartIndex&&(r=this.survey.questionStartIndex,parseInt(r)?e=parseInt(r):1==r.length&&(t=!1)),t?(this.visibleIndex+e).toString():String.fromCharCode(r.charCodeAt(0)+this.visibleIndex)},enumerable:!0,configurable:!0}),t.prototype.onSurveyLoad=function(){e.prototype.onSurveyLoad.call(this),this.defaultValue&&this.updateValueWithDefaults()},t.prototype.onSetData=function(){e.prototype.onSetData.call(this),this.onSurveyValueChanged(this.value),this.defaultValue&&this.updateValueWithDefaults()},Object.defineProperty(t.prototype,"value",{get:function(){return this.valueFromData(this.getValueCore())},set:function(e){this.setNewValue(e),this.isvalueChangedCallbackFiring||(this.isvalueChangedCallbackFiring=!0,this.fireCallback(this.valueChangedCallback),this.isvalueChangedCallbackFiring=!1)},enumerable:!0,configurable:!0}),t.prototype.clearValue=function(){this.value=null,this.comment=null},t.prototype.clearValueIfInvisible=function(){this.isVisible||this.clearValue()},Object.defineProperty(t.prototype,"displayValue",{get:function(){return this.value},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"defaultValue",{get:function(){return this.getPropertyValue("defaultValue")},set:function(e){this.setPropertyValue("defaultValue",e),this.updateValueWithDefaults()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"correctAnswer",{get:function(){return this.getPropertyValue("correctAnswer")},set:function(e){this.setPropertyValue("correctAnswer",e)},enumerable:!0,configurable:!0}),t.prototype.isAnswerCorrect=function(){return!this.isValueEmpty(this.value)&&!this.isValueEmpty(this.correctAnswer)&&this.isTwoValueEquals(this.value,this.correctAnswer)},t.prototype.updateValueWithDefaults=function(){this.isLoadingFromJson||!this.isDesignMode&&this.isValueEmpty(this.defaultValue)||(this.isDesignMode||this.isEmpty())&&this.setDefaultValue()},t.prototype.setDefaultValue=function(){this.value=this.defaultValue},Object.defineProperty(t.prototype,"comment",{get:function(){return this.getComment()},set:function(e){this.comment!=e&&(this.setComment(e),this.fireCallback(this.commentChangedCallback))},enumerable:!0,configurable:!0}),t.prototype.getComment=function(){return null!=this.data?this.data.getComment(this.getValueName()):this.questionComment},t.prototype.setComment=function(e){this.setNewComment(e)},t.prototype.isEmpty=function(){return this.isValueEmpty(this.value)},Object.defineProperty(t.prototype,"validators",{get:function(){return this.validatorsValue},set:function(e){this.setPropertyValue("validators",e)},enumerable:!0,configurable:!0}),t.prototype.hasErrors=function(e){return void 0===e&&(e=!0),this.checkForErrors(e),this.errors.length>0},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return this.errors.length},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"requiredText",{get:function(){return null!=this.survey&&this.isRequired?this.survey.requiredText:""},enumerable:!0,configurable:!0}),t.prototype.addError=function(e){this.errors.push(e),this.fireCallback(this.errorsChangedCallback)},t.prototype.checkForErrors=function(e){var t=this.errors?this.errors.length:0;if(this.errors=[],this.onCheckForErrors(this.errors),0==this.errors.length&&!this.isEmpty()){var r=this.runValidators();r&&(this.errors=[],this.errors.push(r))}if(this.survey&&0==this.errors.length){var r=this.fireSurveyValidation();r&&this.errors.push(r)}e&&(t!=this.errors.length||t>0)&&this.fireCallback(this.errorsChangedCallback)},t.prototype.fireSurveyValidation=function(){return this.validateValueCallback?this.validateValueCallback():this.survey?this.survey.validateQuestion(this.name):null},t.prototype.onCheckForErrors=function(e){this.hasRequiredError()&&this.errors.push(new u.a(this.requiredErrorText))},t.prototype.hasRequiredError=function(){return this.isRequired&&this.isEmpty()},t.prototype.runValidators=function(){return(new l.a).run(this)},t.prototype.setNewValue=function(e){this.setNewValueInData(e),this.onValueChanged()},t.prototype.setNewValueInData=function(e){this.isValueChangedInSurvey||(e=this.valueToData(e),this.setValueCore(e))},t.prototype.getValueCore=function(){return null!=this.data?this.data.getValue(this.getValueName()):this.questionValue},t.prototype.setValueCore=function(e){null!=this.data?this.data.setValue(this.getValueName(),e):this.questionValue=e},t.prototype.valueFromData=function(e){return e},t.prototype.valueToData=function(e){return e},t.prototype.onValueChanged=function(){},t.prototype.setNewComment=function(e){null!=this.data?this.data.setComment(this.getValueName(),e):this.questionComment=e},t.prototype.onSurveyValueChanged=function(e){this.isValueChangedInSurvey=!0,this.value=this.valueFromData(e),this.fireCallback(this.commentChangedCallback),this.isValueChangedInSurvey=!1},t.prototype.getValidatorTitle=function(){return null},Object.defineProperty(t.prototype,"validatedValue",{get:function(){return this.value},set:function(e){this.value=e},enumerable:!0,configurable:!0}),t}(o.a);i.b.metaData.addClass("question",[{name:"title:text",serializationProperty:"locTitle"},{name:"description:text",serializationProperty:"locDescription"},{name:"commentText",serializationProperty:"locCommentText"},"valueName","enableIf:condition","defaultValue:value","correctAnswer:value","isRequired:boolean",{name:"requiredErrorText:text",serializationProperty:"locRequiredErrorText"},"readOnly:boolean",{name:"validators:validators",baseClassName:"surveyvalidator",classNamePart:"validator"},{name:"titleLocation",default:"default",choices:["default","top","bottom","left"]}],null,"questionbase")},function(e,t,r){"use strict";var n=r(0),i=r(1),o=r(7);r.d(t,"a",function(){return a}),r.d(t,"e",function(){return s}),r.d(t,"b",function(){return u}),r.d(t,"d",function(){return l}),r.d(t,"c",function(){return c});var a=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this)||this;return r.customErrorText=t,r}return n.b(t,e),t.prototype.getText=function(){return this.customErrorText?this.customErrorText:i.a.getString("requiredError")},t}(o.d),s=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this)||this;return r.customErrorText=t,r}return n.b(t,e),t.prototype.getText=function(){return this.customErrorText?this.customErrorText:i.a.getString("requiredErrorInPanel")},t}(o.d),u=function(e){function t(){return e.call(this)||this}return n.b(t,e),t.prototype.getText=function(){return i.a.getString("numericError")},t}(o.d),l=function(e){function t(t){var r=e.call(this)||this;return r.maxSize=t,r}return n.b(t,e),t.prototype.getText=function(){return i.a.getString("exceedMaxSize").format(this.getTextSize())},t.prototype.getTextSize=function(){var e=["Bytes","KB","MB","GB","TB"],t=[0,0,2,3,3];if(0==this.maxSize)return"0 Byte";var r=Math.floor(Math.log(this.maxSize)/Math.log(1024));return(this.maxSize/Math.pow(1024,r)).toFixed(t[r])+" "+e[r]},t}(o.d),c=function(e){function t(t){var r=e.call(this)||this;return r.text=t,r}return n.b(t,e),t.prototype.getText=function(){return this.text},t}(o.d)},function(e,t,r){"use strict";r.d(t,"a",function(){return n});var n=function(){function e(){}return e.isValueEmpty=function(e){return!(!Array.isArray(e)||0!==e.length)||(e&&("string"==typeof e||e instanceof String)&&(e=e.trim()),!e&&0!==e&&!1!==e)},e.randomizeArray=function(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e},e}();String.prototype.format||(String.prototype.format=function(){var e=arguments;return this.replace(/{(\d+)}/g,function(t,r){return void 0!==e[r]?e[r]:t})})},function(e,t,r){"use strict";var n=r(22),i=r(3);r.d(t,"a",function(){return o});var o=function(){function e(e,t){void 0===t&&(t=null),this.locTextValue=new n.a(null,!0);var r=this;this.locTextValue.onGetTextCallback=function(e){return e||(r.isValueEmpty?null:r.value.toString())},t&&(this.locText.text=t),this.value=e}return e.createArray=function(t){var r=[];return e.setupArray(r,t),r},e.setupArray=function(e,t){e.push=function(e){var r=Array.prototype.push.call(this,e);return e.locOwner=t,r},e.splice=function(e,r){for(var n=[],i=2;i-1&&(this.itemValue=r.slice(0,n),this.text=r.slice(n+1))}},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasText",{get:function(){return!!this.locText.pureText},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this.locText.text},set:function(e){this.locText.text=e},enumerable:!0,configurable:!0}),e.prototype.getData=function(){var e=this.getCustomAttributes(),t=this.locText.getJson();if(!e&&!t)return this.value;var r={value:this.value};if(t&&(r.text=t),e)for(var n in e)r[n]=e[n];return r},e.prototype.setData=function(t){if(void 0!==t.value){var r=null;this.isObjItemValue(t)&&(t.itemValue=t.itemValue,this.locText.setJson(t.locText.getJson()),r=e.itemValueProp),this.copyAttributes(t,r)}else this.value=t},Object.defineProperty(e.prototype,"isValueEmpty",{get:function(){return!this.itemValue&&0!==this.itemValue&&!1!==this.itemValue},enumerable:!0,configurable:!0}),e.prototype.isObjItemValue=function(e){return void 0!==e.getType&&"itemvalue"==e.getType()},e.prototype.copyAttributes=function(e,t){for(var r in e)"function"!=typeof e[r]&&(t&&t.indexOf(r)>-1||("text"==r?this.locText.setJson(e[r]):this[r]=e[r]))},e.prototype.getCustomAttributes=function(){var t=null;for(var r in this)"function"==typeof this[r]||e.itemValueProp.indexOf(r)>-1||"itemValue"==r||(null==t&&(t={}),t[r]=this[r]);return t},e.Separator="|",e.itemValueProp=["text","value","hasText","locOwner","locText","isValueEmpty","locTextValue","pos"],e}();i.b.metaData.addClass("itemvalue",["!value",{name:"text",onGetValue:function(e){return e.locText.pureText}}])},function(e,t,r){"use strict";r.d(t,"b",function(){return n}),r.d(t,"a",function(){return i});var n={currentType:"",getCss:function(){var e=this.currentType?this[this.currentType]:i;return e||(e=i),e}},i={root:"sv_main sv_default_css",header:"sv_header",body:"sv_body",footer:"sv_nav",navigationButton:"",navigation:{complete:"sv_complete_btn",prev:"sv_prev_btn",next:"sv_next_btn",start:"sv_start_btn"},progress:"sv_progress",progressBar:"sv_progress_bar",page:{root:"sv_p_root",title:"",description:""},pageTitle:"sv_page_title",pageDescription:"",row:"sv_row",question:{mainRoot:"sv_q sv_qstn",title:"sv_q_title",description:"sv_q_description",comment:"",required:"",titleRequired:"",indent:20,footer:"sv_q_footer"},panel:{title:"sv_p_title",description:"",container:"sv_p_container"},error:{root:"sv_q_erbox",icon:"",item:""},boolean:{root:"sv_qcbc sv_qbln",item:"sv_q_checkbox"},checkbox:{root:"sv_qcbc sv_qcbx",item:"sv_q_checkbox",label:"sv_q_checkbox_label",itemControl:"sv_q_checkbox_control_item",controlLabel:"sv_q_checkbox_control_label",other:"sv_q_other sv_q_checkbox_other"},comment:"",dropdown:{root:"",control:"sv_q_dropdown_control",selectWrapper:"sv_select_wrapper",other:"sv_q_other"},matrix:{root:"sv_q_matrix",label:"sv_q_m_label"},matrixdropdown:{root:"sv_q_matrix_dropdown"},matrixdynamic:{root:"sv_q_matrix_dynamic",button:"sv_matrix_dynamic_button"},paneldynamic:{root:"sv_panel_dynamic",title:"sv_p_title",button:""},multipletext:{root:"sv_q_mt",itemTitle:"sv_q_mt_title",row:"sv_q_mt_row",itemValue:"sv_q_mt_item_value sv_q_text_root"},radiogroup:{root:"sv_qcbc",item:"sv_q_radiogroup",label:"sv_q_radiogroup_label",itemControl:"sv_q_radiogroup_control_item",controlLabel:"",other:"sv_q_other sv_q_radiogroup_other"},rating:{root:"sv_q_rating",item:"sv_q_rating_item",selected:"active",minText:"sv_q_rating_min_text",itemText:"sv_q_rating_item_text",maxText:"sv_q_rating_max_text"},text:"sv_q_text_root",expression:"",saveData:{root:"",saving:"",error:"",success:"",saveAgainButton:""},window:{root:"sv_window",body:"sv_window_content",header:{root:"sv_window_title",title:"",button:"",buttonExpanded:"",buttonCollapsed:""}}};n.standard=i},function(e,t,r){"use strict";var n=r(0),i=r(31),o=r(33),a=r(15);r.d(t,"e",function(){return s}),r.d(t,"d",function(){return u}),r.d(t,"f",function(){return l}),r.d(t,"g",function(){return c}),r.d(t,"c",function(){return p}),r.d(t,"b",function(){return h}),r.d(t,"h",function(){return d}),r.d(t,"a",function(){return f});var s=function(){function e(e){this.origionalValue=e}return e.prototype.getValue=function(e){var t=this.getSimpleValue(this.origionalValue);if(t.isSimple)return t.value;var r=this.removeQuotesAndEscapes(this.origionalValue);if(e){var n=this.getValueName(r);if(n)return e.hasValue(n)?(r=e.getValue(n),this.getSimpleValue(r).value):null}return r},Object.defineProperty(e.prototype,"isBoolean",{get:function(){return this.isBooleanValue(this.origionalValue)},enumerable:!0,configurable:!0}),e.prototype.toString=function(){var e=this.origionalValue;return!e||this.isNumeric(e)||this.isBooleanValue(e)||(e="'"+e+"'"),e},e.prototype.removeQuotesAndEscapes=function(e){e.length>0&&("'"==e[0]||'"'==e[0])&&(e=e.substr(1));var t=e.length;return t>0&&("'"==e[t-1]||'"'==e[t-1])&&(e=e.substr(0,t-1)),e&&(e=e.replace("\\'","'"),e=e.replace('\\"','"')),e},e.prototype.getValueName=function(e){return e.length<3||"{"!=e[0]||"}"!=e[e.length-1]?null:e.substr(1,e.length-2)},e.prototype.isBooleanValue=function(e){return e&&("true"===e.toLowerCase()||"false"===e.toLowerCase())},e.prototype.isNumeric=function(e){if(e&&(e.indexOf("-")>-1||e.indexOf("+")>1||e.indexOf("*")>-1||e.indexOf("/")>-1||e.indexOf("%")>-1))return!1;var t=parseFloat(e);return!isNaN(t)&&isFinite(t)},e.prototype.getSimpleValue=function(e){var t={isSimple:!1,value:e};return void 0===e||"undefined"===e?(t.value=null,t.isSimple=!0,t):e&&"string"==typeof e?this.isNumeric(e)?(t.isSimple=!0,t.value=parseFloat(e),t):this.isBooleanValue(e)?(t.value="true"==e.toLowerCase(),t.isSimple=!0,t):t:(t.isSimple=!0,t)},e}(),u=function(e){function t(t){var r=e.call(this,t)||this;return r.origionalValue=t,r.parameters=new Array,r}return n.b(t,e),t.prototype.getValue=function(e){for(var t=[],r=0;r0&&(e+=", "),e+=this.parameters[t].toString();return e},t}(s),l=function(e){function t(){return e.call(this,null)||this}return n.b(t,e),t.prototype.getValue=function(e){if(!this.left||!this.right)return null;var t=this.left.getValue(e),r=this.right.getValue(e);return"+"==this.operator?t+r:"-"==this.operator?t-r:"*"==this.operator?t*r:"/"==this.operator?r?t/r:null:"%"==this.operator&&r?t%r:null},t.prototype.toString=function(){var e=this.left?this.left.toString():"";return e+=" "+this.operator+" ",this.right&&(e+=this.right.toString()),e},t}(s),c=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this,null)||this;return t&&(r.root=t),r}return n.b(t,e),t.prototype.getValue=function(e){return!!this.root&&(this.processValue=e,this.runNode(this.root))},t.prototype.toString=function(){return this.root?this.root.toString():""},t.prototype.runNode=function(e){for(var t="and"==e.connective,r=0;r-1;return r?n:!n}for(var i=0;it},less:function(e,t){return null!=e&&null!=t&&e=t},lessorequal:function(e,t){return null!=e&&null!=t&&e<=t}},e.operatorsValue)},enumerable:!0,configurable:!0}),e.getOperator=function(t){return e.operators[t]},e.setOperator=function(t,r){e.operators[t]=r},e.isCorrectOperator=function(t){return!!t&&(t=t.toLowerCase(),void 0!=e.operators[t])},e.isNoRightOperation=function(e){return"empty"==e||"notempty"==e},Object.defineProperty(e.prototype,"left",{get:function(){return this.leftValue},set:function(e){this.leftValue=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"right",{get:function(){return this.rightValue},set:function(e){this.rightValue=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"operator",{get:function(){return this.opValue},set:function(t){t&&(t=t.toLowerCase(),e.operators[t]&&(this.opValue=t))},enumerable:!0,configurable:!0}),e.prototype.perform=function(e,t,r){return void 0===e&&(e=null),void 0===t&&(t=null),void 0===r&&(r=null),e||(e=this.left),t||(t=this.right),this.performExplicit(e,t,r)},e.prototype.performExplicit=function(t,r,n){var i=t?t.getValue(n):null;if(!r&&(!0===i||!1===i))return i;var o=r?r.getValue(n):null;return e.operators[this.operator](i,o)},e.prototype.toString=function(){if(!this.right||!this.operator)return"";var t=this.left.toString(),r=t+" "+this.operationToString();return e.isNoRightOperation(this.operator)?r:r+" "+this.right.toString()},e.prototype.operationToString=function(){var e=this.operator;return"equal"==e?"=":"notequal"==e?"!=":"greater"==e?">":"less"==e?"<":"greaterorequal"==e?">=":"lessorequal"==e?"<=":e},e.operatorsValue=null,e}(),h=function(){function e(){this.connectiveValue="and",this.children=[]}return Object.defineProperty(e.prototype,"connective",{get:function(){return this.connectiveValue},set:function(e){e&&(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e||(this.connectiveValue=e))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0==this.children.length},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.children=[],this.connective="and"},e.prototype.toString=function(){if(this.isEmpty)return"";for(var e="",t=0;t0&&(n="("+n+")"),n&&(e&&(e+=" "+this.connective+" "),e+=n)}return e},e}(),d=function(){function e(e){this.expression=e,this.processValue=new a.a}return Object.defineProperty(e.prototype,"expression",{get:function(){return this.expressionValue},set:function(e){this.expression!=e&&(this.expressionValue=e,this.operand=(new i.a).parseExpression(this.expressionValue))},enumerable:!0,configurable:!0}),e.prototype.run=function(e){return this.operand?(this.processValue.values=e,this.operand.getValue(this.processValue)):null},e}(),f=function(){function e(e){this.root=new h,this.expression=e}return Object.defineProperty(e.prototype,"expression",{get:function(){return this.expressionValue},set:function(e){this.expression!=e&&(this.expressionValue=e,(new i.a).parse(this.expressionValue,this.root))},enumerable:!0,configurable:!0}),e.prototype.run=function(e){var t=new c(this.root),r=new a.a;return r.values=e,t.getValue(r)},e}()},function(e,t,r){"use strict";var n=r(0),i=r(2),o=(r.n(i),r(4)),a=r(6);r.d(t,"b",function(){return s}),r.d(t,"a",function(){return u});var s=function(e){function t(t){var r=e.call(this,t)||this;return r.state={value:r.getStateValue()},r.handleOnChange=r.handleOnChange.bind(r),r.handleOnBlur=r.handleOnBlur.bind(r),r}return n.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.setState({value:this.getStateValue()})},t.prototype.handleOnChange=function(e){this.setState({value:e.target.value})},t.prototype.handleOnBlur=function(e){this.question.value=e.target.value,this.setState({value:this.getStateValue()})},t.prototype.render=function(){if(!this.question)return null;var e=this.question.cssClasses;return i.createElement("textarea",{id:this.question.inputId,className:e.root,type:"text",readOnly:this.isDisplayMode,value:this.state.value,placeholder:this.question.placeHolder,onBlur:this.handleOnBlur,onChange:this.handleOnChange,cols:this.question.cols,rows:this.question.rows,"aria-label":this.question.locTitle.renderedHtml})},t.prototype.getStateValue=function(){return this.question.isEmpty()?"":this.question.value},t}(o.b),u=function(e){function t(t){var r=e.call(this,t)||this;return r.question=t.question,r.comment=r.question.comment,r.otherCss=t.otherCss,r.state={value:r.comment},r.handleOnChange=r.handleOnChange.bind(r),r.handleOnBlur=r.handleOnBlur.bind(r),r}return n.b(t,e),t.prototype.handleOnChange=function(e){this.comment=e.target.value,this.setState({value:this.comment})},t.prototype.handleOnBlur=function(e){this.question.comment=this.comment},t.prototype.componentWillReceiveProps=function(e){this.question=e.question},t.prototype.render=function(){if(!this.question)return null;if(this.isDisplayMode)return i.createElement("div",{className:this.cssClasses.comment},this.comment);var e=this.otherCss?this.otherCss:this.cssClasses.comment;return i.createElement("input",{type:"text",className:e,value:this.state.value,onChange:this.handleOnChange,onBlur:this.handleOnBlur,"aria-label":this.question.locTitle.renderedHtml})},t}(o.c);a.a.Instance.registerQuestion("comment",function(e){return i.createElement(s,e)})},function(e,t,r){"use strict";var n=r(10);r.d(t,"a",function(){return i});var i=function(){function e(){this.values=null}return e.prototype.getFirstName=function(e){if(!e)return e;for(var t="",r=0;r0;){if(!o&&"["==e[0]){if(!Array.isArray(i))return r;for(var a=1,s="";a=i.length)return r;i=i[a]}else{o||(e=e.substr(1));var u=this.getFirstName(e);if(!u)return r;if(n.a.isValueEmpty(i[u]))return r;i=i[u],e=e.substr(u.length)}o=!1}return r.value=i,r.hasValue=!0,r},e.prototype.getIntValue=function(e){return"0"==e||(0|e)>0&&e%1==0?Number(e):-1},e}()},function(e,t,r){"use strict";var n=r(0),i=r(3),o=r(8),a=r(11),s=r(10),u=r(1),l=r(9),c=r(21);r.d(t,"b",function(){return p}),r.d(t,"a",function(){return h});var p=function(e){function t(t){var r=e.call(this,t)||this;r.visibleChoicesCache=null,r.otherItemValue=new a.a("other",u.a.getString("otherItemText")),r.choicesFromUrl=null,r.cachedValueForUrlRequests=null,r.isSettingComment=!1;var n=r;return r.choicesValues=r.createItemValues("choices"),r.choicesByUrl=r.createRestfull(),r.choicesByUrl.owner=r,r.createLocalizableString("otherText",r,!0),r.createLocalizableString("otherErrorText",r,!0),r.otherItemValue.locOwner=r,r.choicesByUrl.getResultCallback=function(e){n.onLoadChoicesFromUrl(e)},r}return n.b(t,e),Object.defineProperty(t.prototype,"otherItem",{get:function(){return this.otherItemValue.text=this.otherText?this.otherText:u.a.getString("otherItemText"),this.otherItemValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isOtherSelected",{get:function(){return this.getStoreOthersAsComment()?this.getHasOther(this.value):this.getHasOther(this.cachedValue)},enumerable:!0,configurable:!0}),t.prototype.getHasOther=function(e){return e==this.otherItem.value},Object.defineProperty(t.prototype,"validatedValue",{get:function(){return this.valueToDataCore(this.value)},enumerable:!0,configurable:!0}),t.prototype.createRestfull=function(){return new c.a},t.prototype.getComment=function(){return this.getStoreOthersAsComment()?e.prototype.getComment.call(this):this.commentValue},t.prototype.setComment=function(t){this.getStoreOthersAsComment()?e.prototype.setComment.call(this,t):this.isSettingComment||t==this.commentValue||(this.isSettingComment=!0,this.commentValue=t,this.isOtherSelected&&this.setNewValueInData(this.cachedValue),this.isSettingComment=!1)},t.prototype.setNewValue=function(t){this.cachedValueForUrlRequests=t,e.prototype.setNewValue.call(this,t)},t.prototype.valueFromData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueFromData.call(this,t):(this.cachedValue=this.valueFromDataCore(t),this.cachedValue)},t.prototype.valueToData=function(t){return this.getStoreOthersAsComment()?e.prototype.valueToData.call(this,t):(this.cachedValue=t,this.valueToDataCore(t))},t.prototype.valueFromDataCore=function(e){return this.hasUnknownValue(e)?e==this.otherItem.value?e:(this.comment=e,this.otherItem.value):e},t.prototype.valueToDataCore=function(e){return e==this.otherItem.value&&this.getComment()&&(e=this.getComment()),e},t.prototype.hasUnknownValue=function(e){if(!e)return!1;for(var t=this.activeChoices,r=0;r0||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback);var r=null,n=this.createCachedValueForUrlRequests(this.cachedValueForUrlRequests);if(e&&e.length>0&&(r=new Array,a.a.setData(r,e)),this.choicesFromUrl=r,r){var i=this.updateCachedValueForUrlRequests(n);i&&(this.value=i.value)}this.onVisibleChoicesChanged()},t.prototype.createCachedValueForUrlRequests=function(e){if(this.isValueEmpty(e))return null;if(Array.isArray(e)){for(var t=[],r=0;rr.text?1*t:0})},t.prototype.randomizeArray=function(e){return s.a.randomizeArray(e)},t.prototype.clearUnusedValues=function(){e.prototype.clearUnusedValues.call(this),this.isOtherSelected||this.hasComment||(this.comment=null)},t}(o.a),h=function(e){function t(t){var r=e.call(this,t)||this;return r.name=t,r.colCountValue=1,r}return n.b(t,e),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.colCountValue},set:function(e){e<0||e>4||(this.colCountValue=e,this.fireCallback(this.colCountChangedCallback))},enumerable:!0,configurable:!0}),t}(p);i.b.metaData.addClass("selectbase",["hasComment:boolean","hasOther:boolean",{name:"choices:itemvalues",onGetValue:function(e){return a.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.getData()},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"otherText",serializationProperty:"locOtherText"},{name:"otherErrorText",serializationProperty:"locOtherErrorText"},{name:"storeOthersAsComment:boolean",default:!0}],null,"question"),i.b.metaData.addClass("checkboxbase",[{name:"colCount:number",default:1,choices:[0,1,2,3,4]}],null,"selectbase")},function(e,t,r){"use strict";r.d(t,"a",function(){return o});var n=function(){function e(){}return e}(),i=function(){function e(e,t){this.name=e,this.returnDisplayValue=t,this.isExists=!1}return e}(),o=function(){function e(){this.hasAllValuesOnLastRunValue=!1}return e.prototype.process=function(e,t){if(void 0===t&&(t=!1),this.hasAllValuesOnLastRunValue=!0,!e)return e;if(!this.onProcess)return e;for(var r=this.getItems(e),n=r.length-1;n>=0;n--){var o=r[n],a=this.getName(e.substring(o.start+1,o.end));if(this.canProcessName(a)){var s=new i(a,t);this.onProcess(s),s.isExists?(null==s.value&&(s.value="",this.hasAllValuesOnLastRunValue=!1),e=e.substr(0,o.start)+s.value+e.substr(o.end+1)):this.hasAllValuesOnLastRunValue=!1}}return e},Object.defineProperty(e.prototype,"hasAllValuesOnLastRun",{get:function(){return this.hasAllValuesOnLastRunValue},enumerable:!0,configurable:!0}),e.prototype.getItems=function(e){for(var t=[],r=e.length,i=-1,o="",a=0;a-1){var s=new n;s.start=i,s.end=a,t.push(s)}i=-1}return t},e.prototype.getName=function(e){if(e)return e.trim()},e.prototype.canProcessName=function(e){if(!e)return!1;for(var t=0;t0&&(e[t]=this.valuesHash[t]);return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visiblePages",{get:function(){if(this.isDesignMode)return this.pages;for(var e=new Array,t=0;t0?this.pages[0]:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentPage",{get:function(){var e=this.visiblePages;return null!=this.currentPageValue&&e.indexOf(this.currentPageValue)<0&&(this.currentPage=null),null==this.currentPageValue&&e.length>0&&(this.currentPage=e[0]),this.currentPageValue},set:function(e){var t=this.visiblePages;if(!(null!=e&&t.indexOf(e)<0)&&e!=this.currentPageValue){var r=this.currentPageValue;this.currentPageValue=e,e&&(e.updateCustomWidgets(),e.setWasShown(!0)),this.currentPageChanged(e,r)}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentPageNo",{get:function(){return this.visiblePages.indexOf(this.currentPage)},set:function(e){this.visiblePages;e<0||e>=this.visiblePages.length||(this.currentPage=this.visiblePages[e])},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"questionsOrder",{get:function(){return this.getPropertyValue("questionsOrder","initial")},set:function(e){this.setPropertyValue("questionsOrder",e)},enumerable:!0,configurable:!0}),t.prototype.focusFirstQuestion=function(){var e=this.currentPage;e&&(e.scrollToTop(),e.focusFirstQuestion())},t.prototype.scrollToTopOnPageChange=function(){var e=this.currentPage;e&&(e.scrollToTop(),this.focusFirstQuestionAutomatic&&e.focusFirstQuestion())},Object.defineProperty(t.prototype,"state",{get:function(){return this.isLoading?"loading":this.isCompleted?"completed":this.isCompletedBefore?"completedbefore":!this.isDesignMode&&this.isEditMode&&this.isStartedState&&this.startedPage?"starting":this.currentPage?"running":"empty"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"completedState",{get:function(){return this.completedStateValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"completedStateText",{get:function(){return this.completedStateTextValue},enumerable:!0,configurable:!0}),t.prototype.setCompletedState=function(e,t){this.completedStateValue=e,t||("saving"==e&&(t=this.getLocString("savingData")),"error"==e&&(t=this.getLocString("savingDataError")),"success"==e&&(t=this.getLocString("savingDataSuccess"))),this.completedStateTextValue=t},t.prototype.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),e&&(this.data=null,this.variablesHash={}),this.setTimeSpent(0);for(var r=0;r0&&(this.currentPage=this.visiblePages[0])},t.prototype.mergeValues=function(e,t){if(t&&e)for(var r in e){var n=e[r];n&&"object"==typeof n?(t[r]||(t[r]={}),this.mergeValues(n,t[r])):t[r]=n}},t.prototype.updateCustomWidgets=function(e){e&&e.updateCustomWidgets()},t.prototype.currentPageChanged=function(e,t){this.onCurrentPageChanged.fire(this,{oldCurrentPage:t,newCurrentPage:e})},t.prototype.getProgress=function(){if(null==this.currentPage)return 0;var e=this.visiblePages.indexOf(this.currentPage)+1;return Math.ceil(100*e/this.visiblePageCount)},Object.defineProperty(t.prototype,"isNavigationButtonsShowing",{get:function(){if(this.isDesignMode)return!1;var e=this.currentPage;return!!e&&("show"==e.navigationButtonsVisibility||"hide"!=e.navigationButtonsVisibility&&this.showNavigationButtons)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isEditMode",{get:function(){return"edit"==this.mode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isDisplayMode",{get:function(){return"display"==this.mode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isDesignMode",{get:function(){return this.getPropertyValue("isDesignMode",!1)},enumerable:!0,configurable:!0}),t.prototype.setDesignMode=function(e){this.setPropertyValue("isDesignMode",e),this.onIsSinglePageChanged()},Object.defineProperty(t.prototype,"hasCookie",{get:function(){if(!this.cookieName)return!1;var e=document.cookie;return e&&e.indexOf(this.cookieName+"=true")>-1},enumerable:!0,configurable:!0}),t.prototype.setCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=true; expires=Fri, 31 Dec 9999 0:0:0 GMT")},t.prototype.deleteCookie=function(){this.cookieName&&(document.cookie=this.cookieName+"=;")},t.prototype.nextPage=function(){return!this.isLastPage&&((!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doNextPage(),!0)))},Object.defineProperty(t.prototype,"isCurrentPageHasErrors",{get:function(){return null==this.currentPage||this.currentPage.hasErrors(!0,!0)},enumerable:!0,configurable:!0}),t.prototype.prevPage=function(){if(this.isFirstPage)return!1;var e=this.visiblePages,t=e.indexOf(this.currentPage);this.currentPage=e[t-1]},t.prototype.completeLastPage=function(){return(!this.isEditMode||!this.isCurrentPageHasErrors)&&(!this.doServerValidation()&&(this.doComplete(),!0))},Object.defineProperty(t.prototype,"isSinglePage",{get:function(){return this.getPropertyValue("isSinglePage",!1)},set:function(e){this.setPropertyValue("isSinglePage",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"firstPageIsStarted",{get:function(){return this.getPropertyValue("firstPageIsStarted",!1)},set:function(e){this.setPropertyValue("firstPageIsStarted",e)},enumerable:!0,configurable:!0}),t.prototype.isPageStarted=function(e){return this.firstPageIsStarted&&this.pages.length>0&&this.pages[0]===e},t.prototype.onFirstPageIsStartedChanged=function(){0!=this.pages.length&&(this.isStartedState=this.firstPageIsStarted,this.pageVisibilityChanged(this.pages[0],!this.firstPageIsStarted))},t.prototype.onIsSinglePageChanged=function(){if(!this.isSinglePage||this.isDesignMode){if(this.origionalPages){this.pages.splice(0,this.pages.length);for(var e=0;e0)return!1;var e=this.visiblePages[this.currentPageNo-1];return this.getPageMaxTimeToFinish(e)<=0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLastPage",{get:function(){if(null==this.currentPage)return!0;var e=this.visiblePages;return e.indexOf(this.currentPage)==e.length-1},enumerable:!0,configurable:!0}),t.prototype.doComplete=function(){var e=this.hasCookie;this.stopTimer(),this.clearUnusedValues(),this.setCookie(),this.setCompleted();var t=this,r={showDataSaving:function(e){t.setCompletedState("saving",e)},showDataSavingError:function(e){t.setCompletedState("error",e)},showDataSavingSuccess:function(e){t.setCompletedState("success",e)},showDataSavingClear:function(e){t.setCompletedState("","")}};this.onComplete.fire(this,r),!e&&this.surveyPostId&&this.sendResult()},t.prototype.start=function(){this.firstPageIsStarted&&(this.isStartedState=!1,this.startTimerFromUI(),this.onStarted.fire(this,{}))},Object.defineProperty(t.prototype,"isValidatingOnServer",{get:function(){return this.getPropertyValue("isValidatingOnServer",!1)},enumerable:!0,configurable:!0}),t.prototype.setIsValidatingOnServer=function(e){e!=this.isValidatingOnServer&&(this.setPropertyValue("isValidatingOnServer",e),this.onIsValidatingOnServerChanged())},t.prototype.onIsValidatingOnServerChanged=function(){},t.prototype.doServerValidation=function(){if(!this.onServerValidateQuestions)return!1;for(var e=this,t={data:{},errors:{},survey:this,complete:function(){e.completeServerValidation(t)}},r=0;r"+this.getLocString("completingSurvey")+""},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedCompletedBeforeHtml",{get:function(){return this.completedBeforeHtml?this.processHtml(this.completedBeforeHtml):"

"+this.getLocString("completingSurveyBefore")+"

"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedLoadingHtml",{get:function(){return this.loadingHtml?this.processHtml(this.loadingHtml):"

"+this.getLocString("loadingSurvey")+"

"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"progressText",{get:function(){if(null==this.currentPage)return"";var e=this.visiblePages,t=e.indexOf(this.currentPage)+1;return this.getLocString("progressText").format(t,e.length)},enumerable:!0,configurable:!0}),t.prototype.afterRenderSurvey=function(e){this.onAfterRenderSurvey.fire(this,{survey:this,htmlElement:e})},t.prototype.updateQuestionCssClasses=function(e,t){this.onUpdateQuestionCssClasses.fire(this,{question:e,cssClasses:t})},t.prototype.updatePanelCssClasses=function(e,t){this.onUpdatePanelCssClasses.fire(this,{panel:e,cssClasses:t})},t.prototype.afterRenderPage=function(e){this.onAfterRenderPage.isEmpty||this.onAfterRenderPage.fire(this,{page:this.currentPage,htmlElement:e})},t.prototype.afterRenderQuestion=function(e,t){this.onAfterRenderQuestion.fire(this,{question:e,htmlElement:t})},t.prototype.afterRenderPanel=function(e,t){this.onAfterRenderPanel.fire(this,{panel:e,htmlElement:t})},t.prototype.matrixRowAdded=function(e){this.onMatrixRowAdded.fire(this,{question:e})},t.prototype.matrixRowRemoved=function(e,t,r){this.onMatrixRowRemoved.fire(this,{question:e,rowIndex:t,row:r})},t.prototype.matrixCellCreated=function(e,t){t.question=e,this.onMatrixCellCreated.fire(this,t)},t.prototype.matrixAfterCellRender=function(e,t){t.question=e,this.onMatrixAfterCellRender.fire(this,t)},t.prototype.matrixCellValueChanged=function(e,t){t.question=e,this.onMatrixCellValueChanged.fire(this,t)},t.prototype.matrixCellValidate=function(e,t){return t.question=e,this.onMatrixCellValidate.fire(this,t),t.error?new p.c(t.error):null},t.prototype.uploadFile=function(e,t,r,n){var i=!0;return this.onUploadFile.fire(this,{name:e,file:t,accept:i}),!!i&&(!r&&this.surveyPostId&&this.uploadFileCore(e,t,n),!0)},t.prototype.createSurveyService=function(){return new l.a},t.prototype.uploadFileCore=function(e,t,r){var n=this;r&&r("uploading"),this.createSurveyService().sendFile(this.surveyPostId,t,function(t,i){r&&r(t?"success":"error"),t&&n.setValue(e,i)})},t.prototype.getPage=function(e){return this.pages[e]},t.prototype.addPage=function(e){null!=e&&(this.pages.push(e),this.updateVisibleIndexes())},t.prototype.addNewPage=function(e){void 0===e&&(e=null);var t=this.createNewPage(e);return this.addPage(t),t},t.prototype.removePage=function(e){var t=this.pages.indexOf(e);t<0||(this.pages.splice(t,1),this.currentPageValue==e&&(this.currentPage=this.pages.length>0?this.pages[0]:null),this.updateVisibleIndexes())},t.prototype.getQuestionByName=function(e,t){void 0===t&&(t=!1);var r=this.getAllQuestions();t&&(e=e.toLowerCase());for(var n=0;n0&&(this.jsonErrors=t.errors)}},t.prototype.endLoadingFromJson=function(){this.isStartedState=this.firstPageIsStarted,this.onIsSinglePageChanged(),this.runConditions(),this.updateVisibleIndexes(),e.prototype.endLoadingFromJson.call(this),this.hasCookie&&this.doComplete(),this.doElementsOnLoad()},t.prototype.onBeforeCreating=function(){},t.prototype.onCreating=function(){},t.prototype.getProcessedTextValue=function(e){var t=e.name.toLocaleLowerCase();if("pageno"===t){e.isExists=!0;var r=this.currentPage;return void(e.value=null!=r?this.visiblePages.indexOf(r)+1:0)}if("pagecount"===t)return e.isExists=!0,void(e.value=this.visiblePageCount);if("correctedanswers"===t||"correctedanswercount"===t)return e.isExists=!0,void(e.value=this.getCorrectedAnswerCount());if("incorrectedanswers"===t||"incorrectedanswercount"===t)return e.isExists=!0,void(e.value=this.getInCorrectedAnswerCount());if("questioncount"===t)return e.isExists=!0,void(e.value=this.getQuizQuestions().length);var n=(new u.a).getFirstName(t),i=this.getVariable(t);if(void 0!==i)return e.isExists=!0,void(e.value=i);var o=this.getQuestionByValueName(n,!0);if(o){e.isExists=!0,t=o.getValueName()+t.substr(n.length);var a={};return a[n]=e.returnDisplayValue?o.displayValue:this.getValue(n),void(e.value=(new u.a).getValue(t,a))}var s=this.getValue(e.name);void 0!==s&&(e.isExists=!0,e.value=s)},t.prototype.clearUnusedValues=function(){for(var e=this.getAllQuestions(),t=0;t0&&this.maxTimeToFinish>0)return this.getLocString("timerLimitAll").format(t,i,r,o);return this.getTimerInfoPageText(e,t,i)+" "+this.getTimerInfoSurveyText(r,o)}return""},t.prototype.getTimerInfoPageText=function(e,t,r){return this.getPageMaxTimeToFinish(e)>0?this.getLocString("timerLimitPage").format(t,r):this.getLocString("timerSpentPage").format(t,r)},t.prototype.getTimerInfoSurveyText=function(e,t){return this.maxTimeToFinish>0?this.getLocString("timerLimitSurvey").format(e,t):this.getLocString("timerSpentSurvey").format(e,t)},t.prototype.getDisplayTime=function(e){var t=Math.floor(e/60),r=e%60,n="";return t>0&&(n+=t+" "+this.getLocString("timerMin")),n&&0==r?n:(n&&(n+=" "),n+r+" "+this.getLocString("timerSec"))},t.prototype.startTimer=function(){if(!this.isTimerStarted&&!this.isDesignMode){var e=this;this.timerFunc=function(){e.doTimer()},this.isTimerStarted=!0,d.a.instance.start(this.timerFunc)}},t.prototype.startTimerFromUI=function(){"none"!=this.showTimerPanel&&"running"===this.state&&this.startTimer()},t.prototype.stopTimer=function(){this.isTimerStarted&&(this.isTimerStarted=!1,d.a.instance.stop(this.timerFunc))},Object.defineProperty(t.prototype,"timeSpent",{get:function(){return this.getPropertyValue("timeSpent",0)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxTimeToFinish",{get:function(){return this.getPropertyValue("maxTimeToFinish",0)},set:function(e){this.setPropertyValue("maxTimeToFinish",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxTimeToFinishPage",{get:function(){return this.getPropertyValue("maxTimeToFinishPage",0)},set:function(e){this.setPropertyValue("maxTimeToFinishPage",e)},enumerable:!0,configurable:!0}),t.prototype.getPageMaxTimeToFinish=function(e){return!e||e.maxTimeToFinish<0?0:e.maxTimeToFinish>0?e.maxTimeToFinish:this.maxTimeToFinishPage},t.prototype.doTimer=function(){var e=this.currentPage;if(e&&(e.timeSpent=e.timeSpent+1),this.setTimeSpent(this.timeSpent+1),this.onTimer.fire(this,{}),this.maxTimeToFinish>0&&this.maxTimeToFinish==this.timeSpent&&this.completeLastPage(),e){var t=this.getPageMaxTimeToFinish(e);t>0&&t==e.timeSpent&&(this.isLastPage?this.completeLastPage():this.nextPage())}},t.prototype.setTimeSpent=function(e){this.setPropertyValue("timeSpent",e)},t.prototype.geSurveyData=function(){return this},t.prototype.getSurvey=function(){return this},t.prototype.getTextProcessor=function(){return this},t.prototype.getObjects=function(e,t){var r=[];return Array.prototype.push.apply(r,this.getPagesByNames(e)),Array.prototype.push.apply(r,this.getQuestionsByNames(t)),r},t.prototype.setTriggerValue=function(e,t,r){e&&(r?this.setVariable(e,t):this.setValue(e,t))},t.stylesManager=new h.a,t.platform="unknown",t}(o.c);i.b.metaData.addClass("survey",[{name:"locale",choices:function(){return c.a.getLocales()}},{name:"title:text",serializationProperty:"locTitle"},{name:"focusFirstQuestionAutomatic:boolean",default:!0},{name:"completedHtml:html",serializationProperty:"locCompletedHtml"},{name:"completedBeforeHtml:html",serializationProperty:"locCompletedBeforeHtml"},{name:"loadingHtml:html",serializationProperty:"locLoadingHtml"},{name:"pages",className:"page",visible:!1},{name:"questions",alternativeName:"elements",baseClassName:"question",visible:!1,onGetValue:function(e){return null},onSetValue:function(e,t,r){var n=e.addNewPage("");r.toObject({questions:t},n)}},{name:"triggers:triggers",baseClassName:"surveytrigger",classNamePart:"trigger"},{name:"surveyId",visible:!1},{name:"surveyPostId",visible:!1},{name:"surveyShowDataSaving",visible:!1},"cookieName","sendResultOnPageNext:boolean",{name:"showNavigationButtons:boolean",default:!0},{name:"showPrevButton:boolean",default:!0},{name:"showTitle:boolean",default:!0},{name:"showPageTitles:boolean",default:!0},{name:"showCompletedPage:boolean",default:!0},{name:"questionsOrder",default:"initial",choices:["initial","random"]},"showPageNumbers:boolean",{name:"showQuestionNumbers",default:"on",choices:["on","onPage","off"]},{name:"questionTitleLocation",default:"top",choices:["top","bottom","left"]},{name:"questionErrorLocation",default:"top",choices:["top","bottom"]},{name:"showProgressBar",default:"off",choices:["off","top","bottom"]},{name:"mode",default:"edit",choices:["edit","display"]},{name:"storeOthersAsComment:boolean",default:!0},"goNextPageAutomatic:boolean",{name:"clearInvisibleValues",default:"onComplete",choices:["none","onComplete","onHidden"]},{name:"startSurveyText",serializationProperty:"locStartSurveyText"},{name:"pagePrevText",serializationProperty:"locPagePrevText"},{name:"pageNextText",serializationProperty:"locPageNextText"},{name:"completeText",serializationProperty:"locCompleteText"},{name:"requiredText",default:"*"},"questionStartIndex",{name:"questionTitleTemplate",serializationProperty:"locQuestionTitleTemplate"},{name:"firstPageIsStarted:boolean",default:!1},{name:"isSinglePage:boolean",default:!1},{name:"maxTimeToFinish:number",default:0},{name:"maxTimeToFinishPage:number",default:0},{name:"showTimerPanel",default:"none",choices:["none","top","bottom"]},{name:"showTimerPanelMode",default:"all",choices:["all","page","survey"]}])},function(e,t,r){"use strict";var n=r(0),i=r(18),o=r(43);r.d(t,"a",function(){return a}),r.d(t,"b",function(){return s});var a=function(e){function t(t){return void 0===t&&(t=null),e.call(this,t)||this}return n.b(t,e),t.prototype.render=function(){this.renderCallback&&this.renderCallback()},t.prototype.mergeCss=function(e,t){this.mergeValues(e,t)},t.prototype.doAfterRenderSurvey=function(e){this.afterRenderSurvey(e)},t.prototype.onLoadSurveyFromService=function(){this.render()},t.prototype.onLoadingSurveyFromService=function(){this.render()},t.prototype.setCompletedState=function(t,r){e.prototype.setCompletedState.call(this,t,r),this.render()},t.prototype.start=function(){e.prototype.start.call(this),this.render()},t}(i.a),s=function(e){function t(t,r){return void 0===t&&(t=null),void 0===r&&(r=null),e.call(this,t,r)||this}return n.b(t,e),t.prototype.createSurvey=function(e){return new a(e)},t}(o.a);i.a.platform="react"},function(e,t,r){"use strict";var n=r(0),i=r(2),o=(r.n(i),r(19)),a=r(27),s=r(38),u=r(6),l=r(12),c=r(39),p=r(41),h=r(4);r.d(t,"a",function(){return d});var d=function(e){function t(t){var r=e.call(this,t)||this;return r.isCurrentPageChanged=!1,r.handleTryAgainClick=r.handleTryAgainClick.bind(r),r.state=r.getState(),r.updateSurvey(t),r}return n.b(t,e),Object.defineProperty(t,"cssType",{get:function(){return l.b.currentType},set:function(e){l.b.currentType=e},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(e){this.setState(this.getState()),this.updateSurvey(e)},t.prototype.componentDidUpdate=function(){this.isCurrentPageChanged&&(this.isCurrentPageChanged=!1,this.survey.scrollToTopOnPageChange())},t.prototype.componentDidMount=function(){var e=this.refs.root;e&&this.survey&&this.survey.doAfterRenderSurvey(e),this.survey&&this.survey.startTimerFromUI()},t.prototype.componentWillUnmount=function(){this.survey&&this.survey.stopTimer()},t.prototype.render=function(){return"completed"==this.survey.state?this.renderCompleted():"completedbefore"==this.survey.state?this.renderCompletedBefore():"loading"==this.survey.state?this.renderLoading():"starting"==this.survey.state?this.renderStartPage():this.renderSurvey()},Object.defineProperty(t.prototype,"css",{get:function(){return l.b.getCss()},set:function(e){this.survey.mergeCss(e,this.css)},enumerable:!0,configurable:!0}),t.prototype.handleTryAgainClick=function(e){this.survey.doComplete()},t.prototype.renderCompleted=function(){if(!this.survey.showCompletedPage)return null;var e=null;if(this.survey.completedState){var t=null;if("error"==this.survey.completedState){var r=this.survey.getLocString("saveAgainButton");t=i.createElement("input",{type:"button",value:r,className:this.css.saveData.saveAgainButton,onClick:this.handleTryAgainClick})}var n=this.css.saveData[this.survey.completedState];e=i.createElement("div",{className:this.css.saveData.root},i.createElement("div",{className:n},i.createElement("span",null,this.survey.completedStateText),t))}var o={__html:this.survey.processedCompletedHtml};return i.createElement("div",null,i.createElement("div",{dangerouslySetInnerHTML:o}),e)},t.prototype.renderCompletedBefore=function(){var e={__html:this.survey.processedCompletedBeforeHtml};return i.createElement("div",{dangerouslySetInnerHTML:e})},t.prototype.renderLoading=function(){var e={__html:this.survey.processedLoadingHtml};return i.createElement("div",{dangerouslySetInnerHTML:e})},t.prototype.renderStartPage=function(){var e=this.survey.startedPage?this.renderPage(this.survey.startedPage):null,t=this.survey.startedPage?this.survey.startedPage.id:"",r=this.renderNavigation();return i.createElement("div",{ref:"root",className:this.css.root},i.createElement("div",{id:t,className:this.css.body},e),r)},t.prototype.renderSurvey=function(){var e=this.renderTitle(),t=this.survey.currentPage?this.renderPage(this.survey.currentPage):null,r=this.survey.currentPage?this.survey.currentPage.id:"",n="top"==this.survey.showProgressBar?this.renderProgress(!0):null,o="bottom"==this.survey.showProgressBar?this.renderProgress(!1):null,a=t?this.renderNavigation():null;return t||(t=this.renderEmptySurvey()),i.createElement("div",{ref:"root",className:this.css.root},i.createElement("div",{className:"sv_custom_header"}),i.createElement("div",{className:"sv_container"},e,i.createElement("div",{id:r,className:this.css.body},n,this.renderTimerPanel("top"),t,this.renderTimerPanel("bottom"),o,a)))},t.prototype.renderTitle=function(){var e=null;return this.survey.title&&this.survey.showTitle&&(e=h.a.renderLocString(this.survey.locTitle)),i.createElement("div",{className:this.css.header},i.createElement("h3",null,e))},t.prototype.renderTimerPanel=function(e){return this.survey.showTimerPanel!=e?null:i.createElement(p.a,{survey:this.survey,css:this.css})},t.prototype.renderPage=function(e){return i.createElement(a.a,{survey:this.survey,page:e,css:this.css,creator:this})},t.prototype.renderProgress=function(e){return i.createElement(c.a,{survey:this.survey,css:this.css,isTop:e})},t.prototype.renderNavigation=function(){return i.createElement(s.a,{survey:this.survey,css:this.css})},t.prototype.renderEmptySurvey=function(){return i.createElement("span",null,this.survey.emptySurveyText)},t.prototype.updateSurvey=function(e){if(e?e.model?this.survey=e.model:e.json&&(this.survey=new o.a(e.json)):this.survey=new o.a,e){var t=function(){if("model"==n||"children"==n)return"continue";if("css"==n)return r.survey.mergeCss(e.css,r.css),"continue";if(0==n.indexOf("on")&&r.survey[n]&&r.survey[n].add){var t=e[n],i=function(e,r){t(e,r)};r.survey[n].add(i)}else r.survey[n]=e[n]},r=this;for(var n in e)t()}this.survey.currentPage;this.setSurveyEvents(e)},t.prototype.getState=function(){return{pageIndexChange:0,isCompleted:!1,modelChanged:0}},t.prototype.setSurveyEvents=function(e){var t=this;this.survey.renderCallback=function(){t.setState({modelChanged:t.state.modelChanged+1})},this.survey.onComplete.add(function(e){t.setState({isCompleted:!0})}),this.survey.onPartialSend.add(function(e){t.setState(t.state)}),this.survey.onCurrentPageChanged.add(function(r,n){t.isCurrentPageChanged=!0,t.setState({pageIndexChange:t.state.pageIndexChange+1}),e&&e.onCurrentPageChanged&&e.onCurrentPageChanged(r,n)}),this.survey.onVisibleChanged.add(function(e,t){if(t.question&&t.question.react){var r=t.question.react.state;r.visible=t.question.visible,t.question.react.setState(r)}}),this.survey.onValueChanged.add(function(t,r){if(r.question&&r.question.react){var n=r.question.react.state;n.value=r.value,r.question.react.setState(n)}e&&e.data&&(e.data[r.name]=r.value)})},t.prototype.createQuestionElement=function(e){return u.a.Instance.createQuestion(e.getTemplate(),{question:e,isDisplayMode:e.isReadOnly,creator:this})},t.prototype.renderError=function(e,t,r){return i.createElement("div",{key:e,className:r.error.item},t)},t.prototype.questionTitleLocation=function(){return this.survey.questionTitleLocation},t.prototype.questionErrorLocation=function(){return this.survey.questionErrorLocation},t}(i.Component)},function(e,t,r){"use strict";var n=r(0),i=r(7),o=r(11),a=r(3),s=r(1),u=r(9);r.d(t,"a",function(){return c});var l=function(){function e(){this.parser=new DOMParser}return e.prototype.assignValue=function(e,t,r){Array.isArray(e[t])?e[t].push(r):void 0!==e[t]?e[t]=[e[t]].concat(r):"object"==typeof r&&1===Object.keys(r).length&&Object.keys(r)[0]===t?e[t]=r[t]:e[t]=r},e.prototype.xml2Json=function(e,t){if(e.children&&e.children.length>0)for(var r=0;r-1?this.path.split(";"):this.processedPath.split(","),0==e.length&&e.push(this.processedPath),e},t.prototype.getValue=function(e){return e?this.valueName?this.getValueCore(e,this.valueName):e instanceof Object?Object.keys(e).length<1?null:e[Object.keys(e)[0]]:e:null},t.prototype.getTitle=function(e){var t=this.titleName?this.titleName:"title";return this.getValueCore(e,t)},t.prototype.getValueCore=function(e,t){if(!e)return null;if(t.indexOf(".")<0)return e[t];for(var r=t.split("."),n=0;n0},e}(),p=function(e){function t(r){void 0===r&&(r="");var n=e.call(this,r)||this;n.name=r,n.rowValues=null,n.conditionRunner=null,n.isQuestionsReady=!1,n.questionsValue=new Array,n.elementsValue=n.createNewArray("elements",function(e){i.onAddElement(e,i.elementsValue.length)},function(e){i.onRemoveElement(e)}),n.registerFunctionOnPropertyValueChanged("elements",function(){i.markQuestionListDirty(),i.onRowsChanged()}),n.id=t.getPanelId();var i=n;return n.createLocalizableString("title",n,!0).onRenderedHtmlCallback=function(e){return i.getRenderedTitle(e)},n.createLocalizableString("description",n,!0).onGetTextCallback=function(e){return i.getProcessedHtml(e)},n.createLocalizableString("requiredErrorText",n),n}return n.b(t,e),t.getPanelId=function(){return"sp_"+t.panelCounter++},t.prototype.setSurveyImpl=function(t){e.prototype.setSurveyImpl.call(this,t),this.isDesignMode&&this.onVisibleChanged();for(var r=0;r0)&&this.errorsChangedCallback&&this.errorsChangedCallback()}}},t.prototype.hasErrorsCore=function(e){for(var t=0;t-1){r.updateVisible();break}}},t.prototype.buildRows=function(){for(var e=new Array,t=0;t=this.elements.length?this.elements.push(e):this.elements.splice(t,0,e))},t.prototype.addQuestion=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addPanel=function(e,t){void 0===t&&(t=-1),this.addElement(e,t)},t.prototype.addNewQuestion=function(e,t){void 0===t&&(t=null);var r=s.a.Instance.createQuestion(e,t);return this.addQuestion(r),r},t.prototype.addNewPanel=function(e){void 0===e&&(e=null);var t=this.createNewPanel(e);return this.addPanel(t),t},t.prototype.createNewPanel=function(e){return new h(e)},t.prototype.removeElement=function(e){var t=this.elements.indexOf(e);if(t<0){for(var r=0;r-1&&this.locTitle.onChanged()},t.panelCounter=100,t}(o.a),h=function(e){function t(t){void 0===t&&(t="");var r=e.call(this,t)||this;r.name=t;var n=r;return r.registerFunctionOnPropertyValueChanged("state",function(){n.stateChangedCallback&&n.stateChangedCallback()}),r}return n.b(t,e),t.prototype.getType=function(){return"panel"},Object.defineProperty(t.prototype,"isPanel",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"page",{get:function(){return this.getPage(this.parent)},set:function(e){this.setPage(this.parent,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this.getPropertyValue("state","default")},set:function(e){this.setPropertyValue("state",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isCollapsed",{get:function(){return"collapsed"==this.state},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isExpanded",{get:function(){if(!this.isDesignMode)return"expanded"==this.state},enumerable:!0,configurable:!0}),t.prototype.collapse=function(){this.isDesignMode||(this.state="collapsed")},t.prototype.expand=function(){this.state="expanded"},t.prototype.hasErrorsCore=function(t){e.prototype.hasErrorsCore.call(this,t),this.isCollapsed&&t.result&&t.fireCallback&&this.expand()},t.prototype.getRenderedTitle=function(t){if(!t){if(this.isCollapsed||this.isExpanded)return this.name;if(this.isDesignMode)return"["+this.name+"]"}return e.prototype.getRenderedTitle.call(this,t)},Object.defineProperty(t.prototype,"width",{get:function(){return this.getPropertyValue("width")},set:function(e){this.setPropertyValue("width",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"innerIndent",{get:function(){return this.getPropertyValue("innerIndent",0)},set:function(e){this.setPropertyValue("innerIndent",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderWidth",{get:function(){return this.getPropertyValue("renderWidth")},set:function(e){this.setPropertyValue("renderWidth",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"startWithNewLine",{get:function(){return this.getPropertyValue("startWithNewLine",!0)},set:function(e){this.setPropertyValue("startWithNewLine",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rightIndent",{get:function(){return this.getPropertyValue("rightIndent",0)},set:function(e){this.setPropertyValue("rightIndent",e)},enumerable:!0,configurable:!0}),t.prototype.onVisibleChanged=function(){e.prototype.onVisibleChanged.call(this),this.setPropertyValue("isVisible",this.isVisible),null!=this.survey&&this.survey.panelVisibilityChanged(this,this.visible)},t}(p);i.b.metaData.addClass("panelbase",["name",{name:"elements",alternativeName:"questions",baseClassName:"question",visible:!1},{name:"visible:boolean",default:!0},"visibleIf:condition",{name:"questionTitleLocation",default:"default",choices:["default","top","bottom","left"]},{name:"title:text",serializationProperty:"locTitle"},{name:"description:text",serializationProperty:"locDescription"}],function(){return new p}),i.b.metaData.addClass("panel",[{name:"state",default:"default",choices:["default","collapsed","expanded"]},"isRequired:boolean",{name:"requiredErrorText:text",serializationProperty:"locRequiredErrorText"},{name:"startWithNewLine:boolean",default:!0},{name:"innerIndent:number",default:0,choices:[0,1,2,3]},{name:"page",isSerializable:!1,choices:function(e){var t=e?e.survey:null;return t?t.pages:[]}}],function(){return new h},"panelbase")},function(e,t,r){"use strict";var n=r(0),i=r(3),o=r(8),a=r(10),s=r(7),u=r(17),l=r(15),c=r(11),p=r(1),h=r(16),d=r(21),f=r(5);r.d(t,"b",function(){return g}),r.d(t,"a",function(){return m}),r.d(t,"c",function(){return y}),r.d(t,"d",function(){return v});var g=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this)||this;n.colOwner=null,n.validators=new Array,n.name=t,n.choicesValue=n.createItemValues("choices");var i=n;return n.createLocalizableString("title",n,!0).onRenderedHtmlCallback=function(e){return i.getFullTitle(e)},n.createLocalizableString("optionsCaption",n),n.createLocalizableString("placeHolder",n),n.choicesByUrl=new d.a,r&&(n.title=r),n}return n.b(t,e),t.prototype.getType=function(){return"matrixdropdowncolumn"},Object.defineProperty(t.prototype,"name",{get:function(){return this.getPropertyValue("name")},set:function(e){this.setPropertyValue("name",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"choicesOrder",{get:function(){return this.getPropertyValue("choicesOrder","none")},set:function(e){e=e.toLocaleLowerCase(),this.setPropertyValue("choicesOrder",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inputType",{get:function(){return this.getPropertyValue("inputType","text")},set:function(e){e=e.toLocaleLowerCase(),this.setPropertyValue("inputType",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"cellType",{get:function(){return this.getPropertyValue("cellType","default")},set:function(e){e=e.toLocaleLowerCase(),this.setPropertyValue("cellType",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"title",{get:function(){return this.getLocalizableStringText("title",this.name)},set:function(e){this.setLocalizableStringText("title",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locTitle",{get:function(){return this.getLocalizableString("title")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fullTitle",{get:function(){return this.getFullTitle(this.locTitle.textOrHtml)},enumerable:!0,configurable:!0}),t.prototype.getFullTitle=function(e){if(e||(e=this.name),this.isRequired){var t=this.colOwner?this.colOwner.getRequiredText():"";t&&(t+=" "),e=t+e}return e},Object.defineProperty(t.prototype,"optionsCaption",{get:function(){return this.getLocalizableStringText("optionsCaption")},set:function(e){this.setLocalizableStringText("optionsCaption",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locOptionsCaption",{get:function(){return this.getLocalizableString("optionsCaption")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"placeHolder",{get:function(){return this.getLocalizableStringText("placeHolder")},set:function(e){this.setLocalizableStringText("placeHolder",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPlaceHolder",{get:function(){return this.getLocalizableString("placeHolder")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"choices",{get:function(){return this.choicesValue},set:function(e){this.setPropertyValue("choices",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.getPropertyValue("colCount",-1)},set:function(e){e<-1||e>4||this.setPropertyValue("colCount",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isRequired",{get:function(){return this.getPropertyValue("isRequired",!1)},set:function(e){this.setPropertyValue("isRequired",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasOther",{get:function(){return this.getPropertyValue("hasOther",!1)},set:function(e){this.setPropertyValue("hasOther",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"minWidth",{get:function(){return this.getPropertyValue("minWidth","")},set:function(e){this.setPropertyValue("minWidth",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleIf",{get:function(){return this.getPropertyValue("visibleIf","")},set:function(e){this.setPropertyValue("visibleIf",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"enableIf",{get:function(){return this.getPropertyValue("enableIf","")},set:function(e){this.setPropertyValue("enableIf",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"booleanDefaultValue",{get:function(){return this.getPropertyValue("booleanDefaultValue","indeterminate")},set:function(e){this.setPropertyValue("booleanDefaultValue",e)},enumerable:!0,configurable:!0}),t.prototype.getLocale=function(){return this.colOwner?this.colOwner.getLocale():""},t.prototype.getMarkdownHtml=function(e){return this.colOwner?this.colOwner.getMarkdownHtml(e):null},t.prototype.propertyValueChanged=function(t,r,n){e.prototype.propertyValueChanged.call(this,t,r,n),null==this.colOwner||this.isLoadingFromJson||this.colOwner.onColumnPropertiesChanged(this)},t}(s.c),m=function(){function e(e,t,r){var n=this;this.column=e,this.row=t,this.data=r,this.questionValue=r.createQuestion(this.row,this.column),this.questionValue.validateValueCallback=function(){return r.validateCell(t,e.name,t.value)},i.a.getProperties(e.getType()).forEach(function(t){var r=t.name;void 0!==e[r]&&null==n.questionValue.getPropertyValue(r,null)&&(n.questionValue[r]=e[r])}),Object.keys(e).forEach(function(e){}),this.questionValue.updateCustomWidget()}return Object.defineProperty(e.prototype,"question",{get:function(){return this.questionValue},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.question.value},set:function(e){this.question.value=e},enumerable:!0,configurable:!0}),e.prototype.runCondition=function(e){this.question.runCondition(e)},e}(),y=function(){function e(t,r){this.rowValues={},this.isSettingValue=!1,this.cells=[],this.data=t,this.value=r,this.textPreProcessor=new u.a;var n=this;this.textPreProcessor.onProcess=function(e){n.getProcessedTextValue(e)};for(var i=0;i4||(this.setPropertyValue("columnColCount",e),this.fireCallback(this.updateCellsCallback))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"columnMinWidth",{get:function(){return this.getPropertyValue("columnMinWidth","")},set:function(e){this.setPropertyValue("columnMinWidth",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"horizontalScroll",{get:function(){return this.getPropertyValue("horizontalScroll",!1)},set:function(e){this.setPropertyValue("horizontalScroll",e)},enumerable:!0,configurable:!0}),t.prototype.getRequiredText=function(){return this.survey?this.survey.requiredText:""},t.prototype.onColumnPropertiesChanged=function(e){if(this.generatedVisibleRows)for(var t=0;t=t.length)return null;var r=this.createNewValue(this.value);return this.getRowValueCore(t[e],r)},t.prototype.setRowValue=function(e,t){if(e<0)return null;var r=this.visibleRows;if(e>=r.length)return null;this.onRowChanged(r[e],"",t),this.onValueChanged()},t.prototype.generateRows=function(){return null},t.prototype.createNewValue=function(e){return e||{}},t.prototype.getRowValueCore=function(e,t,r){void 0===r&&(r=!1);var n=t[e.rowName]?t[e.rowName]:null;return!n&&r&&(n={},t[e.rowName]=n),n},t.prototype.getRowDisplayValue=function(e,t){for(var r=0;r0&&(t=t.concat(a))}return t},t.prototype.hasErrorInColumns=function(e){if(!this.generatedVisibleRows)return!1;for(var t=!1,r=0;r0)return r[n].question}return null},t.prototype.createQuestion=function(e,t){return this.createQuestionCore(e,t)},t.prototype.createQuestionCore=function(e,t){var r="default"==t.cellType?this.cellType:t.cellType,n=this.createCellQuestion(r,t.name);return n.setSurveyImpl(e),this.setQuestionProperties(n,t,e),n},t.prototype.getColumnChoices=function(e){return e.choices&&e.choices.length>0?e.choices:this.choices},t.prototype.getColumnOptionsCaption=function(e){return e.optionsCaption?e.optionsCaption:this.optionsCaption},t.prototype.setQuestionProperties=function(e,t,r){if(e){e.name=t.name,e.isRequired=t.isRequired,e.hasOther=t.hasOther,e.readOnly=this.readOnly,e.validators=t.validators,e.visibleIf=t.visibleIf,e.enableIf=t.enableIf,t.hasOther&&e instanceof h.b&&(e.storeOthersAsComment=!1);var n=e.getType();"checkbox"!=n&&"radiogroup"!=n||(e.colCount=t.colCount>-1?t.colCount:this.columnColCount,this.setSelectBaseProperties(e,t,r)),"dropdown"==n&&(e.optionsCaption=this.getColumnOptionsCaption(t),this.setSelectBaseProperties(e,t,r)),"text"==n&&(e.inputType=t.inputType,e.placeHolder=t.placeHolder),"comment"==n&&(e.placeHolder=t.placeHolder),"boolean"==n&&(e.defaultValue=t.booleanDefaultValue,e.showTitle=!0)}},t.prototype.setSelectBaseProperties=function(e,t,r){e.choicesOrder=t.choicesOrder,e.choices=this.getColumnChoices(t),e.choicesByUrl.setData(t.choicesByUrl),e.choicesByUrl.isEmpty||e.choicesByUrl.run(r)},t.prototype.createCellQuestion=function(e,t){return f.a.Instance.createQuestion(e,t)},t.prototype.deleteRowValue=function(e,t){return delete e[t.rowName],0==Object.keys(e).length?null:e},t.prototype.onAnyValueChanged=function(e){if(!this.isLoadingFromJson)for(var t=this.visibleRows,r=0;r0)return!1;return!0}return 0==Object.keys(e).length}},t.prototype.getSurvey=function(){return this.survey},t}(o.a);i.b.metaData.addClass("matrixdropdowncolumn",["name",{name:"title",serializationProperty:"locTitle"},{name:"choices:itemvalues",onGetValue:function(e){return c.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"default",choices:["default","dropdown","checkbox","radiogroup","text","comment","boolean"]},{name:"colCount",default:-1,choices:[-1,0,1,2,3,4]},"isRequired:boolean","hasOther:boolean","minWidth",{name:"placeHolder",serializationProperty:"locPlaceHolder"},{name:"choicesOrder",default:"none",choices:["none","asc","desc","random"]},{name:"choicesByUrl:restfull",className:"ChoicesRestfull",onGetValue:function(e){return e.choicesByUrl.isEmpty?null:e.choicesByUrl},onSetValue:function(e,t){e.choicesByUrl.setData(t)}},{name:"booleanDefaultValue",default:"indeterminate",choices:["indeterminate","false","true"]},{name:"inputType",default:"text",choices:["color","date","datetime","datetime-local","email","month","number","password","range","tel","text","time","url","week"]},"visibleIf:condition","enableIf:condition",{name:"validators:validators",baseClassName:"surveyvalidator",classNamePart:"validator"}],function(){return new g("")}),i.b.metaData.addClass("matrixdropdownbase",[{name:"columns:matrixdropdowncolumns",className:"matrixdropdowncolumn"},"horizontalScroll:boolean",{name:"choices:itemvalues",onGetValue:function(e){return c.a.getData(e.choices)},onSetValue:function(e,t){e.choices=t}},{name:"optionsCaption",serializationProperty:"locOptionsCaption"},{name:"cellType",default:"dropdown",choices:["dropdown","checkbox","radiogroup","text","comment","boolean"]},{name:"columnColCount",default:0,choices:[0,1,2,3,4]},"columnMinWidth"],function(){return new v("")},"question")},function(e,t,r){"use strict";var n=r(0),i=r(7),o=r(3),a=r(13),s=r(12),u=r(35);r.d(t,"a",function(){return l});var l=function(e){function t(r){var n=e.call(this,r)||this;return n.name=r,n.conditionRunner=null,n.isCustomWidgetRequested=!1,n.customWidgetData={isNeedRender:!0},n.localeChanged=new i.b,n.id=t.getQuestionId(),n.onCreating(),n}return n.b(t,e),t.getQuestionId=function(){return"sq_"+t.questionCounter++},t.prototype.getType=function(){return"questionbase"},t.prototype.setSurveyImpl=function(t){e.prototype.setSurveyImpl.call(this,t),this.survey&&this.survey.isDesignMode&&this.onVisibleChanged()},Object.defineProperty(t.prototype,"parent",{get:function(){return this.getPropertyValue("parent",null)},set:function(e){this.setPropertyValue("parent",e)},enumerable:!0,configurable:!0}),t.prototype.isAnswerCorrect=function(){return!1},t.prototype.getValueName=function(){return this.name},Object.defineProperty(t.prototype,"page",{get:function(){return this.getPage(this.parent)},set:function(e){this.setPage(this.parent,e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isPanel",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visible",{get:function(){return this.getPropertyValue("visible",!0)},set:function(e){e!=this.visible&&(this.setPropertyValue("visible",e),this.onVisibleChanged(),this.survey&&this.survey.questionVisibilityChanged(this,this.visible))},enumerable:!0,configurable:!0}),t.prototype.onVisibleChanged=function(){this.setPropertyValue("isVisible",this.isVisible),!this.isVisible&&this.errors&&this.errors.length>0&&(this.errors=[],this.fireCallback(this.errorsChangedCallback))},Object.defineProperty(t.prototype,"visibleIf",{get:function(){return this.getPropertyValue("visibleIf","")},set:function(e){this.setPropertyValue("visibleIf",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isVisible",{get:function(){return this.visible||this.isDesignMode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isReadOnly",{get:function(){return!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleIndex",{get:function(){return this.getPropertyValue("visibleIndex",-1)},enumerable:!0,configurable:!0}),t.prototype.hasErrors=function(e){return void 0===e&&(e=!0),!1},t.prototype.isEmpty=function(){return!0},Object.defineProperty(t.prototype,"currentErrorCount",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasTitle",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasDescription",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasInput",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasComment",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this.getPropertyValue("id")},set:function(e){this.setPropertyValue("id",e)},enumerable:!0,configurable:!0}),t.prototype.getAllErrors=function(){return[]},Object.defineProperty(t.prototype,"customWidget",{get:function(){return this.isCustomWidgetRequested||this.customWidgetValue||(this.isCustomWidgetRequested=!0,this.updateCustomWidget()),this.customWidgetValue},enumerable:!0,configurable:!0}),t.prototype.updateCustomWidget=function(){this.customWidgetValue=u.a.Instance.getCustomWidget(this)},Object.defineProperty(t.prototype,"startWithNewLine",{get:function(){return this.getPropertyValue("startWithNewLine",!0)},set:function(e){this.startWithNewLine!=e&&this.setPropertyValue("startWithNewLine",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"cssClasses",{get:function(){var e=this.css,t={error:{}};return this.copyCssClasses(t,e.question),this.copyCssClasses(t.error,e.error),this.updateCssClasses(t,e),this.survey&&this.survey.updateQuestionCssClasses(this,t),t},enumerable:!0,configurable:!0}),t.prototype.getRootCss=function(e){return e.question.root},t.prototype.updateCssClasses=function(e,t){var r=t[this.getType()];if(void 0!==r&&null!==r)if("string"==typeof r||r instanceof String)e.root=r;else for(var n in r)e[n]=r[n]},Object.defineProperty(t.prototype,"css",{get:function(){return s.b.getCss()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"width",{get:function(){return this.getPropertyValue("width","")},set:function(e){this.setPropertyValue("width",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderWidth",{get:function(){return this.getPropertyValue("renderWidth","")},set:function(e){this.setPropertyValue("renderWidth",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"indent",{get:function(){return this.getPropertyValue("indent",0)},set:function(e){this.setPropertyValue("indent",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rightIndent",{get:function(){return this.getPropertyValue("rightIndent",0)},set:function(e){this.setPropertyValue("rightIndent",e)},enumerable:!0,configurable:!0}),t.prototype.focus=function(e){void 0===e&&(e=!1)},t.prototype.fireCallback=function(e){e&&e()},t.prototype.onCreating=function(){},t.prototype.runCondition=function(e){this.visibleIf&&(this.conditionRunner||(this.conditionRunner=new a.a(this.visibleIf)),this.conditionRunner.expression=this.visibleIf,this.visible=this.conditionRunner.run(e))},t.prototype.onSurveyValueChanged=function(e){},t.prototype.onSurveyLoad=function(){this.fireCallback(this.surveyLoadCallback)},t.prototype.setVisibleIndex=function(e){return this.visibleIndex==e?1:(this.setPropertyValue("visibleIndex",e),1)},t.prototype.removeElement=function(e){return!1},t.prototype.supportGoNextPageAutomatic=function(){return!1},t.prototype.clearUnusedValues=function(){},Object.defineProperty(t.prototype,"displayValue",{get:function(){return""},enumerable:!0,configurable:!0}),t.prototype.clearValue=function(){},t.prototype.clearValueIfInvisible=function(){},t.prototype.onLocaleChanged=function(){e.prototype.onLocaleChanged.call(this),this.localeChanged.fire(this,this.getLocale())},t.prototype.onReadOnlyChanged=function(){},t.prototype.onAnyValueChanged=function(e){},t.prototype.getLocale=function(){return this.survey?this.survey.getLocale():""},t.prototype.getMarkdownHtml=function(e){return this.survey?this.survey.getMarkdownHtml(e):null},t.questionCounter=100,t}(i.a);o.b.metaData.addClass("questionbase",["!name",{name:"visible:boolean",default:!0},"visibleIf:condition",{name:"width"},{name:"startWithNewLine:boolean",default:!0},{name:"indent:number",default:0,choices:[0,1,2,3]},{name:"page",isSerializable:!1,choices:function(e){var t=e?e.survey:null;return t?t.pages:[]}}])},function(e,t,r){"use strict";var n=r(0),i=r(2);r.n(i);r.d(t,"a",function(){return o});var o=function(e){function t(t){var r=e.call(this,t)||this;return r.updateStateFunction=null,r.survey=t.survey,r.css=t.css,r.state={update:0},r}return n.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.survey=e.survey,this.css=e.css},t.prototype.componentDidMount=function(){if(this.survey){var e=this;this.updateStateFunction=function(){e.setState({update:e.state.update+1})},this.survey.onPageVisibleChanged.add(this.updateStateFunction)}},t.prototype.componentWillUnmount=function(){this.survey&&this.updateStateFunction&&(this.survey.onPageVisibleChanged.remove(this.updateStateFunction),this.updateStateFunction=null)},t}(i.Component)},function(e,t,r){"use strict";var n=r(0),i=r(2),o=(r.n(i),r(28)),a=r(4);r.d(t,"a",function(){return s}),r.d(t,"c",function(){return u}),r.d(t,"b",function(){return l});var s=function(e){function t(t){var r=e.call(this,t)||this;return r.page=t.page,r.survey=t.survey,r.creator=t.creator,r.css=t.css,r}return n.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.page=e.page,this.survey=e.survey,this.creator=e.creator,this.css=e.css},t.prototype.componentDidMount=function(){this.doAfterRender()},t.prototype.componentDidUpdate=function(e,t){this.doAfterRender()},t.prototype.doAfterRender=function(){var e=this.refs.root;e&&this.survey&&this.survey.afterRenderPage(e)},t.prototype.render=function(){if(null==this.page||null==this.survey||null==this.creator)return null;for(var e=this.renderTitle(),t=this.renderDescription(),r=[],n=this.page.rows,o=this,a=0;a0?this.questionBase.indent*e.indent+"px":null,P=this.questionBase.rightIndent>0?this.questionBase.rightIndent*e.indent+"px":null,C={};return this.questionBase.renderWidth&&(C.width=this.questionBase.renderWidth),b&&(C.paddingLeft=b),P&&(C.paddingRight=P),i.createElement("div",{ref:"root",id:this.questionBase.id,className:f,style:C},i.createElement("div",{className:l},a,h,u,p),i.createElement("div",{className:c},y,t,g,v,s,d))},t.prototype.renderQuestion=function(){return this.questionBase.customWidget?i.createElement(l.a,{creator:this.creator,question:this.questionBase}):this.creator.createQuestionElement(this.questionBase)},t.prototype.renderTitle=function(e){var t=u.a.renderLocString(this.question.locTitle);return i.createElement("h5",{className:e.title},t)},t.prototype.renderDescription=function(e){if(!this.questionBase.hasDescription)return null;var t=u.a.renderLocString(this.question.locDescription);return i.createElement("div",{className:e.description},t)},t.prototype.renderComment=function(e){var t=u.a.renderLocString(this.question.locCommentText);return i.createElement("div",null,i.createElement("div",null,t),i.createElement(s.a,{question:this.question,cssClasses:e}))},t.prototype.renderErrors=function(e){return i.createElement(p,{element:this.question,cssClasses:e,creator:this.creator})},t}(i.Component),p=function(e){function t(t){var r=e.call(this,t)||this;return r.setElement(t.element),r.state=r.getState(),r.creator=t.creator,r}return n.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.setElement(e.element),this.setState(this.getState()),this.creator=e.creator},t.prototype.setElement=function(e){if(this.element=e instanceof a.a?e:null,this.element){var t=this;this.element.errorsChangedCallback=function(){t.setState(t.getState(t.state))}}},t.prototype.getState=function(e){return void 0===e&&(e=null),e?{error:e.error+1}:{error:0}},t.prototype.render=function(){if(!this.element||0==this.element.errors.length)return null;for(var e=[],t=0;tr.value?(r.error=new o.c(this.getErrorText(t)),r):null!==this.maxValue&&this.maxValue0&&e.length0&&e.length>this.maxLength?new u(null,new o.c(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return this.minLength>0&&this.maxLength>0?a.a.getString("textMinMaxLength").format(this.minLength,this.maxLength):this.minLength>0?a.a.getString("textMinLength").format(this.minLength):a.a.getString("textMaxLength").format(this.maxLength)},t}(l),d=function(e){function t(t,r){void 0===t&&(t=null),void 0===r&&(r=null);var n=e.call(this)||this;return n.minCount=t,n.maxCount=r,n}return n.b(t,e),t.prototype.getType=function(){return"answercountvalidator"},t.prototype.validate=function(e,t){if(void 0===t&&(t=null),null==e||e.constructor!=Array)return null;var r=e.length;return this.minCount&&rthis.maxCount?new u(null,new o.c(this.getErrorText(a.a.getString("maxSelectError").format(this.maxCount)))):null},t.prototype.getDefaultErrorText=function(e){return e},t}(l),f=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this)||this;return r.regex=t,r}return n.b(t,e),t.prototype.getType=function(){return"regexvalidator"},t.prototype.validate=function(e,t){if(void 0===t&&(t=null),!this.regex||!e)return null;var r=new RegExp(this.regex);if(Array.isArray(e))for(var n=0;n()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,t}return n.b(t,e),t.prototype.getType=function(){return"emailvalidator"},t.prototype.validate=function(e,t){return void 0===t&&(t=null),e?this.re.test(e)?null:new u(e,new o.c(this.getErrorText(t))):null},t.prototype.getDefaultErrorText=function(e){return a.a.getString("invalidEmail")},t}(l);s.b.metaData.addClass("surveyvalidator",["text"]),s.b.metaData.addClass("numericvalidator",["minValue:number","maxValue:number"],function(){return new p},"surveyvalidator"),s.b.metaData.addClass("textvalidator",["minLength:number","maxLength:number"],function(){return new h},"surveyvalidator"),s.b.metaData.addClass("answercountvalidator",["minCount:number","maxCount:number"],function(){return new d},"surveyvalidator"),s.b.metaData.addClass("regexvalidator",["regex"],function(){return new f},"surveyvalidator"),s.b.metaData.addClass("emailvalidator",[],function(){return new g},"surveyvalidator")},function(e,t,r){"use strict";var n=r(0),i=r(2),o=(r.n(i),r(20)),a=r(19),s=r(4);r.d(t,"a",function(){return u});var u=function(e){function t(t){var r=e.call(this,t)||this;return r.handleOnExpanded=r.handleOnExpanded.bind(r),r}return n.b(t,e),t.prototype.componentWillReceiveProps=function(e){this.updateSurvey(e)},t.prototype.handleOnExpanded=function(e){this.window.isExpanded=!this.window.isExpanded},t.prototype.render=function(){if(!this.window.isShowing)return null;var e=this.renderHeader(),t=this.window.isExpanded?this.renderBody():null,r={position:"fixed",bottom:3,right:10};return i.createElement("div",{className:this.css.window.root,style:r},e,t)},t.prototype.renderHeader=function(){var e={width:"100%",cursor:"pointer"},t={paddingRight:"10px"},r=this.window.isExpanded?this.css.window.header.buttonCollapsed:this.css.window.header.buttonExpanded;r="glyphicon pull-right "+r;var n=s.a.renderLocString(this.survey.locTitle);return i.createElement("div",{className:this.css.window.header.root},i.createElement("span",{onClick:this.handleOnExpanded,style:e},i.createElement("span",{className:this.css.window.header.title,style:t},n),i.createElement("span",{className:r,"aria-hidden":"true"})))},t.prototype.renderBody=function(){return i.createElement("div",{className:this.css.window.body},this.renderSurvey())},t.prototype.updateSurvey=function(t){t||(t={}),t.window?this.window=t.window:t.json?this.window=new a.b(t.json):t.model&&(this.window=new a.b(null,t.model)),this.window||(this.window=new a.b),t.model=this.window.survey,(t.expanded||t.isExpanded)&&this.window.expand(),this.window.isShowing=!0,e.prototype.updateSurvey.call(this,t),this.setState({expanded:this.window.isExpanded,isShowing:this.window.isShowing});var r=this;this.window.expandedChangedCallback=function(){r.setState({expanded:r.window.isExpanded})},this.window.showingChangedCallback=function(){r.setState({isShowing:r.window.isShowing})},this.survey.onComplete.add(function(e){r.window.hide()})},t}(o.a)},function(e,t,r){"use strict";var n=r(13);r.d(t,"a",function(){return i});var i=function(){function e(){}return e.prototype.parse=function(e,t){return this.setProperties(e,t),this.parseText()},e.prototype.parseExpression=function(e){return this.setProperties(e,new n.b),this.readExpressionOperand()},e.prototype.setProperties=function(e,t){this.text=e,this.at=0,this.length=this.text.length,this.root=t,this.root.clear(),this.node=this.root,this.expressionNodes=[],this.expressionNodes.push(this.node)},e.prototype.toString=function(e){return e.toString()},e.prototype.parseText=function(){return this.readConditions()&&this.at>=this.length},e.prototype.readConditions=function(){var e=this.readCondition();if(!e)return e;var t=this.readConnective();return!t||(this.addConnective(t),this.readConditions())},e.prototype.readCondition=function(){var e=this.readExpression();if(e<0)return!1;if(1==e)return!0;var t=this.readExpressionOperand();if(!t)return!1;var r=this.readOperator();if(!r){if(t.isBoolean){var i=new n.c;return i.left=t,this.addCondition(i),!0}return!1}var i=new n.c;if(i.left=t,i.operator=r,!n.c.isNoRightOperation(r)){var o=this.readExpressionOperand();if(!o)return!1;i.right=o}return this.addCondition(i),!0},e.prototype.readOperand=function(){var e=this.readString();if(!e)return null;var t=this.readParameters();if(t){var r=new n.d(e);return r.parameters=t,r}return new n.e(e)},e.prototype.readExpression=function(){if(this.skip(),this.at>=this.length||"("!=this.ch)return 0;this.at++,this.pushExpression();var e=this.readConditions();return e?(this.skip(),e=")"==this.ch,this.at++,this.popExpression(),1):-1},e.prototype.readExpressionOperand=function(e,t){if(void 0===e&&(e=null),void 0===t&&(t=null),this.skip(),this.at>=this.length)return null;var r=this.isOpenBracket(this.ch);r&&(this.at++,this.pushExpression());var i=this.readOperand();if(!i)return null;var o=this.readOperandOperator();if(!o){if(null!=e&&(e.right=i,i=e),this.isCloseBracket(this.ch)){e=t&&t.length>0?t.pop():null;var a=this.at;this.at++,o=this.readOperandOperator();var s=o||e&&e.isOpenBracket;o||(this.at=a+(s?1:0)),s&&this.popExpression()}if(o){var u=new n.f;return u.left=e||i,u.operator=o,this.readExpressionOperand(u,t)}return i}var u=new n.f;if(u.isOpenBracket=r,u.left=i,u.operator=o,t||(t=[]),(0==t.length||r)&&t.push(u),e){if(r||!this.isHighPriorityOperand(e.operator)&&this.isHighPriorityOperand(o))return e.right=this.readExpressionOperand(u,t),e;e.right=i,u.left=e;var l=t.indexOf(e);l>-1&&(t[l]=u)}return this.readExpressionOperand(u,t)},Object.defineProperty(e.prototype,"ch",{get:function(){return this.text.charAt(this.at)},enumerable:!0,configurable:!0}),e.prototype.skip=function(){for(;this.at"==e||"<"==e||"="==e||"!"==e||"+"==e||"-"==e||"*"==e||"/"==e||"%"==e},e.prototype.isOpenBracket=function(e){return"("==e},e.prototype.isCloseBracket=function(e){return")"==e},e.prototype.isBrackets=function(e){return this.isOpenBracket(e)||this.isCloseBracket(e)},e.prototype.readString=function(){if(this.skip(),this.at>=this.length)return null;var e=this.at,t=this.isQuotes(this.ch),r="{"==this.ch;t&&this.at++;for(var n=this.isOperatorChar(this.ch),i=!1;this.at1&&this.isQuotes(a[0])){var s=a.length-1;this.isQuotes(a[a.length-1])&&s--,a=a.substr(1,s)}return a},e.prototype.readParameter=function(){for(var t=0,r=this.at;this.at"==t&&(t="greater"),"<"==t&&(t="less"),">="!=t&&"=>"!=t||(t="greaterorequal"),"<="!=t&&"=<"!=t||(t="lessorequal"),"="!=t&&"=="!=t||(t="equal"),"<>"!=t&&"!="!=t||(t="notequal"),"equals"==t&&(t="equal"),"notequals"==t&&(t="notequals"),"contain"!=t&&"*="!=t||(t="contains"),"notcontain"==t&&(t="notcontains"),n.c.isCorrectOperator(t)?t:(this.at=e,null)):null},e.prototype.readConnective=function(){var e=this.readString();return e?(e=e.toLowerCase(),"&"!=e&&"&&"!=e||(e="and"),"|"!=e&&"||"!=e||(e="or"),"and"!=e&&"or"!=e&&(e=null),e):null},e.prototype.pushExpression=function(){var e=null;this.expressionNodes.push(e),this.node=e},e.prototype.makeNodeCondition=function(){this.node&&this.node.children||(this.node=new n.b,this.expressionNodes[this.expressionNodes.length-1]=this.node)},e.prototype.popExpression=function(){var e=this.expressionNodes.pop();this.node=this.expressionNodes[this.expressionNodes.length-1],e&&(this.makeNodeCondition(),this.node.children.push(e))},e.prototype.addCondition=function(e){this.makeNodeCondition(),this.node.children.push(e)},e.prototype.addConnective=function(e){if(this.makeNodeCondition(),this.node.children.length<2)this.node.connective=e;else if(this.node.connective!=e){var t=this.node.connective,r=this.node.children;this.node.clear(),this.node.connective=e;var i=new n.b;i.connective=t,i.children=r,this.node.children.push(i);var o=new n.b;this.node.children.push(o),this.node=o}},e}()},function(e,t,r){"use strict";r.d(t,"a",function(){return n});var n=function(){function e(){}return e.prototype.loadSurvey=function(t,r){var n=new XMLHttpRequest;n.open("GET",e.serviceUrl+"/getSurvey?surveyId="+t),n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.onload=function(){var e=JSON.parse(n.response);r(200==n.status,e,n.response)},n.send()},e.prototype.getSurveyJsonAndIsCompleted=function(t,r,n){var i=new XMLHttpRequest;i.open("GET",e.serviceUrl+"/getSurveyAndIsCompleted?surveyId="+t+"&clientId="+r),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.onload=function(){var e=JSON.parse(i.response),t=e?e.survey:null,r=e?e.isCompleted:null;n(200==i.status,t,r,i.response)},i.send()},e.prototype.sendResult=function(t,r,n,i,o){void 0===i&&(i=null),void 0===o&&(o=!1);var a=new XMLHttpRequest;a.open("POST",e.serviceUrl+"/post/"),a.setRequestHeader("Content-Type","application/json; charset=utf-8");var s={postId:t,surveyResult:JSON.stringify(r)};i&&(s.clientId=i),o&&(s.isPartialCompleted=!0);var u=JSON.stringify(s);a.onload=a.onerror=function(){n&&n(200==a.status,a.response)},a.send(u)},e.prototype.sendFile=function(t,r,n){var i=new XMLHttpRequest;i.onload=i.onerror=function(){n&&n(200==i.status,JSON.parse(i.response))},i.open("POST",e.serviceUrl+"/upload/",!0);var o=new FormData;o.append("file",r),o.append("postId",t),i.send(o)},e.prototype.getResult=function(t,r,n){var i=new XMLHttpRequest,o="resultId="+t+"&name="+r;i.open("GET",e.serviceUrl+"/getResult?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null,t=null;if(200==i.status){e=JSON.parse(i.response),t=[];for(var r in e.QuestionResult){var o={name:r,value:e.QuestionResult[r]};t.push(o)}}n(200==i.status,e,t,i.response)},i.send()},e.prototype.isCompleted=function(t,r,n){var i=new XMLHttpRequest,o="resultId="+t+"&clientId="+r;i.open("GET",e.serviceUrl+"/isCompleted?"+o),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded");i.onload=function(){var e=null;200==i.status&&(e=JSON.parse(i.response)),n(200==i.status,e,i.response)},i.send()},e.serviceUrl="https://dxsurveyapi.azurewebsites.net/api/Survey",e}()},function(e,t,r){"use strict";function n(e){for(var t=0,r=0;r0&&(t=this.num+". "+t),t},Object.defineProperty(t.prototype,"wasShown",{get:function(){return this.hasShownValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasShown",{get:function(){return this.wasShown},enumerable:!0,configurable:!0}),t.prototype.setWasShown=function(e){this.survey.isDesignMode||e!=this.hasShownValue&&(1==e&&this.areQuestionsRandomized&&this.randomizeElements(),this.hasShownValue=e)},t.prototype.randomizeElements=function(){for(var e=[],t=0;t .sv_row":"border-color: $border-color;",".sv_default_css .sv_p_root > .sv_row:nth-child(odd)":"background-color: $body-background-color;",".sv_default_css .sv_p_root > .sv_row:nth-child(even)":"background-color: $body-container-background-color;",".sv_default_css .sv_q_other input":"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;",".sv_default_css .sv_q_text_root":"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;",".sv_default_css .sv_q_dropdown_control":"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;",".sv_default_css input[type='text']":"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;",".sv_default_css select":"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;",".sv_default_css textarea":"color: $text-color; border-color: $border-color; background-color: $inputs-background-color;",".sv_default_css .sv_q_other input:focus":"border-color: $main-color;",".sv_default_css .sv_q_text_root:focus":"border-color: $main-color;",".sv_default_css .sv_q_dropdown_control:focus":"border-color: $main-color;",".sv_default_css input[type='text']:focus":"border-color: $main-color;",".sv_default_css select:focus":"border-color: $main-color;",".sv_default_css textarea:focus":"border-color: $main-color;",".sv_default_css .sv_select_wrapper":"background-color: $body-background-color;",".sv_default_css .sv_select_wrapper::before":"background-color: $main-color;",".sv_default_css .sv_q_rating_item.active .sv_q_rating_item_text":"background-color: $main-hover-color; border-color: $main-hover-color; color: $body-background-color;",".sv_default_css .sv_q_rating_item .sv_q_rating_item_text":"border-color: $border-color;",".sv_default_css .sv_q_rating_item .sv_q_rating_item_text:hover":"border-color: $main-hover-color;",".sv_default_css table.sv_q_matrix tr":"border-color: $border-color;",".sv_default_css table.sv_q_matrix_dropdown tr":"border-color: $border-color;",".sv_default_css table.sv_q_matrix_dynamic tr":"border-color: $border-color;"},e}()},function(e,t,r){"use strict";var n=r(0),i=r(7),o=r(18);r.d(t,"a",function(){return a});var a=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this)||this;return n.isExpandedValue=!1,n.surveyValue=r||n.createSurvey(t),n.surveyValue.showTitle=!1,"undefined"!=typeof document&&(n.windowElement=document.createElement("div")),n}return n.b(t,e),t.prototype.getType=function(){return"window"},Object.defineProperty(t.prototype,"survey",{get:function(){return this.surveyValue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isShowing",{get:function(){return this.isShowingValue},set:function(e){this.isShowing!=e&&(this.isShowingValue=e,this.showingChangedCallback&&this.showingChangedCallback())},enumerable:!0,configurable:!0}),t.prototype.show=function(){this.isShowing=!0},t.prototype.hide=function(){this.isShowing=!1},Object.defineProperty(t.prototype,"isExpanded",{get:function(){return this.isExpandedValue},set:function(e){e?this.expand():this.collapse()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"title",{get:function(){return this.survey.title},set:function(e){this.survey.title=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locTitle",{get:function(){return this.survey.locTitle},enumerable:!0,configurable:!0}),t.prototype.expand=function(){this.expandcollapse(!0)},t.prototype.collapse=function(){this.expandcollapse(!1)},t.prototype.createSurvey=function(e){return new o.a(e)},t.prototype.expandcollapse=function(e){this.isExpandedValue!=e&&(this.isExpandedValue=e,this.expandedChangedCallback&&this.expandedChangedCallback())},t.surveyElementName="windowSurveyJS",t}(i.c)},function(e,t,r){"use strict";var n=r(7);r.d(t,"a",function(){return o});var i={setInterval:function(e){return window.setInterval(e,1e3)},clearInterval:function(e){window.clearInterval(e)}},o=function(){function e(){this.listenerCounter=0,this.timerId=-1,this.onTimer=new n.b}return Object.defineProperty(e,"instance",{get:function(){return e.instanceValue||(e.instanceValue=new e),e.instanceValue},enumerable:!0,configurable:!0}),e.prototype.start=function(e){if(void 0===e&&(e=null),e&&this.onTimer.add(e),this.timerId<0){var t=this;this.timerId=i.setInterval(function(){t.doTimer()})}this.listenerCounter++},e.prototype.stop=function(e){void 0===e&&(e=null),e&&this.onTimer.remove(e),0==--this.listenerCounter&&this.timerId>-1&&(i.clearInterval(this.timerId),this.timerId=-1)},e.prototype.doTimer=function(){this.timerId<0||this.onTimer.fire(this,{})},e.instanceValue=null,e}()},function(e,t,r){"use strict";var n=r(54);r.d(t,"T",function(){return n.a}),r.d(t,"U",function(){return n.b}),r.d(t,"V",function(){return n.c}),r.d(t,"W",function(){return n.d}),r.d(t,"X",function(){return n.e}),r.d(t,"Y",function(){return n.f}),r.d(t,"Z",function(){return n.g}),r.d(t,"_0",function(){return n.h}),r.d(t,"_1",function(){return n.i}),r.d(t,"_2",function(){return n.j}),r.d(t,"_3",function(){return n.k}),r.d(t,"_4",function(){return n.l}),r.d(t,"_5",function(){return n.m}),r.d(t,"_6",function(){return n.n}),r.d(t,"_7",function(){return n.o}),r.d(t,"_8",function(){return n.p}),r.d(t,"_9",function(){return n.q}),r.d(t,"_10",function(){return n.r}),r.d(t,"_11",function(){return n.s}),r.d(t,"_12",function(){return n.t}),r.d(t,"_13",function(){return n.u}),r.d(t,"_14",function(){return n.v}),r.d(t,"_15",function(){return n.w}),r.d(t,"_16",function(){return n.x}),r.d(t,"_17",function(){return n.y}),r.d(t,"_18",function(){return n.z}),r.d(t,"_19",function(){return n.A}),r.d(t,"_20",function(){return n.B}),r.d(t,"_21",function(){return n.C}),r.d(t,"_22",function(){return n.D}),r.d(t,"_23",function(){return n.E}),r.d(t,"_24",function(){return n.F}),r.d(t,"_25",function(){return n.G}),r.d(t,"_26",function(){return n.H}),r.d(t,"_27",function(){return n.I}),r.d(t,"_28",function(){return n.J}),r.d(t,"_29",function(){return n.K}),r.d(t,"_30",function(){return n.L}),r.d(t,"_31",function(){return n.M}),r.d(t,"_32",function(){return n.N}),r.d(t,"_33",function(){return n.O}),r.d(t,"_34",function(){return n.P}),r.d(t,"_35",function(){return n.Q}),r.d(t,"_36",function(){return n.R}),r.d(t,"_37",function(){return n.S}),r.d(t,"_38",function(){return n.T}),r.d(t,"_39",function(){return n.U}),r.d(t,"_40",function(){return n.V}),r.d(t,"_41",function(){return n.W}),r.d(t,"_42",function(){return n.X}),r.d(t,"_43",function(){return n.Y}),r.d(t,"_44",function(){return n.Z}),r.d(t,"_45",function(){return n._0}),r.d(t,"_46",function(){return n._1}),r.d(t,"_47",function(){return n._2}),r.d(t,"_48",function(){return n._3}),r.d(t,"_49",function(){return n._4}),r.d(t,"_50",function(){return n._5}),r.d(t,"_51",function(){return n._6}),r.d(t,"_52",function(){return n._7}),r.d(t,"_53",function(){return n._8}),r.d(t,"_54",function(){return n._9}),r.d(t,"_55",function(){return n._10}),r.d(t,"_56",function(){return n._11}),r.d(t,"_57",function(){return n._12}),r.d(t,"_58",function(){return n._13}),r.d(t,"_59",function(){return n._14}),r.d(t,"_60",function(){return n._15}),r.d(t,"_61",function(){return n._16}),r.d(t,"_62",function(){return n._17}),r.d(t,"_63",function(){return n._18}),r.d(t,"_64",function(){return n._19}),r.d(t,"_65",function(){return n._20}),r.d(t,"_66",function(){return n._21}),r.d(t,"_67",function(){return n._22}),r.d(t,"_68",function(){return n._23}),r.d(t,"_69",function(){return n._24}),r.d(t,"_70",function(){return n._25}),r.d(t,"_71",function(){return n._26}),r.d(t,"_72",function(){return n._27}),r.d(t,"_73",function(){return n._28}),r.d(t,"_74",function(){return n._29}),r.d(t,"_75",function(){return n._30}),r.d(t,"_76",function(){return n._31}),r.d(t,"_77",function(){return n._32});var i=(r(53),r(0));r.d(t,"a",function(){return i.a}),r.d(t,"b",function(){return i.b}),r.d(t,"c",function(){return i.c});var o=r(12);r.d(t,"d",function(){return o.a});var a=r(51);r.d(t,"e",function(){return a.a});var s=r(52);r.d(t,"f",function(){return s.a});var u=r(20);r.d(t,"g",function(){return u.a});var l=r(19);r.d(t,"h",function(){return l.a}),r.d(t,"i",function(){return l.b}),r.d(t,"j",function(){return l.a}),r.d(t,"k",function(){return l.b});var c=r(26);r.d(t,"l",function(){return c.a});var p=r(41);r.d(t,"m",function(){return p.a});var h=r(38);r.d(t,"n",function(){return h.a});var d=r(27);r.d(t,"o",function(){return d.a}),r.d(t,"p",function(){return d.b});var f=r(28);r.d(t,"q",function(){return f.a}),r.d(t,"r",function(){return f.b});var g=r(4);r.d(t,"s",function(){return g.a}),r.d(t,"t",function(){return g.b});var m=r(14);r.d(t,"u",function(){return m.a}),r.d(t,"v",function(){return m.b});var y=r(94);r.d(t,"w",function(){return y.a}),r.d(t,"x",function(){return y.b});var v=r(95);r.d(t,"y",function(){return v.a});var b=r(40);r.d(t,"z",function(){return b.a}),r.d(t,"A",function(){return b.b});var P=r(100);r.d(t,"B",function(){return P.a}),r.d(t,"C",function(){return P.b});var C=r(99);r.d(t,"D",function(){return C.a});var x=r(98);r.d(t,"E",function(){return x.a});var w=r(102);r.d(t,"F",function(){return w.a}),r.d(t,"G",function(){return w.b});var V=r(104);r.d(t,"H",function(){return V.a});var S=r(106);r.d(t,"I",function(){return S.a});var T=r(93);r.d(t,"J",function(){return T.a});var O=r(96);r.d(t,"K",function(){return O.a});var E=r(101);r.d(t,"L",function(){return E.a}),r.d(t,"M",function(){return E.b});var q=r(103);r.d(t,"N",function(){return q.a});var R=r(39);r.d(t,"O",function(){return R.a});var _=r(105);r.d(t,"P",function(){return _.a});var k=r(97);r.d(t,"Q",function(){return k.a});var L=r(30);r.d(t,"R",function(){return L.a});var N=r(6);r.d(t,"S",function(){return N.a})},function(t,r){t.exports=e},function(e,t){},function(e,t,r){!function(e,r){r(t)}(0,function(e){function t(e,t,r){this.nodeName=e,this.attributes=t,this.children=r,this.key=t&&t.key}function r(e,r){var n,i,o,a,s;for(s=arguments.length;s-- >2;)A.push(arguments[s]);for(r&&r.children&&(A.length||A.push(r.children),delete r.children);A.length;)if((o=A.pop())instanceof Array)for(s=o.length;s--;)A.push(o[s]);else null!=o&&!0!==o&&!1!==o&&("number"==typeof o&&(o=String(o)),a="string"==typeof o,a&&i?n[n.length-1]+=o:((n||(n=[])).push(o),i=a));var u=new t(e,r||void 0,n||z);return M.vnode&&M.vnode(u),u}function n(e,t){if(t)for(var r in t)e[r]=t[r];return e}function i(e){return n({},e)}function o(e,t){for(var r=t.split("."),n=0;n2?[].slice.call(arguments,2):e.children)}function c(e,t,r){var n=t.split(".");return function(t){for(var i=t&&t.target||this,a={},u=a,l=s(r)?o(t,r):i.nodeName?i.type.match(/^che|rad/)?i.checked:i.value:t,c=0;c=f?e.appendChild(u):u!==l[b]&&(u===l[b+1]&&v(l[b]),e.insertBefore(u,l[b]||null)))}if(h)for(var b in p)p[b]&&E(p[b]);for(;d<=m;)(u=c[m--])&&E(u)}function E(e,t){var r=e._component;if(r)I(r,!t);else{e[U]&&e[U].ref&&e[U].ref(null),t||x(e);for(var n;n=e.lastChild;)E(n,t)}}function q(e,t,r){var n;for(n in r)t&&n in t||null==r[n]||b(e,n,r[n],r[n]=void 0,Y);if(t)for(n in t)"children"===n||"innerHTML"===n||n in r&&t[n]===("value"===n||"checked"===n?e[n]:r[n])||b(e,n,r[n],r[n]=t[n],Y)}function R(e){var t=e.constructor.name,r=te[t];r?r.push(e):te[t]=[e]}function _(e,t,r){var n=new e(t,r),i=te[e.name];if(j.call(n,t,r),i)for(var o=i.length;o--;)if(i[o].constructor===e){n.nextBase=i[o].nextBase,i.splice(o,1);break}return n}function k(e,t,r,n,i){e._disable||(e._disable=!0,(e.__ref=t.ref)&&delete t.ref,(e.__key=t.key)&&delete t.key,!e.base||i?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,n),n&&n!==e.context&&(e.prevContext||(e.prevContext=e.context),e.context=n),e.prevProps||(e.prevProps=e.props),e.props=t,e._disable=!1,0!==r&&(1!==r&&!1===M.syncComponentUpdates&&e.base?p(e):L(e,1,i)),e.__ref&&e.__ref(e))}function L(e,t,r,o){if(!e._disable){var s,u,l,c,p=e.props,h=e.state,g=e.context,m=e.prevProps||p,v=e.prevState||h,b=e.prevContext||g,P=e.base,C=e.nextBase,x=P||C,w=e._component;if(P&&(e.props=m,e.state=v,e.context=b,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(p,h,g)?s=!0:e.componentWillUpdate&&e.componentWillUpdate(p,h,g),e.props=p,e.state=h,e.context=g),e.prevProps=e.prevState=e.prevContext=e.nextBase=null,e._dirty=!1,!s){for(e.render&&(u=e.render(p,h,g)),e.getChildContext&&(g=n(i(g),e.getChildContext()));d(u);)u=f(u,g);var T,O,q=u&&u.nodeName;if(a(q)){var R=y(u);l=w,l&&l.constructor===q&&R.key==l.__key?k(l,R,1,g):(T=l,l=_(q,R,g),l.nextBase=l.nextBase||C,l._parentComponent=e,e._component=l,k(l,R,0,g),L(l,1,r,!0)),O=l.base}else c=x,T=w,T&&(c=e._component=null),(x||1===t)&&(c&&(c._component=null),O=S(c,u,g,r||!P,x&&x.parentNode,!0));if(x&&O!==x&&l!==w){var N=x.parentNode;N&&O!==N&&(N.replaceChild(O,x),T||(x._component=null,E(x)))}if(T&&I(T,O!==x),e.base=O,O&&!o){for(var j=e,D=e;D=D._parentComponent;)(j=D).base=O;O._component=j,O._componentConstructor=j.constructor}}!P||r?X.unshift(e):s||(e.componentDidUpdate&&e.componentDidUpdate(m,v,b),M.afterUpdate&&M.afterUpdate(e));var A,z=e._renderCallbacks;if(z)for(;A=z.pop();)A.call(e);K||o||V()}}function N(e,t,r,n){for(var i=e&&e._component,o=i,a=e,s=i&&e._componentConstructor===t.nodeName,u=s,l=y(t);i&&!u&&(i=i._parentComponent);)u=i.constructor===t.nodeName;return i&&u&&(!n||i._component)?(k(i,l,3,r,n),e=i.base):(o&&!s&&(I(o,!0),e=a=null),i=_(t.nodeName,l,r),e&&!i.nextBase&&(i.nextBase=e,a=null),k(i,l,1,r,n),e=i.base,a&&e!==a&&(a._component=null,E(a))),e}function I(e,t){M.beforeUnmount&&M.beforeUnmount(e);var r=e.base;e._disable=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var n=e._component;if(n)I(n,t);else if(r){r[U]&&r[U].ref&&r[U].ref(null),e.nextBase=r,t&&(v(r),R(e));for(var i;i=r.lastChild;)E(i,!t)}e.__ref&&e.__ref(null),e.componentDidUnmount&&e.componentDidUnmount()}function j(e,t){this._dirty=!0,this.context=t,this.props=e,this.state||(this.state={})}function D(e,t,r){return S(r,e,{},!1,t)}var M={},A=[],z=[],B={},F=function(e){return B[e]||(B[e]=e.toLowerCase())},H="undefined"!=typeof Promise&&Promise.resolve(),Q=H?function(e){H.then(e)}:setTimeout,W={},U="undefined"!=typeof Symbol?Symbol.for("preactattr"):"__preactattr_",J={boxFlex:1,boxFlexGroup:1,columnCount:1,fillOpacity:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,fontWeight:1,lineClamp:1,lineHeight:1,opacity:1,order:1,orphans:1,strokeOpacity:1,widows:1,zIndex:1,zoom:1},$={blur:1,error:1,focus:1,load:1,resize:1,scroll:1},G=[],Z={},X=[],K=0,Y=!1,ee=!1,te={};n(j.prototype,{linkState:function(e,t){var r=this._linkedStates||(this._linkedStates={});return r[e+t]||(r[e+t]=c(this,e,t))},setState:function(e,t){var r=this.state;this.prevState||(this.prevState=i(r)),n(r,a(e)?e(r,this.props):e),t&&(this._renderCallbacks=this._renderCallbacks||[]).push(t),p(this)},forceUpdate:function(){L(this,2)},render:function(){}}),e.h=r,e.cloneElement=l,e.Component=j,e.render=D,e.rerender=h,e.options=M})},function(e,t){function r(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(e){if(c===setTimeout)return setTimeout(e,0);if((c===r||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(p===clearTimeout)return clearTimeout(e);if((p===n||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function a(){g&&d&&(g=!1,d.length?f=d.concat(f):m=-1,f.length&&s())}function s(){if(!g){var e=i(a);g=!0;for(var t=f.length;t;){for(d=f,f=[];++m1)for(var r=1;r=0},t.prototype.valueFromData=function(t){return t?Array.isArray(t)?e.prototype.valueFromData.call(this,t):[t]:t},t.prototype.valueFromDataCore=function(e){for(var t=0;t0&&e.size>this.maxSize&&this.errors.push(new s.d(this.maxSize)),(t!=this.errors.length||this.errors.length>0)&&this.fireCallback(this.errorsChangedCallback),this.errors.length>0},t.prototype.isFileImage=function(e){if(e&&e.type){return 0==e.type.toLowerCase().indexOf("image")}},t}(i.a);o.b.metaData.addClass("file",["showPreview:boolean","imageHeight","imageWidth",{name:"storeDataAsText:boolean",default:!0},"maxSize:number"],function(){return new l("")},"question"),a.a.Instance.registerQuestion("file",function(e){return new l(e)})},function(e,t,r){"use strict";var n=r(0),i=r(25),o=r(3),a=r(5);r.d(t,"a",function(){return s});var s=function(e){function t(t){var r=e.call(this,t)||this;return r.name=t,r.createLocalizableString("html",r),r}return n.b(t,e),t.prototype.getType=function(){return"html"},Object.defineProperty(t.prototype,"html",{get:function(){return this.getLocalizableStringText("html","")},set:function(e){this.setLocalizableStringText("html",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locHtml",{get:function(){return this.getLocalizableString("html")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"processedHtml",{get:function(){return this.survey?this.survey.processHtml(this.html):this.html},enumerable:!0,configurable:!0}),t}(i.a);o.b.metaData.addClass("html",[{name:"html:html",serializationProperty:"locHtml"}],function(){return new s("")},"questionbase"),a.a.Instance.registerQuestion("html",function(e){return new s(e)})},function(e,t,r){"use strict";var n=r(0),i=r(11),o=r(8),a=r(3),s=r(1),u=r(9),l=r(5);r.d(t,"a",function(){return c}),r.d(t,"b",function(){return p});var c=function(){function e(e,t,r,n){this.fullName=t,this.item=e,this.data=r,this.rowValue=n}return Object.defineProperty(e.prototype,"name",{get:function(){return this.item.value},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this.item.text},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"locText",{get:function(){return this.item.locText},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.rowValue},set:function(e){this.rowValue=e,this.data&&this.data.onMatrixRowChanged(this),this.onValueChanged()},enumerable:!0,configurable:!0}),e.prototype.onValueChanged=function(){},e}(),p=function(e){function t(t){var r=e.call(this,t)||this;return r.name=t,r.isRowChanging=!1,r.columnsValue=r.createItemValues("columns"),r.rowsValue=r.createItemValues("rows"),r}return n.b(t,e),t.prototype.getType=function(){return"matrix"},Object.defineProperty(t.prototype,"isAllowTitleLeft",{get:function(){return!1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isAllRowRequired",{get:function(){return this.getPropertyValue("isAllRowRequired",!1)},set:function(e){this.setPropertyValue("isAllRowRequired",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasRows",{get:function(){return this.rowsValue.length>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"columns",{get:function(){return this.columnsValue},set:function(e){this.setPropertyValue("columns",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this.rowsValue},set:function(e){this.setPropertyValue("rows",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleRows",{get:function(){var e=new Array,t=this.value;t||(t={});for(var r=0;rt.MaxRowCount)){var r=this.rowCountValue;if(this.rowCountValue=e,this.value&&this.value.length>e){var n=this.value;n.splice(e),this.value=n}if(!this.isLoadingFromJson){if(this.generatedVisibleRows){this.generatedVisibleRows.splice(e);for(var i=r;ithis.maxRowCount||(this.setPropertyValue("minRowCount",e),this.rowCountt.MaxRowCount&&(e=t.MaxRowCount),e==this.maxRowCount||ee&&(this.rowCount=e)))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"canAddRow",{get:function(){return this.rowCountthis.minRowCount},enumerable:!0,configurable:!0}),t.prototype.addRow=function(){if(this.canAddRow){var e=this.rowCount;this.rowCount=this.rowCount+1,this.data&&this.runCellsCondition(this.data.getAllValues()),this.survey&&e+1==this.rowCount&&this.survey.matrixRowAdded(this)}},t.prototype.removeRowUI=function(e){this.confirmDelete&&!confirm(this.confirmDeleteText)||this.removeRow(e)},t.prototype.removeRow=function(e){if(this.canRemoveRow&&!(e<0||e>=this.rowCount)){if(this.survey){var t=this.generatedVisibleRows?this.generatedVisibleRows[e]:null;this.survey.matrixRowRemoved(this,e,t)}if(this.generatedVisibleRows&&ethis.rowCount&&t.splice(this.rowCount-1);for(var r=t.length;r0){r=!1;break}return r?null:e},t.prototype.getRowValueByIndex=function(e,t){return t>=0&&t4||this.setPropertyValue("colCount",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"itemSize",{get:function(){return this.getPropertyValue("itemSize",25)},set:function(e){this.setPropertyValue("itemSize",e)},enumerable:!0,configurable:!0}),t.prototype.getRows=function(){for(var e=this.colCount,t=this.items,r=[],n=0,i=0;i=e&&(n=0);return r},t.prototype.onValueChanged=function(){e.prototype.onValueChanged.call(this),this.onItemValueChanged()},t.prototype.createTextItem=function(e,t){return new p(e,t)},t.prototype.onItemValueChanged=function(){if(!this.isMultipleItemValueChanging)for(var e=0;e0&&(this.currentIndexValue=0),this.currentIndexValue>=this.panelCount&&(this.currentIndexValue=this.panelCount-1),this.currentIndexValue)},set:function(e){e>=this.panelCount&&(e=this.panelCount-1),this.currentIndexValue=e,this.fireCallback(this.currentIndexChangedCallback)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentPanel",{get:function(){var e=this.currentIndex;return e<0||e>=this.panels.length?null:this.panels[e]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"confirmDelete",{get:function(){return this.getPropertyValue("confirmDelete",!1)},set:function(e){this.setPropertyValue("confirmDelete",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"keyName",{get:function(){return this.getPropertyValue("keyName","")},set:function(e){this.setPropertyValue("keyName",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"confirmDeleteText",{get:function(){return this.getLocalizableStringText("confirmDeleteText",o.a.getString("confirmDelete"))},set:function(e){this.setLocalizableStringText("confirmDeleteText",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locConfirmDeleteText",{get:function(){return this.getLocalizableString("confirmDeleteText")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"keyDuplicationError",{get:function(){return this.getLocalizableStringText("keyDuplicationError",o.a.getString("keyDuplicationError"))},set:function(e){this.setLocalizableStringText("keyDuplicationError",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locKeyDuplicationError",{get:function(){return this.getLocalizableString("keyDuplicationError")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"panelPrevText",{get:function(){return this.getLocalizableStringText("panelPrevText",o.a.getString("pagePrevText"))},set:function(e){this.setLocalizableStringText("panelPrevText",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPanelPrevText",{get:function(){return this.getLocalizableString("panelPrevText")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"panelNextText",{get:function(){return this.getLocalizableStringText("panelNextText",o.a.getString("pageNextText"))},set:function(e){this.setLocalizableStringText("panelNextText",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPanelNextText",{get:function(){return this.getLocalizableString("panelNextText")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"panelAddText",{get:function(){return this.getLocalizableStringText("panelAddText",o.a.getString("addPanel"))},set:function(e){this.setLocalizableStringText("panelAddText",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPanelAddText",{get:function(){return this.getLocalizableString("panelAddText")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"panelRemoveText",{get:function(){return this.getLocalizableStringText("panelRemoveText",o.a.getString("removePanel"))},set:function(e){this.setLocalizableStringText("panelRemoveText",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"locPanelRemoveText",{get:function(){return this.getLocalizableString("panelRemoveText")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isProgressTopShowing",{get:function(){return"progressTop"==this.renderMode||"progressTopBottom"==this.renderMode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isProgressBottomShowing",{get:function(){return"progressBottom"==this.renderMode||"progressTopBottom"==this.renderMode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isPrevButtonShowing",{get:function(){return this.currentIndex>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isNextButtonShowing",{get:function(){return this.currentIndex>=0&&this.currentIndex=0&&this.panelCount>1},enumerable:!0,configurable:!0}),t.prototype.getElementsInDesign=function(e){return void 0===e&&(e=!1),e?[this.template]:this.templateElements},Object.defineProperty(t.prototype,"panelCount",{get:function(){return this.isLoadingFromJson||this.isDesignMode?this.loadingPanelCount:this.items.length},set:function(e){if(!(e<0)){if(this.isLoadingFromJson||this.isDesignMode)return void(this.loadingPanelCount=e);if(e!=this.items.length&&!this.isDesignMode){for(var t=this.panelCount;tthis.panelCount&&e.splice(this.panelCount,e.length-this.panelCount),this.value=e}},Object.defineProperty(t.prototype,"minPanelCount",{get:function(){return this.getPropertyValue("minPanelCount",0)},set:function(e){e<0&&(e=0),e==this.minPanelCount||e>this.maxPanelCount||(this.setPropertyValue("minPanelCount",e),this.panelCountt.MaxPanelCount&&(e=t.MaxPanelCount),e==this.maxPanelCount||ee&&(this.panelCount=e)))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"allowAddPanel",{get:function(){return this.getPropertyValue("allowAddPanel",!0)},set:function(e){this.setPropertyValue("allowAddPanel",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"allowRemovePanel",{get:function(){return this.getPropertyValue("allowRemovePanel",!0)},set:function(e){this.setPropertyValue("allowRemovePanel",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"templateTitleLocation",{get:function(){return this.getPropertyValue("templateTitleLocation","default")},set:function(e){this.setPropertyValue("templateTitleLocation",e.toLowerCase())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"showQuestionNumbers",{get:function(){return this.getPropertyValue("showQuestionNumbers","off")},set:function(e){this.setPropertyValue("showQuestionNumbers",e),!this.isLoadingFromJson&&this.survey&&this.survey.questionVisibilityChanged(this,this.visible)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"showRangeInProgress",{get:function(){return this.getPropertyValue("showRangeInProgress",!0)},set:function(e){this.setPropertyValue("showRangeInProgress",e),this.fireCallback(this.currentIndexChangedCallback)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderMode",{get:function(){return this.getPropertyValue("renderMode","list")},set:function(e){this.setPropertyValue("renderMode",e),this.fireCallback(this.renderModeChangedCallback)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isRenderModeList",{get:function(){return"list"==this.renderMode},enumerable:!0,configurable:!0}),t.prototype.setVisibleIndex=function(t){for(var r="onSurvey"==this.showQuestionNumbers?t:0,n=0;nthis.minPanelCount)},enumerable:!0,configurable:!0}),t.prototype.rebuildPanels=function(){var e=new Array;if(this.isDesignMode)e.push(new d(this,this.template)),this.oldTemplateRowsChangedCallback&&this.oldTemplateRowsChangedCallback(),this.rebuildTemplateRowsInElements(this.template.elements);else for(var t=0;t=this.panelCount)){this.items.splice(t,1);var e=this.value;!e||!Array.isArray(e)||t>=e.length||(e.splice(t,1),this.value=e,this.fireCallback(this.panelCountChangedCallback))}}},t.prototype.getPanelIndex=function(e){if(!isNaN(parseFloat(e))&&isFinite(e))return e;for(var t=0;t0&&(this.panelCount=this.loadingPanelCount),this.isDesignMode&&this.rebuildPanels(),e.prototype.onSurveyLoad.call(this)},t.prototype.runCondition=function(t){e.prototype.runCondition.call(this,t),this.runPanelsCondition(t)},t.prototype.reRunCondition=function(){this.data&&this.runCondition(this.data.getAllValues())},t.prototype.runPanelsCondition=function(e){var t={};e&&e instanceof Object&&(t=JSON.parse(JSON.stringify(e)));for(var r=0;r0&&(t=t.concat(o))}return t},t.prototype.hasErrorInPanels=function(e){for(var t=!1,r=this.panels,n=[],i=0;ithis.rateMax-this.rateStep&&(e=this.rateMax-this.rateStep),this.setPropertyValue("rateMin",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rateMax",{get:function(){return this.getPropertyValue("rateMax",5)},set:function(e){ethis.rateMax-this.rateMin&&(e=this.rateMax-this.rateMin),this.setPropertyValue("rateStep",e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"visibleRateValues",{get:function(){if(this.rateValues.length>0)return this.rateValues;for(var e=[],r=this.rateMin;r<=this.rateMax&&e.length-1&&t.splice(r,1),this.question.value=t,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.item||!this.question)return null;var e=this.question.colCount>0?100/this.question.colCount+"%":"",t={display:"inline-block"};e&&(t.width=e);var r=this.question.value&&this.question.value.indexOf(this.item.value)>-1||!1,n=this.item.value===this.question.otherItem.value&&r?this.renderOther():null;return this.renderCheckbox(r,t,n)},Object.defineProperty(t.prototype,"inputStyle",{get:function(){return{marginRight:"3px"}},enumerable:!0,configurable:!0}),t.prototype.renderCheckbox=function(e,t,r){var n=this.isFirst?this.question.inputId:null,o=this.renderLocString(this.item.locText),a=this.cssClasses.item+(0===this.question.colCount?" sv_q_checkbox_inline":"");return e&&(a+=" checked"),i.createElement("div",{className:a,style:t},i.createElement("label",{className:this.cssClasses.label},i.createElement("input",{className:this.cssClasses.itemControl,type:"checkbox",value:this.item.value,id:n,style:this.inputStyle,disabled:this.isDisplayMode,checked:e,onChange:this.handleOnChange,"aria-label":this.question.locTitle.renderedHtml}),i.createElement("span",{className:"checkbox-material"},i.createElement("span",{className:"check"})),i.createElement("span",{className:this.cssClasses.controlLabel},o)),r)},t.prototype.renderOther=function(){return i.createElement("div",{className:this.cssClasses.other},i.createElement(a.a,{question:this.question,otherCss:this.cssClasses.other,cssClasses:this.cssClasses,isDisplayMode:this.isDisplayMode}))},t}(o.c);s.a.Instance.registerQuestion("checkbox",function(e){return i.createElement(u,e)})},function(e,t,r){"use strict";var n=r(0),i=r(2),o=(r.n(i),r(4)),a=r(14),s=r(6),u=r(108);r.d(t,"a",function(){return l});var l=function(e){function t(t){var r=e.call(this,t)||this;r.state={value:r.getStateValue(),choicesChanged:0};var n=r;return r.question.choicesChangedCallback=function(){n.setState({choicesChanged:n.state.choicesChanged+1,value:n.question.value})},r.handleOnChange=r.handleOnChange.bind(r),r}return n.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.componentWillReceiveProps=function(t){e.prototype.componentWillReceiveProps.call(this,t),this.setState({value:this.getStateValue()})},t.prototype.handleOnChange=function(e){this.question.value=e.target.value,this.setState({value:this.getStateValue()})},t.prototype.render=function(){if(!this.question)return null;var e=this.question.cssClasses,t=this.question.value===this.question.otherItem.value?this.renderOther(e):null,r=this.renderSelect(e);return i.createElement("div",{className:e.root},r,t)},t.prototype.renderSelect=function(e){if(this.isDisplayMode)return i.createElement("div",{id:this.question.inputId,className:e.control},this.question.displayValue);for(var t=[],n=0;n0?100/this.question.colCount+"%":"",o={display:"inline-block"};i&&(o.width=i);var a=this.question.value==t.value,s=a&&t.value===this.question.otherItem.value?this.renderOther(n):null;return this.renderRadio(e,t,a,o,s,r,n)},t.prototype.renderRadio=function(e,t,r,n,o,a,s){var u=a?this.question.inputId:null,l=this.renderLocString(t.locText,this.textStyle),c=s.item+(0===this.question.colCount?" sv_q_radiogroup_inline":"");return r&&(c+=" checked"),i.createElement("div",{key:e,className:c,style:n},i.createElement("label",{className:s.label},i.createElement("input",{className:s.itemControl,id:u,type:"radio",name:this.question.name+"_"+this.questionBase.id,checked:r,value:t.value,disabled:this.isDisplayMode,onChange:this.handleOnChange,"aria-label":this.question.locTitle.renderedHtml}),i.createElement("span",{className:"circle"}),i.createElement("span",{className:"check"}),i.createElement("span",{className:s.controlLabel},l)),o)},t.prototype.renderOther=function(e){return i.createElement("div",{className:e.other},i.createElement(a.a,{question:this.question,otherCss:e.other,cssClasses:e,isDisplayMode:this.isDisplayMode}))},t}(o.b);s.a.Instance.registerQuestion("radiogroup",function(e){return i.createElement(u,e)})},function(e,t,r){"use strict";var n=r(0),i=r(2),o=(r.n(i),r(4)),a=r(14),s=r(6);r.d(t,"a",function(){return u});var u=function(e){function t(t){var r=e.call(this,t)||this;return r.handleOnChange=r.handleOnChange.bind(r),r}return n.b(t,e),Object.defineProperty(t.prototype,"question",{get:function(){return this.questionBase},enumerable:!0,configurable:!0}),t.prototype.handleOnChange=function(e){this.question.value=e.target.value,this.setState({value:this.question.value})},t.prototype.render=function(){if(!this.question)return null;for(var e=this.question.cssClasses,t=[],r=this.question.minRateDescription?this.renderLocString(this.question.locMinRateDescription):null,n=this.question.maxRateDescription?this.renderLocString(this.question.locMaxRateDescription):null,o=0;o-1},notcontains:function(e,t){return!e||!e.indexOf||-1==e.indexOf(t)},greater:function(e,t){return e>t},less:function(e,t){return e=t},lessorequal:function(e,t){return e<=t}},t.operatorsValue)},enumerable:!0,configurable:!0}),t.prototype.getType=function(){return"triggerbase"},Object.defineProperty(t.prototype,"operator",{get:function(){return this.opValue},set:function(e){e&&(e=e.toLowerCase(),t.operators[e]&&(this.opValue=e))},enumerable:!0,configurable:!0}),t.prototype.check=function(e){t.operators[this.operator](e,this.value)?this.onSuccess():this.onFailure()},t.prototype.onSuccess=function(){},t.prototype.onFailure=function(){},t.operatorsValue=null,t}(i.c),s=function(e){function t(){var t=e.call(this)||this;return t.owner=null,t}return n.b(t,e),t.prototype.setOwner=function(e){this.owner=e},Object.defineProperty(t.prototype,"isOnNextPage",{get:function(){return!1},enumerable:!0,configurable:!0}),t}(a),u=function(e){function t(){var t=e.call(this)||this;return t.pages=[],t.questions=[],t}return n.b(t,e),t.prototype.getType=function(){return"visibletrigger"},t.prototype.onSuccess=function(){this.onTrigger(this.onItemSuccess)},t.prototype.onFailure=function(){this.onTrigger(this.onItemFailure)},t.prototype.onTrigger=function(e){if(this.owner)for(var t=this.owner.getObjects(this.pages,this.questions),r=0;r { + }, (error) => { + /* eslint-disable-next-line no-console */ + console.log(error.response) + }); +} + +function cssUpdate(survey, options){ + var classes = options.cssClasses + classes.root = 'sq-root' + classes.title = 'sq-title' + classes.item = 'sq-item' + classes.label = 'sq-label' + + if (options.question.isRequired) { + classes.title = 'sq-title sq-title-required' + classes.root = 'sq-root sq-root-required' + } +} + +$(document).ready(function () { + var formJSON = $('#surveyContainer').attr('form') + var questionJSON = $('#surveyContainer').attr('questions') + + form = JSON.parse(formJSON) + questions = JSON.parse(questionJSON) + + var surveyJSON = { + title: form.title + ': ' + form.description, + questions: [] + }; + + questions.forEach(q => { + var ans = [] + q.answers.forEach(a => { + ans.push(a.text); + }); + surveyJSON.questions.push({type: q.type, name: q.text, choices: ans, isRequired: 'true'}); + }); + + $('#surveyContainer').Survey({ + model: new Survey.Model(surveyJSON), + onUpdateQuestionCssClasses: cssUpdate, + onComplete: sendDataToServer, + }); +}); \ No newline at end of file diff --git a/l10n/.gitkeep b/l10n/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/l10n/ca.js b/l10n/ca.js new file mode 100644 index 0000000..71be2c3 --- /dev/null +++ b/l10n/ca.js @@ -0,0 +1,61 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Copiat!", + "Copy" : "Copia", + "Not supported!" : "No suportat!", + "Press ⌘-C to copy." : "Prem ⌘-C per copiar.", + "Press Ctrl-C to copy." : "Prem Ctrl-C per copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estàs registrat.\nSi us plau, introdueix el teu nom per votar\n(com a mínim 3 caràcters).", + "Please add some text to your comment before submitting it." : "Si us plau, introdueix text al comentari abans d'enviar-lo.", + "An error occurred, your comment was not posted." : "S'ha produït un error, el seu comentari no es va publicar.", + "Forms" : "Enquestes", + "Forms App - New Activity" : "Enquestes App - Nova Activitat", + "just now" : "ara mateix", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Una app d’enquestes, similar al doodle/dudle amb la possibilitat de restringir l'accés.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Una app d’enquestes, similar al doodle/dudle amb la possibilitat de restringir l'accés (membres, certs grups/usuaris, ocults i públics).", + "Expired" : "Expirat", + "Expires never" : "Mai no expira", + "Usernames hidden to Owner" : "Noms d'usuari ocults pel Propietari", + "Usernames visible to Owner" : "Noms d'usuari visibles pel Propietari", + "Group" : "Grup", + "Title" : "Títol", + "Access" : "Accés", + "Owner" : "Propietari", + "Created" : "Creada", + "Expires" : "Caduca", + "never" : "mai", + "Copy Link" : "Copia l'enllaç", + "Edit form" : "Edita l'enquesta", + "Delete form" : "Esborrar enquesta", + "_There is %n comment_::_There are %n comments_" : ["Hi ha %n comentari","Hi ha %n comentaris"], + "Description" : "Descripció", + "Add option" : "Afegeix una opció", + "Form type" : "Tipus d'enquesta", + "Create new form" : "Crea una enquesta", + "Update form" : "Actualitza l'enquesta", + "Cancel" : "Cancel·la", + "Apply" : "Aplica", + "Access denied" : "Accés denegat", + "You are not allowed to view this form or the form does not exist." : "No podeu veure aquesta enquesta o l'enquesta no existeix.", + "You are not allowed to edit this form or the form does not exist." : "No podeu editar aquesta enquesta o l'enquesta no existeix.", + "No description provided." : "No s'ha proporcionat descripció.", + "The form expired on %s. Voting is disabled, but you can still comment." : "L'enquesta va caducar el %s. La votació està desactivada, però encara es pot comentar.", + "Switch all options at once" : "Canviar totes les opcions a la vegada", + "Your name here" : "Aquí el teu nom", + "Vote!" : "Vota!", + "Receive notification email on activity" : "Rebre email de notificació sobre activitat", + "Close details" : "Tanca detalls", + "Close" : "Tanca", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Accés d'invitació", + "Anononymous form" : "Enquesta anònima", + "Click to get link" : "Prem per obtenir l'enllaç", + "Edit Form" : "Edita l'enquesta", + "Form expired" : "Enquesta caducada", + "Comments" : "Comentaris", + "Login or ..." : "Entrar o …", + "New comment …" : "Comentari nou...", + "No comments yet. Be the first." : "Cap comentari encara. Ets el primer." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/ca.json b/l10n/ca.json new file mode 100644 index 0000000..0061465 --- /dev/null +++ b/l10n/ca.json @@ -0,0 +1,59 @@ +{ "translations": { + "Copied!" : "Copiat!", + "Copy" : "Copia", + "Not supported!" : "No suportat!", + "Press ⌘-C to copy." : "Prem ⌘-C per copiar.", + "Press Ctrl-C to copy." : "Prem Ctrl-C per copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estàs registrat.\nSi us plau, introdueix el teu nom per votar\n(com a mínim 3 caràcters).", + "Please add some text to your comment before submitting it." : "Si us plau, introdueix text al comentari abans d'enviar-lo.", + "An error occurred, your comment was not posted." : "S'ha produït un error, el seu comentari no es va publicar.", + "Forms" : "Enquestes", + "Forms App - New Activity" : "Enquestes App - Nova Activitat", + "just now" : "ara mateix", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Una app d’enquestes, similar al doodle/dudle amb la possibilitat de restringir l'accés.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Una app d’enquestes, similar al doodle/dudle amb la possibilitat de restringir l'accés (membres, certs grups/usuaris, ocults i públics).", + "Expired" : "Expirat", + "Expires never" : "Mai no expira", + "Usernames hidden to Owner" : "Noms d'usuari ocults pel Propietari", + "Usernames visible to Owner" : "Noms d'usuari visibles pel Propietari", + "Group" : "Grup", + "Title" : "Títol", + "Access" : "Accés", + "Owner" : "Propietari", + "Created" : "Creada", + "Expires" : "Caduca", + "never" : "mai", + "Copy Link" : "Copia l'enllaç", + "Edit form" : "Edita l'enquesta", + "Delete form" : "Esborrar enquesta", + "_There is %n comment_::_There are %n comments_" : ["Hi ha %n comentari","Hi ha %n comentaris"], + "Description" : "Descripció", + "Add option" : "Afegeix una opció", + "Form type" : "Tipus d'enquesta", + "Create new form" : "Crea una enquesta", + "Update form" : "Actualitza l'enquesta", + "Cancel" : "Cancel·la", + "Apply" : "Aplica", + "Access denied" : "Accés denegat", + "You are not allowed to view this form or the form does not exist." : "No podeu veure aquesta enquesta o l'enquesta no existeix.", + "You are not allowed to edit this form or the form does not exist." : "No podeu editar aquesta enquesta o l'enquesta no existeix.", + "No description provided." : "No s'ha proporcionat descripció.", + "The form expired on %s. Voting is disabled, but you can still comment." : "L'enquesta va caducar el %s. La votació està desactivada, però encara es pot comentar.", + "Switch all options at once" : "Canviar totes les opcions a la vegada", + "Your name here" : "Aquí el teu nom", + "Vote!" : "Vota!", + "Receive notification email on activity" : "Rebre email de notificació sobre activitat", + "Close details" : "Tanca detalls", + "Close" : "Tanca", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Accés d'invitació", + "Anononymous form" : "Enquesta anònima", + "Click to get link" : "Prem per obtenir l'enllaç", + "Edit Form" : "Edita l'enquesta", + "Form expired" : "Enquesta caducada", + "Comments" : "Comentaris", + "Login or ..." : "Entrar o …", + "New comment …" : "Comentari nou...", + "No comments yet. Be the first." : "Cap comentari encara. Ets el primer." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/cs.js b/l10n/cs.js new file mode 100644 index 0000000..354324a --- /dev/null +++ b/l10n/cs.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Opravdu chcete tuto novou anketu smazat?", + "Copied!" : "Zkopírováno!", + "Copy" : "Zkopírovat", + "Not supported!" : "Nepodporováno!", + "Press ⌘-C to copy." : "Zkopírujete stisknutím ⌘-C.", + "Press Ctrl-C to copy." : "Zkopírujte stiskem Ctrl-C.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nejste registrováni.\nPro hlasování, zadejte své jméno\n(alespoň 3 znaky).", + "Please add some text to your comment before submitting it." : "Před odesláním ke svému komentáři přidejte nějaký text.", + "An error occurred, your comment was not posted." : "Došlo k chybě, váš komentář nebyl odeslán.", + "Forms" : "Ankety", + "Forms App - New Activity" : "Aplikace ankety - Nová akce", + "{user} participated in the form \"{title}\"" : "{user} se zúčastnil ankety „{title}“", + "Go to form" : "Přejít na anketu", + "just now" : "právě teď", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Aplikace pro ankety podobná doodle/dudle s možností omezit přístup.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Aplikace pro ankety podobná doodle/dudle s možností omezit přístup (členům, určitým skupinám/uživatelům, skryté i veřejné).", + "Expired" : "Platnost skončila", + "Expires %n" : "Platnost skončí %n", + "Expires never" : "Platí napořád", + "Anonymous form" : "Anonymní anketa", + "Usernames hidden to Owner" : "Uživatelská jména skrytá vlastníkovi", + "Usernames visible to Owner" : "Uživatelská jména viditelná vlastníkovi", + "Group" : "Skupina", + "Title" : "Název", + "Access" : "Přístup", + "Owner" : "Vlastník", + "Created" : "Vytvořeno", + "Expires" : "Platnost vyprší", + "Public access" : "Veřejný přístup", + "Only shared" : "Pouze sdílené", + "Registered users only" : "Pouze registrovaní uživatelé", + "Hidden form" : "Skrytá anketa", + "Text form" : "Textová anketa", + "Date form" : "Datumová anketa", + "never" : "nikdy", + "Copy Link" : "Zkopírovat odkaz", + "Clone form" : "Klonovat anketu", + "Edit form" : "Upravit anketu", + "Delete form" : "Smazat fond", + "Edit form as admin" : "Upravit anketu jako správce", + "Delete form as admin" : "Smazat anketu jako správce", + "Link copied to clipboard" : "Odkaz zkopírován do schánky", + "Error, while copying link to clipboard" : "Chyba při kopírování odkazu do schránky", + "_There is %n comment_::_There are %n comments_" : ["Je zde %n komentář","Jsou zde %n komentáře","Je zde %n komentářů","Jsou zde %n komentáře"], + "Share with" : "Sdílet s", + "Form description" : "Popis ankety", + "Description" : "Popis", + "Vote options" : "Možnosti voleb", + "Event schedule" : "Plán události", + "Text based" : "Textové", + "Shift dates" : "Posunout datumy", + "Shift all dates for " : "Posunout všechny datumy o", + "Add option" : "Přidat volbu", + "You are editing in admin mode" : "Upravujete v režimu správy", + "Configuration" : "Nastavení", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Nastavení je uzamčeno. Změna voleb může vést k nechtěnému chování, ale i tak je možné je odemknout.", + "Unlock configuration " : "Odemknout nastavení", + "Form type" : "Typ ankety", + "Form configurations" : "Nastavení ankety", + "Allow \"maybe\" vote" : "Umožnit hlasovat „možná“", + "Hide user names for admin" : "Skrýt správcům uživatelská jména", + "hidden" : "skryté", + "Name of user or group" : "Jméno uživatele nebo název skupiny", + "Create new form" : "Vytvořit novou anketu", + "Writing form" : "Anketa se zapisuje", + "Update form" : "Aktualizovat anketu", + "Expiration date" : "Datum skončení platnosti", + "Click to add a date" : "Datum přidáte kliknutím", + "Shift all date options" : "Volby posunutí všech datumů", + "Cancel" : "Storno", + "Apply" : "Použít", + "Title must not be empty!" : "Název je třeba vyplnit!", + "%n successfully saved" : "%n úspěšně uloženo", + "Error on saving form, see console" : "Chyba ukládání ankety, podrobnosti viz konzole", + "Clone of %n" : "Klon %n", + "New" : "Nová", + "Click here to add a form" : "Anketu přidáte kliknutím sem", + "Do you want to delete \"%n\"?" : "Opravdu chcete smazat „%n“?", + "No, keep form." : "Ne, anketu ponechat.", + "Yes, delete form." : "Ano, anketu smazat.", + "Form \"%n\" deleted" : "Anketa „%n“ smazána", + "Error while deleting Form \"%n\"" : "Chyba při mazání ankety „%n“", + "Access denied" : "Přístup zamítnut", + "You are not allowed to view this form or the form does not exist." : "Nemáte oprávnění k zobrazení této ankety nebo anketa neexistuje.", + "You are not allowed to edit this form or the form does not exist." : "Nemáte oprávnění k úpravě této ankety nebo anketa neexistuje.", + "You are either not allowed to delete this form or it doesn't exist." : "Buď nemáte oprávnění ke smazání této ankety nebo anketa neexistuje.", + "No description provided." : "Nebyl poskytnut žádný popis.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Anketa byla uzavřena %s . Hlasovat už nelze, můžete však ještě komentovat.", + "Switch all options at once" : "Přepnout všechny volby naráz", + "Your name here" : "Vaše jméno sem", + "Say yes to all" : "Odpovědět na všechno ano", + "Reset all (say no)" : "Resetovat vše (říci ne)", + "Say maybe to all" : "Odpovědět na všechno možná", + "This form was updated since your last visit. Please check your votes." : "Tato anketa byla od minulé návštěvy změněna. Zkontrolujte své hlasy.", + "Vote!" : "Hlasovat!", + "Receive notification email on activity" : "Dostávat emailem oznámení o aktivitě", + "Close details" : "Zavřít podrobnosti", + "Close" : "Zavřít", + "Expires on %s" : "Platnost skončí %s", + "Invitation access" : "Přístup k pozvánce", + "Anononymous form" : "Anonymní anketa", + "Click to get link" : "Klikněte pro získání odkazu", + "Edit Form" : "Upravit fond", + "Form expired" : "Anketa je už uzavřena", + "Comments" : "Komentáře", + "Login or ..." : "Přihlásit nebo…", + "New comment …" : "Nový komentář…", + "No comments yet. Be the first." : "Zatím bez komentářů. Buďte první." +}, +"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); diff --git a/l10n/cs.json b/l10n/cs.json new file mode 100644 index 0000000..9a0f8e2 --- /dev/null +++ b/l10n/cs.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Opravdu chcete tuto novou anketu smazat?", + "Copied!" : "Zkopírováno!", + "Copy" : "Zkopírovat", + "Not supported!" : "Nepodporováno!", + "Press ⌘-C to copy." : "Zkopírujete stisknutím ⌘-C.", + "Press Ctrl-C to copy." : "Zkopírujte stiskem Ctrl-C.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nejste registrováni.\nPro hlasování, zadejte své jméno\n(alespoň 3 znaky).", + "Please add some text to your comment before submitting it." : "Před odesláním ke svému komentáři přidejte nějaký text.", + "An error occurred, your comment was not posted." : "Došlo k chybě, váš komentář nebyl odeslán.", + "Forms" : "Ankety", + "Forms App - New Activity" : "Aplikace ankety - Nová akce", + "{user} participated in the form \"{title}\"" : "{user} se zúčastnil ankety „{title}“", + "Go to form" : "Přejít na anketu", + "just now" : "právě teď", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Aplikace pro ankety podobná doodle/dudle s možností omezit přístup.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Aplikace pro ankety podobná doodle/dudle s možností omezit přístup (členům, určitým skupinám/uživatelům, skryté i veřejné).", + "Expired" : "Platnost skončila", + "Expires %n" : "Platnost skončí %n", + "Expires never" : "Platí napořád", + "Anonymous form" : "Anonymní anketa", + "Usernames hidden to Owner" : "Uživatelská jména skrytá vlastníkovi", + "Usernames visible to Owner" : "Uživatelská jména viditelná vlastníkovi", + "Group" : "Skupina", + "Title" : "Název", + "Access" : "Přístup", + "Owner" : "Vlastník", + "Created" : "Vytvořeno", + "Expires" : "Platnost vyprší", + "Public access" : "Veřejný přístup", + "Only shared" : "Pouze sdílené", + "Registered users only" : "Pouze registrovaní uživatelé", + "Hidden form" : "Skrytá anketa", + "Text form" : "Textová anketa", + "Date form" : "Datumová anketa", + "never" : "nikdy", + "Copy Link" : "Zkopírovat odkaz", + "Clone form" : "Klonovat anketu", + "Edit form" : "Upravit anketu", + "Delete form" : "Smazat fond", + "Edit form as admin" : "Upravit anketu jako správce", + "Delete form as admin" : "Smazat anketu jako správce", + "Link copied to clipboard" : "Odkaz zkopírován do schánky", + "Error, while copying link to clipboard" : "Chyba při kopírování odkazu do schránky", + "_There is %n comment_::_There are %n comments_" : ["Je zde %n komentář","Jsou zde %n komentáře","Je zde %n komentářů","Jsou zde %n komentáře"], + "Share with" : "Sdílet s", + "Form description" : "Popis ankety", + "Description" : "Popis", + "Vote options" : "Možnosti voleb", + "Event schedule" : "Plán události", + "Text based" : "Textové", + "Shift dates" : "Posunout datumy", + "Shift all dates for " : "Posunout všechny datumy o", + "Add option" : "Přidat volbu", + "You are editing in admin mode" : "Upravujete v režimu správy", + "Configuration" : "Nastavení", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Nastavení je uzamčeno. Změna voleb může vést k nechtěnému chování, ale i tak je možné je odemknout.", + "Unlock configuration " : "Odemknout nastavení", + "Form type" : "Typ ankety", + "Form configurations" : "Nastavení ankety", + "Allow \"maybe\" vote" : "Umožnit hlasovat „možná“", + "Hide user names for admin" : "Skrýt správcům uživatelská jména", + "hidden" : "skryté", + "Name of user or group" : "Jméno uživatele nebo název skupiny", + "Create new form" : "Vytvořit novou anketu", + "Writing form" : "Anketa se zapisuje", + "Update form" : "Aktualizovat anketu", + "Expiration date" : "Datum skončení platnosti", + "Click to add a date" : "Datum přidáte kliknutím", + "Shift all date options" : "Volby posunutí všech datumů", + "Cancel" : "Storno", + "Apply" : "Použít", + "Title must not be empty!" : "Název je třeba vyplnit!", + "%n successfully saved" : "%n úspěšně uloženo", + "Error on saving form, see console" : "Chyba ukládání ankety, podrobnosti viz konzole", + "Clone of %n" : "Klon %n", + "New" : "Nová", + "Click here to add a form" : "Anketu přidáte kliknutím sem", + "Do you want to delete \"%n\"?" : "Opravdu chcete smazat „%n“?", + "No, keep form." : "Ne, anketu ponechat.", + "Yes, delete form." : "Ano, anketu smazat.", + "Form \"%n\" deleted" : "Anketa „%n“ smazána", + "Error while deleting Form \"%n\"" : "Chyba při mazání ankety „%n“", + "Access denied" : "Přístup zamítnut", + "You are not allowed to view this form or the form does not exist." : "Nemáte oprávnění k zobrazení této ankety nebo anketa neexistuje.", + "You are not allowed to edit this form or the form does not exist." : "Nemáte oprávnění k úpravě této ankety nebo anketa neexistuje.", + "You are either not allowed to delete this form or it doesn't exist." : "Buď nemáte oprávnění ke smazání této ankety nebo anketa neexistuje.", + "No description provided." : "Nebyl poskytnut žádný popis.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Anketa byla uzavřena %s . Hlasovat už nelze, můžete však ještě komentovat.", + "Switch all options at once" : "Přepnout všechny volby naráz", + "Your name here" : "Vaše jméno sem", + "Say yes to all" : "Odpovědět na všechno ano", + "Reset all (say no)" : "Resetovat vše (říci ne)", + "Say maybe to all" : "Odpovědět na všechno možná", + "This form was updated since your last visit. Please check your votes." : "Tato anketa byla od minulé návštěvy změněna. Zkontrolujte své hlasy.", + "Vote!" : "Hlasovat!", + "Receive notification email on activity" : "Dostávat emailem oznámení o aktivitě", + "Close details" : "Zavřít podrobnosti", + "Close" : "Zavřít", + "Expires on %s" : "Platnost skončí %s", + "Invitation access" : "Přístup k pozvánce", + "Anononymous form" : "Anonymní anketa", + "Click to get link" : "Klikněte pro získání odkazu", + "Edit Form" : "Upravit fond", + "Form expired" : "Anketa je už uzavřena", + "Comments" : "Komentáře", + "Login or ..." : "Přihlásit nebo…", + "New comment …" : "Nový komentář…", + "No comments yet. Be the first." : "Zatím bez komentářů. Buďte první." +},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" +} \ No newline at end of file diff --git a/l10n/da.js b/l10n/da.js new file mode 100644 index 0000000..17b2d84 --- /dev/null +++ b/l10n/da.js @@ -0,0 +1,78 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Kopieret!", + "Copy" : "Kopier", + "Not supported!" : "Ikke understøttet!", + "Press ⌘-C to copy." : "Tryk ⌘-C for at kopiere.", + "Press Ctrl-C to copy." : "Tryk Ctrl-C for at kopiere.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Du er ikke registreret.\nIndtast dit navn og stem\n(mindst 3 karakterer).", + "Please add some text to your comment before submitting it." : "Tilføj noget tekst til din kommentar for du sender den.", + "Forms" : "Afstemning", + "Go to form" : "Gå til afstemninger", + "just now" : "nu", + "Expired" : "Udløbet", + "Expires %n" : "Udløber %n", + "Expires never" : "Udløber aldrig", + "Anonymous form" : "Anonym afstemning", + "Group" : "Gruppe", + "Title" : "Titel", + "Access" : "Adgang", + "Owner" : "Ejer", + "Created" : "Oprettet", + "Expires" : "Udløber", + "Public access" : "Offentligt tilgængelig", + "Only shared" : "Kun delt", + "Registered users only" : "Kun registrerede brugere", + "Hidden form" : "Skjult afstemning", + "never" : "aldrig", + "Copy Link" : "Kopier link", + "Clone form" : "Klon afstemning", + "Edit form" : "Rediger afstemning", + "Delete form" : "Slet afstemning", + "Edit form as admin" : "Rediger afstemning som administrator", + "Delete form as admin" : "Slet afstemning som administrator", + "Link copied to clipboard" : "Link kopieret til udklipsholder", + "Share with" : "Del med", + "Form description" : "Afstemningsbeskrivelse", + "Description" : "Beskrivelse", + "Vote options" : "Afstemningsvalg", + "Add option" : "Tilføj valg", + "Configuration" : "sætning", + "Form type" : "Afstemningstype", + "Allow \"maybe\" vote" : "Tillad \"måske\" stemmer", + "Hide user names for admin" : "Skjul brugernavne for administrator", + "hidden" : "skjult", + "Create new form" : "Opret ny afstemning", + "Update form" : "Opdatér afstemning", + "Expiration date" : "Udløbsdato", + "Click to add a date" : "Klik for at tilføje en dato", + "Title must not be empty!" : "Overskriften må ikke være tom!", + "%n successfully saved" : "%n blev gemt", + "Clone of %n" : "Klon af %n", + "New" : "Ny", + "No, keep form." : "Nej, behold afstemning.", + "Yes, delete form." : "Ja, slet afstemning.", + "Form \"%n\" deleted" : "Afstemningen \"%n\" blev slettet", + "Access denied" : "Adgang nægtet", + "You are not allowed to view this form or the form does not exist." : "Du har ikke tilladelse til at se denne afstemning eller afstemningen eksisterer ikke. ", + "No description provided." : "Ingen beskrivelse fundet.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Afstemningen udløb d. %s. Afstemning er deaktiveret, men du kan stadig kommentere.", + "Your name here" : "Dit navn her", + "Say yes to all" : "Sig ja til alle", + "Say maybe to all" : "Sig måske til alle", + "Vote!" : "Stem!", + "Receive notification email on activity" : "Modtag notifikationsemail om aktivitet", + "Close details" : "Luk detaljer", + "Close" : "Luk", + "Expires on %s" : "Udløber den %s", + "Anononymous form" : "Anonym afstemning", + "Click to get link" : "Klik for at få link", + "Edit Form" : "Rediger afstemning", + "Form expired" : "Afstemning udløbet", + "Comments" : "Kommentarer", + "Login or ..." : "Login eller …", + "New comment …" : "Ny kommentar…", + "No comments yet. Be the first." : "Ingen kommentarer endnu. Vær den første." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/da.json b/l10n/da.json new file mode 100644 index 0000000..8632754 --- /dev/null +++ b/l10n/da.json @@ -0,0 +1,76 @@ +{ "translations": { + "Copied!" : "Kopieret!", + "Copy" : "Kopier", + "Not supported!" : "Ikke understøttet!", + "Press ⌘-C to copy." : "Tryk ⌘-C for at kopiere.", + "Press Ctrl-C to copy." : "Tryk Ctrl-C for at kopiere.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Du er ikke registreret.\nIndtast dit navn og stem\n(mindst 3 karakterer).", + "Please add some text to your comment before submitting it." : "Tilføj noget tekst til din kommentar for du sender den.", + "Forms" : "Afstemning", + "Go to form" : "Gå til afstemninger", + "just now" : "nu", + "Expired" : "Udløbet", + "Expires %n" : "Udløber %n", + "Expires never" : "Udløber aldrig", + "Anonymous form" : "Anonym afstemning", + "Group" : "Gruppe", + "Title" : "Titel", + "Access" : "Adgang", + "Owner" : "Ejer", + "Created" : "Oprettet", + "Expires" : "Udløber", + "Public access" : "Offentligt tilgængelig", + "Only shared" : "Kun delt", + "Registered users only" : "Kun registrerede brugere", + "Hidden form" : "Skjult afstemning", + "never" : "aldrig", + "Copy Link" : "Kopier link", + "Clone form" : "Klon afstemning", + "Edit form" : "Rediger afstemning", + "Delete form" : "Slet afstemning", + "Edit form as admin" : "Rediger afstemning som administrator", + "Delete form as admin" : "Slet afstemning som administrator", + "Link copied to clipboard" : "Link kopieret til udklipsholder", + "Share with" : "Del med", + "Form description" : "Afstemningsbeskrivelse", + "Description" : "Beskrivelse", + "Vote options" : "Afstemningsvalg", + "Add option" : "Tilføj valg", + "Configuration" : "sætning", + "Form type" : "Afstemningstype", + "Allow \"maybe\" vote" : "Tillad \"måske\" stemmer", + "Hide user names for admin" : "Skjul brugernavne for administrator", + "hidden" : "skjult", + "Create new form" : "Opret ny afstemning", + "Update form" : "Opdatér afstemning", + "Expiration date" : "Udløbsdato", + "Click to add a date" : "Klik for at tilføje en dato", + "Title must not be empty!" : "Overskriften må ikke være tom!", + "%n successfully saved" : "%n blev gemt", + "Clone of %n" : "Klon af %n", + "New" : "Ny", + "No, keep form." : "Nej, behold afstemning.", + "Yes, delete form." : "Ja, slet afstemning.", + "Form \"%n\" deleted" : "Afstemningen \"%n\" blev slettet", + "Access denied" : "Adgang nægtet", + "You are not allowed to view this form or the form does not exist." : "Du har ikke tilladelse til at se denne afstemning eller afstemningen eksisterer ikke. ", + "No description provided." : "Ingen beskrivelse fundet.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Afstemningen udløb d. %s. Afstemning er deaktiveret, men du kan stadig kommentere.", + "Your name here" : "Dit navn her", + "Say yes to all" : "Sig ja til alle", + "Say maybe to all" : "Sig måske til alle", + "Vote!" : "Stem!", + "Receive notification email on activity" : "Modtag notifikationsemail om aktivitet", + "Close details" : "Luk detaljer", + "Close" : "Luk", + "Expires on %s" : "Udløber den %s", + "Anononymous form" : "Anonym afstemning", + "Click to get link" : "Klik for at få link", + "Edit Form" : "Rediger afstemning", + "Form expired" : "Afstemning udløbet", + "Comments" : "Kommentarer", + "Login or ..." : "Login eller …", + "New comment …" : "Ny kommentar…", + "No comments yet. Be the first." : "Ingen kommentarer endnu. Vær den første." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/de.js b/l10n/de.js new file mode 100644 index 0000000..bb20144 --- /dev/null +++ b/l10n/de.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Möchtest Du diese neue Umfrage wirklich löschen?", + "Copied!" : "Kopiert!", + "Copy" : "Kopieren", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "Drücke ⌘-C zum Kopieren.", + "Press Ctrl-C to copy." : "Drücke Strg-C zum Kopieren.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Du bist nicht registriert.\nGebe bitte Deinen Namen an, um abzustimmen.\n(mindestens 3 Buchstaben).", + "Please add some text to your comment before submitting it." : "Füge bitte deinem Kommentar Text hinzu, bevor du absendest.", + "An error occurred, your comment was not posted." : "Ein Fehler ist aufgetreten, Dein Kommentar wurde nicht veröffentlicht.", + "Forms" : "Umfragen", + "Forms App - New Activity" : "Umfragen App - Neue Aktivität", + "{user} participated in the form \"{title}\"" : "{user} hat an der Umfrage \"{title}\" teilgenommen", + "Go to form" : "Zur Umfrage gehen", + "just now" : "gerade jetzt", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Eine Umfrage-App, ähnlich wie Doodle/Dudle, mit der Möglichkeit Zugriffe zu beschränken.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Eine Umfrage-App, ähnlich wie Doodle/Dudle, mit der Möglichkeit Zugriffe zu beschränken (Versteckt/öffentlich oder bestimmte Gruppen/Benutzer/Mitglieder).", + "Expired" : "Abgelaufen", + "Expires %n" : "Läuft ab am %n", + "Expires never" : "Läuft nie ab", + "Anonymous form" : "Anonyme Umfrage", + "Usernames hidden to Owner" : "Nutzernamen vor Inhaber verborgen", + "Usernames visible to Owner" : "Nutzernamen für Inhaber sichtbar", + "Group" : "Gruppe", + "Title" : "Titel", + "Access" : "Zugriff", + "Owner" : "Inhaber", + "Created" : "Erstellt", + "Expires" : "Ablaufdatum", + "Public access" : "Öffentlicher Zugriff", + "Only shared" : "Nur geteilt", + "Registered users only" : "Nur für registrierte Nutzer", + "Hidden form" : "Versteckte Umfrage", + "Text form" : "Zustimmungsumfrage", + "Date form" : "Datumsumfrage", + "never" : "nie", + "Copy Link" : "Link kopieren", + "Clone form" : "Umfrage duplizieren", + "Edit form" : "Umfrage bearbeiten", + "Delete form" : "Umfrage löschen", + "Edit form as admin" : "Umfrage als Administrator bearbeiten", + "Delete form as admin" : "Umfrage als Administrator löschen", + "Link copied to clipboard" : "Link in die Zwischenablage kopiert", + "Error, while copying link to clipboard" : "Fehler beim Kopieren des Links in die Zwischenablage", + "_There is %n comment_::_There are %n comments_" : ["Es gibt %n Kommentar","Es gibt %n Kommentare"], + "Share with" : "Teilen mit…", + "Form description" : "Umfragebeschreibung", + "Description" : "Beschreibung", + "Vote options" : "Abstimmungsoptionen", + "Event schedule" : "Datumsangabe", + "Text based" : "Textbasiert", + "Shift dates" : "Datumsangaben verschieben", + "Shift all dates for " : "Alle Datumsangaben verschieben für", + "Add option" : "Option hinzufügen", + "You are editing in admin mode" : "Du bearbeitest im Administratorenmodus", + "Configuration" : "Einstellung", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Die Konfiguration ist gesperrt. Das Ändern von Optionen kann zu unerwünschtem Verhalten führen, Du kannst sie jedoch dennoch entsperren.", + "Unlock configuration " : "Konfiguration freischalten", + "Form type" : "Umfragetyp", + "Form configurations" : "Umfrage Einstellungen", + "Allow \"maybe\" vote" : "\"Vielleicht\" erlauben", + "Hide user names for admin" : "Namen der Teilnehmer vor Administrator verbergen", + "hidden" : "Versteckt", + "Name of user or group" : "Name des Nutzers oder der Gruppe", + "Create new form" : "Neue Umfrage erstellen", + "Writing form" : "Schreibe Umfrage", + "Update form" : "Umfrage aktualisieren", + "Expiration date" : "Ablaufdatum", + "Click to add a date" : "Klicken um Datum hinzuzufügen", + "Shift all date options" : "Datumsoptionen verschieben", + "Cancel" : "Abbrechen", + "Apply" : "Übernehmen", + "Title must not be empty!" : "Der Titel darf nicht leer sein!", + "%n successfully saved" : "%n gespeichert", + "Error on saving form, see console" : "Fehler beim Speichern der Umfrage. Siehe Konsole.", + "Clone of %n" : "Duplikat von %n", + "New" : "Neu", + "Click here to add a form" : "Hier Klicken um eine Umfrage hinzuzufügen", + "Do you want to delete \"%n\"?" : "Möchtest Du \"%n\" löschen?", + "No, keep form." : "Nein, Umfrage behalten.", + "Yes, delete form." : "Ja, Umfrage löschen.", + "Form \"%n\" deleted" : "Umfrage \"%n\" gelöscht", + "Error while deleting Form \"%n\"" : "Fehler beim Löschen der Umfrage \"%n\"", + "Access denied" : "Zugriff verboten", + "You are not allowed to view this form or the form does not exist." : "Du bist nicht berechtigt, diese Umfrage zu sehen, oder diese Umfrage existiert nicht.", + "You are not allowed to edit this form or the form does not exist." : "Du bist nicht berechtigt, diese Umfrage zu bearbeiten, oder diese Umfrage existiert nicht.", + "You are either not allowed to delete this form or it doesn't exist." : "Du bist nicht berechtigt, diese Umfrage zu löschen, oder diese Umfrage existiert nicht.", + "No description provided." : "Keine Beschreibung vorhanden.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Die Umfrage ist am %s abgelaufen. Abstimmen ist nicht mehr möglich, aber Du kannst weiterhin kommentieren.", + "Switch all options at once" : "Ändere alle Optionen gleichzeitig", + "Your name here" : "Dein Name hier", + "Say yes to all" : "Sage JA zu allen", + "Reset all (say no)" : "Alle zurücksetzen (Sage NEIN)", + "Say maybe to all" : "Sage VIELLEICHT zu allen", + "This form was updated since your last visit. Please check your votes." : "Die Umfrage wurde seit Deinem letzten Besuch aktualisiert. Bitte prüfe Deine Stimmabgabe.", + "Vote!" : "Abstimmen!", + "Receive notification email on activity" : "Erhalte E-Mail Benachrichtigungen bei Aktivitäten", + "Close details" : "Details schließen", + "Close" : "Schließen", + "Expires on %s" : "Läuft ab am %s", + "Invitation access" : "Einladungszugriff", + "Anononymous form" : "Anonyme Umfrage", + "Click to get link" : "Klicken, um den Link zu sehen", + "Edit Form" : "Umfrage bearbeiten", + "Form expired" : "Umfrage abgelaufen", + "Comments" : "Kommentare", + "Login or ..." : "Einloggen oder ...", + "New comment …" : "Neuer Kommentar ...", + "No comments yet. Be the first." : "Bisher keine Kommentare. Sei die/der Erste." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/de.json b/l10n/de.json new file mode 100644 index 0000000..25a2107 --- /dev/null +++ b/l10n/de.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Möchtest Du diese neue Umfrage wirklich löschen?", + "Copied!" : "Kopiert!", + "Copy" : "Kopieren", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "Drücke ⌘-C zum Kopieren.", + "Press Ctrl-C to copy." : "Drücke Strg-C zum Kopieren.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Du bist nicht registriert.\nGebe bitte Deinen Namen an, um abzustimmen.\n(mindestens 3 Buchstaben).", + "Please add some text to your comment before submitting it." : "Füge bitte deinem Kommentar Text hinzu, bevor du absendest.", + "An error occurred, your comment was not posted." : "Ein Fehler ist aufgetreten, Dein Kommentar wurde nicht veröffentlicht.", + "Forms" : "Umfragen", + "Forms App - New Activity" : "Umfragen App - Neue Aktivität", + "{user} participated in the form \"{title}\"" : "{user} hat an der Umfrage \"{title}\" teilgenommen", + "Go to form" : "Zur Umfrage gehen", + "just now" : "gerade jetzt", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Eine Umfrage-App, ähnlich wie Doodle/Dudle, mit der Möglichkeit Zugriffe zu beschränken.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Eine Umfrage-App, ähnlich wie Doodle/Dudle, mit der Möglichkeit Zugriffe zu beschränken (Versteckt/öffentlich oder bestimmte Gruppen/Benutzer/Mitglieder).", + "Expired" : "Abgelaufen", + "Expires %n" : "Läuft ab am %n", + "Expires never" : "Läuft nie ab", + "Anonymous form" : "Anonyme Umfrage", + "Usernames hidden to Owner" : "Nutzernamen vor Inhaber verborgen", + "Usernames visible to Owner" : "Nutzernamen für Inhaber sichtbar", + "Group" : "Gruppe", + "Title" : "Titel", + "Access" : "Zugriff", + "Owner" : "Inhaber", + "Created" : "Erstellt", + "Expires" : "Ablaufdatum", + "Public access" : "Öffentlicher Zugriff", + "Only shared" : "Nur geteilt", + "Registered users only" : "Nur für registrierte Nutzer", + "Hidden form" : "Versteckte Umfrage", + "Text form" : "Zustimmungsumfrage", + "Date form" : "Datumsumfrage", + "never" : "nie", + "Copy Link" : "Link kopieren", + "Clone form" : "Umfrage duplizieren", + "Edit form" : "Umfrage bearbeiten", + "Delete form" : "Umfrage löschen", + "Edit form as admin" : "Umfrage als Administrator bearbeiten", + "Delete form as admin" : "Umfrage als Administrator löschen", + "Link copied to clipboard" : "Link in die Zwischenablage kopiert", + "Error, while copying link to clipboard" : "Fehler beim Kopieren des Links in die Zwischenablage", + "_There is %n comment_::_There are %n comments_" : ["Es gibt %n Kommentar","Es gibt %n Kommentare"], + "Share with" : "Teilen mit…", + "Form description" : "Umfragebeschreibung", + "Description" : "Beschreibung", + "Vote options" : "Abstimmungsoptionen", + "Event schedule" : "Datumsangabe", + "Text based" : "Textbasiert", + "Shift dates" : "Datumsangaben verschieben", + "Shift all dates for " : "Alle Datumsangaben verschieben für", + "Add option" : "Option hinzufügen", + "You are editing in admin mode" : "Du bearbeitest im Administratorenmodus", + "Configuration" : "Einstellung", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Die Konfiguration ist gesperrt. Das Ändern von Optionen kann zu unerwünschtem Verhalten führen, Du kannst sie jedoch dennoch entsperren.", + "Unlock configuration " : "Konfiguration freischalten", + "Form type" : "Umfragetyp", + "Form configurations" : "Umfrage Einstellungen", + "Allow \"maybe\" vote" : "\"Vielleicht\" erlauben", + "Hide user names for admin" : "Namen der Teilnehmer vor Administrator verbergen", + "hidden" : "Versteckt", + "Name of user or group" : "Name des Nutzers oder der Gruppe", + "Create new form" : "Neue Umfrage erstellen", + "Writing form" : "Schreibe Umfrage", + "Update form" : "Umfrage aktualisieren", + "Expiration date" : "Ablaufdatum", + "Click to add a date" : "Klicken um Datum hinzuzufügen", + "Shift all date options" : "Datumsoptionen verschieben", + "Cancel" : "Abbrechen", + "Apply" : "Übernehmen", + "Title must not be empty!" : "Der Titel darf nicht leer sein!", + "%n successfully saved" : "%n gespeichert", + "Error on saving form, see console" : "Fehler beim Speichern der Umfrage. Siehe Konsole.", + "Clone of %n" : "Duplikat von %n", + "New" : "Neu", + "Click here to add a form" : "Hier Klicken um eine Umfrage hinzuzufügen", + "Do you want to delete \"%n\"?" : "Möchtest Du \"%n\" löschen?", + "No, keep form." : "Nein, Umfrage behalten.", + "Yes, delete form." : "Ja, Umfrage löschen.", + "Form \"%n\" deleted" : "Umfrage \"%n\" gelöscht", + "Error while deleting Form \"%n\"" : "Fehler beim Löschen der Umfrage \"%n\"", + "Access denied" : "Zugriff verboten", + "You are not allowed to view this form or the form does not exist." : "Du bist nicht berechtigt, diese Umfrage zu sehen, oder diese Umfrage existiert nicht.", + "You are not allowed to edit this form or the form does not exist." : "Du bist nicht berechtigt, diese Umfrage zu bearbeiten, oder diese Umfrage existiert nicht.", + "You are either not allowed to delete this form or it doesn't exist." : "Du bist nicht berechtigt, diese Umfrage zu löschen, oder diese Umfrage existiert nicht.", + "No description provided." : "Keine Beschreibung vorhanden.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Die Umfrage ist am %s abgelaufen. Abstimmen ist nicht mehr möglich, aber Du kannst weiterhin kommentieren.", + "Switch all options at once" : "Ändere alle Optionen gleichzeitig", + "Your name here" : "Dein Name hier", + "Say yes to all" : "Sage JA zu allen", + "Reset all (say no)" : "Alle zurücksetzen (Sage NEIN)", + "Say maybe to all" : "Sage VIELLEICHT zu allen", + "This form was updated since your last visit. Please check your votes." : "Die Umfrage wurde seit Deinem letzten Besuch aktualisiert. Bitte prüfe Deine Stimmabgabe.", + "Vote!" : "Abstimmen!", + "Receive notification email on activity" : "Erhalte E-Mail Benachrichtigungen bei Aktivitäten", + "Close details" : "Details schließen", + "Close" : "Schließen", + "Expires on %s" : "Läuft ab am %s", + "Invitation access" : "Einladungszugriff", + "Anononymous form" : "Anonyme Umfrage", + "Click to get link" : "Klicken, um den Link zu sehen", + "Edit Form" : "Umfrage bearbeiten", + "Form expired" : "Umfrage abgelaufen", + "Comments" : "Kommentare", + "Login or ..." : "Einloggen oder ...", + "New comment …" : "Neuer Kommentar ...", + "No comments yet. Be the first." : "Bisher keine Kommentare. Sei die/der Erste." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/de_DE.js b/l10n/de_DE.js new file mode 100644 index 0000000..a6e9297 --- /dev/null +++ b/l10n/de_DE.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Möchten Sie die neue Umfrage wirklich löschen?", + "Copied!" : "Kopiert!", + "Copy" : "Kopieren", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "Drücken Sie ⌘-C zum Kopieren.", + "Press Ctrl-C to copy." : "Drücken Sie Strg-C zum Kopieren.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Sie sind nicht registriert.\nBitte geben Sie Ihren Namen (mindestens drei Zeichen) ein, um abzustimmen.", + "Please add some text to your comment before submitting it." : "Bitte fügen Sie Ihrem Kommentar Text hinzu, bevor Sie ihn absenden.", + "An error occurred, your comment was not posted." : "Ein Fehler ist aufgetreten, Ihr Kommentar wurde nicht veröffentlicht.", + "Forms" : "Umfragen", + "Forms App - New Activity" : "Umfragen App - Neue Aktivität", + "{user} participated in the form \"{title}\"" : "{user} hat an der Umfrage \"{title}\" teilgenommen", + "Go to form" : "Zur Umfrage gehen", + "just now" : "gerade jetzt", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Eine Umfragen App ähnlich wie doodle/dudle mit der Möglichkeit den Zugriff zu beschränken.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Eine Umfragen App ähnlich wie doodle/dudle mit der Möglichkeit den Zugriff zu beschränken (Mitglieder, bestimmte Gruppen/Benutzer, versteckt und öffentlich).", + "Expired" : "Abgelaufen", + "Expires %n" : "Läuft ab am %n", + "Expires never" : "Läuft nie ab", + "Anonymous form" : "Anonyme Umfrage", + "Usernames hidden to Owner" : "Nutzernamen vor Inhaber verborgen", + "Usernames visible to Owner" : "Nutzernamen für Inhaber sichtbar", + "Group" : "Gruppe", + "Title" : "Titel", + "Access" : "Zugriff", + "Owner" : "Inhaber", + "Created" : "Erstellt", + "Expires" : "Ablaufdatum", + "Public access" : "Öffentlicher Zugriff", + "Only shared" : "Nur geteilt", + "Registered users only" : "Nur für registrierte Benutzer", + "Hidden form" : "Versteckte Umfrage", + "Text form" : "Text der Umfrage", + "Date form" : "Datum der Umfrage", + "never" : "nie", + "Copy Link" : "Link kopieren", + "Clone form" : "Umfrage duplizieren", + "Edit form" : "Umfrage bearbeiten", + "Delete form" : "Umfrage löschen", + "Edit form as admin" : "Umfrage als Administrator bearbeiten", + "Delete form as admin" : "Umfrage als Administrator löschen", + "Link copied to clipboard" : "Link in die Zwischenablage kopiert", + "Error, while copying link to clipboard" : "Fehler beim Kopieren des Links in die Zwischenablage", + "_There is %n comment_::_There are %n comments_" : ["Es gibt %n Kommentar","Es gibt %n Kommentare"], + "Share with" : "Teilen mit…", + "Form description" : "Beschreibung", + "Description" : "Beschreibung", + "Vote options" : "Abstimmungsoptionen", + "Event schedule" : "Datumsangabe", + "Text based" : "Textbasiert", + "Shift dates" : "Datumsangaben verschieben", + "Shift all dates for " : "Alle Datumsangaben verschieben für", + "Add option" : "Option hinzufügen", + "You are editing in admin mode" : "Sie bearbeiten im Administratorenmodus", + "Configuration" : "Einstellung", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Die Konfiguration ist gesperrt. Das Ändern von Optionen kann zu unerwünschtem Verhalten führen, Sie können sie jedoch dennoch entsperren.", + "Unlock configuration " : "Konfiguration freischalten", + "Form type" : "Umfragetyp", + "Form configurations" : "Umfrage Einstellungen", + "Allow \"maybe\" vote" : "\"Vielleicht\" erlauben", + "Hide user names for admin" : "Namen der Teilnehmer vor Administrator verbergen", + "hidden" : "Versteckt", + "Name of user or group" : "Name des Nutzers oder der Gruppe", + "Create new form" : "Neue Umfrage erstellen", + "Writing form" : "Schreibe Umfrage", + "Update form" : "Umfrage aktualisieren", + "Expiration date" : "Ablaufdatum", + "Click to add a date" : "Datum durch Klick hinzufügen", + "Shift all date options" : "Datumsoptionen verschieben", + "Cancel" : "Abbrechen", + "Apply" : "Übernehmen", + "Title must not be empty!" : "Der Titel darf nicht leer sein!", + "%n successfully saved" : "%n gespeichert", + "Error on saving form, see console" : "Fehler beim Speichern der Umfrage. Siehe Konsole.", + "Clone of %n" : "Duplikat von %n", + "New" : "Neu", + "Click here to add a form" : "Hier Klicken um eine Umfrage hinzuzufügen", + "Do you want to delete \"%n\"?" : "Möchten Sie \"%n\" löschen?", + "No, keep form." : "Nein, Umfrage behalten.", + "Yes, delete form." : "Ja, Umfrage löschen.", + "Form \"%n\" deleted" : "Umfrage \"%n\" gelöscht", + "Error while deleting Form \"%n\"" : "Fehler beim Löschen der Umfrage \"%n\"", + "Access denied" : "Zugriff verboten", + "You are not allowed to view this form or the form does not exist." : "Sie sind nicht berechtigt, diese Umfrage zu sehen, oder diese Umfrage existiert nicht.", + "You are not allowed to edit this form or the form does not exist." : "Sie sind nicht berechtigt, diese Umfrage zu bearbeiten, oder diese Umfrage existiert nicht.", + "You are either not allowed to delete this form or it doesn't exist." : "Sie sind nicht berechtigt, diese Umfrage zu löschen, oder diese Umfrage existiert nicht.", + "No description provided." : "Keine Beschreibung vorhanden.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Die Umfrage ist am %s abgelaufen. Abstimmen ist nicht mehr möglich, aber Sie können weiterhin kommentieren.", + "Switch all options at once" : "Ändern Sie alle Optionen gleichzeitig", + "Your name here" : "Ihr Name", + "Say yes to all" : "Sage JA zu allen", + "Reset all (say no)" : "Alle zurücksetzen (Sage NEIN)", + "Say maybe to all" : "Sage VIELLEICHT zu allen", + "This form was updated since your last visit. Please check your votes." : "Diese Umfrage wurde seit Ihrem letzen Besuch geändert. Bitte überprüfen Sie ihre Antworten.", + "Vote!" : "Abstimmen!", + "Receive notification email on activity" : "Erhalte E-Mail Benachrichtigungen bei Aktivitäten", + "Close details" : "Details schließen", + "Close" : "Schließen", + "Expires on %s" : "Läuft ab am %s", + "Invitation access" : "Einladungszugriff", + "Anononymous form" : "Anonyme Umfrage", + "Click to get link" : "Klicken, um den Link zu sehen", + "Edit Form" : "Umfrage bearbeiten", + "Form expired" : "Umfrage abgelaufen", + "Comments" : "Kommentare", + "Login or ..." : "Einloggen oder ...", + "New comment …" : "Neuer Kommentar ...", + "No comments yet. Be the first." : "Bisher keine Kommentare. Seien Sie die/der Erste." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/de_DE.json b/l10n/de_DE.json new file mode 100644 index 0000000..893cbc1 --- /dev/null +++ b/l10n/de_DE.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Möchten Sie die neue Umfrage wirklich löschen?", + "Copied!" : "Kopiert!", + "Copy" : "Kopieren", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "Drücken Sie ⌘-C zum Kopieren.", + "Press Ctrl-C to copy." : "Drücken Sie Strg-C zum Kopieren.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Sie sind nicht registriert.\nBitte geben Sie Ihren Namen (mindestens drei Zeichen) ein, um abzustimmen.", + "Please add some text to your comment before submitting it." : "Bitte fügen Sie Ihrem Kommentar Text hinzu, bevor Sie ihn absenden.", + "An error occurred, your comment was not posted." : "Ein Fehler ist aufgetreten, Ihr Kommentar wurde nicht veröffentlicht.", + "Forms" : "Umfragen", + "Forms App - New Activity" : "Umfragen App - Neue Aktivität", + "{user} participated in the form \"{title}\"" : "{user} hat an der Umfrage \"{title}\" teilgenommen", + "Go to form" : "Zur Umfrage gehen", + "just now" : "gerade jetzt", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Eine Umfragen App ähnlich wie doodle/dudle mit der Möglichkeit den Zugriff zu beschränken.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Eine Umfragen App ähnlich wie doodle/dudle mit der Möglichkeit den Zugriff zu beschränken (Mitglieder, bestimmte Gruppen/Benutzer, versteckt und öffentlich).", + "Expired" : "Abgelaufen", + "Expires %n" : "Läuft ab am %n", + "Expires never" : "Läuft nie ab", + "Anonymous form" : "Anonyme Umfrage", + "Usernames hidden to Owner" : "Nutzernamen vor Inhaber verborgen", + "Usernames visible to Owner" : "Nutzernamen für Inhaber sichtbar", + "Group" : "Gruppe", + "Title" : "Titel", + "Access" : "Zugriff", + "Owner" : "Inhaber", + "Created" : "Erstellt", + "Expires" : "Ablaufdatum", + "Public access" : "Öffentlicher Zugriff", + "Only shared" : "Nur geteilt", + "Registered users only" : "Nur für registrierte Benutzer", + "Hidden form" : "Versteckte Umfrage", + "Text form" : "Text der Umfrage", + "Date form" : "Datum der Umfrage", + "never" : "nie", + "Copy Link" : "Link kopieren", + "Clone form" : "Umfrage duplizieren", + "Edit form" : "Umfrage bearbeiten", + "Delete form" : "Umfrage löschen", + "Edit form as admin" : "Umfrage als Administrator bearbeiten", + "Delete form as admin" : "Umfrage als Administrator löschen", + "Link copied to clipboard" : "Link in die Zwischenablage kopiert", + "Error, while copying link to clipboard" : "Fehler beim Kopieren des Links in die Zwischenablage", + "_There is %n comment_::_There are %n comments_" : ["Es gibt %n Kommentar","Es gibt %n Kommentare"], + "Share with" : "Teilen mit…", + "Form description" : "Beschreibung", + "Description" : "Beschreibung", + "Vote options" : "Abstimmungsoptionen", + "Event schedule" : "Datumsangabe", + "Text based" : "Textbasiert", + "Shift dates" : "Datumsangaben verschieben", + "Shift all dates for " : "Alle Datumsangaben verschieben für", + "Add option" : "Option hinzufügen", + "You are editing in admin mode" : "Sie bearbeiten im Administratorenmodus", + "Configuration" : "Einstellung", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Die Konfiguration ist gesperrt. Das Ändern von Optionen kann zu unerwünschtem Verhalten führen, Sie können sie jedoch dennoch entsperren.", + "Unlock configuration " : "Konfiguration freischalten", + "Form type" : "Umfragetyp", + "Form configurations" : "Umfrage Einstellungen", + "Allow \"maybe\" vote" : "\"Vielleicht\" erlauben", + "Hide user names for admin" : "Namen der Teilnehmer vor Administrator verbergen", + "hidden" : "Versteckt", + "Name of user or group" : "Name des Nutzers oder der Gruppe", + "Create new form" : "Neue Umfrage erstellen", + "Writing form" : "Schreibe Umfrage", + "Update form" : "Umfrage aktualisieren", + "Expiration date" : "Ablaufdatum", + "Click to add a date" : "Datum durch Klick hinzufügen", + "Shift all date options" : "Datumsoptionen verschieben", + "Cancel" : "Abbrechen", + "Apply" : "Übernehmen", + "Title must not be empty!" : "Der Titel darf nicht leer sein!", + "%n successfully saved" : "%n gespeichert", + "Error on saving form, see console" : "Fehler beim Speichern der Umfrage. Siehe Konsole.", + "Clone of %n" : "Duplikat von %n", + "New" : "Neu", + "Click here to add a form" : "Hier Klicken um eine Umfrage hinzuzufügen", + "Do you want to delete \"%n\"?" : "Möchten Sie \"%n\" löschen?", + "No, keep form." : "Nein, Umfrage behalten.", + "Yes, delete form." : "Ja, Umfrage löschen.", + "Form \"%n\" deleted" : "Umfrage \"%n\" gelöscht", + "Error while deleting Form \"%n\"" : "Fehler beim Löschen der Umfrage \"%n\"", + "Access denied" : "Zugriff verboten", + "You are not allowed to view this form or the form does not exist." : "Sie sind nicht berechtigt, diese Umfrage zu sehen, oder diese Umfrage existiert nicht.", + "You are not allowed to edit this form or the form does not exist." : "Sie sind nicht berechtigt, diese Umfrage zu bearbeiten, oder diese Umfrage existiert nicht.", + "You are either not allowed to delete this form or it doesn't exist." : "Sie sind nicht berechtigt, diese Umfrage zu löschen, oder diese Umfrage existiert nicht.", + "No description provided." : "Keine Beschreibung vorhanden.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Die Umfrage ist am %s abgelaufen. Abstimmen ist nicht mehr möglich, aber Sie können weiterhin kommentieren.", + "Switch all options at once" : "Ändern Sie alle Optionen gleichzeitig", + "Your name here" : "Ihr Name", + "Say yes to all" : "Sage JA zu allen", + "Reset all (say no)" : "Alle zurücksetzen (Sage NEIN)", + "Say maybe to all" : "Sage VIELLEICHT zu allen", + "This form was updated since your last visit. Please check your votes." : "Diese Umfrage wurde seit Ihrem letzen Besuch geändert. Bitte überprüfen Sie ihre Antworten.", + "Vote!" : "Abstimmen!", + "Receive notification email on activity" : "Erhalte E-Mail Benachrichtigungen bei Aktivitäten", + "Close details" : "Details schließen", + "Close" : "Schließen", + "Expires on %s" : "Läuft ab am %s", + "Invitation access" : "Einladungszugriff", + "Anononymous form" : "Anonyme Umfrage", + "Click to get link" : "Klicken, um den Link zu sehen", + "Edit Form" : "Umfrage bearbeiten", + "Form expired" : "Umfrage abgelaufen", + "Comments" : "Kommentare", + "Login or ..." : "Einloggen oder ...", + "New comment …" : "Neuer Kommentar ...", + "No comments yet. Be the first." : "Bisher keine Kommentare. Seien Sie die/der Erste." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/el.js b/l10n/el.js new file mode 100644 index 0000000..0f82796 --- /dev/null +++ b/l10n/el.js @@ -0,0 +1,40 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Αντιγράφηκε!", + "Copy" : "Αντιγραφή", + "Not supported!" : "Δεν υποστηρίζεται!", + "Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.", + "Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Δεν είστε εγγεγραμένος.\nΠαρακαλούμε εισάγετε το όνομά σας για να ψηφίσετε\n(το λιγότερο 3 χαρακτήρες).", + "Please add some text to your comment before submitting it." : "Παρακαλώ προσθέστε ένα κείμενο στο σχόλιό σας πριν το υποβάλλετε", + "Forms" : "Ψηφοφορίες", + "Forms App - New Activity" : "Εφαρμογή ψηφοφοριών - Νέα δραστηριότητα", + "just now" : "μόλις τώρα", + "Expired" : "Έληξε", + "Expires never" : "Δεν λήγει ποτέ", + "Group" : "Ομάδα", + "Title" : "Τίτλος", + "Access" : "Πρόσβαση", + "Owner" : "Ιδιοκτήτης", + "Expires" : "Λήγει", + "Copy Link" : "Αντιγραφή συνδέσμου", + "Edit form" : "Επεξεργασία ψηφοφορίας", + "Delete form" : "Διαγραφή ψηφοφορίας", + "Description" : "Περιγραφή", + "Form type" : "Τύπος ψηφοφορίας", + "hidden" : "κρυφά", + "Create new form" : "Δημιουργία νέας ψηφοφορίας", + "Update form" : "Ενημέρωση ψηφοφορίας", + "Access denied" : "Δεν επιτρέπεται η πρόσβαση", + "Your name here" : "Το όνομά σας εδώ", + "Close details" : "Κλείσιμο λεπτομερειών", + "Close" : "Κλείσιμο", + "Expires on %s" : "Λήγει στις %s", + "Click to get link" : "Κάντε κλικ για αντιγραφή συνδέσμου", + "Edit Form" : "Επεξεργασία ψηφοφορίας", + "Form expired" : "Η ψηφοφορία έληξε", + "Comments" : "Σχόλια", + "New comment …" : "Νέο σχόλιο …" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/el.json b/l10n/el.json new file mode 100644 index 0000000..9cf051e --- /dev/null +++ b/l10n/el.json @@ -0,0 +1,38 @@ +{ "translations": { + "Copied!" : "Αντιγράφηκε!", + "Copy" : "Αντιγραφή", + "Not supported!" : "Δεν υποστηρίζεται!", + "Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.", + "Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Δεν είστε εγγεγραμένος.\nΠαρακαλούμε εισάγετε το όνομά σας για να ψηφίσετε\n(το λιγότερο 3 χαρακτήρες).", + "Please add some text to your comment before submitting it." : "Παρακαλώ προσθέστε ένα κείμενο στο σχόλιό σας πριν το υποβάλλετε", + "Forms" : "Ψηφοφορίες", + "Forms App - New Activity" : "Εφαρμογή ψηφοφοριών - Νέα δραστηριότητα", + "just now" : "μόλις τώρα", + "Expired" : "Έληξε", + "Expires never" : "Δεν λήγει ποτέ", + "Group" : "Ομάδα", + "Title" : "Τίτλος", + "Access" : "Πρόσβαση", + "Owner" : "Ιδιοκτήτης", + "Expires" : "Λήγει", + "Copy Link" : "Αντιγραφή συνδέσμου", + "Edit form" : "Επεξεργασία ψηφοφορίας", + "Delete form" : "Διαγραφή ψηφοφορίας", + "Description" : "Περιγραφή", + "Form type" : "Τύπος ψηφοφορίας", + "hidden" : "κρυφά", + "Create new form" : "Δημιουργία νέας ψηφοφορίας", + "Update form" : "Ενημέρωση ψηφοφορίας", + "Access denied" : "Δεν επιτρέπεται η πρόσβαση", + "Your name here" : "Το όνομά σας εδώ", + "Close details" : "Κλείσιμο λεπτομερειών", + "Close" : "Κλείσιμο", + "Expires on %s" : "Λήγει στις %s", + "Click to get link" : "Κάντε κλικ για αντιγραφή συνδέσμου", + "Edit Form" : "Επεξεργασία ψηφοφορίας", + "Form expired" : "Η ψηφοφορία έληξε", + "Comments" : "Σχόλια", + "New comment …" : "Νέο σχόλιο …" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/en_GB.js b/l10n/en_GB.js new file mode 100644 index 0000000..ac7ace6 --- /dev/null +++ b/l10n/en_GB.js @@ -0,0 +1,53 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Copied!", + "Copy" : "Copy", + "Not supported!" : "Not supported!", + "Press ⌘-C to copy." : "Press ⌘-C to copy.", + "Press Ctrl-C to copy." : "Press Ctrl-C to copy.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "You are not registered.\nPlease enter your name to vote\n(at least 3 characters).", + "Please add some text to your comment before submitting it." : "Please add some text to your comment before submitting it.", + "An error occurred, your comment was not posted." : "An error occurred, your comment was not posted.", + "Forms" : "Forms", + "Forms App - New Activity" : "Forms App - New Activity", + "just now" : "just now", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "A forms app, similar to doodle/dudle with the possibility to restrict access.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public).", + "Expired" : "Expired", + "Expires never" : "Expires never", + "Usernames hidden to Owner" : "Usernames hidden to Owner", + "Usernames visible to Owner" : "Usernames visible to Owner", + "Title" : "Title", + "Access" : "Access", + "Owner" : "Owner", + "Created" : "Created", + "Expires" : "Expires", + "Copy Link" : "Copy Link", + "Delete form" : "Delete form", + "Description" : "Description", + "Create new form" : "Create new form", + "Update form" : "Update form", + "Access denied" : "Access denied", + "You are not allowed to view this form or the form does not exist." : "You are not allowed to view this form or the form does not exist.", + "You are not allowed to edit this form or the form does not exist." : "You are not allowed to edit this form or the form does not exist.", + "No description provided." : "No description provided.", + "The form expired on %s. Voting is disabled, but you can still comment." : "The form expired on %s. Voting is disabled, but you can still comment.", + "Switch all options at once" : "Switch all options at once", + "Your name here" : "Your name here", + "Vote!" : "Vote!", + "Receive notification email on activity" : "Receive notification email on activity", + "Close details" : "Close details", + "Close" : "Close", + "Expires on %s" : "Expires on %s", + "Invitation access" : "Invitation access", + "Anononymous form" : "Anonymous form", + "Click to get link" : "Click to get link", + "Edit Form" : "Edit Form", + "Form expired" : "Form expired", + "Comments" : "Comments", + "Login or ..." : "Login or ...", + "New comment …" : "New comment …", + "No comments yet. Be the first." : "No comments yet. Be the first." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/en_GB.json b/l10n/en_GB.json new file mode 100644 index 0000000..c2d0d15 --- /dev/null +++ b/l10n/en_GB.json @@ -0,0 +1,51 @@ +{ "translations": { + "Copied!" : "Copied!", + "Copy" : "Copy", + "Not supported!" : "Not supported!", + "Press ⌘-C to copy." : "Press ⌘-C to copy.", + "Press Ctrl-C to copy." : "Press Ctrl-C to copy.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "You are not registered.\nPlease enter your name to vote\n(at least 3 characters).", + "Please add some text to your comment before submitting it." : "Please add some text to your comment before submitting it.", + "An error occurred, your comment was not posted." : "An error occurred, your comment was not posted.", + "Forms" : "Forms", + "Forms App - New Activity" : "Forms App - New Activity", + "just now" : "just now", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "A forms app, similar to doodle/dudle with the possibility to restrict access.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public).", + "Expired" : "Expired", + "Expires never" : "Expires never", + "Usernames hidden to Owner" : "Usernames hidden to Owner", + "Usernames visible to Owner" : "Usernames visible to Owner", + "Title" : "Title", + "Access" : "Access", + "Owner" : "Owner", + "Created" : "Created", + "Expires" : "Expires", + "Copy Link" : "Copy Link", + "Delete form" : "Delete form", + "Description" : "Description", + "Create new form" : "Create new form", + "Update form" : "Update form", + "Access denied" : "Access denied", + "You are not allowed to view this form or the form does not exist." : "You are not allowed to view this form or the form does not exist.", + "You are not allowed to edit this form or the form does not exist." : "You are not allowed to edit this form or the form does not exist.", + "No description provided." : "No description provided.", + "The form expired on %s. Voting is disabled, but you can still comment." : "The form expired on %s. Voting is disabled, but you can still comment.", + "Switch all options at once" : "Switch all options at once", + "Your name here" : "Your name here", + "Vote!" : "Vote!", + "Receive notification email on activity" : "Receive notification email on activity", + "Close details" : "Close details", + "Close" : "Close", + "Expires on %s" : "Expires on %s", + "Invitation access" : "Invitation access", + "Anononymous form" : "Anonymous form", + "Click to get link" : "Click to get link", + "Edit Form" : "Edit Form", + "Form expired" : "Form expired", + "Comments" : "Comments", + "Login or ..." : "Login or ...", + "New comment …" : "New comment …", + "No comments yet. Be the first." : "No comments yet. Be the first." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/eo.js b/l10n/eo.js new file mode 100644 index 0000000..497fcd6 --- /dev/null +++ b/l10n/eo.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Ĉu vi vere volas forigi tiun ĉi novan enketon?", + "Copied!" : "Kopiita!", + "Copy" : "Kopii", + "Not supported!" : "Ne subtenite!", + "Press ⌘-C to copy." : "Premi ⌘-C por kopii.", + "Press Ctrl-C to copy." : "Premi Ctrl-C por kopii.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Vi ne estas registrita.\nBonvoli entajpi vian nomon por voĉdoni\n(almenaŭ 3 signoj)", + "Please add some text to your comment before submitting it." : "Bonvolu aldoni iun tekston al via komento antaŭ ol sendi ĝin.", + "An error occurred, your comment was not posted." : "Eraro okazis, via komento ne estis afiŝita.", + "Forms" : "Enketilo", + "Forms App - New Activity" : "Enketilo-aplikaĵo — Nova aktivaĵo", + "{user} participated in the form \"{title}\"" : "{user} partoprenis la enketon „{title}“", + "Go to form" : "Iri al enketo", + "just now" : "ĵus", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Enketa aplikaĵo, samspeca kiel „Doodle“ aŭ „Dudle“, kun limigeblo de aliro.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Enketa aplikaĵo, samspeca kiel „Doodle“ aŭ „Dudle“, kun limigeblo de aliro (membroj, certaj grupoj aŭ uzantoj, kaŝita aŭ publika).", + "Expired" : "Senvalidiĝis", + "Expires %n" : "Senvalidiĝos je %n", + "Expires never" : "Neniam senvalidiĝos", + "Anonymous form" : "Enketo sennoma", + "Usernames hidden to Owner" : "Uzantnomoj kaŝitaj al posedanto", + "Usernames visible to Owner" : "Uzantnomoj montritaj al posedanto", + "Group" : "Grupo", + "Title" : "Titolo", + "Access" : "Aliro", + "Owner" : "Posedanto", + "Created" : "Kreita", + "Expires" : "Senvalidiĝo", + "Public access" : "Publika aliro", + "Only shared" : "Kunkavigita kun...", + "Registered users only" : "Nur registritaj uzantoj", + "Hidden form" : "Kaŝita enketo", + "Text form" : "Teksta enketo", + "Date form" : "Data enketo", + "never" : "neniam", + "Copy Link" : "Kopii ligilon", + "Clone form" : "Duobligi la enketon", + "Edit form" : "Modifi enketon", + "Delete form" : "Forigi enketon", + "Edit form as admin" : "Modifi enketon kiel administranto", + "Delete form as admin" : "Forigi enketon kiel administranto", + "Link copied to clipboard" : "Ligilo kopiita al tondujo", + "Error, while copying link to clipboard" : "Eraro dum kopio de ligilo al tondujo", + "_There is %n comment_::_There are %n comments_" : ["Estas %n komento","Estas %n komentoj"], + "Share with" : "Kunhavigi kun", + "Form description" : "Enketa priskribo", + "Description" : "Priskribo", + "Vote options" : "Voĉdonaj opcioj", + "Event schedule" : "Plani okazaĵon", + "Text based" : "Uzi tekstajn elektojn", + "Shift dates" : "Movi datojn", + "Shift all dates for " : "Movi ĉiujn datojn por", + "Add option" : "Aldoni opcion", + "You are editing in admin mode" : "Vi modifas kiel administranto", + "Configuration" : "Agordo", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Agordo estas ŝlosita. Ŝanĝado de opcioj povas estigi problemojn, tamen vi povas malŝlosi ĝin.", + "Unlock configuration " : "Malŝlosi agordon", + "Form type" : "Enketa tipo", + "Form configurations" : "Enketa agordo", + "Allow \"maybe\" vote" : "Permesi respondi per „Eble“", + "Hide user names for admin" : "Kaŝi uzantnomojn al administranto", + "hidden" : "Kaŝita", + "Name of user or group" : "Nomo de uzanto aŭ grupo", + "Create new form" : "Krei novan enketon", + "Writing form" : "Redakti enketon", + "Update form" : "Ĝisdatigi enketon", + "Expiration date" : "Limdato", + "Click to add a date" : "Alklaku por aldoni daton", + "Shift all date options" : "Movi ĉiujn datajn opciojn", + "Cancel" : "Nuligi", + "Apply" : "Validigi", + "Title must not be empty!" : "La titolo ne povas malpleni!", + "%n successfully saved" : "%n sukcese konservita", + "Error on saving form, see console" : "Erar dum konservo de enketo, vidu la konzolon", + "Clone of %n" : "Duoblo de %n", + "New" : "Nova", + "Click here to add a form" : "Alklaku ĉi tie por aldoni enketon", + "Do you want to delete \"%n\"?" : "Ĉu vi volas forigi „%n“?", + "No, keep form." : "Ne, teni enketon.", + "Yes, delete form." : "Jes, forigi enketon.", + "Form \"%n\" deleted" : "Enketo „%n“ forigita", + "Error while deleting Form \"%n\"" : "Eraro dum forigo de enketo „%n“", + "Access denied" : "Aliro malpermesata", + "You are not allowed to view this form or the form does not exist." : "Vi ne rajtas vidi tiun ĉi enketon, aŭ la enketo ne ekzistas.", + "You are not allowed to edit this form or the form does not exist." : "Vi ne rajtas modifi tiun ĉi enketon, aŭ la enketo ne ekzistas.", + "You are either not allowed to delete this form or it doesn't exist." : "Vi ne rajtas forigi tiun ĉi enketon, aŭ la enketo ne ekzistas.", + "No description provided." : "Neniu priskribo.", + "The form expired on %s. Voting is disabled, but you can still comment." : "La enketo senvalidiĝis je %s. Voĉdoni estas malebligita, sed vi povas komenti.", + "Switch all options at once" : "Ŝanĝi ĉiujn opciojn samtempe", + "Your name here" : "Via nomo ĉi tie", + "Say yes to all" : "Diri „jes“ al ĉiuj", + "Reset all (say no)" : "Restarigi ĉiujn (diri „ne“)", + "Say maybe to all" : "Diri „eble“ al ĉiuj", + "This form was updated since your last visit. Please check your votes." : "Tiu ĉi enketo estis ĝisdatigita post via lasta vizito. Bv. kontroli viajn respondojn.", + "Vote!" : "Voĉdoni!", + "Receive notification email on activity" : "Ricevi sciigojn retpoŝte okaze de aktivaĵo", + "Close details" : "Fermi detalojn", + "Close" : "Fermi", + "Expires on %s" : "Senvalidiĝas je %s", + "Invitation access" : "Aliro per invito", + "Anononymous form" : "Enketo sennoma", + "Click to get link" : "Alklaku por havi ligilon", + "Edit Form" : "Modifi enketon", + "Form expired" : "Enketo senvalidiĝis", + "Comments" : "Komentoj", + "Login or ..." : "Ensaluti aŭ...", + "New comment …" : "Nova komento...", + "No comments yet. Be the first." : "Neniu komento. Estu la unua." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/eo.json b/l10n/eo.json new file mode 100644 index 0000000..ccade37 --- /dev/null +++ b/l10n/eo.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Ĉu vi vere volas forigi tiun ĉi novan enketon?", + "Copied!" : "Kopiita!", + "Copy" : "Kopii", + "Not supported!" : "Ne subtenite!", + "Press ⌘-C to copy." : "Premi ⌘-C por kopii.", + "Press Ctrl-C to copy." : "Premi Ctrl-C por kopii.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Vi ne estas registrita.\nBonvoli entajpi vian nomon por voĉdoni\n(almenaŭ 3 signoj)", + "Please add some text to your comment before submitting it." : "Bonvolu aldoni iun tekston al via komento antaŭ ol sendi ĝin.", + "An error occurred, your comment was not posted." : "Eraro okazis, via komento ne estis afiŝita.", + "Forms" : "Enketilo", + "Forms App - New Activity" : "Enketilo-aplikaĵo — Nova aktivaĵo", + "{user} participated in the form \"{title}\"" : "{user} partoprenis la enketon „{title}“", + "Go to form" : "Iri al enketo", + "just now" : "ĵus", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Enketa aplikaĵo, samspeca kiel „Doodle“ aŭ „Dudle“, kun limigeblo de aliro.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Enketa aplikaĵo, samspeca kiel „Doodle“ aŭ „Dudle“, kun limigeblo de aliro (membroj, certaj grupoj aŭ uzantoj, kaŝita aŭ publika).", + "Expired" : "Senvalidiĝis", + "Expires %n" : "Senvalidiĝos je %n", + "Expires never" : "Neniam senvalidiĝos", + "Anonymous form" : "Enketo sennoma", + "Usernames hidden to Owner" : "Uzantnomoj kaŝitaj al posedanto", + "Usernames visible to Owner" : "Uzantnomoj montritaj al posedanto", + "Group" : "Grupo", + "Title" : "Titolo", + "Access" : "Aliro", + "Owner" : "Posedanto", + "Created" : "Kreita", + "Expires" : "Senvalidiĝo", + "Public access" : "Publika aliro", + "Only shared" : "Kunkavigita kun...", + "Registered users only" : "Nur registritaj uzantoj", + "Hidden form" : "Kaŝita enketo", + "Text form" : "Teksta enketo", + "Date form" : "Data enketo", + "never" : "neniam", + "Copy Link" : "Kopii ligilon", + "Clone form" : "Duobligi la enketon", + "Edit form" : "Modifi enketon", + "Delete form" : "Forigi enketon", + "Edit form as admin" : "Modifi enketon kiel administranto", + "Delete form as admin" : "Forigi enketon kiel administranto", + "Link copied to clipboard" : "Ligilo kopiita al tondujo", + "Error, while copying link to clipboard" : "Eraro dum kopio de ligilo al tondujo", + "_There is %n comment_::_There are %n comments_" : ["Estas %n komento","Estas %n komentoj"], + "Share with" : "Kunhavigi kun", + "Form description" : "Enketa priskribo", + "Description" : "Priskribo", + "Vote options" : "Voĉdonaj opcioj", + "Event schedule" : "Plani okazaĵon", + "Text based" : "Uzi tekstajn elektojn", + "Shift dates" : "Movi datojn", + "Shift all dates for " : "Movi ĉiujn datojn por", + "Add option" : "Aldoni opcion", + "You are editing in admin mode" : "Vi modifas kiel administranto", + "Configuration" : "Agordo", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Agordo estas ŝlosita. Ŝanĝado de opcioj povas estigi problemojn, tamen vi povas malŝlosi ĝin.", + "Unlock configuration " : "Malŝlosi agordon", + "Form type" : "Enketa tipo", + "Form configurations" : "Enketa agordo", + "Allow \"maybe\" vote" : "Permesi respondi per „Eble“", + "Hide user names for admin" : "Kaŝi uzantnomojn al administranto", + "hidden" : "Kaŝita", + "Name of user or group" : "Nomo de uzanto aŭ grupo", + "Create new form" : "Krei novan enketon", + "Writing form" : "Redakti enketon", + "Update form" : "Ĝisdatigi enketon", + "Expiration date" : "Limdato", + "Click to add a date" : "Alklaku por aldoni daton", + "Shift all date options" : "Movi ĉiujn datajn opciojn", + "Cancel" : "Nuligi", + "Apply" : "Validigi", + "Title must not be empty!" : "La titolo ne povas malpleni!", + "%n successfully saved" : "%n sukcese konservita", + "Error on saving form, see console" : "Erar dum konservo de enketo, vidu la konzolon", + "Clone of %n" : "Duoblo de %n", + "New" : "Nova", + "Click here to add a form" : "Alklaku ĉi tie por aldoni enketon", + "Do you want to delete \"%n\"?" : "Ĉu vi volas forigi „%n“?", + "No, keep form." : "Ne, teni enketon.", + "Yes, delete form." : "Jes, forigi enketon.", + "Form \"%n\" deleted" : "Enketo „%n“ forigita", + "Error while deleting Form \"%n\"" : "Eraro dum forigo de enketo „%n“", + "Access denied" : "Aliro malpermesata", + "You are not allowed to view this form or the form does not exist." : "Vi ne rajtas vidi tiun ĉi enketon, aŭ la enketo ne ekzistas.", + "You are not allowed to edit this form or the form does not exist." : "Vi ne rajtas modifi tiun ĉi enketon, aŭ la enketo ne ekzistas.", + "You are either not allowed to delete this form or it doesn't exist." : "Vi ne rajtas forigi tiun ĉi enketon, aŭ la enketo ne ekzistas.", + "No description provided." : "Neniu priskribo.", + "The form expired on %s. Voting is disabled, but you can still comment." : "La enketo senvalidiĝis je %s. Voĉdoni estas malebligita, sed vi povas komenti.", + "Switch all options at once" : "Ŝanĝi ĉiujn opciojn samtempe", + "Your name here" : "Via nomo ĉi tie", + "Say yes to all" : "Diri „jes“ al ĉiuj", + "Reset all (say no)" : "Restarigi ĉiujn (diri „ne“)", + "Say maybe to all" : "Diri „eble“ al ĉiuj", + "This form was updated since your last visit. Please check your votes." : "Tiu ĉi enketo estis ĝisdatigita post via lasta vizito. Bv. kontroli viajn respondojn.", + "Vote!" : "Voĉdoni!", + "Receive notification email on activity" : "Ricevi sciigojn retpoŝte okaze de aktivaĵo", + "Close details" : "Fermi detalojn", + "Close" : "Fermi", + "Expires on %s" : "Senvalidiĝas je %s", + "Invitation access" : "Aliro per invito", + "Anononymous form" : "Enketo sennoma", + "Click to get link" : "Alklaku por havi ligilon", + "Edit Form" : "Modifi enketon", + "Form expired" : "Enketo senvalidiĝis", + "Comments" : "Komentoj", + "Login or ..." : "Ensaluti aŭ...", + "New comment …" : "Nova komento...", + "No comments yet. Be the first." : "Neniu komento. Estu la unua." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es.js b/l10n/es.js new file mode 100644 index 0000000..4d3a91c --- /dev/null +++ b/l10n/es.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "¿Estás seguro de que quieres eliminar esta encuesta nueva?", + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Pulsa ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Pulsa Ctrl+C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor, introduce tu nombre para votar\n(al menos, 3 caracteres)", + "Please add some text to your comment before submitting it." : "Por favor, añade algo del texto al comentario antes de enviarlo.", + "An error occurred, your comment was not posted." : "Ha ocurrido un error, tu comentario no se ha publicado.", + "Forms" : "Votaciones", + "Forms App - New Activity" : "App de Encuestas - Nueva actividad", + "{user} participated in the form \"{title}\"" : "{user} ha participado en la votación \"{title}\"", + "Go to form" : "Ir a la votación", + "just now" : "ahora mismo", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Una app de encuestas, similar a doodle/dudle, con la posibilidad de restringir el acceso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Una app de encuestas, similar a doodle/dudle, con la posibilidad de restringir el acceso (miembros, ciertos grupos/usuarios, oculta y pública).", + "Expired" : "Caducidad", + "Expires %n" : "Finaliza el %n", + "Expires never" : "No caduca nunca", + "Anonymous form" : "Votación anónima", + "Usernames hidden to Owner" : "Nombres de usuario ocultos al propietario", + "Usernames visible to Owner" : "Nombres de usuario visibles al propietario", + "Group" : "Grupo", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creada", + "Expires" : "Expira", + "Public access" : "Acceso público", + "Only shared" : "Solo compartida", + "Registered users only" : "Solo para usuarios registrados", + "Hidden form" : "Votación oculta", + "Text form" : "Votación de texto", + "Date form" : "Votación de fechas", + "never" : "nunca", + "Copy Link" : "Copiar enlace", + "Clone form" : "Clonar votación", + "Edit form" : "Editar votación", + "Delete form" : "Borrar encuesta", + "Edit form as admin" : "Editar votación como administrador", + "Delete form as admin" : "Eliminar votación como administrador", + "Link copied to clipboard" : "Enlace copiado al portapapeles", + "Error, while copying link to clipboard" : "Error al copiar enlace al portapapeles", + "_There is %n comment_::_There are %n comments_" : ["Hay %n comentario","Hay %n comentarios"], + "Share with" : "Compartir con", + "Form description" : "Descripción de la votación", + "Description" : "Descripción", + "Vote options" : "Opciones para los votos", + "Event schedule" : "Programar evento", + "Text based" : "Basada en texto", + "Shift dates" : "Cambiar fechas", + "Shift all dates for " : "Cambiar todas las fechas por", + "Add option" : "Añadir opción", + "You are editing in admin mode" : "Estás editando en modo administrador", + "Configuration" : "Configuración", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "La configuración está bloqueada. Cambiar las opciones puede resultar en un comportamiento no deseado, pero puedes desbloquearla de todas formas.", + "Unlock configuration " : "Desbloquear configuracioń", + "Form type" : "Tipo de votación", + "Form configurations" : "Configuraciones de la votación", + "Allow \"maybe\" vote" : "Permitir voto \"quizás\"", + "Hide user names for admin" : "Esconder los nombres de usuario al administrador", + "hidden" : "oculta", + "Name of user or group" : "Nombre de usuario o grupo", + "Create new form" : "Crear nueva votación", + "Writing form" : "Votación por escrito", + "Update form" : "Actualizar votación", + "Expiration date" : "Fecha de finalización", + "Click to add a date" : "Pulsa para añadir una fecha", + "Shift all date options" : "Cambiar todas las opciones de fechas", + "Cancel" : "Cancelar", + "Apply" : "Aplicar", + "Title must not be empty!" : "¡El título no puede estar vacío!", + "%n successfully saved" : "%nguardado con éxito", + "Error on saving form, see console" : "Error al guardar la votación, ver la consola", + "Clone of %n" : "Clonada de %n", + "New" : "Nueva", + "Click here to add a form" : "Pulsa aquí para añadir una votación", + "Do you want to delete \"%n\"?" : "¿Quieres eliminar \"%n\"?", + "No, keep form." : "No, mantener votación.", + "Yes, delete form." : "Sí, eliminar votación.", + "Form \"%n\" deleted" : "Votación \"%n\" eliminada", + "Error while deleting Form \"%n\"" : "Error al eliminar votación \"%n\"", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permiso para ver esta votación o la votación no existe.", + "You are not allowed to edit this form or the form does not exist." : "No puedes editar esta encuesta, o la encuesta no existe.", + "You are either not allowed to delete this form or it doesn't exist." : "O no estás autorizado para eliminar esta encuesta o no existe.", + "No description provided." : "No se ha proporcionado descripción.", + "The form expired on %s. Voting is disabled, but you can still comment." : "La votación caducó en %s. No se puede votar, pero todavía puedes comentar.", + "Switch all options at once" : "Cambiar todas las opciones de una vez", + "Your name here" : "Tu nombre aquí", + "Say yes to all" : "Decir Sí a todo", + "Reset all (say no)" : "Restablecer todo (decir No)", + "Say maybe to all" : "Decir Quizás a todo", + "This form was updated since your last visit. Please check your votes." : "Esta votación se ha actualizado desde tu última visita. Por favor, comprueba tus votos.", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir correo con notificaciones sobre la actividad", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Caduca el %s", + "Invitation access" : "Acceso por invitación", + "Anononymous form" : "Encuenta anónima", + "Click to get link" : "Clic para conseguir un enlace", + "Edit Form" : "Editar encuesta", + "Form expired" : "La votación ha caducado", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o...", + "New comment …" : "Nuevo comentario...", + "No comments yet. Be the first." : "Todavía no hay comentarios. Sé el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es.json b/l10n/es.json new file mode 100644 index 0000000..5904952 --- /dev/null +++ b/l10n/es.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "¿Estás seguro de que quieres eliminar esta encuesta nueva?", + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Pulsa ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Pulsa Ctrl+C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor, introduce tu nombre para votar\n(al menos, 3 caracteres)", + "Please add some text to your comment before submitting it." : "Por favor, añade algo del texto al comentario antes de enviarlo.", + "An error occurred, your comment was not posted." : "Ha ocurrido un error, tu comentario no se ha publicado.", + "Forms" : "Votaciones", + "Forms App - New Activity" : "App de Encuestas - Nueva actividad", + "{user} participated in the form \"{title}\"" : "{user} ha participado en la votación \"{title}\"", + "Go to form" : "Ir a la votación", + "just now" : "ahora mismo", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Una app de encuestas, similar a doodle/dudle, con la posibilidad de restringir el acceso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Una app de encuestas, similar a doodle/dudle, con la posibilidad de restringir el acceso (miembros, ciertos grupos/usuarios, oculta y pública).", + "Expired" : "Caducidad", + "Expires %n" : "Finaliza el %n", + "Expires never" : "No caduca nunca", + "Anonymous form" : "Votación anónima", + "Usernames hidden to Owner" : "Nombres de usuario ocultos al propietario", + "Usernames visible to Owner" : "Nombres de usuario visibles al propietario", + "Group" : "Grupo", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creada", + "Expires" : "Expira", + "Public access" : "Acceso público", + "Only shared" : "Solo compartida", + "Registered users only" : "Solo para usuarios registrados", + "Hidden form" : "Votación oculta", + "Text form" : "Votación de texto", + "Date form" : "Votación de fechas", + "never" : "nunca", + "Copy Link" : "Copiar enlace", + "Clone form" : "Clonar votación", + "Edit form" : "Editar votación", + "Delete form" : "Borrar encuesta", + "Edit form as admin" : "Editar votación como administrador", + "Delete form as admin" : "Eliminar votación como administrador", + "Link copied to clipboard" : "Enlace copiado al portapapeles", + "Error, while copying link to clipboard" : "Error al copiar enlace al portapapeles", + "_There is %n comment_::_There are %n comments_" : ["Hay %n comentario","Hay %n comentarios"], + "Share with" : "Compartir con", + "Form description" : "Descripción de la votación", + "Description" : "Descripción", + "Vote options" : "Opciones para los votos", + "Event schedule" : "Programar evento", + "Text based" : "Basada en texto", + "Shift dates" : "Cambiar fechas", + "Shift all dates for " : "Cambiar todas las fechas por", + "Add option" : "Añadir opción", + "You are editing in admin mode" : "Estás editando en modo administrador", + "Configuration" : "Configuración", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "La configuración está bloqueada. Cambiar las opciones puede resultar en un comportamiento no deseado, pero puedes desbloquearla de todas formas.", + "Unlock configuration " : "Desbloquear configuracioń", + "Form type" : "Tipo de votación", + "Form configurations" : "Configuraciones de la votación", + "Allow \"maybe\" vote" : "Permitir voto \"quizás\"", + "Hide user names for admin" : "Esconder los nombres de usuario al administrador", + "hidden" : "oculta", + "Name of user or group" : "Nombre de usuario o grupo", + "Create new form" : "Crear nueva votación", + "Writing form" : "Votación por escrito", + "Update form" : "Actualizar votación", + "Expiration date" : "Fecha de finalización", + "Click to add a date" : "Pulsa para añadir una fecha", + "Shift all date options" : "Cambiar todas las opciones de fechas", + "Cancel" : "Cancelar", + "Apply" : "Aplicar", + "Title must not be empty!" : "¡El título no puede estar vacío!", + "%n successfully saved" : "%nguardado con éxito", + "Error on saving form, see console" : "Error al guardar la votación, ver la consola", + "Clone of %n" : "Clonada de %n", + "New" : "Nueva", + "Click here to add a form" : "Pulsa aquí para añadir una votación", + "Do you want to delete \"%n\"?" : "¿Quieres eliminar \"%n\"?", + "No, keep form." : "No, mantener votación.", + "Yes, delete form." : "Sí, eliminar votación.", + "Form \"%n\" deleted" : "Votación \"%n\" eliminada", + "Error while deleting Form \"%n\"" : "Error al eliminar votación \"%n\"", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permiso para ver esta votación o la votación no existe.", + "You are not allowed to edit this form or the form does not exist." : "No puedes editar esta encuesta, o la encuesta no existe.", + "You are either not allowed to delete this form or it doesn't exist." : "O no estás autorizado para eliminar esta encuesta o no existe.", + "No description provided." : "No se ha proporcionado descripción.", + "The form expired on %s. Voting is disabled, but you can still comment." : "La votación caducó en %s. No se puede votar, pero todavía puedes comentar.", + "Switch all options at once" : "Cambiar todas las opciones de una vez", + "Your name here" : "Tu nombre aquí", + "Say yes to all" : "Decir Sí a todo", + "Reset all (say no)" : "Restablecer todo (decir No)", + "Say maybe to all" : "Decir Quizás a todo", + "This form was updated since your last visit. Please check your votes." : "Esta votación se ha actualizado desde tu última visita. Por favor, comprueba tus votos.", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir correo con notificaciones sobre la actividad", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Caduca el %s", + "Invitation access" : "Acceso por invitación", + "Anononymous form" : "Encuenta anónima", + "Click to get link" : "Clic para conseguir un enlace", + "Edit Form" : "Editar encuesta", + "Form expired" : "La votación ha caducado", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o...", + "New comment …" : "Nuevo comentario...", + "No comments yet. Be the first." : "Todavía no hay comentarios. Sé el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es_CL.js b/l10n/es_CL.js new file mode 100644 index 0000000..dcb9349 --- /dev/null +++ b/l10n/es_CL.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_CL.json b/l10n/es_CL.json new file mode 100644 index 0000000..d1ae08e --- /dev/null +++ b/l10n/es_CL.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es_CO.js b/l10n/es_CO.js new file mode 100644 index 0000000..dcb9349 --- /dev/null +++ b/l10n/es_CO.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_CO.json b/l10n/es_CO.json new file mode 100644 index 0000000..d1ae08e --- /dev/null +++ b/l10n/es_CO.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es_CR.js b/l10n/es_CR.js new file mode 100644 index 0000000..dcb9349 --- /dev/null +++ b/l10n/es_CR.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_CR.json b/l10n/es_CR.json new file mode 100644 index 0000000..d1ae08e --- /dev/null +++ b/l10n/es_CR.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es_DO.js b/l10n/es_DO.js new file mode 100644 index 0000000..dcb9349 --- /dev/null +++ b/l10n/es_DO.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_DO.json b/l10n/es_DO.json new file mode 100644 index 0000000..d1ae08e --- /dev/null +++ b/l10n/es_DO.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es_EC.js b/l10n/es_EC.js new file mode 100644 index 0000000..dcb9349 --- /dev/null +++ b/l10n/es_EC.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_EC.json b/l10n/es_EC.json new file mode 100644 index 0000000..d1ae08e --- /dev/null +++ b/l10n/es_EC.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es_GT.js b/l10n/es_GT.js new file mode 100644 index 0000000..dcb9349 --- /dev/null +++ b/l10n/es_GT.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_GT.json b/l10n/es_GT.json new file mode 100644 index 0000000..d1ae08e --- /dev/null +++ b/l10n/es_GT.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es_MX.js b/l10n/es_MX.js new file mode 100644 index 0000000..f98048c --- /dev/null +++ b/l10n/es_MX.js @@ -0,0 +1,53 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Una aplicación de encuestas, similar a doodle/dudle con la opción de restringir el acceso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Una aplicación de encuestas, similar a doodle/dudle con la opción de restringir el acceso (solo miembros, grupos/usuarios, oculto o público).", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_MX.json b/l10n/es_MX.json new file mode 100644 index 0000000..530360d --- /dev/null +++ b/l10n/es_MX.json @@ -0,0 +1,51 @@ +{ "translations": { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Una aplicación de encuestas, similar a doodle/dudle con la opción de restringir el acceso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Una aplicación de encuestas, similar a doodle/dudle con la opción de restringir el acceso (solo miembros, grupos/usuarios, oculto o público).", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es_SV.js b/l10n/es_SV.js new file mode 100644 index 0000000..dcb9349 --- /dev/null +++ b/l10n/es_SV.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_SV.json b/l10n/es_SV.json new file mode 100644 index 0000000..d1ae08e --- /dev/null +++ b/l10n/es_SV.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "¡Copiado!", + "Copy" : "Copiar", + "Not supported!" : "¡No soportado!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "No estás registrado.\nPor favor ingresa tu nombre para votar\n(al menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor agrega algo de texto a tu comentario antes de enviarlo. ", + "An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó", + "Forms" : "Encuestas", + "Forms App - New Activity" : "Aplicación de Encuestas - Nueva Actividad", + "just now" : "justo ahora", + "Expired" : "Expirado", + "Expires never" : "Nunca expira", + "Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño", + "Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Expira", + "Copy Link" : "Copiar Liga", + "Delete form" : "Borrar encuesta", + "Description" : "Descripción", + "Create new form" : "Crear nueva encuesta", + "Update form" : "Actualizar encuesta", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ", + "You are not allowed to edit this form or the form does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.", + "No description provided." : "No se proporcionó una descripción. ", + "The form expired on %s. Voting is disabled, but you can still comment." : "La encuesta expiró el %s. La votación esta deshabilitada pero aún puedes comentar. ", + "Switch all options at once" : "Cambia todas las opciones a la vez", + "Your name here" : "Tu nombre aquí", + "Vote!" : "¡Vota!", + "Receive notification email on activity" : "Recibir un correo de notificación en actividad ", + "Close details" : "Cerrar detalles", + "Close" : "Cerrar", + "Expires on %s" : "Expira el %s", + "Invitation access" : "Acceso por inivtación", + "Anononymous form" : "Encuesta anónima", + "Click to get link" : "Haz click para obtener una liga", + "Edit Form" : "Editar encuesta", + "Form expired" : "La encuesta expiró", + "Comments" : "Comentarios", + "Login or ..." : "Iniciar sesión o ...", + "New comment …" : "Nuevo comentario ...", + "No comments yet. Be the first." : "No hay comentarios todavia. Se el primero." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/et_EE.js b/l10n/et_EE.js new file mode 100644 index 0000000..a2bc9ed --- /dev/null +++ b/l10n/et_EE.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Kopeeritud!", + "Copy" : "Kopeeri", + "Not supported!" : "Pole toetatud!", + "Press ⌘-C to copy." : "Kopeerimiseks vajuta ⌘+C.", + "Press Ctrl-C to copy." : "Kopeerimiseks vajuta Ctrl+C.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Sa pole registreeritud.\nPalun sisesta oma nimi, et hääletada\n(vähemalt 3 tähemärki)", + "Please add some text to your comment before submitting it." : "Palun lisage kommentaari tekst enne, kui selle postitate.", + "An error occurred, your comment was not posted." : "Tekkis tõrge, sinu kommentaari ei postitatud.", + "Forms" : "Küsitlused", + "Forms App - New Activity" : "Küsitluste rakendus - uus tegevus", + "just now" : "just praegu", + "Expired" : "Aegunud", + "Expires never" : "Ei aegu kunagi", + "Usernames hidden to Owner" : "Kasutajanimed omaniku eest peidetud", + "Usernames visible to Owner" : "Kasutajanimed omanikule nähtavad", + "Title" : "Pealkiri", + "Access" : "Ligipääs", + "Owner" : "Omanik", + "Created" : "Loodud", + "Expires" : "Aegub", + "Copy Link" : "Kopeeri link", + "Delete form" : "Kustuta küsitlus", + "Description" : "Kirjeldus", + "Create new form" : "Loo uus küsitlus", + "Update form" : "Uuenda küsitlust", + "Access denied" : "Ligipääs keelatud", + "You are not allowed to view this form or the form does not exist." : "Sul pole lubatud seda küsitlust vaadata või seda küsitlust pole olemas.", + "You are not allowed to edit this form or the form does not exist." : "Sul pole lubatud seda küsitlust muuta või seda küsitlust pole olemas.", + "No description provided." : "Kirjeldus puudub", + "The form expired on %s. Voting is disabled, but you can still comment." : "Küsitlus aegus %s. Hääletamine pole enam võimalik, kui sa saad ikka kommenteerida.", + "Switch all options at once" : "Muuda kõiki valikuid korraga", + "Your name here" : "Sinu nimi", + "Vote!" : "Hääleta!", + "Receive notification email on activity" : "Teavitused tegevusest e-posti teel", + "Close details" : "Sulge üksikasjad", + "Close" : "Sulge", + "Expires on %s" : "Aegub %s", + "Invitation access" : "Kutsetega ligipääs", + "Anononymous form" : "Anonüümne küsitlus", + "Click to get link" : "Vajuta, et saada link", + "Edit Form" : "Muuda küsitlust", + "Form expired" : "Küsitlus on aegunud", + "Comments" : "Kommentaarid", + "Login or ..." : "Logi sisse või ...", + "New comment …" : "Uus kommentaar ...", + "No comments yet. Be the first." : "Kommentaare veel pole. Ole esimene." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/et_EE.json b/l10n/et_EE.json new file mode 100644 index 0000000..fefb5e3 --- /dev/null +++ b/l10n/et_EE.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "Kopeeritud!", + "Copy" : "Kopeeri", + "Not supported!" : "Pole toetatud!", + "Press ⌘-C to copy." : "Kopeerimiseks vajuta ⌘+C.", + "Press Ctrl-C to copy." : "Kopeerimiseks vajuta Ctrl+C.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Sa pole registreeritud.\nPalun sisesta oma nimi, et hääletada\n(vähemalt 3 tähemärki)", + "Please add some text to your comment before submitting it." : "Palun lisage kommentaari tekst enne, kui selle postitate.", + "An error occurred, your comment was not posted." : "Tekkis tõrge, sinu kommentaari ei postitatud.", + "Forms" : "Küsitlused", + "Forms App - New Activity" : "Küsitluste rakendus - uus tegevus", + "just now" : "just praegu", + "Expired" : "Aegunud", + "Expires never" : "Ei aegu kunagi", + "Usernames hidden to Owner" : "Kasutajanimed omaniku eest peidetud", + "Usernames visible to Owner" : "Kasutajanimed omanikule nähtavad", + "Title" : "Pealkiri", + "Access" : "Ligipääs", + "Owner" : "Omanik", + "Created" : "Loodud", + "Expires" : "Aegub", + "Copy Link" : "Kopeeri link", + "Delete form" : "Kustuta küsitlus", + "Description" : "Kirjeldus", + "Create new form" : "Loo uus küsitlus", + "Update form" : "Uuenda küsitlust", + "Access denied" : "Ligipääs keelatud", + "You are not allowed to view this form or the form does not exist." : "Sul pole lubatud seda küsitlust vaadata või seda küsitlust pole olemas.", + "You are not allowed to edit this form or the form does not exist." : "Sul pole lubatud seda küsitlust muuta või seda küsitlust pole olemas.", + "No description provided." : "Kirjeldus puudub", + "The form expired on %s. Voting is disabled, but you can still comment." : "Küsitlus aegus %s. Hääletamine pole enam võimalik, kui sa saad ikka kommenteerida.", + "Switch all options at once" : "Muuda kõiki valikuid korraga", + "Your name here" : "Sinu nimi", + "Vote!" : "Hääleta!", + "Receive notification email on activity" : "Teavitused tegevusest e-posti teel", + "Close details" : "Sulge üksikasjad", + "Close" : "Sulge", + "Expires on %s" : "Aegub %s", + "Invitation access" : "Kutsetega ligipääs", + "Anononymous form" : "Anonüümne küsitlus", + "Click to get link" : "Vajuta, et saada link", + "Edit Form" : "Muuda küsitlust", + "Form expired" : "Küsitlus on aegunud", + "Comments" : "Kommentaarid", + "Login or ..." : "Logi sisse või ...", + "New comment …" : "Uus kommentaar ...", + "No comments yet. Be the first." : "Kommentaare veel pole. Ole esimene." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/eu.js b/l10n/eu.js new file mode 100644 index 0000000..59c8149 --- /dev/null +++ b/l10n/eu.js @@ -0,0 +1,45 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Kopiatua!", + "Copy" : "Kopiatu", + "Press ⌘-C to copy." : "Sakatu ⌘-C kopiatzeko.", + "Press Ctrl-C to copy." : "Sakatu Ctrl-C kopiatzeko.", + "Forms" : "Inkestak", + "Go to form" : "Joan inkestara", + "just now" : "oraintxe bertan", + "Expired" : "Iraungita", + "Expires never" : "Ez du inoiz iraungitzen", + "Group" : "Taldea", + "Title" : "Izenburua", + "Access" : "Sarbidea", + "Owner" : "Jabea", + "Created" : "Sorrera", + "Expires" : "Iraungitzea", + "Copy Link" : "Kopiatu esteka", + "Edit form" : "Editatu inkesta", + "Description" : "Deskripzioa", + "Vote options" : "Bozkatze aukerak", + "Text based" : "Testuan oinarritua", + "Add option" : "Gehitu aukera", + "Configuration" : "Konfigurazioa", + "Unlock configuration " : "Desblokeatu konfigurazioa", + "Form type" : "Inkesta mota", + "hidden" : "ezkutua", + "Update form" : "Eguneratu inkesta", + "New" : "Berria", + "Access denied" : "Sarbidea ukatua", + "Your name here" : "Zure izena hemen", + "Vote!" : "Bozkatu!", + "Close details" : "Itxi xehetasunak", + "Close" : "Itxi", + "Invitation access" : "Gonbidapen bidezko sarbidea", + "Click to get link" : "Egin klik esteka jasotzeko", + "Edit Form" : "Editatu inkesta", + "Form expired" : "Inkesta iraungita", + "Comments" : "Iruzkinak", + "Login or ..." : "Hasi saioa edo ...", + "New comment …" : "Iruzkin berria …", + "No comments yet. Be the first." : "Oraindik ez dago iruzkinik, izan zaitez lehena." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/eu.json b/l10n/eu.json new file mode 100644 index 0000000..d443311 --- /dev/null +++ b/l10n/eu.json @@ -0,0 +1,43 @@ +{ "translations": { + "Copied!" : "Kopiatua!", + "Copy" : "Kopiatu", + "Press ⌘-C to copy." : "Sakatu ⌘-C kopiatzeko.", + "Press Ctrl-C to copy." : "Sakatu Ctrl-C kopiatzeko.", + "Forms" : "Inkestak", + "Go to form" : "Joan inkestara", + "just now" : "oraintxe bertan", + "Expired" : "Iraungita", + "Expires never" : "Ez du inoiz iraungitzen", + "Group" : "Taldea", + "Title" : "Izenburua", + "Access" : "Sarbidea", + "Owner" : "Jabea", + "Created" : "Sorrera", + "Expires" : "Iraungitzea", + "Copy Link" : "Kopiatu esteka", + "Edit form" : "Editatu inkesta", + "Description" : "Deskripzioa", + "Vote options" : "Bozkatze aukerak", + "Text based" : "Testuan oinarritua", + "Add option" : "Gehitu aukera", + "Configuration" : "Konfigurazioa", + "Unlock configuration " : "Desblokeatu konfigurazioa", + "Form type" : "Inkesta mota", + "hidden" : "ezkutua", + "Update form" : "Eguneratu inkesta", + "New" : "Berria", + "Access denied" : "Sarbidea ukatua", + "Your name here" : "Zure izena hemen", + "Vote!" : "Bozkatu!", + "Close details" : "Itxi xehetasunak", + "Close" : "Itxi", + "Invitation access" : "Gonbidapen bidezko sarbidea", + "Click to get link" : "Egin klik esteka jasotzeko", + "Edit Form" : "Editatu inkesta", + "Form expired" : "Inkesta iraungita", + "Comments" : "Iruzkinak", + "Login or ..." : "Hasi saioa edo ...", + "New comment …" : "Iruzkin berria …", + "No comments yet. Be the first." : "Oraindik ez dago iruzkinik, izan zaitez lehena." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/fi.js b/l10n/fi.js new file mode 100644 index 0000000..b7104c8 --- /dev/null +++ b/l10n/fi.js @@ -0,0 +1,96 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Haluatko varmasti poistaa tämän kyselyn?", + "Copied!" : "Kopioitu!", + "Copy" : "Kopioi", + "Not supported!" : "Ei tuettu!", + "Press ⌘-C to copy." : "Paina ⌘-C kopioidaksesi.", + "Press Ctrl-C to copy." : "Paina Ctrl-C kopioidaksesi.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Et ole rekisteröitynyt.\nKirjoita nimesi äänestääksesi\n(vähintään kolme merkkiä).", + "Please add some text to your comment before submitting it." : "Lisää tekstiä kommenttiisi, ennen kuin lähetät sen.", + "An error occurred, your comment was not posted." : "Tapahtui virhe, kommenttiasi ei lähetetty.", + "Forms" : "Kyselyt", + "{user} participated in the form \"{title}\"" : "{user} osallistui kyselyyn \"{title}\"", + "Go to form" : "Siirry kyselyyn", + "just now" : "juuri nyt", + "Expired" : "Vanhentunut", + "Expires %n" : "Vanhenee %n", + "Expires never" : "Ei vanhene koskaan", + "Anonymous form" : "Anonyymi kysely", + "Usernames hidden to Owner" : "Käyttäjänimet piilotettu omistajalta", + "Usernames visible to Owner" : "Käyttäjänimet näkyvissä omistajalle", + "Group" : "Ryhmä", + "Title" : "Nimi", + "Access" : "Käyttöoikeus", + "Owner" : "Omistaja", + "Created" : "Luonut", + "Expires" : "Vanhenee", + "Public access" : "Avoin pääsy", + "Only shared" : "Vain jaettu", + "Registered users only" : "Vain rekisteröityneet käyttäjät", + "Hidden form" : "Piilotettu kysely", + "never" : "ei koskaan", + "Copy Link" : "Kopioi linkki", + "Clone form" : "Kloonaa kysely", + "Edit form" : "Muokkaa kyselyä", + "Delete form" : "Poista kysely", + "Edit form as admin" : "Muokkaa kyselyä ylläpitäjänä", + "Delete form as admin" : "Poista kysely ylläpitäjänä", + "Link copied to clipboard" : "Linkki kopioitu leikepöydälle", + "_There is %n comment_::_There are %n comments_" : ["%n kommentti","%n kommenttia"], + "Share with" : "Jaa", + "Form description" : "Kyselyn kuvaus", + "Description" : "Kuvaus", + "Vote options" : "Äänestysvalinnat", + "Add option" : "Lisää valinta", + "You are editing in admin mode" : "Muokkaat ylläpitotilassa", + "Configuration" : "Asetukset", + "Unlock configuration " : "Avaa asetusten lukitus", + "Form type" : "Kyselyn tyyppi", + "Form configurations" : "Kyselyn asetukset", + "Allow \"maybe\" vote" : "Salli \"ehkä\"-ääni", + "hidden" : "piilotettu", + "Name of user or group" : "Käyttäjän tai ryhmän nimi", + "Create new form" : "Luo uusi kysely", + "Update form" : "Päivitä kysely", + "Expiration date" : "Vanhenemispäivä", + "Click to add a date" : "Napsauta lisätäksesi päivän", + "Cancel" : "Peruuta", + "Apply" : "Toteuta", + "%n successfully saved" : "%n tallennettu onnistuneesti", + "Clone of %n" : "Kyselyn %n klooni", + "New" : "Uusi", + "Click here to add a form" : "Napsauta tästä lisätäksesi kyselyn", + "Do you want to delete \"%n\"?" : "Haluatko että \"%n\" poistetaan?", + "No, keep form." : "Ei, säilytä kysely", + "Yes, delete form." : "Kyllä, poista kysely", + "Form \"%n\" deleted" : "Kysely \"%n\" poistettu", + "Error while deleting Form \"%n\"" : "Virhe poistaessa kyselyä \"%n\"", + "Access denied" : "Ei käyttöoikeutta", + "You are not allowed to view this form or the form does not exist." : "Sinulla ei ole käyttöoikeutta tähän kyselyyn tai kyselyä ei ole olemassa.", + "You are not allowed to edit this form or the form does not exist." : "Sinulla ei ole oikeutta muokata tätä kyselyä tai kyselyä ei ole olemassa.", + "You are either not allowed to delete this form or it doesn't exist." : "Sinulla ei joko ole oikeutta poistaa tätä kyselyä tai sitä ei ole olemassa.", + "No description provided." : "Kuvausta ei määritetty.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Kysely päättyi %s. Kyselyyn vastaaminen ei ole mahdollista, mutta voit silti kommentoida.", + "Your name here" : "Nimesi tähän", + "Say yes to all" : "Vastaa kyllä kaikkiin", + "Reset all (say no)" : "Nollaa kaikki (sano ei)", + "Say maybe to all" : "Vastaa ehkä kaikkiin", + "This form was updated since your last visit. Please check your votes." : "Tämä kysely päivitettiin viimeisimmän käyntikertasi jälkeen. Tarkista äänesi.", + "Vote!" : "Äänestä!", + "Receive notification email on activity" : "Vastaanota sähköposti-ilmoituksia toimista", + "Close details" : "Sulje tiedot", + "Close" : "Sulje", + "Expires on %s" : "Vanhenee %s", + "Invitation access" : "Kutsupääsy", + "Anononymous form" : "Anonyymi kysely", + "Click to get link" : "Napsauta saadaksesi linkin", + "Edit Form" : "Muokkaa kyselyä", + "Form expired" : "Äänestys päättyi", + "Comments" : "Kommentit", + "Login or ..." : "Kirjaudu tai ...", + "New comment …" : "Uusi kommentti…", + "No comments yet. Be the first." : "Ei vielä kommentteja. Ole ensimmäinen." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/fi.json b/l10n/fi.json new file mode 100644 index 0000000..e176393 --- /dev/null +++ b/l10n/fi.json @@ -0,0 +1,94 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Haluatko varmasti poistaa tämän kyselyn?", + "Copied!" : "Kopioitu!", + "Copy" : "Kopioi", + "Not supported!" : "Ei tuettu!", + "Press ⌘-C to copy." : "Paina ⌘-C kopioidaksesi.", + "Press Ctrl-C to copy." : "Paina Ctrl-C kopioidaksesi.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Et ole rekisteröitynyt.\nKirjoita nimesi äänestääksesi\n(vähintään kolme merkkiä).", + "Please add some text to your comment before submitting it." : "Lisää tekstiä kommenttiisi, ennen kuin lähetät sen.", + "An error occurred, your comment was not posted." : "Tapahtui virhe, kommenttiasi ei lähetetty.", + "Forms" : "Kyselyt", + "{user} participated in the form \"{title}\"" : "{user} osallistui kyselyyn \"{title}\"", + "Go to form" : "Siirry kyselyyn", + "just now" : "juuri nyt", + "Expired" : "Vanhentunut", + "Expires %n" : "Vanhenee %n", + "Expires never" : "Ei vanhene koskaan", + "Anonymous form" : "Anonyymi kysely", + "Usernames hidden to Owner" : "Käyttäjänimet piilotettu omistajalta", + "Usernames visible to Owner" : "Käyttäjänimet näkyvissä omistajalle", + "Group" : "Ryhmä", + "Title" : "Nimi", + "Access" : "Käyttöoikeus", + "Owner" : "Omistaja", + "Created" : "Luonut", + "Expires" : "Vanhenee", + "Public access" : "Avoin pääsy", + "Only shared" : "Vain jaettu", + "Registered users only" : "Vain rekisteröityneet käyttäjät", + "Hidden form" : "Piilotettu kysely", + "never" : "ei koskaan", + "Copy Link" : "Kopioi linkki", + "Clone form" : "Kloonaa kysely", + "Edit form" : "Muokkaa kyselyä", + "Delete form" : "Poista kysely", + "Edit form as admin" : "Muokkaa kyselyä ylläpitäjänä", + "Delete form as admin" : "Poista kysely ylläpitäjänä", + "Link copied to clipboard" : "Linkki kopioitu leikepöydälle", + "_There is %n comment_::_There are %n comments_" : ["%n kommentti","%n kommenttia"], + "Share with" : "Jaa", + "Form description" : "Kyselyn kuvaus", + "Description" : "Kuvaus", + "Vote options" : "Äänestysvalinnat", + "Add option" : "Lisää valinta", + "You are editing in admin mode" : "Muokkaat ylläpitotilassa", + "Configuration" : "Asetukset", + "Unlock configuration " : "Avaa asetusten lukitus", + "Form type" : "Kyselyn tyyppi", + "Form configurations" : "Kyselyn asetukset", + "Allow \"maybe\" vote" : "Salli \"ehkä\"-ääni", + "hidden" : "piilotettu", + "Name of user or group" : "Käyttäjän tai ryhmän nimi", + "Create new form" : "Luo uusi kysely", + "Update form" : "Päivitä kysely", + "Expiration date" : "Vanhenemispäivä", + "Click to add a date" : "Napsauta lisätäksesi päivän", + "Cancel" : "Peruuta", + "Apply" : "Toteuta", + "%n successfully saved" : "%n tallennettu onnistuneesti", + "Clone of %n" : "Kyselyn %n klooni", + "New" : "Uusi", + "Click here to add a form" : "Napsauta tästä lisätäksesi kyselyn", + "Do you want to delete \"%n\"?" : "Haluatko että \"%n\" poistetaan?", + "No, keep form." : "Ei, säilytä kysely", + "Yes, delete form." : "Kyllä, poista kysely", + "Form \"%n\" deleted" : "Kysely \"%n\" poistettu", + "Error while deleting Form \"%n\"" : "Virhe poistaessa kyselyä \"%n\"", + "Access denied" : "Ei käyttöoikeutta", + "You are not allowed to view this form or the form does not exist." : "Sinulla ei ole käyttöoikeutta tähän kyselyyn tai kyselyä ei ole olemassa.", + "You are not allowed to edit this form or the form does not exist." : "Sinulla ei ole oikeutta muokata tätä kyselyä tai kyselyä ei ole olemassa.", + "You are either not allowed to delete this form or it doesn't exist." : "Sinulla ei joko ole oikeutta poistaa tätä kyselyä tai sitä ei ole olemassa.", + "No description provided." : "Kuvausta ei määritetty.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Kysely päättyi %s. Kyselyyn vastaaminen ei ole mahdollista, mutta voit silti kommentoida.", + "Your name here" : "Nimesi tähän", + "Say yes to all" : "Vastaa kyllä kaikkiin", + "Reset all (say no)" : "Nollaa kaikki (sano ei)", + "Say maybe to all" : "Vastaa ehkä kaikkiin", + "This form was updated since your last visit. Please check your votes." : "Tämä kysely päivitettiin viimeisimmän käyntikertasi jälkeen. Tarkista äänesi.", + "Vote!" : "Äänestä!", + "Receive notification email on activity" : "Vastaanota sähköposti-ilmoituksia toimista", + "Close details" : "Sulje tiedot", + "Close" : "Sulje", + "Expires on %s" : "Vanhenee %s", + "Invitation access" : "Kutsupääsy", + "Anononymous form" : "Anonyymi kysely", + "Click to get link" : "Napsauta saadaksesi linkin", + "Edit Form" : "Muokkaa kyselyä", + "Form expired" : "Äänestys päättyi", + "Comments" : "Kommentit", + "Login or ..." : "Kirjaudu tai ...", + "New comment …" : "Uusi kommentti…", + "No comments yet. Be the first." : "Ei vielä kommentteja. Ole ensimmäinen." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/fr.js b/l10n/fr.js new file mode 100644 index 0000000..d305a7e --- /dev/null +++ b/l10n/fr.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Voulez-vous vraiment supprimer ce nouveau sondage ?", + "Copied!" : "Copié !", + "Copy" : "Copier", + "Not supported!" : "Non pris en charge !", + "Press ⌘-C to copy." : "Appuyez sur ⌘-C pour copier.", + "Press Ctrl-C to copy." : "Appuyez sur Ctrl-C pour copier.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Vous n’êtes pas enregistré.\nMerci d'entrer votre nom pour voter\n(au moins 3 caractères)", + "Please add some text to your comment before submitting it." : "Merci d'ajouter du texte à votre commentaire avant de le soumettre", + "An error occurred, your comment was not posted." : "Une erreur s'est produite, votre commentaire n'a pas été publié.", + "Forms" : "Sondages", + "Forms App - New Activity" : "Application de sondages - Nouvelle activité", + "{user} participated in the form \"{title}\"" : "{user} a participé au sondage \"{title}\"", + "Go to form" : "Accéder au sondage", + "just now" : "à l'instant", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Une application de sondage, similaire à Doodle, avec la possibilité de restreindre l'accès.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Une application de sondage, similaire à Doodle, avec la possibilité de restreindre l'accès (membres, certain groupes/utilisateurs, caché et public).", + "Expired" : "Expiré", + "Expires %n" : "Expire le %n", + "Expires never" : "N'expire jamais", + "Anonymous form" : "Sondage anonyme", + "Usernames hidden to Owner" : "Noms d'utilisateur cachés au Propriétaire", + "Usernames visible to Owner" : "Noms d'utilisateur visibles par le Propriétaire", + "Group" : "Groupe", + "Title" : "Titre", + "Access" : "Accès", + "Owner" : "Propriétaire", + "Created" : "Créé", + "Expires" : "Expirera", + "Public access" : "Accès public", + "Only shared" : "Partagé seulement", + "Registered users only" : "Uniquement les utilisateurs enregistrés", + "Hidden form" : "Sondage masqué", + "Text form" : "Sondage texte", + "Date form" : "Sondage sur des dates", + "never" : "jamais", + "Copy Link" : "Copier le lien", + "Clone form" : "Dupliquer le sondage", + "Edit form" : "Modifier le sondage", + "Delete form" : "Supprimer le sondage", + "Edit form as admin" : "Modifier le sondage en tant qu'administrateur", + "Delete form as admin" : "Supprimer le sondage en tant qu'administrateur", + "Link copied to clipboard" : "Lien copié dans le presse-papier", + "Error, while copying link to clipboard" : "Erreur lors de la copie du lien dans le presse-papier", + "_There is %n comment_::_There are %n comments_" : ["Il y a %n commentaire","Il y a %n commentaires"], + "Share with" : "Partager avec", + "Form description" : "Description du sondage", + "Description" : "Description", + "Vote options" : "Options de vote", + "Event schedule" : "Planifier", + "Text based" : "Basé sur le texte", + "Shift dates" : "Décaler les dates", + "Shift all dates for " : "Décaler toutes les dates de", + "Add option" : "Ajouter une option", + "You are editing in admin mode" : "Vous réalisez les modifications en tant qu'administrateur", + "Configuration" : "Configuration", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "La configuration est verrouillée. Changer les options peut entraîner un comportement indésirable, mais vous pouvez quand même la déverrouiller.", + "Unlock configuration " : "Déverrouiller la configuration", + "Form type" : "Type de sondage", + "Form configurations" : "Configurations du sondage", + "Allow \"maybe\" vote" : "Autoriser la réponse \"Peut-être\"", + "Hide user names for admin" : "Masquer les noms d'utilisateurs à l'administrateur", + "hidden" : "masqué", + "Name of user or group" : "Nom d'utilisateur ou de groupe", + "Create new form" : "Créer un nouveau sondage", + "Writing form" : "Rédiger le sondage", + "Update form" : "Mettre à jour le sondage", + "Expiration date" : "Date d'expiration", + "Click to add a date" : "Cliquer pour ajouter une date", + "Shift all date options" : "Options pour décaler toutes les dates", + "Cancel" : "Annuler", + "Apply" : "Appliquer", + "Title must not be empty!" : "Le titre ne doit pas être vide !", + "%n successfully saved" : "%n enregistré avec succès", + "Error on saving form, see console" : "Erreur à l'enregistrement du sondage, consultez la console\n ", + "Clone of %n" : "Duplication de %n", + "New" : "Nouveau", + "Click here to add a form" : "Cliquez ici pour créer un sondage", + "Do you want to delete \"%n\"?" : "Souhaitez-vous supprimer \"%n\" ?", + "No, keep form." : "Non, conserver le sondage.", + "Yes, delete form." : "Oui, supprimer le sondage.", + "Form \"%n\" deleted" : "Sondage \"%n\" supprimé", + "Error while deleting Form \"%n\"" : "Erreur à la suppression du sondage \"%n\"", + "Access denied" : "Accès refusé", + "You are not allowed to view this form or the form does not exist." : "Vous n’êtes pas autorisé à voir ce sondage ou ce sondage n'existe plus.", + "You are not allowed to edit this form or the form does not exist." : "Vous n’êtes pas autorisé à modifier ce sondage ou ce sondage n'existe plus.", + "You are either not allowed to delete this form or it doesn't exist." : "Soit vous n'avez pas les droits pour supprimer ce sondage, soit il n'existe pas.", + "No description provided." : "Aucune description n'a été fournie.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Le sondage a expiré le %s. La possibilité de voter est désactivée, mais vous pouvez toujours commenter.", + "Switch all options at once" : "Changer toutes les options en une seule fois", + "Your name here" : "Votre nom ici", + "Say yes to all" : "Répondre Oui pour tout", + "Reset all (say no)" : "Effacer tout (répondre non)", + "Say maybe to all" : "Répondre Peut-être à tout", + "This form was updated since your last visit. Please check your votes." : "Ce sondage a été mis à jour depuis votre dernière visite. Veuillez vérifier vos votes.", + "Vote!" : "Votez !", + "Receive notification email on activity" : "Recevoir une notification par courriel en cas d'activité", + "Close details" : "Fermer les détails", + "Close" : "Fermer", + "Expires on %s" : "Expire le %s", + "Invitation access" : "Accès par invitation", + "Anononymous form" : "Sondage anonyme", + "Click to get link" : "Cliquez pour obtenir le lien", + "Edit Form" : "Modifier le sondage", + "Form expired" : "Sondage expiré", + "Comments" : "Commentaires", + "Login or ..." : "Se connecter ou...", + "New comment …" : "Nouveau commentaire…", + "No comments yet. Be the first." : "Pas encore de commentaire. Soyez le premier." +}, +"nplurals=2; plural=(n > 1);"); diff --git a/l10n/fr.json b/l10n/fr.json new file mode 100644 index 0000000..4b3c9c2 --- /dev/null +++ b/l10n/fr.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Voulez-vous vraiment supprimer ce nouveau sondage ?", + "Copied!" : "Copié !", + "Copy" : "Copier", + "Not supported!" : "Non pris en charge !", + "Press ⌘-C to copy." : "Appuyez sur ⌘-C pour copier.", + "Press Ctrl-C to copy." : "Appuyez sur Ctrl-C pour copier.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Vous n’êtes pas enregistré.\nMerci d'entrer votre nom pour voter\n(au moins 3 caractères)", + "Please add some text to your comment before submitting it." : "Merci d'ajouter du texte à votre commentaire avant de le soumettre", + "An error occurred, your comment was not posted." : "Une erreur s'est produite, votre commentaire n'a pas été publié.", + "Forms" : "Sondages", + "Forms App - New Activity" : "Application de sondages - Nouvelle activité", + "{user} participated in the form \"{title}\"" : "{user} a participé au sondage \"{title}\"", + "Go to form" : "Accéder au sondage", + "just now" : "à l'instant", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Une application de sondage, similaire à Doodle, avec la possibilité de restreindre l'accès.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Une application de sondage, similaire à Doodle, avec la possibilité de restreindre l'accès (membres, certain groupes/utilisateurs, caché et public).", + "Expired" : "Expiré", + "Expires %n" : "Expire le %n", + "Expires never" : "N'expire jamais", + "Anonymous form" : "Sondage anonyme", + "Usernames hidden to Owner" : "Noms d'utilisateur cachés au Propriétaire", + "Usernames visible to Owner" : "Noms d'utilisateur visibles par le Propriétaire", + "Group" : "Groupe", + "Title" : "Titre", + "Access" : "Accès", + "Owner" : "Propriétaire", + "Created" : "Créé", + "Expires" : "Expirera", + "Public access" : "Accès public", + "Only shared" : "Partagé seulement", + "Registered users only" : "Uniquement les utilisateurs enregistrés", + "Hidden form" : "Sondage masqué", + "Text form" : "Sondage texte", + "Date form" : "Sondage sur des dates", + "never" : "jamais", + "Copy Link" : "Copier le lien", + "Clone form" : "Dupliquer le sondage", + "Edit form" : "Modifier le sondage", + "Delete form" : "Supprimer le sondage", + "Edit form as admin" : "Modifier le sondage en tant qu'administrateur", + "Delete form as admin" : "Supprimer le sondage en tant qu'administrateur", + "Link copied to clipboard" : "Lien copié dans le presse-papier", + "Error, while copying link to clipboard" : "Erreur lors de la copie du lien dans le presse-papier", + "_There is %n comment_::_There are %n comments_" : ["Il y a %n commentaire","Il y a %n commentaires"], + "Share with" : "Partager avec", + "Form description" : "Description du sondage", + "Description" : "Description", + "Vote options" : "Options de vote", + "Event schedule" : "Planifier", + "Text based" : "Basé sur le texte", + "Shift dates" : "Décaler les dates", + "Shift all dates for " : "Décaler toutes les dates de", + "Add option" : "Ajouter une option", + "You are editing in admin mode" : "Vous réalisez les modifications en tant qu'administrateur", + "Configuration" : "Configuration", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "La configuration est verrouillée. Changer les options peut entraîner un comportement indésirable, mais vous pouvez quand même la déverrouiller.", + "Unlock configuration " : "Déverrouiller la configuration", + "Form type" : "Type de sondage", + "Form configurations" : "Configurations du sondage", + "Allow \"maybe\" vote" : "Autoriser la réponse \"Peut-être\"", + "Hide user names for admin" : "Masquer les noms d'utilisateurs à l'administrateur", + "hidden" : "masqué", + "Name of user or group" : "Nom d'utilisateur ou de groupe", + "Create new form" : "Créer un nouveau sondage", + "Writing form" : "Rédiger le sondage", + "Update form" : "Mettre à jour le sondage", + "Expiration date" : "Date d'expiration", + "Click to add a date" : "Cliquer pour ajouter une date", + "Shift all date options" : "Options pour décaler toutes les dates", + "Cancel" : "Annuler", + "Apply" : "Appliquer", + "Title must not be empty!" : "Le titre ne doit pas être vide !", + "%n successfully saved" : "%n enregistré avec succès", + "Error on saving form, see console" : "Erreur à l'enregistrement du sondage, consultez la console\n ", + "Clone of %n" : "Duplication de %n", + "New" : "Nouveau", + "Click here to add a form" : "Cliquez ici pour créer un sondage", + "Do you want to delete \"%n\"?" : "Souhaitez-vous supprimer \"%n\" ?", + "No, keep form." : "Non, conserver le sondage.", + "Yes, delete form." : "Oui, supprimer le sondage.", + "Form \"%n\" deleted" : "Sondage \"%n\" supprimé", + "Error while deleting Form \"%n\"" : "Erreur à la suppression du sondage \"%n\"", + "Access denied" : "Accès refusé", + "You are not allowed to view this form or the form does not exist." : "Vous n’êtes pas autorisé à voir ce sondage ou ce sondage n'existe plus.", + "You are not allowed to edit this form or the form does not exist." : "Vous n’êtes pas autorisé à modifier ce sondage ou ce sondage n'existe plus.", + "You are either not allowed to delete this form or it doesn't exist." : "Soit vous n'avez pas les droits pour supprimer ce sondage, soit il n'existe pas.", + "No description provided." : "Aucune description n'a été fournie.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Le sondage a expiré le %s. La possibilité de voter est désactivée, mais vous pouvez toujours commenter.", + "Switch all options at once" : "Changer toutes les options en une seule fois", + "Your name here" : "Votre nom ici", + "Say yes to all" : "Répondre Oui pour tout", + "Reset all (say no)" : "Effacer tout (répondre non)", + "Say maybe to all" : "Répondre Peut-être à tout", + "This form was updated since your last visit. Please check your votes." : "Ce sondage a été mis à jour depuis votre dernière visite. Veuillez vérifier vos votes.", + "Vote!" : "Votez !", + "Receive notification email on activity" : "Recevoir une notification par courriel en cas d'activité", + "Close details" : "Fermer les détails", + "Close" : "Fermer", + "Expires on %s" : "Expire le %s", + "Invitation access" : "Accès par invitation", + "Anononymous form" : "Sondage anonyme", + "Click to get link" : "Cliquez pour obtenir le lien", + "Edit Form" : "Modifier le sondage", + "Form expired" : "Sondage expiré", + "Comments" : "Commentaires", + "Login or ..." : "Se connecter ou...", + "New comment …" : "Nouveau commentaire…", + "No comments yet. Be the first." : "Pas encore de commentaire. Soyez le premier." +},"pluralForm" :"nplurals=2; plural=(n > 1);" +} \ No newline at end of file diff --git a/l10n/gl.js b/l10n/gl.js new file mode 100644 index 0000000..73e37cb --- /dev/null +++ b/l10n/gl.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Confirma que quere eliminar esta enquisa nova?", + "Copied!" : "Copiado!", + "Copy" : "Copiar", + "Not supported!" : "Non admitido!", + "Press ⌘-C to copy." : "Prema ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Prema Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Non está rexistrado\nIntroduza o seu nome para votar\n(polo menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Debe engadir algún texto ao seu comentario antes de envialo.", + "An error occurred, your comment was not posted." : "Produciuse un erro, o seu comentario non se publicou.", + "Forms" : "Enquisas", + "Forms App - New Activity" : "Aplicativo de enquisas – Actividade nova", + "{user} participated in the form \"{title}\"" : "{user} participou na enquisa «{title}»", + "Go to form" : "Ir á enquisa", + "just now" : "agora mesmo", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Un aplicativo de enquisas, semellante a doodle/dudle, coa posibilidade de restrinxir o acceso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Un aplicativo de enquisas, semellante a doodle/dudle, coa posibilidade de restrinxir o acceso (membros, determinados grupos/usuarios, agachados e públicos).", + "Expired" : "Caducada", + "Expires %n" : "Caduca o %n", + "Expires never" : "Non caduca nunca", + "Anonymous form" : "Enquisa anónima", + "Usernames hidden to Owner" : "Nomes de usuario agachados ao propietario", + "Usernames visible to Owner" : "Nomes de usuario visíbeis para o propietario", + "Group" : "Grupo", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Caduca", + "Public access" : "Acceso público", + "Only shared" : "Só compartida", + "Registered users only" : "Só usuarios rexistrados", + "Hidden form" : "Enquisa agachada ", + "Text form" : "Texto da enquisa", + "Date form" : "Data da enquisa", + "never" : "nunca", + "Copy Link" : "Copiar a ligazón", + "Clone form" : "Clonar a enquisa", + "Edit form" : "Editar a enquisa", + "Delete form" : "Eliminar a enquisa", + "Edit form as admin" : "Editar a enquisa como administrador", + "Delete form as admin" : "Eliminar a enquisa como administrador", + "Link copied to clipboard" : "A ligazón foi copiada no portapapeis.", + "Error, while copying link to clipboard" : "Produciuse un erro ao copiar a ligazón no portapapeis", + "_There is %n comment_::_There are %n comments_" : ["Hai %n comentario","Hai %n comentarios"], + "Share with" : "Compartir con", + "Form description" : "Descrición da enquisa", + "Description" : "Descrición", + "Vote options" : "Opcións de voto", + "Event schedule" : "Axenda de eventos", + "Text based" : "Baseado en texto", + "Shift dates" : "Cambiar as datas", + "Shift all dates for " : "Cambiar todas as datas para", + "Add option" : "Engadir opción", + "You are editing in admin mode" : "Está editando en modo administrador", + "Configuration" : "Configuración", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : " A configuración está bloqueada. Cambiar as opcións pode dar lugar a un comportamento non desexado, aínda así mais pode desbloqueala.", + "Unlock configuration " : "Desbloquear a configuracioń", + "Form type" : "Tipo de enquisa", + "Form configurations" : "Configuracións da enquisa", + "Allow \"maybe\" vote" : "Permitir o voto «quizais»", + "Hide user names for admin" : "Agachar os nomes de usuario ao administrador", + "hidden" : "agachada", + "Name of user or group" : "Nome de usuario ou grupo", + "Create new form" : "Crear unha enquisa nova", + "Writing form" : "Rexistrando a enquisa", + "Update form" : "Actualizar a enquisa", + "Expiration date" : "Data de caducidade", + "Click to add a date" : "Prema para engadir unha data", + "Shift all date options" : "Cambia todas as opcións de data", + "Cancel" : "Cancelar", + "Apply" : "Aplicar", + "Title must not be empty!" : "O título non pode estar baleiro!", + "%n successfully saved" : "%n foi gardada satisfactoriamente", + "Error on saving form, see console" : "Produciuse un erro ao gardar a enquisa, vexa a consola", + "Clone of %n" : "Clonar de %n", + "New" : "Nova", + "Click here to add a form" : "Prema aquí para engadir unha enquisa", + "Do you want to delete \"%n\"?" : "Confirma que quere eliminar «%n»?", + "No, keep form." : "Non, conservar a enquisa.", + "Yes, delete form." : "Sí, eliminar a enquisa.", + "Form \"%n\" deleted" : "A enquisa «%n» foi eliminada", + "Error while deleting Form \"%n\"" : "Produciuse un erro ao eliminar a enquisa «%n»", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "Non ten permisos para ver esta enquisa ou a enquisa non existe.", + "You are not allowed to edit this form or the form does not exist." : "Non ten permisos para editar esta enquisa ou a enquisa non existe.", + "You are either not allowed to delete this form or it doesn't exist." : "Non ten permisos para eliminar esta enquisa ou a enquisa non existe.", + "No description provided." : "Non se proporcionou unha descrición.", + "The form expired on %s. Voting is disabled, but you can still comment." : "A enquisa caducou o %s. O voto xa está desactivado, mais aínda pode facer comentarios.", + "Switch all options at once" : "Cambiar todas as opcións de vez", + "Your name here" : "O seu nome aquí", + "Say yes to all" : "Dicir si a todo", + "Reset all (say no)" : "Restabelecer todo (dicir non)", + "Say maybe to all" : "Dicir quizais a todos", + "This form was updated since your last visit. Please check your votes." : "Esta enquisa foi actualizada dende a súa última visita. Comprobe os seus votos.", + "Vote!" : "Vote!", + "Receive notification email on activity" : "Recibir un correo de notificación de actividade", + "Close details" : "Pechar os detalles", + "Close" : "Pechar", + "Expires on %s" : "Caduca o %s", + "Invitation access" : "Acceso por convite", + "Anononymous form" : "Enquisa anónima", + "Click to get link" : "Prema para obter unha ligazón", + "Edit Form" : "Editar a enquisa", + "Form expired" : "Enquisa expirada", + "Comments" : "Comentarios", + "Login or ..." : "Acceder ou ...", + "New comment …" : "Comentario novo…", + "No comments yet. Be the first." : "Aínda non hai comentarios, Sexa o primeiro." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/gl.json b/l10n/gl.json new file mode 100644 index 0000000..e0354c5 --- /dev/null +++ b/l10n/gl.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Confirma que quere eliminar esta enquisa nova?", + "Copied!" : "Copiado!", + "Copy" : "Copiar", + "Not supported!" : "Non admitido!", + "Press ⌘-C to copy." : "Prema ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Prema Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Non está rexistrado\nIntroduza o seu nome para votar\n(polo menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Debe engadir algún texto ao seu comentario antes de envialo.", + "An error occurred, your comment was not posted." : "Produciuse un erro, o seu comentario non se publicou.", + "Forms" : "Enquisas", + "Forms App - New Activity" : "Aplicativo de enquisas – Actividade nova", + "{user} participated in the form \"{title}\"" : "{user} participou na enquisa «{title}»", + "Go to form" : "Ir á enquisa", + "just now" : "agora mesmo", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Un aplicativo de enquisas, semellante a doodle/dudle, coa posibilidade de restrinxir o acceso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Un aplicativo de enquisas, semellante a doodle/dudle, coa posibilidade de restrinxir o acceso (membros, determinados grupos/usuarios, agachados e públicos).", + "Expired" : "Caducada", + "Expires %n" : "Caduca o %n", + "Expires never" : "Non caduca nunca", + "Anonymous form" : "Enquisa anónima", + "Usernames hidden to Owner" : "Nomes de usuario agachados ao propietario", + "Usernames visible to Owner" : "Nomes de usuario visíbeis para o propietario", + "Group" : "Grupo", + "Title" : "Título", + "Access" : "Acceso", + "Owner" : "Propietario", + "Created" : "Creado", + "Expires" : "Caduca", + "Public access" : "Acceso público", + "Only shared" : "Só compartida", + "Registered users only" : "Só usuarios rexistrados", + "Hidden form" : "Enquisa agachada ", + "Text form" : "Texto da enquisa", + "Date form" : "Data da enquisa", + "never" : "nunca", + "Copy Link" : "Copiar a ligazón", + "Clone form" : "Clonar a enquisa", + "Edit form" : "Editar a enquisa", + "Delete form" : "Eliminar a enquisa", + "Edit form as admin" : "Editar a enquisa como administrador", + "Delete form as admin" : "Eliminar a enquisa como administrador", + "Link copied to clipboard" : "A ligazón foi copiada no portapapeis.", + "Error, while copying link to clipboard" : "Produciuse un erro ao copiar a ligazón no portapapeis", + "_There is %n comment_::_There are %n comments_" : ["Hai %n comentario","Hai %n comentarios"], + "Share with" : "Compartir con", + "Form description" : "Descrición da enquisa", + "Description" : "Descrición", + "Vote options" : "Opcións de voto", + "Event schedule" : "Axenda de eventos", + "Text based" : "Baseado en texto", + "Shift dates" : "Cambiar as datas", + "Shift all dates for " : "Cambiar todas as datas para", + "Add option" : "Engadir opción", + "You are editing in admin mode" : "Está editando en modo administrador", + "Configuration" : "Configuración", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : " A configuración está bloqueada. Cambiar as opcións pode dar lugar a un comportamento non desexado, aínda así mais pode desbloqueala.", + "Unlock configuration " : "Desbloquear a configuracioń", + "Form type" : "Tipo de enquisa", + "Form configurations" : "Configuracións da enquisa", + "Allow \"maybe\" vote" : "Permitir o voto «quizais»", + "Hide user names for admin" : "Agachar os nomes de usuario ao administrador", + "hidden" : "agachada", + "Name of user or group" : "Nome de usuario ou grupo", + "Create new form" : "Crear unha enquisa nova", + "Writing form" : "Rexistrando a enquisa", + "Update form" : "Actualizar a enquisa", + "Expiration date" : "Data de caducidade", + "Click to add a date" : "Prema para engadir unha data", + "Shift all date options" : "Cambia todas as opcións de data", + "Cancel" : "Cancelar", + "Apply" : "Aplicar", + "Title must not be empty!" : "O título non pode estar baleiro!", + "%n successfully saved" : "%n foi gardada satisfactoriamente", + "Error on saving form, see console" : "Produciuse un erro ao gardar a enquisa, vexa a consola", + "Clone of %n" : "Clonar de %n", + "New" : "Nova", + "Click here to add a form" : "Prema aquí para engadir unha enquisa", + "Do you want to delete \"%n\"?" : "Confirma que quere eliminar «%n»?", + "No, keep form." : "Non, conservar a enquisa.", + "Yes, delete form." : "Sí, eliminar a enquisa.", + "Form \"%n\" deleted" : "A enquisa «%n» foi eliminada", + "Error while deleting Form \"%n\"" : "Produciuse un erro ao eliminar a enquisa «%n»", + "Access denied" : "Acceso denegado", + "You are not allowed to view this form or the form does not exist." : "Non ten permisos para ver esta enquisa ou a enquisa non existe.", + "You are not allowed to edit this form or the form does not exist." : "Non ten permisos para editar esta enquisa ou a enquisa non existe.", + "You are either not allowed to delete this form or it doesn't exist." : "Non ten permisos para eliminar esta enquisa ou a enquisa non existe.", + "No description provided." : "Non se proporcionou unha descrición.", + "The form expired on %s. Voting is disabled, but you can still comment." : "A enquisa caducou o %s. O voto xa está desactivado, mais aínda pode facer comentarios.", + "Switch all options at once" : "Cambiar todas as opcións de vez", + "Your name here" : "O seu nome aquí", + "Say yes to all" : "Dicir si a todo", + "Reset all (say no)" : "Restabelecer todo (dicir non)", + "Say maybe to all" : "Dicir quizais a todos", + "This form was updated since your last visit. Please check your votes." : "Esta enquisa foi actualizada dende a súa última visita. Comprobe os seus votos.", + "Vote!" : "Vote!", + "Receive notification email on activity" : "Recibir un correo de notificación de actividade", + "Close details" : "Pechar os detalles", + "Close" : "Pechar", + "Expires on %s" : "Caduca o %s", + "Invitation access" : "Acceso por convite", + "Anononymous form" : "Enquisa anónima", + "Click to get link" : "Prema para obter unha ligazón", + "Edit Form" : "Editar a enquisa", + "Form expired" : "Enquisa expirada", + "Comments" : "Comentarios", + "Login or ..." : "Acceder ou ...", + "New comment …" : "Comentario novo…", + "No comments yet. Be the first." : "Aínda non hai comentarios, Sexa o primeiro." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/he.js b/l10n/he.js new file mode 100644 index 0000000..d24dce7 --- /dev/null +++ b/l10n/he.js @@ -0,0 +1,53 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "הועתק!", + "Copy" : "העתקה", + "Not supported!" : "אין תמיכה!", + "Press ⌘-C to copy." : "יש ללחוץ על ‎⌘-C כדי להעתיק.", + "Press Ctrl-C to copy." : "יש ללחוץ על Ctrl-C כדי להעתיק.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "לא נרשמת.\nנא להקליד את השם שלך כדי להצביע\n(3 תווים לפחות).", + "Please add some text to your comment before submitting it." : "נא להוסיף טקסט לתגובה שלך בטרם השליחה.", + "An error occurred, your comment was not posted." : "אירעה שגיאה, התגובה שלך לא פורסמה.", + "Forms" : "סקרים", + "Forms App - New Activity" : "יישומון סקרים - פעילות חדשה", + "just now" : "כרגע", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "יישומון סקרים, בדומה ל־doodle/dudle אם האפשרות להגבלת גישה.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "יישומון סקרים, דומה ל־doodle/dudle עם אפשרות להגבלת גישה (חברים, קבוצות/משתמשים מסוימים, הסתרה או חשיפה).", + "Expired" : "פג", + "Expires never" : "לעולם לא יפוג", + "Usernames hidden to Owner" : "שמות המשתמשים נסתרים בפני הבעלים", + "Usernames visible to Owner" : "שמות המשתמשים גלויים לבעלים", + "Title" : "כותרת", + "Access" : "גישה", + "Owner" : "בעלות", + "Created" : "יצירה", + "Expires" : "תפוגה", + "Copy Link" : "העתקת קישור", + "Delete form" : "מחיקת סקר", + "Description" : "תיאור", + "Create new form" : "יצירת סקר חדש", + "Update form" : "עדכון סקר", + "Access denied" : "הגישה נדחתה", + "You are not allowed to view this form or the form does not exist." : "אסור לך לצפות בסקר זה או שהסקר אינו קיים.", + "You are not allowed to edit this form or the form does not exist." : "אסור לך לערוך את הסקר הזה או שהסקר אינו קיים.", + "No description provided." : "לא סופק תיאור.", + "The form expired on %s. Voting is disabled, but you can still comment." : "הסקר פג ב־%s. ההצבעה מושבתת, אך עדיין ניתן להגיב.", + "Switch all options at once" : "החלפת מצב כל האפשרויות בבת אחת", + "Your name here" : "שמך כאן", + "Vote!" : "הצבעה!", + "Receive notification email on activity" : "קבלת הודעות בדוא״ל כשיש פעילות", + "Close details" : "סגירת הפרטים", + "Close" : "סגירה", + "Expires on %s" : "יפוג ב־%s", + "Invitation access" : "גישה להזמנה", + "Anononymous form" : "סקר אלמוני", + "Click to get link" : "יש ללחוץ כדי לקבל קישור", + "Edit Form" : "עריכת סקר", + "Form expired" : "הסקר פג", + "Comments" : "תגובות", + "Login or ..." : "להיכנס או …", + "New comment …" : "תגובה חדשה…", + "No comments yet. Be the first." : "אין תגובות עדיין. זמן לחניכה." +}, +"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"); diff --git a/l10n/he.json b/l10n/he.json new file mode 100644 index 0000000..ca5d613 --- /dev/null +++ b/l10n/he.json @@ -0,0 +1,51 @@ +{ "translations": { + "Copied!" : "הועתק!", + "Copy" : "העתקה", + "Not supported!" : "אין תמיכה!", + "Press ⌘-C to copy." : "יש ללחוץ על ‎⌘-C כדי להעתיק.", + "Press Ctrl-C to copy." : "יש ללחוץ על Ctrl-C כדי להעתיק.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "לא נרשמת.\nנא להקליד את השם שלך כדי להצביע\n(3 תווים לפחות).", + "Please add some text to your comment before submitting it." : "נא להוסיף טקסט לתגובה שלך בטרם השליחה.", + "An error occurred, your comment was not posted." : "אירעה שגיאה, התגובה שלך לא פורסמה.", + "Forms" : "סקרים", + "Forms App - New Activity" : "יישומון סקרים - פעילות חדשה", + "just now" : "כרגע", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "יישומון סקרים, בדומה ל־doodle/dudle אם האפשרות להגבלת גישה.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "יישומון סקרים, דומה ל־doodle/dudle עם אפשרות להגבלת גישה (חברים, קבוצות/משתמשים מסוימים, הסתרה או חשיפה).", + "Expired" : "פג", + "Expires never" : "לעולם לא יפוג", + "Usernames hidden to Owner" : "שמות המשתמשים נסתרים בפני הבעלים", + "Usernames visible to Owner" : "שמות המשתמשים גלויים לבעלים", + "Title" : "כותרת", + "Access" : "גישה", + "Owner" : "בעלות", + "Created" : "יצירה", + "Expires" : "תפוגה", + "Copy Link" : "העתקת קישור", + "Delete form" : "מחיקת סקר", + "Description" : "תיאור", + "Create new form" : "יצירת סקר חדש", + "Update form" : "עדכון סקר", + "Access denied" : "הגישה נדחתה", + "You are not allowed to view this form or the form does not exist." : "אסור לך לצפות בסקר זה או שהסקר אינו קיים.", + "You are not allowed to edit this form or the form does not exist." : "אסור לך לערוך את הסקר הזה או שהסקר אינו קיים.", + "No description provided." : "לא סופק תיאור.", + "The form expired on %s. Voting is disabled, but you can still comment." : "הסקר פג ב־%s. ההצבעה מושבתת, אך עדיין ניתן להגיב.", + "Switch all options at once" : "החלפת מצב כל האפשרויות בבת אחת", + "Your name here" : "שמך כאן", + "Vote!" : "הצבעה!", + "Receive notification email on activity" : "קבלת הודעות בדוא״ל כשיש פעילות", + "Close details" : "סגירת הפרטים", + "Close" : "סגירה", + "Expires on %s" : "יפוג ב־%s", + "Invitation access" : "גישה להזמנה", + "Anononymous form" : "סקר אלמוני", + "Click to get link" : "יש ללחוץ כדי לקבל קישור", + "Edit Form" : "עריכת סקר", + "Form expired" : "הסקר פג", + "Comments" : "תגובות", + "Login or ..." : "להיכנס או …", + "New comment …" : "תגובה חדשה…", + "No comments yet. Be the first." : "אין תגובות עדיין. זמן לחניכה." +},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;" +} \ No newline at end of file diff --git a/l10n/hu.js b/l10n/hu.js new file mode 100644 index 0000000..f314a41 --- /dev/null +++ b/l10n/hu.js @@ -0,0 +1,83 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Tényleg törölni akarja ezt az új szavazást?", + "Copied!" : "Másolva!", + "Copy" : "Másolás", + "Not supported!" : "Nem támogatott!", + "Press ⌘-C to copy." : "A másoláshoz nyomj ⌘-C-t.", + "Press Ctrl-C to copy." : "A másoláshoz nyomj Ctrl-C-t.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nem vagy regisztrálva.\nKérlek add meg a neved a szavazáshoz\n(Legalább 3 karakter).", + "Please add some text to your comment before submitting it." : "Kérlek adj hozzá valamilyen szöveget a hozzászólásodhoz beküldés előtt.", + "An error occurred, your comment was not posted." : "Hiba történt, a hozzászólásod nem lett beküldve.", + "Forms" : "Szavazások", + "Forms App - New Activity" : "Szavazó app - Új aktivitás", + "{user} participated in the form \"{title}\"" : "{user} csatlakozott a szavazáshoz \"{title}\"", + "Go to form" : "Ugrás a szavazáshoz", + "just now" : "épp most", + "Expired" : "Lejárt", + "Expires %n" : "Lejár: %n", + "Expires never" : "Sosem jár le", + "Anonymous form" : "Névtelen szavazás", + "Usernames hidden to Owner" : "A felhasználóneveket nem látja a tulajdonos", + "Usernames visible to Owner" : "A felhasználóneveket látja a tulajdonos", + "Group" : "Csoport", + "Title" : "Cím", + "Access" : "Hozzáférés", + "Owner" : "Tulajdonos", + "Created" : "Létrehozva", + "Expires" : "Lejárat", + "Public access" : "Nyilvános hozzáférés", + "Only shared" : "Csak megosztott", + "Registered users only" : "Csak regisztrált felhasználó", + "Copy Link" : "Link másolása", + "Edit form" : "Szavazás szerkesztése", + "Delete form" : "Szavazás törlése", + "Share with" : "Megosztva vele", + "Form description" : "Szavazat leírása", + "Description" : "Leírás", + "Vote options" : "Szavazási opciók", + "Event schedule" : "Esemény időzítés", + "Text based" : "Szöveg alapú", + "Add option" : "Beállítás hozzáadása", + "You are editing in admin mode" : "Admin módban szerkeszted", + "Configuration" : "Beállítások", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "A beállítások zárolva vannak. A beállítás változtatása nem várt eredményt hozhat, azonban fel tudod oldani valahogy.", + "Unlock configuration " : "Beállítás engedélyezése", + "Form type" : "Szavazás típus", + "Form configurations" : "Szavazás beállítása", + "Hide user names for admin" : "Felhasználónevek elrejtése a rendszergazdának", + "hidden" : "rejtett", + "Name of user or group" : "Felhasználó vagy csoport neve", + "Create new form" : "Új szavazás", + "Writing form" : "Szavazás írása", + "Update form" : "Szavazás frissítése", + "Expiration date" : "Lejárati dátum", + "Click to add a date" : "Kattints a dátum hozzáadásához", + "New" : "Új", + "Click here to add a form" : "Kattints ide a szavazás hozzáadásához", + "Access denied" : "Hozzáférés letiltva", + "You are not allowed to view this form or the form does not exist." : "Nem vagy jogosult a szavazás megtekintésére, vagy az nem létezik.", + "You are not allowed to edit this form or the form does not exist." : "Nem vagy jogosult a szavazás szerkesztésére, vagy az nem létezik.", + "You are either not allowed to delete this form or it doesn't exist." : "Nem vagy jogosult a szavazás törlésére, vagy az nem létezik.", + "No description provided." : "Nincs leírás megadva.", + "The form expired on %s. Voting is disabled, but you can still comment." : "A szavazás lejárt ekkor: %s. A szavazás nem ki van kapcsolva, de hozzászólni még lehet.", + "Switch all options at once" : "Minden kapcsoló egyszerre állítása", + "Your name here" : "A neved", + "This form was updated since your last visit. Please check your votes." : "Ez a szavazás frissítve lett legutolsó látogatásod óta. Kérlek ellenőrizd a szavazataidat.", + "Vote!" : "Szavazás!", + "Receive notification email on activity" : "Értesítés küldése az aktivitásról", + "Close details" : "Részletek bezárása", + "Close" : "Bezárás", + "Expires on %s" : "Lejárt ekkor: %s", + "Invitation access" : "Meghívó hozzáférés", + "Anononymous form" : "Névtelen szavazás", + "Click to get link" : "Kattints a link beszerzéséért", + "Edit Form" : "Szavazás szerkesztése", + "Form expired" : "Szavazás lejárt", + "Comments" : "Hozzászólások", + "Login or ..." : "Bejelentkezés vagy ...", + "New comment …" : "Új hozzászólás...", + "No comments yet. Be the first." : "Még nincsenek hozzászólások. Legyél az első." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/hu.json b/l10n/hu.json new file mode 100644 index 0000000..6be3088 --- /dev/null +++ b/l10n/hu.json @@ -0,0 +1,81 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Tényleg törölni akarja ezt az új szavazást?", + "Copied!" : "Másolva!", + "Copy" : "Másolás", + "Not supported!" : "Nem támogatott!", + "Press ⌘-C to copy." : "A másoláshoz nyomj ⌘-C-t.", + "Press Ctrl-C to copy." : "A másoláshoz nyomj Ctrl-C-t.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nem vagy regisztrálva.\nKérlek add meg a neved a szavazáshoz\n(Legalább 3 karakter).", + "Please add some text to your comment before submitting it." : "Kérlek adj hozzá valamilyen szöveget a hozzászólásodhoz beküldés előtt.", + "An error occurred, your comment was not posted." : "Hiba történt, a hozzászólásod nem lett beküldve.", + "Forms" : "Szavazások", + "Forms App - New Activity" : "Szavazó app - Új aktivitás", + "{user} participated in the form \"{title}\"" : "{user} csatlakozott a szavazáshoz \"{title}\"", + "Go to form" : "Ugrás a szavazáshoz", + "just now" : "épp most", + "Expired" : "Lejárt", + "Expires %n" : "Lejár: %n", + "Expires never" : "Sosem jár le", + "Anonymous form" : "Névtelen szavazás", + "Usernames hidden to Owner" : "A felhasználóneveket nem látja a tulajdonos", + "Usernames visible to Owner" : "A felhasználóneveket látja a tulajdonos", + "Group" : "Csoport", + "Title" : "Cím", + "Access" : "Hozzáférés", + "Owner" : "Tulajdonos", + "Created" : "Létrehozva", + "Expires" : "Lejárat", + "Public access" : "Nyilvános hozzáférés", + "Only shared" : "Csak megosztott", + "Registered users only" : "Csak regisztrált felhasználó", + "Copy Link" : "Link másolása", + "Edit form" : "Szavazás szerkesztése", + "Delete form" : "Szavazás törlése", + "Share with" : "Megosztva vele", + "Form description" : "Szavazat leírása", + "Description" : "Leírás", + "Vote options" : "Szavazási opciók", + "Event schedule" : "Esemény időzítés", + "Text based" : "Szöveg alapú", + "Add option" : "Beállítás hozzáadása", + "You are editing in admin mode" : "Admin módban szerkeszted", + "Configuration" : "Beállítások", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "A beállítások zárolva vannak. A beállítás változtatása nem várt eredményt hozhat, azonban fel tudod oldani valahogy.", + "Unlock configuration " : "Beállítás engedélyezése", + "Form type" : "Szavazás típus", + "Form configurations" : "Szavazás beállítása", + "Hide user names for admin" : "Felhasználónevek elrejtése a rendszergazdának", + "hidden" : "rejtett", + "Name of user or group" : "Felhasználó vagy csoport neve", + "Create new form" : "Új szavazás", + "Writing form" : "Szavazás írása", + "Update form" : "Szavazás frissítése", + "Expiration date" : "Lejárati dátum", + "Click to add a date" : "Kattints a dátum hozzáadásához", + "New" : "Új", + "Click here to add a form" : "Kattints ide a szavazás hozzáadásához", + "Access denied" : "Hozzáférés letiltva", + "You are not allowed to view this form or the form does not exist." : "Nem vagy jogosult a szavazás megtekintésére, vagy az nem létezik.", + "You are not allowed to edit this form or the form does not exist." : "Nem vagy jogosult a szavazás szerkesztésére, vagy az nem létezik.", + "You are either not allowed to delete this form or it doesn't exist." : "Nem vagy jogosult a szavazás törlésére, vagy az nem létezik.", + "No description provided." : "Nincs leírás megadva.", + "The form expired on %s. Voting is disabled, but you can still comment." : "A szavazás lejárt ekkor: %s. A szavazás nem ki van kapcsolva, de hozzászólni még lehet.", + "Switch all options at once" : "Minden kapcsoló egyszerre állítása", + "Your name here" : "A neved", + "This form was updated since your last visit. Please check your votes." : "Ez a szavazás frissítve lett legutolsó látogatásod óta. Kérlek ellenőrizd a szavazataidat.", + "Vote!" : "Szavazás!", + "Receive notification email on activity" : "Értesítés küldése az aktivitásról", + "Close details" : "Részletek bezárása", + "Close" : "Bezárás", + "Expires on %s" : "Lejárt ekkor: %s", + "Invitation access" : "Meghívó hozzáférés", + "Anononymous form" : "Névtelen szavazás", + "Click to get link" : "Kattints a link beszerzéséért", + "Edit Form" : "Szavazás szerkesztése", + "Form expired" : "Szavazás lejárt", + "Comments" : "Hozzászólások", + "Login or ..." : "Bejelentkezés vagy ...", + "New comment …" : "Új hozzászólás...", + "No comments yet. Be the first." : "Még nincsenek hozzászólások. Legyél az első." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/is.js b/l10n/is.js new file mode 100644 index 0000000..b80b954 --- /dev/null +++ b/l10n/is.js @@ -0,0 +1,86 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Viltu í alvörunni eyða þessari nýju könnun?", + "Copied!" : "Afritað!", + "Copy" : "Afrita", + "Not supported!" : "Óstutt!", + "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", + "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Þú ert ekki skráð(ur).\nSettu inn nafnið þitt til að kjósa\n(að minnsta kosti 3 stafir).", + "Please add some text to your comment before submitting it." : "Settu inn einhvern texta í umsögnina þína áður en hún er send.", + "An error occurred, your comment was not posted." : "Villa kom upp, umsögnin þín var ekki send inn.", + "Forms" : "Kannanir", + "Forms App - New Activity" : "Kannanaforrit - Ný virkni", + "{user} participated in the form \"{title}\"" : "{user} tók þátt í könnuninni \"{title}\"", + "Go to form" : "Fara á könnun", + "just now" : "Í þessum töluðu orðum", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Skoðanakannanaforrit sem svipar til doodle/dudle, með möguleika á aðgangstakmörkunum.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Skoðanakannanaforrit sem svipar til doodle/dudle, með möguleika á aðgangstakmörkunum (einungis meðlimir, ákveðnir hópar/notendur, falið eða opinbert).", + "Expired" : "Útrunnið", + "Expires %n" : "Gildir til %n", + "Expires never" : "Rennur aldrei út", + "Anonymous form" : "Nafnlaus könnun", + "Usernames hidden to Owner" : "Nöfn notenda falin fyrir eiganda", + "Usernames visible to Owner" : "Nöfn notenda sýnileg eiganda", + "Group" : "Hópur", + "Title" : "Titill", + "Access" : "Aðgangur", + "Owner" : "Eigandi", + "Created" : "Búið til", + "Expires" : "Rennur út", + "Public access" : "Opinber aðgangur", + "Only shared" : "Einungis deildar", + "Registered users only" : "Aðeins skráðir notendur", + "Copy Link" : "Afrita tengil", + "Edit form" : "Breyta könnun", + "Delete form" : "Eyða könnun", + "Share with" : "Deila með", + "Form description" : "Lýsing á könnun", + "Description" : "Lýsing", + "Vote options" : "Valkostir í kosningu", + "Event schedule" : "Áætlun atburðar", + "Text based" : "Texti", + "Add option" : "Bæta við valkosti", + "You are editing in admin mode" : "Þú ert að breyta í stjórnandaham", + "Configuration" : "Uppsetning", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Uppsetning er læst. Breytingar á valkostum gætu valdið skringilegri virkni, en þú getur samt aflæst henni.", + "Unlock configuration " : "Aflæsa uppsetningu", + "Form type" : "Gerð könnunar", + "Form configurations" : "Uppsetningar kannana", + "Allow \"maybe\" vote" : "Leyfa \"kannski\"-atkvæði", + "Hide user names for admin" : "Fela notendanöfn fyrir kerfisstjórum", + "hidden" : "falið", + "Name of user or group" : "Nafn notanda eða hóps", + "Create new form" : "Búa til nýja könnun", + "Writing form" : "Skrifa könnun", + "Update form" : "Uppfæra könnun", + "Expiration date" : "Gildir til", + "Click to add a date" : "Smelltu til að bæta við dagsetningu", + "New" : "Nýtt", + "Click here to add a form" : "Smelltu hér til að bæta við könnun", + "Access denied" : "Aðgangur ekki leyfður", + "You are not allowed to view this form or the form does not exist." : "Þú hefur ekki heimild til að skoða þessa könnun eða að könnunin er ekki til.", + "You are not allowed to edit this form or the form does not exist." : "Þú hefur ekki heimild til að breyta þessari könnun eða að könnunin er ekki til.", + "You are either not allowed to delete this form or it doesn't exist." : "Þú hefur annað hvort ekki heimild til að eyða þessari könnun eða að könnunin er ekki til.", + "No description provided." : "Engin lýsing var gefin.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Könnunin rann út þann %s. Greiðsla atkvæða er óvirk, en hægt er að senda inn athugasemdir.\n.", + "Switch all options at once" : "Skipta öllum valkostum í einu", + "Your name here" : "Nafnið þitt hér", + "This form was updated since your last visit. Please check your votes." : "Þessi könnun hefur verið uppfærð frá síðustu heimsókn þinni. Yfirfarðu atkvæðin þín.", + "Vote!" : "Greiða atkvæði!", + "Receive notification email on activity" : "Fá tilkynningu í tölvupósti við virkni", + "Close details" : "Loka nánari upplýsingum", + "Close" : "Loka", + "Expires on %s" : "Rennur út %s", + "Invitation access" : "Boðsaðgangur", + "Anononymous form" : "Nafnlaus könnun", + "Click to get link" : "Smelltu til að fá tengil", + "Edit Form" : "Breyta könnun", + "Form expired" : "Könnun útrunnin", + "Comments" : "Athugasemdir", + "Login or ..." : "Skrá inn eða ...", + "New comment …" : "Ný ummæli …", + "No comments yet. Be the first." : "Engar athugasemdir ennþá. Vertu fyrstur." +}, +"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/l10n/is.json b/l10n/is.json new file mode 100644 index 0000000..e785b9d --- /dev/null +++ b/l10n/is.json @@ -0,0 +1,84 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Viltu í alvörunni eyða þessari nýju könnun?", + "Copied!" : "Afritað!", + "Copy" : "Afrita", + "Not supported!" : "Óstutt!", + "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", + "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Þú ert ekki skráð(ur).\nSettu inn nafnið þitt til að kjósa\n(að minnsta kosti 3 stafir).", + "Please add some text to your comment before submitting it." : "Settu inn einhvern texta í umsögnina þína áður en hún er send.", + "An error occurred, your comment was not posted." : "Villa kom upp, umsögnin þín var ekki send inn.", + "Forms" : "Kannanir", + "Forms App - New Activity" : "Kannanaforrit - Ný virkni", + "{user} participated in the form \"{title}\"" : "{user} tók þátt í könnuninni \"{title}\"", + "Go to form" : "Fara á könnun", + "just now" : "Í þessum töluðu orðum", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Skoðanakannanaforrit sem svipar til doodle/dudle, með möguleika á aðgangstakmörkunum.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Skoðanakannanaforrit sem svipar til doodle/dudle, með möguleika á aðgangstakmörkunum (einungis meðlimir, ákveðnir hópar/notendur, falið eða opinbert).", + "Expired" : "Útrunnið", + "Expires %n" : "Gildir til %n", + "Expires never" : "Rennur aldrei út", + "Anonymous form" : "Nafnlaus könnun", + "Usernames hidden to Owner" : "Nöfn notenda falin fyrir eiganda", + "Usernames visible to Owner" : "Nöfn notenda sýnileg eiganda", + "Group" : "Hópur", + "Title" : "Titill", + "Access" : "Aðgangur", + "Owner" : "Eigandi", + "Created" : "Búið til", + "Expires" : "Rennur út", + "Public access" : "Opinber aðgangur", + "Only shared" : "Einungis deildar", + "Registered users only" : "Aðeins skráðir notendur", + "Copy Link" : "Afrita tengil", + "Edit form" : "Breyta könnun", + "Delete form" : "Eyða könnun", + "Share with" : "Deila með", + "Form description" : "Lýsing á könnun", + "Description" : "Lýsing", + "Vote options" : "Valkostir í kosningu", + "Event schedule" : "Áætlun atburðar", + "Text based" : "Texti", + "Add option" : "Bæta við valkosti", + "You are editing in admin mode" : "Þú ert að breyta í stjórnandaham", + "Configuration" : "Uppsetning", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Uppsetning er læst. Breytingar á valkostum gætu valdið skringilegri virkni, en þú getur samt aflæst henni.", + "Unlock configuration " : "Aflæsa uppsetningu", + "Form type" : "Gerð könnunar", + "Form configurations" : "Uppsetningar kannana", + "Allow \"maybe\" vote" : "Leyfa \"kannski\"-atkvæði", + "Hide user names for admin" : "Fela notendanöfn fyrir kerfisstjórum", + "hidden" : "falið", + "Name of user or group" : "Nafn notanda eða hóps", + "Create new form" : "Búa til nýja könnun", + "Writing form" : "Skrifa könnun", + "Update form" : "Uppfæra könnun", + "Expiration date" : "Gildir til", + "Click to add a date" : "Smelltu til að bæta við dagsetningu", + "New" : "Nýtt", + "Click here to add a form" : "Smelltu hér til að bæta við könnun", + "Access denied" : "Aðgangur ekki leyfður", + "You are not allowed to view this form or the form does not exist." : "Þú hefur ekki heimild til að skoða þessa könnun eða að könnunin er ekki til.", + "You are not allowed to edit this form or the form does not exist." : "Þú hefur ekki heimild til að breyta þessari könnun eða að könnunin er ekki til.", + "You are either not allowed to delete this form or it doesn't exist." : "Þú hefur annað hvort ekki heimild til að eyða þessari könnun eða að könnunin er ekki til.", + "No description provided." : "Engin lýsing var gefin.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Könnunin rann út þann %s. Greiðsla atkvæða er óvirk, en hægt er að senda inn athugasemdir.\n.", + "Switch all options at once" : "Skipta öllum valkostum í einu", + "Your name here" : "Nafnið þitt hér", + "This form was updated since your last visit. Please check your votes." : "Þessi könnun hefur verið uppfærð frá síðustu heimsókn þinni. Yfirfarðu atkvæðin þín.", + "Vote!" : "Greiða atkvæði!", + "Receive notification email on activity" : "Fá tilkynningu í tölvupósti við virkni", + "Close details" : "Loka nánari upplýsingum", + "Close" : "Loka", + "Expires on %s" : "Rennur út %s", + "Invitation access" : "Boðsaðgangur", + "Anononymous form" : "Nafnlaus könnun", + "Click to get link" : "Smelltu til að fá tengil", + "Edit Form" : "Breyta könnun", + "Form expired" : "Könnun útrunnin", + "Comments" : "Athugasemdir", + "Login or ..." : "Skrá inn eða ...", + "New comment …" : "Ný ummæli …", + "No comments yet. Be the first." : "Engar athugasemdir ennþá. Vertu fyrstur." +},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" +} \ No newline at end of file diff --git a/l10n/it.js b/l10n/it.js new file mode 100644 index 0000000..b0ab66d --- /dev/null +++ b/l10n/it.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Vuoi davvero eliminare il nuovo sondaggio?", + "Copied!" : "Copiato!", + "Copy" : "Copia", + "Not supported!" : "Non supportato!", + "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", + "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Non sei registrato.\nDigita il tuo nome per votare\n(almeno 3 caratteri).", + "Please add some text to your comment before submitting it." : "Aggiungi del testo al tuo commento prima di inviarlo.", + "An error occurred, your comment was not posted." : "Si è verificato un errore, il tuo commento non è stato pubblicato.", + "Forms" : "Sondaggi", + "Forms App - New Activity" : "Sondaggi - Nuova attività", + "{user} participated in the form \"{title}\"" : "{user} ha partecipato al sondaggio \"{title}\"", + "Go to form" : "Vai al sondaggio", + "just now" : "In questo istante", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Un'applicazione di sondaggi, simile a doodle/dudle con la possibilità di limitare l'accesso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Un'applicazione di sondaggi, simile a doodle/dudle con la possibilità di limitare l'accesso (membri, determinati gruppi/utenti, nascosti e pubblici).", + "Expired" : "Scaduto", + "Expires %n" : "Scade il %n", + "Expires never" : "Non scade mai", + "Anonymous form" : "Sondaggio anonimo", + "Usernames hidden to Owner" : "Nomi utente nascosti al proprietario", + "Usernames visible to Owner" : "Nomi utente visibili al proprietario", + "Group" : "Gruppo", + "Title" : "Titolo", + "Access" : "Accesso", + "Owner" : "Proprietario", + "Created" : "Creato", + "Expires" : "Scade", + "Public access" : "Accesso pubblico", + "Only shared" : "Solo condiviso", + "Registered users only" : "Solo utenti registrati", + "Hidden form" : "Sondaggio nascosto", + "Text form" : "Sondaggio di testo", + "Date form" : "Sondaggio di date", + "never" : "mai", + "Copy Link" : "Copia collegamento", + "Clone form" : "Clona sondaggio", + "Edit form" : "Modifica sondaggio", + "Delete form" : "Elimina sondaggio", + "Edit form as admin" : "Modifica sondaggio come amministratore", + "Delete form as admin" : "Elimina sondaggio come amministratore", + "Link copied to clipboard" : "Collegamento copiato negli appunti", + "Error, while copying link to clipboard" : "Errore durante la copia del collegamento negli appunti", + "_There is %n comment_::_There are %n comments_" : ["C'è %n commento","Ci sono %n commenti"], + "Share with" : "Condividi con", + "Form description" : "Descrizione del sondaggio", + "Description" : "Descrizione", + "Vote options" : "Opzioni di voto", + "Event schedule" : "Pianificazione evento", + "Text based" : "Basato su testo", + "Shift dates" : "Sposta date", + "Shift all dates for " : "Sposta tutte le date per", + "Add option" : "Aggiungi opzione", + "You are editing in admin mode" : "Stai modificando in modalità amministrativa", + "Configuration" : "Configurazione", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "La configurazione è bloccata. La modifica delle opzioni potrebbe risultare in un comportamento inatteso, ma puoi sbloccarla comunque.", + "Unlock configuration " : "Sblocca la configurazione", + "Form type" : "Tipo di sondaggio", + "Form configurations" : "Configurazioni dei sondaggi", + "Allow \"maybe\" vote" : "Consenti il voto \"Forse\"", + "Hide user names for admin" : "Nascondi i nomi utente degli amministratori", + "hidden" : "nascosto", + "Name of user or group" : "Nome dell'utente o del gruppo", + "Create new form" : "Crea nuovo sondaggio", + "Writing form" : "Scrittura del sondaggio", + "Update form" : "Aggiorna sondaggio", + "Expiration date" : "Data di scadenza", + "Click to add a date" : "Fai clic per aggiungere una data", + "Shift all date options" : "Opzioni di spostamento di tutte le date", + "Cancel" : "Annulla", + "Apply" : "Applica", + "Title must not be empty!" : "Il titolo non può essere vuoto!", + "%n successfully saved" : "%n salvato correttamente", + "Error on saving form, see console" : "Errore di salvataggio del sondaggio, vedi la console", + "Clone of %n" : "Clone di %n", + "New" : "Nuovo", + "Click here to add a form" : "Fai clic qui per aggiungere un sondaggio", + "Do you want to delete \"%n\"?" : "Vuoi eliminare \"%n\"?", + "No, keep form." : "No, tieni il sondaggio.", + "Yes, delete form." : "Sì, elimina il sondaggio.", + "Form \"%n\" deleted" : "Sondaggio \"%n\" eliminato", + "Error while deleting Form \"%n\"" : "Errore nell'eliminazione del sondaggio \"%n\"", + "Access denied" : "Accesso negato", + "You are not allowed to view this form or the form does not exist." : "Non hai il permesso di vedere questo sondaggio o il sondaggio non esiste.", + "You are not allowed to edit this form or the form does not exist." : "Non ti è consentito modificare questo sondaggio oppure il sondaggio non esiste.", + "You are either not allowed to delete this form or it doesn't exist." : "Non ti è consentito eliminare questo sondaggio oppure il sondaggio non esiste.", + "No description provided." : "Nessuna descrizione fornita.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Il sondaggio è scaduto il %s. Il voto è disabilitato, ma puoi ancora commentare.", + "Switch all options at once" : "Cambia tutte le opzioni contemporaneamente", + "Your name here" : "Qui il tuo nome", + "Say yes to all" : "Rispondi sì a tutto", + "Reset all (say no)" : "Ripristina tutto (rispondi no)", + "Say maybe to all" : "Rispondi forse a tutto", + "This form was updated since your last visit. Please check your votes." : "Questo sondaggio è stato aggiornato dalla tua ultima visita. Controlla i tuoi voti.", + "Vote!" : "Vota!", + "Receive notification email on activity" : "Ricevi un email di notifica sull'attività", + "Close details" : "Chiudi dettagli", + "Close" : "Chiudi", + "Expires on %s" : "Scade il %s", + "Invitation access" : "Accesso su invito", + "Anononymous form" : "Sondaggio anonimo", + "Click to get link" : "Fai clic per ottenere il collegamento", + "Edit Form" : "Modifica sondaggio", + "Form expired" : "Sondaggio scaduto", + "Comments" : "Commenti", + "Login or ..." : "Accedi o....", + "New comment …" : "Nuovo commento...", + "No comments yet. Be the first." : "Ancora nessun commento. Puoi essere il primo." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/it.json b/l10n/it.json new file mode 100644 index 0000000..4314a5b --- /dev/null +++ b/l10n/it.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Vuoi davvero eliminare il nuovo sondaggio?", + "Copied!" : "Copiato!", + "Copy" : "Copia", + "Not supported!" : "Non supportato!", + "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", + "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Non sei registrato.\nDigita il tuo nome per votare\n(almeno 3 caratteri).", + "Please add some text to your comment before submitting it." : "Aggiungi del testo al tuo commento prima di inviarlo.", + "An error occurred, your comment was not posted." : "Si è verificato un errore, il tuo commento non è stato pubblicato.", + "Forms" : "Sondaggi", + "Forms App - New Activity" : "Sondaggi - Nuova attività", + "{user} participated in the form \"{title}\"" : "{user} ha partecipato al sondaggio \"{title}\"", + "Go to form" : "Vai al sondaggio", + "just now" : "In questo istante", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Un'applicazione di sondaggi, simile a doodle/dudle con la possibilità di limitare l'accesso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Un'applicazione di sondaggi, simile a doodle/dudle con la possibilità di limitare l'accesso (membri, determinati gruppi/utenti, nascosti e pubblici).", + "Expired" : "Scaduto", + "Expires %n" : "Scade il %n", + "Expires never" : "Non scade mai", + "Anonymous form" : "Sondaggio anonimo", + "Usernames hidden to Owner" : "Nomi utente nascosti al proprietario", + "Usernames visible to Owner" : "Nomi utente visibili al proprietario", + "Group" : "Gruppo", + "Title" : "Titolo", + "Access" : "Accesso", + "Owner" : "Proprietario", + "Created" : "Creato", + "Expires" : "Scade", + "Public access" : "Accesso pubblico", + "Only shared" : "Solo condiviso", + "Registered users only" : "Solo utenti registrati", + "Hidden form" : "Sondaggio nascosto", + "Text form" : "Sondaggio di testo", + "Date form" : "Sondaggio di date", + "never" : "mai", + "Copy Link" : "Copia collegamento", + "Clone form" : "Clona sondaggio", + "Edit form" : "Modifica sondaggio", + "Delete form" : "Elimina sondaggio", + "Edit form as admin" : "Modifica sondaggio come amministratore", + "Delete form as admin" : "Elimina sondaggio come amministratore", + "Link copied to clipboard" : "Collegamento copiato negli appunti", + "Error, while copying link to clipboard" : "Errore durante la copia del collegamento negli appunti", + "_There is %n comment_::_There are %n comments_" : ["C'è %n commento","Ci sono %n commenti"], + "Share with" : "Condividi con", + "Form description" : "Descrizione del sondaggio", + "Description" : "Descrizione", + "Vote options" : "Opzioni di voto", + "Event schedule" : "Pianificazione evento", + "Text based" : "Basato su testo", + "Shift dates" : "Sposta date", + "Shift all dates for " : "Sposta tutte le date per", + "Add option" : "Aggiungi opzione", + "You are editing in admin mode" : "Stai modificando in modalità amministrativa", + "Configuration" : "Configurazione", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "La configurazione è bloccata. La modifica delle opzioni potrebbe risultare in un comportamento inatteso, ma puoi sbloccarla comunque.", + "Unlock configuration " : "Sblocca la configurazione", + "Form type" : "Tipo di sondaggio", + "Form configurations" : "Configurazioni dei sondaggi", + "Allow \"maybe\" vote" : "Consenti il voto \"Forse\"", + "Hide user names for admin" : "Nascondi i nomi utente degli amministratori", + "hidden" : "nascosto", + "Name of user or group" : "Nome dell'utente o del gruppo", + "Create new form" : "Crea nuovo sondaggio", + "Writing form" : "Scrittura del sondaggio", + "Update form" : "Aggiorna sondaggio", + "Expiration date" : "Data di scadenza", + "Click to add a date" : "Fai clic per aggiungere una data", + "Shift all date options" : "Opzioni di spostamento di tutte le date", + "Cancel" : "Annulla", + "Apply" : "Applica", + "Title must not be empty!" : "Il titolo non può essere vuoto!", + "%n successfully saved" : "%n salvato correttamente", + "Error on saving form, see console" : "Errore di salvataggio del sondaggio, vedi la console", + "Clone of %n" : "Clone di %n", + "New" : "Nuovo", + "Click here to add a form" : "Fai clic qui per aggiungere un sondaggio", + "Do you want to delete \"%n\"?" : "Vuoi eliminare \"%n\"?", + "No, keep form." : "No, tieni il sondaggio.", + "Yes, delete form." : "Sì, elimina il sondaggio.", + "Form \"%n\" deleted" : "Sondaggio \"%n\" eliminato", + "Error while deleting Form \"%n\"" : "Errore nell'eliminazione del sondaggio \"%n\"", + "Access denied" : "Accesso negato", + "You are not allowed to view this form or the form does not exist." : "Non hai il permesso di vedere questo sondaggio o il sondaggio non esiste.", + "You are not allowed to edit this form or the form does not exist." : "Non ti è consentito modificare questo sondaggio oppure il sondaggio non esiste.", + "You are either not allowed to delete this form or it doesn't exist." : "Non ti è consentito eliminare questo sondaggio oppure il sondaggio non esiste.", + "No description provided." : "Nessuna descrizione fornita.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Il sondaggio è scaduto il %s. Il voto è disabilitato, ma puoi ancora commentare.", + "Switch all options at once" : "Cambia tutte le opzioni contemporaneamente", + "Your name here" : "Qui il tuo nome", + "Say yes to all" : "Rispondi sì a tutto", + "Reset all (say no)" : "Ripristina tutto (rispondi no)", + "Say maybe to all" : "Rispondi forse a tutto", + "This form was updated since your last visit. Please check your votes." : "Questo sondaggio è stato aggiornato dalla tua ultima visita. Controlla i tuoi voti.", + "Vote!" : "Vota!", + "Receive notification email on activity" : "Ricevi un email di notifica sull'attività", + "Close details" : "Chiudi dettagli", + "Close" : "Chiudi", + "Expires on %s" : "Scade il %s", + "Invitation access" : "Accesso su invito", + "Anononymous form" : "Sondaggio anonimo", + "Click to get link" : "Fai clic per ottenere il collegamento", + "Edit Form" : "Modifica sondaggio", + "Form expired" : "Sondaggio scaduto", + "Comments" : "Commenti", + "Login or ..." : "Accedi o....", + "New comment …" : "Nuovo commento...", + "No comments yet. Be the first." : "Ancora nessun commento. Puoi essere il primo." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/ja.js b/l10n/ja.js new file mode 100644 index 0000000..82a2161 --- /dev/null +++ b/l10n/ja.js @@ -0,0 +1,84 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "この新しい投票を本当に削除しますか?", + "Copied!" : "コピーしました!", + "Copy" : "コピー", + "Not supported!" : "サポートされていません!", + "Press ⌘-C to copy." : "⌘-C でコピーします。", + "Press Ctrl-C to copy." : "Ctrl + Cを押してコピーします。", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "あなたは登録されていません。\n投票のための名前を入力して下さい(3文字以上)。", + "Please add some text to your comment before submitting it." : "追加する前にコメントにテキストを追加してください。", + "An error occurred, your comment was not posted." : "エラーが発生しました。あなたのコメントは投稿されていません。", + "Forms" : "投票", + "Forms App - New Activity" : "投票アプリ - 新機能", + "{user} participated in the form \"{title}\"" : "{user} は、投票 \"{title}\" に参加しました", + "Go to form" : "投票へ移動", + "just now" : "たった今", + "Expired" : "有効期限切れ", + "Expires %n" : "%n で期限が切れます", + "Expires never" : "有効期限なし", + "Anonymous form" : "匿名投票", + "Usernames hidden to Owner" : "オーナーに見えないユーザー名", + "Usernames visible to Owner" : "オーナーに見えるユーザー名", + "Group" : "グループ", + "Title" : "タイトル", + "Access" : "アクセス", + "Owner" : "オーナー", + "Created" : "作成されました", + "Expires" : "有効期限", + "Public access" : "パブリックアクセス", + "Only shared" : "共有中のみ", + "Registered users only" : "登録ユーザーのみ", + "Copy Link" : "リンクをコピー", + "Edit form" : "投票を編集", + "Delete form" : "投票を削除", + "Share with" : "と共有", + "Form description" : "投票の説明", + "Description" : "説明", + "Vote options" : "投票オプション", + "Event schedule" : "イベントスケジュール", + "Text based" : "テキストベースの", + "Add option" : "オプションを追加", + "You are editing in admin mode" : "管理モードで編集しています", + "Configuration" : "設定", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "設定がロックされました。オプション変更すると望まない結果になる可能性がありますが、アンロックできます。", + "Unlock configuration " : "設定をアンロックする", + "Form type" : "投票タイプ", + "Form configurations" : "投票設定", + "Allow \"maybe\" vote" : "「多分 maybe」投票を許可する", + "Hide user names for admin" : "管理者にユーザー名を隠す", + "hidden" : "非公開", + "Name of user or group" : "ユーザまたはグループの名前", + "Create new form" : "投票を作成", + "Writing form" : "書き込み中の投票", + "Update form" : "投票を更新", + "Expiration date" : "失効日", + "Click to add a date" : "クリックして日付を追加", + "New" : "新規作成", + "Click here to add a form" : "クリックして投票を追加", + "Access denied" : "アクセス拒否", + "You are not allowed to view this form or the form does not exist." : "投票を閲覧できないか、投票が存在しません。", + "You are not allowed to edit this form or the form does not exist." : "投票を編集できないか、投票が存在しません。", + "You are either not allowed to delete this form or it doesn't exist." : "投票を削除できないか、投票が存在しません。", + "No description provided." : "説明がありません", + "The form expired on %s. Voting is disabled, but you can still comment." : "投票は %s に有効期限が切れました。投票はできませんがコメントはできます。", + "Switch all options at once" : "すべてのオプションを一度に切り替える", + "Your name here" : "名前はここ", + "This form was updated since your last visit. Please check your votes." : "投票が前回から更新されました。投票をチェックして下さい。", + "Vote!" : "投票!", + "Receive notification email on activity" : "アクティビティに関して通知メールを受け取る", + "Close details" : "詳細を閉じる", + "Close" : "閉じる", + "Expires on %s" : "%s に有効期限切れ", + "Invitation access" : "招待", + "Anononymous form" : "匿名の投票", + "Click to get link" : "クリックしてリンクを取得", + "Edit Form" : "投票を編集", + "Form expired" : "投票有効期限切れ", + "Comments" : "コメント", + "Login or ..." : "ログインするか。。。", + "New comment …" : "あたらしいコメント", + "No comments yet. Be the first." : "まだコメントはありません、これが最初。。。" +}, +"nplurals=1; plural=0;"); diff --git a/l10n/ja.json b/l10n/ja.json new file mode 100644 index 0000000..970e888 --- /dev/null +++ b/l10n/ja.json @@ -0,0 +1,82 @@ +{ "translations": { + "Do you really want to delete this new form?" : "この新しい投票を本当に削除しますか?", + "Copied!" : "コピーしました!", + "Copy" : "コピー", + "Not supported!" : "サポートされていません!", + "Press ⌘-C to copy." : "⌘-C でコピーします。", + "Press Ctrl-C to copy." : "Ctrl + Cを押してコピーします。", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "あなたは登録されていません。\n投票のための名前を入力して下さい(3文字以上)。", + "Please add some text to your comment before submitting it." : "追加する前にコメントにテキストを追加してください。", + "An error occurred, your comment was not posted." : "エラーが発生しました。あなたのコメントは投稿されていません。", + "Forms" : "投票", + "Forms App - New Activity" : "投票アプリ - 新機能", + "{user} participated in the form \"{title}\"" : "{user} は、投票 \"{title}\" に参加しました", + "Go to form" : "投票へ移動", + "just now" : "たった今", + "Expired" : "有効期限切れ", + "Expires %n" : "%n で期限が切れます", + "Expires never" : "有効期限なし", + "Anonymous form" : "匿名投票", + "Usernames hidden to Owner" : "オーナーに見えないユーザー名", + "Usernames visible to Owner" : "オーナーに見えるユーザー名", + "Group" : "グループ", + "Title" : "タイトル", + "Access" : "アクセス", + "Owner" : "オーナー", + "Created" : "作成されました", + "Expires" : "有効期限", + "Public access" : "パブリックアクセス", + "Only shared" : "共有中のみ", + "Registered users only" : "登録ユーザーのみ", + "Copy Link" : "リンクをコピー", + "Edit form" : "投票を編集", + "Delete form" : "投票を削除", + "Share with" : "と共有", + "Form description" : "投票の説明", + "Description" : "説明", + "Vote options" : "投票オプション", + "Event schedule" : "イベントスケジュール", + "Text based" : "テキストベースの", + "Add option" : "オプションを追加", + "You are editing in admin mode" : "管理モードで編集しています", + "Configuration" : "設定", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "設定がロックされました。オプション変更すると望まない結果になる可能性がありますが、アンロックできます。", + "Unlock configuration " : "設定をアンロックする", + "Form type" : "投票タイプ", + "Form configurations" : "投票設定", + "Allow \"maybe\" vote" : "「多分 maybe」投票を許可する", + "Hide user names for admin" : "管理者にユーザー名を隠す", + "hidden" : "非公開", + "Name of user or group" : "ユーザまたはグループの名前", + "Create new form" : "投票を作成", + "Writing form" : "書き込み中の投票", + "Update form" : "投票を更新", + "Expiration date" : "失効日", + "Click to add a date" : "クリックして日付を追加", + "New" : "新規作成", + "Click here to add a form" : "クリックして投票を追加", + "Access denied" : "アクセス拒否", + "You are not allowed to view this form or the form does not exist." : "投票を閲覧できないか、投票が存在しません。", + "You are not allowed to edit this form or the form does not exist." : "投票を編集できないか、投票が存在しません。", + "You are either not allowed to delete this form or it doesn't exist." : "投票を削除できないか、投票が存在しません。", + "No description provided." : "説明がありません", + "The form expired on %s. Voting is disabled, but you can still comment." : "投票は %s に有効期限が切れました。投票はできませんがコメントはできます。", + "Switch all options at once" : "すべてのオプションを一度に切り替える", + "Your name here" : "名前はここ", + "This form was updated since your last visit. Please check your votes." : "投票が前回から更新されました。投票をチェックして下さい。", + "Vote!" : "投票!", + "Receive notification email on activity" : "アクティビティに関して通知メールを受け取る", + "Close details" : "詳細を閉じる", + "Close" : "閉じる", + "Expires on %s" : "%s に有効期限切れ", + "Invitation access" : "招待", + "Anononymous form" : "匿名の投票", + "Click to get link" : "クリックしてリンクを取得", + "Edit Form" : "投票を編集", + "Form expired" : "投票有効期限切れ", + "Comments" : "コメント", + "Login or ..." : "ログインするか。。。", + "New comment …" : "あたらしいコメント", + "No comments yet. Be the first." : "まだコメントはありません、これが最初。。。" +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/ka_GE.js b/l10n/ka_GE.js new file mode 100644 index 0000000..b76a745 --- /dev/null +++ b/l10n/ka_GE.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "კოპირებულია!", + "Copy" : "კოპირება", + "Not supported!" : "არაა მხარდაჭერილი", + "Press ⌘-C to copy." : "კოპირებისთვის დააჭირეთ ⌘-C-ს.", + "Press Ctrl-C to copy." : "კოპირებისთვის დააჭირეთ Ctrl-C-ს.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "თქვენ არ ხართ რეგისტრირებული.\nხმის მისაცემათ გთხოვთ შეიყვანოთ თქვენი სახელი\n(მინ.: 3 ნიშანი).", + "Please add some text to your comment before submitting it." : "კომენტარის დამატებამდე გთხოვთ დაამატოთ ტექსტი.", + "An error occurred, your comment was not posted." : "წარმოიშვა შეცდომა, თქვენი კომენტარი არ გამოქვეყნდა.", + "Forms" : "გამოკითხვები", + "Forms App - New Activity" : "Forms აპლიკაცია - ახალი აქტივობა", + "just now" : "ამ წამს", + "Expired" : "გაუქმდა", + "Expires never" : "არასდროს უქმდება", + "Usernames hidden to Owner" : "მომხმარებლის სახელები მფლობელისთვის დამალულია", + "Usernames visible to Owner" : "მომხმარებლის სახელები მფლობელისთვის ხილვადია", + "Title" : "სათაური", + "Access" : "წვდომა", + "Owner" : "მფლობელი", + "Created" : "შექმნილია", + "Expires" : "უქმდება", + "Copy Link" : "ბმულის კოპირება", + "Delete form" : "გამოკითხვის გაუქმება", + "Description" : "აღწერილობა", + "Create new form" : "ახალი გამოკითხვის შექმნა", + "Update form" : "გამოკითხვის განახლება", + "Access denied" : "წვდომა არაა დაშვებული", + "You are not allowed to view this form or the form does not exist." : "ამ გამოკითხვის ჩვენების უფლებები არ გაქვთ, ან ის არ არსებობს.", + "You are not allowed to edit this form or the form does not exist." : "ამ გამოკითხვის ცვილების უფლება არ გაქვთ, ან გამოკითხვა არ არსებობს.", + "No description provided." : "აღწერილობა არაა მოწოდებული.", + "The form expired on %s. Voting is disabled, but you can still comment." : "გამოკითხვას ვადა გაუვიდა %s-ზე. გამოკითხვა არაა მოქმედი, თუმცა კომენტარის გაკეთება მაინც შეგიძლიათ.", + "Switch all options at once" : "პარამეტრების ერთბაში ცვლილება", + "Your name here" : "თქვენი სახელი აქ", + "Vote!" : "ხმის მიცემა!", + "Receive notification email on activity" : "აქტივობისას ელ-წერილის მიღება", + "Close details" : "დეტალების დახურვა", + "Close" : "დახურვა", + "Expires on %s" : "უქმდება %s-ში", + "Invitation access" : "მოწვევის წვდომა", + "Anononymous form" : "ანონიმური გამოკითხვა", + "Click to get link" : "მიიღეთ ბმული", + "Edit Form" : "გამოკითხვის ცვლილება", + "Form expired" : "გამოკთხვას ვადა გაუვიდა", + "Comments" : "კომენტარები", + "Login or ..." : "ავტორიზაცია ან ...", + "New comment …" : "ახალი კომენტარი ...", + "No comments yet. Be the first." : "კომენტარები ჯერ არაა. იყავით პირველი." +}, +"nplurals=2; plural=(n!=1);"); diff --git a/l10n/ka_GE.json b/l10n/ka_GE.json new file mode 100644 index 0000000..383d37a --- /dev/null +++ b/l10n/ka_GE.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "კოპირებულია!", + "Copy" : "კოპირება", + "Not supported!" : "არაა მხარდაჭერილი", + "Press ⌘-C to copy." : "კოპირებისთვის დააჭირეთ ⌘-C-ს.", + "Press Ctrl-C to copy." : "კოპირებისთვის დააჭირეთ Ctrl-C-ს.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "თქვენ არ ხართ რეგისტრირებული.\nხმის მისაცემათ გთხოვთ შეიყვანოთ თქვენი სახელი\n(მინ.: 3 ნიშანი).", + "Please add some text to your comment before submitting it." : "კომენტარის დამატებამდე გთხოვთ დაამატოთ ტექსტი.", + "An error occurred, your comment was not posted." : "წარმოიშვა შეცდომა, თქვენი კომენტარი არ გამოქვეყნდა.", + "Forms" : "გამოკითხვები", + "Forms App - New Activity" : "Forms აპლიკაცია - ახალი აქტივობა", + "just now" : "ამ წამს", + "Expired" : "გაუქმდა", + "Expires never" : "არასდროს უქმდება", + "Usernames hidden to Owner" : "მომხმარებლის სახელები მფლობელისთვის დამალულია", + "Usernames visible to Owner" : "მომხმარებლის სახელები მფლობელისთვის ხილვადია", + "Title" : "სათაური", + "Access" : "წვდომა", + "Owner" : "მფლობელი", + "Created" : "შექმნილია", + "Expires" : "უქმდება", + "Copy Link" : "ბმულის კოპირება", + "Delete form" : "გამოკითხვის გაუქმება", + "Description" : "აღწერილობა", + "Create new form" : "ახალი გამოკითხვის შექმნა", + "Update form" : "გამოკითხვის განახლება", + "Access denied" : "წვდომა არაა დაშვებული", + "You are not allowed to view this form or the form does not exist." : "ამ გამოკითხვის ჩვენების უფლებები არ გაქვთ, ან ის არ არსებობს.", + "You are not allowed to edit this form or the form does not exist." : "ამ გამოკითხვის ცვილების უფლება არ გაქვთ, ან გამოკითხვა არ არსებობს.", + "No description provided." : "აღწერილობა არაა მოწოდებული.", + "The form expired on %s. Voting is disabled, but you can still comment." : "გამოკითხვას ვადა გაუვიდა %s-ზე. გამოკითხვა არაა მოქმედი, თუმცა კომენტარის გაკეთება მაინც შეგიძლიათ.", + "Switch all options at once" : "პარამეტრების ერთბაში ცვლილება", + "Your name here" : "თქვენი სახელი აქ", + "Vote!" : "ხმის მიცემა!", + "Receive notification email on activity" : "აქტივობისას ელ-წერილის მიღება", + "Close details" : "დეტალების დახურვა", + "Close" : "დახურვა", + "Expires on %s" : "უქმდება %s-ში", + "Invitation access" : "მოწვევის წვდომა", + "Anononymous form" : "ანონიმური გამოკითხვა", + "Click to get link" : "მიიღეთ ბმული", + "Edit Form" : "გამოკითხვის ცვლილება", + "Form expired" : "გამოკთხვას ვადა გაუვიდა", + "Comments" : "კომენტარები", + "Login or ..." : "ავტორიზაცია ან ...", + "New comment …" : "ახალი კომენტარი ...", + "No comments yet. Be the first." : "კომენტარები ჯერ არაა. იყავით პირველი." +},"pluralForm" :"nplurals=2; plural=(n!=1);" +} \ No newline at end of file diff --git a/l10n/ko.js b/l10n/ko.js new file mode 100644 index 0000000..9432993 --- /dev/null +++ b/l10n/ko.js @@ -0,0 +1,51 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "복사 성공!", + "Copy" : "복사", + "Not supported!" : "지원하지 않음!", + "Press ⌘-C to copy." : "복사하려면 ⌘-C 키를 누르십시오.", + "Press Ctrl-C to copy." : "복사하려면 Ctrl-C 키를 누르십시오.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "등록하지 않았습니다.\n투표하려면 이름을 입력하십시오\n(최소 3글자).", + "Please add some text to your comment before submitting it." : "댓글을 올리기 전에 텍스트를 입력하십시오.", + "An error occurred, your comment was not posted." : "오류가 발생했습니다. 댓글을 올리지 못했습니다.", + "Forms" : "투표", + "Forms App - New Activity" : "투표 앱 - 새로운 활동", + "just now" : "지금", + "Expired" : "만료됨", + "Expires never" : "만료되지 않음", + "Usernames hidden to Owner" : "소유자에게 사용자 이름 숨기기", + "Usernames visible to Owner" : "소유자에게 사용자 이름 보이기", + "Title" : "제목", + "Access" : "접근 권한", + "Owner" : "소유자", + "Created" : "만든 날짜", + "Expires" : "끝나는 시간", + "Copy Link" : "링크 복사", + "Delete form" : "투표 삭제", + "Description" : "설명", + "Create new form" : "새 투표 만들기", + "Update form" : "투표 업데이트", + "Access denied" : "접근이 거부됨", + "You are not allowed to view this form or the form does not exist." : "이 투표를 볼 수 없거나 투표가 존재하지 않습니다.", + "You are not allowed to edit this form or the form does not exist." : "이 투표를 편집할 수 없거나 투표가 존재하지 않습니다.", + "No description provided." : "설명을 입력하지 않았습니다.", + "The form expired on %s. Voting is disabled, but you can still comment." : "투표가 %s에 끝났습니다. 더 이상 투표할 수는 없지만 댓글을 남길 수는 있습니다.", + "Switch all options at once" : "모든 옵션을 한번에 전환", + "Your name here" : "이름을 입력하십시오", + "Vote!" : "투표하기!", + "Receive notification email on activity" : "활동 이메일 알림 받기", + "Close details" : "자세한 정보 숨기기", + "Close" : "닫기", + "Expires on %s" : "%s에 만료됨", + "Invitation access" : "초대장 접근", + "Anononymous form" : "익명 투표", + "Click to get link" : "눌러서 링크 가져오기", + "Edit Form" : "투표 편집", + "Form expired" : "투표 만료됨", + "Comments" : "댓글", + "Login or ..." : "로그인 및 ...", + "New comment …" : "새 댓글…", + "No comments yet. Be the first." : "아직 댓글이 없습니다. 첫 댓글을 남겨 보십시오." +}, +"nplurals=1; plural=0;"); diff --git a/l10n/ko.json b/l10n/ko.json new file mode 100644 index 0000000..60c29cc --- /dev/null +++ b/l10n/ko.json @@ -0,0 +1,49 @@ +{ "translations": { + "Copied!" : "복사 성공!", + "Copy" : "복사", + "Not supported!" : "지원하지 않음!", + "Press ⌘-C to copy." : "복사하려면 ⌘-C 키를 누르십시오.", + "Press Ctrl-C to copy." : "복사하려면 Ctrl-C 키를 누르십시오.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "등록하지 않았습니다.\n투표하려면 이름을 입력하십시오\n(최소 3글자).", + "Please add some text to your comment before submitting it." : "댓글을 올리기 전에 텍스트를 입력하십시오.", + "An error occurred, your comment was not posted." : "오류가 발생했습니다. 댓글을 올리지 못했습니다.", + "Forms" : "투표", + "Forms App - New Activity" : "투표 앱 - 새로운 활동", + "just now" : "지금", + "Expired" : "만료됨", + "Expires never" : "만료되지 않음", + "Usernames hidden to Owner" : "소유자에게 사용자 이름 숨기기", + "Usernames visible to Owner" : "소유자에게 사용자 이름 보이기", + "Title" : "제목", + "Access" : "접근 권한", + "Owner" : "소유자", + "Created" : "만든 날짜", + "Expires" : "끝나는 시간", + "Copy Link" : "링크 복사", + "Delete form" : "투표 삭제", + "Description" : "설명", + "Create new form" : "새 투표 만들기", + "Update form" : "투표 업데이트", + "Access denied" : "접근이 거부됨", + "You are not allowed to view this form or the form does not exist." : "이 투표를 볼 수 없거나 투표가 존재하지 않습니다.", + "You are not allowed to edit this form or the form does not exist." : "이 투표를 편집할 수 없거나 투표가 존재하지 않습니다.", + "No description provided." : "설명을 입력하지 않았습니다.", + "The form expired on %s. Voting is disabled, but you can still comment." : "투표가 %s에 끝났습니다. 더 이상 투표할 수는 없지만 댓글을 남길 수는 있습니다.", + "Switch all options at once" : "모든 옵션을 한번에 전환", + "Your name here" : "이름을 입력하십시오", + "Vote!" : "투표하기!", + "Receive notification email on activity" : "활동 이메일 알림 받기", + "Close details" : "자세한 정보 숨기기", + "Close" : "닫기", + "Expires on %s" : "%s에 만료됨", + "Invitation access" : "초대장 접근", + "Anononymous form" : "익명 투표", + "Click to get link" : "눌러서 링크 가져오기", + "Edit Form" : "투표 편집", + "Form expired" : "투표 만료됨", + "Comments" : "댓글", + "Login or ..." : "로그인 및 ...", + "New comment …" : "새 댓글…", + "No comments yet. Be the first." : "아직 댓글이 없습니다. 첫 댓글을 남겨 보십시오." +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/lt_LT.js b/l10n/lt_LT.js new file mode 100644 index 0000000..c65c4c8 --- /dev/null +++ b/l10n/lt_LT.js @@ -0,0 +1,32 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Nukopijuota!", + "Copy" : "Kopijuoti", + "Not supported!" : "Nepalaikoma!", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Jūs nesate užsiregistravę.\nNorėdami balsuoti, įveskite savo vardą\n(bent 3 simbolius).", + "An error occurred, your comment was not posted." : "Įvyko klaida, jūsų komentaras nebuvo paskelbtas.", + "Forms" : "Apklausos", + "just now" : "ką tik", + "Group" : "Grupė", + "Title" : "Pavadinimas", + "Owner" : "Savininkas", + "never" : "niekada", + "Copy Link" : "Kopijuoti nuorodą", + "Link copied to clipboard" : "Nuoroda nukopijuota į iškarpinę", + "Error, while copying link to clipboard" : "Klaida kopijuojant nuorodą į iškarpinę", + "Description" : "Aprašas", + "Unlock configuration " : "Atrakinti konfigūraciją", + "Create new form" : "Sukurti naują apklausą", + "Update form" : "Atnaujinti apklausą", + "Cancel" : "Atsisakyti", + "Apply" : "Taikyti", + "Access denied" : "Prieiga negalima", + "You are not allowed to view this form or the form does not exist." : "Jums neleidžiama peržiūrėti šios apklausos arba apklausos nėra.", + "No description provided." : "Nepateiktas aprašas.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Apklausa pasibaigė %s. Balsavimas yra išjungtas, tačiau vis dar galite komentuoti.", + "Close" : "Užverti", + "Form expired" : "Apklausa pasibaigė", + "New comment …" : "Naujas komentaras …" +}, +"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/l10n/lt_LT.json b/l10n/lt_LT.json new file mode 100644 index 0000000..12ca874 --- /dev/null +++ b/l10n/lt_LT.json @@ -0,0 +1,30 @@ +{ "translations": { + "Copied!" : "Nukopijuota!", + "Copy" : "Kopijuoti", + "Not supported!" : "Nepalaikoma!", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Jūs nesate užsiregistravę.\nNorėdami balsuoti, įveskite savo vardą\n(bent 3 simbolius).", + "An error occurred, your comment was not posted." : "Įvyko klaida, jūsų komentaras nebuvo paskelbtas.", + "Forms" : "Apklausos", + "just now" : "ką tik", + "Group" : "Grupė", + "Title" : "Pavadinimas", + "Owner" : "Savininkas", + "never" : "niekada", + "Copy Link" : "Kopijuoti nuorodą", + "Link copied to clipboard" : "Nuoroda nukopijuota į iškarpinę", + "Error, while copying link to clipboard" : "Klaida kopijuojant nuorodą į iškarpinę", + "Description" : "Aprašas", + "Unlock configuration " : "Atrakinti konfigūraciją", + "Create new form" : "Sukurti naują apklausą", + "Update form" : "Atnaujinti apklausą", + "Cancel" : "Atsisakyti", + "Apply" : "Taikyti", + "Access denied" : "Prieiga negalima", + "You are not allowed to view this form or the form does not exist." : "Jums neleidžiama peržiūrėti šios apklausos arba apklausos nėra.", + "No description provided." : "Nepateiktas aprašas.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Apklausa pasibaigė %s. Balsavimas yra išjungtas, tačiau vis dar galite komentuoti.", + "Close" : "Užverti", + "Form expired" : "Apklausa pasibaigė", + "New comment …" : "Naujas komentaras …" +},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" +} \ No newline at end of file diff --git a/l10n/nb.js b/l10n/nb.js new file mode 100644 index 0000000..ac094a8 --- /dev/null +++ b/l10n/nb.js @@ -0,0 +1,52 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Kopiert!", + "Copy" : "Kopier", + "Not supported!" : "Ikke støttet!", + "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere.", + "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Du er ikke registrert.\nSkriv inn navnet ditt for å avgi stemme\n(minst 3 tegn).", + "Please add some text to your comment before submitting it." : "Legg til noe tekst i kommentaren din før du sender den inn.", + "An error occurred, your comment was not posted." : "Det oppstod en feil, kommentaren din ble ikke postet.", + "Forms" : "Avstemninger", + "Forms App - New Activity" : "Avstemningsapp - Ny aktivitet", + "just now" : "akkurat nå", + "Expired" : "Utløpt", + "Expires never" : "Utløper ikke", + "Usernames hidden to Owner" : "Brukernavn skjult for eieren", + "Usernames visible to Owner" : "Brukernavn synlige for eieren", + "Title" : "Tittel", + "Access" : "Tilgang", + "Owner" : "Eier", + "Created" : "Opprettet", + "Expires" : "Utløper", + "Copy Link" : "Kopier lenke", + "Delete form" : "Slett avstemning", + "_There is %n comment_::_There are %n comments_" : ["Det er én %n kommentar","Det er %n kommentarer"], + "Description" : "Beskrivelse", + "Create new form" : "Opprett ny avstemning", + "Update form" : "Oppdater avstemning", + "Access denied" : "Tilgang nektet", + "You are not allowed to view this form or the form does not exist." : "Du har ikke tilgang til å se denne avstemningen, eller så finnes den ikke.", + "You are not allowed to edit this form or the form does not exist." : "Du har ikke tilgang til å redigere denne avstemningen, eller så finnes den ikke.", + "No description provided." : "Ingen beskrivelse angitt.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Avstemningen utløp den %s. Du kan ikke lenger avgi stemme, men det går an å kommentere.", + "Switch all options at once" : "Bytt alle valg samtidig", + "Your name here" : "Ditt navn her", + "Vote!" : "Stem!", + "Receive notification email on activity" : "Motta e-postvarsel ved aktivitet", + "Close details" : "Lukk detaljer", + "Close" : "Lukk", + "Expires on %s" : "Utløper den %s", + "Invitation access" : "Invitasjonstilgang", + "Anononymous form" : "Anonym avstemning", + "Click to get link" : "Klikk for å hente lenke", + "Edit Form" : "Rediger avstemning", + "Form expired" : "Avstemning utløpt", + "Comments" : "Kommentarer", + "Login or ..." : "Logg inn eller …", + "New comment …" : "Ny kommentar…", + "No comments yet. Be the first." : "Ingen kommentarer enda. Vær først." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/nb.json b/l10n/nb.json new file mode 100644 index 0000000..86996be --- /dev/null +++ b/l10n/nb.json @@ -0,0 +1,50 @@ +{ "translations": { + "Copied!" : "Kopiert!", + "Copy" : "Kopier", + "Not supported!" : "Ikke støttet!", + "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere.", + "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Du er ikke registrert.\nSkriv inn navnet ditt for å avgi stemme\n(minst 3 tegn).", + "Please add some text to your comment before submitting it." : "Legg til noe tekst i kommentaren din før du sender den inn.", + "An error occurred, your comment was not posted." : "Det oppstod en feil, kommentaren din ble ikke postet.", + "Forms" : "Avstemninger", + "Forms App - New Activity" : "Avstemningsapp - Ny aktivitet", + "just now" : "akkurat nå", + "Expired" : "Utløpt", + "Expires never" : "Utløper ikke", + "Usernames hidden to Owner" : "Brukernavn skjult for eieren", + "Usernames visible to Owner" : "Brukernavn synlige for eieren", + "Title" : "Tittel", + "Access" : "Tilgang", + "Owner" : "Eier", + "Created" : "Opprettet", + "Expires" : "Utløper", + "Copy Link" : "Kopier lenke", + "Delete form" : "Slett avstemning", + "_There is %n comment_::_There are %n comments_" : ["Det er én %n kommentar","Det er %n kommentarer"], + "Description" : "Beskrivelse", + "Create new form" : "Opprett ny avstemning", + "Update form" : "Oppdater avstemning", + "Access denied" : "Tilgang nektet", + "You are not allowed to view this form or the form does not exist." : "Du har ikke tilgang til å se denne avstemningen, eller så finnes den ikke.", + "You are not allowed to edit this form or the form does not exist." : "Du har ikke tilgang til å redigere denne avstemningen, eller så finnes den ikke.", + "No description provided." : "Ingen beskrivelse angitt.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Avstemningen utløp den %s. Du kan ikke lenger avgi stemme, men det går an å kommentere.", + "Switch all options at once" : "Bytt alle valg samtidig", + "Your name here" : "Ditt navn her", + "Vote!" : "Stem!", + "Receive notification email on activity" : "Motta e-postvarsel ved aktivitet", + "Close details" : "Lukk detaljer", + "Close" : "Lukk", + "Expires on %s" : "Utløper den %s", + "Invitation access" : "Invitasjonstilgang", + "Anononymous form" : "Anonym avstemning", + "Click to get link" : "Klikk for å hente lenke", + "Edit Form" : "Rediger avstemning", + "Form expired" : "Avstemning utløpt", + "Comments" : "Kommentarer", + "Login or ..." : "Logg inn eller …", + "New comment …" : "Ny kommentar…", + "No comments yet. Be the first." : "Ingen kommentarer enda. Vær først." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/nl.js b/l10n/nl.js new file mode 100644 index 0000000..0b45780 --- /dev/null +++ b/l10n/nl.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Wil je echt deze nieuwe peiling verwijderen?", + "Copied!" : "Gekopieerd!", + "Copy" : "Kopieer", + "Not supported!" : "Geen ondersteuning!", + "Press ⌘-C to copy." : "Druk ⌘-C om te kopiëren.", + "Press Ctrl-C to copy." : "Druk op Ctrl-C om te kopiëren.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Je bent niet geregistreerd\nGeef je naam in om te stemmen\n(tenminste 3 tekens).", + "Please add some text to your comment before submitting it." : "Gelieve wat tekst aan de reactie toe te voegen voordat je hem plaatst.", + "An error occurred, your comment was not posted." : "Je opmerking is niet geplaatst vanwege een probleem.", + "Forms" : "Peilingen", + "Forms App - New Activity" : "Peilingen App - Nieuwe Activiteit", + "{user} participated in the form \"{title}\"" : "{user} deed mee aan peiliing \"{title}\"", + "Go to form" : "Ga naar peiling", + "just now" : "zojuist", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Een peilingenapp, net als doodle/dudle met de mogelijkheid om toegang te beperken.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Een peilingenapp, zoals doodle/dudle met de mogelijkheid om toegang te beperken (leden, bepaalde groepen/gebruikers, verborgen en openbaar).", + "Expired" : "Vervallen", + "Expires %n" : "Vervalt%n", + "Expires never" : "Vervalt nooit", + "Anonymous form" : "Anonieme peiling", + "Usernames hidden to Owner" : "Gebruikersnamen verborgen voor Eigenaar", + "Usernames visible to Owner" : "Gebruikersnamen zichtbaar voor Eigenaar", + "Group" : "Groep", + "Title" : "Titel", + "Access" : "Toegang", + "Owner" : "Eigenaar", + "Created" : "Gemaakt", + "Expires" : "Verloopt", + "Public access" : "Openbare toegang", + "Only shared" : "Alleen gedeeld", + "Registered users only" : "Alleen geregistreerde gebruikers", + "Hidden form" : "Verborgen peiling", + "Text form" : "Tekst peiling", + "Date form" : "Datum peiling", + "never" : "nooit", + "Copy Link" : "Kopieer Link", + "Clone form" : "Kopieer de peiling", + "Edit form" : "Peiling bijwerken", + "Delete form" : "Verwijder peiling", + "Edit form as admin" : "Bewerk peiling als beheerder", + "Delete form as admin" : "Verwijder de peiling als beheerder", + "Link copied to clipboard" : "Link gekopieerd naar het klembord", + "Error, while copying link to clipboard" : "Fout bij kopiëren link naar klembord", + "_There is %n comment_::_There are %n comments_" : ["Er is %n reactie","Er zijn %n reacties"], + "Share with" : "Delen met", + "Form description" : "Beschrijving peiling", + "Description" : "Beschrijving", + "Vote options" : "Stem opties", + "Event schedule" : "Afsprakenrooster", + "Text based" : "Tekst gebaseerd", + "Shift dates" : "Verschuiven datums", + "Shift all dates for " : "Verschuif alle datums voor", + "Add option" : "Toevoegen optie", + "You are editing in admin mode" : "Je werkt nu in beheerdersmodus", + "Configuration" : "Configuratie", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Configuratie is beschermd. Wijzigen van de opties kan leiden tot ongewenst gedrag, maar je kunt de configuratie hoe dan ook vrijgeven.", + "Unlock configuration " : "Vrijgeven configuratie", + "Form type" : "Type peiling", + "Form configurations" : "Peilingconfiguratie", + "Allow \"maybe\" vote" : "Sta een Misschien stem toe", + "Hide user names for admin" : "Verberg gebruikersnamen voor beheerder", + "hidden" : "verborgen", + "Name of user or group" : "Naam van gebruiker of groep", + "Create new form" : "Nieuwe peiling aanmaken", + "Writing form" : "Wegschrijven peiling", + "Update form" : "Peiling bijwerken", + "Expiration date" : "Vervaldatum", + "Click to add a date" : "Klik om een datum in te stellen", + "Shift all date options" : "Verschuif alle datums opties", + "Cancel" : "Annuleren", + "Apply" : "Toepassen", + "Title must not be empty!" : "Titel mag niet leeg zijn!", + "%n successfully saved" : "%n succesvol opgeslagen", + "Error on saving form, see console" : "Fout bij opslaan peiling, zie console", + "Clone of %n" : "Kloon van %n", + "New" : "Nieuw", + "Click here to add a form" : "Klik hier om een peiling toe te voegen", + "Do you want to delete \"%n\"?" : "Wil je \"%n\" echt verwijderen?", + "No, keep form." : "Nee, bewaar de peiling", + "Yes, delete form." : "Ja, verwijderd de peiling", + "Form \"%n\" deleted" : "Peiling \"%n\" verwijderd", + "Error while deleting Form \"%n\"" : "Fout bij verwijderen van Peiling \"%n\"", + "Access denied" : "Toegang geweigerd", + "You are not allowed to view this form or the form does not exist." : "Je bent niet gemachtigd om de peiling te zien of de peiling bestaat niet.", + "You are not allowed to edit this form or the form does not exist." : "Je bent niet gemachtigd om de peiling te bewerken of de peiling bestaat niet.", + "You are either not allowed to delete this form or it doesn't exist." : "Je mag deze peiling niet verwijderen of de peiling bestaat niet.", + "No description provided." : "Geen beschrijving verstrekt.", + "The form expired on %s. Voting is disabled, but you can still comment." : "De peiling is verlopen op %s. Stemmen is uitgeschakeld, maar je kunt nog steeds reacties plaatsen.", + "Switch all options at once" : "Direct omschakelen alle opties", + "Your name here" : "Schrijf hier je naam", + "Say yes to all" : "Zeg ja tegen alles", + "Reset all (say no)" : "Alle herstellen (nee zeggen)", + "Say maybe to all" : "Zeg misschien tegen alles", + "This form was updated since your last visit. Please check your votes." : "Deze peiling is bijgewerkt sinds je vorige bezoek. Controleer je stemmen.", + "Vote!" : "Stemmen!", + "Receive notification email on activity" : "Ontvang email melding bij activiteit", + "Close details" : "Sluit details", + "Close" : "Sluiten", + "Expires on %s" : "Vervalt op %s", + "Invitation access" : "Ongeldige toegang", + "Anononymous form" : "Anonieme peiling", + "Click to get link" : "Klik om de link te krijgen", + "Edit Form" : "Peiling aanpassen", + "Form expired" : "Peiling is verlopen", + "Comments" : "Reacties", + "Login or ..." : "Login of ...", + "New comment …" : "Nieuwe reactie ...", + "No comments yet. Be the first." : "Nog geen reacties. Ben de eerste." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/nl.json b/l10n/nl.json new file mode 100644 index 0000000..a96a9f0 --- /dev/null +++ b/l10n/nl.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Wil je echt deze nieuwe peiling verwijderen?", + "Copied!" : "Gekopieerd!", + "Copy" : "Kopieer", + "Not supported!" : "Geen ondersteuning!", + "Press ⌘-C to copy." : "Druk ⌘-C om te kopiëren.", + "Press Ctrl-C to copy." : "Druk op Ctrl-C om te kopiëren.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Je bent niet geregistreerd\nGeef je naam in om te stemmen\n(tenminste 3 tekens).", + "Please add some text to your comment before submitting it." : "Gelieve wat tekst aan de reactie toe te voegen voordat je hem plaatst.", + "An error occurred, your comment was not posted." : "Je opmerking is niet geplaatst vanwege een probleem.", + "Forms" : "Peilingen", + "Forms App - New Activity" : "Peilingen App - Nieuwe Activiteit", + "{user} participated in the form \"{title}\"" : "{user} deed mee aan peiliing \"{title}\"", + "Go to form" : "Ga naar peiling", + "just now" : "zojuist", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Een peilingenapp, net als doodle/dudle met de mogelijkheid om toegang te beperken.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Een peilingenapp, zoals doodle/dudle met de mogelijkheid om toegang te beperken (leden, bepaalde groepen/gebruikers, verborgen en openbaar).", + "Expired" : "Vervallen", + "Expires %n" : "Vervalt%n", + "Expires never" : "Vervalt nooit", + "Anonymous form" : "Anonieme peiling", + "Usernames hidden to Owner" : "Gebruikersnamen verborgen voor Eigenaar", + "Usernames visible to Owner" : "Gebruikersnamen zichtbaar voor Eigenaar", + "Group" : "Groep", + "Title" : "Titel", + "Access" : "Toegang", + "Owner" : "Eigenaar", + "Created" : "Gemaakt", + "Expires" : "Verloopt", + "Public access" : "Openbare toegang", + "Only shared" : "Alleen gedeeld", + "Registered users only" : "Alleen geregistreerde gebruikers", + "Hidden form" : "Verborgen peiling", + "Text form" : "Tekst peiling", + "Date form" : "Datum peiling", + "never" : "nooit", + "Copy Link" : "Kopieer Link", + "Clone form" : "Kopieer de peiling", + "Edit form" : "Peiling bijwerken", + "Delete form" : "Verwijder peiling", + "Edit form as admin" : "Bewerk peiling als beheerder", + "Delete form as admin" : "Verwijder de peiling als beheerder", + "Link copied to clipboard" : "Link gekopieerd naar het klembord", + "Error, while copying link to clipboard" : "Fout bij kopiëren link naar klembord", + "_There is %n comment_::_There are %n comments_" : ["Er is %n reactie","Er zijn %n reacties"], + "Share with" : "Delen met", + "Form description" : "Beschrijving peiling", + "Description" : "Beschrijving", + "Vote options" : "Stem opties", + "Event schedule" : "Afsprakenrooster", + "Text based" : "Tekst gebaseerd", + "Shift dates" : "Verschuiven datums", + "Shift all dates for " : "Verschuif alle datums voor", + "Add option" : "Toevoegen optie", + "You are editing in admin mode" : "Je werkt nu in beheerdersmodus", + "Configuration" : "Configuratie", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Configuratie is beschermd. Wijzigen van de opties kan leiden tot ongewenst gedrag, maar je kunt de configuratie hoe dan ook vrijgeven.", + "Unlock configuration " : "Vrijgeven configuratie", + "Form type" : "Type peiling", + "Form configurations" : "Peilingconfiguratie", + "Allow \"maybe\" vote" : "Sta een Misschien stem toe", + "Hide user names for admin" : "Verberg gebruikersnamen voor beheerder", + "hidden" : "verborgen", + "Name of user or group" : "Naam van gebruiker of groep", + "Create new form" : "Nieuwe peiling aanmaken", + "Writing form" : "Wegschrijven peiling", + "Update form" : "Peiling bijwerken", + "Expiration date" : "Vervaldatum", + "Click to add a date" : "Klik om een datum in te stellen", + "Shift all date options" : "Verschuif alle datums opties", + "Cancel" : "Annuleren", + "Apply" : "Toepassen", + "Title must not be empty!" : "Titel mag niet leeg zijn!", + "%n successfully saved" : "%n succesvol opgeslagen", + "Error on saving form, see console" : "Fout bij opslaan peiling, zie console", + "Clone of %n" : "Kloon van %n", + "New" : "Nieuw", + "Click here to add a form" : "Klik hier om een peiling toe te voegen", + "Do you want to delete \"%n\"?" : "Wil je \"%n\" echt verwijderen?", + "No, keep form." : "Nee, bewaar de peiling", + "Yes, delete form." : "Ja, verwijderd de peiling", + "Form \"%n\" deleted" : "Peiling \"%n\" verwijderd", + "Error while deleting Form \"%n\"" : "Fout bij verwijderen van Peiling \"%n\"", + "Access denied" : "Toegang geweigerd", + "You are not allowed to view this form or the form does not exist." : "Je bent niet gemachtigd om de peiling te zien of de peiling bestaat niet.", + "You are not allowed to edit this form or the form does not exist." : "Je bent niet gemachtigd om de peiling te bewerken of de peiling bestaat niet.", + "You are either not allowed to delete this form or it doesn't exist." : "Je mag deze peiling niet verwijderen of de peiling bestaat niet.", + "No description provided." : "Geen beschrijving verstrekt.", + "The form expired on %s. Voting is disabled, but you can still comment." : "De peiling is verlopen op %s. Stemmen is uitgeschakeld, maar je kunt nog steeds reacties plaatsen.", + "Switch all options at once" : "Direct omschakelen alle opties", + "Your name here" : "Schrijf hier je naam", + "Say yes to all" : "Zeg ja tegen alles", + "Reset all (say no)" : "Alle herstellen (nee zeggen)", + "Say maybe to all" : "Zeg misschien tegen alles", + "This form was updated since your last visit. Please check your votes." : "Deze peiling is bijgewerkt sinds je vorige bezoek. Controleer je stemmen.", + "Vote!" : "Stemmen!", + "Receive notification email on activity" : "Ontvang email melding bij activiteit", + "Close details" : "Sluit details", + "Close" : "Sluiten", + "Expires on %s" : "Vervalt op %s", + "Invitation access" : "Ongeldige toegang", + "Anononymous form" : "Anonieme peiling", + "Click to get link" : "Klik om de link te krijgen", + "Edit Form" : "Peiling aanpassen", + "Form expired" : "Peiling is verlopen", + "Comments" : "Reacties", + "Login or ..." : "Login of ...", + "New comment …" : "Nieuwe reactie ...", + "No comments yet. Be the first." : "Nog geen reacties. Ben de eerste." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/pl.js b/l10n/pl.js new file mode 100644 index 0000000..df43bc3 --- /dev/null +++ b/l10n/pl.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Czy na pewno chcesz usunąć tę nową sondę?", + "Copied!" : "Skopiowano!", + "Copy" : "Kopiuj", + "Not supported!" : "Niewspierane!", + "Press ⌘-C to copy." : "Aby skopiować wciśnij ⌘-C.", + "Press Ctrl-C to copy." : "Wciśnij Ctrl-C by skopiować.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nie jesteś zarejestrowany.\nPodaj proszę imię aby zagłosować\n(co najmniej 3 znaki)", + "Please add some text to your comment before submitting it." : "Dodaj jakiś tekst do Twojego komentarza przed jego wysłaniem.", + "An error occurred, your comment was not posted." : "Wystąpił błąd, Twój komentarz nie został wysłany…", + "Forms" : "Sondy", + "Forms App - New Activity" : "Aplikacja Sondy - Nowa aktywność", + "{user} participated in the form \"{title}\"" : "{user} wziął udział w sondzie \"{title}\"", + "Go to form" : "Idź do sondy", + "just now" : "Właśnie teraz", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Aplikacja sondażowa przypominająca doodle/dudle z możliwością ograniczania dostępu.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Aplikacja sondażowa przypominająca doodle/dudle z możliwością ograniczania dostępu (członkowie, określone grupy/użytkownicy, ukryte i publiczne).", + "Expired" : "Wygasło", + "Expires %n" : "Wygasa %n", + "Expires never" : "Nigdy nie wygasa", + "Anonymous form" : "Anonimowa sonda", + "Usernames hidden to Owner" : "Nazwy użytkownika ukryte dla właściciela", + "Usernames visible to Owner" : "Nazwy użytkownika widoczne dla właściciela", + "Group" : "Grupa", + "Title" : "Tytuł", + "Access" : "Dostęp", + "Owner" : "Właściciel", + "Created" : "Utworzona", + "Expires" : "Wygasa", + "Public access" : "Dostęp publiczny", + "Only shared" : "Tylko udostępnione", + "Registered users only" : "Tylko dla zarejestrowanych użytkowników", + "Hidden form" : "Ukryta sonda", + "Text form" : "Tekst sondy", + "Date form" : "Data sondy", + "never" : "nigdy", + "Copy Link" : "Skopiuj link", + "Clone form" : "Sklonuj sondę", + "Edit form" : "Edytuj sondę", + "Delete form" : "Usuń sondę", + "Edit form as admin" : "Edytuj sondę jako administrator", + "Delete form as admin" : "Usuń sondę jako administrator", + "Link copied to clipboard" : "Link skopiowany do schowka", + "Error, while copying link to clipboard" : "Błąd podczas kopiowania linku do schowka", + "_There is %n comment_::_There are %n comments_" : ["Jest %n komentarz","Są %n komentarze","Jest %n komentarzy","Jest %n komentarzy"], + "Share with" : "Udostępnij dla", + "Form description" : "Opis sondy", + "Description" : "Opis", + "Vote options" : "Opcje głosowania", + "Event schedule" : "Harmonogram wydarzeń", + "Text based" : "Oparta na tekście", + "Shift dates" : "Zmień datę", + "Shift all dates for " : "Zmień wszystkie daty dla", + "Add option" : "Dodaj opcję", + "You are editing in admin mode" : "Edytujesz w trybie administratora", + "Configuration" : "Konfiguracja", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Konfiguracja jest zablokowana. Zmiana opcji może spowodować niepożądane efekty. Możesz ją odblokować.", + "Unlock configuration " : "Odblokuj konfigurację", + "Form type" : "Typ sondy", + "Form configurations" : "Konfiguracje sondy", + "Allow \"maybe\" vote" : "Zezwalaj głosować na „może”", + "Hide user names for admin" : "Ukryj nazwy użytkowników dla administratora", + "hidden" : "ukryta", + "Name of user or group" : "Nazwa użytkownika lub grupy", + "Create new form" : "Stwórz nową sondę", + "Writing form" : "Pisanie sondy", + "Update form" : "Aktualizuj sondę", + "Expiration date" : "Data wygaśnięcia", + "Click to add a date" : "Kliknij, aby dodać datę", + "Shift all date options" : "Zmień wszystkie opcje daty", + "Cancel" : "Anuluj", + "Apply" : "Zastosuj", + "Title must not be empty!" : "Tytuł nie może być pusty!", + "%n successfully saved" : "%n została pomyślnie zapisana", + "Error on saving form, see console" : "Błąd podczas zapisywania sondy. Zobacz konsole", + "Clone of %n" : "Klon %n", + "New" : "Nowy", + "Click here to add a form" : "Kliknij tutaj, aby dodać sondę", + "Do you want to delete \"%n\"?" : "Czy chcesz usunąć \"%n\"?", + "No, keep form." : "Nie, zachowaj sondę.", + "Yes, delete form." : "Tak, usuń sondę.", + "Form \"%n\" deleted" : "Sonda „%n” usunięta", + "Error while deleting Form \"%n\"" : "Błąd podczas usuwania sondy „%n”", + "Access denied" : "Dostęp zabroniony", + "You are not allowed to view this form or the form does not exist." : "Nie masz uprawnień do tej sondy lub sonda nie istnieje.", + "You are not allowed to edit this form or the form does not exist." : "Nie masz uprawnień do edycji tej sondy lub sonda nie istnieje.", + "You are either not allowed to delete this form or it doesn't exist." : "Nie możesz usunąć tej sondy lub nie istnieje.", + "No description provided." : "Nie podano opisu.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Sonda wygasła %s. Głosowanie zablokowane, ale ciągle możesz wpisywać komentarze.", + "Switch all options at once" : "Przełącz wszystkie opcje jednocześnie", + "Your name here" : "Twoje imię", + "Say yes to all" : "Powiedz wszystkim tak", + "Reset all (say no)" : "Zresetuj wszystko (powiedz nie)", + "Say maybe to all" : "Powiedz wszystkim może", + "This form was updated since your last visit. Please check your votes." : "Ta sonda została zaktualizowana od ostatniej wizyty. Sprawdź swoje głosy.", + "Vote!" : "Głosuj!", + "Receive notification email on activity" : "Otrzymuj powiadomienia e-mail o aktywności", + "Close details" : "Ukryj szczegóły", + "Close" : "Zamknij", + "Expires on %s" : "Wygaśnie o %s", + "Invitation access" : "Dostęp na zaproszenie", + "Anononymous form" : "Sonda anonimowa", + "Click to get link" : "Kliknij aby pobrać odnośnik", + "Edit Form" : "Edytuj sondę", + "Form expired" : "Sonda wygasła", + "Comments" : "Komentarze", + "Login or ..." : "Login lub…", + "New comment …" : "Nowy komentarz…", + "No comments yet. Be the first." : "Jeszcze brak komentarzy. Bądź pierwszy!" +}, +"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/l10n/pl.json b/l10n/pl.json new file mode 100644 index 0000000..89632b0 --- /dev/null +++ b/l10n/pl.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Czy na pewno chcesz usunąć tę nową sondę?", + "Copied!" : "Skopiowano!", + "Copy" : "Kopiuj", + "Not supported!" : "Niewspierane!", + "Press ⌘-C to copy." : "Aby skopiować wciśnij ⌘-C.", + "Press Ctrl-C to copy." : "Wciśnij Ctrl-C by skopiować.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nie jesteś zarejestrowany.\nPodaj proszę imię aby zagłosować\n(co najmniej 3 znaki)", + "Please add some text to your comment before submitting it." : "Dodaj jakiś tekst do Twojego komentarza przed jego wysłaniem.", + "An error occurred, your comment was not posted." : "Wystąpił błąd, Twój komentarz nie został wysłany…", + "Forms" : "Sondy", + "Forms App - New Activity" : "Aplikacja Sondy - Nowa aktywność", + "{user} participated in the form \"{title}\"" : "{user} wziął udział w sondzie \"{title}\"", + "Go to form" : "Idź do sondy", + "just now" : "Właśnie teraz", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Aplikacja sondażowa przypominająca doodle/dudle z możliwością ograniczania dostępu.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Aplikacja sondażowa przypominająca doodle/dudle z możliwością ograniczania dostępu (członkowie, określone grupy/użytkownicy, ukryte i publiczne).", + "Expired" : "Wygasło", + "Expires %n" : "Wygasa %n", + "Expires never" : "Nigdy nie wygasa", + "Anonymous form" : "Anonimowa sonda", + "Usernames hidden to Owner" : "Nazwy użytkownika ukryte dla właściciela", + "Usernames visible to Owner" : "Nazwy użytkownika widoczne dla właściciela", + "Group" : "Grupa", + "Title" : "Tytuł", + "Access" : "Dostęp", + "Owner" : "Właściciel", + "Created" : "Utworzona", + "Expires" : "Wygasa", + "Public access" : "Dostęp publiczny", + "Only shared" : "Tylko udostępnione", + "Registered users only" : "Tylko dla zarejestrowanych użytkowników", + "Hidden form" : "Ukryta sonda", + "Text form" : "Tekst sondy", + "Date form" : "Data sondy", + "never" : "nigdy", + "Copy Link" : "Skopiuj link", + "Clone form" : "Sklonuj sondę", + "Edit form" : "Edytuj sondę", + "Delete form" : "Usuń sondę", + "Edit form as admin" : "Edytuj sondę jako administrator", + "Delete form as admin" : "Usuń sondę jako administrator", + "Link copied to clipboard" : "Link skopiowany do schowka", + "Error, while copying link to clipboard" : "Błąd podczas kopiowania linku do schowka", + "_There is %n comment_::_There are %n comments_" : ["Jest %n komentarz","Są %n komentarze","Jest %n komentarzy","Jest %n komentarzy"], + "Share with" : "Udostępnij dla", + "Form description" : "Opis sondy", + "Description" : "Opis", + "Vote options" : "Opcje głosowania", + "Event schedule" : "Harmonogram wydarzeń", + "Text based" : "Oparta na tekście", + "Shift dates" : "Zmień datę", + "Shift all dates for " : "Zmień wszystkie daty dla", + "Add option" : "Dodaj opcję", + "You are editing in admin mode" : "Edytujesz w trybie administratora", + "Configuration" : "Konfiguracja", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Konfiguracja jest zablokowana. Zmiana opcji może spowodować niepożądane efekty. Możesz ją odblokować.", + "Unlock configuration " : "Odblokuj konfigurację", + "Form type" : "Typ sondy", + "Form configurations" : "Konfiguracje sondy", + "Allow \"maybe\" vote" : "Zezwalaj głosować na „może”", + "Hide user names for admin" : "Ukryj nazwy użytkowników dla administratora", + "hidden" : "ukryta", + "Name of user or group" : "Nazwa użytkownika lub grupy", + "Create new form" : "Stwórz nową sondę", + "Writing form" : "Pisanie sondy", + "Update form" : "Aktualizuj sondę", + "Expiration date" : "Data wygaśnięcia", + "Click to add a date" : "Kliknij, aby dodać datę", + "Shift all date options" : "Zmień wszystkie opcje daty", + "Cancel" : "Anuluj", + "Apply" : "Zastosuj", + "Title must not be empty!" : "Tytuł nie może być pusty!", + "%n successfully saved" : "%n została pomyślnie zapisana", + "Error on saving form, see console" : "Błąd podczas zapisywania sondy. Zobacz konsole", + "Clone of %n" : "Klon %n", + "New" : "Nowy", + "Click here to add a form" : "Kliknij tutaj, aby dodać sondę", + "Do you want to delete \"%n\"?" : "Czy chcesz usunąć \"%n\"?", + "No, keep form." : "Nie, zachowaj sondę.", + "Yes, delete form." : "Tak, usuń sondę.", + "Form \"%n\" deleted" : "Sonda „%n” usunięta", + "Error while deleting Form \"%n\"" : "Błąd podczas usuwania sondy „%n”", + "Access denied" : "Dostęp zabroniony", + "You are not allowed to view this form or the form does not exist." : "Nie masz uprawnień do tej sondy lub sonda nie istnieje.", + "You are not allowed to edit this form or the form does not exist." : "Nie masz uprawnień do edycji tej sondy lub sonda nie istnieje.", + "You are either not allowed to delete this form or it doesn't exist." : "Nie możesz usunąć tej sondy lub nie istnieje.", + "No description provided." : "Nie podano opisu.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Sonda wygasła %s. Głosowanie zablokowane, ale ciągle możesz wpisywać komentarze.", + "Switch all options at once" : "Przełącz wszystkie opcje jednocześnie", + "Your name here" : "Twoje imię", + "Say yes to all" : "Powiedz wszystkim tak", + "Reset all (say no)" : "Zresetuj wszystko (powiedz nie)", + "Say maybe to all" : "Powiedz wszystkim może", + "This form was updated since your last visit. Please check your votes." : "Ta sonda została zaktualizowana od ostatniej wizyty. Sprawdź swoje głosy.", + "Vote!" : "Głosuj!", + "Receive notification email on activity" : "Otrzymuj powiadomienia e-mail o aktywności", + "Close details" : "Ukryj szczegóły", + "Close" : "Zamknij", + "Expires on %s" : "Wygaśnie o %s", + "Invitation access" : "Dostęp na zaproszenie", + "Anononymous form" : "Sonda anonimowa", + "Click to get link" : "Kliknij aby pobrać odnośnik", + "Edit Form" : "Edytuj sondę", + "Form expired" : "Sonda wygasła", + "Comments" : "Komentarze", + "Login or ..." : "Login lub…", + "New comment …" : "Nowy komentarz…", + "No comments yet. Be the first." : "Jeszcze brak komentarzy. Bądź pierwszy!" +},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" +} \ No newline at end of file diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js new file mode 100644 index 0000000..f3ad623 --- /dev/null +++ b/l10n/pt_BR.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Quer realmente excluir esta nova enquete?", + "Copied!" : "Copiado!", + "Copy" : "Copiar", + "Not supported!" : "Não suportado!", + "Press ⌘-C to copy." : "Pressione ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Pressione Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Você não está registrado.\nDigite seu nome para votar\n(pelo menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor, adicione algum texto ao seu comentário antes de enviá-lo.", + "An error occurred, your comment was not posted." : "Ocorreu um erro e seu comentário não foi publicado.", + "Forms" : "Pesquisas", + "Forms App - New Activity" : "Aplicativo Forms - Atividade Nova", + "{user} participated in the form \"{title}\"" : "{user} participaram na enquete \"{title}\"", + "Go to form" : "Ir para enquete", + "just now" : "Agora mesmo", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Um aplicativo de enquetes, semelhante ao doodle/dudle podendo restringir o acesso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Um aplicativo de enquetes, semelhante ao doodle/dudle podendo restringir o acesso (membros, certos grupos/usuários, ocultos e públicos).", + "Expired" : "Expirado", + "Expires %n" : "Expira %n", + "Expires never" : "Nunca expira", + "Anonymous form" : "Enquete anônima", + "Usernames hidden to Owner" : "Nomes de usuários ocultos para o Proprietário", + "Usernames visible to Owner" : "Nomes de usuários visíveis para o Proprietário", + "Group" : "Grupo", + "Title" : "Título", + "Access" : "Acesso", + "Owner" : "Proprietário", + "Created" : "Criado", + "Expires" : "Encerramento", + "Public access" : "Acesso público", + "Only shared" : "Somente compartilhado", + "Registered users only" : "Somente usuários registrados", + "Hidden form" : "Pesquisa oculta", + "Text form" : "Texto da pesquisa", + "Date form" : "Data da pesquisa", + "never" : "nunca", + "Copy Link" : "Copiar Link", + "Clone form" : "Clonar pesquisa", + "Edit form" : "Editar enquete", + "Delete form" : "Excluir pesquisa", + "Edit form as admin" : "Editar pesquisa como administrador", + "Delete form as admin" : "Excluir a pesquisa como administrador", + "Link copied to clipboard" : "Link copiado para a área de transferência", + "Error, while copying link to clipboard" : "Erro ao copiar o link para a área de transferência", + "_There is %n comment_::_There are %n comments_" : ["Há %n comentário","Há %n comentários"], + "Share with" : "Compartilhar com", + "Form description" : "Descrição da enquete", + "Description" : "Descrição", + "Vote options" : "Opções de voto", + "Event schedule" : "Agenda de eventos", + "Text based" : "Baseado em texto", + "Shift dates" : "Mudar datas", + "Shift all dates for " : "Mudar todas as datas para", + "Add option" : "Adicionar opção", + "You are editing in admin mode" : "Você está editando em modo administrador", + "Configuration" : "Configuração", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "A configuração está bloqueada. Alterar isso pode resultar num comportamento indesejado, mas você pode desbloqueá-la se quiser.", + "Unlock configuration " : "Desbloquear a configuração", + "Form type" : "Tipo de enquete", + "Form configurations" : "Configurações de enquete", + "Allow \"maybe\" vote" : "Permitir o voto \"talvez\"", + "Hide user names for admin" : "Esconder nomes de usuários para administrador", + "hidden" : "Oculto", + "Name of user or group" : "Nome do usuário ou grupo", + "Create new form" : "Criar nova pesquisa", + "Writing form" : "Gravando enquete", + "Update form" : "Atualizar pesquisa", + "Expiration date" : "Data de expiração", + "Click to add a date" : "Clique para adicionar uma data", + "Shift all date options" : "Mudar todas as opções de data", + "Cancel" : "Cancelar", + "Apply" : "Aplicar", + "Title must not be empty!" : "O título não pode ficar em branco!", + "%n successfully saved" : "%n salvo com sucesso", + "Error on saving form, see console" : "Erro ao salvar a pesquisa, veja o console", + "Clone of %n" : "Clone de %n", + "New" : "Novo", + "Click here to add a form" : "Clique aqui para adicionar uma enquete", + "Do you want to delete \"%n\"?" : "Quer realmente excluir \"%n\"?", + "No, keep form." : "Não, manter a pesquisa.", + "Yes, delete form." : "Sim, excluir a pesquisa.", + "Form \"%n\" deleted" : "Pesquisa \"%n\" excluída", + "Error while deleting Form \"%n\"" : "Erro ao excluir Pesquisa \"%n\"", + "Access denied" : "Acesso negado", + "You are not allowed to view this form or the form does not exist." : "Você não tem permissão para ver esta pesquisa ou ela não existe.", + "You are not allowed to edit this form or the form does not exist." : "Você não tem permissão para editar esta pesquisa ou ela não existe.", + "You are either not allowed to delete this form or it doesn't exist." : "Você não tem permissão para excluir esta enquete ou ela não existe.", + "No description provided." : "Nenhuma descrição fornecida.", + "The form expired on %s. Voting is disabled, but you can still comment." : "A pesquisa encerrou em %s. A votação está desativada mas você ainda pode comentar.", + "Switch all options at once" : "Mude todas as opções ao mesmo tempo", + "Your name here" : "Seu nome aqui", + "Say yes to all" : "Diga sim para tudo", + "Reset all (say no)" : "Redefinir tudo (diga não)", + "Say maybe to all" : "Diga talvez para tudo", + "This form was updated since your last visit. Please check your votes." : "Esta enquete foi atualizada desde sua última visita. Verifique seu voto.", + "Vote!" : "Vote!", + "Receive notification email on activity" : "Receber e-mail notificando atividade", + "Close details" : "Fechar detalhes", + "Close" : "Fechar", + "Expires on %s" : "Expira em %s", + "Invitation access" : "Acesso ao convite", + "Anononymous form" : "Pesquisa anônima", + "Click to get link" : "Clique para obter o link", + "Edit Form" : "Editar pesquisa", + "Form expired" : "Pesquisa encerrada", + "Comments" : "Comentários", + "Login or ..." : "Entrar ou...", + "New comment …" : "Novo comentário...", + "No comments yet. Be the first." : "Sem comentários ainda. Seja o primeiro." +}, +"nplurals=2; plural=(n > 1);"); diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json new file mode 100644 index 0000000..b8e0867 --- /dev/null +++ b/l10n/pt_BR.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Quer realmente excluir esta nova enquete?", + "Copied!" : "Copiado!", + "Copy" : "Copiar", + "Not supported!" : "Não suportado!", + "Press ⌘-C to copy." : "Pressione ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Pressione Ctrl-C para copiar.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Você não está registrado.\nDigite seu nome para votar\n(pelo menos 3 caracteres).", + "Please add some text to your comment before submitting it." : "Por favor, adicione algum texto ao seu comentário antes de enviá-lo.", + "An error occurred, your comment was not posted." : "Ocorreu um erro e seu comentário não foi publicado.", + "Forms" : "Pesquisas", + "Forms App - New Activity" : "Aplicativo Forms - Atividade Nova", + "{user} participated in the form \"{title}\"" : "{user} participaram na enquete \"{title}\"", + "Go to form" : "Ir para enquete", + "just now" : "Agora mesmo", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Um aplicativo de enquetes, semelhante ao doodle/dudle podendo restringir o acesso.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Um aplicativo de enquetes, semelhante ao doodle/dudle podendo restringir o acesso (membros, certos grupos/usuários, ocultos e públicos).", + "Expired" : "Expirado", + "Expires %n" : "Expira %n", + "Expires never" : "Nunca expira", + "Anonymous form" : "Enquete anônima", + "Usernames hidden to Owner" : "Nomes de usuários ocultos para o Proprietário", + "Usernames visible to Owner" : "Nomes de usuários visíveis para o Proprietário", + "Group" : "Grupo", + "Title" : "Título", + "Access" : "Acesso", + "Owner" : "Proprietário", + "Created" : "Criado", + "Expires" : "Encerramento", + "Public access" : "Acesso público", + "Only shared" : "Somente compartilhado", + "Registered users only" : "Somente usuários registrados", + "Hidden form" : "Pesquisa oculta", + "Text form" : "Texto da pesquisa", + "Date form" : "Data da pesquisa", + "never" : "nunca", + "Copy Link" : "Copiar Link", + "Clone form" : "Clonar pesquisa", + "Edit form" : "Editar enquete", + "Delete form" : "Excluir pesquisa", + "Edit form as admin" : "Editar pesquisa como administrador", + "Delete form as admin" : "Excluir a pesquisa como administrador", + "Link copied to clipboard" : "Link copiado para a área de transferência", + "Error, while copying link to clipboard" : "Erro ao copiar o link para a área de transferência", + "_There is %n comment_::_There are %n comments_" : ["Há %n comentário","Há %n comentários"], + "Share with" : "Compartilhar com", + "Form description" : "Descrição da enquete", + "Description" : "Descrição", + "Vote options" : "Opções de voto", + "Event schedule" : "Agenda de eventos", + "Text based" : "Baseado em texto", + "Shift dates" : "Mudar datas", + "Shift all dates for " : "Mudar todas as datas para", + "Add option" : "Adicionar opção", + "You are editing in admin mode" : "Você está editando em modo administrador", + "Configuration" : "Configuração", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "A configuração está bloqueada. Alterar isso pode resultar num comportamento indesejado, mas você pode desbloqueá-la se quiser.", + "Unlock configuration " : "Desbloquear a configuração", + "Form type" : "Tipo de enquete", + "Form configurations" : "Configurações de enquete", + "Allow \"maybe\" vote" : "Permitir o voto \"talvez\"", + "Hide user names for admin" : "Esconder nomes de usuários para administrador", + "hidden" : "Oculto", + "Name of user or group" : "Nome do usuário ou grupo", + "Create new form" : "Criar nova pesquisa", + "Writing form" : "Gravando enquete", + "Update form" : "Atualizar pesquisa", + "Expiration date" : "Data de expiração", + "Click to add a date" : "Clique para adicionar uma data", + "Shift all date options" : "Mudar todas as opções de data", + "Cancel" : "Cancelar", + "Apply" : "Aplicar", + "Title must not be empty!" : "O título não pode ficar em branco!", + "%n successfully saved" : "%n salvo com sucesso", + "Error on saving form, see console" : "Erro ao salvar a pesquisa, veja o console", + "Clone of %n" : "Clone de %n", + "New" : "Novo", + "Click here to add a form" : "Clique aqui para adicionar uma enquete", + "Do you want to delete \"%n\"?" : "Quer realmente excluir \"%n\"?", + "No, keep form." : "Não, manter a pesquisa.", + "Yes, delete form." : "Sim, excluir a pesquisa.", + "Form \"%n\" deleted" : "Pesquisa \"%n\" excluída", + "Error while deleting Form \"%n\"" : "Erro ao excluir Pesquisa \"%n\"", + "Access denied" : "Acesso negado", + "You are not allowed to view this form or the form does not exist." : "Você não tem permissão para ver esta pesquisa ou ela não existe.", + "You are not allowed to edit this form or the form does not exist." : "Você não tem permissão para editar esta pesquisa ou ela não existe.", + "You are either not allowed to delete this form or it doesn't exist." : "Você não tem permissão para excluir esta enquete ou ela não existe.", + "No description provided." : "Nenhuma descrição fornecida.", + "The form expired on %s. Voting is disabled, but you can still comment." : "A pesquisa encerrou em %s. A votação está desativada mas você ainda pode comentar.", + "Switch all options at once" : "Mude todas as opções ao mesmo tempo", + "Your name here" : "Seu nome aqui", + "Say yes to all" : "Diga sim para tudo", + "Reset all (say no)" : "Redefinir tudo (diga não)", + "Say maybe to all" : "Diga talvez para tudo", + "This form was updated since your last visit. Please check your votes." : "Esta enquete foi atualizada desde sua última visita. Verifique seu voto.", + "Vote!" : "Vote!", + "Receive notification email on activity" : "Receber e-mail notificando atividade", + "Close details" : "Fechar detalhes", + "Close" : "Fechar", + "Expires on %s" : "Expira em %s", + "Invitation access" : "Acesso ao convite", + "Anononymous form" : "Pesquisa anônima", + "Click to get link" : "Clique para obter o link", + "Edit Form" : "Editar pesquisa", + "Form expired" : "Pesquisa encerrada", + "Comments" : "Comentários", + "Login or ..." : "Entrar ou...", + "New comment …" : "Novo comentário...", + "No comments yet. Be the first." : "Sem comentários ainda. Seja o primeiro." +},"pluralForm" :"nplurals=2; plural=(n > 1);" +} \ No newline at end of file diff --git a/l10n/ru.js b/l10n/ru.js new file mode 100644 index 0000000..6e5aaa3 --- /dev/null +++ b/l10n/ru.js @@ -0,0 +1,70 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Скопировано!", + "Copy" : "Копировать", + "Not supported!" : "Не поддерживается!", + "Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.", + "Press Ctrl-C to copy." : "Нажмите Ctrl-C для копирования.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Вы не зарегистрированы.\nВведите ваше имя что бы проголосовать\n(не менее трёх символов).", + "Please add some text to your comment before submitting it." : "Напишите несколько слов перед тем как отправить комментарий.", + "An error occurred, your comment was not posted." : "Произошла ошибка и ваш комментарий не был сохранён.", + "Forms" : "Опросы", + "Forms App - New Activity" : "Приложение опросов — Новые события", + "Go to form" : "Перейти к опросу", + "just now" : "только что", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Приложение опросов, похожее на doodle / dudle с возможностью ограничения доступа.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Приложение опросов, похожее на doodle / dudle с возможностью ограничения доступа (участники, определенные группы и/или пользователи, скрытые и публичные).", + "Expired" : "Истёкший", + "Expires never" : "Без срока истечения", + "Anonymous form" : "Анонимный опрос", + "Usernames hidden to Owner" : "Имена пользователей скрыты от владельца", + "Usernames visible to Owner" : "Имена пользователей видимы владельцу", + "Group" : "Группа", + "Title" : "Название", + "Access" : "Доступ", + "Owner" : "Владелец", + "Created" : "Создано", + "Expires" : "Дата окончания", + "Public access" : "Общедоступный", + "Only shared" : "Только по приглашению", + "Registered users only" : "Только для зарегистрированных пользователей", + "Copy Link" : "Копировать ссылку", + "Edit form" : "Редактировать опрос", + "Delete form" : "Удалить опрос", + "Form description" : "Описание опроса", + "Description" : "Описание", + "Vote options" : "Варианты голосования", + "Event schedule" : "Планирование события", + "Text based" : "Текстовые описания", + "Add option" : "Добавить вариант", + "Configuration" : "Конфигурация", + "Form type" : "Тип опрса", + "Hide user names for admin" : "Скрыть имена пользователей от администратора", + "hidden" : "Скрытый", + "Create new form" : "Создать новый опрос", + "Update form" : "Обновить опрос", + "Expiration date" : "Дата окончания", + "Access denied" : "Доступ запрещён", + "You are not allowed to view this form or the form does not exist." : "Просмотр этого опроса запрещён либо этот опрос не существует.", + "You are not allowed to edit this form or the form does not exist." : "Редактирование этого опроса запрещено либо этот опрос не существует.", + "No description provided." : "Нет описания.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Голосование завершено %s. Проголосовать невозможно, но вы всё ещё можете оставить комментарий.", + "Switch all options at once" : "Переключить все параметры", + "Your name here" : "Ваше имя тут", + "Vote!" : "Голосовать!", + "Receive notification email on activity" : "Получать уведомление при изменении", + "Close details" : "Закрыть подробные сведения", + "Close" : "Закрыть", + "Expires on %s" : "Истекает %s", + "Invitation access" : "Доступ по приглашению", + "Anononymous form" : "Анонимный опрос", + "Click to get link" : "Нажмите чтобы получить ссылку", + "Edit Form" : "Редактировать опрос", + "Form expired" : "Опрос завершён", + "Comments" : "Комментарии", + "Login or ..." : "Войти или…", + "New comment …" : "Новый комментарий…", + "No comments yet. Be the first." : "Тут нет комментариев, будьте первым." +}, +"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/l10n/ru.json b/l10n/ru.json new file mode 100644 index 0000000..f0f7d0d --- /dev/null +++ b/l10n/ru.json @@ -0,0 +1,68 @@ +{ "translations": { + "Copied!" : "Скопировано!", + "Copy" : "Копировать", + "Not supported!" : "Не поддерживается!", + "Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.", + "Press Ctrl-C to copy." : "Нажмите Ctrl-C для копирования.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Вы не зарегистрированы.\nВведите ваше имя что бы проголосовать\n(не менее трёх символов).", + "Please add some text to your comment before submitting it." : "Напишите несколько слов перед тем как отправить комментарий.", + "An error occurred, your comment was not posted." : "Произошла ошибка и ваш комментарий не был сохранён.", + "Forms" : "Опросы", + "Forms App - New Activity" : "Приложение опросов — Новые события", + "Go to form" : "Перейти к опросу", + "just now" : "только что", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Приложение опросов, похожее на doodle / dudle с возможностью ограничения доступа.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Приложение опросов, похожее на doodle / dudle с возможностью ограничения доступа (участники, определенные группы и/или пользователи, скрытые и публичные).", + "Expired" : "Истёкший", + "Expires never" : "Без срока истечения", + "Anonymous form" : "Анонимный опрос", + "Usernames hidden to Owner" : "Имена пользователей скрыты от владельца", + "Usernames visible to Owner" : "Имена пользователей видимы владельцу", + "Group" : "Группа", + "Title" : "Название", + "Access" : "Доступ", + "Owner" : "Владелец", + "Created" : "Создано", + "Expires" : "Дата окончания", + "Public access" : "Общедоступный", + "Only shared" : "Только по приглашению", + "Registered users only" : "Только для зарегистрированных пользователей", + "Copy Link" : "Копировать ссылку", + "Edit form" : "Редактировать опрос", + "Delete form" : "Удалить опрос", + "Form description" : "Описание опроса", + "Description" : "Описание", + "Vote options" : "Варианты голосования", + "Event schedule" : "Планирование события", + "Text based" : "Текстовые описания", + "Add option" : "Добавить вариант", + "Configuration" : "Конфигурация", + "Form type" : "Тип опрса", + "Hide user names for admin" : "Скрыть имена пользователей от администратора", + "hidden" : "Скрытый", + "Create new form" : "Создать новый опрос", + "Update form" : "Обновить опрос", + "Expiration date" : "Дата окончания", + "Access denied" : "Доступ запрещён", + "You are not allowed to view this form or the form does not exist." : "Просмотр этого опроса запрещён либо этот опрос не существует.", + "You are not allowed to edit this form or the form does not exist." : "Редактирование этого опроса запрещено либо этот опрос не существует.", + "No description provided." : "Нет описания.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Голосование завершено %s. Проголосовать невозможно, но вы всё ещё можете оставить комментарий.", + "Switch all options at once" : "Переключить все параметры", + "Your name here" : "Ваше имя тут", + "Vote!" : "Голосовать!", + "Receive notification email on activity" : "Получать уведомление при изменении", + "Close details" : "Закрыть подробные сведения", + "Close" : "Закрыть", + "Expires on %s" : "Истекает %s", + "Invitation access" : "Доступ по приглашению", + "Anononymous form" : "Анонимный опрос", + "Click to get link" : "Нажмите чтобы получить ссылку", + "Edit Form" : "Редактировать опрос", + "Form expired" : "Опрос завершён", + "Comments" : "Комментарии", + "Login or ..." : "Войти или…", + "New comment …" : "Новый комментарий…", + "No comments yet. Be the first." : "Тут нет комментариев, будьте первым." +},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" +} \ No newline at end of file diff --git a/l10n/sk.js b/l10n/sk.js new file mode 100644 index 0000000..2689882 --- /dev/null +++ b/l10n/sk.js @@ -0,0 +1,41 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Skopírované!", + "Copy" : "Kopírovať", + "Not supported!" : "Nepodporované!", + "Press ⌘-C to copy." : "Pre kopírovanie, stlačte ⌘-C.", + "Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nie ste zaregistrovaní.\nPre odoslanie hlasu zadajte prosím svoje meno\n(aspoň tri znaky).", + "Please add some text to your comment before submitting it." : "Zadajte prosím nejaký text predtým než odošlete svoj komentár.", + "An error occurred, your comment was not posted." : "Vyskytla sa chyba, váš komentár sa neodoslal.", + "Forms" : "Ankety", + "just now" : "práve teraz", + "Title" : "Názov", + "Access" : "Prístup", + "Owner" : "Vlastník", + "Created" : "Vytvorené", + "Expires" : "Vyprší", + "Copy Link" : "Kopírovať odkaz", + "Delete form" : "Zmazať anketu", + "Description" : "Popis", + "Create new form" : "Vytvoriť novú anketu", + "Update form" : "Aktualizovať anketu", + "Access denied" : "Prístup zamietnutý", + "You are not allowed to view this form or the form does not exist." : "Nemáte oprávnenie na prezeranie tejto ankety alebo už anketa neexistuje.", + "You are not allowed to edit this form or the form does not exist." : "Nemáte oprávnenie na úpravy tejto ankety alebo už anketa neexistuje.", + "No description provided." : "Nebol poskytnutý žiadny popis", + "The form expired on %s. Voting is disabled, but you can still comment." : "Anketa vypršala %s. Hlasovanie je vypnuté, ale stále môžete prispieť komentárom.", + "Your name here" : "Vaše meno sem", + "Vote!" : "Hlasujte!", + "Receive notification email on activity" : "Pri aktivite prijímať oznámenia e-mailom", + "Close" : "Zatvoriť", + "Anononymous form" : "Anonymná anketa", + "Click to get link" : "Kliknite na získanie odkazu", + "Edit Form" : "Upraviť anketu", + "Form expired" : "Anketa vypršala", + "Comments" : "Komentáre", + "New comment …" : "Nový komentár …", + "No comments yet. Be the first." : "Zatiaľ žiadne komentáre. Buďte prvý." +}, +"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/l10n/sk.json b/l10n/sk.json new file mode 100644 index 0000000..cf2f182 --- /dev/null +++ b/l10n/sk.json @@ -0,0 +1,39 @@ +{ "translations": { + "Copied!" : "Skopírované!", + "Copy" : "Kopírovať", + "Not supported!" : "Nepodporované!", + "Press ⌘-C to copy." : "Pre kopírovanie, stlačte ⌘-C.", + "Press Ctrl-C to copy." : "Stlač Ctrl-C pre skopírovanie.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nie ste zaregistrovaní.\nPre odoslanie hlasu zadajte prosím svoje meno\n(aspoň tri znaky).", + "Please add some text to your comment before submitting it." : "Zadajte prosím nejaký text predtým než odošlete svoj komentár.", + "An error occurred, your comment was not posted." : "Vyskytla sa chyba, váš komentár sa neodoslal.", + "Forms" : "Ankety", + "just now" : "práve teraz", + "Title" : "Názov", + "Access" : "Prístup", + "Owner" : "Vlastník", + "Created" : "Vytvorené", + "Expires" : "Vyprší", + "Copy Link" : "Kopírovať odkaz", + "Delete form" : "Zmazať anketu", + "Description" : "Popis", + "Create new form" : "Vytvoriť novú anketu", + "Update form" : "Aktualizovať anketu", + "Access denied" : "Prístup zamietnutý", + "You are not allowed to view this form or the form does not exist." : "Nemáte oprávnenie na prezeranie tejto ankety alebo už anketa neexistuje.", + "You are not allowed to edit this form or the form does not exist." : "Nemáte oprávnenie na úpravy tejto ankety alebo už anketa neexistuje.", + "No description provided." : "Nebol poskytnutý žiadny popis", + "The form expired on %s. Voting is disabled, but you can still comment." : "Anketa vypršala %s. Hlasovanie je vypnuté, ale stále môžete prispieť komentárom.", + "Your name here" : "Vaše meno sem", + "Vote!" : "Hlasujte!", + "Receive notification email on activity" : "Pri aktivite prijímať oznámenia e-mailom", + "Close" : "Zatvoriť", + "Anononymous form" : "Anonymná anketa", + "Click to get link" : "Kliknite na získanie odkazu", + "Edit Form" : "Upraviť anketu", + "Form expired" : "Anketa vypršala", + "Comments" : "Komentáre", + "New comment …" : "Nový komentár …", + "No comments yet. Be the first." : "Zatiaľ žiadne komentáre. Buďte prvý." +},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" +} \ No newline at end of file diff --git a/l10n/sr.js b/l10n/sr.js new file mode 100644 index 0000000..52bc40c --- /dev/null +++ b/l10n/sr.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Да ли стварно желите да избришете ово ново гласање?", + "Copied!" : "Копирано!", + "Copy" : "Копирај", + "Not supported!" : "Није подржано!", + "Press ⌘-C to copy." : "Притисни ⌘-C за копирање.", + "Press Ctrl-C to copy." : "Притисни Ctrl-C за копирање.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Нисте регистровани.\nУнесите Ваше име да бисте гласали\n(бар 3 карактера).", + "Please add some text to your comment before submitting it." : "Додајте неки текст уз Ваш коментар пре слања.", + "An error occurred, your comment was not posted." : "Десила се грешка, Ваш коментар није објављен.", + "Forms" : "Гласања", + "Forms App - New Activity" : "Апликација Гласања - Нова активност", + "{user} participated in the form \"{title}\"" : "{user} је учествовао у гласању „{title}“", + "Go to form" : "Иди на гласање", + "just now" : "управо сад", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Апликација за гласање, слична као doodle/dudle, са могућношћу забране приступа.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Апликација за гласање, слична као doodle/dudle, са могућношћу забране приступа (чланова, група/корисника, скривено и јавно),", + "Expired" : "Истекло", + "Expires %n" : "Истиче %n", + "Expires never" : "Никад не истиче", + "Anonymous form" : "Анонимно гласање", + "Usernames hidden to Owner" : "Корисничка имена су скривена од власника", + "Usernames visible to Owner" : "Корисничка имена видљива власнику", + "Group" : "Група", + "Title" : "Наслов", + "Access" : "Тип приступа", + "Owner" : "Власник", + "Created" : "Направио", + "Expires" : "Истиче", + "Public access" : "Јавни приступ", + "Only shared" : "Само дељено", + "Registered users only" : "Само регистровани корисници", + "Hidden form" : "Сакривено гласање", + "Text form" : "Текстуално гласање", + "Date form" : "Гласање о датуму", + "never" : "никад", + "Copy Link" : "Копирај везу", + "Clone form" : "Клонирај гласање", + "Edit form" : "Измени гласање", + "Delete form" : "Обриши гласање", + "Edit form as admin" : "Измени гласање као администратор", + "Delete form as admin" : "Обриши гласање као администратор", + "Link copied to clipboard" : "Веза копирана у оставу", + "Error, while copying link to clipboard" : "Грешка приликом копирања везе у оставу", + "_There is %n comment_::_There are %n comments_" : ["Постоји %n коментар","Постоји %n коментара","Постоји %n коментара"], + "Share with" : "Подели са", + "Form description" : "Опис гласања", + "Description" : "Опис", + "Vote options" : "Ставке за гласање", + "Event schedule" : "Заказивање догађаја", + "Text based" : "Текстуалног типа", + "Shift dates" : "Помери датуме", + "Shift all dates for " : "Помери све датуме за", + "Add option" : "Додај ставку", + "You are editing in admin mode" : "Мењате у режиму администратора", + "Configuration" : "Конфигурација", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Конфигурација је закључана. Промена ставки може да заврши са нежељеним понашањем, али свеједно је можете откључати.", + "Unlock configuration " : "Откључај конфигурацију", + "Form type" : "Тип гласања", + "Form configurations" : "Конфигурације гласања", + "Allow \"maybe\" vote" : "Дозволи глас за „можда“", + "Hide user names for admin" : "Сакриј корисничка имена од администратора", + "hidden" : "сакривено", + "Name of user or group" : "Име корисника или групе", + "Create new form" : "Направи ново гласање", + "Writing form" : "Писање гласања", + "Update form" : "Ажурирај гласање", + "Expiration date" : "Датум истицања", + "Click to add a date" : "Кликните да додате датум", + "Shift all date options" : "Помери све ставке са датумима", + "Cancel" : "Поништи", + "Apply" : "Примени", + "Title must not be empty!" : "Наслов не сме бити празан!", + "%n successfully saved" : "%n успешно сачуван", + "Error on saving form, see console" : "Грешка приликом чувања гласања, погледајте конзолу", + "Clone of %n" : "Клон од %n", + "New" : "Ново", + "Click here to add a form" : "Кликните овде да додате гласање", + "Do you want to delete \"%n\"?" : "Да ли желите да обришете гласање „%n“?", + "No, keep form." : "Не, задржи гласање.", + "Yes, delete form." : "Да, обриши гласање.", + "Form \"%n\" deleted" : "Гласање „%n“ обрисано", + "Error while deleting Form \"%n\"" : "Грешка приликом брисања гласања „%n“", + "Access denied" : "Забрањен приступ", + "You are not allowed to view this form or the form does not exist." : "Није Вам дозвољено да видите ово гласање или гласање не постоји.", + "You are not allowed to edit this form or the form does not exist." : "Није Вам дозвољено да измените ово гласање или гласање не постоји.", + "You are either not allowed to delete this form or it doesn't exist." : "Или Вам није дозвољено да избришете ово гласање или гласање не постоји.", + "No description provided." : "Опис није дат.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Гласање је завршено %s. Давање гласова је онемогућено, али и даље можете остављати коментаре.", + "Switch all options at once" : "Промени све ставке одједном", + "Your name here" : "Ваше име овде", + "Say yes to all" : "Одговори са ДА на све", + "Reset all (say no)" : "Ресетуј све (реци НЕ)", + "Say maybe to all" : "Одговори са МОЖДА на све", + "This form was updated since your last visit. Please check your votes." : "Гласање је измењено од ваше последње посете. Проверите гласове.", + "Vote!" : "Гласај!", + "Receive notification email on activity" : "Примај обавештења о активностима преко е-поште", + "Close details" : "Затвори детаље", + "Close" : "Затвори", + "Expires on %s" : "Истиче на %s", + "Invitation access" : "Приступна позивница", + "Anononymous form" : "Анонимно гласање", + "Click to get link" : "Кликните да узмете везу", + "Edit Form" : "Измени гласање", + "Form expired" : "Гласање завршено", + "Comments" : "Коментари", + "Login or ..." : "Пријави се или...", + "New comment …" : "Нови коментар…", + "No comments yet. Be the first." : "Још нема коментара. Будите први." +}, +"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/l10n/sr.json b/l10n/sr.json new file mode 100644 index 0000000..5e533f4 --- /dev/null +++ b/l10n/sr.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Да ли стварно желите да избришете ово ново гласање?", + "Copied!" : "Копирано!", + "Copy" : "Копирај", + "Not supported!" : "Није подржано!", + "Press ⌘-C to copy." : "Притисни ⌘-C за копирање.", + "Press Ctrl-C to copy." : "Притисни Ctrl-C за копирање.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Нисте регистровани.\nУнесите Ваше име да бисте гласали\n(бар 3 карактера).", + "Please add some text to your comment before submitting it." : "Додајте неки текст уз Ваш коментар пре слања.", + "An error occurred, your comment was not posted." : "Десила се грешка, Ваш коментар није објављен.", + "Forms" : "Гласања", + "Forms App - New Activity" : "Апликација Гласања - Нова активност", + "{user} participated in the form \"{title}\"" : "{user} је учествовао у гласању „{title}“", + "Go to form" : "Иди на гласање", + "just now" : "управо сад", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Апликација за гласање, слична као doodle/dudle, са могућношћу забране приступа.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Апликација за гласање, слична као doodle/dudle, са могућношћу забране приступа (чланова, група/корисника, скривено и јавно),", + "Expired" : "Истекло", + "Expires %n" : "Истиче %n", + "Expires never" : "Никад не истиче", + "Anonymous form" : "Анонимно гласање", + "Usernames hidden to Owner" : "Корисничка имена су скривена од власника", + "Usernames visible to Owner" : "Корисничка имена видљива власнику", + "Group" : "Група", + "Title" : "Наслов", + "Access" : "Тип приступа", + "Owner" : "Власник", + "Created" : "Направио", + "Expires" : "Истиче", + "Public access" : "Јавни приступ", + "Only shared" : "Само дељено", + "Registered users only" : "Само регистровани корисници", + "Hidden form" : "Сакривено гласање", + "Text form" : "Текстуално гласање", + "Date form" : "Гласање о датуму", + "never" : "никад", + "Copy Link" : "Копирај везу", + "Clone form" : "Клонирај гласање", + "Edit form" : "Измени гласање", + "Delete form" : "Обриши гласање", + "Edit form as admin" : "Измени гласање као администратор", + "Delete form as admin" : "Обриши гласање као администратор", + "Link copied to clipboard" : "Веза копирана у оставу", + "Error, while copying link to clipboard" : "Грешка приликом копирања везе у оставу", + "_There is %n comment_::_There are %n comments_" : ["Постоји %n коментар","Постоји %n коментара","Постоји %n коментара"], + "Share with" : "Подели са", + "Form description" : "Опис гласања", + "Description" : "Опис", + "Vote options" : "Ставке за гласање", + "Event schedule" : "Заказивање догађаја", + "Text based" : "Текстуалног типа", + "Shift dates" : "Помери датуме", + "Shift all dates for " : "Помери све датуме за", + "Add option" : "Додај ставку", + "You are editing in admin mode" : "Мењате у режиму администратора", + "Configuration" : "Конфигурација", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Конфигурација је закључана. Промена ставки може да заврши са нежељеним понашањем, али свеједно је можете откључати.", + "Unlock configuration " : "Откључај конфигурацију", + "Form type" : "Тип гласања", + "Form configurations" : "Конфигурације гласања", + "Allow \"maybe\" vote" : "Дозволи глас за „можда“", + "Hide user names for admin" : "Сакриј корисничка имена од администратора", + "hidden" : "сакривено", + "Name of user or group" : "Име корисника или групе", + "Create new form" : "Направи ново гласање", + "Writing form" : "Писање гласања", + "Update form" : "Ажурирај гласање", + "Expiration date" : "Датум истицања", + "Click to add a date" : "Кликните да додате датум", + "Shift all date options" : "Помери све ставке са датумима", + "Cancel" : "Поништи", + "Apply" : "Примени", + "Title must not be empty!" : "Наслов не сме бити празан!", + "%n successfully saved" : "%n успешно сачуван", + "Error on saving form, see console" : "Грешка приликом чувања гласања, погледајте конзолу", + "Clone of %n" : "Клон од %n", + "New" : "Ново", + "Click here to add a form" : "Кликните овде да додате гласање", + "Do you want to delete \"%n\"?" : "Да ли желите да обришете гласање „%n“?", + "No, keep form." : "Не, задржи гласање.", + "Yes, delete form." : "Да, обриши гласање.", + "Form \"%n\" deleted" : "Гласање „%n“ обрисано", + "Error while deleting Form \"%n\"" : "Грешка приликом брисања гласања „%n“", + "Access denied" : "Забрањен приступ", + "You are not allowed to view this form or the form does not exist." : "Није Вам дозвољено да видите ово гласање или гласање не постоји.", + "You are not allowed to edit this form or the form does not exist." : "Није Вам дозвољено да измените ово гласање или гласање не постоји.", + "You are either not allowed to delete this form or it doesn't exist." : "Или Вам није дозвољено да избришете ово гласање или гласање не постоји.", + "No description provided." : "Опис није дат.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Гласање је завршено %s. Давање гласова је онемогућено, али и даље можете остављати коментаре.", + "Switch all options at once" : "Промени све ставке одједном", + "Your name here" : "Ваше име овде", + "Say yes to all" : "Одговори са ДА на све", + "Reset all (say no)" : "Ресетуј све (реци НЕ)", + "Say maybe to all" : "Одговори са МОЖДА на све", + "This form was updated since your last visit. Please check your votes." : "Гласање је измењено од ваше последње посете. Проверите гласове.", + "Vote!" : "Гласај!", + "Receive notification email on activity" : "Примај обавештења о активностима преко е-поште", + "Close details" : "Затвори детаље", + "Close" : "Затвори", + "Expires on %s" : "Истиче на %s", + "Invitation access" : "Приступна позивница", + "Anononymous form" : "Анонимно гласање", + "Click to get link" : "Кликните да узмете везу", + "Edit Form" : "Измени гласање", + "Form expired" : "Гласање завршено", + "Comments" : "Коментари", + "Login or ..." : "Пријави се или...", + "New comment …" : "Нови коментар…", + "No comments yet. Be the first." : "Још нема коментара. Будите први." +},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" +} \ No newline at end of file diff --git a/l10n/sv.js b/l10n/sv.js new file mode 100644 index 0000000..74aa423 --- /dev/null +++ b/l10n/sv.js @@ -0,0 +1,63 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "Kopierad!", + "Copy" : "Kopiera", + "Not supported!" : "Stöds inte!", + "Press ⌘-C to copy." : "Tryck ⌘-C för att kopiera.", + "Press Ctrl-C to copy." : "Tryck Ctrl-C för att kopiera.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Du är inte registrerad.\nVänligen ange ditt namn för att rösta\n(minst 3 tecken).", + "Please add some text to your comment before submitting it." : "Vänligen ange en text till din kommentar innan du skickar den.", + "An error occurred, your comment was not posted." : "Ett fel inträffade, din kommentar postades inte", + "Forms" : "Omröstningar", + "Forms App - New Activity" : "Omrösningsapp - Ny aktivitet", + "just now" : "just nu", + "Expired" : "Utgången", + "Expires never" : "Utgår aldrig", + "Usernames hidden to Owner" : "Användarnamn gömt för Ägare", + "Usernames visible to Owner" : "Användarnamn synligt för Ägare", + "Group" : "Grupp", + "Title" : "Titel", + "Access" : "Åtkomst", + "Owner" : "Ägare", + "Created" : "Skapad", + "Expires" : "Går ut", + "Public access" : "Publik åtkomst", + "Copy Link" : "Kopiera Länk", + "Delete form" : "Radera omröstning", + "Share with" : "Dela med", + "Description" : "Beskrivning", + "Text based" : "Textbaserad", + "Add option" : "Lägg till alternativ", + "Configuration" : "Konfiguration", + "Name of user or group" : "Namn på användare eller grupp", + "Create new form" : "Skapa ny omröstning", + "Update form" : "Uppdatera omröstning", + "Expiration date" : "Utgångsdatum", + "Click to add a date" : "Klicka för att lägga till ett datum", + "Cancel" : "Avbryt", + "Apply" : "Tillämpa", + "New" : "Ny", + "Access denied" : "Tillgång nekades", + "You are not allowed to view this form or the form does not exist." : "Du får inte se den här formen eller så existerar den inte.", + "You are not allowed to edit this form or the form does not exist." : "Du får inte redigera den här formen eller så existerar den inte.", + "No description provided." : "Ingen beskrivning angiven", + "The form expired on %s. Voting is disabled, but you can still comment." : "Omröstningen gick ut %s. Röstning är inaktiverad, men du kan fortfarande kommentera.", + "Switch all options at once" : "Växla alla inställningar på en gång", + "Your name here" : "Ditt namn här", + "Vote!" : "Rösta!", + "Receive notification email on activity" : "Mottag notifieringsepost vid aktivitet", + "Close details" : "Stäng detaljer", + "Close" : "Stäng", + "Expires on %s" : "Gick ut %s", + "Invitation access" : "Inbjudan tillgång", + "Anononymous form" : "Anonym omröstning", + "Click to get link" : "Klicka för att få länk", + "Edit Form" : "Ändra omröstning", + "Form expired" : "Omröstning utgången", + "Comments" : "Kommentarer", + "Login or ..." : "Logga in eller ...", + "New comment …" : "Ny kommentar ...", + "No comments yet. Be the first." : "Inga kommentar än. Bli den första." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/sv.json b/l10n/sv.json new file mode 100644 index 0000000..3b9d212 --- /dev/null +++ b/l10n/sv.json @@ -0,0 +1,61 @@ +{ "translations": { + "Copied!" : "Kopierad!", + "Copy" : "Kopiera", + "Not supported!" : "Stöds inte!", + "Press ⌘-C to copy." : "Tryck ⌘-C för att kopiera.", + "Press Ctrl-C to copy." : "Tryck Ctrl-C för att kopiera.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Du är inte registrerad.\nVänligen ange ditt namn för att rösta\n(minst 3 tecken).", + "Please add some text to your comment before submitting it." : "Vänligen ange en text till din kommentar innan du skickar den.", + "An error occurred, your comment was not posted." : "Ett fel inträffade, din kommentar postades inte", + "Forms" : "Omröstningar", + "Forms App - New Activity" : "Omrösningsapp - Ny aktivitet", + "just now" : "just nu", + "Expired" : "Utgången", + "Expires never" : "Utgår aldrig", + "Usernames hidden to Owner" : "Användarnamn gömt för Ägare", + "Usernames visible to Owner" : "Användarnamn synligt för Ägare", + "Group" : "Grupp", + "Title" : "Titel", + "Access" : "Åtkomst", + "Owner" : "Ägare", + "Created" : "Skapad", + "Expires" : "Går ut", + "Public access" : "Publik åtkomst", + "Copy Link" : "Kopiera Länk", + "Delete form" : "Radera omröstning", + "Share with" : "Dela med", + "Description" : "Beskrivning", + "Text based" : "Textbaserad", + "Add option" : "Lägg till alternativ", + "Configuration" : "Konfiguration", + "Name of user or group" : "Namn på användare eller grupp", + "Create new form" : "Skapa ny omröstning", + "Update form" : "Uppdatera omröstning", + "Expiration date" : "Utgångsdatum", + "Click to add a date" : "Klicka för att lägga till ett datum", + "Cancel" : "Avbryt", + "Apply" : "Tillämpa", + "New" : "Ny", + "Access denied" : "Tillgång nekades", + "You are not allowed to view this form or the form does not exist." : "Du får inte se den här formen eller så existerar den inte.", + "You are not allowed to edit this form or the form does not exist." : "Du får inte redigera den här formen eller så existerar den inte.", + "No description provided." : "Ingen beskrivning angiven", + "The form expired on %s. Voting is disabled, but you can still comment." : "Omröstningen gick ut %s. Röstning är inaktiverad, men du kan fortfarande kommentera.", + "Switch all options at once" : "Växla alla inställningar på en gång", + "Your name here" : "Ditt namn här", + "Vote!" : "Rösta!", + "Receive notification email on activity" : "Mottag notifieringsepost vid aktivitet", + "Close details" : "Stäng detaljer", + "Close" : "Stäng", + "Expires on %s" : "Gick ut %s", + "Invitation access" : "Inbjudan tillgång", + "Anononymous form" : "Anonym omröstning", + "Click to get link" : "Klicka för att få länk", + "Edit Form" : "Ändra omröstning", + "Form expired" : "Omröstning utgången", + "Comments" : "Kommentarer", + "Login or ..." : "Logga in eller ...", + "New comment …" : "Ny kommentar ...", + "No comments yet. Be the first." : "Inga kommentar än. Bli den första." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/tr.js b/l10n/tr.js new file mode 100644 index 0000000..9d59f58 --- /dev/null +++ b/l10n/tr.js @@ -0,0 +1,113 @@ +OC.L10N.register( + "forms", + { + "Do you really want to delete this new form?" : "Bu yeni anketi gerçekten silmek istiyor musunuz?", + "Copied!" : "Kopyalandı!", + "Copy" : "Kopyala", + "Not supported!" : "Desteklenmiyor!", + "Press ⌘-C to copy." : "Kopyalamak için ⌘-C tuşlarına basın.", + "Press Ctrl-C to copy." : "Kopyalamak için Ctrl-C tuşlarına basın.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Kayıt olmamışsınız.\nLütfen oy vermek için adınızı yazın\n(en az 3 karakter).", + "Please add some text to your comment before submitting it." : "Göndermeden önce yorumunuza bir şeyler yazın.", + "An error occurred, your comment was not posted." : "Yorumunuz gönderilirken bir sorun çıktı.", + "Forms" : "Anketler", + "Forms App - New Activity" : "Anketler Uygulaması - Yeni İşlem", + "{user} participated in the form \"{title}\"" : "{user} kullanıcısı \"{title}\" anketine katıldı", + "Go to form" : "Ankete git", + "just now" : "şimdi", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Doodle/Dudle benzeri, erişim kısıtlama özelliği bulunan bir anket uygulamasıdır.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Doodle/Dudle benzeri, erişim kısıtlama özelliği (üyeler, belirli grup ve kullanıcılar, gizli ve herkese açık gibi) bulunan bir anket uygulamasıdır.", + "Expired" : "Sona Ermiş", + "Expires %n" : "%n tarihinde sona erecek", + "Expires never" : "Asla sona ermeyecek", + "Anonymous form" : "Anonim anket", + "Usernames hidden to Owner" : "Sahip Kullanıcı Adlarını Göremesin", + "Usernames visible to Owner" : "Sahip Kullanıcı Adlarını Görebilsin", + "Group" : "Grup", + "Title" : "Başlık", + "Access" : "Erişim", + "Owner" : "Sahip", + "Created" : "Oluşturulma", + "Expires" : "Sona Erme", + "Public access" : "Herkese açık erişim", + "Only shared" : "Yalnız paylaşılanlarla", + "Registered users only" : "Yalnız kayıtlı kullanıcılar", + "Hidden form" : "Gizli anket", + "Text form" : "Metin anketi", + "Date form" : "Tarih anketi", + "never" : "asla", + "Copy Link" : "Bağlantıyı Kopyala", + "Clone form" : "Anketi kopyala", + "Edit form" : "Anketi düzenle", + "Delete form" : "Anketi sil", + "Edit form as admin" : "Anketi yönetici olarak düzenle", + "Delete form as admin" : "Anketi yönetici olarak sil", + "Link copied to clipboard" : "Bağlantı panoya kopyalandı", + "Error, while copying link to clipboard" : "Bağlantı panoya kopyalanırken sorun çıktı", + "_There is %n comment_::_There are %n comments_" : ["%n yorum var","%n yorum var"], + "Share with" : "Şununla paylaş", + "Form description" : "Anket açıklaması", + "Description" : "Açıklama", + "Vote options" : "Oy seçenekleri", + "Event schedule" : "Etkinlik zamanlaması", + "Text based" : "Metin temelli", + "Shift dates" : "Tarihleri kaydır", + "Shift all dates for " : "Şunun için tüm tarihleri kaydır", + "Add option" : "Seçenek ekle", + "You are editing in admin mode" : "Yönetici kipinde düzenliyorsunuz", + "Configuration" : "Yapılandırma", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Yapılandırma kilitlenmiş. Seçeneklerin değiştirilmesi istenmeyen davranışlara yol açabilir ancak gene de kilidi açabilirsiniz.", + "Unlock configuration " : "Yapılandırma kilidini aç", + "Form type" : "Anket türü", + "Form configurations" : "Anket yapılandırmaları", + "Allow \"maybe\" vote" : "\"Belki\" oyu verilebilsin", + "Hide user names for admin" : "Yönetici için kullanıcı adları gizlensin", + "hidden" : "gizli", + "Name of user or group" : "Kullanıcı ya da grup adı", + "Create new form" : "Anket ekle", + "Writing form" : "Yazma anketi", + "Update form" : "Anketi güncelle", + "Expiration date" : "Sona erme tarihi", + "Click to add a date" : "Bir tarih eklemek için tıklayın", + "Shift all date options" : "Tüm tarih ayarlarını kaydır", + "Cancel" : "İptal", + "Apply" : "Uygula", + "Title must not be empty!" : "Başlık boş olamaz!", + "%n successfully saved" : "%n kaydedildi", + "Error on saving form, see console" : "Anket kaydedilirken sorun çıktı, konsola bakın", + "Clone of %n" : "%n kopyası", + "New" : "Yeni", + "Click here to add a form" : "Bir anket eklemek için tıklayın", + "Do you want to delete \"%n\"?" : "\"%n\" anketini silmek istiyor musunuz?", + "No, keep form." : "Hayır, anket korunsun.", + "Yes, delete form." : "Evet, anket silinsin.", + "Form \"%n\" deleted" : "\"%n\" anketi silindi", + "Error while deleting Form \"%n\"" : "\"%n\" anketi silinirken sorun çıktı", + "Access denied" : "Erişim engellendi", + "You are not allowed to view this form or the form does not exist." : "Bu anket bulunamadı ya da görüntüleme izniniz yok.", + "You are not allowed to edit this form or the form does not exist." : "Bu anket bulunamadı ya da düzenleme izniniz yok.", + "You are either not allowed to delete this form or it doesn't exist." : "Bu anketi silme izniniz yok ya da anket bulunamadı.", + "No description provided." : "Açıklama yazılmamış.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Anketin süresi %s zamanında doldu. Oy verme işlemi devre dışı bırakıldı ancak gene de yorum yapabilirsiniz.", + "Switch all options at once" : "Tüm seçenekleri bir kerede değiştir", + "Your name here" : "Adınızı buraya yazın", + "Say yes to all" : "Tümüne Evet", + "Reset all (say no)" : "Tümünü Sıfırla (Hayır)", + "Say maybe to all" : "Tümüne Belki", + "This form was updated since your last visit. Please check your votes." : "Bu anket son baktığınızdan sonra değiştirilmiş. Lütfen oylarınızı denetleyin.", + "Vote!" : "Oy Ver!", + "Receive notification email on activity" : "İşlem yapıldığında e-posta bildirimi gönderilsin", + "Close details" : "Ayrıntıları kapat", + "Close" : "Kapat", + "Expires on %s" : "%s zamanında sona erecek", + "Invitation access" : "Çağrı erişimi", + "Anononymous form" : "İsimsiz anket", + "Click to get link" : "Bağlantıyı almak için tıklayın", + "Edit Form" : "Anketi Düzenle", + "Form expired" : "Anketin süresi dolmuş", + "Comments" : "Yorumlar", + "Login or ..." : "Oturum açın ya da ...", + "New comment …" : "Yorum ekle ...", + "No comments yet. Be the first." : "Henüz bir yorum yapılmamış. İlk yorum yapan siz olun." +}, +"nplurals=2; plural=(n > 1);"); diff --git a/l10n/tr.json b/l10n/tr.json new file mode 100644 index 0000000..22e7b9a --- /dev/null +++ b/l10n/tr.json @@ -0,0 +1,111 @@ +{ "translations": { + "Do you really want to delete this new form?" : "Bu yeni anketi gerçekten silmek istiyor musunuz?", + "Copied!" : "Kopyalandı!", + "Copy" : "Kopyala", + "Not supported!" : "Desteklenmiyor!", + "Press ⌘-C to copy." : "Kopyalamak için ⌘-C tuşlarına basın.", + "Press Ctrl-C to copy." : "Kopyalamak için Ctrl-C tuşlarına basın.", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Kayıt olmamışsınız.\nLütfen oy vermek için adınızı yazın\n(en az 3 karakter).", + "Please add some text to your comment before submitting it." : "Göndermeden önce yorumunuza bir şeyler yazın.", + "An error occurred, your comment was not posted." : "Yorumunuz gönderilirken bir sorun çıktı.", + "Forms" : "Anketler", + "Forms App - New Activity" : "Anketler Uygulaması - Yeni İşlem", + "{user} participated in the form \"{title}\"" : "{user} kullanıcısı \"{title}\" anketine katıldı", + "Go to form" : "Ankete git", + "just now" : "şimdi", + "A forms app, similar to doodle/dudle with the possibility to restrict access." : "Doodle/Dudle benzeri, erişim kısıtlama özelliği bulunan bir anket uygulamasıdır.", + "A forms app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "Doodle/Dudle benzeri, erişim kısıtlama özelliği (üyeler, belirli grup ve kullanıcılar, gizli ve herkese açık gibi) bulunan bir anket uygulamasıdır.", + "Expired" : "Sona Ermiş", + "Expires %n" : "%n tarihinde sona erecek", + "Expires never" : "Asla sona ermeyecek", + "Anonymous form" : "Anonim anket", + "Usernames hidden to Owner" : "Sahip Kullanıcı Adlarını Göremesin", + "Usernames visible to Owner" : "Sahip Kullanıcı Adlarını Görebilsin", + "Group" : "Grup", + "Title" : "Başlık", + "Access" : "Erişim", + "Owner" : "Sahip", + "Created" : "Oluşturulma", + "Expires" : "Sona Erme", + "Public access" : "Herkese açık erişim", + "Only shared" : "Yalnız paylaşılanlarla", + "Registered users only" : "Yalnız kayıtlı kullanıcılar", + "Hidden form" : "Gizli anket", + "Text form" : "Metin anketi", + "Date form" : "Tarih anketi", + "never" : "asla", + "Copy Link" : "Bağlantıyı Kopyala", + "Clone form" : "Anketi kopyala", + "Edit form" : "Anketi düzenle", + "Delete form" : "Anketi sil", + "Edit form as admin" : "Anketi yönetici olarak düzenle", + "Delete form as admin" : "Anketi yönetici olarak sil", + "Link copied to clipboard" : "Bağlantı panoya kopyalandı", + "Error, while copying link to clipboard" : "Bağlantı panoya kopyalanırken sorun çıktı", + "_There is %n comment_::_There are %n comments_" : ["%n yorum var","%n yorum var"], + "Share with" : "Şununla paylaş", + "Form description" : "Anket açıklaması", + "Description" : "Açıklama", + "Vote options" : "Oy seçenekleri", + "Event schedule" : "Etkinlik zamanlaması", + "Text based" : "Metin temelli", + "Shift dates" : "Tarihleri kaydır", + "Shift all dates for " : "Şunun için tüm tarihleri kaydır", + "Add option" : "Seçenek ekle", + "You are editing in admin mode" : "Yönetici kipinde düzenliyorsunuz", + "Configuration" : "Yapılandırma", + "Configuration is locked. Changing options may result in unwanted behaviour, but you can unlock it anyway." : "Yapılandırma kilitlenmiş. Seçeneklerin değiştirilmesi istenmeyen davranışlara yol açabilir ancak gene de kilidi açabilirsiniz.", + "Unlock configuration " : "Yapılandırma kilidini aç", + "Form type" : "Anket türü", + "Form configurations" : "Anket yapılandırmaları", + "Allow \"maybe\" vote" : "\"Belki\" oyu verilebilsin", + "Hide user names for admin" : "Yönetici için kullanıcı adları gizlensin", + "hidden" : "gizli", + "Name of user or group" : "Kullanıcı ya da grup adı", + "Create new form" : "Anket ekle", + "Writing form" : "Yazma anketi", + "Update form" : "Anketi güncelle", + "Expiration date" : "Sona erme tarihi", + "Click to add a date" : "Bir tarih eklemek için tıklayın", + "Shift all date options" : "Tüm tarih ayarlarını kaydır", + "Cancel" : "İptal", + "Apply" : "Uygula", + "Title must not be empty!" : "Başlık boş olamaz!", + "%n successfully saved" : "%n kaydedildi", + "Error on saving form, see console" : "Anket kaydedilirken sorun çıktı, konsola bakın", + "Clone of %n" : "%n kopyası", + "New" : "Yeni", + "Click here to add a form" : "Bir anket eklemek için tıklayın", + "Do you want to delete \"%n\"?" : "\"%n\" anketini silmek istiyor musunuz?", + "No, keep form." : "Hayır, anket korunsun.", + "Yes, delete form." : "Evet, anket silinsin.", + "Form \"%n\" deleted" : "\"%n\" anketi silindi", + "Error while deleting Form \"%n\"" : "\"%n\" anketi silinirken sorun çıktı", + "Access denied" : "Erişim engellendi", + "You are not allowed to view this form or the form does not exist." : "Bu anket bulunamadı ya da görüntüleme izniniz yok.", + "You are not allowed to edit this form or the form does not exist." : "Bu anket bulunamadı ya da düzenleme izniniz yok.", + "You are either not allowed to delete this form or it doesn't exist." : "Bu anketi silme izniniz yok ya da anket bulunamadı.", + "No description provided." : "Açıklama yazılmamış.", + "The form expired on %s. Voting is disabled, but you can still comment." : "Anketin süresi %s zamanında doldu. Oy verme işlemi devre dışı bırakıldı ancak gene de yorum yapabilirsiniz.", + "Switch all options at once" : "Tüm seçenekleri bir kerede değiştir", + "Your name here" : "Adınızı buraya yazın", + "Say yes to all" : "Tümüne Evet", + "Reset all (say no)" : "Tümünü Sıfırla (Hayır)", + "Say maybe to all" : "Tümüne Belki", + "This form was updated since your last visit. Please check your votes." : "Bu anket son baktığınızdan sonra değiştirilmiş. Lütfen oylarınızı denetleyin.", + "Vote!" : "Oy Ver!", + "Receive notification email on activity" : "İşlem yapıldığında e-posta bildirimi gönderilsin", + "Close details" : "Ayrıntıları kapat", + "Close" : "Kapat", + "Expires on %s" : "%s zamanında sona erecek", + "Invitation access" : "Çağrı erişimi", + "Anononymous form" : "İsimsiz anket", + "Click to get link" : "Bağlantıyı almak için tıklayın", + "Edit Form" : "Anketi Düzenle", + "Form expired" : "Anketin süresi dolmuş", + "Comments" : "Yorumlar", + "Login or ..." : "Oturum açın ya da ...", + "New comment …" : "Yorum ekle ...", + "No comments yet. Be the first." : "Henüz bir yorum yapılmamış. İlk yorum yapan siz olun." +},"pluralForm" :"nplurals=2; plural=(n > 1);" +} \ No newline at end of file diff --git a/l10n/zh_CN.js b/l10n/zh_CN.js new file mode 100644 index 0000000..47061fd --- /dev/null +++ b/l10n/zh_CN.js @@ -0,0 +1,52 @@ +OC.L10N.register( + "forms", + { + "Copied!" : "已复制!", + "Copy" : "复制", + "Not supported!" : "不支持!", + "Press ⌘-C to copy." : "按 ⌘-C 复制", + "Press Ctrl-C to copy." : "按 Ctrl+C 复制", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "您还未注册。\n请输入您的名字以投票\n(至少三个字符)。", + "Please add some text to your comment before submitting it." : "请输入评论以提交。", + "An error occurred, your comment was not posted." : "发生错误,您的评论未成功提交。", + "Forms" : "投票", + "Forms App - New Activity" : "投票应用 - 新的活动", + "just now" : "刚刚", + "Expired" : "已过期", + "Expires never" : "从不过期", + "Usernames hidden to Owner" : "多所有者隐藏用户名", + "Usernames visible to Owner" : "对所有者显示用户名", + "Title" : "标题", + "Access" : "进入", + "Owner" : "拥有者", + "Created" : "已创建", + "Expires" : "过期", + "Copy Link" : "复制链接", + "Delete form" : "删除投票", + "Description" : "描述", + "Create new form" : "创建新的投票", + "Update form" : "更新投票", + "Expiration date" : "过期日期", + "Access denied" : "访问被拒绝", + "You are not allowed to view this form or the form does not exist." : "您无权查看此投票或者此投票不存在。", + "You are not allowed to edit this form or the form does not exist." : "您无权编辑此投票或者此投票不存在。", + "No description provided." : "没有提供描述。", + "The form expired on %s. Voting is disabled, but you can still comment." : "投票在 %s 过期了。投票已禁用,但是您仍然可以留言。", + "Switch all options at once" : "一次性切换所有选项", + "Your name here" : "在此处填写您的名称", + "Vote!" : "投票!", + "Receive notification email on activity" : "有活动时接收邮件提醒", + "Close details" : "关闭细节", + "Close" : "关闭", + "Expires on %s" : "在%s过期", + "Invitation access" : "邀请权限", + "Anononymous form" : "匿名投票", + "Click to get link" : "点击以获取链接", + "Edit Form" : "编辑投票", + "Form expired" : "投票已过期", + "Comments" : "评论", + "Login or ..." : "登陆,或者...", + "New comment …" : "新评论...", + "No comments yet. Be the first." : "还没有评论。成为第一个评论的人吧。" +}, +"nplurals=1; plural=0;"); diff --git a/l10n/zh_CN.json b/l10n/zh_CN.json new file mode 100644 index 0000000..a4ca56f --- /dev/null +++ b/l10n/zh_CN.json @@ -0,0 +1,50 @@ +{ "translations": { + "Copied!" : "已复制!", + "Copy" : "复制", + "Not supported!" : "不支持!", + "Press ⌘-C to copy." : "按 ⌘-C 复制", + "Press Ctrl-C to copy." : "按 Ctrl+C 复制", + "You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "您还未注册。\n请输入您的名字以投票\n(至少三个字符)。", + "Please add some text to your comment before submitting it." : "请输入评论以提交。", + "An error occurred, your comment was not posted." : "发生错误,您的评论未成功提交。", + "Forms" : "投票", + "Forms App - New Activity" : "投票应用 - 新的活动", + "just now" : "刚刚", + "Expired" : "已过期", + "Expires never" : "从不过期", + "Usernames hidden to Owner" : "多所有者隐藏用户名", + "Usernames visible to Owner" : "对所有者显示用户名", + "Title" : "标题", + "Access" : "进入", + "Owner" : "拥有者", + "Created" : "已创建", + "Expires" : "过期", + "Copy Link" : "复制链接", + "Delete form" : "删除投票", + "Description" : "描述", + "Create new form" : "创建新的投票", + "Update form" : "更新投票", + "Expiration date" : "过期日期", + "Access denied" : "访问被拒绝", + "You are not allowed to view this form or the form does not exist." : "您无权查看此投票或者此投票不存在。", + "You are not allowed to edit this form or the form does not exist." : "您无权编辑此投票或者此投票不存在。", + "No description provided." : "没有提供描述。", + "The form expired on %s. Voting is disabled, but you can still comment." : "投票在 %s 过期了。投票已禁用,但是您仍然可以留言。", + "Switch all options at once" : "一次性切换所有选项", + "Your name here" : "在此处填写您的名称", + "Vote!" : "投票!", + "Receive notification email on activity" : "有活动时接收邮件提醒", + "Close details" : "关闭细节", + "Close" : "关闭", + "Expires on %s" : "在%s过期", + "Invitation access" : "邀请权限", + "Anononymous form" : "匿名投票", + "Click to get link" : "点击以获取链接", + "Edit Form" : "编辑投票", + "Form expired" : "投票已过期", + "Comments" : "评论", + "Login or ..." : "登陆,或者...", + "New comment …" : "新评论...", + "No comments yet. Be the first." : "还没有评论。成为第一个评论的人吧。" +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php new file mode 100644 index 0000000..48f81fc --- /dev/null +++ b/lib/AppInfo/Application.php @@ -0,0 +1,63 @@ + + * + * @author Vinzenz Rosenkranz + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\AppInfo; + +use OCA\Forms\Controller\PageController; +use OCA\Forms\Controller\ApiController; +use OCA\Forms\Db\CommentMapper; +use OCA\Forms\Db\OptionMapper; +use OCA\Forms\Db\EventMapper; +use OCA\Forms\Db\NotificationMapper; +use OCA\Forms\Db\VoteMapper; +use OCP\AppFramework\App; +use OCP\IContainer; + +class Application extends App { + + /** + * Application constructor. + * @param array $urlParams + */ + public function __construct(array $urlParams = []) { + parent::__construct('forms', $urlParams); + } + + /** + * Register navigation entry for main navigation. + */ + public function registerNavigationEntry() { + $container = $this->getContainer(); + $container->query('OCP\INavigationManager')->add(function() use ($container) { + $urlGenerator = $container->query('OCP\IURLGenerator'); + $l10n = $container->query('OCP\IL10N'); + return [ + 'id' => 'forms', + 'order' => 77, + 'href' => $urlGenerator->linkToRoute('forms.page.index'), + 'icon' => $urlGenerator->imagePath('forms', 'app.svg'), + 'name' => $l10n->t('Forms') + ]; + }); + } +} diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php new file mode 100644 index 0000000..4125c90 --- /dev/null +++ b/lib/Controller/ApiController.php @@ -0,0 +1,558 @@ + + * + * @author René Gieling + * @author Natalie Gilbert + * @author Inigo Jiron + * @author Affan Hussain + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Controller; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\Db\DoesNotExistException; + +use OCP\IGroupManager; +use OCP\IRequest; +use OCP\IUser; +use OCP\IUserManager; +use OCP\Security\ISecureRandom; + +use OCA\Forms\Db\Event; +use OCA\Forms\Db\EventMapper; +use OCA\Forms\Db\Option; +use OCA\Forms\Db\OptionMapper; +use OCA\Forms\Db\Vote; +use OCA\Forms\Db\VoteMapper; +use OCA\Forms\Db\Comment; +use OCA\Forms\Db\CommentMapper; +use OCA\Forms\Db\Notification; +use OCA\Forms\Db\NotificationMapper; + +use OCA\Forms\Db\Question; +use OCA\Forms\Db\QuestionMapper; +use OCA\Forms\Db\Answer; +use OCA\Forms\Db\AnswerMapper; + + + +class ApiController extends Controller { + + private $groupManager; + private $userManager; + private $eventMapper; + private $optionMapper; + private $voteMapper; + private $commentMapper; + private $questionMapper; + private $answerMapper; + + /** + * PageController constructor. + * @param string $appName + * @param IGroupManager $groupManager + * @param IRequest $request + * @param IUserManager $userManager + * @param string $userId + * @param EventMapper $eventMapper + * @param OptionMapper $optionMapper + * @param VoteMapper $voteMapper + * @param CommentMapper $commentMapper + * @param QuestionMapper $questionMapper + * @param AnswerMapper $answerMapper + */ + public function __construct( + $appName, + IGroupManager $groupManager, + IRequest $request, + IUserManager $userManager, + $userId, + EventMapper $eventMapper, + OptionMapper $optionMapper, + VoteMapper $voteMapper, + CommentMapper $commentMapper, + QuestionMapper $questionMapper, + AnswerMapper $answerMapper + ) { + parent::__construct($appName, $request); + $this->userId = $userId; + $this->groupManager = $groupManager; + $this->userManager = $userManager; + $this->eventMapper = $eventMapper; + $this->optionMapper = $optionMapper; + $this->voteMapper = $voteMapper; + $this->commentMapper = $commentMapper; + $this->questionMapper = $questionMapper; + $this->answerMapper = $answerMapper; + } + + /** + * Transforms a string with user and group names to an array + * of nextcloud users and groups + * @param string $item + * @return Array + */ + private function convertAccessList($item) { + $split = array(); + if (strpos($item, 'user_') === 0) { + $user = $this->userManager->get(substr($item, 5)); + $split = [ + 'id' => $user->getUID(), + 'user' => $user->getUID(), + 'type' => 'user', + 'desc' => 'user', + 'icon' => 'icon-user', + 'displayName' => $user->getDisplayName(), + 'avatarURL' => '', + 'lastLogin' => $user->getLastLogin(), + 'cloudId' => $user->getCloudId() + ]; + } elseif (strpos($item, 'group_') === 0) { + $group = substr($item, 6); + $group = $this->groupManager->get($group); + $split = [ + 'id' => $group->getGID(), + 'user' => $group->getGID(), + 'type' => 'group', + 'desc' => 'group', + 'icon' => 'icon-group', + 'displayName' => $group->getDisplayName(), + 'avatarURL' => '', + ]; + } + + return($split); + } + + /** + * Check if current user is in the access list + * @param Array $accessList + * @return Boolean + */ + private function checkUserAccess($accessList) { + foreach ($accessList as $accessItem ) { + if ($accessItem['type'] === 'user' && $accessItem['id'] === \OC::$server->getUserSession()->getUser()->getUID()) { + return true; + } + } + + return false; + } + + /** + * Check If current user is member of a group in the access list + * @param Array $accessList + * @return Boolean + */ + private function checkGroupAccess($accessList) { + foreach ($accessList as $accessItem ) { + if ($accessItem['type'] === 'group' && $this->groupManager->isInGroup(\OC::$server->getUserSession()->getUser()->getUID(),$accessItem['id'])) { + return true; + } + } + + return false; + } + + /** + * Set the access right of the current user for the form + * @param Array $event + * @param Array $shares + * @return String + */ + private function grantAccessAs($event, $shares) { + if (!\OC::$server->getUserSession()->getUser() instanceof IUser) { + $currentUser = ''; + } else { + $currentUser = \OC::$server->getUserSession()->getUser()->getUID(); + } + + $grantAccessAs = 'none'; + + if ($event['owner'] === $currentUser) { + $grantAccessAs = 'owner'; + } elseif ($event['access'] === 'public') { + $grantAccessAs = 'public'; + } elseif ($event['access'] === 'registered' && \OC::$server->getUserSession()->getUser() instanceof IUser) { + $grantAccessAs = 'registered'; + } elseif ($event['access'] === 'hidden' && ($event['owner'] === \OC::$server->getUserSession()->getUser())) { + $grantAccessAs = 'hidden'; + } elseif ($this->checkUserAccess($shares)) { + $grantAccessAs = 'userInvitation'; + } elseif ($this->checkGroupAccess($shares)) { + $grantAccessAs = 'groupInvitation'; + } elseif ($this->groupManager->isAdmin($currentUser)) { + $grantAccessAs = 'admin'; + } + + return $grantAccessAs; + } + + /** + * Read all options of a form based on the form id + * @NoAdminRequired + * @NoCSRFRequired + * @param Integer $formId + * @return Array + */ + public function getOptions($formId) { + $optionList = array(); + $options = $this->optionMapper->findByForm($formId); + foreach ($options as $optionElement) { + $optionList[] = $optionElement->read(); + } + + return $optionList; + } + + /** + * Read all votes of a form based on the form id + * @NoAdminRequired + * @NoCSRFRequired + * @param Integer $formId + * @return Array + */ + public function getVotes($formId) { + $votesList = array(); + $votes = $this->voteMapper->findByForm($formId); + + foreach ($votes as $voteElement) { + $votesList[] = $voteElement->read(); + } + + return $votesList; + } + + /** + * Read all comments of a form based on the form id + * @NoAdminRequired + * @NoCSRFRequired + * @param Integer $formId + * @return Array + */ + public function getComments($formId) { + $commentsList = array(); + $comments = $this->commentMapper->findByForm($formId); + + foreach ($comments as $commentElement) { + $commentsList[] = $commentElement->read(); + } + + return $commentsList; + } + + /** + * Read an entire form based on form id + * @NoAdminRequired + * @NoCSRFRequired + * @param Integer $formId + * @return Array + */ + public function getEvent($formId) { + + $data = array(); + try { + $data = $this->eventMapper->find($formId)->read(); + } catch (DoesNotExistException $e) { + // return silently + } finally { + return $data; + } + + } + + /** + * Read all shares (users and groups with access) of a form based on the form id + * @NoAdminRequired + * @NoCSRFRequired + * @param Integer $formId + * @return Array + */ + public function getShares($formId) { + + $accessList = array(); + + try { + $form = $this->eventMapper->find($formId); + if (!strpos('|public|hidden|registered', $form->getAccess())) { + $accessList = explode(';', $form->getAccess()); + $accessList = array_filter($accessList); + $accessList = array_map(array($this, 'convertAccessList'), $accessList); + } + } catch (DoesNotExistException $e) { + // return silently + } finally { + return $accessList; + } + + } + + public function getQuestions($formId) { + $questionList = array(); + try{ + $questions = $this->questionMapper->findByForm($formId); + foreach ($questions as $questionElement) { + $temp = $questionElement->read(); + $temp['answers'] = $this->getAnswers($formId, $temp['id']); + $questionList[] = $temp; + } + + } catch (DoesNotExistException $e) { + //handle silently + }finally{ + return $questionList; + } + } + + public function getAnswers($formId, $questionId) { + $answerList = array(); + try{ + $answers = $this->answerMapper->findByForm($formId, $questionId); + foreach ($answers as $answerElement) { + $answerList[] = $answerElement->read(); + } + + } catch (DoesNotExistException $e) { + //handle silently + }finally{ + return $answerList; + } + } + + /** + * Read an entire form based on the form id or hash + * @NoAdminRequired + * @NoCSRFRequired + * @param String $formIdOrHash form id or hash + * @return Array + */ + public function getForm($formIdOrHash) { + + if (!\OC::$server->getUserSession()->getUser() instanceof IUser) { + $currentUser = ''; + } else { + $currentUser = \OC::$server->getUserSession()->getUser()->getUID(); + } + + $data = array(); + + try { + + if (is_numeric($formIdOrHash)) { + $formId = $this->eventMapper->find(intval($formIdOrHash))->id; + $result = 'foundById'; + } else { + $formId = $this->eventMapper->findByHash($formIdOrHash)->id; + $result = 'foundByHash'; + } + + $event = $this->getEvent($formId); + $shares = $this->getShares($event['id']); + + if ($event['owner'] !== $currentUser && !$this->groupManager->isAdmin($currentUser)) { + $mode = 'create'; + } else { + $mode = 'edit'; + } + + $data = [ + 'id' => $event['id'], + 'result' => $result, + 'grantedAs' => $this->grantAccessAs($event, $shares), + 'mode' => $mode, + 'event' => $event, + 'comments' => $this->getComments($event['id']), + 'votes' => $this->getVotes($event['id']), + 'shares' => $shares, + 'options' => [ + 'formQuizQuestions' => $this->getQuestions($event['id']) + ] + ]; + } catch (DoesNotExistException $e) { + $data['form'] = ['result' => 'notFound']; + } finally { + return $data; + } + } + + /** + * Get all forms + * @NoAdminRequired + * @NoCSRFRequired + * @return DataResponse + */ + + public function getForms() { + if (!\OC::$server->getUserSession()->getUser() instanceof IUser) { + return new DataResponse(null, Http::STATUS_UNAUTHORIZED); + } + + try { + $events = $this->eventMapper->findAll(); + } catch (DoesNotExistException $e) { + return new DataResponse($e, Http::STATUS_NOT_FOUND); + } + + $eventsList = array(); + + foreach ($events as $eventElement) { + $event = $this->getForm($eventElement->id); + //if ($event['grantedAs'] !== 'none') { + $eventsList[] = $event; + //} + } + + return new DataResponse($eventsList, Http::STATUS_OK); + } + + /** + * @NoAdminRequired + * @param int $formId + * @return DataResponse + */ + public function removeForm($id) { + $formToDelete = $this->eventMapper->find($id); + if ($this->userId !== $formToDelete->getOwner() && !$this->groupManager->isAdmin($this->userId)) { + return new DataResponse(null, Http::STATUS_UNAUTHORIZED); + } + $this->commentMapper->deleteByForm($id); + $this->voteMapper->deleteByForm($id); + // $this->notificationMapper->deleteByForm($id); + $this->questionMapper->deleteByForm($id); + $this->answerMapper->deleteByForm($id); + $this->eventMapper->delete($formToDelete); + return new DataResponse(array( + 'id' => $id, + 'action' => 'deleted' + ), Http::STATUS_OK); + } + + + /** + * Write form (create/update) + * @NoAdminRequired + * @param Array $event + * @param Array $options + * @param Array $shares + * @param String $mode + * @return DataResponse + */ + public function writeForm($event, $options, $shares, $mode) { + if (!\OC::$server->getUserSession()->getUser() instanceof IUser) { + return new DataResponse(null, Http::STATUS_UNAUTHORIZED); + } else { + $currentUser = \OC::$server->getUserSession()->getUser()->getUID(); + $AdminAccess = $this->groupManager->isAdmin($currentUser); + } + + $newEvent = new Event(); + + // Set the configuration options entered by the user + $newEvent->setTitle($event['title']); + $newEvent->setDescription($event['description']); + + $newEvent->setIsAnonymous($event['isAnonymous']); + $newEvent->setFullAnonymous($event['fullAnonymous']); + $newEvent->setAllowMaybe($event['allowMaybe']); + + if ($event['access'] === 'select') { + $shareAccess = ''; + foreach ($shares as $shareElement) { + if ($shareElement['type'] === 'user') { + $shareAccess = $shareAccess . 'user_' . $shareElement['id'] . ';'; + } elseif ($shareElement['type'] === 'group') { + $shareAccess = $shareAccess . 'group_' . $shareElement['id'] . ';'; + } + } + $newEvent->setAccess(rtrim($shareAccess, ';')); + } else { + $newEvent->setAccess($event['access']); + } + + if ($event['expiration']) { + $newEvent->setExpire(date('Y-m-d H:i:s', strtotime($event['expirationDate']))); + } else { + $newEvent->setExpire(null); + } + + if ($mode === 'edit') { + // Edit existing form + $oldForm = $this->eventMapper->findByHash($event['hash']); + + // Check if current user is allowed to edit existing form + if ($oldForm->getOwner() !== $currentUser && !$AdminAccess) { + // If current user is not owner of existing form deny access + return new DataResponse(null, Http::STATUS_UNAUTHORIZED); + } + + // else take owner, hash and id of existing form + $newEvent->setOwner($oldForm->getOwner()); + $newEvent->setHash($oldForm->getHash()); + $newEvent->setId($oldForm->getId()); + $this->eventMapper->update($newEvent); + $this->questionMapper->deleteByForm($newEvent->getId()); + + } elseif ($mode === 'create') { + // Create new form + // Define current user as owner, set new creation date and create a new hash + $newEvent->setOwner($currentUser); + $newEvent->setCreated(date('Y-m-d H:i:s')); + $newEvent->setHash(\OC::$server->getSecureRandom()->generate( + 16, + ISecureRandom::CHAR_DIGITS . + ISecureRandom::CHAR_LOWER . + ISecureRandom::CHAR_UPPER + )); + $newEvent = $this->eventMapper->insert($newEvent); + } + + // Update options + $qId = 1; + foreach($options['formQuizQuestions'] as $questionElement){ + $newQuestion = new Question(); + + $newQuestion->setFormId($newEvent->getId()); + $newQuestion->setFormQuestionType($questionElement['type']); + $newQuestion->setFormQuestionText(trim(htmlspecialchars($questionElement['text']))); + + $newQuestion = $this->questionMapper->insert($newQuestion); + + foreach($questionElement['answers'] as $answer){ + $newAnswer = new Answer(); + + $newAnswer->setFormId($newEvent->getId()); + $newAnswer->setQuestionId($newQuestion->getId()); + $newAnswer->setText($answer['text']); + + $newAnswer = $this->answerMapper->insert($newAnswer); + } + } + + return new DataResponse(array( + 'id' => $newEvent->getId(), + 'hash' => $newEvent->getHash() + ), Http::STATUS_OK); + + } +} diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php new file mode 100644 index 0000000..86b6eb6 --- /dev/null +++ b/lib/Controller/PageController.php @@ -0,0 +1,603 @@ + + * + * @author Vinzenz Rosenkranz + * @author René Gieling + * @author Inigo Jiron + * @author Natalie Gilbert + * @author Affan Hussain + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Controller; + +use OCA\Forms\Db\Comment; +use OCA\Forms\Db\CommentMapper; +use OCA\Forms\Db\Event; +use OCA\Forms\Db\EventMapper; +use OCA\Forms\Db\Notification; +use OCA\Forms\Db\NotificationMapper; +// use OCA\Forms\Db\Option; +// use OCA\Forms\Db\OptionMapper; +use OCA\Forms\Db\Vote; +use OCA\Forms\Db\VoteMapper; + +use OCA\Forms\Db\Answer; +use OCA\Forms\Db\AnswerMapper; +use OCA\Forms\Db\Question; +use OCA\Forms\Db\QuestionMapper; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Db\DoesNotExistException; +use OCP\AppFramework\Http\ContentSecurityPolicy; +use OCP\AppFramework\Http\JSONResponse; +use OCP\AppFramework\Http\RedirectResponse; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IAvatarManager; +use OCP\IConfig; +use OCP\IGroupManager; +use OCP\IL10N; +use OCP\ILogger; +use OCP\IRequest; +use OCP\IURLGenerator; +use OCP\IUser; +use OCP\IUserManager; +use OCP\L10N\IFactory; +use OCP\Mail\IMailer; +use OCP\Security\ISecureRandom; +use OCP\User; //To do: replace according to API +use OCP\Util; + +class PageController extends Controller { + + private $userId; + private $config; + private $commentMapper; + private $eventMapper; + private $notificationMapper; + // private $optionMapper; + private $voteMapper; + + private $questionMapper; + private $answerMapper; + + private $urlGenerator; + private $userMgr; + private $avatarManager; + private $logger; + private $trans; + private $transFactory; + private $groupManager; + private $mailer; + + /** + * PageController constructor. + * @param string $appName + * @param IRequest $request + * @param IConfig $config + * @param IUserManager $userMgr + * @param IGroupManager $groupManager + * @param IAvatarManager $avatarManager + * @param ILogger $logger + * @param IL10N $trans + * @param IFactory $transFactory + * @param IURLGenerator $urlGenerator + * @param string $userId + * @param CommentMapper $commentMapper + * @param OptionMapper $optionMapper + * @param EventMapper $eventMapper + * + * @param QuestionMapper $questionMapper + * @param AnswerMapper $answerMapper + * + * @param NotificationMapper $notificationMapper + * @param VoteMapper $VoteMapper + * @param IMailer $mailer + */ + public function __construct( + $appName, + IRequest $request, + IConfig $config, + IUserManager $userMgr, + IGroupManager $groupManager, + IAvatarManager $avatarManager, + ILogger $logger, + IL10N $trans, + IFactory $transFactory, + IURLGenerator $urlGenerator, + $userId, + CommentMapper $commentMapper, + // OptionMapper $optionMapper, + EventMapper $eventMapper, + + QuestionMapper $questionMapper, + AnswerMapper $answerMapper, + + NotificationMapper $notificationMapper, + VoteMapper $VoteMapper, + IMailer $mailer + ) { + parent::__construct($appName, $request); + $this->request = $request; + $this->config = $config; + $this->userMgr = $userMgr; + $this->groupManager = $groupManager; + $this->avatarManager = $avatarManager; + $this->logger = $logger; + $this->trans = $trans; + $this->transFactory = $transFactory; + $this->urlGenerator = $urlGenerator; + $this->userId = $userId; + $this->commentMapper = $commentMapper; + // $this->optionMapper = $optionMapper; + $this->eventMapper = $eventMapper; + + $this->questionMapper = $questionMapper; + $this->answerMapper = $answerMapper; + + $this->notificationMapper = $notificationMapper; + $this->voteMapper = $VoteMapper; + $this->mailer = $mailer; + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + */ + public function index() { + return new TemplateResponse('forms', 'forms.tmpl', + ['urlGenerator' => $this->urlGenerator]); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + */ + public function createForm() { + return new TemplateResponse('forms', 'forms.tmpl', + ['urlGenerator' => $this->urlGenerator]); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + */ + public function cloneForm() { + return new TemplateResponse('forms', 'forms.tmpl', + ['urlGenerator' => $this->urlGenerator]); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @param string $hash + * @return TemplateResponse + */ + public function editForm($hash) { + return new TemplateResponse('forms', 'forms.tmpl', [ + 'urlGenerator' => $this->urlGenerator, + 'hash' => $hash + ]); + } + + /** + * @param int $formId + * @param string $from + */ + private function sendNotifications($formId, $from) { + $form = $this->eventMapper->find($formId); + $notifications = $this->notificationMapper->findAllByForm($formId); + foreach ($notifications as $notification) { + if ($from === $notification->getUserId()) { + continue; + } + $recUser = $this->userMgr->get($notification->getUserId()); + if (!$recUser instanceof IUser) { + continue; + } + $email = \OC::$server->getConfig()->getUserValue($notification->getUserId(), 'settings', 'email'); + if ($email === null || !filter_var($email, FILTER_VALIDATE_EMAIL)) { + continue; + } + $url = $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->linkToRoute('forms.page.goto_form', + array('hash' => $form->getHash())) + ); + + $sendUser = $this->userMgr->get($from); + $sender = $from; + if ($sendUser instanceof IUser) { + $sender = $sendUser->getDisplayName(); + } + + $lang = $this->config->getUserValue($notification->getUserId(), 'core', 'lang'); + $trans = $this->transFactory->get('forms', $lang); + $emailTemplate = $this->mailer->createEMailTemplate('forms.Notification', [ + 'user' => $sender, + 'title' => $form->getTitle(), + 'link' => $url, + ]); + $emailTemplate->setSubject($trans->t('Forms App - New Activity')); + $emailTemplate->addHeader(); + $emailTemplate->addHeading($trans->t('Forms App - New Activity'), false); + + $emailTemplate->addBodyText(str_replace( + ['{user}', '{title}'], + [$sender, $form->getTitle()], + $trans->t('{user} participated in the form "{title}"') + )); + + $emailTemplate->addBodyButton( + htmlspecialchars($trans->t('Go to form')), + $url, + false + ); + + $emailTemplate->addFooter(); + try { + $message = $this->mailer->createMessage(); + $message->setTo([$email => $recUser->getDisplayName()]); + $message->useTemplate($emailTemplate); + $this->mailer->send($message); + } catch (\Exception $e) { + $this->logger->logException($e, ['app' => 'forms']); + } + } + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @PublicPage + * @param string $hash + * @return TemplateResponse + */ + public function gotoForm($hash) { + try { + $form = $this->eventMapper->findByHash($hash); + } catch (DoesNotExistException $e) { + return new TemplateResponse('forms', 'no.acc.tmpl', []); + } + + if ($form->getExpire() === null) { + $expired = false; + } else { + $expired = time() > strtotime($form->getExpire()); + } + + if ($expired) { + return new TemplateResponse('forms', 'expired.tmpl'); + } + + $votes = $this->voteMapper->findByForm($form->getId()); + $participants = $this->voteMapper->findParticipantsByForm($form->getId()); + $questions = $this->questionMapper->findByForm($form->getId()); + + try { + $notification = $this->notificationMapper->findByUserAndForm($form->getId(), $this->userId); + } catch (DoesNotExistException $e) { + $notification = null; + } + + if ($this->hasUserAccess($form)) { + return new TemplateResponse('forms', 'vote.tmpl', [ + 'form' => $form, + 'questions' => $this->getQuestions($form->getId()), + 'votes' => $votes, + 'participant' => $participants, + 'notification' => $notification, + 'userId' => $this->userId, + 'userMgr' => $this->userMgr, + 'urlGenerator' => $this->urlGenerator, + 'avatarManager' => $this->avatarManager + ]); + } else { + User::checkLoggedIn(); + return new TemplateResponse('forms', 'no.acc.tmpl', []); + } + } + + public function getQuestions($formId) { + $questionList = array(); + try{ + $questions = $this->questionMapper->findByForm($formId); + foreach ($questions as $questionElement) { + $temp = $questionElement->read(); + $temp['answers'] = $this->getAnswers($formId, $temp['id']); + $questionList[] = $temp; + } + + } catch (DoesNotExistException $e) { + //handle silently + }finally{ + return $questionList; + } + } + + public function getAnswers($formId, $questionId) { + $answerList = array(); + try{ + $answers = $this->answerMapper->findByForm($formId, $questionId); + foreach ($answers as $answerElement) { + $answerList[] = $answerElement->read(); + } + + } catch (DoesNotExistException $e) { + //handle silently + }finally{ + return $answerList; + } + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @param int $formId + * @return TemplateResponse|RedirectResponse + */ + public function deleteForm($formId) { + $formToDelete = $this->eventMapper->find($formId); + if ($this->userId !== $formToDelete->getOwner() && !$this->groupManager->isAdmin($this->userId)) { + return new TemplateResponse('forms', 'no.delete.tmpl'); + } + $form = new Event(); + $form->setId($formId); + $this->commentMapper->deleteByForm($formId); + $this->voteMapper->deleteByForm($formId); + // $this->optionMapper->deleteByForm($formId); + $this->eventMapper->delete($form); + $url = $this->urlGenerator->linkToRoute('forms.page.index'); + return new RedirectResponse($url); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @PublicPage + * @param int $formId + * @param string $userId + * @param string $answers + * @param string $options question id + * @param bool $receiveNotifications + * @param bool $changed + * @return RedirectResponse + */ + public function insertVote($id, $userId, $answers, $questions) { + $form = $this->eventMapper->find($id); + $count_answers = count($answers); + $count = 1; + for ($i = 0; $i < $count_answers; $i++) { + if($questions[$i]['type'] == "checkbox"){ + foreach (($answers[$questions[$i]['text']]) as $value) { + $vote = new Vote(); + $vote->setFormId($id); + $vote->setUserId($userId); + $vote->setVoteOptionText(htmlspecialchars($questions[$i]['text'])); + $vote->setVoteAnswer($value); + $vote->setVoteOptionId($count); + $this->voteMapper->insert($vote); + } + $count++; + } else { + $vote = new Vote(); + $vote->setFormId($id); + $vote->setUserId($userId); + $vote->setVoteOptionText(htmlspecialchars($questions[$i]['text'])); + $vote->setVoteAnswer($answers[$questions[$i]['text']]); + $vote->setVoteOptionId($count++); + $this->voteMapper->insert($vote); + } + } + + $hash = $form->getHash(); + $url = $this->urlGenerator->linkToRoute('forms.page.goto_form', ['hash' => $hash]); + return new RedirectResponse($url); + } + + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @PublicPage + * @param int $formId + * @param string $userId + * @param string $commentBox + * @return JSONResponse + */ + public function insertComment($formId, $userId, $commentBox) { + $comment = new Comment(); + $comment->setFormId($formId); + $comment->setUserId($userId); + $comment->setComment($commentBox); + $comment->setDt(date('Y-m-d H:i:s')); + $this->commentMapper->insert($comment); + $this->sendNotifications($formId, $userId); + $timeStamp = time(); + $displayName = $userId; + $user = $this->userMgr->get($userId); + if ($user !== null) { + $displayName = $user->getDisplayName(); + } + return new JSONResponse(array( + 'userId' => $userId, + 'displayName' => $displayName, + 'timeStamp' => $timeStamp * 100, + 'date' => date('Y-m-d H:i:s', $timeStamp), + 'relativeNow' => $this->trans->t('just now'), + 'comment' => $commentBox + )); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @param string $searchTerm + * @param string $groups + * @param string $users + * @return array + */ + public function search($searchTerm, $groups, $users) { + return array_merge($this->searchForGroups($searchTerm, $groups), $this->searchForUsers($searchTerm, $users)); + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @param string $searchTerm + * @param string $groups + * @return array + */ + public function searchForGroups($searchTerm, $groups) { + $selectedGroups = json_decode($groups); + $groups = $this->groupManager->search($searchTerm); + $gids = array(); + $sgids = array(); + foreach ($selectedGroups as $sg) { + $sgids[] = str_replace('group_', '', $sg); + } + foreach ($groups as $g) { + $gids[] = $g->getGID(); + } + $diffGids = array_diff($gids, $sgids); + $gids = array(); + foreach ($diffGids as $g) { + $gids[] = ['gid' => $g, 'isGroup' => true]; + } + return $gids; + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @param string $searchTerm + * @param string $users + * @return array + */ + public function searchForUsers($searchTerm, $users) { + $selectedUsers = json_decode($users); + Util::writeLog('forms', print_r($selectedUsers, true), Util::ERROR); + $userNames = $this->userMgr->searchDisplayName($searchTerm); + $users = array(); + $sUsers = array(); + foreach ($selectedUsers as $su) { + $sUsers[] = str_replace('user_', '', $su); + } + foreach ($userNames as $u) { + $allreadyAdded = false; + foreach ($sUsers as &$su) { + if ($su === $u->getUID()) { + unset($su); + $allreadyAdded = true; + break; + } + } + if (!$allreadyAdded) { + $users[] = array('uid' => $u->getUID(), 'displayName' => $u->getDisplayName(), 'isGroup' => false); + } else { + continue; + } + } + return $users; + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @param string $username + * @return string + */ + public function getDisplayName($username) { + return $this->userMgr->get($username)->getDisplayName(); + } + + /** + * @return \OCP\IGroup[] + */ + private function getGroups() { + if (class_exists('\OC_Group')) { + // Nextcloud <= 11, ownCloud + return \OC_Group::getUserGroups($this->userId); + } + // Nextcloud >= 12 + $groups = $this->groupManager->getUserGroups(\OC::$server->getUserSession()->getUser()); + return array_map(function($group) { + return $group->getGID(); + }, $groups); + } + + /** + * Check if user has access to this form + * + * @param Event $form + * @return bool + */ + private function hasUserAccess($form) { + $access = $form->getAccess(); + $owner = $form->getOwner(); + if ($access === 'public' || $access === 'hidden') { + return true; + } + if ($this->userId === null) { + return false; + } + if ($access === 'registered') { + return true; + } + if ($owner === $this->userId) { + return true; + } + Util::writeLog('forms', $this->userId, Util::ERROR); + $userGroups = $this->getGroups(); + $arr = explode(';', $access); + foreach ($arr as $item) { + if (strpos($item, 'group_') === 0) { + $grp = substr($item, 6); + foreach ($userGroups as $userGroup) { + if ($userGroup === $grp) { + return true; + } + } + } else { + if (strpos($item, 'user_') === 0) { + $usr = substr($item, 5); + if ($usr === $this->userId) { + return true; + } + } + } + } + return false; + } + /** + * Check if user is owner of this form + * + * @param Event $form + * @return bool + */ + + private function userIsOwner($form) { + $owner = $form->getOwner(); + + if ($owner === $this->userId) { + return true; + } + Util::writeLog('forms', $this->userId, Util::ERROR); + return false; + } +} diff --git a/lib/Controller/SystemController.php b/lib/Controller/SystemController.php new file mode 100644 index 0000000..5909079 --- /dev/null +++ b/lib/Controller/SystemController.php @@ -0,0 +1,137 @@ + + * + * @author René Gieling + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Controller; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\DataResponse; + +use OCP\IGroupManager; +use OCP\IUser; +use OCP\IUserManager; +use OCP\IConfig; +use OCP\IRequest; + +class SystemController extends Controller { + + private $systemConfig; + + /** + * PageController constructor. + * @param String $appName + * @param IConfig $systemConfig + * @param IRequest $request + * @param IGroupManager $groupManager + * @param IUserManager $userManager + */ + public function __construct( + $appName, + IGroupManager $groupManager, + IUserManager $userManager, + IConfig $systemConfig, + IRequest $request + ) { + parent::__construct($appName, $request); + $this->systemConfig = $systemConfig; + $this->groupManager = $groupManager; + $this->userManager = $userManager; + } + + /** + * Get the endor name of the installation ('ownCloud' or 'Nextcloud') + * @NoAdminRequired + * @return String + */ + private function getVendor() { + require \OC::$SERVERROOT . '/version.php'; + + /** @var string $vendor */ + return (string) $vendor; + } + + /** + * Get a list of NC users and groups + * @NoAdminRequired + * @return DataResponse + */ + public function getSiteUsersAndGroups($query = '', $getGroups = true, $getUsers = true, $skipGroups = array(), $skipUsers = array()) { + $list = array(); + $data = array(); + if ($getGroups) { + $groups = $this->groupManager->search($query); + foreach ($groups as $group) { + if (!in_array($group->getGID(), $skipGroups)) { + $list[] = [ + 'id' => $group->getGID(), + 'user' => $group->getGID(), + 'type' => 'group', + 'desc' => 'group', + 'icon' => 'icon-group', + 'displayName' => $group->getGID(), + 'avatarURL' => '' + ]; + } + } + } + + if ($getUsers) { + $users = $this->userManager->searchDisplayName($query); + foreach ($users as $user) { + if (!in_array($user->getUID(), $skipUsers)) { + $list[] = [ + 'id' => $user->getUID(), + 'user' => $user->getUID(), + 'type' => 'user', + 'desc' => 'user', + 'icon' => 'icon-user', + 'displayName' => $user->getDisplayName(), + 'avatarURL' => '', + 'lastLogin' => $user->getLastLogin(), + 'cloudId' => $user->getCloudId() + ]; + } + } + } + + $data['siteusers'] = $list; + return new DataResponse($data, Http::STATUS_OK); + } + + /** + * Get some system informations + * @NoAdminRequired + * @return DataResponse + */ + public function getSystem() { + $userId = \OC::$server->getUserSession()->getUser()->getUID(); + $data['system'] = [ + 'versionArray' => \OCP\Util::getVersion(), + 'version' => implode('.', \OCP\Util::getVersion()), + 'vendor' => $this->getVendor(), + 'language' => $this->systemConfig->getUserValue($userId, 'core', 'lang') + ]; + + return new DataResponse($data, Http::STATUS_OK); + } +} diff --git a/lib/Db/Answer.php b/lib/Db/Answer.php new file mode 100644 index 0000000..7f812f8 --- /dev/null +++ b/lib/Db/Answer.php @@ -0,0 +1,63 @@ + + * + * @author Inigo Jiron + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\AppFramework\Db\Entity; + +/** + * @method integer getFormId() + * @method void setFormId(integer $value) + * @method integer getQuestionId() + * @method void setQuestionId(integer $value) + * @method string getText() + * @method void setText(string $value) + * @method integer getTimestamp() + * @method void setTimestamp(integer $value) + */ +class Answer extends Model { + protected $formId; + protected $questionId; + protected $text; + protected $timestamp; + + /** + * Answer constructor. + */ + public function __construct() { + $this->addType('id', 'integer'); + $this->addType('formId', 'integer'); + $this->addType('questionId', 'integer'); + $this->addType('timestamp', 'integer'); + } + + public function read() { + return [ + 'id' => $this->getId(), + 'formId' => $this->getFormId(), + 'questionId' => $this->getQuestionId(), + 'text' => htmlspecialchars_decode($this->getText()), + 'timestamp' => $this->getTimestamp() + ]; + } +} diff --git a/lib/Db/AnswerMapper.php b/lib/Db/AnswerMapper.php new file mode 100644 index 0000000..e7e830f --- /dev/null +++ b/lib/Db/AnswerMapper.php @@ -0,0 +1,96 @@ + + * + * @author Inigo Jiron + * @author Natalie Gilbert + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\AppFramework\Db\QBMapper; + +class AnswerMapper extends QBMapper { + + /** + * TextMapper constructor. + * @param IDBConnection $db + */ + public function __construct(IDBConnection $db) { + parent::__construct($db, 'forms_answers', '\OCA\Forms\Db\Answer'); + } + + // TODO: Change below functions to search by form and question id + + /** + * @param int $formId + * @param int $questionId + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @return Answer[] + */ + + public function findByForm($formId, $questionId) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ) + ->andWhere( + $qb->expr()->eq('question_id', $qb->createNamedParameter($questionId, IQueryBuilder::PARAM_INT)) + ); + + return $this->findEntities($qb); + } + + /** + * @param int $formId + * @param int $questionId + */ + public function deleteByFormAndQuestion($formId, $questionId) { + $qb = $this->db->getQueryBuilder(); + + $qb->delete($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ) + ->andWhere( + $qb->expr()->eq('question_id', $qb->createNamedParameter($questionId, IQueryBuilder::PARAM_INT)) + ); + + $qb->execute(); + } + + /** + * @param int $formId + */ + public function deleteByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->delete($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + $qb->execute(); + } +} diff --git a/lib/Db/Comment.php b/lib/Db/Comment.php new file mode 100644 index 0000000..7ee21bc --- /dev/null +++ b/lib/Db/Comment.php @@ -0,0 +1,62 @@ + + * + * @author Vinzenz Rosenkranz + * @author Kai Schröer + * @author René Gieling + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\AppFramework\Db\Entity; + +/** + * @method string getUserId() + * @method void setUserId(string $value) + * @method string getDt() + * @method void setDt(string $value) + * @method string getComment() + * @method void setComment(string $value) + * @method integer getFormId() + * @method void setFormId(integer $value) + */ +class Comment extends Model { + protected $userId; + protected $dt; + protected $comment; + protected $formId; + + /** + * Comment constructor. + */ + public function __construct() { + $this->addType('formId', 'integer'); + } + + public function read() { + return [ + 'id' => $this->getId(), + 'userId' => $this->getUserId(), + 'date' => $this->getDt() . ' UTC', + 'comment' => $this->getComment() + ]; + + } +} diff --git a/lib/Db/CommentMapper.php b/lib/Db/CommentMapper.php new file mode 100644 index 0000000..f0488c9 --- /dev/null +++ b/lib/Db/CommentMapper.php @@ -0,0 +1,72 @@ + + * + * @author Vinzenz Rosenkranz + * @author René Gieling + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\AppFramework\Db\QBMapper; + +class CommentMapper extends QBMapper { + + /** + * CommentMapper constructor. + * @param IDBConnection $db + */ + public function __construct(IDBConnection $db) { + parent::__construct($db, 'forms_comments', '\OCA\Forms\Db\Comment'); + } + + /** + * @param int $formId + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @return Comment[] + */ + + public function findByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + return $this->findEntities($qb); + } + + /** + * @param int $formId + */ + public function deleteByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->delete($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + $qb->execute(); + } +} diff --git a/lib/Db/Event.php b/lib/Db/Event.php new file mode 100644 index 0000000..66d37aa --- /dev/null +++ b/lib/Db/Event.php @@ -0,0 +1,103 @@ + + * + * @author Vinzenz Rosenkranz + * @author Kai Schröer + * @author René Gieling +* + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\AppFramework\Db\Entity; + +/** + * @method string getTitle() + * @method void setTitle(string $value) + * @method string getDescription() + * @method void setDescription(string $value) + * @method string getOwner() + * @method void setOwner(string $value) + * @method string getCreated() + * @method void setCreated(string $value) + * @method string getAccess() + * @method void setAccess(string $value) + * @method string getExpire() + * @method void setExpire(string $value) + * @method string getHash() + * @method void setHash(string $value) + * @method integer getIsAnonymous() + * @method void setIsAnonymous(integer $value) + * @method integer getFullAnonymous() + * @method void setFullAnonymous(integer $value) + * @method integer getAllowMaybe() + * @method void setAllowMaybe(integer $value) + */ +class Event extends Model { + protected $title; + protected $description; + protected $owner; + protected $created; + protected $access; + protected $expire; + protected $hash; + protected $isAnonymous; + protected $fullAnonymous; + protected $allowMaybe; + + /** + * Event constructor. + */ + public function __construct() { + $this->addType('isAnonymous', 'integer'); + $this->addType('fullAnonymous', 'integer'); + $this->addType('allowMaybe', 'integer'); + } + + public function read() { + $accessType = $this->getAccess(); + if (!strpos('|public|hidden|registered', $accessType)) { + $accessType = 'select'; + } + if ($this->getExpire() === null) { + $expired = false; + $expiration = false; + } else { + $expired = time() > strtotime($this->getExpire()); + $expiration = true; + } + + return [ + 'id' => $this->getId(), + 'hash' => $this->getHash(), + 'title' => $this->getTitle(), + 'description' => $this->getDescription(), + 'owner' => $this->getOwner(), + 'ownerDisplayName' => \OC_User::getDisplayName($this->getOwner()), + 'created' => $this->getCreated(), + 'access' => $accessType, + 'expiration' => $expiration, + 'expired' => $expired, + 'expirationDate' => $this->getExpire(), + 'isAnonymous' => $this->getIsAnonymous(), + 'fullAnonymous' => $this->getFullAnonymous(), + 'allowMaybe' => $this->getAllowMaybe() + ]; + } +} diff --git a/lib/Db/EventMapper.php b/lib/Db/EventMapper.php new file mode 100644 index 0000000..9cf76ea --- /dev/null +++ b/lib/Db/EventMapper.php @@ -0,0 +1,90 @@ + + * + * @author Vinzenz Rosenkranz + * @author René Gieling +* + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\AppFramework\Db\QBMapper; + +class EventMapper extends QBMapper { + + /** + * EventMapper constructor. + * @param IDBConnection $db + */ + public function __construct(IDBConnection $db) { + parent::__construct($db, 'forms_events', '\OCA\Forms\Db\Event'); + } + + /** + * @param Integer $id + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result + * @return Event + */ + public function find($id) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) + ); + + return $this->findEntity($qb); + } + + /** + * @param String $hash + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result + * @return Event + */ + public function findByHash($hash) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('hash', $qb->createNamedParameter($hash, IQueryBuilder::PARAM_STR)) + ); + + return $this->findEntity($qb); + } + + /** + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @return Event[] + */ + public function findAll() { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()); + + return $this->findEntities($qb); + } + +} diff --git a/lib/Db/Model.php b/lib/Db/Model.php new file mode 100644 index 0000000..e392310 --- /dev/null +++ b/lib/Db/Model.php @@ -0,0 +1,39 @@ + + * + * @author Kai Schröer + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\AppFramework\Db\Entity; + +abstract class Model extends Entity { + /** + * FactoryMuffin checks for the existence of setters with method_exists($obj, $attr) but that returns false. + * By overwriting the __set() magic method we can trigger the changed flag on $obj->attr assignment. + * + * @param $name + * @param $value + */ + public function __set($name, $value) { + $this->setter($name, [$value]); + } +} diff --git a/lib/Db/Notification.php b/lib/Db/Notification.php new file mode 100644 index 0000000..5571ffb --- /dev/null +++ b/lib/Db/Notification.php @@ -0,0 +1,45 @@ + + * + * @author Vinzenz Rosenkranz + * @author Kai Schröer + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\AppFramework\Db\Entity; + +/** + * @method string getUserId() + * @method void setUserId(string $value) + * @method integer getFormId() + * @method void setFormId(integer $value) + */ +class Notification extends Model { + protected $userId; + protected $formId; + + /** + * Notification constructor. + */ + public function __construct() { + $this->addType('formId', 'integer'); + } +} diff --git a/lib/Db/NotificationMapper.php b/lib/Db/NotificationMapper.php new file mode 100644 index 0000000..c3a2837 --- /dev/null +++ b/lib/Db/NotificationMapper.php @@ -0,0 +1,93 @@ + + * + * @author Vinzenz Rosenkranz + * @author René Gieling +* + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\AppFramework\Db\QBMapper; + +class NotificationMapper extends QBMapper { + + public function __construct(IDBConnection $db) { + parent::__construct($db, 'forms_notif', '\OCA\Forms\Db\Notification'); + } + + /** + * @param int $formId + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result + * @return Notification[] + */ + + public function findAllByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + return $this->findEntities($qb); + } + + + /** + * @param int $formId + * @param string $userId + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException if more than one result + * @return Notification + */ + public function findByUserAndForm($formId, $userId) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ) + ->andWhere( + $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) + ); + + return $this->findEntities($qb); + } + + /** + * @param int $formId + */ + public function deleteByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->delete($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + $qb->execute(); + } + +} diff --git a/lib/Db/Option.php b/lib/Db/Option.php new file mode 100644 index 0000000..9d7efef --- /dev/null +++ b/lib/Db/Option.php @@ -0,0 +1,58 @@ + + * + * @author Vinzenz Rosenkranz + * @author Kai Schröer + * @author René Gieling +* + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\AppFramework\Db\Entity; + +/** + * @method integer getFormId() + * @method void setFormId(integer $value) + * @method string getFormOptionText() + * @method void setFormOptionText(string $value) + * @method integer getTimestamp() + * @method void setTimestamp(integer $value) + */ +class Option extends Model { + protected $formId; + protected $formOptionText; + protected $timestamp; + + /** + * Option constructor. + */ + public function __construct() { + $this->addType('formId', 'integer'); + $this->addType('timestamp', 'integer'); + } + + public function read() { + return [ + 'id' => $this->getId(), + 'text' => htmlspecialchars_decode($this->getFormOptionText()), + 'timestamp' => $this->getTimestamp() + ]; + } +} diff --git a/lib/Db/OptionMapper.php b/lib/Db/OptionMapper.php new file mode 100644 index 0000000..2e04afa --- /dev/null +++ b/lib/Db/OptionMapper.php @@ -0,0 +1,72 @@ + + * + * @author Vinzenz Rosenkranz + * @author René Gieling +* + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\AppFramework\Db\QBMapper; + +class OptionMapper extends QBMapper { + + /** + * TextMapper constructor. + * @param IDBConnection $db + */ + public function __construct(IDBConnection $db) { + parent::__construct($db, 'forms_options', '\OCA\Forms\Db\Option'); + } + + /** + * @param int $formId + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @return Option[] + */ + + public function findByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + return $this->findEntities($qb); + } + + /** + * @param int $formId + */ + public function deleteByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->delete($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + $qb->execute(); + } +} diff --git a/lib/Db/Question.php b/lib/Db/Question.php new file mode 100644 index 0000000..8dc9a9a --- /dev/null +++ b/lib/Db/Question.php @@ -0,0 +1,66 @@ + + * + * @author Inigo Jiron + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\AppFramework\Db\Entity; + +/** + * @method integer getFormId() + * @method void setFormId(integer $value) + * @method string getFormQuestionType() + * @method void setFormQuestionType(string $value) + * @method string getFormQuestionText() + * @method void setFormQuestionText(string $value) + * @method integer getTimestamp() + * @method void setTimestamp(integer $value) + */ +class Question extends Model { + protected $formId; + protected $formQuestionType; + protected $formQuestionText; + protected $timestamp; + + /** + * Question constructor. + */ + public function __construct() { + $this->addType('formId', 'integer'); + $this->addType('timestamp', 'integer'); + } + + public function read() { + return [ + 'id' => $this->getId(), + 'formId' => $this->getFormId(), + 'type' => htmlspecialchars_decode($this->getFormQuestionType()), + 'text' => htmlspecialchars_decode($this->getFormQuestionText()), + 'timestamp' => $this->getTimestamp() + ]; + } + + + + + +} diff --git a/lib/Db/QuestionMapper.php b/lib/Db/QuestionMapper.php new file mode 100644 index 0000000..6ea92b8 --- /dev/null +++ b/lib/Db/QuestionMapper.php @@ -0,0 +1,73 @@ + + * + * @author Inigo Jiron + * @author Natalie Gilbert + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\AppFramework\Db\QBMapper; + +class QuestionMapper extends QBMapper { + + /** + * TextMapper constructor. + * @param IDBConnection $db + */ + public function __construct(IDBConnection $db) { + parent::__construct($db, 'forms_questions', '\OCA\Forms\Db\Question'); + } + + /** + * @param int $formId + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @return Option[] + */ + + public function findByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + return $this->findEntities($qb); + } + + /** + * @param int $formId + */ + public function deleteByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->delete($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + $qb->execute(); + } + +} diff --git a/lib/Db/Vote.php b/lib/Db/Vote.php new file mode 100644 index 0000000..53a7adc --- /dev/null +++ b/lib/Db/Vote.php @@ -0,0 +1,67 @@ + + * + * @author Vinzenz Rosenkranz + * @author Kai Schröer + * @author René Gieling +* + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\AppFramework\Db\Entity; + +/** + * @method integer getFormId() + * @method void setFormId(integer $value) + * @method string getUserId() + * @method void setUserId(string $value) + * @method integer getVoteOptionId() + * @method void setVoteOptionId(integer $value) + * @method string getVoteOptionText() + * @method void setVoteOptionText(string $value) + * @method string getVoteAnswer() + * @method void setVoteAnswer(string $value) + */ +class Vote extends Model { + protected $formId; + protected $userId; + protected $voteOptionId; + protected $voteOptionText; + protected $voteAnswer; + + /** + * Options constructor. + */ + public function __construct() { + $this->addType('formId', 'integer'); + $this->addType('voteOptionId', 'integer'); + } + + public function read() { + return [ + 'id' => $this->getId(), + 'userId' => $this->getUserId(), + 'voteOptionId' => $this->getVoteOptionId(), + 'voteOptionText' => htmlspecialchars_decode($this->getVoteOptionText()), + 'voteAnswer' => $this->getVoteAnswer() + ]; + } + +} diff --git a/lib/Db/VoteMapper.php b/lib/Db/VoteMapper.php new file mode 100644 index 0000000..4ad723a --- /dev/null +++ b/lib/Db/VoteMapper.php @@ -0,0 +1,107 @@ + + * + * @author Vinzenz Rosenkranz + * @author René Gieling +* + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Db; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IDBConnection; +use OCP\AppFramework\Db\QBMapper; + +class VoteMapper extends QBMapper { + + /** + * VoteMapper constructor. + * @param IDBConnection $db + */ + public function __construct(IDBConnection $db) { + parent::__construct($db, 'forms_votes', '\OCA\Forms\Db\Vote'); + } + + /** + * @param int $formId + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @return Comment[] + */ + + public function findByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + return $this->findEntities($qb); + } + + /** + * @param int $formId + * @throws \OCP\AppFramework\Db\DoesNotExistException if not found + * @return Array + */ + public function findParticipantsByForm($formId, $limit = null, $offset = null) { + $qb = $this->db->getQueryBuilder(); + + $qb->select('user_id') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + return $this->findEntities($qb); + } + + /** + * @param int $formId + * @param string $userId + */ + public function deleteByFormAndUser($formId, $userId) { + $qb = $this->db->getQueryBuilder(); + + $qb->delete($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ) + ->andWhere( + $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) + ); + + $qb->execute(); + } + + /** + * @param int $formId + */ + public function deleteByForm($formId) { + $qb = $this->db->getQueryBuilder(); + + $qb->delete($this->getTableName()) + ->where( + $qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT)) + ); + + $qb->execute(); + } +} diff --git a/lib/Migration/Version0009Date20190000000005.php b/lib/Migration/Version0009Date20190000000005.php new file mode 100644 index 0000000..34890fc --- /dev/null +++ b/lib/Migration/Version0009Date20190000000005.php @@ -0,0 +1,206 @@ + + * + * @author René Gieling + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Forms\Migration; + +use Doctrine\DBAL\Exception\TableNotFoundException; +use Doctrine\DBAL\Platforms\PostgreSqlPlatform; +use Doctrine\DBAL\Types\Type; +use OCP\DB\ISchemaWrapper; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\Migration\SimpleMigrationStep; +use OCP\Migration\IOutput; + +/** + * Installation class for the forms app. + * Initial db creation + */ +class Version0009Date20190000000005 extends SimpleMigrationStep { + + /** @var IDBConnection */ + protected $connection; + + /** @var IConfig */ + protected $config; + + /** + * @param IDBConnection $connection + * @param IConfig $config + */ + public function __construct(IDBConnection $connection, IConfig $config) { + $this->connection = $connection; + $this->config = $config; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + * @since 13.0.0 + */ + public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if (!$schema->hasTable('forms_events')) { + $table = $schema->createTable('forms_events'); + $table->addColumn('id', Type::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('hash', Type::STRING, [ + 'notnull' => false, + 'length' => 64, + ]); + $table->addColumn('title', Type::STRING, [ + 'notnull' => true, + 'length' => 128, + ]); + $table->addColumn('description', Type::STRING, [ + 'notnull' => true, + 'length' => 1024, + ]); + $table->addColumn('owner', Type::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('created', Type::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('access', Type::STRING, [ + 'notnull' => false, + 'length' => 1024, + ]); + $table->addColumn('expire', Type::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('is_anonymous', Type::INTEGER, [ + 'notnull' => false, + 'default' => 0, + ]); + $table->addColumn('full_anonymous', Type::INTEGER, [ + 'notnull' => false, + 'default' => 0, + ]); + $table->setPrimaryKey(['id']); + } else { + } + + if (!$schema->hasTable('forms_questions')) { + $table = $schema->createTable('forms_questions'); + $table->addColumn('id', Type::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('form_id', Type::INTEGER, [ + 'notnull' => false, + ]); + $table->addColumn('form_question_type', Type::STRING, [ + 'notnull' => false, // maybe true? + 'length' => 256, + ]); + $table->addColumn('form_question_text', Type::STRING, [ + 'notnull' => false, // maybe true? + 'length' => 4096, + ]); + $table->addColumn('timestamp', Type::INTEGER, [ + 'notnull' => false, + 'default' => 0 + ]); + $table->setPrimaryKey(['id']); + } + + if (!$schema->hasTable('forms_answers')) { + $table = $schema->createTable('forms_answers'); + $table->addColumn('id', Type::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('form_id', Type::INTEGER, [ + 'notnull' => false, + ]); + $table->addColumn('question_id', Type::INTEGER, [ + 'notnull' => false, + ]); + $table->addColumn('text', Type::STRING, [ + 'notnull' => false, // maybe true? + 'length' => 4096, + ]); + $table->addColumn('timestamp', Type::INTEGER, [ + 'notnull' => false, + 'default' => 0 + ]); + $table->setPrimaryKey(['id']); + } + + if (!$schema->hasTable('forms_votes')) { + $table = $schema->createTable('forms_votes'); + $table->addColumn('id', Type::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('form_id', Type::INTEGER, [ + 'notnull' => false, + ]); + $table->addColumn('user_id', Type::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('vote_option_id', Type::INTEGER, [ + 'notnull' => true, + 'default' => 0, + 'length' => 64, + ]); + $table->addColumn('vote_option_text', Type::STRING, [ + 'notnull' => false, // maybe true? + 'length' => 4096, + ]); + $table->addColumn('vote_answer', Type::STRING, [ + 'notnull' => false, + 'length' => 4096, + ]); + $table->setPrimaryKey(['id']); + } + + if (!$schema->hasTable('forms_notif')) { + $table = $schema->createTable('forms_notif'); + $table->addColumn('id', Type::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('form_id', Type::INTEGER, [ + 'notnull' => false, + ]); + $table->addColumn('user_id', Type::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->setPrimaryKey(['id']); + } + + return $schema; + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b0c6d72 --- /dev/null +++ b/package.json @@ -0,0 +1,128 @@ +{ + "name": "forms", + "description": "Forms app for nextcloud", + "version": "1.0.3", + "authors": [ + { + "name": "Vinzenz Rosenkranz", + "email": "vinzenz.rosenkranz@gmail.com", + "role": "Polls App Developer" + }, + { + "name": "Rene Gieling", + "email": "github@dartcafe.de", + "role": "Polls App Developer" + }, + { + "name": "Natalie Gilbert", + "role": "Forms Team Lead/Back End Developer" + }, + { + "name": "Inigo Jiron", + "role": "Back End Developer/Database Specialist" + }, + { + "name": "Affan Hussain", + "role": "Forms Technical Lead" + }, + { + "name": "Nick Gallo", + "role": "Front End Developer" + }, + { + "name": "Ajfar Huq", + "role": "Front End Developer" + }, + { + "name": "Tim Sattizahn", + "role": "Forms QA Lead" + }, + { + "name": "Stephan Link", + "role": "Quality Assurance" + }, + { + "name": "Kameron Sheppard", + "role": "Quality Assurance" + } + + ], + "repository": { + "type": "git", + "url": "git+https://github.com/nextcloud/forms.git" + }, + "bugs": { + "url": "https://github.com/nextcloud/forms/issues" + }, + "homepage": "https://github.com/nextcloud/forms#readme", + "license": "AGPL-3.0", + "private": true, + "main": "src/js/main.js", + "scripts": { + "dev": "webpack --config webpack.dev.js", + "watch": "webpack --progress --watch --config webpack.dev.js", + "build": "webpack --progress --hide-modules --config webpack.prod.js", + "lint": "eslint --ext .js,.vue src", + "lint:fix": "eslint --ext .js,.vue src --fix", + "test": "jest", + "test:coverage": "jest --coverage" + }, + "dependencies": { + "acorn": "^6.1.1", + "bootstrap": "^3.3.7", + "json2csv" : "4.5.1", + "moment": "^2.23.0", + "nextcloud-axios": "^0.1.3", + "nextcloud-vue": "^0.9.0", + "stylelint-scss": "^3.5.4", + "v-click-outside": "^2.0.2", + "v-tooltip": "^2.0.0-rc.33", + "vue": "^2.6.8", + "vue-click-outside": "^1.0.7", + "vue-clipboard2": "^0.3.0", + "vue-router": "^3.0.2", + "survey-vue": "^1.0.56", + "surveyjs-widgets": "^1.0.56" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 11" + ], + "engines": { + "node": ">=10.0.0" + }, + "devDependencies": { + "@babel/core": "^7.3.4", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/preset-env": "^7.3.4", + "babel-eslint": "^10.0.1", + "babel-loader": "^8.0.4", + "css-loader": "^2.1.0", + "eslint": "^5.14.1", + "eslint-config-standard": "^12.0.0", + "eslint-friendly-formatter": "^4.0.1", + "eslint-loader": "^2.1.2", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-node": "^8.0.0", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0", + "eslint-plugin-vue": "^5.2.2", + "extract-text-webpack-plugin": "^3.0.2", + "file-loader": "^3.0.1", + "mini-css-extract-plugin": "^0.5.0", + "node-sass": "^4.11.0", + "prettier-eslint": "^8.8.2", + "raw-loader": "^1.0.0", + "sass-loader": "^7.1.0", + "stylelint": "^9.9.0", + "stylelint-config-recommended-scss": "^3.2.0", + "stylelint-webpack-plugin": "^0.10.5", + "vue-loader": "^15.7.0", + "vue-style-loader": "^4.1.1", + "vue-template-compiler": "^2.6.8", + "webpack": "^4.29.6", + "webpack-cli": "^3.2.3", + "webpack-merge": "^4.1.5" + } +} diff --git a/phpunit.integration.xml b/phpunit.integration.xml new file mode 100644 index 0000000..eae19f1 --- /dev/null +++ b/phpunit.integration.xml @@ -0,0 +1,7 @@ + + + + ./tests/Integration + + + diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..ac36954 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,12 @@ + + + + lib + + + + + ./tests/Unit + + + diff --git a/screenshots/edit-form.png b/screenshots/edit-form.png new file mode 100644 index 0000000000000000000000000000000000000000..3764db7a2bc0eab9940c370b3eb093fdd5026a92 GIT binary patch literal 56681 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 literal 0 HcmV?d00001 diff --git a/screenshots/overview.png b/screenshots/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..9c028c761b208850829b9aba03061ea54b76e660 GIT binary patch literal 71261 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�#`!X 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 literal 0 HcmV?d00001 diff --git a/screenshots/vote-mobile-landscape.png b/screenshots/vote-mobile-landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..eb833e1968bf894ed79f9cfb5585ae00df20bc9f GIT binary patch literal 38458 zcmce-byQqS@Gc6O;1=8=xCM6!B)GeT;4Z;+aCavpI0Og|L4pQ%4HDc3cNpB^ZgS3f zYyIB+^WFQ_8rJOH)7`tex~uB@sx}eIic)CEM945OFlaK;;;Jw(FCZ{5u&0RdKuZa| z*Gm|f*Dx~T@72K>2Q9V^*cMrrf}@I=nVACiYPAM+dqQ4}`4~#O2Vqm{Z)*iCgp0EH z1%E8%fkQK=;wjAa$4o;{Xv?JJaMG1WU$@pDW)o(ecOpNm6uao8OavZI`8d|s?mdcxsn{<3G+Mcf3+Af&S_?2-a zRGvRys5V<*|GlowNV6B!+?H*&4GaKamA}RXuQ?s&@%|D{u7fAEx!a7r5eAF1MO~(nsb#e;D0 zS$9#Cl~_t{GL=`7*mR};CIw%NHC=CRIfyqmoYFtm9~L_QB)>W8{&wD1u{v^}m-O2` zUhpgqIx#(Z)=K`*#!s&802(|oHT%@h_2k<`sz-O{u#t%YJ(uiodD>PK)U>tfJg(ze zt=CDfbo+#z#m&9C8)<&;CWj6D(mjFu8{D!BLd|FkuGVADIee=cJqNwU)bR#?I-My%O2!j7-T(LS_iWYQvHN}KQ~`q&XD$@e5JY`C0%t% zBDZyV9(I5AaPkSM?JDA->$*Nq%ZQJ?BO()y z{zAuZ#EZD7^3m@2RR*?!#Liu9_Ew7?pqI(haS=_|5cyO4`Z<+_*-#DKm=7A`(TS0g zfM|qLB$>0#g|KbxJP-`Qy)JW~eTsW)XY6P%9jLjpVBJR@W!1T0jR2X{y54p02#KQ9 zO<&26o~3LXn~lQqY?J$u!0&{uoKJ|;KkKPy?u@#mb*X&Dy)YI;eg$OL`Nq;+Vyr() zYPG)&Xb?^Jd{AlZF_H!Xqx}jeoao>ta zh=Hx0cyTe|-LivWSS@VZyn38PJ%Xx=8<){kFMN_Z&uS`TM>Mh9WZw5`%z{15W~<|F z=K}cq`Pt~t_JEpL;sTdO-`+vZxsi|JF#NVsYS*u3}kqZzUqybRoK4#}6KuOCiS zwE(%r-`qXSE3Ip4V4A%3LRtCgop=>=2%Hsq5f9Q@`~vFQt)=dS$NVBczdL7}1HCl( z=KBrT=2>^_O}dK0e8{hxEHlW^y0*E06m{_DK9YyH3wbJl`XN9(VWb(NF1s zm%xlvY%{FtI=#hAI;_t7o=euNmF8HPgVt7T-Ch!DF4WY5>1hJuIeZ(b@D<+1uNE#{ zziz!=hp5Ue%5Wrm?oW6!Mr#bd!KaSBLE8J0Q#QBO_}{7KJJgfJ6Wka8-@$~4O*ZN;5=(pUw{nK0Pkg>M z_v56wo@VLfR%U3bX68v|NQ1~BGPj7PjG5e1`67qz_^@AG#J$1fzIT-LsJV8#LLM}x zL4qXSmTn|?&ogaP(zU0cK))~-oms&H*^NPCJFxEM)JcQhM=9{F?R3%(86Ehx;Odl1 zsaRQwn|wmxX|d@$uIJ8i`9!Lz!DUif3rEbXa9vwP*v2uhvH(T*RblvEd+*hQc|T>m z8Cck~Rw^Uenn&37)BjjoI3dQj@bimPz+bHUChL02Q|f<_$sEYXB7~ZrAKc0H4GT}O zht8v@U7LA5DxS;tFBXi)n6ktG{K6ZcUHGA)L4JUYqQET*+ zUJicjk-YbGra~1Yh7y~+^{pyK8YRG3uf1IdmyZN!;407;+jKe?NRrsz!L*eLMJrU) zKtA-z+&gOVAwRn7C^3)t=KoX`z%*mORBB7QziY}~QuLBqemHQGUHS6nCic{<%O5{C z=kuSZn>~l3-yvV4vIoHr)bV}HWI^QIG|4}eK#D3jwdd!+0{nrXAT#j`N1-7jyI;%8 zxAMU!gN&%F55LdR?V3@Tyaj&ZF%N9lhiT)LkKVSt7=F6+o9*arAnCNHP@4`t@AcxP zXVRf%`+SKQ_)4h@+_K7-wV)qHIwfWFLpai+p0sywP|{{)B~YYwHu!J~ovUpkC=!1~ z_ns@sMbk;qo5o6W#$8GB%~e-uLhxsr9@E6rlea^3GJc~H$1R9wP~f^6ewqJ7LtiOy z)3lw*v+M4cI$bI}+Vx7SH-#~(ukyC6^+UdSyWcEZAYh<~4A;c(faOg(B|ctr&wX;> z_%e4|{=8}W2Tc)xiLJG@3Pc0ny$5|!KD=kst>o!~>}?L@<+1MLzRjSCi3z^9JDn)3 zWPwIuugdjX2GIA3?Yne+a6Z*f=h;Y6Wi9v;w5_OyMJ5wDn7O>DwdaPor+=y%{}cUS zPlhJ(JG-8wN3Mc<9sf(r_0lEPtj}J9rI`N`bH8g>Nw`mDTf5oR8S--+ z$=lZ!OOM>e#M}*CO_;o{#T(HNTm`3K--fWx^!r1bTzJ+DPjk=|ZVdQWF6LAi$@L~} z$LuF29ej&6RlWBte@KoUT{u*rHsWcUlxM~)p2q_}Sd%|~9vw&->hOO8!sx7{z@?pz ztP;QE+48dZ`j-*v;o})!MYVhkzI$vaWeS#CA|J8;fRHL`*jRro;;_07Vp&u z6h(feu9|xEtK*eE6k?{z-_0o5aj|P3798*Q2cO;z^mff&C&m-E0^p==)~4@hPx9Ve zj*}>^B`zrD7}Nj{h@}eWq!&BM-~iK(h*G*0|F4mT^@r3F`HeC4r2! zi2mE{o)sL2b3s0RCwN`I`!rKVS(hV2idcL!J_(hi=C8kCpT24rEmv=fDHU11t6>2ZIf)X+W;sqn`e5BFTy_3ErX7EJ}UXnVO@!_=RhZQg} z5IWwx0kuw2K~7r3Frkb474GQ9EAI}vaT#a?6WFs8IU#F(9^)dWYxH6{|B74FEvcax zqRVmJ)HJ%@$E;-p#5^E`i?RlLwOVjYK3X*Oo)N)5HQwkAkFtLIJ{kTHHb1s_!hUr7 zF!prBf1cfjI@6CURQt$%P+M!*&mDk~Np3VW6bSp&V?SiLs1_ziH3K!*qsm%RjS>L@ z!6$oCiGf~E02FqTyYb}JRiW(<$6QO8QR(}f5ol^n<7*-h)(=O02KibDKk-9UG0(r{ z^e2^p)V^TY78ag(}~AWt~M`XH>sM4@B1Hdmepz zZ}Nhcu#+>x+WV$fe&qNqW4lO_B#6h7?EZ^Cibl>MREt4V7L$+}eVV;v|I( zS~1%g7D5ed?0Q$fq92slbuw{>LGMItI#GH_uSYM4q5G!~*XsrNITLOE+wQy_mFsMp zkEbG)&TXXj-1R0CkLdSdjd1B#b&wsw<2;)g%;qIWWb$+G@NM^Il@v2X{8DtV;J$yK zB|kAVk%vOSMyS?hnVyyhax#3SO8nPoi@LG2#0D(pT3v85(Y2*#7*3+V=NiBHW})a= zKP%;Yb;lib5B6QE6aKXehqDcLuXx&w`{brBa)=i~>j8){-D&AM`PXtr!;h|DE({|h3Ec4do5?9OYghQhMKlYeji@_AaCCFFp#Et&VV zL)hfENWlevLR|&pzHMe+odov8X4~6zp9x~D&S*$M1I}KQ$g_4dn2^t}JRu%mcn6Ev z`JpY5XZ7qOpc^|+xsh0UlEWrT^+ylNYc)AiG%u{*w z_5@G2lRt~zI=#4C5eUUlH0Z3z^223fI=GJAUGG^a{DO|4&Bb!gd12w`Ksq zo4>DrPv;R_Z*W|;tiJ0TfIXOH-3ZqqR$5K|5_U2z=)(stBHU~ut}=3`B3jv%P&y79 zdvxR7i_7jBow4hjFORwY`RQe^-qf{+2Wi&4a$F0VU#CbiFJvL=%N?nDtKgZ=*2c17 z>YENJ$iG~DJ^wgGxcBpya)6DZb{%PE2so4Z1SOwrGufSIkadnMv6`IWaq7=b1iB0F zbS;o)h&cn8WZVH&>f=gBXt~#k%G0aC!TN8jJC4oQw+no$LUFyZ&O6r=ud+C`*8S!^ zJx{J^R!9jam2^auZY2a%7xlp1=a_#}Fhza3PeYfS^go0cn;9Q5c{alXY;fKx?JT4xJwF)Xf=W}{X zE$n;BKRN+4yCSPaVqM{Ha;sMU0z-rR9bHLmVu=f`+r8KnLZiJ`s~`*E0}x+C|DQyX z2ElFYuF3u9Dv*d=NBGk}iKjPq#U0>5_rhmJfLnHzdF=L_JsZ+m;X#8O*I%w70LZb; zMj$j>ovde+@!(oJg!DPz^_=&5y4qU57O8u*Iw{SdR&5oG0tgbbBQ90iGiZyH75$rV zlhahC5x43Dyc9iS!09p!fKtD&O&u2^J*SF__y)Z|fQ>uJZf$CFtv(+Qn!ILSe}G8l zt1s)yVFN@(LIvxeP8_m5-V?z9XI4py{%4}#KkO_2j>`EvDo~4dE1edIk&(H%fAfGE zV}qeL1%IDKpHS^)Micx>6pVetIGWR?shfvYO84g4g-zvxg%nP;nphZd_}#<(wytqrM24hub=y4zAdDj7#623 zOmIm5c7uIQaJ*HuRU==Yk=B=H)t&bZmhSJ@}12{I9u?V-X=qQ97HO6edPV7 zf?5i()1hBRz5pGzU7wJVh#a0}jW<)gySVHgKXBxQG2C(!QABrN{k{-&2Xo|wPD_er z-?p5!LdyKgvK{GJy07dCGiiyOV}&zDCdbDr%|8j0G)0hXhwRQ*Kx}82!?gp2-?{WY zMP5IKVUVwlWC}vTLMa&;-Lta zGL!A8e}&W$oi530MAUvbY9M;jN~bn2nO%<|oQ+{(V&c%W1WXq^v)?m0iQ_FyUQk#_ zvw3#I#?1{^F%tz$-LPaA9TU^BeYQHDCv|f)@;&DtwP+WV?dp8ag*Ax!F$cZ9I(Esi zwqVclX5z+vLfK|zV`mR2E@sgFnOWAX&q_;6>u@;F4TwnRmzny43-VX5L-ARxo_|WL zt8Wh^)m!ectXcKDQ2p=f_bLTq4r}7-ENohP($dm8udn%fdwbbLM6!>MVo?5Do9Q|o z@dO7XhbxJNdA<-9LbUAr_QF=k@A9UM2>Q)#xf!W`A!crFPFydZ_di`z6c=Qdwa!NV z7>~)dyt1zGgM*oYUXDyUwb!7to#`rXTJ0~tVL)&P>UR0XiXf z;8cj8EzWJLX8AYX?a_d@C0N%|t;6O%M$=75zaP*1!(0N3FV%Ux(nem->hwF21LA(P z*zr4^_iPDO^ef3f6PWz6lx2Nt+LRHxIsHt(tR20UsZ?Or3P`S=S@F>YL^g~>PE6dz zyW;)%m<6NiJ1QScbX=T?ogK@{@7JaS9nN8|M8i{DO23)P&HV_(Qd(bMZ}7QuYi$zh z1~>!?3QB|9;m6kW_x*`M+vvbCwp6VEWs%Zw!a6%SVRdzN5s;DfZfuzL7SqrC&|^xW zzXnFZKrTGl-@eT}Hh)#U0cjLNq!5q3V{+F=y-tnbtlp*U@Wa5sSie45=kvYi3k?gS zNtTho#>T!LGI&fpW(CQa{%a{d!M;s*uY-xN$09S(L z!W0ldPfw44fS|p26&29*PD@McBc>y8SgWe4yxn>ICDg7bqJ-jYH>A7KTH+b5_YSrmb&N6e~emY-4Ol} zT3d&20Mj7&0i$#(vTl^a>iA7)T6xhC(Wog^RQQI(?Jf~3(xFmHlMjpS*7RK1NU>770pH<9$-%?Aox*Bn>m`IYEEeKc{8SkP& z;{?4ziucGB+-OL{7TD16b*HJjySs^@Aq)rv!W@UL_r(D>ugkfT3^#;UOn>{+ajZlc zwUY~h<5#~|`@_a@)ci2f{7~A&mgR7vjtb_H?(p}UhA+K%mBH_tA7#=`)z%pyhUudS z%0mD5san;fXsiznTnx@a92{6PhEZs@{r%D(;TQKW)^0EMZ;sXu2%x6JSH=VmFwh%s z!e(>zdH=8&6Pv+4uoidOMSx4VKde3fc+~AX#vxdhTiIaP7)7ndebK%gYl_4CUwF(G zKjb9)3gLAeUdI!utq2CQB*133`NH?@m5S|hcDjq;*uAFwV=cgj3|Ymu7;}0Jtq0jQ zxM-CqyUGyRy1I^z14GRKLk7R8L^*x3 z#j@)g2W%Wg_Qr7?;#z|XK2Fl>k$LnC#JZV}#N*5Am$q&-Ok7{5_dH!1s0ESQ-$*v0 z=Lm4|1PG^)iaK}4j0y>VD#eS{k_VT%d4jCNCBf9H%3ugB7m!CX}Laa@QmDr{oiA+soK$`ht< zqya+IhB9m*Drc#~!l$!w`V(|#Q=407`-)}e^}Ka?<;Qe(u-4?|JP+zGT>=|ydB>rA z4{B1_r(FEnfV#*ha^F3+I5}p`5BsB#AK>(#29TeeeGcu`5)VlDy4gOMWO>S7nVr`( zwe~7Q@VWb|k3T}EK1N|<@eUfCPj_0EODudt`H{my5_uG~$K%a|AvuioDU6#}?+~1jY4z?oERQk(Gm(2{K-MR~7z_ z3YOzbB2H+fv}oUEt!)P$-)DJ09pkRiMTE)VwwfZ|tq&1UBzfh7_a%_hyO5qkP%zwl z9~Q}(aCRF+_v&`%7KsFrz}!f1?V4q z3ky)16dzeiG;Ca1Af>nvoEV)&dx#mwvn^U|*I>L_RfTKp@lf!|l34n|5b@q_ZmN_ehCKprf-J4sfXo zC5Vh|a$0N$YZKhJ;ZH8jjiAexjR|D8LQigyCI`3tmDYzTn98P@9U`5o#O|>A$wkI^ z5NEEr$Rs!Yo8Z01RShsKUiXRqlylgmrc_utpXvjg z8Dd}H7p=0XqGJac`Nz*ijEP0agQ=`9b{QF3!?&aKCnYD(@fbrtU}R!`!HM=6ADJ{n zu`VqS!1+2mS~xm6l$0RfY~zBP^h2d_?EHud0ML#2z546Of_Xl1` zi*?PTZ1C0AkpGz(WfbhbH7gM;$d}##X@wGe1keL*)Ik0vppMW0Y4raSC-*tlpY^hI zr^j}PS8m$>%ym8r4(&QuI7@+KTs?LTeL3I~ErNfO#qD=|k?Eh}uqnr%hzC zTWO6sIXP)2KK|C**XMY5dFbsf7fxf=e!SQi1mKpfCc@x1{C|}*zzuK&LWPv!uK=Rf zW@}t||1}Br3M`Z%Bq>ew&vc&xaaB%JBRROaHR5{^fS>$v#bJ_rTxb|+%NVm@( zMW|oUi$8Apk5onVo}asnP_1_KU!A)cX+GxuJ1k0;4J#`u0}6=IdFW>1=Ek$q#QZPl zN7QyXT4{@`s$vI#Evqb-x3x7gusi}{Vy1?SW6OV0zVrwHYk7X?HHAh*M2w-VaU=lb zrn~zk(4wiF55NBYUjpegl5F4`0Zax6DX*y5xqo47ZOwQTtdKn#2B;A@L(i>%3^q2X zf9Zfb9nF7_SO#B1DF8L1#q|XN90?#uMlLSus(`MZ$yDEZ$KgUfitv;;`ak^Pm8jFd zoD7kI|9_{l(&+zkDhlebF@Nl568S1o?B8c04p98dmx4E5{U4bw%CJ3?UX4*@OWw6b zaR=Aa#k}o(>U!O~ysCE6hhrDVukVZB1i9cdYl?s&^h}{2^8*}T?-P$Qj&RT<6_dXs zWUqV=7a~f*T#G3-M{p%Cy+v?7ne#zAT0n_~2OD+ez0 zSgEyt_e30#VkoMN*r81iAzv0Qe+1o6_7klatV>t!czdE8-3EtP9(xz=!*SWG7Lh2E zmle4rJOB@LL50E9@mFdK*Xmv zo%8oHWcbs5KoqE=_fk$a;j<~LKT8TX(Z>0FYta^+rypJy;zrJ>Y5=?tI~T<21WX8h zArc2racTuOwCi}xy>}Z6_A~EoNg{t%BE+hqB_YG%Aaf7?+84)vCj$S5hF%q36-HfP zRu@JH4@crVLQ<|^C3BNL>Fifz&!(EQ<4LA(^>aB|Nc&9OW;=Kx!4FGjWAs7UUpg@t z<*~Lb416cX%Qta6`tdj;g&SxaS#&IREq_a4nGJN}!%KqB%RgbNbd`T4e?j%kPsBDlZop@A;Cu~$P z`|0+PJGZaXqmc&fRohJt5JAChA~3o!RoKKudDv^h z5Gb01bI}LGQxs`*CSfne_~OUA1P??M7>N5faR%%Qr>UIbMYK^-2r*BQS#Iq3%Bpy( zYEZSm;0FQ@Q8m*51hNm2>a(wiYV492ag}kjMJ31VXJod|X!k@yUi9GAS1Ji3oUeJj zPzlwtSr)2WD_R#P{8ia@+JDXuv)a^GVXL4z$^4; z02?$}uo>3@zDuiyy_!=ldlMkW#{h97Fmh!1KAAOp9KmB6IDo538mOIzxKtL=r+ja3 zk%}eTBK83Rn2(1qPfsUfUEnCCX?RSWG>9>z1~%^Q4x2=&5K4n0W^Rci@bb9A%+FqR z_l%M=G#HyC7RyYv&np+P;rq3u5Ehg>u!vBCW^JhA6l?I zLkuIA@X*u~&;qrw8(z_v`TkNVK_#$hFr3EeFdi2pJn#=dQ-(wHjJ*4NZsIbh9$Rz_ zxB<+ByyKwq50*`RsyIBenV$4=%$==Zn0AaN7VE_q)CX-vGKDNZY1h2IqcsdWV$FUX zBDu(9;hgO7J)9KFVK=7FjL*n`)rzpEm+&Df6fxmtc1P`9nMp!xSa=ar{nAaT3|9Wf zTh$e8+y30kDm4s=DzwfLRd`+FOw(5}QqAni!tnVcnJ?Q!*w-133i;Z28O}YrCpe^J z44<$_K#pkOz?JvOghV0mo-Oc$SW@5>KwIPM%*(CfI+W^r)7a5QJW#9ZGwo{}C`kL0diwUyZ{3;n9Z@ieVnfWrc2;pFP!xgLvA z&977%;V`?-O&{}@S`P0gh8mh-tBBBiYB#xk!`3)tA?64PTr9>%b=kqJ8x376N-rDZ zrC#t`#ptsA!VNiz`;A>67A^6$A(zmEyuVHM6C1L?rW)|p!;Km zk3M9#t>SG_5vbt%mG|}9pb$~e&+CS0FS}l1`_(Pltp?WbjU>UZRNGAl{4qL;VxwCT zuZ?D8@`DKxd;z)hd-RhTC747=?LJF%~cM*{^>i9c6NJ)3kwu8jPQh(=%a*}*Ail3lMhFC z6t?MKu=E}WDiq4!6e|y3T_28ZQobPDeqM%M6fNUhM*WvUBgaaeh+wQXUZh*yd4CHc z*tiK6m6y5{WD`l0kTsJbv?$5nNI5`ork!JlsN9SiZ_t`}+Vm*n=zMo(1I0Oo=*p7+ zlAFqn3IznCx4`Tae;>pD!Pp))%MQhcJtBW#(;wl}azO?N{apj5ifA!b>LGB*nZ77T zI6LN2)+XG2E`i0cvFJdPb4dI_Mw%q+cvNgS_+^mqi!IiL zK{E-If@*T_PkV#(rhn9_e4bOg+3%DtM7espu|nb5$j{}W0h7Rqe2iXn0f^YHkHVBc zD<3nPfNqX+r*=W24tZ@f99mDL@rT6zzi#65 z1bHTi<-zN-Y_=RR^ktuaw|zFj+{$~vkIOouH(<&7Sn!du?2tP60k+3IZS)}`_y4DsS=1;ASk1kTGqps(Zi7Wh5JD3GXu-7nc})sYZrr8?`Li{rEjGa81fRRX`W5^9??1auNA~<2Q9| zaCe2em<65|+fJ~4PUv;(fc;EJOe*S0X@9@QM?{`JM7;!LqV;#y8p_>*G)G!-p!^P5 z!Zl=4mJa!;o~TY)LTHL(+}=dP1H-aQnucTSjQm27bhW$I^t z>P!gAs`OME1~j(ohDMl2XMwO))Q|vKl#h3MDFQ#dTEaS*3*l!K@)+xRJAg=G>hZHo zUn1LE!7xz+IoHnBNZGQ_FsC+bgCHv%IC%J$?E`CFQQqOAg77HiZ>jsBi`2pK&A=;E zc-b$l1cxI2XM1HC>OVCQikr~?t%CA@5_YDtEk`m2!NN0WOq)=z!b>U}Sos@iArv@| zEt++l%N!&SV=shI^FSoh2mHU|(G0Mw#yO?3&rPi=7=!Q)Ia9{I4(C!cNbU{gk79PQ zQ1epr5Xjp?;=dz2r~6Gi8`J#fmO<&i@hFhGD8xij9x=Vit=`N-e@Vor(!^frPrT!9L>sDjFiZ_XfwF zSu#a&d^GHpL8Xb3*=z3n#h2;VQVeVbRLT2dZ91WYK9;1b;nbkN3l6kFjwBr+c80m< z)1o2>E%D)*wc(!Cu=3AY3`KE%H|tMq$fja`1k8)1pzK5-Zu zb+QpJVPz>5ALkm0HR>jP#Uk9@rj<}TNZ!D%C(G%CgBll$2s&h+)9j7$k=2Vm3?YSB zB*JHN6EX9}wzVNWtJEfoAd8X+44M48(>_@ev0H#xBEd6X83_Ico2=~dfXHSi^@U=v zLBZWHnZlAJ5WX4tavVyTcUjW@l3Ra3bxV>-p2Nhr3C3_TcJQ?Rl~ul!Q3a~vDGCA9 z@~6)Ya}x1o4y&WFNQC625GL(?%si9Hofpt`j9O$>C<3Tl3A%MCoArTX-PRp}9Um6o z)FXu&qmTGhJ-pps#Lw#Y{vk=w7B2CExBl`(_pmoH6>r_F*=FRZtE%> z9OL<)Ofx>((ZK%QanVHh=EWLTMu~hf(mdyHum&%&zJCKR$p0~CGaR#O#}8;=pbvyi z<_MZ_#t0<-20O}eqNe;3)H+J&6Z;ZPz_Ok5FR$dFNKirl{*B<0pNcN(_YDOYrQn-s zrZ_(&Ks}Mbk8~MEO}SbD$QupWf9a|mB`ma|dv5Rsv3yTd?_E3*xAAA7Cj`6+B1LLE zn<{Bmuy$jqWVr7!c8NVAew#lmE31^pF!eA*TpW7iTuyHBD9$0sS{79U(SPGrZiVYloV@$&P@T(fBojeVjW|pIsShj>;IGc4^U3jqZ_xVq1YbFrU-F5Cb#&_Ll!*$V_~62rusfZ@RbtO=zT0}?z9+U`z{v96%8J2-$jnej0uoRC zPps&_kipiJOSL2f3H!L(29N7MS&@1QJ?vc7e5Ic88nRbukv`H5~o+VB_G$WcaIbRuIa!1`r(B5K*{H4;bHM z!Zh*T_KBEZioCgpM&SWyqLWH1jeH8e8IDsOA9$%(>X-5Z9ixsG03;YdhmnYc>9n5^ zeBJb$&3$M^-t&z_XG~lV>B$vEo&a>?y?{i1lX`>ET0He%G{CW1s#$h8CA!drH&tH{ zFi-+Od|11gv@xC%+MkQdn}MTnT4M&(Chgdmi}0BemkGN%$=X!dgcuzDXpF!?ddtVC zU7*IA5Q^pfF(>Fg9xBPL{dc8mWb!7o1Op?1u*c-clH)TF$kG9~^IReth{Z};TGQdH zjAS(_O@x|!u-T-%*Z_yHPL=q}#el@%Z52a8?g?eAzd5=&YHZMBdz9~tKpA3Ln{g#V zMrbM=2R9_gdz~*qB$211CZu25ooyZ<3mL9@=GT8~&iCDf;5m52mS-ey)*0b-Fi5qqqe^Yv<$v9}&H#xX};O`IK z>l!md58`uSucmOrte(VS~Tdr=SAaf60MO3^9bcfJy$bZ0v}JvCL{KPvP%L#XR$hS$h_Bvb}iY4DoUs& z=yh%)TNaPGr{- za1dv%H1|k3>VKzL&xK8|-Oi2%&c=91@x9+Bsb~)cBfDMOKg+36oIp(s#W;Ay->CxkvT77Cf8$^> zHR|bL(pUfD0IQv%Y}*Mgu5My)+V zCE7T;0bV0Uxu&0se>TOgt-9e+sa1?Q8-cbC3K`VDGxuNUyxk$h*vTy_GhA7QuDsO} zHD9=iC|VmR=APZLmKyyn*RZkseyOK6M*!lDsq|GE_^*;(bmSsA(r{+CwIHhN@Yd){ zLFP4$nRuEEBFxXpBqhH`BC2+=S}A1jxkPJJ8&>iLoo-124$aQLTiyHxC%Mg`xqJ#nz@0GS zP-$3=1mTesf^kCJgG=|lkeT01ILf%mh!>~a9nOV_B#9e;51TyLg{&!afB;%s6cuT% z1pNO*4&77JPQ}aDOmr5`f{_li=E%uda)q?zBc+5~QN_5=d5LsOm+l zMyVBiM34!uK<`276~*M3Jes}0Uvx-{unWeKEsB&ibaWE`Lz_~X8T|c^4BjGo5^ibN zf^vznx-o1Rwa5Rp{PzD0na?j-{lByC)xW_^C8+QOx$6402p4oxt8pI}MLe;}%Y6vq z9{o)dtTGm<*lEAePP#;k#|)TFCKD@Lk^ffHNk*EWtD@TyVvx!&h9{*`p$pRb;FkTF zZXlNf;4=~I#q(-$t;86Vco$iVpdcf1KI+|nJlU3RjKgZl;xmI86HXZf;n(Qd5@0Y3 zp>2}^JVtghZlhu#PK0;NnxlQvlj^>ZU!*yY&Zv~5-LTrkMX~03k%X+uDR~H3nr!%Yk4>OyDga0ctQ}a+0cf61*2jNGrcN|iRbl_J1`2YJ z{uA~Lq^cFh{AV(vZrkHp)0_xU;nmrHrI}Epg2Nqa(opIB_MJv_YReMXAQZhiMjS~& zVu>cks9*v=1GGW3rZINr6ABr^zgEsu4NuapOMXd+iizKta4SmyHqtR&BXkfa#9*D5 zho5EHsPq_000W&GiB9-kV0nU&Y?m`??L4sh{QEM*@NL*q=G!S`F#ehB1Qp!ANGRUB zt{W4dM%lj41*8XZ5(Ev}|8NF+gU7TE^cmMTB+5@_8hl;zl>qwXYl3`;_!P=AJGs{0;PQq63 zZ^!9=g%`5@>$(@dU(?Eer5J`QZbtfShUhHHXy0i{*trR^Qa=zbVr{*Bo9wRCkZj4v!UoQKrXHrUwcau2QYLe^z2R z6d=y|@McTGsl6_u6=NMNXK#U2XhUY^EiivccNI)rx%4S#h-lo%h8L~L@nYx(#!m@%?2F= zm+)f5vrCOgUS#CU?y`@6P`|KO~m4#&sNXOSDi9cVqbY=7X}v zt;+=SL+UD6pq^WVHQBh+OK<0cE|q4CBr5RsrSji^<0{M5GkusKS}Y>x z@5By3iDJ*jffc6xMd&aQeWY!86+RhCZLSgr0F3Cl84ffEZLRewIPU}d3wAdE-m%g0-kqg;}sY5i(WSL8qdj>}B( zWlObRKVr-znw&esqyXoyw*jDqZGU|R0wWmzq37KED#f^1e$_iq>2qcJ+y$&_-zJtd z&SdS+qU2tNOq#jf6wdV;Yz@kVYVUJ2`-mK#lapwJ8M!7p#p0=)ZcI!0);q&Xh!_!M zvOwW7M`1T-k^oeo!?&V-t2jVRo(yEGRpS&RFc5f(BzV(+lHnf{x`@6|V>2XVU+F*3 zigLM8G# zLt#(;h}LkXMtO8!hDIxw@)*9}bJp1C1p!B1RjmAtg!?3&m?U?SteGeLqBeZKKs8!O z1i7LPX(-v zt-7nhoByd7IG0%#SmzEW&)YR5PH^7;H5j$wG70G+?uFlD3Hm25EyJE-7t{v)@`sO> zUNd<8^)-;A z8Zu>wp|Cc}a#A!X_*Uy1)s~c$5Mc{Kt`7Q=pQy5Cgx}pJL`*{^aidd^%~{=~O^3A# z$%uZEO1ffFhKXZn6w~AaGdQ%73P`ZqaLf^f$RNY(+J>TZs^RBv1Z>AeI$#(E$?k2* z-WK!&Wk~yaF?`p&J&sSxrd8qdsm-ug3$A~Z8px=gee_V;2N1epN5oR0R`_Y5R_-7+ z+hV<&$+LM%cJZ%HqcBy%gJ0 z@m-~~$k46CiEt|ZBC)DYwhdntMKvM)ORmdfHa~~j-pXW~qcs1w^RvQGe4Efq;#1Gt zRn=cc_2HVdoAgoNT7{CwV$pE@;g^Ps4u*}BeUE7;+~tgxK|DzxJ3DHZ6na`IC*g7R zXWULo<{$>^6&oZ|^p}j|4od-Xeu=7!RLun3Pjz(g`2=bkh(@-trm_zK2Fo7%_8-v&IvZBta5}C3>6sc6xLW(O zq*;b0KIR2*iCz`f=AT9iBCl-ievs~ab=hjmN=vc$?69CH5~;nnAbXc79D(%lks^g# zb_aAM#0*03&_%?YvrB@{t!IZ9Qh6zqvfo^@$P3gH$um81xrn>@A#440LMUVi=Q-*L z=co-(Y6?TFCOOdf!Us?mP-NN=kc;ujp)zX6ObI4T@h_W9>KwNXrCl{$fdiAQ`AU!a zcLAI!{^Mp94&1Hqygyx}|J``80rD9Y$1_H&E{kA?z&aDNtDLG}@X%^Yn3}uz%o-LZ z1XlNMqNi?86>5de(*or>HRV8$bw@iQ-vCc7`i*8yHiq$p;JOy8fhe@m2MH0 z1}Om%>8_zmN~CKLkcOcfzB771?{hzKeffUZ#UC@n%szXswa!|<_1kOhGXkA1`B?1} z>6)M;3{|xalK%zANFRiObPu%yzmFWIIK4tGlene0BBMYK6JoJIYlmxt;JvC2KU6ST z?`fs(Ag;;-n@m#DJe4k#V{faYwp*B@K@tH4>>aB`%r{k^5<*OEYd#X>wi*v3K_MvC zU1|oEdzi$ea_WjzzA>9AS<_3E;SfA0t)Vq}Uep5Y3#2@}Tl)MHX`Tx!u)Haja#1s)d1HOdMVJ8XiE>i#SZjHGh5lTYHSWY(01M+K53+_J=)N4xN7adMh2MD z?V{PDB=#Gt=3of#Wu`v+DwF()@UPrAjc0gixk;(tHcL4ps`|mD548 z$rK3tY1Ost{Mc7XhYt$u0}B)$e?SvR=9}~r3yUUv`i24z64_+Q91{m{oIT05SvE;F z81Y9QWDGzDfI$}OVlHa3C{)!WNdD@#%IK$&YuoZ|WMvS(JzO{MCelM)zgy%d^}Vu z?DK2FO9oncbICojL*jw<)E?(?Cg7K`3$ea2m@P-W_;K5tBC!k;?q=Q9V0h@iSlJr6YHUjfah~v8!VF$$$UWu+ zk^Oc(2CUcHM?D*ewBGHn{7Z-UuXP{V=6r_i{<3NaW_86G-obAd^_UatJo;%e&g7Y~QZs|n6a7ZrpRleECk z)aOmdz9DPz*A3Dxo!e&IQ;DN%jqIWoZWjpqWhEFntP#NL)yF~ewf()i2iQ~x!r*Uc@fX|3PgB+FwN=CB(JMdw zg)@Ud(}08BcT}8w4g~nmP!lDOW{Nmvd&xSQuFjkyn41G8-V%}8^6p6PxYvzjkAzP`lieKXtaa{>P4Y^3rntFNP)Q_iZY_kH-A$4yoO5>btl z>#3&4gul{ddO}N{OSXtdUE+|W20F0*>JxM|%KhEz1=_sKL*Fl7Hq zGz7dQjDm+wcWeSxR~sK56&xUZ$3Y?^1obg`$H%FGS*#d_BGG9}H_aCKF9+jy5)mNr zp@ss`w1k0tDp913eyEirWHo-^o2lq0I>fYWD$A;=e;$9n4G!&LWq%->mZ61^|M z#F@ik%nnI3b7u+b4(~px&I5p2e09>pafs@Ki$%#LqzTR+0Ac`S2(Bv`9wu(oQ$f^K6 zo?ArV7+VX_;6-!i*}0(tmN%B1JFgz7W{vTyWuMxF@F8@TDtVXE?E#fll@N~aSuayF zaNVVs3=0L)(wfl)f3hlD+L32KyWdkEZ_{r*TqUtj*-ovc<~HzSYHYhgkhRIG!pJHr z5EF%GRl7p$Bx!Z#Grx4k0QZ%dI*T4Ne@T2aaS+$;7s&1tUW*_OPIV*QDhZZZQRt&j zR#hk1zTSOI*T6+@BrnCqa@P6N>lsi1KET>g;MfgqG%FBy&dj;HhpRC*mF<*Ctg-wN z_JvM-h@A*6;e0duyQjwdGei>ng6aZ-q(KYI)il+bde8Q|W}?%=mAw1H&?Kp>ebg{V zLxQF5vbDgcjaI%bvH0KN!IpoVtom%=tl+mG@AShgOJAx#eku6^GC`9_j>HTyIH~W< zDwIrAqbtK=264KT2U;pCoK}gjs68H_1f+(f`WW=d?)EG0IbA;H;}?Gd_|I6w7i9db zpBX-9_xCrFZA{o}HW8&+mwv>a<_1a|N)i=`J*0}ofqe4-nwNH<%bFr}1$zYjW&b?w z-~mM<2tlLs8_z67vTS|O#}PUE7xrzqgGTqCSE$0T$n;-YjU)20!6crR%?34xW^CD7PGQ ziR%d;HPJrwE<}CcYF~K21`5fK_Mdsl;gzG-aAFY@OEd2N^YKC0kHGK#lI<+dBaeN{ zn7wjZehzz7UY-ry!ss497cjaGL;BOFs|3pZtE5>+mhDgDXV^P@%)iP~nE%_?Fd3l0 zS%uhLeDFWP?I##w|L@28FPD_}Kw6rXiAvsZ{kU|=vrT%?!@IE$sh(2zooWKLXEq~y z#h&K@|Ix^9f7N#PczpOz6EYL-FvdmbzVsKj+Mj*pPMr-+VBNxDum;de0Z6^Hl*T{Q#H119rzsU&zp`wa17{QjJ*1KvZ87;FdA06@?c_|_ z+L-?Fd>+{d@=yGCB_A zZ5Wq#Ne5QDxs@=<6XHPA?8xj*B{607Q4~(U?3WZBJM}SbU!kYQ;{?)g)6os6U>`kD zBaloL%%`-tXfjbu+YB-~CeN;a=WWlk*b zUon!C(ca#T7sOv|aXOB9*CD$K?Z+5L^t55o1-&po`9&Zrq-L$_SMyafRvtVL-npt# z`s*!BED4<*bzylia+zy}gtiqo-nyPzBD!wEE}xlg^aiMk*`_>Pcy~HZus?v6MQ%PF zMK>ud-+q4cP7mhiYH@Qg1x`7iM{RycsDUv+h1n3G#kCfS#6u^k0qn9O;+^1iHhBhn zb~iP-AhX=Kum?SDMmxy1m(yDWw+Q)2vCK|eOqFuFx10*4pV4*HEuy=f%qXjw&LH$% znO@v}E-U`**nOqm49h4{h2_sp@@X1UneKBAr5h3fm&5w^%lYg(_FX75*dei~e2_a14yy@`E>F_2_N`|TH zO6N71w%&A<`LGGzMuM%7n2)8&9{8rfTe%p;=BNpFo<%NNiKyqL!R6)z*2^L)FMDAz zzi)eE|MLZK+gR##fm`Zk2uP0X%3Ocmb(xK4sAG(i6T4l0eA=%Frf)mqgl>{UKS?#C z)&+B)+y+c5`erJH=_2jVcnfg!$pjW6mWn!cjoN*Y(=%l>Gq0xc&sYWxA4-)F$h@?X zE0(wUsq)RR4hKu$rO%_5v-6-#R?iu*Rp;*At5aW(Yial#O!m;!N|#^Ho>JxQytL|L z|Cc!!(YHMxRc~Xg3C0mSOld4nM1Z<85PiqEfI#uTO^7J=`2K2HwlZ;6dY6+?LrPUI zl>7NBL3>s;qFybPMOrQGNLh1bZzGj(a>_^BIm&P5+udi2u2y$d!{p}mh(r!@`HQ8L zKKU+p;&FH~AMGLnUwTUYdTz|eC-yE+kGo=%m`z2^6HV911csv0St#npYf@U=vL65yw$R?)cWn|7Df4=0)c&1OxMnbgmq7e%G zRp>q{XVZ$SBN%Y;h({`{LTn@8LPogJAR<1fYRR`y%b8+;E5%`&$hofhCcZ4Gktq=jviIaatk5}9Q-69AgvZw^AHcC5GPc= zREjmMsL^54OdUUe_Uvt-RCZ1c@#;2ZrR@;njr9?g{lZI>NFxo)+4NzXMAH!x!8Px&1jBG&*YEE++BGj1q5X3i;G9v)1v9QfZ^)U@6Tnu zK#^e1YR9?#1sHI0JbTJx#8K=-qL**L5W6p8AJJ9JK;A24Z=Y9CAm!c1O ze<<2qs!!9lG_??{?ubAHI8WHFHp~rUU#c#5v$pxqR5_!6cBFzG?dqjo&TThrVVk$E8equ0UA7wr7Li;nb_c<3;9))Kp3 zArjM(Q?Uoc&KHjV(`mg~YlmtNaCwX+_=+wqEk~s*=V%9oW>FjK7MIeuIj`>KbI&zz zY&zM*Q6&Z8J`p%=Y_D?>11N_9ZKzH5g3`5=UJ$Bz>Roj=_=)~h-So_y35hsFkJzOpP1 z>zN86bw$V~C1cTN(>j@~Xg0AwL~@(A&;^W{RH(tk?FV_TpfF^kGGEqCzP1dJ#{iiN zj2biYnv}_0qj?fRfgiH#)-n0)mA3Y?7djov7F*lfogJa*?l9IpMZw}OuXUc z94SiZ(wKK`;m|v^!b2G+> zhzMBl{q4lX$o&NmyaCR6-e*Nd`m~Pd&BN zG!kAXzkUI%b9bqgs@dnD7g)B3pR3RtjVQc;fZz8so>9;n-A<492WmTv^lYR@N&1jx zZ)8(-j*dI~3x9*)lz=tk)=c1^?(kT=g>oZvJ8WQ))`ZO|vfBw?>qPMN!#Q5RarZl^ zr?w(cXp)s!;64LznnuR4h4eI7}R3@KIBO1CH(>q!ai2KnX{m!eA6jy13FQA7+G z6Qjmhh7D&qJzP2a{3OK4L)LP(-qrl|Q@d+GnN&dM!^&m9&!^KQd}6H2em@jRhPk3P z;uSO5Ye<;HgR1Ir$?&IcrN}n zl!$oh8O4Il(BsR9)fD>?c>#`RAeCQ)#I<1?oc}P&9ZFcKS664?O|ag;dEWrp2qmoL zk0k63L%NIzOKp zA66b9)-`%VBfT6e?N4#312)KmBunUpLI>09VX^G7hn<=6snwpGEF-jE5pyaTCi_ji zC-D7t!E7)`BY%D86jj>#N>{JMqEaR^Fud(5b4`>aPUsf`N zo`4!Yqb*D#7^^d5+mfkjVX!}##i%suJbr)RG;OdC_fLiRtQn}x-b^=uAO4Y&oEU(d ziE4uax47phH}Nz@uv*tUgkaYj((JoAnf$6FiKq34>Tp~zw=fNaZlYxxyIz^QX%$Jk zAlm!U;Ok&G+-bj`6Fm%wM-?<*j@e%3>JGlVc7<+COg&q9TYEA7ZtQ@py%NAyO8U(wKlaMM+tzNzje#x=(N-X25q0d2Ysv$wQ6U3%I3Tp2=QRPj(yo&L5ceK?ab zeZqTKz`8`r>3c!AVT$23IM5z!DqWQDBEJ$6m3OCwwfq%28}VGii!eOlnZuXm8&Uwd zTLcvnv<3#w+@H-qJ-K?}>9yE3c*^r-zJ_XFHHAOur-NF0J=&Q-HE|R9s!2;!awGyDlHfF7p_kb??e?6Ll3C?@XS0vejbVbEN+*Meh5&e42>A> zU&1yRmm9y9o4{jaFRKNh=!NU+lOvi-=eI@nIuOC%pq~IXmcLmquUI(k?1!bt%hQ#w zmN?>$LduVpNWCibcSl-#3%ZsF%dIzl0L=fOFD~6+l~#* zAO3})CTN2NZR=`+xpnWecCIiGXjuj5<3o^h1>W_?CjoK!C*B6nv(7LO`T2LuxN=AN zq4Cv=fp?->!X*SlQ!a`C6!oJ$T`>>7qY5Z@Kx%6CADf&Ew{fhunjNgYn9jMy)C@kQ zJ2Y9OYVbRyi010#EPO2yWdF~ zGxVJ9?5E*Q#(0t5zTbumU`CR1xs0Cp88s2_Q&~_3Wh=paa_vkhTOf7jx+omlH z8Z}z(zKv|n6V1TS;|EfJ#{k6qGdp-l=Rib9*l3fHS1htC6OTHO5tP2VYE;f;N11k= z4V~6^>SXni>3LToA}M1-a<}(hSZw}|c7L%sa=_!m3Upi~V2jhd56dG9<|p&o>&od{ zx)l1#Vbm@y+zG|TuW9Y9Alk@n5(5A{T%-K6X099l|H@i8~2v;EN? z9h*{adG(qEo-(xvM{4UeBgTqQ_iAR}Qv?ZGF`K2XKw6mN8~o3CveO!HRqHb$WT)nR z7ftaPC`dC+9(11_B?=3s3bBBZ>g(bsph;~B~r<81%B*mp>{2z1M* zU6#uvG@#(7Dm3%EX3U$iLv!fD?(6ICHeY5cu-em(S-!Pr<95m13I?6*%%<`OQ!J!N zLx!H%TJ7Qm#kj9zi1$spgxyiC9xk_Cmp82YKkz%opr?%Z*CpyhUX3YT)T|E|rvve9 z^L|R$GGGx+?e><1>xEOu!dw*+AU3`m?}d#dS) z*YmW0V*s%5#0?<9t(BWQ-v!`y=75-3aSQWL<@55;{p>LeXE}hkd7`2C0xC1UURIq% zJh55v2BI-bP9*@n;q6&druz??qs`wgFaLX?%5tk} z7&Q`IN%8Rc=yE8{wdhG*#2XMLJ@Vprv%f5poX1}jSJa39$8_0$p}79ZsHK%F~sQQpDYA=CJ|(!>@Ql#EB0tDtAn5U#wn2xd<3XEp>X?4Yc{A3INTnQ z`y57|#P{|wP^n~(Ies*t1u2Zf97i(RU*Tu4Un)CEuxp zhMI|=$1Xp_DhKqdaL8lXH%9hFg(YDRgM2mb@#`9z`9>zA%fGaQuP+pMwF)wOg|q75zpJ?(Wu9hvEy$;n}Gw_IVQfYdFRX$ zaL!F?RDJxNNfhbW3<_}8HP;YbInTn2a*YHYgA)-4J;=~DFf@R{$07LHX2(I}YZ7nE zzq(hmWa8s67)h%p3AQ0OtjKV-&=`@xo|Z&0*)>MJk5Lk0BFjS+(g17TC={El-PB{X z@5+$N5(aIncGf>}L^AX4i?&u`h1Nz&b2SAh>iBQUjc2H03=oVT8Dd`E1;v7dS#whK zJBjcEE%XYfjp%q$8V3~wN}{;BjCcdCtKedwRIb@?R?7cTnZF}289Edc_io*tfkFp# zQLBkeF1X=2fD-U6bE08!k=L&pME~#sFj@L#xZ|0TvnqTKLy#1}2 z^CoF>;DZ(qV3V(@$$-dtkdU9CdOVOzQA#&U2+5b3LqXQbRtuM~LkemE85grhH){6e;!R3^kM3|!Ss_H-xk?YsOuv+|x(3J@Pd_P77Sw$AML@6ysdp{pLNzl&%f*vw$6K00a4u*dyWC(|w)@Ds8D&>3JrBoW;WyL;(zB`(T zfO)x2AkOi0)P$vrg9q1tOQOYgw6fdV*4qWWX?78e~{)+S{Gp?^~M8w=Y zW$iVgYBNa$tiOKwxeD8%y#OblM21$r!ACYsPcT+`KI2%Bka64?J0`ILUiAc`#}^d; zEIukvEg(@`!nW(q&?DS&t%DTDau|vyMxQzvdcBEp+pZjw-R~3>v%64`sH+D81{?Y=Os$?WSyudKT_UK2cMhu zte&?aQ{QsEuK!^3;b3RtdqRL>JJ}QT1R3&f*LKpxr179kr3fLUyLFq!L=(lRmLTAu z@P_HxUqeG9Mb5?^@wCF)8P4E%cLpOXX;%SGEeN)=P_C2Av;+j--B&$*jg;d%Si$Bc~XKdk#jZc}32!D#VWZ zmTjd~bT05A_XgHkbqUokpU#4}i{7RD;C?wImlwUnrp=#oQ#0^CXXr0BY{fPbR1IJ= zfBgg;O<}`KE#0mBrOzcS$nwikv&9o$(Ie%j5V<|v+gxa^LD>C+C<2(;&Q#xhQqlvc zVO`c6Sw!y|)(?}@Xw#X6J7ihpA>n@P$%`DAjf+Mjk`1O?Yuis{X2tZ?XlE_pi~68h ztCo=v!29^q6Xgs0HwW7EP<98y35`}3e_af+F>9nHAEFLT5rl&v9_>!oZwWyghwJ8R zOuz#TXjw0*8S|3B5D)Ih(Xfe6j_%I`%CQh&GQ)#+ucS*$ zfV{iZbihFBI{|PoV}wI}q~nwxQg%<%>U0SqEHg+`$pVP2mns+bNv`TxzGx-n>M!U` z9zB^1QDl}JP`aos@m;u-{Z7R*F>tO$=LmV3xfT=`1*SwCU1#~GCOnV8M;;(~l);zb zsG}i4?k{NTfH<0mX5t!FCe;!VLN@G;Zgit$guH}LdgtT-$uFnc;S1YJcp5X zJ=f8Ce*WOi^Z|$+J8xZ(4n(JZRAz`cs>1<}H38&+J%RLz5;W?yCP6szx^tCj+DcyN zJBBaM1U^{l^d-#wYIIUr7{_8qJ}|)9hl{^Rp$hBiJm)SfZ$l#vZoHKoUN0=QN zfOmSRoGPjDLIy0)7$1U;7HYT{)%YtD576tVhWRQD{lt;9%)Q!&#Jo{Fb2%IblYKV| zRfIhe#&?5g7cq5US+Ho{x<>)wSFg*dcOe@`Yi-&rKq&VtK478Ex%bx3{|+L|&JXB| zuQN}75YQ~l3SEEk+tJ{z-3xt7Vmf}prx?{vB9csR@;Wa_36Gx1Kz?XL37B<%y)BAl zPM>WeLn8p$vS3i;Ic;9#uK5)&&%T8$!}s zwD_&FVQ;AaX(mMQu@Bj-Yl)%j1YVMfd@%V5svxRO$aXS?kk~04r3y2~7puMWF zMl$;wz(`9BOJup6dL43Zv~!#s0RT6-#R1ncaI86gDcBZj-SAuIVsK0ui zMlVUqDrEzn0ZfHNn-pv2c-z0N-6}fnSe9Y{_q6ti>KrRcelR4ZhB&WfBVt$;TumR9(B4Hw>Pr^+A^0#7NM`zQ%N>%E1T)211KYs_wyoC$(xUfjOFwTL zFYWkt78B)N(dY{hfUg7Dqm3>Q^Iza45`Y*f((&C88YTooHkO+rMn{Itx@9EJv9p7B zDEBLtGTvy1{zpcUOM#d;HX#$nz0VWp;q?%~km8!9lExaa;h? zHbrI!0f|z-z1%;s_Xq#q`N~)(kgyC={eR6&fNBK!C;z!Bpp+u&(|_g?@O(?19?&0V z!@Ivpj94BbAt6B#VL=Z3+5RZPcSHG|2PNJKL^DG3=DR91t+B4<+WP;>k8-*x2E*el za{5WmA_J0e{>(u-TJRkfMVE9E=PuqQ1J$1y1QOb@kqJZuG8oLz9Vv+Xx&9T?h!&4E z_O<-i3YoQ7CwmP@B+@M`t2s(_$LHhiaKwStZGtMFAWW|C_FscKCSzZ&0+emIQ(%|_lOttRx_+G!f)x#t>qjL={AGH z5_)!yfNziR8YaGSNr)iIv-$UtpQGN4v--IEO?`ho;KNj8$16ALobxAn+DsOcYkb4M zOVrqT_lCEMzAyyO^Bnpua~(D1KxyQg=}3~BtWeCqe=92l?-cK2evmUfxdE>Klt?2A zjUbSaS7GD=7aDQ@1?Fw-PfxT+dj`6euX|?|Y+t4+&zKcr?kH~Jd6}?gG-2^q_QHCo zV*+Vgwv-(n*bw&k$4@-{2U}%oW?1u*R3O()`>VctH*Y}~hjW*k=RUDZPC(sglyr2; zPb3jwyD&~lNMDdlV0_Oa2QZ4ADFiO!;(0(E$9bJwK_;)RfCsj0s`|LXdn zF+_25p-QxLJu~x&<8^2#yV3fqMf9sQWee&I;+_6XDd)#0 z#B4E0S-FIyDd?||xYFN@hixYNvhzOk7||qIs&nG82CP`xA}7kl_~BXP)HOW1UbMz$ zXAUZc$Rj4Y-JPC3`z7WS#HGN zVa~MX?zyL)tel_l%^Kx@Kd7X#$lMI+DaPXML#!{SAPp6`5pN3O&9s$kFaZPU1l9D{ z2wNy5a!?(~kj?D3EZ}lYh_?fIWW~ z8iPl0h349$2_#wxq#y^Qz$BCfjEwojsc0};Z?t`U@=!P7yH5o<%>Fd=v4rnDk#He9 zRUf~94An4rL1ob=TZMk?l)l>No#5i&jr@&-j$b`Dw(>=_v?G_RuSwTXyF&9Bu5HIJLW#r^K z?vOtMH))`+5T$)R<+I}F2|Q0so6Ei;j%q*%j3UdVnlxOiX%a|-Bb=FlyhA#A!-JlR zo2)|jf1Fh;=~e#1pF3Zvh@Lt+tSCEzZ#L8yp?m@*uommpYmivTBMHjyl2LZPpNOQ? zaOYuFH)R!R*yGD3cAV~p>cwMJ7S5;wBd-aobGOX>S3dJcOqYaqSYxI9(t;=-!gYBn zTep3br|t3gMcWt33^oD|IX;B!=VQrA!XWX;OUM(Ms7QPUD!?gTn)HK*{;vGI!aKI< z|M7=gU^T!W_9}WVY}P=Wl}Os{kcRf5%Gu!27J^AHJ=hwCq&zA>0`gxIL&B zc$b_^_EUcErY0vRv&9VszC%L+Op$INTy5uH#d4j$a3wDUlpVCUQ}sTfLLaO2H634X&JW^_xI&kA<)LR%1VX6CaF1ppmaAMP?_aJO zSkAfPL%0hiazh~B-0w(h9ExRGw)@4^_efM#6JwkK5Z<@VH?iZSXVE4W!Tn^jZ*(At zAE$lrfSAkK5Rj8yOWfK9(Cvx%Z&`uwVz0~g0(TWA9LPk}AmN6AJ4bm9%^Rwcdv^H7 zZk0}K31q<`{~mm6LlhfcLZ9kC!TdA`AO-hh2>*D-W1vd$-$#VA^MKI)0wJSDEt)@O z-ED?wHH4M=*jLHOA5cTKm%feG-2t^M70LUxfL; zVxPb0@_&^f_%TXLb#?M@&=_F>4#Y%M{BspH%&u`MieyNuL|lI{`F8UFMuO9y3Dj)z z5xY?&hrsE1fEWh|a-g#x9A-am!3GszL4?!u04xRIDNth@hcTYlr3JB3LxR)u0Ba3r zuVpbP2=Wvnf!e-Q6gWMv_=oXlw0%}VXW-Hrd21(X@nlHni`28eBdLkXfKgBQ%TFH) zXM(+nzApITA&1`P0ZcAC-+vk9d>4%bbVdSMb*ajhq;H8rY@rf45os|mLlc7? z|G)g^p&;K(;zUZ~v!10i!`OOp&a;v3G)_gJkhP!f(SI&ilGP7cYR211Vd-aC!p?=t z37Vh0D=ED-N)#y#keFBz{@yJh0n&3lAe|L)18U-a@`8C908&!14|-S#>a34Nl1AE> zY6540$QzlDE&FC~&F=!`lSEP0ENA z*7q;`yf)YqW(aZF}=+TpYpTCpyVg7$7=aURN z^?(G#>or|D?T7V512UIJ16IWpPCqJk=tBWOI%NmqF)YhTP7-ymg;&Dt@yGL?#AF`Q zKydC2SN8h#&*bYP0~y*w`T+9xp{nnf07Zt9yoBIy@x3DMX zgl$>GFlw=tpytgZngP)Hd>(LT0N7HYh&b>3mXydrLz=e?R;k%t&;BF_gG@`$uk7^j zXJ%;_Yw|(Az?aj`dQDX%+Olh&?`&SXn@wt`&?@@(A=h+^U4Xf$vOtH<)f6?C0kU5m zV*nADDCRg7urCM{LvzAMT{|FJK}uKqXr7sq6IPUbK(>+iCA;MtiljyYme>_dOCy4u z>2;)yr~oF9HhYYd5;HV%#CcS;fN|}3-e=^1u%RdHjR_#vLc&%h{h$gZ-+6(7Y&gyn zdH}stX&_xUwnR)MS(Tj(LU-lC;6A>{u_|_S-E2)Yf?2+6)Pi93kBvRh->qKf8dJ?M zi{@Ef>XLYPAG9t_6%m0}ZEu0aB~HV|Z5S|V6*+Dn$vT}iX8B6P?y*Rz)~ai5ev>R- zU@cLbWKfO-?Mys)CfTWAR2yVUDlup!+DUHqXg8SXEiSNTmGKOZpwF;68%BRPXdaIW z+2B|)dheQsD#_LJUs-xg)E10|29Jm31iQIVd<6M>(HtB2`@hrkX>Gf89riUHQk{Ws zh0V}8ye8fJkPD3%5k#H9j84iT-<<_z`9*EaUJqkf`65={t1F4i$7(djnhDIpGn?oL z6iH*ybX9;V2Xy>7I+hRzO$&cPtO5i9fn;1+{;{rvSzBTPV#2Ki_GMjUn5cJ+>Fehp z8#zkE;EkKF0B0|~cV;o0{Tv|#Coqb4I{tU9Bvy9zI)jEpRpY2Rr||V~+N|5zac%#^gO3&w#r1U^MjM=DRaclQMcH zjV?+H8Dn=XC;Hl{ZN&hL@Awpoe>l&fKflm4TkdFANrit`yH|&cz@zf|j}#&8vq`(E66OlAtDAa5gysg_4oq8X>$($?&&)4j= zAc9H_pVp1_5oJyb*G`vPfx5-k0|Z5xSZJ9|+WPfXO%3Dn_(9K)SF3nvhx5D?K#tVg z6$=hHUa!^U>1iDip~B-;nXmgrDdmu!U#?}988x+86eN`9#b;zBTRZ*AdxnFUjR4VS z{+X^PU$gA{Sz3QoVgt3c#@XGrWf%^gK|nKuV5nuA;|&w+~QjW+{P;tRsXXt zU5LjUH}!$~FG#c{0|{Aa1=FE@8|@UV6OUa3U5;+|H;C5!i+O{3Nhp4yq~JV939z9R zeTMXCe!UBH(CC^y@cbd?`K*rUw}UWthEj{UvR-m}*Vl&p9TdjoOV$ZwZgOf5W9HF9 zue^4BtWZp3+@Bt=wiU5NhxFY|Ss8F+xy;0^P^ox42lNmh!uqutl{9b@`~*{M0DU|! zS$R$XlryEko3;zbLh@a}u1}bwMq4ct)W-+;;O_ZrU3AwGRbmHCXPryjrP+5TQ|!>^ z<6lCS{mHM;v!Ck*6d>)_8ZgnV#4p9oqEuUg7s%b6a2lFuB^MpvhxCD-H#HqGA<+QSQ+SU%?fqN;2*fd+T;B*i+obiiKGMOC}WNlDxAC&wcjpR024)0VfZ|X z)>sp9lnWXtN^oP14BOuzWWMR$-SnX~zf;gSQb!z(19AaJkV+U37*~%v6loAb3e}%r zX}$iATl!eI2?qhz^*m+)J~thZ;_gE5Hi26QQnouvOBB*RkVGocPZ7Jl#miG*HD96P z{>QcRED%Q@ET_MB10tPAF|Rs~uWn~@T$p)AOkWl+Q|pRA7C;nNqDcY;>%Kgq7Pg;f z(L$iB(0f48k|PL zoB@Mz0{rbI#}`e8BMVDf&gAL+Xp^oauh zhC~%eveXZjTP`-kI^F~!yr0jD!=!&bmb}xaQoC}yjQ)xwyz>6|u_O~6;MTr&*2B{T zX1@VzO*mmd32dPq2W;HV_!$Cxc>tU*_Z*BP%q|RI#Rz_t-K31ji}ag)M~g%gnDVr{ zw!e0w?UutxLIzAM5f;z#cW-t4CM$r}nD>b;K*tw{*=i?e>2!L$Imnfk1_{DD0LI3i z>5E!6xn`pxa1Ckwrrh2lO8f(#!-d&D!k5X;GULTt(=a&;cp6b&49v|KrX1emTW1)a_D!&UL%9S@s*^gjkRWj8q3P4`s0e#*RZ__p!F$1hwMef+nG7n@p&c0 z(a@zwcp}tyf#YlbUAfa^RGS2?X<=_90Y4UZh8iFQN4@EfJCB1}0=|R|aV%5f!*bhF zUp8SqEy{Aqb{|i|VMnD#*!NlPxsod$xL9}20$`q_!Fn)CKr!zp+7<*t9;-!BR7p($dAiY<8}eN)c{`yhwt>dQ{tKRc z>3(%Y@MT6q(Dl%)(uYOET$;g85Q84|zhPNdKw0h$R_N6JcGlcW39W)|z?&jUCTn8A z49GDX;*=lNgnaM^><}Q`r7h9WuHDzC{NYGkq?W5^4%wS)S&#-mTz$YxCkMlrUouYN z8&;xr59zIm8UAwwpec`0_MZUve>Z~&!xv!qn>1e}{;3%P(Ob*^J2X$GC`4MCogMhy zj>3_F)>VJ2%@q!TZ#_7nMy~YSuvf5RT;}NJ}wdN|w*m(Rn zZMNvJ@ueMXEzkSMZexO~&$avk=I`3DJbs|!DeD}mVz>EKa68mVDatOplc;XO*HZua znnb!`k=#z!OH9p~IoJVNW{>OHazWhhC&;|{G8Pt+(|n7e$-RZ4>J}X?VI{lw(m@%0 zWHE@z&w$|f-~&l!kUduEUb^`?Shw1EUKYLJJgl!ygiFFh@q`C>q6+XWLdM#VL=UeR zvK>i*ApfFGQ$_gmX=Ircj1celr#OM9)-k>8)iVN_SKH$J8qP@3oBCpye^ra_osXmt z9go|)jn)wR-H4Zx!>iZ{MryOgnA?*VI`UoMCSn>@wGh!SpM*yd^&KWU=9GggGKbgu zH*TT@EMJG!`8aKbqFtUCRo&E2{YK!bSFZ3`qdrza%yB`Rn%E6*7tFZJ zI5!af6b=5s9ZI17sozWHP6_EHkNjQ#R7BS_?K|ss5;F*5gEJqwvjQb*N|-0oeqG1Y z{ypB4qcFz&kfMuvlOr3rlu7_vrv1V%@Na0^0ks6BC%;>IzT4)b4hJ#ulz*adcy%gj{4DP7E8184N%>9xkx%KH(jrFb zNdYF(UDEY92Uwwn6w*F7JN-VlW!}05o1J^{i#e6f8UP{^Q@dJOp4Z)T6UhbBwI>oP zxA8vNzxUZKj@l`w6jGd;UJK9f4CxMb@Jr3$ySdl!ogCuJpL+Mp2Yzw}Es)F2FPwL) zdJt4?9Np#}G{463g@mFdKAX@98b5P8 z2aIX8Yv|`G#+&5gkS<5Xa2_TV`Wv@&;?&H$nw>b;HXJZeqBBHxEY1*-D?q5Kx>^0G z83){hvQdH4t6V#8OTA=!8U?`5R$N^U@Qf@~d`KT^#sp3S)w4?BE-F8&G9sLk6f(|= z6=yGBq!njjIlGEHsVgZ|5;&<2IgqX8xx{e(6iB;Q^hofVIBHYO%yd!}mQ4B=(uReV ztTms`ce+hauzX_`(DMsX+r~5^hspORlq48-!s)(lrv}?q7R;xVoCUuP9vYW9+a($6 zxw}4;u!y-aj@rq%uwlBv9WEa4xuIeJMD;=*C_zhXca01<4oDO#I$X>9Ijx;&0?}h^ z6-QR9t9XP6n~5LObc(-J$KvwCGJ?KZEDmK}*%tI2rU@TI#lJEOra_?#YIa3%kf(CZ&Y<19iFG$=buleV*$Ijk)U6h>LY~SX9A&5fLn_3pc>ESL-cqQW%~-xg4=x z`lj3H2$>S^^Fu}@!<7$+eZDrnPWf1)5k_xoB$Bv@A*ZvVEQ;i!^perIC9Jl~fe$jb zgj;IiTfl!RJ~=%409r_m=qez`Z#16$rQ1fH5jqQi_-o0`W>e$zJKC8%UUBr~zZI8u9N+4C;Oq4IDAz6_j1s-knCIBb^0-O{23m%zS54v;2 zg@cw4i`U9kn<63mn$?7Ex3gvlkj5vCDY*g9mEB!?xq8)qrv?P77TMd`*#IVX3pGt7g1&!kh7!DbOu1QKtRZtIm87GKQ(M93%%U7_M7a)8X20q2p9 zQFGIcwxcb~jnRJSg}EXDJ4#ky$gM`|JC&I(ucZM8NaW7qq%eGWF4vN$J7aWulV8U) zj)bQnZzeE&3(zD3R&Cx=!gf(5d)m}$@4J}Q-+SZb`9E|C1d5i#H&4524-s?&vl`;Y z=%T@?Y7sCDak#Q%0A=NHi^a0qt{dHFITc6<2rOasrHe>f_|qMWBS$Tu%}y`ID;Uom zc2`M=6}fcpNnFS{JNsTW(AA?eE}#D&OTIVj!zTZ)3@?uRh4(Spy*BxmbMWS(cl#%D zR&-VN|MfL^z4~F-iI_8Mgu8&9l8c#Ee=@d7EH=*Pu|J?*Rwe>09UjiK6=L1QDi-_b z|JM0cb2pw1KfiwMt$8Aw7r1=bwZ;_>X8iH9eUA7L*18S1s)m`*i# zvHIZ`)yVj6)o1;)4PNaF(`D{BlX7^rJ}~xsWHMR))X$uI|LpXMfiJz&^;_;mSF%rM z_)?kwP=9f%vSZBqF9!>^aX&*;R z8#Ig-$!XtR=U*so8!;t4y8Gk_IahxUPyYOUD!{9QEVk%BxET1(@y-2W-rv6krhZh< z+3uXGwmqM}-rnX=?eC!UAjbF->&Vwl7N5$b=WV!qXs4rn+yv0bx$BW^ch{xO=J7(n z6EZk}>0^ea@{Ir1L1mZBCCqot&0+b|>Ffzy1Mx1|=?+JQ{GuXe^m$vlop;*DEukIwRSjQq86mn}III=rVp%0BS^{=25fZ)7d* zeScgPuYb)-`RlWZ7eB}ZHO)2vU-{l)1`3^7Z3bqEh5POmMt;5dyW(L`{v#cYiRZ81 zIdE?GLrwp8zdqJ(z+sx+t*bx0i4{}(BkmB41<^xy6)_-$9n7-}d)oV-o zuL7eF=(yA#(6*NQH%lUSgABZXx61X49z;q=X>9|u!_{woZ#{pUF$>9kFS7SF*oz%Y zfXk5>66`+~u28F)#!@s_Z!>UH>gjWL1oxhXC^!NmQ$Veg0uNxRLIy{BZuvTB&-g_dN4rO8D$=7t7B7!qah26zn6HWZ?ESaLjUC z)B??}fXwpZ0L{t(nG=MZfV(F^%q1cZUcBx8Ux<^Kf@}cX{~3!Y%*1ukJgk ztFP*+UhU4#o0;wD?wS5|Pj8f(iW~+iDJl#M48})!X$=?{*bW#NxD8}PpyqfJ_X-Av z3g)Aab>rPTPyvfEu-cSf4y z`q|IC<&r|JnU)VmET#2K!bg>M|y!%%v;&3LgV+%!7rAYU`H%~ zwlLpkwYl(4Me+DwHbJ`K&}*)D_KdyE-b`z%>|lmkuD0ylJ`J1HRX>a0q)!eH7k}?y zLfS7fW>q~sB^LdOj6Add{;X_O&9U!{$v!(n_3_mQCX{g`K4fr_-eAy*9iytd9aB-T zVB&%Qh+0-{q>U1HOB~Oi9d;Q==!;tVRZTM{_Jj+RXtw_5>Bhjp)HeXU7T9<*y=uhR z;x=x%(5&HhNbx4|m78iWa(ntuVhvrS22NF)7SmY@I|SP1!yVm>B3dzYcG19eX`6l% zBF)I*v=+kDXz*%yYDp&P#=SWbI$;)wZkkuVfyvi=4+;2^g)-s;?@MdI+;NLY5ifox zc+CRb`pJH-Bl(E}d_2~!pd9P~AD8@`tA1eA3<>|vD&V#wkX(ptc2}fK+Ee&rvpW_b zT0NYA#1bm46JDUfE2d`>zVJhX%h~) zZS0$I^{J?I2@^^{M|@_F06DjAj)p4nYBZJ980$ynMI*APvVxCTNy`@v5PLhM)O2Sp ze9x!{epoV!yPz+66X-Qbh5T^n;sn3hWvFhgCNyEh+*Bni3KtEi(>Z>z@ON$hJFiel zb=af)yO=q#3bNM~AAVsw zI0ZCw?D%||tbFqtjEHfmScdbSRi<1k&T>kle6h5T+Cg;A;XT;bh7RgxaiJyu1%D&c z-BNy-tsmAMgX_nxUa~>B-qmL!Z5vjdA%LP6v379hF*gyKcmAdCwOGbiQc0}-Y^g>6 z`NM5M4Y&CIvSElw?9De_$nM@j56{@1+&qcaik~P_P1gGgVCV5nU<6j9{z*H-4&Ao0 zMQHg_s)Vk5JsiL6>^>i^QY|w{F~;y&{-Oy?ir3+>vyYvMMMr+_C3!JeW^XZFQFAy) za4K@iq6jk9qVaBEW}(?6CT<9~t*((c`*T`^2!Ap)Ujh8E#xTUc1v~g7SxgN}1Ac9W z0{O&@ML{|Id0~n3r5jo_5AU3Xe+;1iMM~nB-eY^&N={2j-9fo8v-OlqqZa`*6qa;v!yNv4F@^}4(hk!ea;rcZ8@QOEc-Xx zxpfIX9nJv^!Xmr zMgAu*B+6 z378=@j{jM(lUM|0NWyM{LBLYv^>klOlLcRcwB4^;L6baQ_zKYgYCEae>%``!qVUoK zj;%RD^ZO;Pca9ns)0Ma^%1jbdUwGF{Ov1;TerzT-!rBqY3@qtJp<5zo5EL+0ly@(k zl7i}U(NRdkfO#e5vdBf}p#zM+P)S3)r;~%|lyZO`1grm&7fQa)z7~sI-Bt9@ z$cM66%{k+Rp*T`<2Z5;3$9gaR3iP9H z6Z6&E61-_oA}x!%AO%oI0seXAdzq<1+_n^**rvJU&F6ZW6V}S!HAzY{ zrA67lTq2{_noq9n&Tz4~S7N+wVwrI{?lZb0!F?#PI0f=tKU_~R_T|_n5cD|>QXSu| zFujx9qk(=?T|+$*5_peDX;*m!kQrM0Tsd9+D`9j0$d$bO_KEq5c+Bl~BVDoG`n)Cn zyw&MLV=LTyeu}Q}w_#qMMoi!8X5@#(LgR+aL0NPejn!Or#8G65)imuea-BzA9p4Pf zM_79LGEfIxnIVJWG{9CPvv=kKYAirc6*MSL;E`zA4Sb0Zwz{NR9qm_F;6dK?)Z@p=(bz$LBs0>zZUU(q^Vcb%)_<+<9nB4QAWE`f<} z_pa}HI>{QivU9~B$I#%Rrl5fG#a)-EvHn`sFoBizS;B7peD{Vp`?+TxAd%&$PEIW;8&*ypb30e?}_fgbTkooZ`Hc&nr>v*#DZEjX$uuU-u@E z1=N1r$MVzLW7nM{9yF_+WFbS`=>ws1eD`=$6jkPSDv z@bM6%N`uEWkJNrmJCvP|vIh!<*FuU;s?iKV zT%|+D6z$7|#T)wsrC@MBT_~N}GPqL)1>|F4^pkON35831M-kkzWN-|B+hnS{$)F9@M71!fF_YW|-qVGMswbrg5_VTQDOBrmBr~cxl zBzW?Ml8t<1L+`jJ0X42Kv98axKLbQxUjM`LcodnfLcN)5{8y@$KxviP|1d3kygrxB zhv+`QXY3EZz5QLUMKbzZDc-^_&G>&oj|*i>3GGMUy&xN~Vn%hCB_!$2RvQ#5hhra- zjUopJKZ25IdJ*rxfYw*zN{Xnc>RZLU8FTy{s(9N$uBED2e zK-Kl)RQ-A}{2%d~8)uwr@Kc{o2HKk8Vp{_5`(U|q4vJi$sew6omkdwJCN3~ zcDn3mZi?dOrU}WrIet0R!JC{!XppmrhmZQcH*0x8Hf*xoKE53;b`pqh(yi>5aK|7W zciSwRwyOT9A38ay4(gDNE=}`syIbk`7mV9ePz*8l;k;C^OKi+Xe{b0fWho{reKmItt4M6cVs z-@W_Oypa*Ktz>-ZpDL+O$kMhUjd=9M1qzFzeD_(fZSipjIDgZuC*Tim#eQelzaecF z<94FOQWv))r>*)kyYh85_;o|dcQg)$)NCfrL2tqepr8H3#8%7u)hWQkch4R zmi4#c)frU0(6MFmcw5|cIkPoEdh`^uBHjpX+`EJ!fGUI9L0*pT!Jn zEP*kx7mxKT=%*TH>-wgav9eWa)gWQj$?a3I6Rpb7jAW~0^=d7BiYvoE3YJZa_ik9! zgp!nWgqr-5F@sa0S|)D(r}(a7JuE@T>F?0^6vW#Fbxm<4uxYMDUCTIPRM2vvrU-`8 zuZ7U$w?j|1P8GOyu=Qebi8V6n1uom_C$)_Q4q^KyqZBa2hfwVg~6UC(i~f4~%aP7fF9Ru*=j{5;XLyQrjhvlHHN_Dd?lrGq77Y?D5$z z_z_2o(&;6YNGRyQ&Yez}+Nspskazr2Yx}$i-~f=2;Ht;|?VILfJ9jbiyJv&UN`D74 zzWJjz9uD!!*+D>BdjZb^$0Gik9t7Fs$LuoS$H0^;$}xvNh6eQRlbAN>rMK$@Xwz)rJ0^F;A9b zf5(bQx#GCA<07ZE9a$37a%i`<_5``8gJ=iQH=>e%L7$MtoqYXM5J8Xbi2d7PV?(Ql zXz|}Q{F7fY=Ox~{GrE5rBITBUvQAlAk+(NL!`cWV6> z3KM(bP~K=MwV&iNrz!mxy$=r7j)&4G(GBv8>S3-#Er|_&MEHw>3x8OV(wojDt}j*h z`>`gM=IrQns{y7wY}aI+QI43H1^@uP-0{TXJP2^LL}suo9iXEI0Hm>POHmJML|ZrC z_h&s)X*An*+$7Gay~bZtVeJCbvJSjgqZKT}x2si9_xVktJX%D3PleXouwVVT*PwiW zu{ZlhH?dI=N%0$6jh8ZKtzt)4)ptdRRKVNiI<0E{J*=HIBj;Yjc%q>%fG0e+GL!Im zedA_EVRL?_j@kL>#Jk=N6eDiJn{%kdz-Q^u-*V#us;MBCi*MS1T)3*uH(3OHB*4_B z0H?*;gI1TKdUkFYONx7w{UV$tJt+#@_toyS8FYqRA(UKW&;X<0c52oez|%0!4m=yl zkJ=|M{0zKSeEucNn{cv(po^|oOnY-Q;WO0YiRe|XIcj^GUq?AVpNj`$v|>qhIIz!I z+V>3clGW%`N+-3TB1I45w3@$N<1~pB+MD+C+75Ahaw)+VSGk)86qMj3&f4(R-P%&T z17WrU*EUie%h!3H9Lv=@LF}%oiyT;$S*0WkNwXc8diT>~65k02YLh%B0k_%o=o$s% z=z^(lHVKb_DE{S_^L{ZQbMettPv&*RVqy)9i+F3F2!k!f9S-ljzv?!i1~i z@}*o^73kh;E|`4EViHan)0=knUmzph#lse@JE7Nn)aErhlH9zKIX(!nsL^xPd5w(F z-JQ`OqKgy8@G`tcK)O0W%`RB~HE#hzC^~xcN^H9Qug&X9f$#}IBX7E0J=YV!zu4E% zNtoqmZ`dG-KMSFq?0?-W_b%rJh=J$f{j@q!Y#f|Pk-r-Ui9l zeA%I1e7lcnbRI8NXX^R0Gtog8L8knIJDkwSNXe0bI-Hr6QgG?5b|Q}=s8aj1OwF|n zk#<}*xSg3g3M?m$Pa~TZ_hB_ZOMRi4**zf*_8{=J7S2GqLhrZX4t!f+8OanuuMS4uBde2;lyU}P!kw?6B>Q6WX-Krx;A zweNmjwWp)}RhLJa1E43k_(V3<6YTzlKqF0D^19HvE$d3?-LAg1ADroq-N02l@hs8q?g%V19@5GA`G~A63O7$r;R@h>eRBi0=Gofpj_|rY(f`V~#PT}N;NP<| zM~}{}c#_CNE$kM^e?!ijXngjM#aQz#a}emiqlk)%auA~*93OZ8{R@MLgk;8*3Sje{ zdL?>1;E9uiBe0`Gj2Ip9`uh6sXRgirt9|fVhOq?%2M6KfC&i2ea1$IxzGgx;Xd&=g zdD81S$7%CE`HXd?%^NQyB!o?BY?+jp`0r>szw>qCx<=FW5{0LqfQTdN=f9G=)&WYG$_%5pn zl=~2QexY|Aq8D~Ur_qB|r&ulwA^P-P09!=7FW>zkTZ-}~0LkV%uc>6yq0;+%NRAKP z{uEQSA8hd_d9%&OP>nVBp)$7bn49=0R*+zOexvU6URgz@WtA|9uPXQ)klDfcIhF@^ zLni&l%O-MwE=W81_{run*d$XugId-@#$86Lii(ifO*+tT>6_AY z!ALLwmx#&8(Ei5=!%9}}W7?xPn;$W?UGhO7ny+ zqOgYdhv&erFQ!`=VJaH@Tb-Q^TUs)hnVZWiD;qxa1C^xnJ8iAC`-0bYV4mf?{LQXJ%&fUNV!CIE%))MMPqko1Dg7 znA)ue)Fn&mE68_JJWVIcBKWD~QWN%sD;>vzxH?HZVMLA?!!=5zZyFZsJ@GSb>0C&C ztm?4EahHn9r!2^CkHuZvi-*-E^}iC1Ju=;nf6N*kwTjr&n9ihc^L`l32{R4|5C;e@ zm)I`>ZeM1u(0-C+xsrk!bN9>l3`|VcS;ldi!)*(2hqmx0j&Fe9fxQl`+@a;4Ph}ot zU*=1Hsxg;QuZYA?PEP8dWgz9gSCc$c_VJjPDACI2&LL9eXsY@UAt6xtG9pSw*?aJ( zIfBcLuy=@Dsa*shXD#&^ASZ3J#tgAYz$-xMJntfJS4&3ETIl zhi_ViIJ|9v6=`)P+-=_L+|}8>q_tY^5pmO74H}+p-n%8p$@MLDA3w{G@$OJwc292f zB?67N94F?p^jjX&AUQXFhytZ^Zae$^ydUnLQQJG+14Z00_bpOix$ezxh8DCBfm&}L zY8~@eG3MqqQZ-|R+Na~-P4QPT5C&>G`1Tw)mQWg2iQ=6Nrtz0;WhABXH5rV_+Sy5ZvPP12Jr>Dy7?CssWO_m==J~!@fY*0C_wUL}C z3qNjL@m;g@KkY3Ir?6W&SFdqGv&^1UkcM1;s3n{9{rOHY*I=8z7A6S&A!y6vsX|HL zuzaz6i`ie5DhAYZFVoSp;>g*U2s5~KS!!6 z!dN$+ya4woUR{LjDD0m!=Z~RJTA8y_>yOC9ov|**wbv6rTZR68F}5ney`OzMaV)Hs zSrw{LBHK@!-ng%uFI6Qc*MKd%o6^7Oo^YO7URlS!hga=j+~eyg%C_xH7+zp0TthsK$Kd+%-rvBRqN!6xCOABRc9} z5#pDrib&`Cf+UP!e+-dpp}mB_xpL@w9^{@E6V4f~!s=cesn$K7s8Nwnkf}}UhSZW- zCK`RC-j$4Q5V^q=MaVuq83lHq4Do=q<4v{Y#Vh~>@xz2T=z#YX5AM02WMySdc}T4w z@_@?gI0_0O!dgkij0IPLN{`L?m5!L9ee5YxB_k3>O^Xw8*64TZ9kkt*+~mg(2GCaM$8>1@>t6^#&Q?yS~ORz zPMzmwKoU%LFvqm9GCOi9<_@qezM6~rL^Lk^+|k8Hc=lez@!>Yhzir;k&@frkU;p4n zzjI-SMy^CU$TB~DIm@nYGHhQfpH`lzHv8TxLNaW#27G!Sn2QgRl9D<&yRF_v3nW2W zSCSkz+2j`z5^CKjJL)+&C~ofKym_8a->A!;Wdd~*dHk*nR{fK(zwI;~(%m7t-PrAt z?1BU8a#g{)KP0jBk7sTl^}ue_404>XSuSdfy6cCA!m#!&<~q*oGOGJ~t08wE*?G<6 zHlk3mhm7wLXP??_xUGI#nV-IG)VJ6-`DLFhTv>%1E`jEzS*JegP&KuDT^;Pg;xRNL zE{v}LK&L+$#N4`4nE(o?qd3aA16vI*|GkQ6etYEhdF?{KW6&^s|D zKd0a7FjYH$dx;f2&R8llogy2OfiSU3(tzS^Rj2f3ayz6!S2st;FyT&A$Pm4t76t)9 zVMmW&Wg~d}ks|vmsgg>=nxmnCRhB_G&!}j}%8^}{2WAZg5Y;geP2K16!|eE=;^<8m zF2ov40(#w|bl*VmL3>o1ggM|n;xHlD|WM?W;wL%)dA8AA86&X3UDV2Dqu$3jP# z#9}a)^)uTs2GmO@Cq>;Ufd>zUufiio_1Pr)fy`B3+>dhWGA(VV8=t~e9+x@d&%({G z%B65 zl%tThy949uX%PxV>tb$=3%!SoS?9+BWp%mB+Pe1mtE0A8cKOmO{(^2zeWO*boMS>G zM_Q%AoVJ)9Pc3*VR_^h~WrdOfkaBN5x0MG=+Pj`>-ZZAHF^Fx8`!V6GCAr$b>HC)~EPi~GlK zmW>W*joxISwv%t29MC6v>EMLyOx^jNopC$8LdAP6#`oEDmkj@Y(NB&*>hLIxJ3vtYY8v@iHi|AEUSq}`}5f!Uc5i_}e$ z5$bU;7@U})1awb`jBEoo0@M&N%=bZj$OLz)5`gHby*n5~5+V->_;`5mAz9f4Mf^PY zY21+{AZh6;0mX54?Ea^R$44^`Vh$nF-|I`4a6oHDbR`v)JOEn)r28K}V_;(DH8l|d zE&{cu(m2j*gIEzS2n@gD$}6I;AmaI@jDe26u{WCj$9Y>;KC^ZM^S@D6I|C^H?~cW) zN+@Tl5-~Y>4*=&L9v)0Nh$p6}LmuzWk$l}j|G91!ug(p?C1A$}oEz2aGWP$G3-JHq z=zv3zsKtLDq5?0B?D}81MyG&_r1JD)r8BEys^r=jDQ-H%Sg_GirDd2*zdqe59pX|G zGIZV3U(S1QNTw6V4MZ~jZWz7q+W*0(j$U)_l%sEBhzFY_ztcuDJt0U`^=R*PMZrTz zV?Z7!X+cH0^Uu##O`2MPx}Jl$sz}DK4f(>@@0X<43myxspLiHsRj`vD-Wz9W_#RGD zbl}vsh!m|CXS2- zt1%N#%KIBp0U&Z)w*z*dhLj?hVBh-fC__kc^{^3|JMe6h&~hM$>A_7-BBDF$ z>c|IHLsi0WfnocRIFOe|h|tBxi9y_#wg@JX0r4j4Ss_*27)g6sYt{6KNj8~|XZE3d z)Tri3$TaHjaLLdd*1Wo{HCejhYP^e?Xb_o2Ve;Y7PQr6>C#;Q=>BXkn%8`5QG8i0R zXUmMSMH|{5laD)TJ&i!>s3iSk!Nm}+KDpPcW*XpJ5OLgSS1hx%+ya)BN1+TVrR1>M z&*_^Ixi)JO{4_7=NNMb-o=63Iw@FQIER*QWs)VmZM9U+^5}@A;ZGPLioNycjH1u2; zja6xEoN$xO>8FC_5+iW?QvPgB*%Cp;#k>>0S*tr_IhoDS_~;j~-m|F@pN00OqyY@|vXhdp1!8Zg8j0R!mD-UnB7?l6CDcUL87Izz9w9+DIl$LK}^ zI=dBzxn}N>RyqyX@gN(&`PX;sP+1}u%zh4=@+kJ`?lQ-gZyxlVlDO&96Epf2k3W0# zu*y>el?<mJvL6nCp+BidK@& zM}eWAU`hyPG_dryD8Xip4^ptkR$B6kWToC1RVm^GJ9^C*>%k<++t-OMRnyauGJoIZ z%D90_>rtKez{8;1)hL~88D@20M_tMiGmMN^(@*s_+4t{HP^*)NNnaJYF&m)CSy$H`;IP#NS@p9Mzna*id;doB6X;N%e?nq?{(^ej^#c_5Q6XBMgxoI=EK z3_H~hch#|FdZg^qd@|exTcjf^mKWeNX)p|&A|gK_WHZ8DXsU)Y9;<+7Z`~TL=g%cP zkB?j-salbQ>>)Z(wZA#aA(H%?n!bhN3ES~%$V8jDnTc{yvZSfE@3{ljk)VLdp!GmxG5BvnoBc|8$=tRgOKO)|X-*yuamVZk%j< z2FdUdq+wld5TnQ|=5ZU_d0$+%5mWt4V^ycTYCnD$<8edb)>$cr1gt8?3oh%}Y0tK` zhW^DXfivW{b2UIOYl6@SAv7_Dgp2UeiApR`BcV*nFjn#*~^d-5yv=ASWz$s}EL7=M~^e6clw zlC^ZOo*siyp4ZXn87K6l6Xp-5*szjv`st1XM0xqkUdSFjLEb23=z|yapK>WW;Nfk@ zie5H&`IO&%Tg%W0G5hguuztVZmty#9Gx64d^*h_qb?f%cSx&Kt4c7+IBG#o@--&K3 zb4003SqGXt+FtA!BGXh!BrEUjGww}6D0xTm(#pC!#M_m8^yYDC)$Z(8)VjaB(c|)A zxhmxNc{H}M`Q~2aln8KG9-nh0C=ikuQC*hr3YNzUTjvd-8l0zolnVVv`;qAz$I=GB zpPMkifCR_F-(sjq3uauJKE^4sH@)oba55%K9QUF^oBEM*b%`n@{S1Ed?u7m=lgnH9 z@;IUm5xlhp9bT}yHuQ$)M&Z!b7>E3lcg5-__qr*yPU&|Dnca4M3(};Ijgxl+bvAQ< z-*9afeM|H%Jk$vhr3?rlUSx>3n`7H>uzsbHiZO2?oMhd^;t5}~S z1s8VTkg~N>WW9F{Kv)gQ_izqaS_Q|{QgK*|e7I5@B+NG9J}W`1-hB%YOei~yc_gj9 zWTgWJO|QB1Lj1kZwbIFa|NI6wyHyvAOnr)|*g+yO4nni#IG34p{%B3InKF8h`LYF? zByn`F~5E-vs>ivTdRD>-6i1(}T3wu<4;zF@ACoL;(R4MOm z-EjDFj(nu-=N>L=rNC{ant{|2(~u(lsI|<$mAcY`AVd7FiL>Q`ZLX8K{*>G?z}(5I zj5>aAJ-QGSeCaQik^JG!_>nw{xcM};956aGW{-ZBdU)IoQf}bqay?z{ewNXXQX|30 z(gh9od}Y%f1@=v4>M`)cBjU>>5k6)NItP{Wn=H`6_A|`onbX^Pqib|4cb^-Idhc`e zCJ71vjWS3|#||B)@Tz7R#2uuEq(a&tGihBlP6U==sHG#;|MS|(GhYxlgZk`DS$L|EY4a4NHuMhQ{PI0?%0f|9yoQh4wLI=iXc@ zpG;*0xp}_PaV+Uuw%PR(t{{Kkq$SnT3fszKHQ{ql4>Ut)ZI+hi8Ao7+QpCm5sxF6n zP7T*cm&%qeGfM$kcED3okwb5O(uFB+dSv8Yb0E@s&kna%zzyrxoUUn!;6nL}GE;Z$ z3|CvbN?bvSEsIH+ti8fwJyoosNzhSMM>o80ptST(ejwsHM+j;{qTEz9v^()}T)dA^*Paf%G1P{(6s$hnbr{N$I|;?n?X9gDmRLeL+F|zD zK6Sy~sJB|aV~*dN``i7Y0ucvi)D;$`V>8Ja)N)$f+(du9;$~&&T)7?WUhH~t!oO5-M)@=eA{h((m%x>T|R8sUXd&+PD67Uy&mFZen~QQOVM;Y zk^E5+=dRb7MV0Aqs?!*?j=^h=8I`trY@G1r$OGXk znqk{vX%^D~cv+E=1IfT1^3@vNspxI3%IA`axy@E_6A3`#+O@dWrDW>GCE#yAxY|-` z<%o|y8QOPrA}Y?|)993f`Lq!L@qIp@&ns=jajF=6&Bc5Uvm98fs72gdwuyj1E`EvY zMgh7a*ol~3S~^RrKv_t%WoknpHpU_gG|mX7wYC8JtVo4Z$I$WJ?3F;wVF-6|+mlI9|4TRMB`=tMyOJD03WXnsi(_8XQ=52pO#fZw{^v~k=r=Y)}8z(mKf*73&uh6#AR!2RsJ-h+4L zjhE5I=C*)_C){vB*XN%z|V3hL_9p+iTAn=hKPUJN%>rKMpTGvu@2&n*e6 zeE51!=Ph&RdD=ITL{U@*)rbZagut(~2O$zWiYofsIP+&xJZWqhqAs2oOPIfaOGJ}| zoWyCP#(TsmGQ10{646eC^`IjU5sJ6{+mp^KWImxl7<`L66?Irc(Ybo3`bMM!YYJ7( z;|~RJ&?{xH@XGD5(qh!*Tm1Z{7co-RCR#B%qN7swq*6vOQi<>Do*-d~w`S-IbCfo1 zJ=b7vA`wQ^ow>IWQ`Pi%{MApShX#j`F_znS{QIrn^=ZmNQW+p|CR~2h6qZM-c4U2DEVI8np+lv% zEQ(Chmxa%XmX!6vtdfSFQ$EdgSe*-IqVw$BRf95R8Ay~l5h5D!>ObHRVTc_=%opJz zS-W#_IMq_W%cn4gGa3Xv)FWU=Nk=Ya#8}cqY)*&DBF7}r(syzFZh=9$k%f`9#>>aC zA#ov)qpoo#{x#8}7mpGbrM}k~SwmG3*ZzSfPak3ksaP`xreM6$`FzTLq4EvRiM|A~ z)r;2lGO6&J3Dx=Lk<9D;XX}E}$`qk&=MA zgfd22pqgc>l}QmC42(+WH4oRjkr@^4@@Z%9lVo4c;NUw2ID|*L6IaOw*&lEATifXuqUw zn<)Y;w8K1YW5n!`MqZq`<#!Z;t@y zsMmVon3g7ux)W(V;1M9u`B`k|Cq?fogEylSCcS$j6;nE8^2)IpRI_E|<_U=7WLfkz zBa2kC&HefiGddT-gx}n$l~layn~tME;CtOFi|*SHsI?SIaye61OZoHMG-<~I=r71Y zbrd~#+_|_8Ckn0SwmaSf%r8pyHe}pA@hCSsDuYy(Ac_iCMxxTQk=)hytsQ1O9WG8- zSs=RmKPEpcu|+px;0#MHJv*gXTKbw}V|CqXaNW2x(ZzB7cK3wg6ZdSg?;~vY-ef~Q}$J%$Tmq-nW~hjUeE@<=X^57A#Pmt~;dGv|<)fP0L*{D6e5TB+BZ>>4^Ggf!B&ns*d0 zPfn9w{QurORhhg5yqfK+fO}RkdHGP5eU4fSMv~OS=h#NrY^(d(Ef8VwW#1J zRF?ZZ__szr*Vk*(w;kr}DprtNcn`p>z}frA62XBg%TBOHZP|fRrr=L_jfJDxx$@=z5?~Fj(F@+MMQ+rnfL2e6mKeq8Z);{WgiV&l381{lxQ zI}`k5_kMBDKBW!i_C_M&uqJJRDQV{1t@Mh{rji;L~Q_o%7Jq*Kj%IA;iHOP zw<8Edp4y7JIdns|P^}DYZ!Zt7!cNyfwLH}IIuA*J*nAQD#-$Bp%=WeW-cAnSii#Sv`e*!>h9+(Qi2?+}A;J~^+o3^^S=(aL z>XB1OD0*-1-1N_6%p;a;VzbTr#?MUECs%&ZwTT!!s~7asK_}-^AO2V2U@W6mH*IkI z+a#*W-GbnN7+2$fBxCYou?TUpGxNJOkO(;iMo%d=fYXQ)H{Jva--Ra?3)r6CKhp@o z23#eeL9o`lk_`o6&>m@n+w+nLucJ2uM@>(F))fR(8^2-&^R z9qxMLjwquv?!+_4zeB9NfWHOjRP@tgH`!L+ld^m5lF$w0iME~5@DW%o_}4%R7!B$> zAnyk!jNt#zH3dAsx;py$C7-v}&fDAnPX`fR0P3Tjnicx{oz>6it@l|e9KV;tfB*hW z{xtVeK}VCPs~Q+`PJa7K$}wF5;irR*+aJ+AZ{)0K@zGPq7+n3L8~ExwCXyV@ z95`B_|AjP*%Bv_yYCNbEYcZcJW<&!d6tkgj=Ok|^Dkw-E?TMN;#$OORgX1p|T3QM<2MDD~^i(_mMkS-@(hi4A9 zqBv4oLdjfJ`pJo&Ad2u8utYRznb>Gz>4U5#={0f%!3qtUzc!i5dK{DxOk7+puLoIY zPtE|m?F)<9v0R)?NBvO;!xM*hLL=7UaBy$icTj#^CpLLmGC}o^iz0LMxY6bzI^Yj; z8<&0mUpx)^KTnJp(RWS8w6mFTWrIvOq0M6xLC;Mh0>|^tPb{=-by07% z78%W<1A|4R4pqOsiG!q=4-Z%X$_@M89eB22L7u{{9CwI2iXg#m074|!X z+o~II!}np0Pyh)LsGs~qihLil5 z!od58Ay_cJZG zu{tUkc1s8*0-c7cG(!Ki@GSR8&6K#|aqz}fAlQmekTWo7 z5_W~_aAGFY!qeYmMO(#zn&ySrn=kn1>3eFM+01SNX%345lpPRfFb{N9U}3Z+<~AJBnx>t9l1FX!AbQVu&Z? zBEgJf6x*A`%e2VcTDCLKO0rC`_LrWIA?={D1!0OUPt<9x-H0S4psjC^Re(#spuB6r zpAm7v4QQ0g94%Al-aH314rP=7IC}&oBv-{M_ipcyzx}~7QkMZrku9g`^u4*(;fqb> zhsK+8p-*qQ*VoM=P1WrPQGMP2*xSlzdQxcES3Wj#{GD$F+=HL3i(S1B!fD2XcJ5>J z*MYk9P)F*j-WcaI;KipHbDN`veuo}J`5p$Wi+@D+ZU>_xk%Le=7Q-nZL-3Se|4q>V zr=VfmB`D)g5=ALyvn0!ChU`6g++~TgegslaAAwk06_k{*qEIJ=;Y^sDD3|}chfho= zfWz>=fKc#;KOZG)bzULnth=U+G75%#-WJ+wFdSI zf1LDgd+_peESpN-fjN`xytdh;nW-V?^ap1`|9`0Mi}llZz#EgAWcxWfsEOEp9*x#^ zWt_zO_;=v)r>lxD>aC}>HhK%pW^e1D>m2>`}0>rg1Hcr2N?VQrbcY+tp z%r^smDmLjF3TR@D97^05!d z%NyM?KRI@q_cOkpE2J7>RSH=;Yq!OlccZvH4LzgxwNg}2P^$}?sudN`2uOEx z4A5o&QFrHc=WrmztKPn4PcFrHji0#hm+nVNXWVT~n zi=_KonN#mSCns?GFk>bL$R8CcGK{`j_56wt8)dRit8T9Pj`vR29V_=HxD1a`bK-ht zuq!Ik+W3kYD*I4Zy+Vq7XkFW0V-g-Vipyd@E~V*&mv+shH^Tz%8q5 z!uABpzvV-5IC&l7y`v}+@G<=8dfJ4WsFB`0_n6dA05tKl2Rp%IoB||_ zN?Gn-+JLPl`X#2?PTq*Sn4*TZq1NIYu(5>x7Q__95?MPTAF-> zyo!ly{OzoB8+OLXsW<%8NNNi-;4V!xD?-rT+VQ1gO8W{802bFr#Go8eW%EVx!ynVa z)^fkbo{Q9~e5A6e04MIAdDfNpL*EtYP@Vt#4Y`x^jm z5U`JuvtY7e*BG#~lN^B(x5dh%A`gCY9&g}%QCdP;-&KssfL}*uyE_U^{Xysf<_j5Q zP5$57`_8bYzAf(nD$+$jK$;**2NeMUDJm)*rG*}l-X%y6#R5ndY0|q$4ZV|41ccB9 zLdO81mxLPnd-%`2GtZs5bLV~Lc|X1%2s!8Mz0W@D?6uZ!wVivSmgZg+mneifultfA zmadppujJD|tb644;qzw`wwctvw~*lPGk59T1wZ6?T`u=Y9vJpvuSp}h-PFo=6(vGX zo=0LNmQFn|6F}Qw4qNn>PU{#v>ZeMZ_)=xEGibf+~o9d>{&TnNO zdPz`FI1-OcldYFHxsLn>Xnh!wAo%x^mVYa3`DdSV4+!-Q4ZuzuVPa9Cjcx4z%Ib*& zkj-;l*U;O?~|Qc$2Dy^vt^ zx=-&Bf?Qr#P~|Uj4p=0T3z2Bmkhh>e%+#kUYPkDx07@JDRG5H}`4+z57)Nk7rSy~v znu(E)PJvyUHHd%3_e>M|V8|ow=f-`IdCg#!^2@KizJM`dM5c_BOr6TAzZ$+$Drzgb z8sxwsdS$wgTW_)AYReK6bau`ZdfmOcmQd#o+@k`hIZ&Uz78JB@zs?sB#?L4!8&kTm zP+Iy)nfa^x>K`T-A)l|e3LDw}X4zB*Nr@DEiLIoo=j=3Pt-iu`ktk+$yYhqc59;I? z%}f{9Xcua?>$HOopLB6%l#DuEipt>3Tn|bOJiU375bsRN>f7*sKPajzwJT-nse*zD zS$CY_6vXrSqtq5?!Bfq0N}tsd(=k}#TWq{5b)G2w{9I{+CE&^+^DG7o9C87mSmpoz zGwa?%{de>lx=yXja|>UJcmyOcE0`C^BIyhL-lKYhjmo>!%P=O6XAuSf%L}yfP?#z^ zEC!!dBR8hzvhv&+S+yjA{%{jUmrDLq;q$FfP5CW+-<4q$-8DA8AVu!$%B=4%qv!_` zi3bgURrxVjf?@S!r0>?{bh7%&%UVQtLti!}`><5uKUW4Bb7v*oxy5OgsCHF2pw%1- zJXG@^3K)*L>T}e?U_Bs*E$u^phJ38zrPm6S3+nam9j#1e%!7fZol&2kPK@ac8yN&* z^SFV+s#~@upRpTWk2wCMU$?|v{wDl-IrsTp8#4u&IhlPzxQ$>@uvzQKhNB)GrVg#B zK(9@+eGM)6enFLd+goIQbQ$E7X!phM#a|M|Xmfs%{iDdhUCQOk@82X^mO|LKc>w?w z7zr3AfIT*L>iF|p1pTRH_@kLa7fxNkps4qm5b^_5a6#Qw*_{Vj3u!#RuF)Rq1JxXW z2?tbheR_{4a%O+OYehD3l5}9o9Z0%7ui9?gifq( zcsDCTq;80-l+M*lJj-$gaD#RQ^J+?SX(sLVx2vBOxD>j)K1F>#v0fOzs#^{Jl%xNK z(NC1R$&Wc+LZ!4c+xF-aqntVJ@`#bD)BUGq&9LhYF4V~{6c(EApV%GQSit~!U8Vb;EJCtCnW8eXrr~NF%sDWEcQ>2_{g}0yq=H&;PF8DGNdvT z?F5)e6;yJwPvH#ZqSqDQt=N#`MhqP86Fzi@{rPSGh1dC=k7RkrrTYq8_piJ8*>KTD z(*btaEBEZ4W75YGx8To-m3H{GWtp0re>{u8Uvhs5;H9=CCbNAj3*t)k5<{z@4vIXn z&vY$Qx3j)jc6V?kV+L0kf*W7Hwc1 zfXrYm03`co0`?*;^&id$c;W{F$SlQQB=97AtZIgr6t*t3HCKPUaCOWuv$YX|j2f3W zJiHPZn@*W#zfgonN}e?R1><+yjKU>u;vC*y?LRwV=#W+ISl&MU#=7S*pLcJ{>UiDBXGSxqEUWO_{zuA>kh!ioi^qo#-hzv*0K69s z{u}gPG$HM{!85Nk=y?8cf(+maTCZOH=HADPah|ICHyER*j-FbhDO84cTY~j_V5p?+cg}nt`WSI9rKYqxNQVj zxNOprnRPEm`kSE8SC}R9r14~(%OE8&{G|47PUlu*5jOA29xkGt%>dPL6~g#UidL8K zbNEPt9b5S=O>=#0hn$8TtuTTNNr6V$C4fK;_JtUq$6^Ma(-_x1p2qcit?0|Et>E~P zpCL~Iqf&-8&txxwdL7-s)`vqunZGB(X6MNuj5h4DO0MQN$)aqEJX?RCh`gkaG?{9O zBMBfkl&!NoOo5V;R-LT(A8>nL$E=;t> zAy36{F%Zc2DQ=UUGaV96eFxQ<({?PWs;q;qdgUzu&Tsb_*M~sT1nuc{&MKIY16n zm^I?mlo2HY$kZO7jEyhbESZ`mnu7}lDizC}|B`C*7MYxu<9tJS(|-|HEz%&+itb7^ ztW6;TRa?2O_fkblxcBR^`M6HX`GY^vfJz&5J778M>}#^1fY-oOnt3;ZMdS(xiK2?+voo6jHKL6=#OUN7)}r}@mJ z@Ggv~YP!rqv3j0=WOIiIbgZ0=3FCW!xOIov4U-)4Xq!?^*H?tO99!#{a~s>u_xvtP z%GhNK?)jpCMDg0enKdEUz-!2 zbsB&4l5sU5uAi43_bY^+L{gGlV?$K{+l{BpM?B-JQpfmKB zfOM?Gd?F~|)DDFyoE}L`b*Jd;Wd-vI*}Q8mG{tUqtLDIrdiS4?K108CXGF`l*)X&w z4CDkgGBoIPe%!v)X+K(lzb^~f(7uoDE+et4wPpYfh*q=9GN?P@88n>m1Y@*{8F5>FaqlnyVPpR-Mn+I3*YU~6{*Y+W!lbB`IJ>6dH7^JAoYJp6_&?^ zmO8!xTVvS1l6#$mM$mK_l3NF3PzuM%tSXm4yGg~tBI)qDg4TqI+a_*o-f$HnUz4+hn-;Ou#WAC$r9i0Tq@M;2O?xl-T*9HeuOv=o4`AKzpu zu1m@E*UnYA`)njZlv3I~48_cE9zSGb0h9US7%Wmq2x#*AKn2QJs$xLEU>Rpz&i;IQ z`f4w(bTgJts=vZ-ujjvQN=3fYweG#V&WNRQJw7(x_Kfe&)dU-wiJ7ekbH)3LW zjk$Qse^|>GOP>DUmwc`*!OF@CDF6Lf7IkH!E&LxY{s%vdV{t;O8|G$#Z4ocD87K8x z|B@lqJE|bi>IRgs_)z@%Xh^=0pqYaLrdSXJGJSY)2W7?}k;1Stb8kc~#k;rM1tEu_ zcfuohVQ-$UXm#$jn$9nQKm)4iz^!f#QZY{lRq&$gPpqfuy8+ zt@s+TgqYam-wL~z0|nAZK=PtK*AYQHH3}libvcp2QOm<`u=Y@8cACO>vMQXgs_2HS zbm|~C7*~yb`Xx}Q+=db%l83RXR!;^R#cdoeE;%n+WbSNDp~A%Sn&7Ef6_WgjcJ$ZS z)TSRRs2TCwxIs$f1p_q)7+NMCJ`P<5M1ZM4y#OpM?;ZC^;~OET2Yn^#pl027U_$Kg z_T`LL5e2d6zLjWpzJ#=auG{@+*7-u&I_$>$$CN2zkPRwrsxEgg0!*GD8Y`@Gl_qle zXMR+ykgP$iD@wZ;OUdJQf6^`y1fqWnSO2@f`Nx;^AMfGsa_Qbcck02erPOy)QTRJ7 z;Q^bLAHFpb<_=IjsB7BGxxa06Q&0afaw9z*M-*UIo*uc{(j(xVf^0w+4h_$rOmFu% zH*7p1+;}J>C5Y_5Jy~v{9}j3a=jIVltB>Hjw{QM{rEci>^OlUCY!*p^c0UX`6ijXm zdvDqiwtv$e$}p7ekTOtS!FsIE9kABrcfi%2!?0+{vy2ZdM0*MGSTf!gwF06Hp-;|e zZu(L|{dn+uPvxrA?z_Z+i76g>zpF&l>Y#!u@ocYPncMFhzZ<`dx9pXh+S1%lKmJbeHqkP%voAj03Yk)T zd}ep#^H(1ePnE9W-=CaGu6%NSGI(}H6cH-`x9lS4PC{1hro1Oa!ta18w?`SBSDF(^ zj@-8=lOTz3KOBB3$+wgrK-Dmo)l-}$*S45cN5a)#<$_*@eT#E9fhUg?ScHN0mHE6$ z`&b8PwB#HPjaqBU*l8fT`1h@esi%Xh_BU^2ojR^}2yRmEU6%z(TiZG+so1MfajbEB ze>KB29BT|UAR$a1=lL56d+!LE?V_SAy<^HzRSdEM88@UAh)jRSkH+s#jW1pNt?@#m91t#<(bk-`1XCnsZ$fYaf zOOOb(R6F%D)Y$69#g+6|u-5%nb3zXF-A6d6`bFZ2#>}elKJy(c$)RbL8m$L2X!6W@ z+Hr)0h|o^Vk~qw6D^Mi)RkN^BI-`x-WLy`gm$;O9OobHD`qyrPqqz5w?A6&_2tBdb zDdXhM_c{&o^W!d8$9^s!0ob?_m85Pmdd3mP2J!N+$vLZM28}tz;U`shbA)LiSeGVh z^%u5wXKpLga$h!2vT$y;qX(E-2S*tRTbkB{uZE#B0~Rbb%=QO;LbA`rYrDii4hgwc zcbd*t)>45Kldm@tmc)>c;X4U5tIdg9D-m<(ox_n-{lP2Zl-3iqM+t|8|K*ValH+vzAB#$ zq*C^>@sY|(7ZigZIxt{;wjP4J^DI|Ru5$2d!JvuS89M-ij8Pe}?yiV~s@1I}XGJal zyS*m|5wjU~2UeE5>?Lw}?^59Ho5N`r5^Af8QkhRX?n!sAV$8YUY1vx;Lx^YgvfBA` zx80n@_l_PiH31j0V1gWi75+6#jqY5Jd39>fvN>}SH8g*v#!Da&-cBZbfs}-#sMGy; zjL)5XhfCzNJXP&vf7{c`gfIhlIe5n|n{Rs}dj=mmIbRXZ=4c9= zoqFUwbmS}FTkA>zS~o{Y7PETmYYa&w%VL#|zUxvq2?{OUe0-#6KQA}9t@W`TU%o&0 zU}2-q6&15eFh2RdOL*cV@X9+v@?iB+z$u@{a_-a8Gs5z4GT*Y_;|XpMg=vx=tO|C(W0skZ(aa!Ijsi+U#}fmY>dk8QUIurklBUsiOkv8N zBcXQa@id;mTvd#FW$Q*o1Z;C z9>i}Q?YO#v^L+;(|F^Z?fI)7~!}AdA+Wk8YFc0K7e)r52@q-i#LLk9|G5bmcaoR$v zgx@V3)f+1~wbZKuus3$6EKyJcRSiD(b+16uDEl{M+vAeh{kane=!dBSA!pTo(>+li zBY?7-`O-};?v8A;$Q;wEa5i!OOef)ZX)^1=ITx> z#EU^1j0{x4I^Ld64ms_vM5ap)r_dm`PtN97f}PdPZ=116ia`jWIHIxJhD`y+-7ENw z=f%?|!>i|K(n4~3$XF4-rs_r?9uYvwHiy$RBT7@WHV0H#X37NtN(a>l`T(0?GSmnZ zGWVY;+e_DNG5{ccd4Y)oLlRKT2{XBbh4RN7BrSb`k$4RvCKEG z=i|F_4#(vUT(H!sxsBg1-Y?DP36U{u8ur8cn2($>}P^TjF zkqMQCgvp3%CGw379l2hvTOkvP3s&^?;Y}GUeLLKJB9Kf*6D}9n$VqS8o8^%;IjB-M>>I^DcOTRQjBG&9}2)EXiM{fh{0x*-8V*0oFxCzVE>+45Y4-h6eD zccj0(I?ax`xoseZq4=>8dFNR<8#v!Rodz@po}h%NM&mE@(f*);G|bx98iCdM9*loG ziHDSRf4xJ@U{>UvY1AnIN9QT_4nJVoL77h`Q$jR3Ckr#Xs?#VzW5E~5p4Vpl6Y)$p z^K4O;pW&IFuI7tDKb6yLiak`fH9d{zf;d0(G6#NG%rlemObeENKn#ElY0`57@fnQ_ot=#>E)1GA8G}Ud4{;3wqS4zfVv~&e zG{$Y?#zrJm**aGtPk|@f7cfZLiy+04MWTzW0l9*h$bZuvXHGi&wjTi0)($eT{LidW zkZgudLV*=j%~EVbYOQlcoB`2VqP8`VlM~J*`_ievU1l;7pG)uJK=m`99kg376fA<3 z+O8LiR;k;rcKe|Cd`!Hou%h&?Qs861_Kx5Mp}>kZoMqOjTI3yKkaurMkVtZI)1yo- z7+d;OIeUfbPaaf3ZDVE(&eD9_kfA{Zc%hDK4N@_jf!RcwiRLyHm@Fc>>k_^46e zfLuY~c2u3P}4Yg!-@c>A%B8<=?p8 zo*tlR`ieORRb?vQLMQNM2UQB>;sEPhxSs zwhr7ybXtabtz(~C4fR2wW}AyaVudLox{T(XyD%5VC|?(v2P_kOF1tkb7y5sT3XUqm2Jt)Zrn zlY#=Q_PJqH8crc5u}~#88jivI_HOh->|=J_6)?Ee-#LLvVs;sfV>4mL%jSH@^vkr!6aqt|<)mPtC zk31j(@%}MM{TGJUKg0B^_Q;_&Ya08*{FV|{nsk|>m*J$^ z_7|)D&t$I7e)#?}7<=GlVF&>Cua@K6RJAwz9dO+i3M6sxil$YXcCqByR58*3lhTvj z()je7!!f(PO(t>Q0iQ{{wcn&8xGf<)^4C`W=Tx~LruTS}=8VXtUut50j{I{1$UZy( z@2P(vD+M*=$(%H)K#qL9-|MHej?0SvctwVF;$&WQWu!g&ZF6a@$(~3^fPy%@c z;+MnT+MBahRgp2=qot#@q~04u8PY|oJG-B$(S0`&dKM2Y!hQEI7=JaKe;5Q}47m7>fd3KFbGM=+)2JYa z53ZnI=RBGGh9_FS0$2&&`|A~e0VA(-B2Fh0f~(4wXam>F_CpucCF)L^ z!pc>S2D!qMFu9@amX)2(*eqfQl`U3M61`SO=stV7Gre>+_4*zIW);Aiaf4~7l*l1af+0CO@ z?<;vf#@9pP#=qw$0%v54gEgpDF)K&RbLxOmA5bkuKJ{YIej^2XaoXNhy1K6lK=m27 zt1>5HyW9*O?-ysrqjelV11LvImjT)PLPHWu;}1cRLUhy2VQ$`1FpgAK?MJL7KwN2g ztc$EyroeCWA8_VG8cxP<$?{_Q!Onu40|w$R2=&dwA*HQ6-$#*n-n{nR*f*VNU{74_ z-GVc8wG=D;=m*x? zAHg#ia}{zB{9nK*me^fsXgfHNVl@4%t0b*Qv*zX}=dCL0*_4hKtx`}s1dajVD{#DP zH=DO@n_)bbx@q`Nyk)vAcKnGD$4RvAP*|XJjdtX*q|EqumB?+FaR4(%K$^$i-kzvD zOJtkDc&_~z;2QszkaYd%8KC&8gMjBz-<)d20*g;9S5!k9**>x9^%bFCTi7caT;n@# ze4$e|^#Nz|M>@xP>!Qe}x_|S$y#HVMoF`}?e!AHt?E3E&rk_#Fb4pgW(e#W^yh*-LXqfMvvTf6Qv>MPj4n9u&jcF8A`!d5S%rCOAGAJPX}Z<$VQ1 z7TmuEmZgh>51Pm4Ug4kv4UkMwKrqVB+Jo)9!kSTCR`=j%gTaO4Qw=DRy5^Yf!7 z@(wNjN@2JyIvN|rfb8R^EyYqYnkS^kuX)ldJ`A-{E-?rEHQMLPfM-@$jX-SIVBYn` zp;M<|dWi(IA1B_%sAU0rqI_w!Rf5H3fjOz@$mD?q%4JgVWp|ubsH*r~Bo;+vC%u8*}IpiE?y)08|UU4R~`Ox&Ftq_rNz)fjF6bcHs-yop-!L6!3tL z#J7PP3Pq(iZbT+amS`FbEC+yFx~Jn36%T8ZHo}U6OEBxgCGUd<`9FzdDp7d}xEDtL zD-_BP>>4eQHZ_NDNMfb>1?5U|tSc@0Zft$}X!?6Ac&uuLEh#qk^-n;hj+9tS1MVcQ z$l~{pMo0ooYJ@O_Rj=H1Ed?0NCV!UnwMug{Y!et*IKI}<_ffYcgzQU5#$N?3iy6{D zWFf9yPjv4ibI)u}U78%K_vb!^;@n_Rly}bq+H}Ffx$PkJ)`WBbzZU>HDeAtuJ!)}pGv|+MMVK`bIVvK$%a|S{}_4sC*bv;1!(?%v%h+IZis5;4VI{T24jvHj=5ZYp6E{D$09R!s_zlrD)z#l$ zMzOC9X1_ErHnzNIn7#BO-__pUe$~*}SVuM;-QBJ1wE(TF$Kx>1fYoezuipKk9oTYm z`>;_L3?2c8PHbOJvUed%&=*QGvNJ3D3T{sMAFW-~$Vn|1%`zy99@j{hYaI@l9r^^FESG|qJ) z{w@ao?{*sz-h`B+seCpLhzv~quM=l;l^+0Vx?5XH%iRFfp#va6!@L5|X04B6%o)i! zZ%P)*9;6)kl}Zl^L~*1DG;aOU->cKQxVSs(=lk(0F{r?S50>C0Gc2KQB-~-0@T>;I zThtF6jOH5B)Y$tFf%favf{H;lzngeu+>s^{EGGKPaRTOa&}&FCjqT%0lL&b zvVYxoK>Yq0O2n$#=NRag7}<7!J|}dgkva&>=Rd-efMVR}5l9~or~bAow%fpn(p54< zAmfq^TvJTns(|se;teKA!|HnG%P9@7wB5V32%* zod8TuLuk{t$lWvr;pd-MBLd1mRWcy_eP9OD9;q|Boszz%?JKD>2vC4aU(K8=r^GK}$euzLm$$6WixC`l!ahhA3o^XL*;zjAYygAp)f1mNz;n{dRD zU2mZ^gNvZPE*5||;rvy%?UM&>ki}<%J&}UG0$(`|-FfTIB2IqZxuHB&Uo7XEx7!<1g+Z*ZUkKyzRy>EAx#$a_D$_i{Q0VkNS zA7(Rf++~QH)tU-i!=r?REgtJN`JfrQY{ch&h4k>#;YZewgd#%~t$3!lp^k7!U`-D% z`)Wc>WuLm@y#9!Y$fJ^pw-%kxpxtl^ev_FeuRKizX$76lc^;N@>i;HCLjb;${7Cj}Ze;LI>S{{Dt&?qUn4 zReS7oj7Dsl{;Sb8e8c7?)_BI2#y54IT3r z66D*F70SicmK7Vbe`cYF2}PeZ+_A`X2i3D7WMIL$_z3EUPihB4rN9{#kq|)tUIlnR zK(Ht$JE+=_Ca1c;o14y1lAo`)vhSv~x3$_(>LixV6d_)g!%!St?hdwobgD2^ZX(!w zO8{`A7=s#zT zDu7)7nn(BvCGbDv(FrU)^cgJy=qZ}BXZ?M_J4~+jI+6aF-pD#HZRs$FF|Th~KCbsg z%4&>hQofO27;eOWG2stue&i z9$T8>U+-&lvp+p-XPz#$7o}=Dm@9r^f1t3{D48pJ@Ljmrl3}wBr*py~BUfzJnQi*! zG+3+K?dJLs1@GXlr{c$Ny6gN#KpX&{;Q&!!X7FQ*bN3bZ@1LkCpi*v^5_=Q`W~fmM zg0Fh%gf=WacAvI(VnDn=8P2}gd!Ikyr<2~$>xgJU2O6iQ%?WF%#E;k#><|$A_}XaG zip%KYWclH~Gp(%B{1Zcj;tS0e(cQ-B#jRkNG3TfloJ1UuR(|KdZj{UlY|I$x7bf+J zCE@o{ZSTz+*1_`%tzeQ(;`?O?27!pEh4DY@18EZ@KoXO4`^t0$?aP@UIU9psLZh0- zwI62~iDEN2xb64voBJi_R?{ak_F(^yxQ)ed5!x?UO8ff3l3}4hw9eBY0 z*^<0L*Tb{}txGU)K&kZ-xNU*B&sOR8ykKnciAUKJLM$bNpCn3QLE!A`l}htqbtk@v zAu^$_KrsI_R8dT>1MKfkY~jA1 zP!+(mHas#*2`QMRd)4@^`A)LtR0Ln{i%vq2n3ORA!E+6Lq@vtuw(3s+k|4&}HTLc| z-q_M_IudFHOLc%BXXb7)&F+>q&SZ3;f=MO(!<{|f)f3w42}vhKT&E187xDi>Nc5ab zBQWG>l=Ue4ygd&r)p2JL!swUC{FzaFsMYh;Or#Yo*BsVPXK<5s-d+x-cEN9uDYqGp zL>(^ya1#WuV}+uuPsj3dlFmo>P`oG5#a~+oH>|_uecTtJLEWz@b&t09k~&NHVM1Vk zUF#J*SnfBAM`+&L8U2BpDL&twUZ47EO<2oB($I?GQ6Yy~muOj0T<@p;)YUl@bCOX_ ztQzkh=2wlo&no8xrBM5Pda@h$3h`gGWMkf*wjOj>$Ow%i_Cy)h{NM60l&^Vkiuw0< zkHDK`OBQz?N)}dd({aSlE=7wz)|V};z(DQ&FCOJzPA(&<5uAj~zedlLQ_9KocKKuh~yo; ztkRK&Tm!;?UgAM6@~l(C{f#s+Xg?&fjYnzru)XIj3}}wn2}|6V@dIKiR$9O?zkDF{ zk%y-l6j`HoCmC;5w{mxCYFrxtT$ryGtnpQN+WUud%JN)=%**e)5p)S|E2C{26DB}! zCl!oB#>siSxh1;)mzdEECQ0 Vj13dO&-Q|po~tXAJT?9Be*g*8CG`LR literal 0 HcmV?d00001 diff --git a/screenshots/vote.png b/screenshots/vote.png new file mode 100644 index 0000000000000000000000000000000000000000..bc583c6c9ca4819992af2a02648dcb42f5245f7b GIT binary patch literal 164357 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%0A3yd$#CSRT#<=k2ha6@*BCiDvk;@kJxsz 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 z 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 + - + - @author René Gieling + - + - @license GNU AGPL version 3 or any later version + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see . + - + --> + + + + + + diff --git a/src/js/components/_base-CloudDiv.vue b/src/js/components/_base-CloudDiv.vue new file mode 100644 index 0000000..1e4e4c7 --- /dev/null +++ b/src/js/components/_base-CloudDiv.vue @@ -0,0 +1,73 @@ + + +/* global Vue, oc_userconfig */ + + + + + diff --git a/src/js/components/_base-Controls.vue b/src/js/components/_base-Controls.vue new file mode 100644 index 0000000..f1234a0 --- /dev/null +++ b/src/js/components/_base-Controls.vue @@ -0,0 +1,106 @@ + + + + + + + diff --git a/src/js/components/_base-LoadingOverlay.vue b/src/js/components/_base-LoadingOverlay.vue new file mode 100644 index 0000000..dcc982b --- /dev/null +++ b/src/js/components/_base-LoadingOverlay.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/js/components/_base-SideBar.vue b/src/js/components/_base-SideBar.vue new file mode 100644 index 0000000..1c69330 --- /dev/null +++ b/src/js/components/_base-SideBar.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/js/components/_base-UserDiv.vue b/src/js/components/_base-UserDiv.vue new file mode 100644 index 0000000..73668ab --- /dev/null +++ b/src/js/components/_base-UserDiv.vue @@ -0,0 +1,129 @@ + + +/* global Vue, oc_userconfig */ + + + + + diff --git a/src/js/components/dateFormItem.vue b/src/js/components/dateFormItem.vue new file mode 100644 index 0000000..aa22fe1 --- /dev/null +++ b/src/js/components/dateFormItem.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/js/components/formListItem.vue b/src/js/components/formListItem.vue new file mode 100644 index 0000000..9b0b372 --- /dev/null +++ b/src/js/components/formListItem.vue @@ -0,0 +1,503 @@ + + + + + + diff --git a/src/js/components/quizFormItem.vue b/src/js/components/quizFormItem.vue new file mode 100644 index 0000000..fa13f53 --- /dev/null +++ b/src/js/components/quizFormItem.vue @@ -0,0 +1,86 @@ + + + + diff --git a/src/js/components/resultItem.vue b/src/js/components/resultItem.vue new file mode 100644 index 0000000..d3b745e --- /dev/null +++ b/src/js/components/resultItem.vue @@ -0,0 +1,360 @@ + + + + + + +x diff --git a/src/js/components/shareDiv.vue b/src/js/components/shareDiv.vue new file mode 100644 index 0000000..208736c --- /dev/null +++ b/src/js/components/shareDiv.vue @@ -0,0 +1,173 @@ + + + + + + + diff --git a/src/js/components/sideBarClose.vue b/src/js/components/sideBarClose.vue new file mode 100644 index 0000000..cecd00b --- /dev/null +++ b/src/js/components/sideBarClose.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/js/components/textFormItem.vue b/src/js/components/textFormItem.vue new file mode 100644 index 0000000..901ff2a --- /dev/null +++ b/src/js/components/textFormItem.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/js/main.js b/src/js/main.js new file mode 100644 index 0000000..b727f30 --- /dev/null +++ b/src/js/main.js @@ -0,0 +1,78 @@ +/* jshint esversion: 6 */ +/** + * @copyright Copyright (c) 2018 René Gieling + * + * @author René Gieling + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +import Vue from 'vue' +import router from './router' +import axios from 'nextcloud-axios' +import App from './App.vue' +import vClickOutside from 'v-click-outside' +import VueClipboard from 'vue-clipboard2' + +import { DatetimePicker, PopoverMenu, Tooltip } from 'nextcloud-vue' + +import Modal from './plugins/plugin.js' +import Controls from './components/_base-Controls' +import UserDiv from './components/_base-UserDiv' +import SideBar from './components/_base-SideBar' +import SideBarClose from './components/sideBarClose' +import ShareDiv from './components/shareDiv' +import LoadingOverlay from './components/_base-LoadingOverlay' + +Vue.config.debug = true +Vue.config.devTools = true +Vue.component('Controls', Controls) +Vue.component('PopoverMenu', PopoverMenu) +Vue.component('DatePicker', DatetimePicker) +Vue.component('UserDiv', UserDiv) +Vue.component('SideBar', SideBar) +Vue.component('SideBarClose', SideBarClose) +Vue.component('ShareDiv', ShareDiv) +Vue.component('LoadingOverlay', LoadingOverlay) + +Vue.directive('tooltip', Tooltip) + +Vue.use(vClickOutside) +Vue.use(VueClipboard) +Vue.use(Modal) + +Vue.prototype.t = t +Vue.prototype.n = n +Vue.prototype.$http = axios +Vue.prototype.OC = OC +Vue.prototype.OCA = OCA + +// CSP config for webpack dynamic chunk loading +// eslint-disable-next-line +__webpack_nonce__ = btoa(OC.requestToken) + +// Correct the root of the app for chunk loading +// OC.linkTo matches the apps folders +// eslint-disable-next-line +__webpack_public_path__ = OC.linkTo('forms', 'js/') + +/* eslint-disable-next-line no-new */ +new Vue({ + el: '#app-forms', + router: router, + render: h => h(App) +}) diff --git a/src/js/plugins/modalDialog.vue b/src/js/plugins/modalDialog.vue new file mode 100644 index 0000000..43cd6aa --- /dev/null +++ b/src/js/plugins/modalDialog.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/js/plugins/plugin.js b/src/js/plugins/plugin.js new file mode 100644 index 0000000..4047c86 --- /dev/null +++ b/src/js/plugins/plugin.js @@ -0,0 +1,30 @@ +/* jshint esversion: 6 */ +// we need our modal component +import ModalDialog from './modalDialog.vue' + +const Modal = { + // every plugin for Vue.js needs install method + // this method will run after Vue.use() is executed + install(Vue, options) { + // We must create new Eventbus + // which is just another Vue instance that will be listening for and emiting events from our main instance + // this EventBus will be available as Modal.EventBus + this.EventBus = new Vue() + + // making our modal component global + Vue.component('modal-dialog', ModalDialog) + + // exposing global $modal object with method show() + // method show() takes object params as argument + // inside this object we can have modal title, text, styles... and also our callback confirm function + Vue.prototype.$modal = { + show(params) { + // if we use this.$modal.show(params) inside our original Vue instance + // we will emit 'show' event with parameters 'params' + Modal.EventBus.$emit('show', params) + } + } + } +} + +export default Modal diff --git a/src/js/router.js b/src/js/router.js new file mode 100644 index 0000000..fb89e71 --- /dev/null +++ b/src/js/router.js @@ -0,0 +1,89 @@ +/* jshint esversion: 6 */ +/** + * @copyright Copyright (c) 2018 Julius Härtl + * @copyright Copyright (c) 2018 John Molakvoæ + * + * @author Julius Härtl + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +import Vue from 'vue' +import Router from 'vue-router' + +// Dynamic loading +const Create = () => import('./views/Create') +const List = () => import('./views/List') +const Vote = () => import('./views/Vote') +const Results = () => import('./views/Results') +Vue.use(Router) + +export default new Router({ + mode: 'history', + base: OC.generateUrl(''), + linkActiveClass: 'active', + routes: [ + { + path: '/:index(index.php/)?apps/forms/', + components: { + default: List + }, + props: false, + name: 'list' + }, + { + path: '/:index(index.php/)?apps/forms/edit/:hash', + components: { + default: Create + }, + props: true, + name: 'edit' + }, + { + path: '/:index(index.php/)?apps/forms/results/:hash', + components: { + default: Results + }, + props: false, + name: 'results' + }, + { + path: '/:index(index.php/)?apps/forms/clone/:hash', + components: { + default: Create + }, + props: true, + name: 'clone' + }, + { + path: '/:index(index.php/)?apps/forms/new', + components: { + default: Create + }, + props: false, + name: 'create' + }, + { + path: '/:index(index.php/)?apps/forms/form/:hash', + components: { + default: Vote + }, + props: false, + name: 'create' + } + ] +}) diff --git a/src/js/views/Create.vue b/src/js/views/Create.vue new file mode 100644 index 0000000..01ef15a --- /dev/null +++ b/src/js/views/Create.vue @@ -0,0 +1,708 @@ + + +