Merge pull request #315 from nextcloud/vue-create

introduce vue
This commit is contained in:
René Gieling 2018-09-16 20:27:15 +02:00 коммит произвёл GitHub
Родитель 3c00b33eb0 f717114bbd
Коммит 763dab46b7
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
109 изменённых файлов: 3503 добавлений и 1651 удалений

6
.babelrc Normal file
Просмотреть файл

@ -0,0 +1,6 @@
{
"presets": [
["env", { "modules": false }],
"stage-3"
]
}

1
.gitignore поставляемый
Просмотреть файл

@ -7,6 +7,7 @@ css/*.map
nbproject/
node_modules/
npm-debug.log
package-lock.json
Thumbs.db
yarn-error.log
*.cmd

Просмотреть файл

@ -3,7 +3,7 @@ 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.polls]
file_filter = <lang>/polls.po
source_file = templates/polls.pot
file_filter = translationfiles/<lang>/polls.po
source_file = translationfiles/templates/polls.pot
source_lang = en
type = PO

Просмотреть файл

@ -5,11 +5,29 @@ All notable changes to this project will be documented in this file.
## [0.9.0] - tbD
### Added
- create/edit page
- rewrite as a vue app
- improved UI
- introduced new NC date time picker from vue-nextcloud
- added option to forbid "maybe" vote
- vote page
- made polls table scrollable
- show new vote options after voting
### Changed
- Compatibility to NC 14
- Introduced vue
- Changing database theme
- Polls 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 poll' did not work from poll's details view #294
- 'Edit poll' did not work from poll's details view (#294)
- Bug which makes voting impossible after edit
- Write escapes option texts to db (#341)
- ... a lot more minor bugs
See https://github.com/nextcloud/polls/milestone/9?closed=1 for all changes and additions.
## [0.8.1] - 2018-01-19

Просмотреть файл

@ -49,12 +49,20 @@ appstore:
mkdir -p $(build_source_directory)
rsync -a \
--exclude="build" \
--exclude="tests" \
--exclude="Makefile" \
--include="js/vendor" \
--include="css/vendor" \
--exclude="*.log" \
--exclude="phpunit*xml" \
--exclude=".*" \
--exclude="bower.json" \
--exclude="composer.*" \
--exclude="ISSUE_TEMPLATE.md" \
--exclude="karma.*" \
--exclude="Makefile" \
--exclude="package*" \
--exclude="phpunit*xml" \
--exclude="protractor.*" \
--exclude="build" \
--exclude="css/*.css" \
--exclude="js/node_modules" \
--exclude="js/tests" \
--exclude="js/test" \
@ -63,14 +71,13 @@ appstore:
--exclude="js/bower.json" \
--exclude="js/karma.*" \
--exclude="js/protractor.*" \
--exclude="package.json" \
--exclude="bower.json" \
--exclude="karma.*" \
--exclude="protractor.*" \
--exclude=".*" \
--exclude="js/.*" \
--exclude="l10n/.tx" \
--exclude="l10n/no-php" \
--exclude="node_modules" \
--exclude="screenshots" \
--exclude="src" \
--exclude="tests" \
--exclude="vendor" \
./ $(build_source_directory)/$(app_name)
tar cvzf $(appstore_package_name).tar.gz --directory="$(build_source_directory)" $(app_name)

4
appinfo/info.xml Executable file → Normal file
Просмотреть файл

@ -14,6 +14,8 @@
<admin>https://github.com/nextcloud/polls/blob/master/README.md</admin>
</documentation>
<category>tools</category>
<category>social</category>
<category>organization</category>
<website>https://github.com/nextcloud/polls</website>
<bugs>https://github.com/nextcloud/polls/issues</bugs>
<repository type="git">https://github.com/nextcloud/polls.git</repository>
@ -21,6 +23,6 @@
<screenshot>https://raw.githubusercontent.com/nextcloud/polls/master/screenshots/vote.png</screenshot>
<screenshot>https://raw.githubusercontent.com/nextcloud/polls/master/screenshots/edit-poll.png</screenshot>
<dependencies>
<nextcloud min-version="13" max-version="14" />
<nextcloud min-version="14" max-version="14" />
</dependencies>
</info>

Просмотреть файл

@ -1,6 +1,6 @@
<?php
/**
* @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
* @copyright Copyright (c] 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
*
* @author Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
*
@ -9,7 +9,7 @@
* 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.
* 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
@ -21,19 +21,21 @@
*
*/
$app = new \OCA\Polls\AppInfo\Application();
$app->registerRoutes($this, array(
'routes' => array(
array('name' => 'page#index', 'url' => '/', 'verb' => 'GET'),
array('name' => 'page#goto_poll', 'url' => '/poll/{hash}', 'verb' => 'GET'),
array('name' => 'page#edit_poll', 'url' => '/edit/{hash}', 'verb' => 'GET'),
array('name' => 'page#create_poll', 'url' => '/create', 'verb' => 'GET'),
array('name' => 'page#delete_poll', 'url' => '/delete', 'verb' => 'POST'),
array('name' => 'page#update_poll', 'url' => '/update', 'verb' => 'POST'),
array('name' => 'page#insert_poll', 'url' => '/insert', 'verb' => 'POST'),
array('name' => 'page#insert_vote', 'url' => '/insert/vote', 'verb' => 'POST'),
array('name' => 'page#insert_comment', 'url' => '/insert/comment', 'verb' => 'POST'),
array('name' => 'page#search', 'url' => '/search', 'verb' => 'POST'),
array('name' => 'page#get_display_name', 'url' => '/get/displayname', 'verb' => 'POST'),
)
));
return [
'routes' => [
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'page#goto_poll', 'url' => '/poll/{hash}', 'verb' => 'GET'],
['name' => 'page#edit_poll', 'url' => '/edit/{hash}', 'verb' => 'GET'],
['name' => 'page#create_poll', 'url' => '/create', 'verb' => 'GET'],
['name' => 'page#delete_poll', 'url' => '/delete', 'verb' => 'POST'],
['name' => 'page#update_poll', 'url' => '/update', 'verb' => 'POST'],
['name' => 'page#insert_poll', 'url' => '/insert', '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_poll', 'url' => '/write', 'verb' => 'POST'],
['name' => 'api#get_poll', 'url' => '/get/poll/{hash}', 'verb' => 'GET'],
['name' => 'api#get_site_users_and_groups', 'url' => '/get/siteusers', 'verb' => 'POST']
]
];

15
css/colors.scss Normal file
Просмотреть файл

@ -0,0 +1,15 @@
$hover-color: #f7f7f7;
$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;
$bg_current_user: #f7f7f7;
$fg_current_user: #0082c9;

Просмотреть файл

@ -1,94 +0,0 @@
.user-group-list {
display: none;
border: 1px solid #DDD;
margin: 15px;
padding: 5px;
border-radius: 3px;
max-height: 150px;
overflow-y: auto;
}
#sec_name {
display: none;
}
.cl_access_item {
padding: 5px;
background-color: white;
color: #333;
cursor: pointer;
}
.cl_access_item:hover {
background-color: #EEE;
}
.cl_access_item.selected {
background-color: #409AE7;
color: #FFF;
}
.cl_access_item.selected:hover {
background-color: #FF6F6F;
color: #FFF;
text-decoration: line-through;
}
textarea {
min-height: 66px;
}
.choices {
margin-top: 10px;
}
.choices td {
min-width: 30px;
}
table td {
text-align: center;
}
.text-row, .date-row {
font-weight: bold;
padding: 2px 5px;
background-color: #337AB7;
color: #FFF;
text-align: left;
}
.text-row:hover, .date-row:hover {
background-color: #ff6f6f;
text-decoration: line-through;
}
#selected-dates-table tr:first-child td {
font-weight: bold;
padding: 2px 5px;
background-color: #337AB7;
color: #FFF;
}
table .icon-close {
cursor: pointer;
background-color: #ffede9; /*red*/
padding: 0 5px;
background-image: url('../img/no-vote.svg');
}
table .icon-checkmark {
cursor: pointer;
background-color: #ebf5d6; /*green*/
padding: 0 5px;
background-image: url('../img/yes-vote.svg');
}
#expiration {
max-width: 200px;
}
#pollDesc {
width: 100%;
}

41
css/flex.scss Normal file
Просмотреть файл

@ -0,0 +1,41 @@
.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;
}
}
.flex-wrap {
flex-wrap: wrap;
}
.space-between {
justify-content: space-between,
}
.divider {
width: 25px;
border-left: 1px solid #ddd;
background-color: #eee;
border-right: 1px solid #ddd;
background-image: url('/apps/polls/css/../img/toggle.svg?v=1');
background-repeat: no-repeat;
background-position-x: 5px;
background-position-y: center;
opacity: 0.5;
flex-grow: 0;
flex-shrink: 0;
}

Просмотреть файл

@ -1,13 +1,10 @@
$bg_no: #ffede9;
$bg_yes: #ebf5d6;
$fg_no: #f45573;
$fg_yes: #49bc49;
@import 'colors.scss';
$row-padding: 15px;
$table-padding: 4px;
$date-width: 120px;
$participants-width: 80px;
$participants-width: 95px;
$group-2-2-width: max($date-width, $participants-width);
$owner-width: 140px;
@ -40,7 +37,7 @@ $mediabreak-3: $group-1-width + $owner-width + max($group-2-1-width, $group-2-2-
line-height: 2em;
transition: background-color 0.3s ease;
background-color: #fff;
background-color: var(--color-main-background);
min-height: 4em;
border-bottom: 1px solid #eee;
@ -56,7 +53,7 @@ $mediabreak-3: $group-1-width + $owner-width + max($group-2-1-width, $group-2-2-
&.table-body {
&:hover, &:focus, &:active, &.mouseOver {
transition: background-color 0.3s ease;
background-color: #f8f8f8;
background-color: $hover-color;
}
.flex-column.owner {
display: flex;
@ -79,7 +76,7 @@ $mediabreak-3: $group-1-width + $owner-width + max($group-2-1-width, $group-2-2-
}
&.table-header {
color: #999;
opacity: 0.5;
}
}

Просмотреть файл

@ -3,8 +3,10 @@ h1 {
margin-bottom: 5px;
}
#app header {
padding-top: 44px;
#app, #create-poll {
header {
padding-top: 44px;
}
}
/* allow horizontal scrollbar
@ -28,7 +30,6 @@ h1 {
#controls {
// adopted from NC13 for compatibily with OC10 and NC11-NC12
display: flex;
width: 100%;
position: relative;
top: 4px;
@ -36,7 +37,7 @@ h1 {
margin-top: 12px;
}
#breadcrump {
flex-grow: 0;
flex-grow: 1;
overflow: hidden;
div.crumb {
@ -153,7 +154,7 @@ td.td_shown {
}
.description {
color: #888;
opacity: 0.7;
}
.cl_title {

225
css/sidebar.scss Normal file
Просмотреть файл

@ -0,0 +1,225 @@
@import 'colors.scss';
$border_current_user: 2px solid;
$border_user: 1px solid #ddd;
$user-column-width: 265px;
#polls-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;
}
.pollInformation {
width: 220px;
flex-grow: 1;
flex-shrink: 1;
padding-right: 15px;
.authorRow {
.leftLabel {
margin-right: 4px;
}
}
.cloud {
margin: 4px 0;
> span {
color: #fff;
margin: 2px;
padding: 2px 4px;
border-radius: 3px;
float: left;
text-shadow: 1px 1px #666;
background-color: #aaa;
}
.open {
background-color: $fg_yes;
}
.expired {
background-color: $fg_no;
}
.information {
background-color: $bg_information;
}
}
}
#expired_info {
margin: 0 15px;
}
.pollActions {
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 2px 0 #0082c9;
}
}
> 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: #000;
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 #dbdbdb;
border-radius: 3px;
padding: 7px 6px;
margin: 3px 3px 3px 40px;
cursor: text;
}
.comment {
margin-bottom: 30px;
.comment-header {
background-color: #EEE;
border-bottom: 1px solid #DDD;
border-radius: 3px 3px 0 0;
}
.comment-date {
float: right;
color: #555;
}
.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;
}
}
}
}

1
css/vendor/jquery.datetimepicker.min.css поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -1,17 +1,5 @@
$bg_no: #ffede9;
$bg_maybe: #fcf7e1;
$bg_unvoted: #fff4c8;
$bg_yes: #ebf5d6;
$bg_information: #b19c3e;
@import 'colors.scss';
$fg_no: #f45573;
$fg_maybe: #f0db98;
$fg_unvoted: #f0db98;
$fg_yes: #49bc49;
$bg_current_user: #f7f7f7;
$fg_current_user: #0082c9;
$border_current_user: 2px solid;
$border_user: 1px solid #ddd;
$user-column-width: 265px;
@ -21,112 +9,109 @@ $user-column-width: 265px;
}
.flex-row {
display: flex;
flex-direction: row;
flex-grow: 1;
align-items: center;
}
.flex-column {
display: flex;
flex-direction: column;
flex-grow: 0;
flex-shrink: 0;
}
#votings {
position: relative !important;
.description {
.expired-vote{
color: red;
font-weight: bold;
#app-content {
width: 100%;
overflow-x: hidden;
#votings {
position: relative !important;
padding: 12px 17px;
.table {
overflow-x: auto;
padding-bottom: 10px;
}
}
padding: 12px 17px;
}
.header {
margin-left: $user-column-width;
padding: 0 17px;
align-items: initial;
.vote.option {
.date-box {
flex-grow: 1;
.description {
.expired-vote{
color: var(--color-error);
font-weight: bold;
}
}
.header {
margin-left: $user-column-width;
padding: 0 17px;
align-items: initial;
.date-box {
padding: 0 2px;
align-items: center;
.month, .dayow {
font-size: 1.2em;
color: var(--color-text-lighter);
}
.day {
font-size: 1.8em;
margin: 5px 0 5px 0;
}
}
.counter {
.counter {
font-size: 18px;
.yes, .no {
margin: 0 2px;
.svg {
background-position: center;
background-repeat: no-repeat;
background-size: 24px;
height: 24px;
width: 24px;
}
}
.yes {
color: $fg_yes;
.svg {
background-image: url('../img/yes-vote.svg');
}
}
.no {
color: $fg_no;
.svg {
background-image: url('../img/no-vote.svg');
}
}
}
.winner {
font-style: italic;
font-weight: bold;
color: $fg_yes;
}
.vote.option {
.date-box {
flex-grow: 1;
}
.counter {
flex-grow: 0;
height: 32px;
}
}
}
.user {
border-top: $border_user;
height: 44px;
padding: 0 17px;
}
.first {
flex-grow: 0;
height: 32px;
}
}
}
flex-shrink: 0;
width: $user-column-width;
}
.user {
border-top: $border_user;
height: 44px;
padding: 0 17px;
}
.first {
flex-grow: 0;
flex-shrink: 0;
width: $user-column-width;
}
.vote, .poll-cell {
flex-grow: 1;
width: 85px;
margin: 2px;
align-items:center;
}
.date-box {
padding: 0 2px;
align-items: center;
.month, .dayow {
font-size: 1.2em;
color: #666;
}
.day {
font-size: 1.8em;
margin: 5px 0 5px 0;
}
}
.winner {
font-style: italic;
font-weight: bold;
color: $fg_yes;
}
.counter {
font-size: 18px;
.yes, .no {
margin: 0 2px;
.svg {
background-position: center;
background-repeat: no-repeat;
background-size: 24px;
height: 24px;
width: 24px;
.vote, .poll-cell {
flex-grow: 1;
width: 85px;
margin: 2px;
align-items:center;
}
}
.yes {
color: $fg_yes;
.svg {
background-image: url('../img/yes-vote.svg');
}
}
.no {
color: $fg_no;
.svg {
background-image: url('../img/no-vote.svg');
}
}
}
.name {
margin-left: 5px;
}
@ -161,7 +146,7 @@ $user-column-width: 265px;
&:before {
content: attr(data-unvoted);
color: $fg_no;
font-size: 18px;
font-size: 14px;
font-style: italic;
font-weight: bold;
line-height: 38px;
@ -258,191 +243,6 @@ $user-column-width: 265px;
margin-bottom: 15px;
}
.authorRow {
position: relative;
.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;
align-items: flex-start;
margin-left: 0;
margin-top:0;
}
.pollInformation {
width: 220px;
flex-grow: 1;
flex-shrink: 1;
padding-right: 15px;
.authorRow {
.leftLabel {
margin-right: 4px;
}
}
.cloud {
margin: 4px 0;
> span {
color: #fff;
margin: 2px;
padding: 2px 4px;
border-radius: 3px;
float: left;
text-shadow: 1px 1px #666;
background-color: #aaa;
}
.open {
background-color: $fg_yes;
}
.expired {
background-color: $fg_no;
}
.information {
background-color: $bg_information;
}
}
}
#expired_info {
margin: 0 15px;
}
.pollActions {
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 2px 0 #0082c9;
}
}
> 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: #000;
opacity: 0.57;
flex: 1 1 0;
z-index: 100;
}
a,
.app-navigation-entry-deleted {
padding-left: 44px !important;
}
}
}
#commentsTabView {
.newCommentForm div.message:empty:before {
content: attr(data-placeholder);
color: grey;
}
#commentBox {
border: 1px solid #dbdbdb;
border-radius: 3px;
padding: 7px 6px;
margin: 3px 3px 3px 40px;
cursor: text;
}
.comment {
margin-bottom: 30px;
.comment-header {
background-color: #EEE;
border-bottom: 1px solid #DDD;
border-radius: 3px 3px 0 0;
}
.comment-date {
float: right;
color: #555;
}
.date {
position: absolute;
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;
}
}
}
}
@media all and (max-width: (768px) ) {
#app-content {
position: relative !important;
@ -450,88 +250,94 @@ $user-column-width: 265px;
}
@media all and (max-width: (480px) ) {
#votings {
#app-content #votings {
padding: 0px 2px;
}
.flex-row {
flex-direction: column;
&.user-cell, &.counter, &.counter .yes, &.counter .no, &.controls, &.breadcrump, &.submitPoll, &.newCommentForm, &.close {
flex-direction: row;
}
&.header {
flex-grow: 1;
margin-left: 0;
margin-top: 44px;
width: 120px;
padding: 0 0 0 4px;
.vote {
padding-right: 10px;
&.option {
align-items: baseline;
width: 100%;
border-top: $border_user;
.flex-row {
flex-direction: column;
.first {
height: 44px;
width: unset;
}
&.time {
align-items: center;
width: 100%;
border-top: $border_user;
.counter {
flex-direction: column;
align-items: flex-end;
&.user-cell, &.counter, &.counter .yes, &.counter .no, &.controls, &.breadcrump, &.submitPoll, &.newCommentForm, &.close {
flex-direction: row;
}
&.header {
flex-grow: 1;
margin-left: 0;
margin-top: 44px;
width: 120px;
padding: 0 0 0 4px;
.vote {
padding-right: 10px;
&.option {
align-items: baseline;
width: 100%;
border-top: $border_user;
}
&.time {
align-items: center;
width: 100%;
border-top: $border_user;
.counter {
flex-direction: column;
align-items: flex-end;
}
}
}
}
&.user {
display: none;
}
&.current-user {
display: flex;
width: 44px;
padding:0;
border: none;
background-color: transparent;
.poll-cell {
border:none;
border-radius: 0;
border-top: 1px solid #ddd;
background-color: transparent;
padding: 0 2px;
&.active {
&.yes {
background-image: url('../img/yes-vote-bordered.svg');
}
&.no {
background-image: url('../img/no-vote-bordered.svg');
}
&.maybe {
background-image: url('../img/maybe-vote-bordered.svg');
}
&.unvoted {
background-image: url('../img/unvoted-vote-bordered.svg');
}
}
}
.user-cell {
position: absolute;
left: 22px;
}
.poll-cell, .toggle-cell {
width: 44px;
height: 44px;
background-color: transparent;
}
}
}
&.user {
display: none;
}
&.current-user {
display: flex;
width: 44px;
padding:0;
border: none;
background-color: transparent;
.poll-cell {
border:none;
border-radius: 0;
border-top: 1px solid #ddd;
background-color: transparent;
padding: 0 2px;
&.active {
&.yes {
background-image: url('../img/yes-vote-bordered.svg');
}
&.no {
background-image: url('../img/no-vote-bordered.svg');
}
&.maybe {
background-image: url('../img/maybe-vote-bordered.svg');
}
&.unvoted {
background-image: url('../img/unvoted-vote-bordered.svg');
}
}
}
.user-cell {
position: absolute;
left: 22px;
}
.poll-cell, .toggle-cell {
width: 44px;
height: 44px;
background-color: transparent;
}
}
}
.description {
margin: 4px;
}
@ -576,10 +382,6 @@ $user-column-width: 265px;
}
}
.first {
height: 44px;
width: unset;
}
#options.flex-row {
flex-direction: column;

35
img/save.svg Normal file
Просмотреть файл

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg4"
height="16"
width="16"
viewbox="0 0 16 16"
version="1.1">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<g
id="XMLID_2_"
transform="matrix(0.22613747,0,0,0.23288366,-2.8432917,-3.1784157)">
<path
d="M 19.4,18 V 78 H 76.5 V 31.4 L 65.3,18 H 58.4 V 40.9 H 28 V 18 Z m 22.9,2.9 V 35.2 H 53.7 V 20.9 Z M 28,50.4 H 68 V 72.3 H 28 Z m 5.7,4.7 V 58 h 28.6 v -2.9 z m 0,8.6 v 2.9 h 28.6 v -2.9 z"
class="st0"
id="XMLID_9_" />
</g>
</svg>

После

Ширина:  |  Высота:  |  Размер: 1.0 KiB

86
img/toggle.svg Normal file
Просмотреть файл

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg4"
height="20"
width="4"
viewbox="0 0 16 16"
version="1.1"
sodipodi:docname="toggle.svg"
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview6"
showgrid="false"
inkscape:zoom="32"
inkscape:cx="-2.3727798"
inkscape:cy="9.3760237"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<rect
style="fill:#00000d;fill-opacity:1;stroke:#000000;stroke-width:0.5714286;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:19.89999962;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
id="rect4513"
width="1.4285715"
height="1.4285713"
x="1.2857143"
y="13.285715" />
<rect
style="fill:#00000d;fill-opacity:1;stroke:#000000;stroke-width:0.5714286;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:19.89999962;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
id="rect4513-2"
width="1.4285715"
height="1.4285715"
x="1.2857143"
y="17.285715" />
<rect
style="fill:#00000d;fill-opacity:1;stroke:#000000;stroke-width:0.5714286;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:19.89999962;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
id="rect4513-6"
width="1.4285715"
height="1.4285715"
x="1.2857143"
y="9.2857151" />
<rect
style="fill:#00000d;fill-opacity:1;stroke:#000000;stroke-width:0.5714286;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:19.89999962;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
id="rect4513-26"
width="1.4285716"
height="1.4285715"
x="1.2857141"
y="5.2857151" />
<rect
style="fill:#00000d;fill-opacity:1;stroke:#000000;stroke-width:0.5714286;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:19.89999962;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
id="rect4513-9"
width="1.4285715"
height="1.4285715"
x="1.2857143"
y="1.2857143" />
</svg>

После

Ширина:  |  Высота:  |  Размер: 3.1 KiB

Просмотреть файл

@ -10,3 +10,5 @@ function deletePoll($pollEl) {
form.submit();
}
}

91
js/create-poll.js Normal file

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -1,637 +0,0 @@
var g_chosen_datetimes = [];
var g_chosen_texts = [];
var g_chosen_groups = [];
var g_chosen_users = [];
var chosen_type = 'event';
var access_type = '';
var isAnonymous;
var hideNames;
function selectItem(cell) {
cell.removeClass('icon-close');
cell.addClass('icon-checkmark');
cell.removeClass('date-text-not-selected');
cell.addClass('date-text-selected');
if (cell.attr('class').indexOf('is-text') > -1) {
var id = cell.attr('id');
g_chosen_texts.push(id.substring(id.indexOf('_') + 1));
} else {
var dateId = cell.parent().attr('id'); //timestamp of date
var timeId = cell.attr('id');
g_chosen_datetimes.push(parseInt(dateId) + parseInt(timeId));
}
}
function deselectItem(cell) {
var id;
var index;
var dateId;
var timeId;
cell.removeClass('icon-checkmark');
cell.addClass('icon-close');
cell.removeClass('date-text-selected');
cell.addClass('date-text-not-selected');
if (cell.attr('class').indexOf('is-text') > -1) {
id = cell.attr('id');
index = g_chosen_texts.indexOf(id.substring(id.indexOf('_') + 1));
if (index > -1) {
g_chosen_texts.splice(index, 1);
}
} else {
dateId = cell.parent().attr('id'); //timestamp of date
timeId = cell.attr('id');
index = g_chosen_datetimes.indexOf(parseInt(dateId) + parseInt(timeId));
if (index > -1) {
g_chosen_datetimes.splice(index, 1);
}
}
}
function insertText(text, set) {
if (typeof set == 'undefined') {
set = false;
}
var table = document.getElementById('selected-texts-table');
var tr = table.insertRow(-1);
var td = tr.insertCell(-1);
td.innerHTML = text;
td.className = 'text-row';
td = tr.insertCell(-1);
if (set) {
td.className = 'icon-checkmark is-text date-text-selected';
} else {
td.className = 'icon-close is-text date-text-not-selected';
}
td.id = 'text_' + text;
}
function addRowToList(ts, text, timeTs) {
if (typeof timeTs == 'undefined') {
timeTs = -1;
}
var table = document.getElementById('selected-dates-table');
var rows = table.rows;
var td, tr, tdId;
var i, j;
var curr;
if (rows.length == 0) {
tr = table.insertRow(-1); //start new header
tr.insertCell(-1);
tr = table.insertRow(-1); //append new row
tr.id = ts;
tr.className = 'toggleable-row';
td = tr.insertCell(-1);
td.className = 'date-row';
td.innerHTML = text;
return;
}
for ( i=1; i<rows.length; i++) {
curr = rows[i];
if (curr.id == ts) {
for (j=1; j<curr.cells.length; j++) {
td = curr.cells[j];
tdId = curr.cells[j].id;
if ( timeTs == tdId) {
td.className = 'icon-checkmark date-text-selected';
}
}
return; //already in table, cancel
} else if (curr.id > ts) {
tr = table.insertRow(i); //insert row at current index
tr.id = ts;
tr.className = 'toggleable-row';
td = tr.insertCell(-1);
td.className = 'date-row';
td.innerHTML = text;
for (j=1; j<rows[0].cells.length; j++) {
tdId = rows[0].cells[j].id;
td = tr.insertCell(-1);
if (timeTs == tdId) {
td.className = 'icon-checkmark date-text-selected';
} else {
td.className = 'icon-close date-text-not-selected';
}
td.id = tdId;
td.innerHTML = '';
}
return;
}
}
tr = table.insertRow(-1); //highest value, append new row
tr.id = ts;
tr.className = 'toggleable-row';
td = tr.insertCell(-1);
td.className = 'date-row';
td.innerHTML = text;
for (j=1; j<rows[0].cells.length; j++) {
tdId = rows[0].cells[j].id;
td = tr.insertCell(-1);
if (timeTs == tdId) {
td.className = 'icon-checkmark date-text-selected';
} else {
td.className = 'icon-close date-text-not-selected';
}
td.id = tdId;
td.innerHTML = '';
}
}
function addColToList(ts, text, dateTs) {
if (typeof dateTs == 'undefined') {
dateTs = -1;
}
var table = document.getElementById('selected-dates-table');
var rows = table.rows;
var tr, row, td, cells, tmpRow;
var i, curr;
var index = -1;
if (rows.length == 0) {
tr = table.insertRow(-1);
tr.insertCell(-1);
}
rows = table.rows;
tmpRow = rows[0];
for (i=0; i<tmpRow.cells.length; i++) {
curr = tmpRow.cells[i];
if (curr.id == ts) {
return; //already in table, cancel
} else if (curr.id > ts) {
index = i;
break;
}
}
for (i=0; i<rows.length; i++) {
row = rows[i];
cells = row.cells;
td = row.insertCell(index);
//only display time in header row
if (i==0) {
td.innerHTML = text;
td.className = 'date-col';
} else {
td.innerHTML = '';
if (row.id == dateTs) {
td.className = 'icon-checkmark date-text-selected';
} else {
td.className = 'icon-close date-text-not-selected';
}
}
td.id = ts;
}
}
function debounce(f, wait, immediate) {
var timeout;
return function () {
var context = this;
var args = arguments;
var later = function () {
timeout = null;
if (!immediate) {
f.apply(context, args);
}
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) {
f.apply(context, args);
}
};
}
$(document).ready(function () {
// enable / disable date picker
var i;
$('#id_expire_set').click(function (){
$('#id_expire_date').prop("disabled", !this.checked);
if (this.checked) {
$("#id_expire_date").focus();
}
});
var anonOptions = document.getElementById('anonOptions');
$('#hideNames').click(function () {
hideNames = this.checked;
});
$('#isAnonymous').click(function () {
isAnonymous = this.checked;
if (isAnonymous) {
anonOptions.style.display = 'inline';
} else {
anonOptions.style.display = 'none';
}
});
var privateRadio = document.getElementById('private');
var hiddenRadio = document.getElementById('hidden');
var publicRadio = document.getElementById('public');
var selectRadio = document.getElementById('select');
if (privateRadio.checked) {
access_type = 'registered';
} else if (hiddenRadio.checked) {
access_type = 'hidden';
} else if (publicRadio.checked) {
access_type = 'public';
} else if (selectRadio.checked) {
access_type = 'select';
}
isAnonymous = document.getElementById('isAnonymous').checked;
hideNames = anonOptions.checked;
var accessValues = document.getElementById('accessValues');
if (accessValues.value.length > 0) {
var list = document.getElementById('selected-search-list-id');
var accessValueArr = accessValues.value.split(';');
for (i=0; i<accessValueArr.length; i++) {
var val = accessValueArr[i];
if (val == '') {
continue;
}
var li = document.createElement('li');
li.id = val;
li.className = 'cl_item cl_access_item selected';
var index = val.indexOf('group_');
if (index == 0) {
g_chosen_groups.push(val);
li.className += ' is-group';
li.appendChild(document.createTextNode(val.substring(6) + " (group)"));
list.appendChild(li);
} else {
index = val.indexOf('user_');
if (index == 0) {
g_chosen_users.push(val);
li.className = 'cl_item cl_access_item selected';
var username = val.substring(5);
$.post(OC.generateUrl('/apps/polls/get/displayname'), {username: username}, function (data) {
li.appendChild(document.createTextNode(username + " (" + data + ")"));
list.appendChild(li);
});
}
}
}
}
var chosenOptions = document.getElementById('chosenOptions').value;
var chosen = '';
if (chosenOptions.length > 0) {
chosen = JSON.parse(chosenOptions);
}
var text = document.getElementById('text');
var event = document.getElementById('event');
if (event.checked) {
chosen_type = event.value;
if (chosenOptions.length > 0) {
g_chosen_datetimes = chosen;
}
for (i=0; i<chosen.length; i++) {
var date = new Date(chosen[i]*1000);
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var newDate = new Date(year, month, day).getTime(); //save timestamp without time of day
month = '0' + (month+1); //month is 0-11, so +1
day = '0' + day;
var dateStr = day.substr(-2) + '.' + month.substr(-2) + '.' + year;
var hours = date.getHours();
var minutes = date.getMinutes();
var ms = (hours * 60 * 60 * 1000) + (minutes * 60 * 1000); //time of day in milliseconds
hours = '0' + hours;
minutes = '0' + minutes;
var timeStr = hours.substr(-2) + ':' + minutes.substr(-2);
addRowToList(newDate/1000, dateStr, ms/1000);
addColToList(ms/1000, timeStr, newDate/1000);
}
} else {
chosen_type = text.value;
if (chosenOptions.length > 0) {
g_chosen_texts = chosen;
}
for (i=0; i<chosen.length; i++) {
insertText(chosen[i], true);
}
}
var expirepicker = jQuery('#id_expire_date').datetimepicker({
inline: false,
onSelectDate: function (date) {
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
// set expiry date to the last second before midnight of the choosen date (local time)
var newDate = new Date(year, month, day, 23, 59, 59).getTime()/1000;
document.getElementById('expireTs').value = newDate;
},
timepicker: false,
format: 'd.m.Y'
});
var datepicker = jQuery('#datetimepicker').datetimepicker({
inline:true,
step: 15,
todayButton: true,
onSelectDate: function (date) {
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var newDate = new Date(year, month, day).getTime(); //save timestamp without time of day
month = '0' + (month+1); //month is 0-11, so +1
day = '0' + day;
var dateStr = day.substr(-2) + '.' + month.substr(-2) + '.' + year;
addRowToList(newDate/1000, dateStr);
},
onSelectTime: function (date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var ms = (hours * 60 * 60 * 1000) + (minutes * 60 * 1000); //time of day in milliseconds
hours = '0' + hours;
minutes = '0' + minutes;
var timeStr = hours.substr(-2) + ':' + minutes.substr(-2);
addColToList(ms/1000, timeStr);
}
});
$(document).on('click', '.date-row', function () {
var tr = $(this).parent();
var dateId = parseInt(tr.attr('id'));
var index = tr.index();
var cells = tr[0].cells; //convert jQuery object to DOM
for (var i=1; i<cells.length; i++) {
var cell = cells[i];
var delIndex = g_chosen_datetimes.indexOf(dateId + parseInt(cell.id));
if (delIndex > -1) {
g_chosen_datetimes.splice(delIndex, 1);
}
}
var table = document.getElementById('selected-dates-table');
table.deleteRow(index);
});
$(document).on('click', '.date-col', function () {
var cellIndex = $(this).index();
var timeId = parseInt($(this).attr('id'));
var table = document.getElementById('selected-dates-table');
var rows = table.rows;
rows[0].deleteCell(cellIndex);
for (var i=1; i<rows.length; i++) {
var row = rows[i];
var delIndex = g_chosen_datetimes.indexOf(parseInt(row.id) + timeId);
if (delIndex > -1) {
g_chosen_datetimes.splice(delIndex, 1);
}
row.deleteCell(cellIndex);
}
});
$(document).on('click', '.text-row', function () {
var tr = $(this).parent();
var rowIndex = tr.index();
var name = $(this).html();
var delIndex = g_chosen_texts.indexOf(name);
if (delIndex > -1) {
g_chosen_texts.splice(delIndex, 1);
}
var table = document.getElementById('selected-texts-table');
table.deleteRow(rowIndex);
});
$(document).on('click', '.icon-close', function () {
selectItem($(this));
});
$(document).on('click', '.icon-checkmark', function () {
deselectItem($(this));
});
$(document).on('click', '#text-submit', function () {
var text = document.getElementById('text-title');
if (text.value.length == 0) {
alert('Please enter a text!');
return false;
}
insertText(text.value);
text.value = '';
});
$(document).on('click', '.cl_item', function () {
var index;
var list = document.getElementById('selected-search-list-id');
var isGroup = $(this).hasClass('is-group');
if ($(this).hasClass('selected')) {
if (isGroup) {
index = g_chosen_groups.indexOf(this.id);
}
else {
index = g_chosen_users.indexOf(this.id);
}
if (index > -1) {
if (isGroup) {
g_chosen_groups.splice(index, 1);
}
else {
g_chosen_users.splice(index, 1);
}
$(this).remove();
}
} else {
if (!isGroup) {
var text = this.id.replace('user_', '');
g_chosen_users.push(this.id);
} else {
g_chosen_groups.push(this.id);
}
document.getElementById('user-group-search-box').value = '';
var li = document.createElement('li');
li.id = this.id;
li.className = 'cl_item cl_access_item selected' + (isGroup ? ' is-group' : '');
if (!isGroup) {
$.post(OC.generateUrl('/apps/polls/get/displayname'), {username: text}, function (data) {
li.appendChild(document.createTextNode(text + " (" + data + ")"));
list.appendChild(li);
});
} else {
li.appendChild(document.createTextNode($(this).html()));
list.appendChild(li);
}
$(this).remove();
}
});
$('.toggleable-row').hover(
function () {
var td = this.insertCell(-1);
td.className = 'toggle-all selected-all';
}, function () {
$(this).find('td:last-child').remove();
}
);
$(document).on('click', '.toggle-all', function () {
var children;
var i;
if ($(this).attr('class').indexOf('selected-all') > -1) {
children = $(this).parent().children('.icon-checkmark');
for (i=0; i<children.length; i++) {
deselectItem($(children[i]));
}
$(this).removeClass('selected-all');
$(this).addClass('selected-none');
} else {
children = $(this).parent().children('.icon-close');
for (i=0; i<children.length; i++) {
selectItem($(children[i]));
}
$(this).removeClass('selected-none');
$(this).addClass('selected-all');
}
});
$('input[type=radio][name=pollType]').change(function () {
if (this.value == 'event') {
chosen_type = 'event';
document.getElementById('text-select-container').style.display = 'none';
document.getElementById('date-select-container').style.display = 'inline';
} else {
chosen_type = 'text';
document.getElementById('text-select-container').style.display = 'inline';
document.getElementById('date-select-container').style.display = 'none';
}
});
$('input[type=radio][name=accessType]').click(function () {
access_type = this.value;
if (access_type == 'select') {
$("#access_rights").show();
$("#selected_access").show();
} else {
$("#access_rights").hide();
$("#selected_access").hide();
}
});
$('input[type=checkbox][name=check_expire]').change(function () {
if (!$(this).is(':checked')) {
document.getElementById('expireTs').value = '';
}
});
$('#user-group-search-box').on('input', debounce(function () {
var ul = document.getElementById('live-search-list-id');
while(ul.firstChild) {
ul.removeChild(ul.firstChild);
}
var val = $(this).val();
if (val.length < 3) {
return;
}
var formData = {
searchTerm: val,
groups: JSON.stringify(g_chosen_groups),
users: JSON.stringify(g_chosen_users)
};
$.post(OC.generateUrl('/apps/polls/search'), formData, function (data) {
for (var i=0; i<data.length; i++) {
var ug = data[i];
var li = document.createElement('li');
li.className = 'cl_item cl_access_item';
if (ug.isGroup) {
li.id = 'group_' + ug.gid;
li.className += ' is-group';
li.appendChild(document.createTextNode(ug.gid + " (group)"));
ul.appendChild(li);
} else {
li.id = 'user_' + ug.uid;
li.appendChild(document.createTextNode(ug.uid + " (" + ug.displayName + ")"));
var span = document.createElement('span');
span.id = 'sec_name';
span.appendChild(document.createTextNode(ug.uid));
li.appendChild(span);
ul.appendChild(li);
}
}
});
}, 250));
$('.live-search-list-user li').each(function (){
$(this).attr('data-search-term', $(this).text().toLowerCase());
});
$('.live-search-box-user').on('keyup', function (){
var searchTerm = $(this).val().toLowerCase();
$('.live-search-list-user li').each(function (){
if ( $(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0
|| searchTerm.length < 1
) {
$(this).show();
} else {
$(this).hide();
}
});
});
$('.live-search-list-group li').each(function (){
$(this).attr('data-search-term', $(this).text().toLowerCase());
});
$('.live-search-box-group').on('keyup', function (){
var searchTerm = $(this).val().toLowerCase();
$('.live-search-list-group li').each(function (){
if (
$(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0 ||
searchTerm.length < 1
) {
$(this).show();
} else {
$(this).hide();
}
});
});
var form = document.finish_poll;
var submit_finish_poll = document.getElementById('submit_finish_poll');
if (submit_finish_poll !== null) {
submit_finish_poll.onclick = function () {
if (
g_chosen_datetimes.length == 0 &&
g_chosen_texts.length == 0
) {
alert(t('polls', 'Nothing selected!\nClick on cells to turn them green.'));
return false;
}
if (chosen_type == 'event') {
form.elements.chosenOptions.value = JSON.stringify(g_chosen_datetimes);
}
else {
form.elements.chosenOptions.value = JSON.stringify(g_chosen_texts);
}
var title = document.getElementById('pollTitle');
if (
title == null ||
title.value.length == 0
) {
alert(t('polls', 'You must enter at least a title for the new poll.'));
return false;
}
if (access_type == 'select') {
if (
g_chosen_groups.length == 0 &&
g_chosen_users == 0
) {
alert(t('polls', 'Please select at least one user or group!'));
return false;
}
form.elements.accessValues.value = JSON.stringify({
groups: g_chosen_groups,
users: g_chosen_users
});
}
form.elements.isAnonymous.value = isAnonymous;
form.elements.hideNames.value = hideNames;
form.submit();
};
}
});

7
js/start.js Executable file → Normal file
Просмотреть файл

@ -1,4 +1,4 @@
/** global: Clipboard */
/* global clipboard, navigator */
$(document).ready(function () {
var clipboard = new Clipboard('.copy-link');
clipboard.on('success', function (e) {
@ -18,13 +18,14 @@ $(document).ready(function () {
}
}, 3000);
});
clipboard.on('error', function (e) {
var $input = $(e.trigger);
var actionMsg = '';
if (/iPhone|iPad/i.test(navigator.userAgent)) {
actionMsg = t('core', 'Not supported!');
} else if (/Mac/i.test(navigator.userAgent)) {
actionMsg = t('core', 'Press -C to copy.');
actionMsg = t('core', 'Press ?-C to copy.');
} else {
actionMsg = t('core', 'Press Ctrl-C to copy.');
}
@ -36,7 +37,7 @@ $(document).ready(function () {
.tooltip('show');
_.delay(function () {
$input.tooltip('hide');
if (OC.Share.Social.Collection.size() == 0) {
if (OC.Share.Social.Collection.size() === 0) {
$input.attr('data-original-title', t('core', 'Copy'))
.tooltip('fixTitle');
} else {

1
js/vendor/jquery.datetimepicker.full.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -1,12 +1,11 @@
/* global Clipboard */
/* global Handlebars */
/* global Clipboard, Handlebars, navigator */
var newUserOptions = [];
var newUserAnswers = [];
var maxVotes = 0;
var valuesChanged = false;
var maybeAllowed = true;
var tzOffset = new Date().getTimezoneOffset();
// HTML template for new comment (handlebars.js)
@ -59,7 +58,7 @@ function updateCounters() {
function updateAvatar(obj) {
// Temporary hack - Check if we have Nextcloud or ownCloud with an anomymous user
if (!document.getElementById('nextcloud') && OC.currentUser === '') {
if (!document.getElementById('nextcloud') && !OC.currentUser) {
$(obj).imageplaceholder(obj.title);
} else {
$(obj).avatar(obj.title, 32);
@ -75,7 +74,9 @@ function switchSidebar() {
}
$(document).ready(function () {
var clipboard = new Clipboard('.copy-link');
clipboard.on('success', function(e) {
var $input = $(e.trigger);
$input.tooltip('hide')
@ -93,6 +94,7 @@ $(document).ready(function () {
}
}, 3000);
});
clipboard.on('error', function (e) {
var $input = $(e.trigger);
var actionMsg = '';
@ -111,7 +113,7 @@ $(document).ready(function () {
.tooltip('show');
_.delay(function () {
$input.tooltip('hide');
if (OC.Share.Social.Collection.size() == 0) {
if (OC.Share.Social.Collection.size() === 0) {
$input.attr('data-original-title', t('core', 'Copy'))
.tooltip('fixTitle');
} else {
@ -122,6 +124,10 @@ $(document).ready(function () {
// count how many times in each date
updateBest();
if ($('#app-content').hasClass('maybedisallowed')) {
maybeAllowed = false;
}
// Temporary hack - Check if we have Nextcloud or ownCloud with an anonymous user
var hideAvatars = false;
if (!document.getElementById('nextcloud')) {
@ -268,7 +274,11 @@ $(document).on('click', '.toggle-cell, .poll-cell.active', function () {
$nextClass = 'no';
$toggleAllClasses= 'yes';
} else if($(this).hasClass('no')) {
$nextClass = 'maybe';
if (maybeAllowed) {
$nextClass = 'maybe';
} else {
$nextClass = 'yes';
}
$toggleAllClasses= 'no';
} else if($(this).hasClass('maybe')) {
$nextClass = 'yes';

0
l10n/.gitkeep Normal file
Просмотреть файл

Просмотреть файл

@ -4,9 +4,14 @@ OC.L10N.register(
"Nothing selected!\nClick on cells to turn them green." : "Res seleccionat!\nPrem sobre les cel·les per tornar-les verdes.",
"You must enter at least a title for the new poll." : "Has d'introduir com a mínim un títol per a la nova enquesta.",
"Please select at least one user or group!" : "Si us plau, escull com a mínim un usuari o grup!",
"Copied!" : "Copiat!",
"Copy" : "Copia",
"Not supported!" : "No suportat!",
"Press ⌘-C to copy." : "Prem ⌘-C per copiar.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar al porta-retalls: Ctrl+C, Intro",
"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.",
"just now" : "ara mateix",
"Polls" : "Enquestes",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola %s,<br/><br/><strong>%s</strong> ha participat en l'enquesta '%s'.<br/><br/>Per anar a l'enquesta pots utilitzar aquest <a href=\"%s\">enllaç</a>",
"Polls App" : "Aplicació d'enquestes",

Просмотреть файл

@ -2,9 +2,14 @@
"Nothing selected!\nClick on cells to turn them green." : "Res seleccionat!\nPrem sobre les cel·les per tornar-les verdes.",
"You must enter at least a title for the new poll." : "Has d'introduir com a mínim un títol per a la nova enquesta.",
"Please select at least one user or group!" : "Si us plau, escull com a mínim un usuari o grup!",
"Copied!" : "Copiat!",
"Copy" : "Copia",
"Not supported!" : "No suportat!",
"Press ⌘-C to copy." : "Prem ⌘-C per copiar.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar al porta-retalls: Ctrl+C, Intro",
"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.",
"just now" : "ara mateix",
"Polls" : "Enquestes",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola %s,<br/><br/><strong>%s</strong> ha participat en l'enquesta '%s'.<br/><br/>Per anar a l'enquesta pots utilitzar aquest <a href=\"%s\">enllaç</a>",
"Polls App" : "Aplicació d'enquestes",

Просмотреть файл

@ -1,12 +1,19 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "Opravdu chcete smazat tento fond (nový)?",
"Nothing selected!\nClick on cells to turn them green." : "Nic nevybráno! Kliknutím obarvěte buňky na zeleno.",
"You must enter at least a title for the new poll." : "Je třeba zadat alespoň název nové ankety.",
"Please select at least one user or group!" : "Vyberte prosím alespoň jednoho uživatele nebo skupinu!",
"Copied!" : "Zkopírováno!",
"Copy" : "Zkopírovat",
"Not supported!" : "Nepodporováno!",
"Press Ctrl-C to copy." : "Zkopírujte stiskem Ctrl-C.",
"Copy to clipboard: Ctrl+C, Enter" : "Kopírovat do schránky: Ctrl + C, Enter",
"You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nejste registrováni.\nPro hlasování, prosím, zadejte své jméno\n(alespoň 3 znaky).",
"Please add some text to your comment before submitting it." : "Prosím, před odesláním k vašemu komentáři přidejte nějaký text.",
"just now" : "právě teď",
"An error occurred, your comment was not posted." : "Došlo k chybě, váš komentář nebyl odeslán.",
"Polls" : "Ankety",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Ahoj %s,<br/><br/><strong>%s</strong> hlasoval/a v anketě '%s'.<br/><br/>K přesunu přímo na anketu můžeš použít tento <a href=\"%s\">odkaz</a>",
"Polls App" : "Aplikace ankety",
@ -21,7 +28,7 @@ OC.L10N.register(
"Select" : "Vybrat",
"User/Group search" : "Vyhledávání uživatele/skupiny",
"Anonymous" : "Anonymní",
"Hide user names for admin" : "Skrýt administrátorům uživatelská jména",
"Hide user names for admin" : "Skrýt správcům uživatelská jména",
"Expires" : "Platnost vyprší",
"Event schedule" : "O termínu události",
"Text based" : "Textová",
@ -33,12 +40,25 @@ OC.L10N.register(
"Cancel" : "Storno",
"No description provided." : "Nebyl poskytnut žádný popis.",
"The poll expired on %s. Voting is disabled, but you can still comment." : "Anketa vypršela %s. Hlasování je zakázáno, 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",
"Vote!" : "Hlasovat!",
"Receive notification email on activity" : "Dostávat e-mailem oznámení o aktivitě",
"Close details" : "Zavřít podrobnosti",
"Close" : "Zavřít",
"Owner" : "Vlastník",
"Expired" : "Platnost skončila",
"Expires on %s" : "Platnost skončí %s",
"Expires never" : "Nikdy neskončí",
"Usernames visible to Owner" : "Uživatelská jména viditelná vlastníkovi",
"Click to get link" : "Klikněte pro získání odkazu",
"Copy Link" : "Zkopírovat odkaz",
"Delete poll" : "Smazat fond",
"Edit Poll" : "Upravit fond",
"Poll expired" : "Anketa vypršela",
"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í.",
"No existing polls." : "Neexistují žádné ankety.",
"By" : "Vytvořil",
@ -49,4 +69,4 @@ OC.L10N.register(
"Access denied" : "Přístup zamítnut",
"You are not allowed to view this poll or the poll does not exist." : "Nemáte oprávnění k zobrazení této ankety nebo anketa neexistuje."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");

Просмотреть файл

@ -1,10 +1,17 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "Opravdu chcete smazat tento fond (nový)?",
"Nothing selected!\nClick on cells to turn them green." : "Nic nevybráno! Kliknutím obarvěte buňky na zeleno.",
"You must enter at least a title for the new poll." : "Je třeba zadat alespoň název nové ankety.",
"Please select at least one user or group!" : "Vyberte prosím alespoň jednoho uživatele nebo skupinu!",
"Copied!" : "Zkopírováno!",
"Copy" : "Zkopírovat",
"Not supported!" : "Nepodporováno!",
"Press Ctrl-C to copy." : "Zkopírujte stiskem Ctrl-C.",
"Copy to clipboard: Ctrl+C, Enter" : "Kopírovat do schránky: Ctrl + C, Enter",
"You are not registered.\nPlease enter your name to vote\n(at least 3 characters)." : "Nejste registrováni.\nPro hlasování, prosím, zadejte své jméno\n(alespoň 3 znaky).",
"Please add some text to your comment before submitting it." : "Prosím, před odesláním k vašemu komentáři přidejte nějaký text.",
"just now" : "právě teď",
"An error occurred, your comment was not posted." : "Došlo k chybě, váš komentář nebyl odeslán.",
"Polls" : "Ankety",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Ahoj %s,<br/><br/><strong>%s</strong> hlasoval/a v anketě '%s'.<br/><br/>K přesunu přímo na anketu můžeš použít tento <a href=\"%s\">odkaz</a>",
"Polls App" : "Aplikace ankety",
@ -19,7 +26,7 @@
"Select" : "Vybrat",
"User/Group search" : "Vyhledávání uživatele/skupiny",
"Anonymous" : "Anonymní",
"Hide user names for admin" : "Skrýt administrátorům uživatelská jména",
"Hide user names for admin" : "Skrýt správcům uživatelská jména",
"Expires" : "Platnost vyprší",
"Event schedule" : "O termínu události",
"Text based" : "Textová",
@ -31,12 +38,25 @@
"Cancel" : "Storno",
"No description provided." : "Nebyl poskytnut žádný popis.",
"The poll expired on %s. Voting is disabled, but you can still comment." : "Anketa vypršela %s. Hlasování je zakázáno, 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",
"Vote!" : "Hlasovat!",
"Receive notification email on activity" : "Dostávat e-mailem oznámení o aktivitě",
"Close details" : "Zavřít podrobnosti",
"Close" : "Zavřít",
"Owner" : "Vlastník",
"Expired" : "Platnost skončila",
"Expires on %s" : "Platnost skončí %s",
"Expires never" : "Nikdy neskončí",
"Usernames visible to Owner" : "Uživatelská jména viditelná vlastníkovi",
"Click to get link" : "Klikněte pro získání odkazu",
"Copy Link" : "Zkopírovat odkaz",
"Delete poll" : "Smazat fond",
"Edit Poll" : "Upravit fond",
"Poll expired" : "Anketa vypršela",
"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í.",
"No existing polls." : "Neexistují žádné ankety.",
"By" : "Vytvořil",
@ -46,5 +66,5 @@
"Never" : "Nikdy",
"Access denied" : "Přístup zamítnut",
"You are not allowed to view this poll or the poll does not exist." : "Nemáte oprávnění k zobrazení této ankety nebo anketa neexistuje."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}

Просмотреть файл

@ -1,6 +1,7 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "Er du sikker på du vil slette afstemning (ny)?",
"Nothing selected!\nClick on cells to turn them green." : "Ingenting valgt\nKlik på en celle for at gøre den grøn.",
"You must enter at least a title for the new poll." : "Du skal indtaste en titel på den nye afstemning.",
"Please select at least one user or group!" : "Vælg venligst mindst en bruger eller gruppe!",

Просмотреть файл

@ -1,4 +1,5 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "Er du sikker på du vil slette afstemning (ny)?",
"Nothing selected!\nClick on cells to turn them green." : "Ingenting valgt\nKlik på en celle for at gøre den grøn.",
"You must enter at least a title for the new poll." : "Du skal indtaste en titel på den nye afstemning.",
"Please select at least one user or group!" : "Vælg venligst mindst en bruger eller gruppe!",

51
l10n/el.js Normal file
Просмотреть файл

@ -0,0 +1,51 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "Θέλετε πραγματικά να διαγράψετε αυτή τη δημοσκόπηση (νέα);",
"Nothing selected!\nClick on cells to turn them green." : "Τίποτα δεν έχει επιλεγεί.\nΚάντε κλικ στα κελιά ώστε να γίνουν πράσινα",
"You must enter at least a title for the new poll." : "Πρέπει να εισάγετεε τουλάχιστον έναν τίτλο για την νέα ψηφοφορία",
"Please select at least one user or group!" : "Παρακαλούμε επιλέξτε τουλάχιστον έναν χρήστη ή ομάδα!",
"Copied!" : "Αντιγράφηκε!",
"Copy" : "Αντιγραφή",
"Not supported!" : "Δεν υποστηρίζεται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
"Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.",
"Copy to clipboard: Ctrl+C, Enter" : "Αντιγραφή στο πληκτρολόγιο: Ctrl+C, Enter",
"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." : "Παρακαλώ προσθέστε ένα κείμενο στο σχόλιό σας πριν το υποβάλλετε",
"just now" : "μόλις τώρα",
"Polls" : "Ψηφοφορίες",
"Polls App - New Activity" : "Εφαρμογή ψηφοφοριών - Νέα δραστηριότητα",
"Polls App" : "Εφαρμογή ψηφοφοριών",
"Edit poll" : "Επεξεργασία ψηφοφορίας",
"Create new poll" : "Δημιουργία νέας ψηφοφορίας",
"Title" : "Τίτλος",
"Description" : "Περιγραφή",
"Registered users only" : "Μόνο οι εγγεγραμμένοι χρήστες",
"Public access" : "Δημόσια πρόσβαση",
"Select" : "Επιλογή",
"Hide user names for admin" : "Απόκρυψη ονομάτων χρηστών για τον διαχειριστή",
"Expires" : "Λήγει",
"Dates" : "Ημερομηνίες",
"Add" : "Προσθήκη",
"Update poll" : "Ενημέρωση ψηφοφορίας",
"Create poll" : "Δημιουργία ψηφοφορίας",
"Cancel" : "Ακύρωση",
"Your name here" : "Το όνομά σας εδώ",
"Close details" : "Κλείσιμο λεπτομερειών",
"Close" : "Κλείσιμο",
"Owner" : "Ιδιοκτήτης",
"Expired" : "Έληξε",
"Expires on %s" : "Λήγει στις %s",
"Expires never" : "Δεν λήγει ποτέ",
"Click to get link" : "Κάντε κλικ για αντιγραφή συνδέσμου",
"Copy Link" : "Αντιγραφή συνδέσμου",
"Delete poll" : "Διαγραφή ψηφοφορίας",
"Edit Poll" : "Επεξεργασία ψηφοφορίας",
"Poll expired" : "Η ψηφοφορία έληξε",
"Comments" : "Σχόλια",
"New comment …" : "Νέο σχόλιο …",
"Never" : "Ποτέ",
"Access denied" : "Δεν επιτρέπεται η πρόσβαση"
},
"nplurals=2; plural=(n != 1);");

49
l10n/el.json Normal file
Просмотреть файл

@ -0,0 +1,49 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "Θέλετε πραγματικά να διαγράψετε αυτή τη δημοσκόπηση (νέα);",
"Nothing selected!\nClick on cells to turn them green." : "Τίποτα δεν έχει επιλεγεί.\nΚάντε κλικ στα κελιά ώστε να γίνουν πράσινα",
"You must enter at least a title for the new poll." : "Πρέπει να εισάγετεε τουλάχιστον έναν τίτλο για την νέα ψηφοφορία",
"Please select at least one user or group!" : "Παρακαλούμε επιλέξτε τουλάχιστον έναν χρήστη ή ομάδα!",
"Copied!" : "Αντιγράφηκε!",
"Copy" : "Αντιγραφή",
"Not supported!" : "Δεν υποστηρίζεται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
"Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.",
"Copy to clipboard: Ctrl+C, Enter" : "Αντιγραφή στο πληκτρολόγιο: Ctrl+C, Enter",
"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." : "Παρακαλώ προσθέστε ένα κείμενο στο σχόλιό σας πριν το υποβάλλετε",
"just now" : "μόλις τώρα",
"Polls" : "Ψηφοφορίες",
"Polls App - New Activity" : "Εφαρμογή ψηφοφοριών - Νέα δραστηριότητα",
"Polls App" : "Εφαρμογή ψηφοφοριών",
"Edit poll" : "Επεξεργασία ψηφοφορίας",
"Create new poll" : "Δημιουργία νέας ψηφοφορίας",
"Title" : "Τίτλος",
"Description" : "Περιγραφή",
"Registered users only" : "Μόνο οι εγγεγραμμένοι χρήστες",
"Public access" : "Δημόσια πρόσβαση",
"Select" : "Επιλογή",
"Hide user names for admin" : "Απόκρυψη ονομάτων χρηστών για τον διαχειριστή",
"Expires" : "Λήγει",
"Dates" : "Ημερομηνίες",
"Add" : "Προσθήκη",
"Update poll" : "Ενημέρωση ψηφοφορίας",
"Create poll" : "Δημιουργία ψηφοφορίας",
"Cancel" : "Ακύρωση",
"Your name here" : "Το όνομά σας εδώ",
"Close details" : "Κλείσιμο λεπτομερειών",
"Close" : "Κλείσιμο",
"Owner" : "Ιδιοκτήτης",
"Expired" : "Έληξε",
"Expires on %s" : "Λήγει στις %s",
"Expires never" : "Δεν λήγει ποτέ",
"Click to get link" : "Κάντε κλικ για αντιγραφή συνδέσμου",
"Copy Link" : "Αντιγραφή συνδέσμου",
"Delete poll" : "Διαγραφή ψηφοφορίας",
"Edit Poll" : "Επεξεργασία ψηφοφορίας",
"Poll expired" : "Η ψηφοφορία έληξε",
"Comments" : "Σχόλια",
"New comment …" : "Νέο σχόλιο …",
"Never" : "Ποτέ",
"Access denied" : "Δεν επιτρέπεται η πρόσβαση"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -62,7 +62,7 @@ OC.L10N.register(
"Edit Poll" : "Editar encuesta",
"Poll expired" : "La votación ha caducado",
"Comments" : "Comentarios",
"Login or ..." : "Registrarse o...",
"Login or ..." : "Iniciar sesión o...",
"New comment …" : "Nuevo comentario...",
"No comments yet. Be the first." : "Todavía no hay comentarios. Sé el primero.",
"No existing polls." : "No hay votaciones.",

Просмотреть файл

@ -60,7 +60,7 @@
"Edit Poll" : "Editar encuesta",
"Poll expired" : "La votación ha caducado",
"Comments" : "Comentarios",
"Login or ..." : "Registrarse o...",
"Login or ..." : "Iniciar sesión o...",
"New comment …" : "Nuevo comentario...",
"No comments yet. Be the first." : "Todavía no hay comentarios. Sé el primero.",
"No existing polls." : "No hay votaciones.",

Просмотреть файл

@ -1,14 +1,23 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -33,12 +42,28 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -47,6 +72,8 @@ OC.L10N.register(
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},
"nplurals=2; plural=(n != 1);");

Просмотреть файл

@ -1,12 +1,21 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -31,12 +40,28 @@
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -45,6 +70,8 @@
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -1,14 +1,23 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -33,12 +42,28 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -47,6 +72,8 @@ OC.L10N.register(
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},
"nplurals=2; plural=(n != 1);");

Просмотреть файл

@ -1,12 +1,21 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -31,12 +40,28 @@
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -45,6 +70,8 @@
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -1,14 +1,23 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -33,12 +42,28 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -47,6 +72,8 @@ OC.L10N.register(
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},
"nplurals=2; plural=(n != 1);");

Просмотреть файл

@ -1,12 +1,21 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -31,12 +40,28 @@
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -45,6 +70,8 @@
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -1,14 +1,23 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -33,12 +42,28 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -47,6 +72,8 @@ OC.L10N.register(
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},
"nplurals=2; plural=(n != 1);");

Просмотреть файл

@ -1,12 +1,21 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -31,12 +40,28 @@
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -45,6 +70,8 @@
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -1,14 +1,23 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -33,12 +42,28 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -47,6 +72,8 @@ OC.L10N.register(
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},
"nplurals=2; plural=(n != 1);");

Просмотреть файл

@ -1,12 +1,21 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -31,12 +40,28 @@
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -45,6 +70,8 @@
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -1,14 +1,23 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -33,12 +42,28 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -47,6 +72,8 @@ OC.L10N.register(
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},
"nplurals=2; plural=(n != 1);");

Просмотреть файл

@ -1,12 +1,21 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -31,12 +40,28 @@
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -45,6 +70,8 @@
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -19,6 +19,8 @@ OC.L10N.register(
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"A polls 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 polls 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).",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
"Title" : "Título",
@ -54,7 +56,7 @@ OC.L10N.register(
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario escondidos para el Dueño",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",

Просмотреть файл

@ -17,6 +17,8 @@
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"A polls 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 polls 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).",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
"Title" : "Título",
@ -52,7 +54,7 @@
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario escondidos para el Dueño",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",

Просмотреть файл

@ -1,14 +1,23 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -33,12 +42,28 @@ OC.L10N.register(
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -47,6 +72,8 @@ OC.L10N.register(
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},
"nplurals=2; plural=(n != 1);");

Просмотреть файл

@ -1,12 +1,21 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "¿Realmente quieres borrar esa encuesta (nuevo)?",
"Nothing selected!\nClick on cells to turn them green." : "¡No haya nada seleccionado!\nHaz click en las celdas para hacerlas verdes. ",
"You must enter at least a title for the new poll." : "Debes ingresar al menos un título para una nueva encuesta. ",
"Please select at least one user or group!" : "¡Por favor selecciona un usuario o grupo!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Copiar a la papelera: Ctrl + C, Enter",
"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. ",
"just now" : "justo ahora",
"An error occurred, your comment was not posted." : "Se presentó un error, tu comentario no se publicó",
"Polls" : "Encuestas",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hola%s,<br/><br/><strong>%s</strong> participó en la encuesta '%s'.<br/><br/> Para ir directamente a la encuesta, puedes usar esta <a href=\"%s\">liga</a>",
"Polls App - New Activity" : "Aplicación de Encuestas - Nueva Actividad",
"Polls App" : "Aplicación para encuestas",
"Edit poll" : "Editar encuesta",
"Create new poll" : "Crear nueva encuesta",
@ -31,12 +40,28 @@
"Cancel" : "Cancelar",
"No description provided." : "No se proporcionó una descripción. ",
"The poll 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",
"Owner" : "Propietario",
"Expired" : "Expirado",
"Expires on %s" : "Expira el %s",
"Expires never" : "Nunca expira",
"Invitation access" : "Acceso por inivtación",
"Anononymous poll" : "Encuesta anónima",
"Usernames hidden to Owner" : "Nombres de usuario ocultos para el Dueño",
"Usernames visible to Owner" : "Nombres de usuario se muestran al Dueño",
"Click to get link" : "Haz click para obtener una liga",
"Copy Link" : "Copiar Liga",
"Delete poll" : "Borrar encuesta",
"Edit Poll" : "Editar encuesta",
"Poll 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.",
"No existing polls." : "No hay encuestas existentes.",
"By" : "Por",
@ -45,6 +70,8 @@
"Yourself" : "Tú mismo",
"Never" : "Nunca",
"Access denied" : "Acceso denegado",
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. "
"You are not allowed to view this poll or the poll does not exist." : "No tienes permitido ver esta encuesta o bien la encuesta no existe. ",
"You are not allowed to edit this poll or the poll does not exist." : "No tienes permitido editar esta encuesta o la encuesta no existe.",
"You are not allowed to delete this poll or the poll does not exist." : "No tienes permitido borrar esta encuesta o la encuesta no existe."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -10,6 +10,7 @@ OC.L10N.register(
"Press ⌘-C to copy." : "Paina ⌘-C kopioidaksesi.",
"Press Ctrl-C to copy." : "Paina Ctrl-C kopioidaksesi.",
"Copy to clipboard: Ctrl+C, Enter" : "Kopioi leikepöydälle: Ctrl+C, Enter",
"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.",
"just now" : "juuri nyt",
"An error occurred, your comment was not posted." : "Tapahtui virhe, kommenttiasi ei lähetetty.",

Просмотреть файл

@ -8,6 +8,7 @@
"Press ⌘-C to copy." : "Paina ⌘-C kopioidaksesi.",
"Press Ctrl-C to copy." : "Paina Ctrl-C kopioidaksesi.",
"Copy to clipboard: Ctrl+C, Enter" : "Kopioi leikepöydälle: Ctrl+C, Enter",
"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.",
"just now" : "juuri nyt",
"An error occurred, your comment was not posted." : "Tapahtui virhe, kommenttiasi ei lähetetty.",

Просмотреть файл

@ -3,7 +3,7 @@ OC.L10N.register(
{
"Do you really want to delete that poll (new)?" : "Voulez-vous réellement supprimer ce sondage (nouveau) ?",
"Nothing selected!\nClick on cells to turn them green." : "Rien n'est sélectionné !\nCliquez sur les cellules pour les basculer en vert.",
"You must enter at least a title for the new poll." : "Vous devez saisir au moins un titre pour ce nouveau sondage",
"You must enter at least a title for the new poll." : "Vous devez saisir au moins un titre pour ce nouveau sondage.",
"Please select at least one user or group!" : "Veuillez sélectionner au moins un utilisateur ou un groupe !",
"Copied!" : "Copié !",
"Copy" : "Copier",
@ -16,7 +16,7 @@ OC.L10N.register(
"just now" : "à l'instant",
"An error occurred, your comment was not posted." : "Une erreur s'est produite, votre commentaire n'a pas été publié.",
"Polls" : "Sondages",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Bonjour%s, <br/><br/><strong>%s</strong> ont participez au sondage «%s». <br/><br/> Pour accéder directement au sondage, vous pouvez utiliser ce <a href=\"%s\">lien</a>",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Bonjour %s, <br/><br/><strong>%s</strong> a participé au sondage «%s». <br/><br/> Pour accéder directement au sondage, vous pouvez utiliser ce <a href=\"%s\">lien</a>",
"Polls App - New Activity" : "Application de sondages - Nouvelle activité",
"Polls App" : "Application de sondages",
"Edit poll" : "Modifier le sondage",
@ -28,7 +28,7 @@ OC.L10N.register(
"hidden" : "masqué",
"Public access" : "Accès public",
"Select" : "Sélectionner",
"User/Group search" : "Recherche d'Utilisateur/Groupe",
"User/Group search" : "Recherche d'utilisateur/groupe",
"Anonymous" : "Anonyme",
"Hide user names for admin" : "Masquer les noms d'utilisateurs à l'administrateur",
"Expires" : "Expirera",
@ -57,7 +57,7 @@ OC.L10N.register(
"Usernames hidden to Owner" : "Noms d'utilisateur cachés au Propriétaire",
"Usernames visible to Owner" : "Noms d'utilisateur visibles par le Propriétaire",
"Click to get link" : "Cliquez pour obtenir le lien",
"Copy Link" : "Copier le Lien",
"Copy Link" : "Copier le lien",
"Delete poll" : "Supprimer le sondage",
"Edit Poll" : "Modifier le sondage",
"Poll expired" : "Sondage expiré",

Просмотреть файл

@ -1,7 +1,7 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "Voulez-vous réellement supprimer ce sondage (nouveau) ?",
"Nothing selected!\nClick on cells to turn them green." : "Rien n'est sélectionné !\nCliquez sur les cellules pour les basculer en vert.",
"You must enter at least a title for the new poll." : "Vous devez saisir au moins un titre pour ce nouveau sondage",
"You must enter at least a title for the new poll." : "Vous devez saisir au moins un titre pour ce nouveau sondage.",
"Please select at least one user or group!" : "Veuillez sélectionner au moins un utilisateur ou un groupe !",
"Copied!" : "Copié !",
"Copy" : "Copier",
@ -14,7 +14,7 @@
"just now" : "à l'instant",
"An error occurred, your comment was not posted." : "Une erreur s'est produite, votre commentaire n'a pas été publié.",
"Polls" : "Sondages",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Bonjour%s, <br/><br/><strong>%s</strong> ont participez au sondage «%s». <br/><br/> Pour accéder directement au sondage, vous pouvez utiliser ce <a href=\"%s\">lien</a>",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Bonjour %s, <br/><br/><strong>%s</strong> a participé au sondage «%s». <br/><br/> Pour accéder directement au sondage, vous pouvez utiliser ce <a href=\"%s\">lien</a>",
"Polls App - New Activity" : "Application de sondages - Nouvelle activité",
"Polls App" : "Application de sondages",
"Edit poll" : "Modifier le sondage",
@ -26,7 +26,7 @@
"hidden" : "masqué",
"Public access" : "Accès public",
"Select" : "Sélectionner",
"User/Group search" : "Recherche d'Utilisateur/Groupe",
"User/Group search" : "Recherche d'utilisateur/groupe",
"Anonymous" : "Anonyme",
"Hide user names for admin" : "Masquer les noms d'utilisateurs à l'administrateur",
"Expires" : "Expirera",
@ -55,7 +55,7 @@
"Usernames hidden to Owner" : "Noms d'utilisateur cachés au Propriétaire",
"Usernames visible to Owner" : "Noms d'utilisateur visibles par le Propriétaire",
"Click to get link" : "Cliquez pour obtenir le lien",
"Copy Link" : "Copier le Lien",
"Copy Link" : "Copier le lien",
"Delete poll" : "Supprimer le sondage",
"Edit Poll" : "Modifier le sondage",
"Poll expired" : "Sondage expiré",

81
l10n/he.js Normal file
Просмотреть файл

@ -0,0 +1,81 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "למחוק את הסקר הזה כעת (חדש)? ",
"Nothing selected!\nClick on cells to turn them green." : "שום דבר לא נבחר!\nיש ללחוץ על תאים כדי להפוך אותם לירוקים.",
"You must enter at least a title for the new poll." : "עליך להקליד לפחות את הכותרת לסקר החדש.",
"Please select at least one user or group!" : "נא לבחור משתמש אחד או קבוצה אחת לפחות!",
"Copied!" : "הועתק!",
"Copy" : "העתקה",
"Not supported!" : "אין תמיכה!",
"Press ⌘-C to copy." : "יש ללחוץ על ‎⌘-C כדי להעתיק.",
"Press Ctrl-C to copy." : "יש ללחוץ על Ctrl-C כדי להעתיק.",
"Copy to clipboard: Ctrl+C, Enter" : "העתקה ללוח הגזירים: Ctrl+C, Enter",
"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." : "נא להוסיף טקסט לתגובה שלך בטרם השליחה.",
"just now" : "כרגע",
"An error occurred, your comment was not posted." : "אירעה שגיאה, התגובה שלך לא פורסמה.",
"Polls" : "סקרים",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "שלום %s,<br/><br/><strong>%s</strong> השתתפו בסקר '%s'.<br/><br/>כדי לעבור ישירות לסקר, ניתן להשתמש ב<a href=\"%s\">קישור</a>",
"Polls App - New Activity" : "יישומון סקרים - פעילות חדשה",
"Polls App" : "יישומון סקרים",
"A polls app, similar to doodle/dudle with the possibility to restrict access." : "יישומון סקרים, בדומה ל־doodle/dudle אם האפשרות להגבלת גישה.",
"A polls app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "יישומון סקרים, דומה ל־doodle/dudle עם אפשרות להגבלת גישה (חברים, קבוצות/משתמשים מסוימים, הסתרה או חשיפה).",
"Edit poll" : "עריכת סקר",
"Create new poll" : "יצירת סקר חדש",
"Title" : "כותרת",
"Description" : "תיאור",
"Access" : "גישה",
"Registered users only" : "משתמשים רשומים בלבד",
"hidden" : "נסתר",
"Public access" : "גישה ציבורית",
"Select" : "בחירה",
"User/Group search" : "חיפוש משתמש/קבוצה",
"Anonymous" : "אלמוני",
"Hide user names for admin" : "הסתרת שמות משתמשים למנהלים",
"Expires" : "תפוגה",
"Event schedule" : "לו״ז אירועים",
"Text based" : "על בסיס טקסט",
"Dates" : "תאריכים",
"Text item" : "פריט טקסט",
"Add" : "הוספה",
"Update poll" : "עדכון סקר",
"Create poll" : "יצירת סקר",
"Cancel" : "ביטול",
"No description provided." : "לא סופק תיאור.",
"The poll 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" : "סגירה",
"Owner" : "בעלות",
"Expired" : "פג",
"Expires on %s" : "יפוג ב־%s",
"Expires never" : "לעולם לא יפוג",
"Invitation access" : "גישה להזמנה",
"Anononymous poll" : "סקר אלמוני",
"Usernames hidden to Owner" : "שמות המשתמשים נסתרים בפני הבעלים",
"Usernames visible to Owner" : "שמות המשתמשים גלויים לבעלים",
"Click to get link" : "יש ללחוץ כדי לקבל קישור",
"Copy Link" : "העתקת קישור",
"Delete poll" : "מחיקת סקר",
"Edit Poll" : "עריכת סקר",
"Poll expired" : "הסקר פג",
"Comments" : "תגובות",
"Login or ..." : "להיכנס או …",
"New comment …" : "תגובה חדשה…",
"No comments yet. Be the first." : "אין תגובות עדיין. זמן לחניכה.",
"No existing polls." : "אין סקרים קיימים.",
"By" : "מאת",
"Created" : "יצירה",
"participated" : "השתתפת",
"Yourself" : "עצמך",
"Never" : "מעולם לא",
"Access denied" : "הגישה נדחתה",
"You are not allowed to view this poll or the poll does not exist." : "אסור לך לצפות בסקר זה או שהסקר אינו קיים.",
"You are not allowed to edit this poll or the poll does not exist." : "אסור לך לערוך את הסקר הזה או שהסקר אינו קיים.",
"You are not allowed to delete this poll or the poll does not exist." : "אסור לך למחוק את הסקר הזה או שהסקר אינו קיים."
},
"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;");

79
l10n/he.json Normal file
Просмотреть файл

@ -0,0 +1,79 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "למחוק את הסקר הזה כעת (חדש)? ",
"Nothing selected!\nClick on cells to turn them green." : "שום דבר לא נבחר!\nיש ללחוץ על תאים כדי להפוך אותם לירוקים.",
"You must enter at least a title for the new poll." : "עליך להקליד לפחות את הכותרת לסקר החדש.",
"Please select at least one user or group!" : "נא לבחור משתמש אחד או קבוצה אחת לפחות!",
"Copied!" : "הועתק!",
"Copy" : "העתקה",
"Not supported!" : "אין תמיכה!",
"Press ⌘-C to copy." : "יש ללחוץ על ‎⌘-C כדי להעתיק.",
"Press Ctrl-C to copy." : "יש ללחוץ על Ctrl-C כדי להעתיק.",
"Copy to clipboard: Ctrl+C, Enter" : "העתקה ללוח הגזירים: Ctrl+C, Enter",
"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." : "נא להוסיף טקסט לתגובה שלך בטרם השליחה.",
"just now" : "כרגע",
"An error occurred, your comment was not posted." : "אירעה שגיאה, התגובה שלך לא פורסמה.",
"Polls" : "סקרים",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "שלום %s,<br/><br/><strong>%s</strong> השתתפו בסקר '%s'.<br/><br/>כדי לעבור ישירות לסקר, ניתן להשתמש ב<a href=\"%s\">קישור</a>",
"Polls App - New Activity" : "יישומון סקרים - פעילות חדשה",
"Polls App" : "יישומון סקרים",
"A polls app, similar to doodle/dudle with the possibility to restrict access." : "יישומון סקרים, בדומה ל־doodle/dudle אם האפשרות להגבלת גישה.",
"A polls app, similar to doodle/dudle with the possibility to restrict access (members, certain groups/users, hidden and public)." : "יישומון סקרים, דומה ל־doodle/dudle עם אפשרות להגבלת גישה (חברים, קבוצות/משתמשים מסוימים, הסתרה או חשיפה).",
"Edit poll" : "עריכת סקר",
"Create new poll" : "יצירת סקר חדש",
"Title" : "כותרת",
"Description" : "תיאור",
"Access" : "גישה",
"Registered users only" : "משתמשים רשומים בלבד",
"hidden" : "נסתר",
"Public access" : "גישה ציבורית",
"Select" : "בחירה",
"User/Group search" : "חיפוש משתמש/קבוצה",
"Anonymous" : "אלמוני",
"Hide user names for admin" : "הסתרת שמות משתמשים למנהלים",
"Expires" : "תפוגה",
"Event schedule" : "לו״ז אירועים",
"Text based" : "על בסיס טקסט",
"Dates" : "תאריכים",
"Text item" : "פריט טקסט",
"Add" : "הוספה",
"Update poll" : "עדכון סקר",
"Create poll" : "יצירת סקר",
"Cancel" : "ביטול",
"No description provided." : "לא סופק תיאור.",
"The poll 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" : "סגירה",
"Owner" : "בעלות",
"Expired" : "פג",
"Expires on %s" : "יפוג ב־%s",
"Expires never" : "לעולם לא יפוג",
"Invitation access" : "גישה להזמנה",
"Anononymous poll" : "סקר אלמוני",
"Usernames hidden to Owner" : "שמות המשתמשים נסתרים בפני הבעלים",
"Usernames visible to Owner" : "שמות המשתמשים גלויים לבעלים",
"Click to get link" : "יש ללחוץ כדי לקבל קישור",
"Copy Link" : "העתקת קישור",
"Delete poll" : "מחיקת סקר",
"Edit Poll" : "עריכת סקר",
"Poll expired" : "הסקר פג",
"Comments" : "תגובות",
"Login or ..." : "להיכנס או …",
"New comment …" : "תגובה חדשה…",
"No comments yet. Be the first." : "אין תגובות עדיין. זמן לחניכה.",
"No existing polls." : "אין סקרים קיימים.",
"By" : "מאת",
"Created" : "יצירה",
"participated" : "השתתפת",
"Yourself" : "עצמך",
"Never" : "מעולם לא",
"Access denied" : "הגישה נדחתה",
"You are not allowed to view this poll or the poll does not exist." : "אסור לך לצפות בסקר זה או שהסקר אינו קיים.",
"You are not allowed to edit this poll or the poll does not exist." : "אסור לך לערוך את הסקר הזה או שהסקר אינו קיים.",
"You are not allowed to delete this poll or the poll does not exist." : "אסור לך למחוק את הסקר הזה או שהסקר אינו קיים."
},"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;"
}

Просмотреть файл

@ -1,14 +1,23 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "Viltu virkilega eyða þessari könnun (ný)?",
"Nothing selected!\nClick on cells to turn them green." : "Ekkert valið!\nSmelltu á reiti til að gera þá græna.",
"You must enter at least a title for the new poll." : "Þú verður að gefa upp að minnsta kosti titil fyrir nýju könnunina.",
"Please select at least one user or group!" : "Veldu a.m.k. einn notanda eða hóp!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Afrita á klippispjald: Ctrl+C, Enter",
"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.",
"just now" : "Í þessum töluðu orðum",
"An error occurred, your comment was not posted." : "Villa kom upp, umsögnin þín var ekki send inn.",
"Polls" : "Kannanir",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hæ, %s,<br/><br/><strong>%s</strong> tók þátt í könnuninni '%s'.<br/><br/>Til að fara beint á könnunina, geturðu notað þennan <a href=\"%s\">tengil</a>",
"Polls App - New Activity" : "Kannanaforrit - Ný virkni",
"Polls App" : "Kannanaforrit",
"Edit poll" : "Breyta könnun",
"Create new poll" : "Búa til nýja könnun",
@ -29,16 +38,32 @@ OC.L10N.register(
"Text item" : "Textaatriði",
"Add" : "Bæta við",
"Update poll" : "Uppfæra könnun",
"Create poll" : "Búa til nkönnun",
"Create poll" : "Búa til könnun",
"Cancel" : "Hætta við",
"No description provided." : "Engin lýsing var gefin.",
"The poll 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",
"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",
"Owner" : "Eigandi",
"Expired" : "Útrunnið",
"Expires on %s" : "Rennur út %s",
"Expires never" : "Rennur aldrei út",
"Invitation access" : "Boðsaðgangur",
"Anononymous poll" : "Nafnlaus könnun",
"Usernames hidden to Owner" : "Nöfn notenda falin fyrir eiganda",
"Usernames visible to Owner" : "Nöfn notenda sýnileg eiganda",
"Click to get link" : "Smelltu til að fá tengil",
"Copy Link" : "Afrita tengil",
"Delete poll" : "Eyða könnun",
"Edit Poll" : "Breyta könnun",
"Poll 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.",
"No existing polls." : "Engar fyrirliggjandi kannanir",
"By" : "Eftir",
@ -47,6 +72,8 @@ OC.L10N.register(
"Yourself" : "Þú sjálf(ur)",
"Never" : "Aldrei",
"Access denied" : "Aðgangur ekki leyfður",
"You are not allowed to view this poll or the poll 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 view this poll or the poll 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 poll or the poll does not exist." : "Þú hefur ekki heimild til að breyta þessari könnun eða að könnunin er ekki til.",
"You are not allowed to delete this poll or the poll does not exist." : "Þú hefur ekki heimild til að eyða þessari könnun eða að könnunin er ekki til."
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");

Просмотреть файл

@ -1,12 +1,21 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "Viltu virkilega eyða þessari könnun (ný)?",
"Nothing selected!\nClick on cells to turn them green." : "Ekkert valið!\nSmelltu á reiti til að gera þá græna.",
"You must enter at least a title for the new poll." : "Þú verður að gefa upp að minnsta kosti titil fyrir nýju könnunina.",
"Please select at least one user or group!" : "Veldu a.m.k. einn notanda eða hóp!",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Afrita á klippispjald: Ctrl+C, Enter",
"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.",
"just now" : "Í þessum töluðu orðum",
"An error occurred, your comment was not posted." : "Villa kom upp, umsögnin þín var ekki send inn.",
"Polls" : "Kannanir",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Hæ, %s,<br/><br/><strong>%s</strong> tók þátt í könnuninni '%s'.<br/><br/>Til að fara beint á könnunina, geturðu notað þennan <a href=\"%s\">tengil</a>",
"Polls App - New Activity" : "Kannanaforrit - Ný virkni",
"Polls App" : "Kannanaforrit",
"Edit poll" : "Breyta könnun",
"Create new poll" : "Búa til nýja könnun",
@ -27,16 +36,32 @@
"Text item" : "Textaatriði",
"Add" : "Bæta við",
"Update poll" : "Uppfæra könnun",
"Create poll" : "Búa til nkönnun",
"Create poll" : "Búa til könnun",
"Cancel" : "Hætta við",
"No description provided." : "Engin lýsing var gefin.",
"The poll 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",
"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",
"Owner" : "Eigandi",
"Expired" : "Útrunnið",
"Expires on %s" : "Rennur út %s",
"Expires never" : "Rennur aldrei út",
"Invitation access" : "Boðsaðgangur",
"Anononymous poll" : "Nafnlaus könnun",
"Usernames hidden to Owner" : "Nöfn notenda falin fyrir eiganda",
"Usernames visible to Owner" : "Nöfn notenda sýnileg eiganda",
"Click to get link" : "Smelltu til að fá tengil",
"Copy Link" : "Afrita tengil",
"Delete poll" : "Eyða könnun",
"Edit Poll" : "Breyta könnun",
"Poll 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.",
"No existing polls." : "Engar fyrirliggjandi kannanir",
"By" : "Eftir",
@ -45,6 +70,8 @@
"Yourself" : "Þú sjálf(ur)",
"Never" : "Aldrei",
"Access denied" : "Aðgangur ekki leyfður",
"You are not allowed to view this poll or the poll 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 view this poll or the poll 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 poll or the poll does not exist." : "Þú hefur ekki heimild til að breyta þessari könnun eða að könnunin er ekki til.",
"You are not allowed to delete this poll or the poll does not exist." : "Þú hefur ekki heimild til að eyða þessari könnun eða að könnunin er ekki til."
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
}

Просмотреть файл

@ -19,6 +19,8 @@ OC.L10N.register(
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Ciao %s,<br/><br/><strong>%s</strong> ha partecipato al sondaggio '%s'.<br/><br/>Per andare direttamente al sondaggio, puoi utilizzare questo <a href=\"%s\">collegamento</a>",
"Polls App - New Activity" : "Sondaggi - Nuova attività",
"Polls App" : "Sondaggi",
"A polls 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 polls 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).",
"Edit poll" : "Modifica sondaggio",
"Create new poll" : "Crea nuovo sondaggio",
"Title" : "Titolo",
@ -42,7 +44,7 @@ OC.L10N.register(
"Cancel" : "Annulla",
"No description provided." : "Nessuna descrizione fornita.",
"The poll 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 in un colpo",
"Switch all options at once" : "Cambia tutte le opzioni contemporaneamente",
"Your name here" : "Qui il tuo nome",
"Vote!" : "Vota!",
"Receive notification email on activity" : "Ricevi un email di notifica sull'attività",
@ -73,7 +75,7 @@ OC.L10N.register(
"Never" : "Mai",
"Access denied" : "Accesso negato",
"You are not allowed to view this poll or the poll does not exist." : "Non hai il permesso di vedere questo sondaggio o il sondaggio non esiste.",
"You are not allowed to edit this poll or the poll does not exist." : "Non ti è permesso modificare questo sondaggio oppure il sondaggio non esiste",
"You are not allowed to delete this poll or the poll does not exist." : "Non ti è permesso eliminare questo sondaggio oppure il sondaggio non esiste"
"You are not allowed to edit this poll or the poll does not exist." : "Non ti è consentito modificare questo sondaggio oppure il sondaggio non esiste.",
"You are not allowed to delete this poll or the poll does not exist." : "Non ti è consentito eliminare questo sondaggio oppure il sondaggio non esiste."
},
"nplurals=2; plural=(n != 1);");

Просмотреть файл

@ -17,6 +17,8 @@
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Ciao %s,<br/><br/><strong>%s</strong> ha partecipato al sondaggio '%s'.<br/><br/>Per andare direttamente al sondaggio, puoi utilizzare questo <a href=\"%s\">collegamento</a>",
"Polls App - New Activity" : "Sondaggi - Nuova attività",
"Polls App" : "Sondaggi",
"A polls 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 polls 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).",
"Edit poll" : "Modifica sondaggio",
"Create new poll" : "Crea nuovo sondaggio",
"Title" : "Titolo",
@ -40,7 +42,7 @@
"Cancel" : "Annulla",
"No description provided." : "Nessuna descrizione fornita.",
"The poll 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 in un colpo",
"Switch all options at once" : "Cambia tutte le opzioni contemporaneamente",
"Your name here" : "Qui il tuo nome",
"Vote!" : "Vota!",
"Receive notification email on activity" : "Ricevi un email di notifica sull'attività",
@ -71,7 +73,7 @@
"Never" : "Mai",
"Access denied" : "Accesso negato",
"You are not allowed to view this poll or the poll does not exist." : "Non hai il permesso di vedere questo sondaggio o il sondaggio non esiste.",
"You are not allowed to edit this poll or the poll does not exist." : "Non ti è permesso modificare questo sondaggio oppure il sondaggio non esiste",
"You are not allowed to delete this poll or the poll does not exist." : "Non ti è permesso eliminare questo sondaggio oppure il sondaggio non esiste"
"You are not allowed to edit this poll or the poll does not exist." : "Non ti è consentito modificare questo sondaggio oppure il sondaggio non esiste.",
"You are not allowed to delete this poll or the poll does not exist." : "Non ti è consentito eliminare questo sondaggio oppure il sondaggio non esiste."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Просмотреть файл

@ -76,4 +76,4 @@ OC.L10N.register(
"You are not allowed to edit this poll or the poll does not exist." : "ამ გამოკითხვის ცვილების უფლება არ გაქვთ, ან გამოკითხვა არ არსებობს.",
"You are not allowed to delete this poll or the poll does not exist." : "ამ გამოკითხვის გაუქმების უფლება არ გაქვთ, ან გამოკითხვა არ არსებობს."
},
"nplurals=1; plural=0;");
"nplurals=2; plural=(n!=1);");

Просмотреть файл

@ -73,5 +73,5 @@
"You are not allowed to view this poll or the poll does not exist." : "ამ გამოკითხვის ჩვენების უფლებები არ გაქვთ, ან ის არ არსებობს.",
"You are not allowed to edit this poll or the poll does not exist." : "ამ გამოკითხვის ცვილების უფლება არ გაქვთ, ან გამოკითხვა არ არსებობს.",
"You are not allowed to delete this poll or the poll does not exist." : "ამ გამოკითხვის გაუქმების უფლება არ გაქვთ, ან გამოკითხვა არ არსებობს."
},"pluralForm" :"nplurals=1; plural=0;"
},"pluralForm" :"nplurals=2; plural=(n!=1);"
}

Просмотреть файл

@ -2,7 +2,10 @@ OC.L10N.register(
"polls",
{
"You must enter at least a title for the new poll." : "Naujai apklausai privalote įvesti bent pavadinimą.",
"Copied!" : "Nukopijuota!",
"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 vardą\n(bent 3 simbolius).",
"just now" : "ką tik",
"Polls" : "Apklausos",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Sveiki, %s,<br/><br/><strong>%s</strong> dalyvavo apklausoje \"%s\".<br/><br/>Norėdami pereiti tiesiai į apklausą, galite pasinaudoti šia <a href=\"%s\">nuoroda</a>",
"Polls App" : "Apklausų programėlė",
@ -16,9 +19,10 @@ OC.L10N.register(
"Cancel" : "Atsisakyti",
"No description provided." : "Nepateiktas aprašas.",
"The poll expired on %s. Voting is disabled, but you can still comment." : "Apklausa pasibaigė %s. Balsavimas yra išjungtas, tačiau vis dar galite komentuoti.",
"Copy Link" : "Kopijuoti nuorodą",
"Poll expired" : "Apklausa pasibaigė",
"Never" : "Niekada",
"Access denied" : "Prieiga negalima",
"You are not allowed to view this poll or the poll does not exist." : "Jums neleidžiama peržiūrėti šios apklausos arba apklausos nėra."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);");
"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);");

Просмотреть файл

@ -1,6 +1,9 @@
{ "translations": {
"You must enter at least a title for the new poll." : "Naujai apklausai privalote įvesti bent pavadinimą.",
"Copied!" : "Nukopijuota!",
"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 vardą\n(bent 3 simbolius).",
"just now" : "ką tik",
"Polls" : "Apklausos",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Sveiki, %s,<br/><br/><strong>%s</strong> dalyvavo apklausoje \"%s\".<br/><br/>Norėdami pereiti tiesiai į apklausą, galite pasinaudoti šia <a href=\"%s\">nuoroda</a>",
"Polls App" : "Apklausų programėlė",
@ -14,9 +17,10 @@
"Cancel" : "Atsisakyti",
"No description provided." : "Nepateiktas aprašas.",
"The poll expired on %s. Voting is disabled, but you can still comment." : "Apklausa pasibaigė %s. Balsavimas yra išjungtas, tačiau vis dar galite komentuoti.",
"Copy Link" : "Kopijuoti nuorodą",
"Poll expired" : "Apklausa pasibaigė",
"Never" : "Niekada",
"Access denied" : "Prieiga negalima",
"You are not allowed to view this poll or the poll does not exist." : "Jums neleidžiama peržiūrėti šios apklausos arba apklausos nėra."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
},"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);"
}

Просмотреть файл

@ -1,6 +1,7 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "Ønsker du virkelig å slette den avstemningen (ny)?",
"Nothing selected!\nClick on cells to turn them green." : "Ingenting valgt!\nKlikk på celler for å gjøre dem grønne.",
"You must enter at least a title for the new poll." : "Du må skrive inn minst en tittel for ny avstemning",
"Please select at least one user or group!" : "Velg minst én bruker eller gruppe",
@ -61,7 +62,7 @@ OC.L10N.register(
"Edit Poll" : "Rediger avstemning",
"Poll expired" : "Avstemning utløpt",
"Comments" : "Kommentarer",
"Login or ..." : "Logg inn eller…",
"Login or ..." : "Logg inn eller …",
"New comment …" : "Ny kommentar…",
"No comments yet. Be the first." : "Ingen kommentarer enda. Vær først.",
"No existing polls." : "Ingen eksisterende avstemninger.",

Просмотреть файл

@ -1,4 +1,5 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "Ønsker du virkelig å slette den avstemningen (ny)?",
"Nothing selected!\nClick on cells to turn them green." : "Ingenting valgt!\nKlikk på celler for å gjøre dem grønne.",
"You must enter at least a title for the new poll." : "Du må skrive inn minst en tittel for ny avstemning",
"Please select at least one user or group!" : "Velg minst én bruker eller gruppe",
@ -59,7 +60,7 @@
"Edit Poll" : "Rediger avstemning",
"Poll expired" : "Avstemning utløpt",
"Comments" : "Kommentarer",
"Login or ..." : "Logg inn eller…",
"Login or ..." : "Logg inn eller …",
"New comment …" : "Ny kommentar…",
"No comments yet. Be the first." : "Ingen kommentarer enda. Vær først.",
"No existing polls." : "Ingen eksisterende avstemninger.",

Просмотреть файл

@ -19,6 +19,8 @@ OC.L10N.register(
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Olá %s,<br/><br/><strong>%s</strong> participaram da pesquisa '%s'.<br/><br/>Para ir diretamente lá, você pode usar este <a href=\"%s\">link</a>",
"Polls App - New Activity" : "Aplicativo Polls - Atividade Nova",
"Polls App" : "Aplicativo Polls",
"A polls app, similar to doodle/dudle with the possibility to restrict access." : "Um aplicativo de enquetes, semelhante ao doodle/dudle podendo restringir o acesso.",
"A polls 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).",
"Edit poll" : "Editar pesquisa",
"Create new poll" : "Criar nova pesquisa",
"Title" : "Título",

Просмотреть файл

@ -17,6 +17,8 @@
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Olá %s,<br/><br/><strong>%s</strong> participaram da pesquisa '%s'.<br/><br/>Para ir diretamente lá, você pode usar este <a href=\"%s\">link</a>",
"Polls App - New Activity" : "Aplicativo Polls - Atividade Nova",
"Polls App" : "Aplicativo Polls",
"A polls app, similar to doodle/dudle with the possibility to restrict access." : "Um aplicativo de enquetes, semelhante ao doodle/dudle podendo restringir o acesso.",
"A polls 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).",
"Edit poll" : "Editar pesquisa",
"Create new poll" : "Criar nova pesquisa",
"Title" : "Título",

Просмотреть файл

@ -62,8 +62,8 @@ OC.L10N.register(
"Edit Poll" : "Редактировать опрос",
"Poll expired" : "Опрос завершён",
"Comments" : "Комментарии",
"Login or ..." : "Войти или...",
"New comment …" : "Новый комментарий...",
"Login or ..." : "Войти или",
"New comment …" : "Новый комментарий",
"No comments yet. Be the first." : "Тут нет комментариев, будьте первым.",
"No existing polls." : "Опросов не существует.",
"By" : "Добавлено пользователем",

Просмотреть файл

@ -60,8 +60,8 @@
"Edit Poll" : "Редактировать опрос",
"Poll expired" : "Опрос завершён",
"Comments" : "Комментарии",
"Login or ..." : "Войти или...",
"New comment …" : "Новый комментарий...",
"Login or ..." : "Войти или",
"New comment …" : "Новый комментарий",
"No comments yet. Be the first." : "Тут нет комментариев, будьте первым.",
"No existing polls." : "Опросов не существует.",
"By" : "Добавлено пользователем",

Просмотреть файл

@ -4,9 +4,16 @@ OC.L10N.register(
"Nothing selected!\nClick on cells to turn them green." : "Nič ste nevybrali!\nKliknutím na bunky ich zmeníte na zelené.",
"You must enter at least a title for the new poll." : "Pre novú anketu musíte zadať aspoň názov.",
"Please select at least one user or group!" : "Vyberte prosím aspoň jedného používateľa alebo skupinu.",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Skopírovať do schránky: Ctrl+C, Enter",
"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.",
"just now" : "práve teraz",
"An error occurred, your comment was not posted." : "Vyskytla sa chyba, váš komentár sa neodoslal.",
"Polls" : "Ankety",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Ahoj %s,<br/><br/><strong>%s</strong>sa zúčastnil v ankete '%s'.<br/><br/>Kliknutím na <a href=\"%s\">link</a> sa dostanete priamo k ankete.",
"Polls App" : "Aplikácia Ankety",
@ -36,10 +43,16 @@ OC.L10N.register(
"Your name here" : "Vaše meno sem",
"Vote!" : "Hlasujte!",
"Receive notification email on activity" : "Pri aktivite prijímať oznámenia e-mailom",
"Close" : "Zatvoriť",
"Owner" : "Vlastník",
"Anononymous poll" : "Anonymná anketa",
"Click to get link" : "Kliknite na získanie odkazu",
"Copy Link" : "Kopírovať odkaz",
"Delete poll" : "Zmazať anketu",
"Edit Poll" : "Upraviť anketu",
"Poll 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ý.",
"No existing polls." : "Žiadne existujúce ankety.",
"By" : "Od",
@ -48,6 +61,8 @@ OC.L10N.register(
"Yourself" : "Sám",
"Never" : "Nikdy",
"Access denied" : "Prístup zamietnutý",
"You are not allowed to view this poll or the poll does not exist." : "Nemáte oprávnenie na prezeranie tejto ankety alebo už anketa neexistuje."
"You are not allowed to view this poll or the poll does not exist." : "Nemáte oprávnenie na prezeranie tejto ankety alebo už anketa neexistuje.",
"You are not allowed to edit this poll or the poll does not exist." : "Nemáte oprávnenie na úpravy tejto ankety alebo už anketa neexistuje.",
"You are not allowed to delete this poll or the poll does not exist." : "Nemáte oprávnenie na zmazanie tejto ankety alebo už anketa neexistuje."
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");

Просмотреть файл

@ -2,9 +2,16 @@
"Nothing selected!\nClick on cells to turn them green." : "Nič ste nevybrali!\nKliknutím na bunky ich zmeníte na zelené.",
"You must enter at least a title for the new poll." : "Pre novú anketu musíte zadať aspoň názov.",
"Please select at least one user or group!" : "Vyberte prosím aspoň jedného používateľa alebo skupinu.",
"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.",
"Copy to clipboard: Ctrl+C, Enter" : "Skopírovať do schránky: Ctrl+C, Enter",
"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.",
"just now" : "práve teraz",
"An error occurred, your comment was not posted." : "Vyskytla sa chyba, váš komentár sa neodoslal.",
"Polls" : "Ankety",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Ahoj %s,<br/><br/><strong>%s</strong>sa zúčastnil v ankete '%s'.<br/><br/>Kliknutím na <a href=\"%s\">link</a> sa dostanete priamo k ankete.",
"Polls App" : "Aplikácia Ankety",
@ -34,10 +41,16 @@
"Your name here" : "Vaše meno sem",
"Vote!" : "Hlasujte!",
"Receive notification email on activity" : "Pri aktivite prijímať oznámenia e-mailom",
"Close" : "Zatvoriť",
"Owner" : "Vlastník",
"Anononymous poll" : "Anonymná anketa",
"Click to get link" : "Kliknite na získanie odkazu",
"Copy Link" : "Kopírovať odkaz",
"Delete poll" : "Zmazať anketu",
"Edit Poll" : "Upraviť anketu",
"Poll 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ý.",
"No existing polls." : "Žiadne existujúce ankety.",
"By" : "Od",
@ -46,6 +59,8 @@
"Yourself" : "Sám",
"Never" : "Nikdy",
"Access denied" : "Prístup zamietnutý",
"You are not allowed to view this poll or the poll does not exist." : "Nemáte oprávnenie na prezeranie tejto ankety alebo už anketa neexistuje."
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
"You are not allowed to view this poll or the poll does not exist." : "Nemáte oprávnenie na prezeranie tejto ankety alebo už anketa neexistuje.",
"You are not allowed to edit this poll or the poll does not exist." : "Nemáte oprávnenie na úpravy tejto ankety alebo už anketa neexistuje.",
"You are not allowed to delete this poll or the poll does not exist." : "Nemáte oprávnenie na zmazanie tejto ankety alebo už anketa neexistuje."
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
}

Просмотреть файл

@ -19,6 +19,8 @@ OC.L10N.register(
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Merhaba %s,<br/><br/><strong>%s</strong> kullanıcısı '%s' anketine katıldı.<br/><br/>Doğrudan ankete gitmek için <a href=\"%s\">bu bağlantıya tıklayın</a>",
"Polls App - New Activity" : "Anketler Uygulaması - Yeni İşlem",
"Polls App" : "Anketler Uygulaması",
"A polls 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 polls 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.",
"Edit poll" : "Anketi düzenle",
"Create new poll" : "Yeni anket ekle",
"Title" : "Başlık",

Просмотреть файл

@ -17,6 +17,8 @@
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "Merhaba %s,<br/><br/><strong>%s</strong> kullanıcısı '%s' anketine katıldı.<br/><br/>Doğrudan ankete gitmek için <a href=\"%s\">bu bağlantıya tıklayın</a>",
"Polls App - New Activity" : "Anketler Uygulaması - Yeni İşlem",
"Polls App" : "Anketler Uygulaması",
"A polls 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 polls 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.",
"Edit poll" : "Anketi düzenle",
"Create new poll" : "Yeni anket ekle",
"Title" : "Başlık",

79
l10n/zh_CN.js Normal file
Просмотреть файл

@ -0,0 +1,79 @@
OC.L10N.register(
"polls",
{
"Do you really want to delete that poll (new)?" : "你确定想要删除投票(新的)?",
"Nothing selected!\nClick on cells to turn them green." : "没有选择任何项目!\n点击表格使其变绿色以选中。",
"You must enter at least a title for the new poll." : "你必须为新投票键入标题",
"Please select at least one user or group!" : "请至少选择一个用户或者小组",
"Copied!" : "已复制!",
"Copy" : "复制",
"Not supported!" : "不支持!",
"Press ⌘-C to copy." : "按 ⌘-C 复制",
"Press Ctrl-C to copy." : "按 Ctrl+C 复制",
"Copy to clipboard: Ctrl+C, Enter" : "复制到剪贴板: Ctrl+C, Enter",
"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." : "请输入评论以提交。",
"just now" : "刚刚",
"An error occurred, your comment was not posted." : "发生了一个错误,你的评论未成功提交。",
"Polls" : "投票",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "你好%s<br/><br/><strong>%s</strong>参加了投票“%s”。<br/><br/>以打开投票,你可以直接使用此<a href=\"%s\">链接</a>",
"Polls App - New Activity" : "投票应用 - 新的活动",
"Polls App" : "投票应用",
"Edit poll" : "编辑投票",
"Create new poll" : "创建新的投票",
"Title" : "标题",
"Description" : "描述",
"Access" : "进入",
"Registered users only" : "只有以注册的用户",
"hidden" : "隐藏",
"Public access" : "公开权限",
"Select" : "选择",
"User/Group search" : "用户/小组 搜索",
"Anonymous" : "匿名",
"Hide user names for admin" : "为管理员隐藏用户名",
"Expires" : "过期",
"Event schedule" : "事件计划",
"Text based" : "文本为基础的",
"Dates" : "日期",
"Text item" : "文本项目",
"Add" : "添加",
"Update poll" : "更新投票",
"Create poll" : "创建投票",
"Cancel" : "取消",
"No description provided." : "没有提供描述。",
"The poll 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" : "关闭",
"Owner" : "拥有者",
"Expired" : "已过期",
"Expires on %s" : "在%s过期",
"Expires never" : "从不过期",
"Invitation access" : "邀请权限",
"Anononymous poll" : "匿名投票",
"Usernames hidden to Owner" : "多所有者隐藏用户名",
"Usernames visible to Owner" : "对所有者显示用户名",
"Click to get link" : "点击以获取链接",
"Copy Link" : "复制链接",
"Delete poll" : "删除投票",
"Edit Poll" : "编辑投票",
"Poll expired" : "投票已过期",
"Comments" : "评论",
"Login or ..." : "登陆或者。。。",
"New comment …" : "新评论。。。",
"No comments yet. Be the first." : "还没有评论。成为第一个评论的人吧。",
"No existing polls." : "没有投票存在。",
"By" : "由",
"Created" : "已创建",
"participated" : "参加了",
"Yourself" : "你自己",
"Never" : "从不",
"Access denied" : "访问被拒绝",
"You are not allowed to view this poll or the poll does not exist." : "你无权查看此投票或者此投票不存在。",
"You are not allowed to edit this poll or the poll does not exist." : "你无权编辑此投票或者此投票不存在。",
"You are not allowed to delete this poll or the poll does not exist." : "你无权删除此投票或者此投票不存在。"
},
"nplurals=1; plural=0;");

77
l10n/zh_CN.json Normal file
Просмотреть файл

@ -0,0 +1,77 @@
{ "translations": {
"Do you really want to delete that poll (new)?" : "你确定想要删除投票(新的)?",
"Nothing selected!\nClick on cells to turn them green." : "没有选择任何项目!\n点击表格使其变绿色以选中。",
"You must enter at least a title for the new poll." : "你必须为新投票键入标题",
"Please select at least one user or group!" : "请至少选择一个用户或者小组",
"Copied!" : "已复制!",
"Copy" : "复制",
"Not supported!" : "不支持!",
"Press ⌘-C to copy." : "按 ⌘-C 复制",
"Press Ctrl-C to copy." : "按 Ctrl+C 复制",
"Copy to clipboard: Ctrl+C, Enter" : "复制到剪贴板: Ctrl+C, Enter",
"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." : "请输入评论以提交。",
"just now" : "刚刚",
"An error occurred, your comment was not posted." : "发生了一个错误,你的评论未成功提交。",
"Polls" : "投票",
"Hello %s,<br/><br/><strong>%s</strong> participated in the poll '%s'.<br/><br/>To go directly to the poll, you can use this <a href=\"%s\">link</a>" : "你好%s<br/><br/><strong>%s</strong>参加了投票“%s”。<br/><br/>以打开投票,你可以直接使用此<a href=\"%s\">链接</a>",
"Polls App - New Activity" : "投票应用 - 新的活动",
"Polls App" : "投票应用",
"Edit poll" : "编辑投票",
"Create new poll" : "创建新的投票",
"Title" : "标题",
"Description" : "描述",
"Access" : "进入",
"Registered users only" : "只有以注册的用户",
"hidden" : "隐藏",
"Public access" : "公开权限",
"Select" : "选择",
"User/Group search" : "用户/小组 搜索",
"Anonymous" : "匿名",
"Hide user names for admin" : "为管理员隐藏用户名",
"Expires" : "过期",
"Event schedule" : "事件计划",
"Text based" : "文本为基础的",
"Dates" : "日期",
"Text item" : "文本项目",
"Add" : "添加",
"Update poll" : "更新投票",
"Create poll" : "创建投票",
"Cancel" : "取消",
"No description provided." : "没有提供描述。",
"The poll 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" : "关闭",
"Owner" : "拥有者",
"Expired" : "已过期",
"Expires on %s" : "在%s过期",
"Expires never" : "从不过期",
"Invitation access" : "邀请权限",
"Anononymous poll" : "匿名投票",
"Usernames hidden to Owner" : "多所有者隐藏用户名",
"Usernames visible to Owner" : "对所有者显示用户名",
"Click to get link" : "点击以获取链接",
"Copy Link" : "复制链接",
"Delete poll" : "删除投票",
"Edit Poll" : "编辑投票",
"Poll expired" : "投票已过期",
"Comments" : "评论",
"Login or ..." : "登陆或者。。。",
"New comment …" : "新评论。。。",
"No comments yet. Be the first." : "还没有评论。成为第一个评论的人吧。",
"No existing polls." : "没有投票存在。",
"By" : "由",
"Created" : "已创建",
"participated" : "参加了",
"Yourself" : "你自己",
"Never" : "从不",
"Access denied" : "访问被拒绝",
"You are not allowed to view this poll or the poll does not exist." : "你无权查看此投票或者此投票不存在。",
"You are not allowed to edit this poll or the poll does not exist." : "你无权编辑此投票或者此投票不存在。",
"You are not allowed to delete this poll or the poll does not exist." : "你无权删除此投票或者此投票不存在。"
},"pluralForm" :"nplurals=1; plural=0;"
}

Просмотреть файл

@ -47,7 +47,7 @@ class Application extends App {
/**
* Controllers
*/
$container->registerService('PageController', function (IContainer $c) {
$container->registerService('PageController', function(IContainer $c) {
return new PageController(
$c->query('AppName'),
$c->query('Request'),
@ -66,51 +66,51 @@ class Application extends App {
);
});
$container->registerService('UserManager', function (IContainer $c) {
$container->registerService('UserManager', function(IContainer $c) {
return $c->query('ServerContainer')->getUserManager();
});
$container->registerService('GroupManager', function (IContainer $c) {
$container->registerService('GroupManager', function(IContainer $c) {
return $c->query('ServerContainer')->getGroupManager();
});
$container->registerService('AvatarManager', function (IContainer $c) {
$container->registerService('AvatarManager', function(IContainer $c) {
return $c->query('ServerContainer')->getAvatarManager();
});
$container->registerService('Logger', function (IContainer $c) {
$container->registerService('Logger', function(IContainer $c) {
return $c->query('ServerContainer')->getLogger();
});
$container->registerService('L10N', function (IContainer $c) {
$container->registerService('L10N', function(IContainer $c) {
return $c->query('ServerContainer')->getL10N($c->query('AppName'));
});
$container->registerService('CommentMapper', function (IContainer $c) use ($server) {
$container->registerService('CommentMapper', function(IContainer $c) use ($server) {
return new CommentMapper(
$server->getDatabaseConnection()
);
});
$container->registerService('OptionsMapper', function (IContainer $c) use ($server) {
$container->registerService('OptionsMapper', function(IContainer $c) use ($server) {
return new OptionsMapper(
$server->getDatabaseConnection()
);
});
$container->registerService('EventMapper', function (IContainer $c) use ($server) {
$container->registerService('EventMapper', function(IContainer $c) use ($server) {
return new EventMapper(
$server->getDatabaseConnection()
);
});
$container->registerService('NotificationMapper', function (IContainer $c) use ($server) {
$container->registerService('NotificationMapper', function(IContainer $c) use ($server) {
return new NotificationMapper(
$server->getDatabaseConnection()
);
});
$container->registerService('VotesMapper', function (IContainer $c) use ($server) {
$container->registerService('VotesMapper', function(IContainer $c) use ($server) {
return new VotesMapper(
$server->getDatabaseConnection()
);
@ -122,7 +122,7 @@ class Application extends App {
*/
public function registerNavigationEntry() {
$container = $this->getContainer();
$container->query('OCP\INavigationManager')->add(function () use ($container) {
$container->query('OCP\INavigationManager')->add(function() use ($container) {
$urlGenerator = $container->query('OCP\IURLGenerator');
$l10n = $container->query('OCP\IL10N');
return [

Просмотреть файл

@ -0,0 +1,390 @@
<?php
/**
* @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
*
* @author René Gieling <github@dartcafe.de>
*
* @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 <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Polls\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\Polls\Db\Event;
use OCA\Polls\Db\EventMapper;
use OCA\Polls\Db\Options;
use OCA\Polls\Db\OptionsMapper;
use OCA\Polls\Db\Votes;
use OCA\Polls\Db\VotesMapper;
use OCA\Polls\Db\Comment;
use OCA\Polls\Db\CommentMapper;
class ApiController extends Controller {
private $eventMapper;
private $optionsMapper;
private $votesMapper;
private $commentMapper;
/**
* PageController constructor.
* @param string $appName
* @param IRequest $request
* @param string $userId
* @param EventMapper $eventMapper
* @param OptionsMapper $optionsMapper
* @param VotesMapper $VotesMapper
* @param CommentMapper $CommentMapper
*/
public function __construct(
$appName,
IGroupManager $groupManager,
IRequest $request,
IUserManager $userManager,
$userId,
EventMapper $eventMapper,
OptionsMapper $optionsMapper,
VotesMapper $VotesMapper,
CommentMapper $CommentMapper
) {
parent::__construct($appName, $request);
$this->userId = $userId;
$this->groupManager = $groupManager;
$this->userManager = $userManager;
$this->eventMapper = $eventMapper;
$this->optionsMapper = $optionsMapper;
$this->votesMapper = $VotesMapper;
$this->commentMapper = $CommentMapper;
}
/**
* @NoAdminRequired
* @NoCSRFRequired
* @return DataResponse
*/
public function getSiteUsersAndGroups($getGroups = true, $getUsers = true, $skipGroups = array(), $skipUsers = array()) {
$list = array();
$data = array();
if ($getGroups) {
$groups = $this->groupManager->search('');
foreach ($groups as $group) {
if (!in_array($group->getGID(), $skipGroups)) {
$list[] = [
'id' => $group->getGID(),
'type' => 'group',
'displayName' => $group->getGID(),
'avatarURL' => ''
];
}
}
}
if ($getUsers) {
$users = $this->userManager->searchDisplayName('');
foreach ($users as $user) {
if (!in_array($user->getUID(), $skipUsers)) {
$list[] = [
'id' => $user->getUID(),
'type' => 'user',
'displayName' => $user->getDisplayName(),
'avatarURL' => ''
];
}
}
}
$data['siteusers'] = $list;
return new DataResponse($data, Http::STATUS_OK);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
* @return Array
*/
function convertAccessList($item) {
$split = Array();
if (strpos($item, 'user_') === 0) {
$user = $this->userManager->get(substr($item, 5));
$split = [
'id' => $user->getUID(),
'type' => 'user',
'displayName' => $user->getDisplayName(),
'avatarURL' => ''
];
} elseif (strpos($item, 'group_') === 0) {
$group = substr($item, 6);
$group = $this->groupManager->get($group);
$split = [
'id' => $group->getGID(),
'type' => 'group',
'displayName' => $group->getDisplayName(),
'avatarURL' => '',
];
}
return($split);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
* @PublicPage
* @param string $hash
* @return DataResponse
*/
public function getPoll($hash) {
if (!\OC::$server->getUserSession()->getUser() instanceof IUser) {
return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
}
try {
$poll = $this->eventMapper->findByHash($hash);
if ($poll->getExpire() === null) {
$expired = false;
$expiration = false;
} else {
$expired = time() > strtotime($poll->getExpire());
$expiration = true;
}
if ($poll->getType() == 0) {
$pollType = 'datePoll';
} else {
$pollType = 'textPoll';
};
if ($poll->getOwner() !== \OC::$server->getUserSession()->getUser()->getUID()) {
$mode = 'create';
} else {
$mode = 'edit';
}
$accessList = Array();
$accessType = $poll->getAccess();
if (!strpos('|public|hidden|registered', $accessType)) {
$accessList = explode(';',$accessType);
$accessList = array_filter($accessList);
$accessList = array_map(Array($this,'convertAccessList'), $accessList);
$accessType = 'select';
}
$data = array();
$commentsList = array();
$optionList = array();
$votesList = array();
} catch (DoesNotExistException $e) {
return new DataResponse($e, Http::STATUS_NOT_FOUND);
};
try {
$options = $this->optionsMapper->findByPoll($poll->getId());
foreach ($options as $optionElement) {
$optionList[] = [
'id' => $optionElement->getId(),
'text' => $optionElement->getPollOptionText(),
'timestamp' => $optionElement->getTimestamp()
];
};
} catch (DoesNotExistException $e) {
// ignore
};
try {
$votes = $this->votesMapper->findByPoll($poll->getId());
foreach ($votes as $voteElement) {
$votesList[] = [
'id' => $voteElement->getId(),
'userId' => $voteElement->getUserId(),
'voteOptionId' => $voteElement->getVoteOptionId(),
'voteOptionText' => $voteElement->getVoteOptionText(),
'voteAnswer' => $voteElement->getVoteAnswer()
];
};
} catch (DoesNotExistException $e) {
// ignore
};
try {
$comments = $this->commentMapper->findByPoll($poll->getId());
foreach ($comments as $commentElement) {
$commentsList[] = [
'id' => $commentElement->getId(),
'userId' => $commentElement->getUserId(),
'date' => $commentElement->getDt() . ' UTC',
'comment' => $commentElement->getComment()
];
};
} catch (DoesNotExistException $e) {
// ignore
};
$data['poll'] = [
'result' => 'found',
'mode' => $mode,
'comments' => $commentsList,
'votes' => $votesList,
'shares' => $accessList,
'event' => [
'id' => $poll->getId(),
'hash' => $hash,
'type' => $pollType,
'title' => $poll->getTitle(),
'description' => $poll->getDescription(),
'owner' => $poll->getOwner(),
'created' => $poll->getCreated(),
'access' => $accessType,
'expiration' => $expiration,
'expired' => $expired,
'expirationDate' => $poll->getExpire(),
'isAnonymous' => $poll->getIsAnonymous(),
'fullAnonymous' => $poll->getFullAnonymous(),
'disallowMaybe' => $poll->getDisallowMaybe()
],
'options' => [
'pollDates' => [],
'pollTexts' => $optionList
]
];
return new DataResponse($data, Http::STATUS_OK);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
* @param string $poll
* @return DataResponse
*/
public function writePoll($event, $options, $shares, $mode) {
$user = \OC::$server->getUserSession()->getUser();
if (!$user instanceof IUser) {
return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
}
$userId = \OC::$server->getUserSession()->getUser()->getUID();
$newEvent = new Event();
// Set the configuration options entered by the user
$newEvent->setTitle($event['title']);
$newEvent->setDescription($event['description']);
$newEvent->setType($event['type']);
$newEvent->setIsAnonymous($event['isAnonymous']);
$newEvent->setFullAnonymous($event['fullAnonymous']);
$newEvent->setDisallowMaybe($event['disallowMaybe']);
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($event['expirationDate']);
} else {
$newEvent->setExpire(null);
}
if ($event['type'] === 'datePoll') {
$newEvent->setType(0);
} elseif ($event['type'] === 'textPoll') {
$newEvent->setType(1);
}
if ($mode === 'edit') {
// Edit existing poll
$oldPoll = $this->eventMapper->findByHash($event['hash']);
// Check if current user is allowed to edit existing poll
if ($oldPoll->getOwner() !== $userId) {
// If current user is not owner of existing poll deny access
return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
}
// else take owner, hash and id of existing poll
$newEvent->setOwner($oldPoll->getOwner());
$newEvent->setHash($oldPoll->getHash());
$newEvent->setId($oldPoll->getId());
$this->eventMapper->update($newEvent);
$this->optionsMapper->deleteByPoll($newEvent->getId());
} elseif ($mode === 'create') {
// Create new poll
// Define current user as owner, set new creation date and create a new hash
$newEvent->setOwner($userId);
$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
if ($event['type'] === 'datePoll') {
foreach ($options['pollDates'] as $optionElement) {
$newOption = new Options();
$newOption->setPollId($newEvent->getId());
$newOption->setPollOptionText(date('Y-m-d H:i:s', $optionElement['timestamp']));
$newOption->setTimestamp($optionElement['timestamp']);
$this->optionsMapper->insert($newOption);
}
} elseif ($event['type'] === "textPoll") {
foreach ($options['pollTexts'] as $optionElement) {
$newOption = new Options();
$newOption->setPollId($newEvent->getId());
$newOption->setpollOptionText(htmlspecialchars($optionElement['text']));
$this->optionsMapper->insert($newOption);
}
}
return new DataResponse(array(
'id' => $newEvent->getId(),
'hash' => $newEvent->getHash()
), Http::STATUS_OK);
}
}

Просмотреть файл

@ -267,219 +267,19 @@ class PageController extends Controller {
* @return TemplateResponse
*/
public function editPoll($hash) {
$poll = $this->eventMapper->findByHash($hash);
if ($this->userId !== $poll->getOwner()) {
return new TemplateResponse('polls', 'no.create.tmpl');
}
$options = $this->optionsMapper->findByPoll($poll->getId());
return new TemplateResponse('polls', 'create.tmpl', [
'poll' => $poll,
'options' => $options,
'userId' => $this->userId,
'userMgr' => $this->userMgr,
'urlGenerator' => $this->urlGenerator
'urlGenerator' => $this->urlGenerator,
'hash' => $hash
]);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
* @param int $pollId
* @param string $pollType
* @param string $pollTitle
* @param string $pollDesc
* @param string $userId
* @param string $chosenOptions
* @param int $expireTs
* @param string $accessType
* @param string $accessValues
* @param bool $isAnonymous
* @param bool $hideNames
* @return RedirectResponse
*/
public function updatePoll(
$pollId,
$pollType,
$pollTitle,
$pollDesc,
$chosenOptions,
$expireTs,
$accessType,
$accessValues,
$isAnonymous,
$hideNames
) {
$event = $this->eventMapper->find($pollId);
$event->setTitle($pollTitle);
$event->setDescription($pollDesc);
$event->setIsAnonymous($isAnonymous ? 1 : 0);
$event->setFullAnonymous($isAnonymous && $hideNames ? 1 : 0);
if ($accessType === 'select') {
if (isset($accessValues)) {
$accessValues = json_decode($accessValues);
if ($accessValues !== null) {
$groups = array();
$users = array();
if ($accessValues->groups !== null) {
$groups = $accessValues->groups;
}
if ($accessValues->users !== null) {
$users = $accessValues->users;
}
$accessType = '';
foreach ($groups as $gid) {
$accessType .= $gid . ';';
}
foreach ($users as $uid) {
$accessType .= $uid . ';';
}
}
}
}
$event->setAccess($accessType);
/** @var string[] $optionsArray */
$optionsArray = json_decode($chosenOptions, true);
$expire = null;
if ($expireTs !== 0 && $expireTs !== '') {
$expire = date('Y-m-d H:i:s', $expireTs);
}
$event->setExpire($expire);
$this->optionsMapper->deleteByPoll($pollId);
if ($pollType === 'event') {
$event->setType(0);
$this->eventMapper->update($event);
sort($optionsArray);
foreach ($optionsArray as $optionElement) {
$option = new Options();
$option->setPollId($pollId);
$option->setPollOptionText(date('Y-m-d H:i:s', (int)$optionElement));
$this->optionsMapper->insert($option);
}
} else {
$event->setType(1);
$this->eventMapper->update($event);
foreach ($optionsArray as $optionElement) {
$option = new Options();
$option->setPollId($pollId);
$option->setpollOptionText($optionElement);
$this->optionsMapper->insert($option);
}
}
$url = $this->urlGenerator->linkToRoute('polls.page.index');
return new RedirectResponse($url);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
*/
public function createPoll() {
return new TemplateResponse('polls', 'create.tmpl',
['userId' => $this->userId, 'userMgr' => $this->userMgr, 'urlGenerator' => $this->urlGenerator]);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
* @param string $pollType
* @param string $pollTitle
* @param string $pollDesc
* @param string $userId
* @param string $chosenOptions
* @param int $expireTs
* @param string $accessType
* @param string $accessValues
* @param bool $isAnonymous
* @param bool $hideNames
* @return RedirectResponse
*/
public function insertPoll(
$pollType,
$pollTitle,
$pollDesc,
$userId,
$chosenOptions,
$expireTs,
$accessType,
$accessValues,
$isAnonymous,
$hideNames
) {
$event = new Event();
$event->setTitle($pollTitle);
$event->setDescription($pollDesc);
$event->setOwner($userId);
$event->setCreated(date('Y-m-d H:i:s'));
$event->setHash(\OC::$server->getSecureRandom()->generate(
16,
ISecureRandom::CHAR_DIGITS .
ISecureRandom::CHAR_LOWER .
ISecureRandom::CHAR_UPPER
));
$event->setIsAnonymous($isAnonymous ? 1 : 0);
$event->setFullAnonymous($isAnonymous && $hideNames ? 1 : 0);
if ($accessType === 'select') {
if (isset($accessValues)) {
$accessValues = json_decode($accessValues);
if ($accessValues !== null) {
$groups = array();
$users = array();
if ($accessValues->groups !== null) {
$groups = $accessValues->groups;
}
if ($accessValues->users !== null) {
$users = $accessValues->users;
}
$accessType = '';
foreach ($groups as $gid) {
$accessType .= $gid . ';';
}
foreach ($users as $uid) {
$accessType .= $uid . ';';
}
}
}
}
$event->setAccess($accessType);
/** @var string[] $optionsArray */
$optionsArray = json_decode($chosenOptions, true);
$expire = null;
if ($expireTs !== 0 && $expireTs !== '') {
$expire = date('Y-m-d H:i:s', $expireTs);
}
$event->setExpire($expire);
if ($pollType === 'event') {
$event->setType(0);
$ins = $this->eventMapper->insert($event);
$pollId = $ins->getId();
sort($optionsArray);
foreach ($optionsArray as $optionElement) {
$option = new Options();
$option->setPollId($pollId);
$option->setPollOptionText(date('Y-m-d H:i:s', (int)$optionElement));
$this->optionsMapper->insert($option);
}
} else {
$event->setType(1);
$ins = $this->eventMapper->insert($event);
$pollId = $ins->getId();
foreach ($optionsArray as $optionElement) {
$option = new Options();
$option->setPollId($pollId);
$option->setpollOptionText($optionElement);
$this->optionsMapper->insert($option);
}
}
$url = $this->urlGenerator->linkToRoute('polls.page.index');
return new RedirectResponse($url);
['urlGenerator' => $this->urlGenerator]);
}
/**
@ -520,8 +320,6 @@ class PageController extends Controller {
$poll = $this->eventMapper->find($pollId);
if ($changed) {
// $dates = json_decode($dates);
// $types = json_decode($types);
$options = json_decode($options);
$answers = json_decode($answers);
$count_options = count($options);
@ -531,12 +329,7 @@ class PageController extends Controller {
$vote = new Votes();
$vote->setPollId($pollId);
$vote->setUserId($userId);
// $part->setDt(date('Y-m-d H:i:s', $options[$i]));
// $part->setType($types[$i]);
// $vote->setVoteOptionId($options[$i]); //Todo
// $vote->setVoteOptionText($poll->getOptionTextFromId($options[$i])); //Todo
// $vote->setVoteType($types[$i]); //needed?
$vote->setVoteOptionText($options[$i]);
$vote->setVoteOptionText(htmlspecialchars($options[$i]));
$vote->setVoteAnswer($answers[$i]);
$this->votesMapper->insert($vote);
@ -574,7 +367,7 @@ class PageController extends Controller {
return new JSONResponse(array(
'userId' => $userId,
'displayName' => $displayName,
'timeStamp' => $timeStamp *100,
'timeStamp' => $timeStamp * 100,
'date' => date('Y-m-d H:i:s', $timeStamp),
'relativeNow' => $this->trans->t('just now'),
'comment' => $commentBox
@ -636,15 +429,15 @@ class PageController extends Controller {
$sUsers[] = str_replace('user_', '', $su);
}
foreach ($userNames as $u) {
$alreadyAdded = false;
$allreadyAdded = false;
foreach ($sUsers as &$su) {
if ($su === $u->getUID()) {
unset($su);
$alreadyAdded = true;
$allreadyAdded = true;
break;
}
}
if (!$alreadyAdded) {
if (!$allreadyAdded) {
$users[] = array('uid' => $u->getUID(), 'displayName' => $u->getDisplayName(), 'isGroup' => false);
} else {
continue;
@ -673,12 +466,14 @@ class PageController extends Controller {
}
// Nextcloud >= 12
$groups = $this->groupManager->getUserGroups(\OC::$server->getUserSession()->getUser());
return array_map(function ($group) {
return array_map(function($group) {
return $group->getGID();
}, $groups);
}
/**
* Check if user has access to this poll
*
* @param Event $poll
* @return bool
*/
@ -719,4 +514,20 @@ class PageController extends Controller {
}
return false;
}
/**
* Check if user is owner of this poll
*
* @param Event $poll
* @return bool
*/
private function userIsOwner($poll) {
$owner = $poll->getOwner();
if ($owner === $this->userId) {
return true;
}
Util::writeLog('polls', $this->userId, Util::ERROR);
return false;
}
}

Просмотреть файл

@ -24,6 +24,8 @@
namespace OCA\Polls\Db;
use OCP\AppFramework\Db\Entity;
/**
* @method string getUserId()
* @method void setUserId(string $value)

Просмотреть файл

@ -24,6 +24,8 @@
namespace OCA\Polls\Db;
use OCP\AppFramework\Db\Entity;
/**
* @method integer getType()
* @method void setType(integer $value)
@ -45,6 +47,8 @@ namespace OCA\Polls\Db;
* @method void setIsAnonymous(integer $value)
* @method integer getFullAnonymous()
* @method void setFullAnonymous(integer $value)
* @method integer getDisallowMaybe()
* @method void setDisallowMaybe(integer $value)
*/
class Event extends Model {
protected $type;
@ -57,6 +61,7 @@ class Event extends Model {
protected $hash;
protected $isAnonymous;
protected $fullAnonymous;
protected $disallowMaybe;
/**
* Event constructor.
@ -65,5 +70,6 @@ class Event extends Model {
$this->addType('type', 'integer');
$this->addType('isAnonymous', 'integer');
$this->addType('fullAnonymous', 'integer');
$this->addType('disallowMaybe', 'integer');
}
}

Просмотреть файл

@ -24,6 +24,8 @@
namespace OCA\Polls\Db;
use OCP\AppFramework\Db\Entity;
/**
* @method string getUserId()
* @method void setUserId(string $value)

Просмотреть файл

@ -24,20 +24,27 @@
namespace OCA\Polls\Db;
use OCP\AppFramework\Db\Entity;
/**
* @method integer getPollId()
* @method void setPollId(integer $value)
* @method string getPollOptionText()
* @method void setPollOptionText(string $value)
* @method string getTimestamp()
* @method void setTimestamp(Integer $value)
*/
class Options extends Model {
protected $pollId;
protected $pollOptionText;
protected $timestamp;
/**
* Options constructor.
*/
public function __construct() {
$this->addType('pollId', 'integer');
$this->addType('pollOptionText', 'string');
$this->addType('timestamp', 'integer');
}
}

Просмотреть файл

@ -24,6 +24,8 @@
namespace OCA\Polls\Db;
use OCP\AppFramework\Db\Entity;
/**
* @method integer getPollId()
* @method void setPollId(integer $value)

Просмотреть файл

@ -35,6 +35,7 @@ use OCP\Migration\IOutput;
/**
* Installation class for the polls app.
* Initial db creation
*/
class Version009000Date20171202105141 extends SimpleMigrationStep {
@ -121,7 +122,7 @@ class Version009000Date20171202105141 extends SimpleMigrationStep {
'notnull' => false,
]);
$table->addColumn('poll_option_text', Type::STRING, [
'notnull' => false, // maybe true?
'notnull' => false, // maybe true?
'length' => 256,
]);
$table->setPrimaryKey(['id']);
@ -219,7 +220,7 @@ class Version009000Date20171202105141 extends SimpleMigrationStep {
}
/**
* Copy date options
* Copy date options
*/
protected function copyDateOptions() {
$insert = $this->connection->getQueryBuilder();
@ -246,7 +247,7 @@ class Version009000Date20171202105141 extends SimpleMigrationStep {
}
/**
* Copy text options
* Copy text options
*/
protected function copyTextOptions() {
$insert = $this->connection->getQueryBuilder();
@ -273,7 +274,7 @@ class Version009000Date20171202105141 extends SimpleMigrationStep {
}
/**
* Copy date votes
* Copy date votes
*/
protected function copyDateVotes() {
$insert = $this->connection->getQueryBuilder();
@ -351,8 +352,8 @@ class Version009000Date20171202105141 extends SimpleMigrationStep {
->from('polls_options')
// ->where($queryFind->expr()->eq('poll_id', $pollId))
// ->andWhere($queryFind->expr()->eq('poll_option', $text));
->where('poll_id = "'. $pollId .'"')
->andWhere('poll_option_text ="' .$text .'"');
->where('poll_id = "' . $pollId . '"')
->andWhere('poll_option_text ="' . $text . '"');
$resultFind = $queryFind->execute();
$row = $resultFind->fetch();

Просмотреть файл

@ -21,9 +21,16 @@
*
*/
namespace OCA\Polls\Migration;
use OCP\DB\ISchemaWrapper;
use OCP\Migration\SimpleMigrationStep;
use OCP\Migration\IOutput;
/**
* Deleting unused tables 'polls_dts', 'polls_txts', 'polls_particip' and 'polls_particip_text'
* after migration in 'Version009000Date20171202105141.php'
*/
class Version009000Date20180202213017 extends SimpleMigrationStep {
/**
* @param IOutput $output

Просмотреть файл

@ -0,0 +1,90 @@
<?php
/**
* @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
*
* @author Joas Schilling <coding@schilljs.com>
*
* @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 <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Polls\Migration;
use Doctrine\DBAL\Exception\TableNotFoundException;
use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
use Doctrine\DBAL\Types\Type;
use OCP\DB\ISchemaWrapper;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\Migration\SimpleMigrationStep;
use OCP\Migration\IOutput;
/**
* Auto-generated migration step: Please modify to your needs!
* Adding column 'disallow_maybe' to table 'polls_events'
*/
class Version009000Date20180421050115 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
* @since 13.0.0
*/
public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
}
/**
* @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();
$table = $schema->getTable('polls_events');
$table->addColumn('disallow_maybe', Type::INTEGER, [
'notnull' => false,
'default' => 0
]);
return $schema;
}
/**
* @param IOutput $output
* @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
* @param array $options
* @since 13.0.0
*/
public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
}
}

Просмотреть файл

@ -0,0 +1,68 @@
<?php
namespace OCA\Polls\Migration;
use Doctrine\DBAL\Exception\TableNotFoundException;
use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
use Doctrine\DBAL\Types\Type;
use OCP\DB\ISchemaWrapper;
use OCP\IDBConnection;
use OCP\IConfig;
use OCP\Migration\SimpleMigrationStep;
use OCP\Migration\IOutput;
/**
* Adding timestamp to options table
*/
class Version009000Date20180501201949 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
* @since 13.0.0
*/
public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
}
/**
* @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();
$table = $schema->getTable('polls_options');
$table->addColumn('timestamp', Type::INTEGER, [
'notnull' => false,
'default' => 0
]);
return $schema;
}
/**
* @param IOutput $output
* @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
* @param array $options
* @since 13.0.0
*/
public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
}
}

49
package.json Normal file
Просмотреть файл

@ -0,0 +1,49 @@
{
"name": "polls",
"description": "Polls app for nextcloud",
"version": "0.9.0",
"author": "Rene Gieling",
"license": "AGPL-3.0",
"private": true,
"scripts": {
"live": "cross-env NODE_ENV=development webpack --progress --hot --config src/js/webpack.config.js --watch",
"dev": "cross-env NODE_ENV=development webpack --progress --hide-modules --config src/js/webpack.config.js --watch",
"build": "cross-env NODE_ENV=production webpack --progress --hide-modules --config src/js/webpack.config.js",
"test": "cross-env NODE_ENV=development webpack --progress --hide-modules --config src/js/webpack.config.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/nextcloud/polls.git"
},
"bugs": {
"url": "https://github.com/nextcloud/polls/issues"
},
"homepage": "https://github.com/nextcloud/polls#readme",
"dependencies": {
"axios": "^0.17.1",
"lodash": "^4.17.11",
"moment": "^2.22.1",
"nextcloud-vue": "^0.1.2",
"velocity-animate": "^1.5.1",
"vue": "^2.5.16"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
],
"devDependencies": {
"babel-core": "^6.26.0",
"babel-loader": "^7.1.5",
"babel-preset-env": "^1.7.0",
"babel-preset-stage-3": "^6.24.1",
"cross-env": "^5.2.0",
"css-loader": "^0.28.8",
"file-loader": "^1.1.6",
"node-sass": "^4.9.3",
"sass-loader": "^7.1.0",
"vue-loader": "^13.7.3",
"vue-template-compiler": "^2.5.17",
"webpack": "^3.12.0"
}
}

Двоичные данные
screenshots/edit-poll.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 81 KiB

После

Ширина:  |  Высота:  |  Размер: 53 KiB

Двоичные данные
screenshots/overview.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 128 KiB

После

Ширина:  |  Высота:  |  Размер: 74 KiB

Двоичные данные
screenshots/vote-mobile-landscape.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 36 KiB

После

Ширина:  |  Высота:  |  Размер: 37 KiB

Двоичные данные
screenshots/vote-mobile-portrait.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 41 KiB

После

Ширина:  |  Высота:  |  Размер: 38 KiB

Двоичные данные
screenshots/vote.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 136 KiB

После

Ширина:  |  Высота:  |  Размер: 42 KiB

521
src/js/Create.vue Normal file
Просмотреть файл

@ -0,0 +1,521 @@
<template>
<div id="create-poll" class="flex-column">
<div class="controls">
<breadcrump :index-page="indexPage" :intitle="title"></breadcrump>
<button @click="writePoll(poll.mode)" class="button btn primary"><span>{{ saveButtonTitle }}</span></button>
<a :href="indexPage" class="button">{{ t('polls', 'Cancel') }}</a>
<button @click="switchSidebar" class="button">
<span class="symbol icon-settings"></span>
</button>
</div>
<div class="polls-content">
<div class="workbench">
<div>
<h2>{{ t('polls', 'Poll description') }}</h2>
<label>{{ t('polls', 'Title') }}</label>
<input type="text" id="pollTitle" :class="{ error: titleEmpty }" v-model="poll.event.title">
<label>{{ t('polls', 'Description') }}</label>
<textarea id="pollDesc" v-model="poll.event.description" style="resize: vertical; width: 100%;"></textarea>
</div>
<div>
<h2>{{ t('polls', 'Vote options') }}</h2>
<div v-if="poll.mode == 'create'">
<input id="datePoll" v-model="poll.event.type" value="datePoll" type="radio" class="radio" :disabled="protect"/>
<label for="datePoll">{{ t('polls', 'Event schedule') }}</label>
<input id="textPoll" v-model="poll.event.type" value="textPoll" type="radio" class="radio" :disabled="protect"/>
<label for="textPoll">{{ t('polls', 'Text based') }}</label>
</div>
<transition-group
id="date-poll-list"
name="list"
tag="ul"
class="poll-table"
v-show="poll.event.type === 'datePoll'">
<li
is="date-poll-item"
v-for="(pollDate, index) in poll.options.pollDates"
:option="pollDate"
:key="pollDate.id"
@remove="poll.options.pollDates.splice(index, 1)">
</li>
</transition-group>
<date-picker-input @change="addNewPollDate"
v-bind="optionDatePicker"
style="width:100%"
v-show="poll.event.type === 'datePoll'"
confirm />
<transition-group
id="text-poll-list"
name="list"
tag="ul"
class="poll-table"
v-show="poll.event.type === 'textPoll'">
<li
is="text-poll-item"
v-for="(pollText, index) in poll.options.pollTexts"
:option="pollText"
:key="pollText.id"
@remove="poll.options.pollTexts.splice(index, 1)">
</li>
</transition-group>
<div id="poll-item-selector-text" v-show="poll.event.type === 'textPoll'" >
<input v-model="newPollText" @keyup.enter="addNewPollText()" :placeholder=" t('polls', 'Add option') ">
</div>
</div>
</div>
<div id="polls-sidebar" v-if="sidebar" class="flex-column detailsView scroll-container">
<div class="header">
<div class="pollInformation flex-column">
<user-div description="Owner" :user-id="poll.event.owner"></user-div>
<cloud-div v-bind:options="poll.event"></cloud-div>
</div>
</div>
<ul class="tabHeaders">
<li class="tabHeader selected" data-tabid="configurationsTabView" data-tabindex="0">
<a href="#">{{ t('polls', 'Configuration') }}</a>
</li>
</ul>
<div>
<div class="flex-wrap align-centered space-between" @click="protect=false" v-if="protect">
<span>{{ t('polls', 'Configuration is locked. Changing options may result in unwanted behaviour,but you can unlock it anyway.') }}</span>
<button> {{ t('polls', 'Unlock configuration ') }} </button>
</div>
<div id="configurationsTabView" class="tab configurationsTabView flex-wrap">
<div class="configBox flex-column" v-if="poll.mode =='edit'">
<label class="title">{{ t('polls', 'Poll type') }}</label>
<input id="datePoll" v-model="poll.event.type" value="datePoll" type="radio" class="radio" :disabled="protect"/>
<label for="datePoll">{{ t('polls', 'Event schedule') }}</label>
<input id="textPoll" v-model="poll.event.type" value="textPoll" type="radio" class="radio" :disabled="protect"/>
<label for="textPoll">{{ t('polls', 'Text based') }}</label>
</div>
<div class="configBox flex-column">
<label class="title">{{ t('polls', 'Poll configurations') }}</label>
<input :disabled="protect" id="disallowMaybe" v-model="poll.event.disallowMaybe"type="checkbox" class="checkbox" />
<label for="disallowMaybe">{{ t('polls', 'Disallow maybe vote') }}</label>
<input :disabled="protect" id="anonymous" v-model="poll.event.isAnonymous"type="checkbox" class="checkbox" />
<label for="anonymous">{{ t('polls', 'Anonymous poll') }}</label>
<input :disabled="protect" id="trueAnonymous" v-model="poll.event.fullAnonymous" v-show="poll.event.isAnonymous" type="checkbox" class="checkbox"/>
<label for="trueAnonymous" v-show="poll.event.isAnonymous">{{ t('polls', 'Hide user names for admin') }} </label>
<input :disabled="protect" id="expiration" v-model="poll.event.expiration" type="checkbox" class="checkbox" />
<label for="expiration">{{ t('polls', 'Expires') }}</label>
<date-picker-input v-bind="expirationDatePicker"
:disabled="protect"
v-model="poll.event.expirationDate"
v-show="poll.event.expiration"
style="width:170px"
confirm />
</div>
<div class="configBox flex-column">
<label class="title">{{ t('polls', 'Access') }}</label>
<input :disabled="protect" type="radio" v-model="poll.event.access" value="registered" id="private" class="radio"/>
<label for="private">{{ t('polls', 'Registered users only') }}</label>
<input :disabled="protect" type="radio" v-model="poll.event.access" value="hidden" id="hidden" class="radio"/>
<label for="hidden">{{ t('polls', 'hidden') }}</label>
<input :disabled="protect" type="radio" v-model="poll.event.access" value="public" id="public" class="radio"/>
<label for="public">{{ t('polls', 'Public access') }}</label>
<input :disabled="protect" type="radio" v-model="poll.event.access" value="select" id="select" class="radio"/>
<label for="select">{{ t('polls', 'Only shared') }}</label>
</div>
<share-div id="share-list" class="configBox flex-column oneline"
:placeholder="t('polls', 'Name of user or group')"
:active-shares="poll.shares"
v-show="poll.event.access === 'select'"
@add-share="addShare"
@remove-share="removeShare"/>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios';
import moment from 'moment';
import lodash from 'lodash';
import DatePollItem from './components/datePollItem.vue';
import TextPollItem from './components/textPollItem.vue';
export default {
name: 'create-poll',
components: {
'DatePollItem': DatePollItem,
'TextPollItem': TextPollItem,
},
data: function () {
return {
poll: {
mode: 'create',
comments: [],
votes: [],
shares: [],
event: {
id: 0,
hash: '',
type: 'datePoll',
title: '',
description: '',
owner:'',
created: '',
access: 'public',
expiration: false,
expirationDate: '',
expired: false,
isAnonymous: false,
fullAnonymous: false,
disallowMaybe: false,
},
options: {
pollDates: [],
pollTexts: []
}
},
lang: OC.getLanguage(),
localeData: moment.localeData(moment.locale(OC.getLocale())),
placeholder: '',
newPollDate: '',
newPollTime: '',
newPollText: '',
nextPollDateId: 1,
nextPollTextId: 1,
protect: false,
sidebar: false,
titleEmpty: false,
indexPage: '',
longDateFormat: moment.localeData().longDateFormat('L'),
dateTimeFormat: moment.localeData().longDateFormat('L') + ' ' + moment.localeData().longDateFormat('LT'),
expirationDatePicker: {
editable: true,
minuteStep: 1,
type: 'datetime',
format: moment.localeData().longDateFormat('L') + ' ' + moment.localeData().longDateFormat('LT'),
lang: OC.getLanguage(),
placeholder: t('polls', 'Expiration date')
},
optionDatePicker: {
editable: false,
minuteStep: 1,
type: 'datetime',
format: moment.localeData().longDateFormat('L') + ' ' + moment.localeData().longDateFormat('LT'),
lang: OC.getLanguage(),
placeholder: t('polls', 'Click to add a date')
}
}
},
created: function() {
this.indexPage = OC.generateUrl('apps/polls/');
var urlArray = window.location.pathname.split( '/' );
if (urlArray[urlArray.length - 1] === 'create') {
this.poll.event.owner = OC.getCurrentUser().uid;
} else {
this.loadPoll(urlArray[urlArray.length - 1])
this.protect = true;
this.poll.mode = 'edit';
};
if (window.innerWidth >1024) {
this.sidebar = true;
}
},
computed: {
langShort: function () {
return getLaguage()
},
title: function() {
if (this.poll.event.title === '') {
return t('polls','Create new poll');
} else {
return this.poll.event.title;
}
},
saveButtonTitle: function() {
if (this.poll.mode === 'edit') {
return t('polls', 'Update poll')
} else {
return t('polls', 'Create new poll')
}
}
},
watch: {
title () {
// only used when the title changes after page load
document.title = t('polls','Polls') + ' - ' + this.title;
}
},
methods: {
switchSidebar: function() {
this.sidebar = !this.sidebar;
},
addShare: function (item){
this.poll.shares.push(item);
},
removeShare: function (item){
this.poll.shares.splice(this.poll.shares.indexOf(item), 1);
},
addNewPollDate: function (newPollDate, newPollTime) {
if (newPollTime !== undefined) {
this.newPollDate = moment(newPollDate +' ' + newPollTime);
} else {
this.newPollDate = moment(newPollDate);
}
this.poll.options.pollDates.push({
id: this.nextPollDateId++,
timestamp: moment(newPollDate).unix(),
});
this.poll.options.pollDates = _.sortBy(this.poll.options.pollDates, 'timestamp');
},
addNewPollText: function () {
if (this.newPollText !== null & this.newPollText !== '') {
this.poll.options.pollTexts.push({
id: this.nextPollTextId++,
text: this.newPollText
});
}
this.newPollText = '';
},
writePoll: function (mode) {
if (mode !== '') {
this.poll.mode = mode;
}
if (this.poll.event.title.length === 0) {
this.titleEmpty = true;
} else {
this.titleEmpty = false;
axios.post(OC.generateUrl('apps/polls/write'), this.poll)
.then((response) => {
this.poll.mode = 'edit';
this.poll.event.hash = response.data.hash;
this.poll.event.id = response.data.id;
// window.location.href = OC.generateUrl('apps/polls/edit/' + this.poll.event.hash);
}, (error) => {
this.poll.event.hash = '';
console.log(this.poll.event.hash);
console.log(error.response);
});
}
},
loadPoll: function (hash) {
axios.get(OC.generateUrl('apps/polls/get/poll/' + hash))
.then((response) => {
this.poll = response.data.poll;
if (this.poll.event.expirationDate !== null) {
this.poll.event.expirationDate = new Date(moment.utc(this.poll.event.expirationDate))
} else {
this.poll.event.expirationDate = ''
}
if (this.poll.event.type === 'datePoll') {
var i;
for (i = 0; i < this.poll.options.pollTexts.length; i++) {
this.addNewPollDate(new Date(moment.utc(this.poll.options.pollTexts[i].text)))
}
this.poll.options.pollTexts = [];
}
}, (error) => {
this.poll.event.hash = '';
console.log(error.response);
});
}
}
}
</script>
<style lang="scss">
#content {
display: flex;
}
#create-poll {
width: 100%;
input.hasTimepicker {
width: 75px;
}
}
.controls {
display: flex;
/* flex-direction: row; */
/* flex-grow: 0; */
border-bottom: 1px solid var(--color-border);
position: fixed;
background: var(--color-main-background);
width: 100%;
height: 45px;
z-index: 1001;
.button, button {
flex-shrink: 0;
/* box-sizing: border-box; */
/* display: inline-block; */
height: 36px;
padding: 7px 10px;
border: 0;
background: transparent;
color: var(--color-text-lighter);
&.primary {
background: var(--color-primary);
color: var(--color-primary-text);
}
}
.breadcrump {
/* flex-shrink: 1; */
overflow: hidden;
min-width: 35px;
div.crumb:last-child {
flex-shrink: 1;
overflow: hidden;
> span {
flex-shrink: 1;
text-overflow: ellipsis;
}
}
}
}
.polls-content {
display: flex;
padding-top: 45px;
.workbench {
display: flex;
flex-grow: 1;
flex-wrap: wrap;
overflow: hidden;
> div {
min-width: 245px;
display: flex;
flex-direction: column;
flex-grow: 1;
padding: 8px;
}
}
}
input, textarea {
&.error {
border: 2px solid var(--color-error);
box-shadow: 1px 0 var(--border-radius) var(--color-box-shadow);
}
}
/* Transitions for inserting and removing list items */
.list-enter-active, .list-leave-active {
transition: all 0.5s ease;
}
.list-enter, .list-leave-to {
opacity: 0;
}
.list-move {
transition: transform 0.5s;
}
/* */
#poll-item-selector-text {
> input {
width: 100%
}
}
.poll-table {
>li {
display: flex;
align-items: center;
padding-left: 8px;
padding-right: 8px;
line-height: 2em;
min-height: 4em;
border-bottom: 1px solid var(--color-border);
overflow: hidden;
white-space: nowrap;
&:hover, &:active {
transition: var(--background-dark) 0.3s ease;
background-color: var(--color-loading-light); //$hover-color;
}
> div {
display: flex;
flex-grow: 1;
font-size: 1.2em;
opacity: 0.7;
white-space: normal;
padding-right: 4px;
&.avatar {
flex-grow: 0;
}
}
> div:nth-last-child(1) {
justify-content: center;
flex-grow: 0;
flex-shrink: 0;
}
}
}
button {
&.button-inline{
border: 0;
background-color: transparent;
}
}
.autocomplete {
position: relative;
}
#share-list {
.user-list {
max-height: 180px;
overflow: auto;
border: 1px solid var(--color-border);
margin-top: -3px;
border-top: none;
position: absolute;
background: var(--color-main-background);
z-index: 1;
width: 99%;
}
}
</style>

Просмотреть файл

@ -0,0 +1,29 @@
/* global Vue, oc_userconfig */
<template>
<div class="cloud">
<span class="expired" v-if="options.expired">{{ t('polls', 'Expired')}} </span>
<span class="open" v-if="options.expiration">{{ t('polls', 'Expires %n', 1, expirationdate) }}</span>
<span class="open" v-else>{{ t('polls', 'Expires never') }}</span>
<span class="information">{{ options.access }}</span>
<span class="information" v-if="options.isAnonymous"> {{ t('polls', 'Anonymous poll') }}</span>
<span class="information" v-if="options.fullAnonymous"> {{ t('polls', 'Usernames hidden to Owner') }}</span>
<span class="information" v-if="options.isAnonymous & !options.fullAnonymous"> {{ t('polls', 'Usernames visible to Owner') }}</span>
</div>
</template>
<script>
export default {
props: ['options', ],
computed: {
expirationdate: function() {
var date = moment(this.options.expirationDate, moment.localeData().longDateFormat('L')).fromNow();
return date
}
}
}
</script>
<style scoped>
</style>

Просмотреть файл

@ -0,0 +1,116 @@
/* global Vue, oc_userconfig */
<template>
<div class="userRow">
<div v-show="description" class="description">{{description}}</div>
<div class="avatar">
<img :src="avatarURL" :width="size" :height="size">
</div>
<div v-show="nothidden" class="avatar imageplaceholderseed" :data-username="userId" :data-displayname="computedDisplayName" data-seed="Poll users 1">
{{ computedDisplayName.toUpperCase().substr(0,1) }}
</div>
<div class="user">{{ computedDisplayName }}</div>
</div>
<div class="avatar imageplaceholderseed"</div>
</template>
<script>
export default {
props: {
userId: {
type: String,
default: OC.getCurrentUser().uid
},
displayName: {
type: String
},
size: {
type: Number,
default: 32
},
type: {
type: String,
default: 'user'
},
description: String
},
data: function () {
return {
nothidden: false,
}
},
computed: {
computedDisplayName: function () {
var value = this.displayName;
if (this.userId === OC.getCurrentUser().uid) {
value = OC.getCurrentUser().displayName;
} else {
if (!this.displayName) {
value = this.userId;
}
}
if (this.type === 'group') {
value = value + ' (' + t('polls','Group') +')';
}
return value;
},
avatarURL: function() {
if (this.userId === OC.getCurrentUser().uid) {
return OC.generateUrl(
'/avatar/{user}/{size}?v={version}',
{
user: OC.getCurrentUser().uid,
size: Math.ceil(this.size * window.devicePixelRatio),
version: oc_userconfig.avatar.version
})
} else {
return OC.generateUrl(
'/avatar/{user}/{size}',
{
user: this.userId,
size: Math.ceil(this.size * window.devicePixelRatio),
})
}
}
}
}
</script>
<style scoped>
.userRow {
display: flex;
flex-direction: row;
flex-grow: 1;
align-items: center;
margin-left: 0;
margin-top: 0;
}
.description {
opacity: 0.7;
margin-right: 4px;
}
.avatar {
height: 32px;
width: 32px;
}
.user {
margin-left: 8px;
opacity: 0.5;
flex-grow: 1;
}
.imageplaceholderseed {
height: 32px;
width: 32px;
background-color: rgb(185, 185, 185);
color: rgb(255, 255, 255);
font-weight: normal;
text-align: center;
line-height: 32px;
font-size: 17.6px;
}
</style>

Просмотреть файл

@ -0,0 +1,23 @@
<template>
<div class="breadcrump flex-row">
<div class="crumb svg">
<a :href="indexPage">
<img class="svg" :src="imagePath" alt="Home">
</a>
</div>
<div class="crumb svg last">
<span v-text="intitle" />
</div>
</div>
</template>
<script>
export default {
props: ['intitle','indexPage'],
data: function () {
return {
imagePath: OC.imagePath('core', 'places/home.svg'),
};
}
}
</script>

Просмотреть файл

@ -0,0 +1,22 @@
<template>
<li>
<div>{{option.timestamp | localFullDate}}</div>
<div>
<a @click="$emit('remove')" class="icon-delete"></a>
</div>
</li>
</template>
<script>
export default {
props: ['option'],
filters: {
localFullDate: function (timestamp) {
if (!timestamp) return '';
if (!moment(timestamp).isValid()) return 'Invalid Date';
if (timestamp < 999999999999) timestamp = timestamp *1000;
return moment(timestamp).format('llll');
}
}
}
</script>

Просмотреть файл

@ -0,0 +1,147 @@
<template>
<div>
<h2> {{ t('polls', 'Share with') }}</h2>
<div class="autocomplete">
<input class="shareWithField"
autocomplete="off"
type="text"
:placeholder="placeholder"
v-model="query"
@input="onInput"
@focus="onInput">
<transition-group v-show="openList" tag="ul" v-bind:css="false" class="user-list suggestion">
<li v-for="(item, index) in sortedSiteusers"
v-bind:key="item.displayName"
v-bind:data-index="index"
class="flex-row"
v-on:click="addShare(index, item)">
<user-div :user-id="item.id" :display-name="item.displayName" :type="item.type"></user-div>
</li>
</transition-group>
</div>
<transition-group tag="ul" v-bind:css="false" class="shared-list">
<li v-for="(item, index) in sortedShares"
v-bind:key="item.displayName"
v-bind:data-index="index"
class="flex-row">
<user-div :user-id="item.id" :display-name="item.displayName" :type="item.type"></user-div>
<div class="flex-row options">
<a @click="removeShare(index, item)" class="icon icon-delete svg delete-poll"></a>
</div>
</li>
</transition-group>
</div>
</template>
<script>
import axios from 'axios';
export default {
props: {
placeholder: {
type: String
},
activeShares: {
type: Array
}
},
data: function () {
return {
query: '',
users: [],
openList: false,
siteUsersLoaded: false,
siteUsersListOptions: {
getUsers: true,
getGroups: true,
skipUsers: [],
skipGroups: []
}
}
},
created: function() {
this.loadSiteUsers();
},
mounted: function() {
document.addEventListener('click', this.handleClickOutside)
},
destroyed: function() {
document.removeEventListener('click', this.handleClickOutside)
},
computed: {
filteredSiteusers: function() {
var vm = this;
return this.users.filter(function (item) {
return item.displayName.toLowerCase().indexOf(vm.query.toLowerCase()) !== -1
})
},
sortedSiteusers: function() {
return this.filteredSiteusers.sort(this.sortByDisplayname);
},
sortedShares: function() {
return this.activeShares.sort(this.sortByDisplayname);
}
},
methods: {
addShare: function (index, item){
this.$emit('add-share', item);
this.users.splice(this.users.indexOf(item), 1);
},
removeShare: function (index, item){
this.$emit('remove-share', item);
this.users.push(item);
},
loadSiteUsers: function () {
var vm = this;
vm.siteUsersListOptions.skipUsers = [];
vm.siteUsersListOptions.skipGroups = [];
this.activeShares.forEach(function(item) {
if (item.type === 'group') {
vm.siteUsersListOptions.skipGroups.push(item.id)
} else if (item.type === 'user') {
vm.siteUsersListOptions.skipUsers.push(item.id)
}
});
axios.post(OC.generateUrl('apps/polls/get/siteusers'), this.siteUsersListOptions)
.then((response) => {
this.users = response.data.siteusers;
}, (error) => {
console.log(error.response);
});
},
onInput: function() {
this.loadSiteUsers();
if (this.query !== '') {
this.openList = true;
}
},
sortByDisplayname: function (a, b) {
if (a.displayName.toLowerCase() < b.displayName.toLowerCase()) return -1;
if (a.displayName.toLowerCase() > b.displayName.toLowerCase()) return 1;
return 0;
},
handleClickOutside: function(evt) {
if (!this.$el.contains(evt.target)) {
this.openList = false;
}
}
}
}
</script>

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше